summary refs log tree commit diff stats
path: root/lib/pure/collections
diff options
context:
space:
mode:
authorreactormonk <hafnersimon@gmail.com>2015-02-01 05:19:47 +0500
committerreactormonk <hafnersimon@gmail.com>2015-02-01 05:19:47 +0500
commit014be3a29c7c4691cde5b446a04fe522e008ea34 (patch)
tree7a69e58657270b029982c4e2796fb6c3219e120b /lib/pure/collections
parentab5b8f53914c92875d72b278f966092426d57323 (diff)
parent69d96b604bd953011749fa01af4363130c0ecd0f (diff)
downloadNim-014be3a29c7c4691cde5b446a04fe522e008ea34.tar.gz
Merge pull request #2020 from def-/mitems
mitems and mpairs
Diffstat (limited to 'lib/pure/collections')
-rw-r--r--lib/pure/collections/lists.nim16
-rw-r--r--lib/pure/collections/queues.nim9
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/pure/collections/lists.nim b/lib/pure/collections/lists.nim
index 2770a3950..095775cbb 100644
--- a/lib/pure/collections/lists.nim
+++ b/lib/pure/collections/lists.nim
@@ -122,6 +122,22 @@ iterator items*[T](L: DoublyLinkedRing[T]): T =
   ## yields every value of `L`.
   itemsRingImpl()
 
+iterator mitems*[T](L: var DoublyLinkedList[T]): var T =
+  ## yields every value of `L` so that you can modify it.
+  itemsListImpl()
+
+iterator mitems*[T](L: var SinglyLinkedList[T]): var T =
+  ## yields every value of `L` so that you can modify it.
+  itemsListImpl()
+
+iterator mitems*[T](L: var SinglyLinkedRing[T]): var T =
+  ## yields every value of `L` so that you can modify it.
+  itemsRingImpl()
+
+iterator mitems*[T](L: var DoublyLinkedRing[T]): var T =
+  ## yields every value of `L` so that you can modify it.
+  itemsRingImpl()
+
 iterator nodes*[T](L: SinglyLinkedList[T]): SinglyLinkedNode[T] = 
   ## iterates over every node of `x`. Removing the current node from the
   ## list during traversal is supported.
diff --git a/lib/pure/collections/queues.nim b/lib/pure/collections/queues.nim
index fb4d35310..af5e7b6cd 100644
--- a/lib/pure/collections/queues.nim
+++ b/lib/pure/collections/queues.nim
@@ -39,6 +39,15 @@ iterator items*[T](q: Queue[T]): T =
     yield q.data[i]
     i = (i + 1) and q.mask
 
+iterator mitems*[T](q: var Queue[T]): var T =
+  ## yields every element of `q`.
+  var i = q.rd
+  var c = q.count
+  while c > 0:
+    dec c
+    yield q.data[i]
+    i = (i + 1) and q.mask
+
 proc add*[T](q: var Queue[T], item: T) =
   ## adds an `item` to the end of the queue `q`.
   var cap = q.mask+1