From cde9f72c9e25416ac148d44a1a91f822c56b436e Mon Sep 17 00:00:00 2001 From: davi Date: Mon, 8 Nov 2010 18:19:44 -0200 Subject: [PATCH] Repro failure. --- cxxmph/URLS1k | 256 +++++++++++++++++++++++++++++++++++ cxxmph/cmph_hash_function.h | 32 +++-- cxxmph/cmph_hash_map.h | 38 +++--- cxxmph/cmph_hash_map_test.cc | 7 + cxxmph/cxxmph.cc | 10 +- cxxmph/mphtable.h | 3 +- 6 files changed, 305 insertions(+), 41 deletions(-) create mode 100644 cxxmph/URLS1k diff --git a/cxxmph/URLS1k b/cxxmph/URLS1k new file mode 100644 index 0000000..a7fa160 --- /dev/null +++ b/cxxmph/URLS1k @@ -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 diff --git a/cxxmph/cmph_hash_function.h b/cxxmph/cmph_hash_function.h index e607e48..933d729 100644 --- a/cxxmph/cmph_hash_function.h +++ b/cxxmph/cmph_hash_function.h @@ -1,5 +1,5 @@ #include -#include // for __gnu_cxx::hash +#include // for std::hash #include "MurmurHash2.h" #include "stringpiece.h" @@ -33,7 +33,7 @@ template <> struct seeded_hash_function { template cmph_uint32 operator()(const Key& k, cmph_uint32 seed) const { - return MurmurHash2(k, sizeof(Key), seed); + return MurmurHash2(reinterpret_cast(&k), sizeof(Key), seed); } }; @@ -48,30 +48,34 @@ struct seeded_hash_function { template struct OptimizedSeededHashFunction { typedef seeded_hash_function 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. -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; -template <> struct OptimizedSeededHashFunction<__gnu_cxx::hash > +template <> struct OptimizedSeededHashFunction > +{ typedef seeded_hash_function hash_function; }; +template <> struct OptimizedSeededHashFunction > +{ typedef seeded_hash_function hash_function; }; +template <> struct OptimizedSeededHashFunction > { typedef seeded_hash_function hash_function; }; } // namespace cxxmph diff --git a/cxxmph/cmph_hash_map.h b/cxxmph/cmph_hash_map.h index 2aba8ce..871d4b1 100644 --- a/cxxmph/cmph_hash_map.h +++ b/cxxmph/cmph_hash_map.h @@ -1,4 +1,5 @@ -#include +#include +#include #include #include // for std::pair @@ -12,7 +13,7 @@ namespace cxxmph { #define CMPH_CLASS_SPEC cmph_hash_map #define CMPH_METHOD_DECL(r, m) CMPH_TMPL_SPEC typename CMPH_CLASS_SPEC::r CMPH_CLASS_SPEC::m -template , class EqualKey = std::equal_to, class Alloc = std::allocator > +template , class EqualKey = std::equal_to, class Alloc = std::allocator > class cmph_hash_map { public: typedef Key key_type; @@ -67,20 +68,11 @@ class cmph_hash_map { return iterator_first(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(); std::vector values_; SimpleMPHTable::hash_function> table_; - typedef typename __gnu_cxx::hash_set slack_type; + // TODO(davi) optimize slack to no hold a copy of the key + typedef typename std::unordered_map slack_type; slack_type slack_; }; @@ -100,9 +92,11 @@ CMPH_METHOD_DECL(insert_return_type, insert)(const value_type& x) { iterator it = find(x.first); if (it != end()) return std::make_pair(it, false); values_.push_back(x); - slack_.insert(values_.end() - 1); - if ((slack_.size() > 10 && table_.size() == 0) || - (table_.size() && slack_.size() > table_.size() * 2)) { + slack_.insert(std::make_pair(x.first, values_.size() - 1)); + if (slack_.size() == table_.size() || + (slack_.size() >= 256 && table_.size() == 0)) { + // TODO(davi) debug only, remove afterwards + std::sort(values_.begin(), values_.end()); rehash(); } 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)() { 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_); table_.Reset(make_iterator_first(values_.begin()), 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 { if (!slack_.empty()) { - iterator slack_key; - slack_key.first = k; - typename slack_type::const_iterator it = slack_.find(slack_key); - if (it != slack_.end()) return *it; + typename slack_type::const_iterator it = slack_.find(k); + if (it != slack_.end()) return values_.begin() + it->second; } if (table_.size() == 0) return end(); 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) { if (!slack_.empty()) { 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 (table_.size() == 0) return end(); diff --git a/cxxmph/cmph_hash_map_test.cc b/cxxmph/cmph_hash_map_test.cc index 6f9eeab..a75e0cd 100644 --- a/cxxmph/cmph_hash_map_test.cc +++ b/cxxmph/cmph_hash_map_test.cc @@ -5,10 +5,16 @@ #include #include +using std::make_pair; using std::string; using cxxmph::cmph_hash_map; int main(int argc, char** argv) { + cmph_hash_map b; + for (int i = 0; i < 2*500; ++i) { + b.insert(make_pair(i, i)); + } + /* cmph_hash_map h; h.insert(std::make_pair("-1",-1)); cmph_hash_map::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; } } + */ } diff --git a/cxxmph/cxxmph.cc b/cxxmph/cxxmph.cc index 9b93450..623ecc4 100644 --- a/cxxmph/cxxmph.cc +++ b/cxxmph/cxxmph.cc @@ -57,10 +57,12 @@ int main(int argc, char** argv) { ifstream f(argv[optind]); string buffer; while (!getline(f, buffer).eof()) keys.push_back(buffer); - cmph_hash_map table; - for (int i = 0; i < keys.size(); ++i) table[keys[i].c_str()] = keys[i]; - cmph_hash_map::const_iterator it = table.begin(); - cmph_hash_map::const_iterator end = table.end(); + for (int i = 0; i < keys.size(); ++i) string s = keys[i]; + cmph_hash_map table; + + for (int i = 0; i < keys.size(); ++i) table[keys[i]] = keys[i]; + cmph_hash_map::const_iterator it = table.begin(); + cmph_hash_map::const_iterator end = table.end(); for (; it != end; ++it) { cout << (it - table.begin()) << ": " << it->first <<" -> " << it->second << endl; diff --git a/cxxmph/mphtable.h b/cxxmph/mphtable.h index 2a3786a..ce2517e 100644 --- a/cxxmph/mphtable.h +++ b/cxxmph/mphtable.h @@ -4,6 +4,7 @@ // Minimal perfect hash abstraction implementing the BDZ algorithm #include +#include // for std::hash #include #include @@ -133,7 +134,7 @@ cmph_uint32 MPHTable::index(const Key& key) const { return Rank(vertex); } -template >::hash_function> +template >::hash_function> class SimpleMPHTable : public MPHTable { public: template