From 7f8536b4a6d7fd06b1cd4929f548d241183c09cd Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Mon, 16 Apr 2012 17:09:49 +0200 Subject: initial import of files relevant for noise project --- lib/Queue.ck | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 lib/Queue.ck (limited to 'lib/Queue.ck') 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); + } +} -- cgit v1.2.3