[std/deques] move data instead of copy + destroy (#17800)

This commit is contained in:
flywind 2021-04-21 01:00:44 +08:00 • committed by GitHub
commit eb221dcc27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -379,8 +379,7 @@ proc popFirst*[T](deq: var Deque[T]): T {.inline, discardable.} =
emptyCheck(deq) emptyCheck(deq)
dec deq.count dec deq.count
result = deq.data[deq.head] result = move deq.data[deq.head]
destroy(deq.data[deq.head])
deq.head = (deq.head + 1) and deq.mask deq.head = (deq.head + 1) and deq.mask
proc popLast*[T](deq: var Deque[T]): T {.inline, discardable.} = proc popLast*[T](deq: var Deque[T]): T {.inline, discardable.} =
@ -398,8 +397,7 @@ proc popLast*[T](deq: var Deque[T]): T {.inline, discardable.} =
emptyCheck(deq) emptyCheck(deq)
dec deq.count dec deq.count
deq.tail = (deq.tail - 1) and deq.mask deq.tail = (deq.tail - 1) and deq.mask
result = deq.data[deq.tail] result = move deq.data[deq.tail]
destroy(deq.data[deq.tail])
proc clear*[T](deq: var Deque[T]) {.inline.} = proc clear*[T](deq: var Deque[T]) {.inline.} =
## Resets the deque so that it is empty. ## Resets the deque so that it is empty.