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
|
|
@ -207,15 +207,11 @@ proc len*[A, B](t: var SharedTable[A, B]): int =
|
|||
withLock t:
|
||||
result = t.counter
|
||||
|
||||
proc init*[A, B](t: var SharedTable[A, B], initialSize = 64) =
|
||||
proc init*[A, B](t: var SharedTable[A, B], initialSize = 32) =
|
||||
## creates a new hash table that is empty.
|
||||
##
|
||||
## This proc must be called before any other usage of `t`.
|
||||
##
|
||||
## `initialSize` needs to be a power of two. If you need to accept runtime
|
||||
## values for this you could use the ``nextPowerOfTwo`` proc from the
|
||||
## `math <math.html>`_ module or the ``rightSize`` proc from this module.
|
||||
assert isPowerOfTwo(initialSize)
|
||||
let initialSize = slotsNeeded(initialSize)
|
||||
t.counter = 0
|
||||
t.dataLen = initialSize
|
||||
t.data = cast[KeyValuePairSeq[A, B]](allocShared0(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue