aboutsummaryrefslogtreecommitdiff
path: root/queue.adb
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-12-07 17:27:41 +0100
committerCharles <sircharlesaze@gmail.com>2019-12-07 17:27:41 +0100
commite0dd50831fd19e1145897de8af909002c2821376 (patch)
treed3d4dd827b4d55f243b3664ac878e944146f720b /queue.adb
parentacfbdcefdbc60e97a9e3447afed204b3e40d991e (diff)
downloadsnake-e0dd50831fd19e1145897de8af909002c2821376.tar.gz
snake-e0dd50831fd19e1145897de8af909002c2821376.tar.bz2
snake-e0dd50831fd19e1145897de8af909002c2821376.zip
Basic Queue package
Diffstat (limited to 'queue.adb')
-rw-r--r--queue.adb50
1 files changed, 50 insertions, 0 deletions
diff --git a/queue.adb b/queue.adb
index e69de29..2869984 100644
--- a/queue.adb
+++ b/queue.adb
@@ -0,0 +1,50 @@
+package body Queue is
+
+ procedure Enqueue(queue: in out T_Queue; data: T_Data) is
+ element: T_List_Node;
+ new_back: T_List;
+ begin
+ element.data := data;
+ element.next := null;
+ new_back := new T_List_Node'(element);
+
+ if Empty(queue) then
+ queue.front := new_back;
+ queue.back := new_back;
+ return;
+ end if;
+
+ queue.back.next := new_back;
+ queue.back := new_back;
+ end Enqueue;
+
+ procedure Dequeue(queue: in out T_Queue) is
+ begin
+ if Empty(queue) then
+ return;
+ end if;
+ if queue.front.next = null then
+ queue.front := null;
+ queue.back := null;
+ return;
+ end if;
+ queue.front := queue.front.next;
+ end Dequeue;
+
+ function Length(queue: T_Queue) return Natural is
+ tmp: T_List := queue.front;
+ i: Natural := 0;
+ begin
+ while tmp /= null loop
+ tmp := tmp.next;
+ i := i + 1;
+ end loop;
+ return i;
+ end Length;
+
+ function Empty(queue: T_Queue) return Boolean is
+ begin
+ return queue.front = null and queue.back = null;
+ end Empty;
+
+end Queue;