std: branchless bucket distance for hashmap

This commit is contained in:
Piotr Czarnecki 2014-07-09 18:31:58 +01:00
parent dfbd4669cd
commit 5b0d3adf3d

View File

@ -802,17 +802,9 @@ impl<K: Eq + Hash<S>, V, S, H: Hasher<S>> HashMap<K, V, H> {
fn bucket_distance(&self, index_of_elem: &table::FullIndex) -> uint {
// where the hash of the element that happens to reside at
// `index_of_elem` tried to place itself first.
let first_probe_index = self.probe(&index_of_elem.hash(), 0);
let raw_index = index_of_elem.raw_index();
if first_probe_index <= raw_index {
// probe just went forward
raw_index - first_probe_index
} else {
// probe wrapped around the hashtable
raw_index + (self.table.capacity() - first_probe_index)
}
(raw_index - index_of_elem.hash() as uint) & (self.table.capacity() - 1)
}
/// Search for a pre-hashed key.