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;
}
}
}
- void setValue(Value desired) {
+ void assignValue(Value desired) {
exchangeValue(desired);
}
}
}
- Value set(Key key, Value desired) {
+ Value assign(Key key, Value desired) {
Mutator iter(*this, key);
return iter.exchangeValue(desired);
}