Repro failure.

This commit is contained in:
davi 2010-11-08 18:19:44 -02:00
parent 7c9c6c518d
commit cde9f72c9e
6 changed files with 305 additions and 41 deletions

256
cxxmph/URLS1k Normal file
View File

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

View File

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

View File

@ -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();

View File

@ -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;
} }
} }
*/
} }

View File

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

View File

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