Bladeren bron

AK: Inline the bucket index calculation

The result of the modulo is only used in the array index, so why
make the code more complex by calculating it in two different places?
thislooksfun 4 jaren geleden
bovenliggende
commit
509eb10df4
1 gewijzigde bestanden met toevoegingen van 3 en 6 verwijderingen
  1. 3 6
      AK/HashTable.h

+ 3 - 6
AK/HashTable.h

@@ -308,9 +308,9 @@ private:
     {
     {
         if (is_empty())
         if (is_empty())
             return nullptr;
             return nullptr;
-        size_t bucket_index = hash % m_capacity;
+
         for (;;) {
         for (;;) {
-            auto& bucket = m_buckets[bucket_index];
+            auto& bucket = m_buckets[hash % m_capacity];
 
 
             if (usable_bucket_for_writing && !*usable_bucket_for_writing && !bucket.used) {
             if (usable_bucket_for_writing && !*usable_bucket_for_writing && !bucket.used) {
                 *usable_bucket_for_writing = &bucket;
                 *usable_bucket_for_writing = &bucket;
@@ -323,7 +323,6 @@ private:
                 return nullptr;
                 return nullptr;
 
 
             hash = double_hash(hash);
             hash = double_hash(hash);
-            bucket_index = hash % m_capacity;
         }
         }
     }
     }
 
 
@@ -348,14 +347,12 @@ private:
         else if (usable_bucket_for_writing)
         else if (usable_bucket_for_writing)
             return *usable_bucket_for_writing;
             return *usable_bucket_for_writing;
 
 
-        size_t bucket_index = hash % m_capacity;
 
 
         for (;;) {
         for (;;) {
-            auto& bucket = m_buckets[bucket_index];
+            auto& bucket = m_buckets[hash % m_capacity];
             if (!bucket.used)
             if (!bucket.used)
                 return bucket;
                 return bucket;
             hash = double_hash(hash);
             hash = double_hash(hash);
-            bucket_index = hash % m_capacity;
         }
         }
     }
     }