Slack search needs to come first.
This commit is contained in:
parent
8b1d7da028
commit
c432a3b848
@ -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 <class SeededHashFcn, class Key>
|
||||
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());
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user