summaryrefslogtreecommitdiff
path: root/lib/Queue.ck
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-04-16 17:09:49 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-04-16 17:09:49 +0200
commit7f8536b4a6d7fd06b1cd4929f548d241183c09cd (patch)
treee26f0579bc0988b4861e2da7582244121972442f /lib/Queue.ck
downloaddigitale-debutanten-7f8536b4a6d7fd06b1cd4929f548d241183c09cd.tar.gz
initial import of files relevant for noise project
Diffstat (limited to 'lib/Queue.ck')
-rw-r--r--lib/Queue.ck48
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/Queue.ck b/lib/Queue.ck
new file mode 100644
index 0000000..f05ae5e
--- /dev/null
+++ b/lib/Queue.ck
@@ -0,0 +1,48 @@
+/*
+ * Queue data structure
+ */
+public class Queue {
+ class Element {
+ Element @next;
+ Object @payload;
+ }
+ Element head @=> Element @tail;
+
+ fun void
+ push(Object @data)
+ {
+ new Element @=> tail.next @=> tail;
+ data @=> tail.payload;
+ }
+
+ fun Object @
+ peek()
+ {
+ if (head.next == null)
+ /* empty */
+ return null;
+ else
+ return head.next.payload;
+ }
+
+ fun Object @
+ pop()
+ {
+ head.next @=> Element @el;
+ if (el == null)
+ /* empty */
+ return null;
+
+ el.next @=> head.next;
+ if (el == tail)
+ /* but now it's empty! */
+ head @=> tail;
+ return el.payload;
+ }
+
+ fun void
+ flush()
+ {
+ while (pop() != null);
+ }
+}