diff options
author | hlaaftana <10591326+hlaaftana@users.noreply.github.com> | 2020-04-21 23:09:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-21 22:09:19 +0200 |
commit | 5608a4e57b521f2a31b35b4c7f905a87b6e7b0aa (patch) | |
tree | 19385729b714eb06a1f6aeb0e56cf7a7f30fcaad /lib/pure/collections | |
parent | cb2b9bd797b4ea8765eda302f66cd13907f28bd6 (diff) | |
download | Nim-5608a4e57b521f2a31b35b4c7f905a87b6e7b0aa.tar.gz |
Add deques.peekFirst/Last(var Deque[T]) -> var T (#13542)
* Add deques.peekFirst/Last(var Deque[T]) -> var T * Add changelog entry for deques.peekFirst/Last var T overloads * Add since annotation to peekFirst/peekLast Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Diffstat (limited to 'lib/pure/collections')
-rw-r--r-- | lib/pure/collections/deques.nim | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/pure/collections/deques.nim b/lib/pure/collections/deques.nim index 77579a52b..1f34c3e18 100644 --- a/lib/pure/collections/deques.nim +++ b/lib/pure/collections/deques.nim @@ -51,6 +51,7 @@ ## * `lists module <lists.html>`_ for singly and doubly linked lists and rings ## * `channels module <channels.html>`_ for inter-thread communication +include system/inclrtl import math @@ -363,6 +364,46 @@ proc peekLast*[T](deq: Deque[T]): T {.inline.} = emptyCheck(deq) result = deq.data[(deq.tail - 1) and deq.mask] +proc peekFirst*[T](deq: var Deque[T]): var T {.inline, since: (1, 3).} = + ## Returns the first element of `deq`, but does not remove it from the deque. + ## + ## See also: + ## * `addFirst proc <#addFirst,Deque[T],T>`_ + ## * `addLast proc <#addLast,Deque[T],T>`_ + ## * `peekLast proc <#peekLast,Deque[T]>`_ + ## * `popFirst proc <#popFirst,Deque[T]>`_ + ## * `popLast proc <#popLast,Deque[T]>`_ + runnableExamples: + var a = initDeque[int]() + for i in 1 .. 5: + a.addLast(10*i) + assert $a == "[10, 20, 30, 40, 50]" + assert a.peekFirst == 10 + assert len(a) == 5 + + emptyCheck(deq) + result = deq.data[deq.head] + +proc peekLast*[T](deq: var Deque[T]): var T {.inline, since: (1, 3).} = + ## Returns the last element of `deq`, but does not remove it from the deque. + ## + ## See also: + ## * `addFirst proc <#addFirst,Deque[T],T>`_ + ## * `addLast proc <#addLast,Deque[T],T>`_ + ## * `peekFirst proc <#peekFirst,Deque[T]>`_ + ## * `popFirst proc <#popFirst,Deque[T]>`_ + ## * `popLast proc <#popLast,Deque[T]>`_ + runnableExamples: + var a = initDeque[int]() + for i in 1 .. 5: + a.addLast(10*i) + assert $a == "[10, 20, 30, 40, 50]" + assert a.peekLast == 50 + assert len(a) == 5 + + emptyCheck(deq) + result = deq.data[(deq.tail - 1) and deq.mask] + template destroy(x: untyped) = reset(x) |