remove a condition that table size must be passed as power of 2 (#14926)
* remove a condition that table size must be passed as power of 2 * remove power-of-2 condition from sets and sharedtables * remove power-of-2 condition from deques * use 'correctSize' for both branches * prettify changelog.md and fix typos * add a changelog entry * fix double-call of 'right-size' * fix the same thing in sets.nim * introduce a new internal proc `slotsNeeded` Deprecate the public proc `rightSize`, which is not needed anymore. Now it is an identity function, allowing the old code to work correctly and without extra allocations.
This commit is contained in:
parent
06d776a582
commit
3de5296337
10 changed files with 83 additions and 120 deletions
|
|
@ -30,17 +30,23 @@ proc nextTry(h, maxHash: Hash): Hash {.inline.} =
|
|||
result = (h + 1) and maxHash
|
||||
|
||||
proc mustRehash[T](t: T): bool {.inline.} =
|
||||
# If this is changed, make sure to synchronize it with `slotsNeeded` below
|
||||
assert(t.dataLen > t.counter)
|
||||
result = (t.dataLen * 2 < t.counter * 3) or (t.dataLen - t.counter < 4)
|
||||
|
||||
proc rightSize*(count: Natural): int {.inline.} =
|
||||
proc slotsNeeded(count: Natural): int {.inline.} =
|
||||
# Make sure to synchronize with `mustRehash` above
|
||||
result = nextPowerOfTwo(count * 3 div 2 + 4)
|
||||
|
||||
proc rightSize*(count: Natural): int {.inline, deprecated: "Deprecated since 1.4.0".} =
|
||||
## **Deprecated since Nim v1.4.0**, it is not needed anymore
|
||||
## because picking the correct size is done internally.
|
||||
##
|
||||
## Return the value of ``initialSize`` to support ``count`` items.
|
||||
##
|
||||
## If more items are expected to be added, simply add that
|
||||
## expected extra amount to the parameter before calling this.
|
||||
#
|
||||
# Make sure to synchronize with `mustRehash`
|
||||
result = nextPowerOfTwo(count * 3 div 2 + 4)
|
||||
result = count
|
||||
|
||||
template rawGetKnownHCImpl() {.dirty.} =
|
||||
if t.dataLen == 0:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue