Repro failure.
This commit is contained in:
parent
7c9c6c518d
commit
cde9f72c9e
|
@ -0,0 +1,256 @@
|
||||||
|
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
|
|
@ -1,5 +1,5 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <ext/hash_map> // for __gnu_cxx::hash
|
#include <unordered_map> // for std::hash
|
||||||
|
|
||||||
#include "MurmurHash2.h"
|
#include "MurmurHash2.h"
|
||||||
#include "stringpiece.h"
|
#include "stringpiece.h"
|
||||||
|
@ -33,7 +33,7 @@ template <>
|
||||||
struct seeded_hash_function<Murmur2> {
|
struct seeded_hash_function<Murmur2> {
|
||||||
template <class Key>
|
template <class Key>
|
||||||
cmph_uint32 operator()(const Key& k, cmph_uint32 seed) const {
|
cmph_uint32 operator()(const Key& k, cmph_uint32 seed) const {
|
||||||
return MurmurHash2(k, sizeof(Key), seed);
|
return MurmurHash2(reinterpret_cast<const void*>(&k), sizeof(Key), seed);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,30 +48,34 @@ struct seeded_hash_function<Murmur2StringPiece> {
|
||||||
|
|
||||||
template <class HashFcn> struct OptimizedSeededHashFunction
|
template <class HashFcn> struct OptimizedSeededHashFunction
|
||||||
{ typedef seeded_hash_function<HashFcn> hash_function; };
|
{ typedef seeded_hash_function<HashFcn> hash_function; };
|
||||||
// Use Murmur2 instead for all types defined in __gnu_cxx::hash, plus
|
// Use Murmur2 instead for all types defined in std::hash, plus
|
||||||
// std::string which is commonly extended.
|
// std::string which is commonly extended.
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<char*> >
|
template <> struct OptimizedSeededHashFunction<std::hash<char*> >
|
||||||
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<const char*> >
|
template <> struct OptimizedSeededHashFunction<std::hash<const char*> >
|
||||||
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<std::string> >
|
template <> struct OptimizedSeededHashFunction<std::hash<std::string> >
|
||||||
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
{ typedef seeded_hash_function<Murmur2StringPiece> hash_function; };
|
||||||
|
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<char> >
|
template <> struct OptimizedSeededHashFunction<std::hash<char> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<unsigned char> >
|
template <> struct OptimizedSeededHashFunction<std::hash<unsigned char> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<short> >
|
template <> struct OptimizedSeededHashFunction<std::hash<short> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<unsigned short> >
|
template <> struct OptimizedSeededHashFunction<std::hash<unsigned short> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<int> >
|
template <> struct OptimizedSeededHashFunction<std::hash<int> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<unsigned int> >
|
template <> struct OptimizedSeededHashFunction<std::hash<unsigned int> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<long> >
|
template <> struct OptimizedSeededHashFunction<std::hash<long> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash<unsigned long> >
|
template <> struct OptimizedSeededHashFunction<std::hash<unsigned long> >
|
||||||
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
|
template <> struct OptimizedSeededHashFunction<std::hash<long long> >
|
||||||
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
|
template <> struct OptimizedSeededHashFunction<std::hash<unsigned long long> >
|
||||||
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
{ typedef seeded_hash_function<Murmur2> hash_function; };
|
||||||
|
|
||||||
} // namespace cxxmph
|
} // namespace cxxmph
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <ext/hash_map>
|
#include <algorithm>
|
||||||
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <utility> // for std::pair
|
#include <utility> // for std::pair
|
||||||
|
|
||||||
|
@ -12,7 +13,7 @@ namespace cxxmph {
|
||||||
#define CMPH_CLASS_SPEC cmph_hash_map<Key, Data, HashFcn, EqualKey, Alloc>
|
#define CMPH_CLASS_SPEC cmph_hash_map<Key, Data, HashFcn, EqualKey, Alloc>
|
||||||
#define CMPH_METHOD_DECL(r, m) CMPH_TMPL_SPEC typename CMPH_CLASS_SPEC::r CMPH_CLASS_SPEC::m
|
#define CMPH_METHOD_DECL(r, m) CMPH_TMPL_SPEC typename CMPH_CLASS_SPEC::r CMPH_CLASS_SPEC::m
|
||||||
|
|
||||||
template <class Key, class Data, class HashFcn = __gnu_cxx::hash<Key>, class EqualKey = std::equal_to<Key>, class Alloc = std::allocator<Data> >
|
template <class Key, class Data, class HashFcn = std::hash<Key>, class EqualKey = std::equal_to<Key>, class Alloc = std::allocator<Data> >
|
||||||
class cmph_hash_map {
|
class cmph_hash_map {
|
||||||
public:
|
public:
|
||||||
typedef Key key_type;
|
typedef Key key_type;
|
||||||
|
@ -67,20 +68,11 @@ class cmph_hash_map {
|
||||||
return iterator_first<iterator>(it);
|
return iterator_first<iterator>(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct slack_hashfnc {
|
|
||||||
size_t operator()(const const_iterator& it) const { return HashFcn()(it->first); }
|
|
||||||
};
|
|
||||||
struct slack_equalkey {
|
|
||||||
bool operator()(const const_iterator& lhs, const const_iterator& rhs) {
|
|
||||||
return EqualKey()(lhs->first, rhs->first);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void rehash();
|
void rehash();
|
||||||
std::vector<value_type> values_;
|
std::vector<value_type> values_;
|
||||||
SimpleMPHTable<Key, typename OptimizedSeededHashFunction<HashFcn>::hash_function> table_;
|
SimpleMPHTable<Key, typename OptimizedSeededHashFunction<HashFcn>::hash_function> table_;
|
||||||
typedef typename __gnu_cxx::hash_set<const_iterator, slack_hashfnc, slack_equalkey, Alloc> slack_type;
|
// TODO(davi) optimize slack to no hold a copy of the key
|
||||||
|
typedef typename std::unordered_map<Key, cmph_uint32, HashFcn, EqualKey, Alloc> slack_type;
|
||||||
slack_type slack_;
|
slack_type slack_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,9 +92,11 @@ CMPH_METHOD_DECL(insert_return_type, insert)(const value_type& x) {
|
||||||
iterator it = find(x.first);
|
iterator it = find(x.first);
|
||||||
if (it != end()) return std::make_pair(it, false);
|
if (it != end()) return std::make_pair(it, false);
|
||||||
values_.push_back(x);
|
values_.push_back(x);
|
||||||
slack_.insert(values_.end() - 1);
|
slack_.insert(std::make_pair(x.first, values_.size() - 1));
|
||||||
if ((slack_.size() > 10 && table_.size() == 0) ||
|
if (slack_.size() == table_.size() ||
|
||||||
(table_.size() && slack_.size() > table_.size() * 2)) {
|
(slack_.size() >= 256 && table_.size() == 0)) {
|
||||||
|
// TODO(davi) debug only, remove afterwards
|
||||||
|
std::sort(values_.begin(), values_.end());
|
||||||
rehash();
|
rehash();
|
||||||
}
|
}
|
||||||
it = find(x.first);
|
it = find(x.first);
|
||||||
|
@ -111,6 +105,10 @@ CMPH_METHOD_DECL(insert_return_type, insert)(const value_type& x) {
|
||||||
|
|
||||||
CMPH_METHOD_DECL(void_type, rehash)() {
|
CMPH_METHOD_DECL(void_type, rehash)() {
|
||||||
if (values_.empty()) return;
|
if (values_.empty()) return;
|
||||||
|
std::cerr << "Calling Reset with "
|
||||||
|
<< table_.size() << " keys in table "
|
||||||
|
<< slack_.size() << " keys in slack "
|
||||||
|
<< values_.size() << " key in total" << std::endl;
|
||||||
slack_type().swap(slack_);
|
slack_type().swap(slack_);
|
||||||
table_.Reset(make_iterator_first(values_.begin()),
|
table_.Reset(make_iterator_first(values_.begin()),
|
||||||
make_iterator_first(values_.end()));
|
make_iterator_first(values_.end()));
|
||||||
|
@ -147,10 +145,8 @@ CMPH_METHOD_DECL(void_type, erase)(const key_type& k) {
|
||||||
|
|
||||||
CMPH_METHOD_DECL(const_iterator, find)(const key_type& k) const {
|
CMPH_METHOD_DECL(const_iterator, find)(const key_type& k) const {
|
||||||
if (!slack_.empty()) {
|
if (!slack_.empty()) {
|
||||||
iterator slack_key;
|
typename slack_type::const_iterator it = slack_.find(k);
|
||||||
slack_key.first = k;
|
if (it != slack_.end()) return values_.begin() + it->second;
|
||||||
typename slack_type::const_iterator it = slack_.find(slack_key);
|
|
||||||
if (it != slack_.end()) return *it;
|
|
||||||
}
|
}
|
||||||
if (table_.size() == 0) return end();
|
if (table_.size() == 0) return end();
|
||||||
size_type id = table_.index(k);
|
size_type id = table_.index(k);
|
||||||
|
@ -162,8 +158,6 @@ CMPH_METHOD_DECL(const_iterator, find)(const key_type& k) const {
|
||||||
CMPH_METHOD_DECL(iterator, find)(const key_type& k) {
|
CMPH_METHOD_DECL(iterator, find)(const key_type& k) {
|
||||||
if (!slack_.empty()) {
|
if (!slack_.empty()) {
|
||||||
typename slack_type::const_iterator it = slack_.find(k);
|
typename slack_type::const_iterator it = slack_.find(k);
|
||||||
// TODO(davi) this is broken, it->second should be an integer
|
|
||||||
// otherwise I cannot access values_ iterators.
|
|
||||||
if (it != slack_.end()) return values_.begin() + it->second;
|
if (it != slack_.end()) return values_.begin() + it->second;
|
||||||
}
|
}
|
||||||
if (table_.size() == 0) return end();
|
if (table_.size() == 0) return end();
|
||||||
|
|
|
@ -5,10 +5,16 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
using std::make_pair;
|
||||||
using std::string;
|
using std::string;
|
||||||
using cxxmph::cmph_hash_map;
|
using cxxmph::cmph_hash_map;
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
cmph_hash_map<int64_t, int64_t> b;
|
||||||
|
for (int i = 0; i < 2*500; ++i) {
|
||||||
|
b.insert(make_pair(i, i));
|
||||||
|
}
|
||||||
|
/*
|
||||||
cmph_hash_map<string, int> h;
|
cmph_hash_map<string, int> h;
|
||||||
h.insert(std::make_pair("-1",-1));
|
h.insert(std::make_pair("-1",-1));
|
||||||
cmph_hash_map<string, int>::const_iterator it;
|
cmph_hash_map<string, int>::const_iterator it;
|
||||||
|
@ -37,5 +43,6 @@ int main(int argc, char** argv) {
|
||||||
std::cerr << "Search " << i*100 - 1 << " gives " << h.find(buf)->second << std::endl;
|
std::cerr << "Search " << i*100 - 1 << " gives " << h.find(buf)->second << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,10 +57,12 @@ int main(int argc, char** argv) {
|
||||||
ifstream f(argv[optind]);
|
ifstream f(argv[optind]);
|
||||||
string buffer;
|
string buffer;
|
||||||
while (!getline(f, buffer).eof()) keys.push_back(buffer);
|
while (!getline(f, buffer).eof()) keys.push_back(buffer);
|
||||||
cmph_hash_map<const char*, string> table;
|
for (int i = 0; i < keys.size(); ++i) string s = keys[i];
|
||||||
for (int i = 0; i < keys.size(); ++i) table[keys[i].c_str()] = keys[i];
|
cmph_hash_map<string, string> table;
|
||||||
cmph_hash_map<const char*, string>::const_iterator it = table.begin();
|
|
||||||
cmph_hash_map<const char*, string>::const_iterator end = table.end();
|
for (int i = 0; i < keys.size(); ++i) table[keys[i]] = keys[i];
|
||||||
|
cmph_hash_map<string, string>::const_iterator it = table.begin();
|
||||||
|
cmph_hash_map<string, string>::const_iterator end = table.end();
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
cout << (it - table.begin()) << ": " << it->first
|
cout << (it - table.begin()) << ": " << it->first
|
||||||
<<" -> " << it->second << endl;
|
<<" -> " << it->second << endl;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// Minimal perfect hash abstraction implementing the BDZ algorithm
|
// Minimal perfect hash abstraction implementing the BDZ algorithm
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <unordered_map> // for std::hash
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -133,7 +134,7 @@ cmph_uint32 MPHTable::index(const Key& key) const {
|
||||||
return Rank(vertex);
|
return Rank(vertex);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Key, class HashFcn = typename OptimizedSeededHashFunction<__gnu_cxx::hash<Key> >::hash_function>
|
template <class Key, class HashFcn = typename OptimizedSeededHashFunction<std::hash<Key> >::hash_function>
|
||||||
class SimpleMPHTable : public MPHTable {
|
class SimpleMPHTable : public MPHTable {
|
||||||
public:
|
public:
|
||||||
template <class ForwardIterator>
|
template <class ForwardIterator>
|
||||||
|
|
Loading…
Reference in New Issue