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
|
|
@ -67,9 +67,9 @@ const
|
|||
defaultInitialSize* = 4
|
||||
|
||||
template initImpl(result: typed, initialSize: int) =
|
||||
assert isPowerOfTwo(initialSize)
|
||||
result.mask = initialSize-1
|
||||
newSeq(result.data, initialSize)
|
||||
let correctSize = nextPowerOfTwo(initialSize)
|
||||
result.mask = correctSize-1
|
||||
newSeq(result.data, correctSize)
|
||||
|
||||
template checkIfInitialized(deq: typed) =
|
||||
when compiles(defaultInitialSize):
|
||||
|
|
@ -82,11 +82,6 @@ proc initDeque*[T](initialSize: int = 4): Deque[T] =
|
|||
## Optionally, the initial capacity can be reserved via `initialSize`
|
||||
## as a performance optimization.
|
||||
## The length of a newly created deque will still be 0.
|
||||
##
|
||||
## ``initialSize`` must be a power of two (default: 4).
|
||||
## If you need to accept runtime values for this you could use the
|
||||
## `nextPowerOfTwo proc<math.html#nextPowerOfTwo,int>`_ from the
|
||||
## `math module<math.html>`_.
|
||||
result.initImpl(initialSize)
|
||||
|
||||
proc len*[T](deq: Deque[T]): int {.inline.} =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue