1
Fork 0

Merge branch 'cxxmph' of ssh://cmph.git.sourceforge.net/gitroot/cmph/cmph into cxxmph

This commit is contained in:
Davi de Castro Reis 2011-11-05 15:06:06 -02:00
commit d3b3b3dfba
7 changed files with 145 additions and 390 deletions

View File

@ -1,3 +1,5 @@
The code of the cmph library is dual licensed under the LGPL version 2 and MPL 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 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 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.

View File

@ -12,6 +12,82 @@ AC_DEFUN([AC_CHECK_SPOON], [
AC_MSG_RESULT(no) 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 <unorderd_map>
#include <unorderd_set>
template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
typedef check<check<bool>> 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 <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
typedef check<check<bool>> 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 <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
typedef check<check<bool>> 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 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 one must use special compiler options to get large-file access to work.
dnl For more details about this brain damage please see: dnl For more details about this brain damage please see:

View File

@ -36,6 +36,16 @@ CFLAGS="-Wall -Werror"
AC_PROG_CXX AC_PROG_CXX
AC_ENABLE_CXXMPH AC_ENABLE_CXXMPH
if test x$cxxmph = xtrue; then if test x$cxxmph = xtrue; then
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") AC_SUBST([CXXMPH], "cxxmph")
fi fi

View File

@ -1,6 +1,5 @@
AM_CXXFLAGS='-std=c++0x'
TESTS = $(check_PROGRAMS) 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 noinst_PROGRAMS = bm_index bm_map
bin_PROGRAMS = cxxmph bin_PROGRAMS = cxxmph
lib_LTLIBRARIES = libcxxmph.la 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_LDADD = libcxxmph.la
mph_index_test_SOURCES = mph_index_test.cc 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_LDADD = libcxxmph.la
bm_index_SOURCES = bm_common.cc bm_index.cc bm_index_SOURCES = bm_common.cc bm_index.cc

View File

@ -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

View File

@ -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__

View File

@ -7,9 +7,8 @@
#include <limits.h> #include <limits.h>
#include <string.h> #include <string.h>
// #define DEBUG //#define DEBUG
#include "debug.h" #include "debug.h"
#include "MurmurHash2.h"
#define hashsize(n) ((cmph_uint32)1<<(n)) #define hashsize(n) ((cmph_uint32)1<<(n))
#define hashmask(n) (hashsize(n)-1) #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 *jenkins_state_new(cmph_uint32 size) //size of hash table
{ {
jenkins_state_t *state = (jenkins_state_t *)malloc(sizeof(jenkins_state_t)); jenkins_state_t *state = (jenkins_state_t *)malloc(sizeof(jenkins_state_t));
DEBUGP("Initializing jenkins hash\n");
state->seed = ((cmph_uint32)rand() % size); state->seed = ((cmph_uint32)rand() % size);
DEBUGP("Initializied jenkins hash with seed %d\n", state->seed);
return state; return state;
} }
void jenkins_state_destroy(jenkins_state_t *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) static inline void __jenkins_hash_vector(cmph_uint32 seed, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes)
{ {
int i; register cmph_uint32 len, length;
for (i = 0; i < 3; ++i) {
hashes[i] = MurmurHash2(k, keylen, seed + i); /* 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;
// /*------------------------------------- handle the last 11 bytes */
// /* Set up the internal state */ hashes[2] += length;
// length = keylen; switch(len) /* all the case statements fall through */
// len = length; {
// hashes[0] = hashes[1] = 0x9e3779b9; /* the golden ratio; an arbitrary value */ case 11:
// hashes[2] = seed; /* the previous hash value - seed in our case */ hashes[2] +=((cmph_uint32)k[10]<<24);
// case 10:
// /*---------------------------------------- handle most of the key */ hashes[2] +=((cmph_uint32)k[9]<<16);
// while (len >= 12) case 9 :
// { hashes[2] +=((cmph_uint32)k[8]<<8);
// hashes[0] += ((cmph_uint32)k[0] +((cmph_uint32)k[1]<<8) +((cmph_uint32)k[2]<<16) +((cmph_uint32)k[3]<<24)); /* the first byte of hashes[2] is reserved for the length */
// hashes[1] += ((cmph_uint32)k[4] +((cmph_uint32)k[5]<<8) +((cmph_uint32)k[6]<<16) +((cmph_uint32)k[7]<<24)); case 8 :
// hashes[2] += ((cmph_uint32)k[8] +((cmph_uint32)k[9]<<8) +((cmph_uint32)k[10]<<16)+((cmph_uint32)k[11]<<24)); hashes[1] +=((cmph_uint32)k[7]<<24);
// mix(hashes[0],hashes[1],hashes[2]); case 7 :
// k += 12; len -= 12; hashes[1] +=((cmph_uint32)k[6]<<16);
// } case 6 :
// hashes[1] +=((cmph_uint32)k[5]<<8);
// /*------------------------------------- handle the last 11 bytes */ case 5 :
// hashes[2] += length; hashes[1] +=(cmph_uint8) k[4];
// switch(len) /* all the case statements fall through */ case 4 :
// { hashes[0] +=((cmph_uint32)k[3]<<24);
// case 11: case 3 :
// hashes[2] +=((cmph_uint32)k[10]<<24); hashes[0] +=((cmph_uint32)k[2]<<16);
// case 10: case 2 :
// hashes[2] +=((cmph_uint32)k[9]<<16); hashes[0] +=((cmph_uint32)k[1]<<8);
// case 9 : case 1 :
// hashes[2] +=((cmph_uint32)k[8]<<8); hashes[0] +=(cmph_uint8)k[0];
// /* the first byte of hashes[2] is reserved for the length */ /* case 0: nothing left to add */
// case 8 : }
// hashes[1] +=((cmph_uint32)k[7]<<24);
// case 7 : mix(hashes[0],hashes[1],hashes[2]);
// 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 jenkins_hash(jenkins_state_t *state, const char *k, cmph_uint32 keylen)
{ {
// cmph_uint32 hashes[3]; cmph_uint32 hashes[3];
// __jenkins_hash_vector(state->seed, k, keylen, hashes); __jenkins_hash_vector(state->seed, k, keylen, hashes);
// return hashes[2]; return hashes[2];
cmph_uint32 a, b, c; /* cmph_uint32 a, b, c;
cmph_uint32 len, length; cmph_uint32 len, length;
// Set up the internal state // 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 /// report the result
return c; return c;
*/
} }
void jenkins_hash_vector_(jenkins_state_t *state, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes) void jenkins_hash_vector_(jenkins_state_t *state, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes)