diff --git a/COPYING b/COPYING index 4d2513e..e114d20 100644 --- a/COPYING +++ b/COPYING @@ -1,3 +1,5 @@ The code of the cmph library is dual licensed under the LGPL version 2 and MPL 1.1 licenses. Please refer to the LGPL-2 and MPL-1.1 files in the repository for the full description of each of the licenses. + +For cxxmph, the files stringpiece.h and MurmurHash2 are covered by the BSD and MIT licenses, respectively. diff --git a/acinclude.m4 b/acinclude.m4 index b49a92b..bde7628 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -12,6 +12,82 @@ AC_DEFUN([AC_CHECK_SPOON], [ AC_MSG_RESULT(no) ]) +dnl Check for baseline language coverage in the compiler for the C++0x standard. +# AC_COMPILE_STDCXX_OX +AC_DEFUN([AC_COMPILE_STDCXX_0X], [ + AC_CACHE_CHECK(if compiler supports C++0x features without additional flags, + ac_cv_cxx_compile_cxx0x_native, + [AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([ + #include + #include + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + ],, + ac_cv_cxx_compile_cxx0x_native=yes, ac_cv_cxx_compile_cxx0x_native=no) + AC_LANG_RESTORE + ]) + + AC_CACHE_CHECK(if compiler supports C++0x features with -std=c++0x, + ac_cv_cxx_compile_cxx0x_cxx, + [AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -std=c++0x" + AC_TRY_COMPILE([ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b;],, + ac_cv_cxx_compile_cxx0x_cxx=yes, ac_cv_cxx_compile_cxx0x_cxx=no) + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE + ]) + + AC_CACHE_CHECK(if compiler supports C++0x features with -std=gnu++0x, + ac_cv_cxx_compile_cxx0x_gxx, + [AC_LANG_SAVE + AC_LANG_CPLUSPLUS + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -std=gnu++0x" + AC_TRY_COMPILE([ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b;],, + ac_cv_cxx_compile_cxx0x_gxx=yes, ac_cv_cxx_compile_cxx0x_gxx=no) + CXXFLAGS="$ac_save_CXXFLAGS" + AC_LANG_RESTORE + ]) + + if test "$ac_cv_cxx_compile_cxx0x_native" = yes || + test "$ac_cv_cxx_compile_cxx0x_cxx" = yes || + test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then + AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ]) + fi +]) + dnl By default, many hosts won't let programs access large files; dnl one must use special compiler options to get large-file access to work. dnl For more details about this brain damage please see: diff --git a/configure.ac b/configure.ac index b749ad3..172b02f 100644 --- a/configure.ac +++ b/configure.ac @@ -36,7 +36,17 @@ CFLAGS="-Wall -Werror" AC_PROG_CXX AC_ENABLE_CXXMPH if test x$cxxmph = xtrue; then - AC_SUBST([CXXMPH], "cxxmph") + AC_COMPILE_STDCXX_0X + if test x$ac_cv_cxx_compile_cxx0x_native = "xno"; then + if test x$ac_cv_cxx_compile_cxx0x_cxx = "xyes"; then + CXXFLAGS="$CXXFLAGS -std=c++0x" + elif test x$ac_cv_cxx_compile_cxx0x_gxx = "xyes"; then + CXXFLAGS="$CXXFLAGS -std=gnu++0x" + else + AC_MSG_ERROR("cxxmph demands a working c++0x compiler.") + fi + fi + AC_SUBST([CXXMPH], "cxxmph") fi AC_CHECK_SPOON diff --git a/cxxmph/Makefile.am b/cxxmph/Makefile.am index c02e1c9..04a90fe 100644 --- a/cxxmph/Makefile.am +++ b/cxxmph/Makefile.am @@ -1,6 +1,5 @@ -AM_CXXFLAGS='-std=c++0x' TESTS = $(check_PROGRAMS) -check_PROGRAMS = mph_map_test mph_index_test # trigraph_test +check_PROGRAMS = mph_map_test mph_index_test noinst_PROGRAMS = bm_index bm_map bin_PROGRAMS = cxxmph lib_LTLIBRARIES = libcxxmph.la @@ -15,9 +14,6 @@ mph_map_test_SOURCES = mph_map_test.cc mph_index_test_LDADD = libcxxmph.la mph_index_test_SOURCES = mph_index_test.cc -# trigraph_test_LDADD = libcxxmph.la -# trigraph_test_SOURCES = trigraph_test.cc - bm_index_LDADD = libcxxmph.la bm_index_SOURCES = bm_common.cc bm_index.cc diff --git a/cxxmph/URLS1k b/cxxmph/URLS1k deleted file mode 100644 index a7fa160..0000000 --- a/cxxmph/URLS1k +++ /dev/null @@ -1,256 +0,0 @@ -http://100_fundos.zip.net/arch2004-03-28_2004-04-03.html -http://2d-galois.flogbrasil.terra.com.br/robots.txt -http://2littledoves.fotolog.terra.com.br/ -http://3336.fotoblog.uol.com.br/photo20040305160808.html -http://3reis.weblogger.terra.com.br/robots.txt -http://4track.blogger.com.br/robots.txt -http://abelrezende.flogbrasil.terra.com.br/tops.php -http://abelsidney.vilabol.uol.com.br/cro91.html -http://abelsidney.vilabol.uol.com.br/rede8.html -http://abobaninha.weblogger.terra.com.br/200302_abobaninha_arquivo.htm -http://abpblh.org.br/ -http://abvo.org.br/up.htm -http://acervocorrs.vilabol.uol.com.br/main071.html -http://acid.weblogger.terra.com.br/2883612 -http://actionblog.zip.net/robots.txt -http://ademir.alfa.ind.br/entrada.htm -http://adrianorp.zip.net/listArchive.html -http://adriele.flogbrasil.terra.com.br/tops.php -http://aflordapele.blogger.com.br/2004_04_01_archive.html -http://afoganao.flogbrasil.terra.com.br/estados.php -http://aftertonight.blogger.com.br/robots.txt -http://agoraevidareal.blogger.com.br/2004_05_01_archive.html -http://ahafotolog.fotoblog.uol.com.br/photo20040327172209.html -http://ahmuleke.fotoblog.uol.com.br/photo20040420143013.html -http://aicomomexe.weblogger.terra.com.br/200401_aicomomexe_arquivo.htm -http://aiehdose.blig.ig.com.br/ -http://aimeudedo.zip.net/arch2004-05-09_2004-05-15.html -http://airtonfilho.pcc.usp.br/curriculum.htm -http://akane_hoshi.blogger.com.br/ -http://akinyele.letras.terra.com.br/ -http://al-green.letras.terra.com.br/ -http://albaligia.fotoblog.uol.com.br/photo20040501225132.html -http://alemaosalsicha.flogbrasil.terra.com.br/robots.txt -http://alessandrafleury.blogger.com.br/ -http://aliatras.weblogger.terra.com.br/www.marisurf.weblogger.com.br -http://alissondantas.flogbrasil.terra.com.br/ -http://allcolix.flogbrasil.terra.com.br/estados.php -http://allmylove.fotolog.terra.com.br/ -http://allyouneedisnats.flogbrasil.terra.com.br/gold_comprar.php -http://almostnaked.weblogger.terra.com.br/4674105 -http://alwaystogether.weblogger.terra.com.br/200310_alwaystogether_arquivo.htm -http://amanda-sc.fotoblog.uol.com.br/photo20040413082243.html -http://amiga-kelly.flogbrasil.terra.com.br/robots.txt -http://amigasbh.fotolog.terra.com.br/gold_comprar.php -http://amigooo.weblogger.terra.com.br/14534470 -http://amiruhama.vilabol.uol.com.br/celina_tuesmeudeus.html -http://amotheoc.fotolog.terra.com.br/tops_meninos.php -http://ana.fla.fotoblog.uol.com.br/photo20040512080652.html -http://anala.fotolog.terra.com.br/tops.php -http://anasps-sp.sites.uol.com.br/birth5.htm -http://anastm.fotolog.terra.com.br/tops_meninos.php -http://andandonasnuvens.weblogger.terra.com.br/3233568 -http://andercb.fotolog.terra.com.br/tops_meninas.php -http://andre.bac.sites.uol.com.br/equipamentos.htm -http://andrezadepp.blig.ig.com.br/ -http://andrezavega.vilabol.uol.com.br/amigo.html -http://aneeee.flogbrasil.terra.com.br/tops.php -http://angelsusy.flogbrasil.terra.com.br/robots.txt -http://ani2.weblogger.terra.com.br/ -http://aninha_space_for_me.zip.net/robots.txt -http://aninhacerqueira.flogbrasil.terra.com.br/gold.php -http://aninhafuracao.weblogger.terra.com.br/200310_aninhafuracao_arquivo.htm -http://aninhaumverdadeiroamor.weblogger.com.br/ -http://anjosdanados.flogbrasil.terra.com.br/tops.php -http://anjosklb.blogger.com.br/ -http://annafernandes.flogbrasil.terra.com.br/gold.php -http://annarafaella.fotolog.terra.com.br/ -http://anninha25.weblogger.terra.com.br/200307_anninha25_arquivo.htm -http://anninhaturbo2ponto4.flogbrasil.terra.com.br/ -http://anonimoincognito.flogbrasil.terra.com.br/tops_estados.php -http://answerbook.ime.usp.br:8888/ab2 -http://antonio-bz.flogbrasil.terra.com.br/tops_estados.php -http://apae.weblogger.terra.com.br/9718679 -http://aparelho-de-dvd-pioneer-dvr-57h.ofertas-comprar-vender.com.br/robots.txt -http://apoio.weblogger.terra.com.br/200404_apoio_arquivo.htm -http://arabella.bella.blog.uol.com.br/arch2004-04-11_2004-04-17.html -http://art-popular.cifras.art.br/cifra_16277.html -http://artcanal.com.br/q.html -http://artemiro.fotolog.terra.com.br/ -http://aruba.com.br/ -http://aslilis.flogbrasil.terra.com.br/tops_meninas.php -http://asmaluketxxx.blig.ig.com.br/robots.txt -http://asprincesinhas.weblogger.terra.com.br/robots.txt -http://assespro.org.br/fotosrs.asp -http://asveredas.com.br/gal_amigos005.html -http://atrevidamqn.fotolog.terra.com.br/tops.php -http://avitchas.blogger.com.br/ -http://ayegui-estella.spain.ehotelfinder.net/ -http://b0caum.flogbrasil.terra.com.br/tops_estados.php -http://babasidera.fotolog.terra.com.br/tops_meninos.php -http://babebibobu.blogger.com.br/robots.txt -http://babifiles.zip.net/arch2004-04-04_2004-04-10.html -http://babisenena.blogger.com.br/2004_03_14_archive.html -http://babixmaisa.flogbrasil.terra.com.br/tops_meninas.php -http://bacardigirls.flogbrasil.terra.com.br/tops.php -http://backstreet-boys.weblogger.terra.com.br/5478915 -http://backstreet.hpg.com.br/midis.html -http://bagagera.flogbrasil.terra.com.br/gold.php -http://balila.flogbrasil.terra.com.br/gold.php -http://balletclassico.fotolog.terra.com.br/tops.php -http://bambambm.fotolog.terra.com.br/gold.php -http://bandamusicalbox.vilabol.uol.com.br/MUSICALBOX-Marcelo.htm -http://barbaridades.weblogger.terra.com.br/2353538 -http://barbyssa.fotolog.terra.com.br/ -http://bartsimpson-sp.fotoblog.uol.com.br/links.html -http://batatadoce.com.br/recomendamos -http://bazinha21.fotolog.terra.com.br/ -http://bazinhamartins.fotolog.terra.com.br/tops_meninas.php -http://beavera.fotolog.terra.com.br/tops.php -http://bebecrazy.flogbrasil.terra.com.br/tops.php -http://beberzao.flogbrasil.terra.com.br/tops.php -http://becaelilo.flogbrasil.terra.com.br/tops_adulto.php -http://beck.cifras.art.br/cifra_516.html -http://bego-90.flogbrasil.terra.com.br/gold.php -http://belacapelinha.cantaminas.com.br/ -http://belluchesi.weblogger.terra.com.br/200403_belluchesi_arquivo.htm -http://belo.letras.terra.com.br/ -http://belthatha.flogbrasil.terra.com.br/tops.php -http://bemestar.weblogger.terra.com.br/200302_bemestar_arquivo.htm -http://bessa.flogbrasil.terra.com.br/tops_meninos.php -http://bestoes.flogbrasil.terra.com.br/gold.php -http://betooow.flogbrasil.terra.com.br/tops.php -http://betoosurf.flogbrasil.terra.com.br/contato.php -http://bfr.fotolog.terra.com.br/robots.txt -http://bialoka.blig.ig.com.br/robots.txt -http://biazinha-labruna.flogbrasil.terra.com.br/tops_estados.php -http://bibizinha_lindinha.zip.net/arch2004-03-07_2004-03-13.html -http://billiefabruz.blogger.com.br/robots.txt -http://bjokera.flogbrasil.terra.com.br/ -http://bjork.com.br/indexw.htm -http://bl3.com.br/windreg03_gzero.htm -http://blaze.cifras.art.br/cifra_14186.html -http://bleach.ofertas-comprar-vender.com.br/ -http://blog-da-pri.weblogger.terra.com.br/200402_blog-da-pri_arquivo.htm -http://blogdababi.zip.net/arch2004-04-04_2004-04-10.html -http://blogdadee.weblogger.terra.com.br/200311_blogdadee_arquivo.htm -http://blogdaeve.weblogger.terra.com.br/200405_blogdaeve_arquivo.htm -http://blogdalidi.weblogger.terra.com.br/200310_blogdalidi_arquivo.htm -http://blogdocaralho.weblogger.terra.com.br/12647435 -http://blogdosfalcatruas.blig.com.br/robots.txt -http://bloglife.blogger.com.br/robots.txt -http://blogsdanoite.blogger.com.br/2004_04_01_archive.html -http://bolados.weblogger.com.br/robots.txt -http://bomarley.vilabol.uol.com.br/XO.html -http://botlily.fotolog.terra.com.br/tops.php -http://boys_lie.weblogger.terra.com.br/200405_boys_lie_arquivo.htm -http://brabuletatas.turmadobar.com.br/ -http://brainwave.weblogger.terra.com.br/200403_brainwave_arquivo.htm -http://brasileiromestizo.blogger.com.br/2003_07_01_archive.html -http://brazzie.zip.net/arch2002-11-01_2002-11-15.html -http://bribokinha.fotolog.terra.com.br/ -http://bricinhu.fotolog.terra.com.br/tops_meninos.php -http://brink.fotolog.terra.com.br/tops.php -http://brox.flogbrasil.terra.com.br/tops_meninas.php -http://brozmania.blogger.com.br/robots.txt -http://bruninhabebe.fotolog.terra.com.br/tops_adulto.php -http://brustamato.flogbrasil.terra.com.br/robots.txt -http://bruuuhh.fotolog.terra.com.br/tops_meninos.php -http://bruxinhafofinha.fotolog.terra.com.br/ -http://bruxinhawiccana.flogbrasil.terra.com.br/tops_meninos.php -http://bubuzinhu.flogbrasil.terra.com.br/tops_meninos.php -http://bud.weblogger.terra.com.br/20021124_bud_arquivo.htm -http://bully.sites.uol.com.br/"+Arrws[a]+" -http://bulmarta.fotolog.terra.com.br/tops.php -http://bunitu.fotolog.terra.com.br/robots.txt -http://ca-brevi.flogbrasil.terra.com.br/tops_meninos.php -http://cabanasarua.com.br/foto_visitante_44.htm -http://cacabolhao.fotoblog.uol.com.br/photo20040423114747.html -http://cacahzinhaaa.flogbrasil.terra.com.br/estados.php -http://cadastro.brfree.com.br/ -http://cadelasemacao.vila.bol.com.br/ -http://cadenzza.sites.uol.com.br/george.htm -http://caen.france.qwhotels.com/fullindex.phtml -http://cahieursdupositif.weblogger.terra.com.br/8772980 -http://caio.munhoz.fotoblog.uol.com.br/photo20040321172822.html -http://caleo.flogbrasil.terra.com.br/tops_meninas.php -http://camera-c-730.ofertas-comprar-vender.com.br/robots.txt -http://camera-digital-aiptek-dvii.ofertas-comprar-vender.com.br/robots.txt -http://camera-digital-c-700-ultra-zoom.ofertas-comprar-vender.com.br/robots.txt -http://camera-digital-pocket-cam-classic.ofertas-comprar-vender.com.br/robots.txt -http://camera-hp-photosmart-620.ofertas-comprar-vender.com.br/robots.txt -http://camera-pentax-ist-d-slr.ofertas-comprar-vender.com.br/robots.txt -http://cameras-d510.ofertas-comprar-vender.com.br/robots.txt -http://cameras-digitais-sony-fd-91.ofertas-comprar-vender.com.br/robots.txt -http://cameras-kodak-dx-3600.ofertas-comprar-vender.com.br/robots.txt -http://camilacba.fotolog.terra.com.br/ -http://camilafelicia.flogbrasil.terra.com.br/gold.php -http://camilajuliana.fotoblog.uol.com.br/photo20040504113702.html -http://camisa-do-barbarense.ofertas-comprar-vender.com.br/ -http://campospalomino.fotoblog.uol.com.br/photo20040507120841.html -http://canal-pira.vila.bol.com.br/flagrantes.htm -http://canga.fotolog.terra.com.br/robots.txt -http://cantinhodoale.flogbrasil.terra.com.br/tops_meninas.php -http://caosfilosoficos.blogger.com.br/2004_02_01_archive.html -http://carlinhus.flogbrasil.terra.com.br/tops_adulto.php -http://carol-ferrari.fotoblog.uol.com.br/photo20040429144714.html -http://carol-ju.fotolog.terra.com.br/tops.php -http://carol-meiguinha.fotolog.terra.com.br/ -http://carolapezzatto.flogbrasil.terra.com.br/tops_meninos.php -http://carolzinhaas.flogbrasil.terra.com.br/robots.txt -http://carolzinhabacaninha.flogbrasil.terra.com.br/ -http://carolzita.logme.ig.com.br/robots.txt -http://caronte.fapergs.tche.br/res1001.htm -http://casadananda.weblogger.terra.com.br/200202_casadananda_arquivo.htm -http://cassia-eller.cifras.art.br/cifra_4838.html -http://catarinavianna.fotolog.terra.com.br/robots.txt -http://catguy.fotoblog.uol.com.br/photo20040322115139.html -http://catite.fotolog.terra.com.br/tops.php -http://catolicos.weblogger.com.br/robots.txt -http://caxias.weblogger.com.br/ -http://ccramalho.flogbrasil.terra.com.br/ -http://ccs.pontagrossa.pr.gov.br/ -http://cd-de-garbage-collection.ofertas-comprar-vender.com.br/ -http://cd-de-oficial-u2.ofertas-comprar-vender.com.br/ -http://cd-do-iron-maiden-and-and-fear-of-the-dark.ofertas-comprar-vender.com.br/robots.txt -http://cd-do-u2-one.ofertas-comprar-vender.com.br/robots.txt -http://cd-player-deh-p7500mp.ofertas-comprar-vender.com.br/ -http://cd-player-para-carro-fh-p4400.ofertas-comprar-vender.com.br/ -http://cd-player-sony-cdxc710.ofertas-comprar-vender.com.br/ -http://cedaspy.com.br/index.php -http://celina.fotolog.terra.com.br/tops_meninas.php -http://celulares-ciemems-cl50.ofertas-comprar-vender.com.br/ -http://celulares-fisio-820.ofertas-comprar-vender.com.br/ -http://celulares-sendo-j530.ofertas-comprar-vender.com.br/ -http://celulares-tel-me--2.ofertas-comprar-vender.com.br/robots.txt -http://cha_angel.weblogger.terra.com.br/ -http://chacota.flogbrasil.terra.com.br/tops_meninos.php -http://chakilla.zip.net/arch2004-04-11_2004-04-17.html -http://chalupadegilliatt.weblogger.terra.com.br/robots.txt -http://charlie-brown-jr.cifras.art.br/cifra_738.html -http://chegadesapo.blogger.com.br/ -http://chgiacomini.fotoblog.uol.com.br/links.html -http://chicolustosa.zip.net/arch2004-05-01_2004-05-15.html -http://chinfra.blogger.com.br/2003_08_17_archive.html -http://cholke.blig.ig.com.br/robots.txt -http://cicinhaa.flogbrasil.terra.com.br/contato.php -http://cidoloko.flogbrasil.terra.com.br/tops.php -http://cifranet.org/robots.txt -http://cigabruca.fotoblog.uol.com.br/photo20040514173549.html -http://cirilobresolin.weblogger.terra.com.br/16237735 -http://cissadantas.flogbrasil.terra.com.br/contato.php -http://cla_loka.zip.net/arch2004-03-01_2004-03-15.html -http://clanogueira.fotoblog.uol.com.br/photo20040420181756.html -http://clari.viana.fotoblog.uol.com.br/photo20040413170749.html -http://clarinhakk.flogbrasil.terra.com.br/gold_comprar.php -http://claudiajabour8.fotoblog.uol.com.br/photo20040411144511.html -http://clicker.flogbrasil.terra.com.br/gold.php -http://clodoaldopb.vila.bol.com.br/historiasovasorachado.html -http://clubedopairico.com.br/diario_05_11-0404.html -http://cmurca.fotoblog.uol.com.br/photo20040413184113.html -http://cobralillo.weblogger.terra.com.br/200404_cobralillo_arquivo.htm -http://coisasdoleo.weblogger.terra.com.br/20030330_coisasdoleo_arquivo.htm -http://coise-saint-jean-pied-gauthier.france.ehotelfinder.net/ -http://colombia.flogbrasil.terra.com.br/tops.php -http://comcharisma.weblogger.com.br/ -http://comediante.flogbrasil.terra.com.br/tops_meninas.php diff --git a/src/MurmurHash2.h b/src/MurmurHash2.h deleted file mode 100644 index 52d015a..0000000 --- a/src/MurmurHash2.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef __CXXMPH_MURMUR_HASH2__ -#define __CXXMPH_MURMUR_HASH2__ - -//----------------------------------------------------------------------------- -// MurmurHash2, by Austin Appleby - -// Note - This code makes a few assumptions about how your machine behaves - - -// 1. We can read a 4-byte value from any address without crashing -// 2. sizeof(int) == 4 - -// And it has a few limitations - - -// 1. It will not work incrementally. -// 2. It will not produce the same results on little-endian and big-endian -// machines. - -unsigned int MurmurHash2 ( const void * key, int len, unsigned int seed ) -{ - // 'm' and 'r' are mixing constants generated offline. - // They're not really 'magic', they just happen to work well. - - const unsigned int m = 0x5bd1e995; - const int r = 24; - - // Initialize the hash to a 'random' value - - unsigned int h = seed ^ len; - - // Mix 4 bytes at a time into the hash - - const unsigned char * data = (const unsigned char *)key; - - while(len >= 4) - { - unsigned int k = *(unsigned int *)data; - - k *= m; - k ^= k >> r; - k *= m; - - h *= m; - h ^= k; - - data += 4; - len -= 4; - } - - // Handle the last few bytes of the input array - - switch(len) - { - case 3: h ^= data[2] << 16; - case 2: h ^= data[1] << 8; - case 1: h ^= data[0]; - h *= m; - }; - - // Do a few final mixes of the hash to ensure the last few - // bytes are well-incorporated. - - h ^= h >> 13; - h *= m; - h ^= h >> 15; - - return h; -} - -#endif // __CXXMPH_MURMUR_HASH2__ diff --git a/src/jenkins_hash.c b/src/jenkins_hash.c index bd65ff6..65cdff9 100644 --- a/src/jenkins_hash.c +++ b/src/jenkins_hash.c @@ -7,9 +7,8 @@ #include #include -// #define DEBUG +//#define DEBUG #include "debug.h" -#include "MurmurHash2.h" #define hashsize(n) ((cmph_uint32)1<<(n)) #define hashmask(n) (hashsize(n)-1) @@ -88,8 +87,8 @@ acceptable. Do NOT use for cryptographic purposes. jenkins_state_t *jenkins_state_new(cmph_uint32 size) //size of hash table { jenkins_state_t *state = (jenkins_state_t *)malloc(sizeof(jenkins_state_t)); + DEBUGP("Initializing jenkins hash\n"); state->seed = ((cmph_uint32)rand() % size); - DEBUGP("Initializied jenkins hash with seed %d\n", state->seed); return state; } void jenkins_state_destroy(jenkins_state_t *state) @@ -100,67 +99,63 @@ void jenkins_state_destroy(jenkins_state_t *state) static inline void __jenkins_hash_vector(cmph_uint32 seed, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes) { - int i; - for (i = 0; i < 3; ++i) { - hashes[i] = MurmurHash2(k, keylen, seed + i); + register cmph_uint32 len, length; + + /* Set up the internal state */ + length = keylen; + len = length; + hashes[0] = hashes[1] = 0x9e3779b9; /* the golden ratio; an arbitrary value */ + hashes[2] = seed; /* the previous hash value - seed in our case */ + + /*---------------------------------------- handle most of the key */ + while (len >= 12) + { + hashes[0] += ((cmph_uint32)k[0] +((cmph_uint32)k[1]<<8) +((cmph_uint32)k[2]<<16) +((cmph_uint32)k[3]<<24)); + hashes[1] += ((cmph_uint32)k[4] +((cmph_uint32)k[5]<<8) +((cmph_uint32)k[6]<<16) +((cmph_uint32)k[7]<<24)); + hashes[2] += ((cmph_uint32)k[8] +((cmph_uint32)k[9]<<8) +((cmph_uint32)k[10]<<16)+((cmph_uint32)k[11]<<24)); + mix(hashes[0],hashes[1],hashes[2]); + k += 12; len -= 12; } -// register cmph_uint32 len, length; -// -// /* Set up the internal state */ -// length = keylen; -// len = length; -// hashes[0] = hashes[1] = 0x9e3779b9; /* the golden ratio; an arbitrary value */ -// hashes[2] = seed; /* the previous hash value - seed in our case */ -// -// /*---------------------------------------- handle most of the key */ -// while (len >= 12) -// { -// hashes[0] += ((cmph_uint32)k[0] +((cmph_uint32)k[1]<<8) +((cmph_uint32)k[2]<<16) +((cmph_uint32)k[3]<<24)); -// hashes[1] += ((cmph_uint32)k[4] +((cmph_uint32)k[5]<<8) +((cmph_uint32)k[6]<<16) +((cmph_uint32)k[7]<<24)); -// hashes[2] += ((cmph_uint32)k[8] +((cmph_uint32)k[9]<<8) +((cmph_uint32)k[10]<<16)+((cmph_uint32)k[11]<<24)); -// mix(hashes[0],hashes[1],hashes[2]); -// k += 12; len -= 12; -// } -// -// /*------------------------------------- handle the last 11 bytes */ -// hashes[2] += length; -// switch(len) /* all the case statements fall through */ -// { -// case 11: -// hashes[2] +=((cmph_uint32)k[10]<<24); -// case 10: -// hashes[2] +=((cmph_uint32)k[9]<<16); -// case 9 : -// hashes[2] +=((cmph_uint32)k[8]<<8); -// /* the first byte of hashes[2] is reserved for the length */ -// case 8 : -// hashes[1] +=((cmph_uint32)k[7]<<24); -// case 7 : -// hashes[1] +=((cmph_uint32)k[6]<<16); -// case 6 : -// hashes[1] +=((cmph_uint32)k[5]<<8); -// case 5 : -// hashes[1] +=(cmph_uint8) k[4]; -// case 4 : -// hashes[0] +=((cmph_uint32)k[3]<<24); -// case 3 : -// hashes[0] +=((cmph_uint32)k[2]<<16); -// case 2 : -// hashes[0] +=((cmph_uint32)k[1]<<8); -// case 1 : -// hashes[0] +=(cmph_uint8)k[0]; -// /* case 0: nothing left to add */ -// } -// -// mix(hashes[0],hashes[1],hashes[2]); + + /*------------------------------------- handle the last 11 bytes */ + hashes[2] += length; + switch(len) /* all the case statements fall through */ + { + case 11: + hashes[2] +=((cmph_uint32)k[10]<<24); + case 10: + hashes[2] +=((cmph_uint32)k[9]<<16); + case 9 : + hashes[2] +=((cmph_uint32)k[8]<<8); + /* the first byte of hashes[2] is reserved for the length */ + case 8 : + hashes[1] +=((cmph_uint32)k[7]<<24); + case 7 : + hashes[1] +=((cmph_uint32)k[6]<<16); + case 6 : + hashes[1] +=((cmph_uint32)k[5]<<8); + case 5 : + hashes[1] +=(cmph_uint8) k[4]; + case 4 : + hashes[0] +=((cmph_uint32)k[3]<<24); + case 3 : + hashes[0] +=((cmph_uint32)k[2]<<16); + case 2 : + hashes[0] +=((cmph_uint32)k[1]<<8); + case 1 : + hashes[0] +=(cmph_uint8)k[0]; + /* case 0: nothing left to add */ + } + + mix(hashes[0],hashes[1],hashes[2]); } cmph_uint32 jenkins_hash(jenkins_state_t *state, const char *k, cmph_uint32 keylen) { -// cmph_uint32 hashes[3]; -// __jenkins_hash_vector(state->seed, k, keylen, hashes); -// return hashes[2]; - cmph_uint32 a, b, c; + cmph_uint32 hashes[3]; + __jenkins_hash_vector(state->seed, k, keylen, hashes); + return hashes[2]; +/* cmph_uint32 a, b, c; cmph_uint32 len, length; // Set up the internal state @@ -214,6 +209,7 @@ cmph_uint32 jenkins_hash(jenkins_state_t *state, const char *k, cmph_uint32 keyl /// report the result return c; + */ } void jenkins_hash_vector_(jenkins_state_t *state, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes)