From 5b0d3adf3debde4cd21e7adb1f434580386d7265 Mon Sep 17 00:00:00 2001 From: Piotr Czarnecki Date: Wed, 9 Jul 2014 18:31:58 +0100 Subject: [PATCH] std: branchless bucket distance for hashmap --- src/libstd/collections/hashmap.rs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/libstd/collections/hashmap.rs b/src/libstd/collections/hashmap.rs index 1985128c4e307..d949eeebea0da 100644 --- a/src/libstd/collections/hashmap.rs +++ b/src/libstd/collections/hashmap.rs @@ -802,17 +802,9 @@ impl, V, S, H: Hasher> HashMap { 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.