From c432a3b848a35b55b192fb497f7aa675127ca154 Mon Sep 17 00:00:00 2001 From: Davi Reis Date: Sun, 22 Apr 2012 02:50:14 +0200 Subject: [PATCH] Slack search needs to come first. --- cxxmph/mph_index.h | 14 +++++++------- cxxmph/mph_map.h | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/cxxmph/mph_index.h b/cxxmph/mph_index.h index 84b7258..1f6ace1 100644 --- a/cxxmph/mph_index.h +++ b/cxxmph/mph_index.h @@ -124,7 +124,7 @@ bool MPHIndex::Reset( if ((r_ % 2) == 0) r_ += 1; // This can be used to speed mods, but increases occupation too much. // Needs to try http://gmplib.org/manual/Integer-Exponentiation.html instead - r_ = nextpoweroftwo(r_); + // r_ = nextpoweroftwo(r_); nest_displacement_[0] = 0; nest_displacement_[1] = r_; nest_displacement_[2] = (r_ << 1); @@ -177,12 +177,12 @@ template uint32_t MPHIndex::perfect_hash(const Key& key) const { if (!g_.size()) return 0; h128 h = SeededHashFcn().hash128(key, hash_seed_[0]); - // h[0] = (h[0] % r_) + nest_displacement_[0]; - // h[1] = (h[1] % r_) + nest_displacement_[1]; - // h[2] = (h[2] % r_) + nest_displacement_[2]; - h[0] = (h[0] & (r_-1)) + nest_displacement_[0]; - h[1] = (h[1] & (r_-1)) + nest_displacement_[1]; - h[2] = (h[2] & (r_-1)) + nest_displacement_[2]; + h[0] = (h[0] % r_) + nest_displacement_[0]; + h[1] = (h[1] % r_) + nest_displacement_[1]; + h[2] = (h[2] % r_) + nest_displacement_[2]; + // h[0] = (h[0] & (r_-1)) + nest_displacement_[0]; + // h[1] = (h[1] & (r_-1)) + nest_displacement_[1]; + // h[2] = (h[2] & (r_-1)) + nest_displacement_[2]; assert((h[0]) < g_.size()); assert((h[1]) < g_.size()); assert((h[2]) < g_.size()); diff --git a/cxxmph/mph_map.h b/cxxmph/mph_map.h index aec6ad0..69e72f7 100644 --- a/cxxmph/mph_map.h +++ b/cxxmph/mph_map.h @@ -211,16 +211,16 @@ MPH_MAP_INLINE_METHOD_DECL(iterator, find)(const key_type& k) { } MPH_MAP_INLINE_METHOD_DECL(my_int32_t, index)(const key_type& k) const { + if (__builtin_expect(!slack_.empty(), 0)) { + auto sit = slack_.find(hasher128_.hash128(k, 0)); + if (sit != slack_.end()) return sit->second; + } if (__builtin_expect(index_.minimal_perfect_hash_size(), 1)) { auto minimal_perfect_hash = index_.minimal_perfect_hash(k); if (__builtin_expect(present_[minimal_perfect_hash], true)) { return minimal_perfect_hash; } } - if (__builtin_expect(!slack_.empty(), 0)) { - auto sit = slack_.find(hasher128_.hash128(k, 0)); - if (sit != slack_.end()) return sit->second; - } return -1; }