diff options
| author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-04-16 17:09:49 +0200 |
|---|---|---|
| committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-04-16 17:09:49 +0200 |
| commit | 7f8536b4a6d7fd06b1cd4929f548d241183c09cd (patch) | |
| tree | e26f0579bc0988b4861e2da7582244121972442f /lib/Queue.ck | |
| download | digitale-debutanten-7f8536b4a6d7fd06b1cd4929f548d241183c09cd.tar.gz | |
initial import of files relevant for noise project
Diffstat (limited to 'lib/Queue.ck')
| -rw-r--r-- | lib/Queue.ck | 48 |
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); + } +} |
