Merge pull request #23 from mdw55189/issue-19
[junction.git] / junction / ConcurrentMap_Leapfrog.h
index 89ba120d435ff0738291a8318364eb9a0165de67..4850f0db0006fd822283ba0584ede5349288901b 100644 (file)
@@ -114,6 +114,12 @@ public:
                     return; // Found an existing value
                 }
                 case Details::InsertResult_Overflow: {
+                    // Unlike ConcurrentMap_Linear, we don't need to keep track of & pass a "mustDouble" flag.
+                    // Passing overflowIdx is sufficient to prevent an infinite loop here.
+                    // It defines the start of the range of cells to check while estimating total cells in use.
+                    // After the first migration, deleted keys are purged, so if we hit this line during the
+                    // second loop iteration, every cell in the range will be in use, thus the estimate will be 100%.
+                    // (Concurrent deletes could result in further iterations, but it will eventually settle.)
                     Details::beginTableMigration(m_map, m_table, overflowIdx);
                     break;
                 }
@@ -191,7 +197,7 @@ public:
             }
         }
 
-        void setValue(Value desired) {
+        void assignValue(Value desired) {
             exchangeValue(desired);
         }
 
@@ -267,7 +273,7 @@ public:
         }
     }
 
-    Value set(Key key, Value desired) {
+    Value assign(Key key, Value desired) {
         Mutator iter(*this, key);
         return iter.exchangeValue(desired);
     }