summaryrefslogtreecommitdiff
path: root/queue.ads
diff options
context:
space:
mode:
authorrexim <reximkut@gmail.com>2024-03-17 00:07:38 +0700
committerrexim <reximkut@gmail.com>2024-03-17 00:07:38 +0700
commitf447e5e6b43326645a4990f2039ba728581c6f06 (patch)
treeb26d9d131270b0022ce45d689bb2ec870364053a /queue.ads
parent6658d0649e83f3dd4ec863abadc7c187a4f66276 (diff)
Implement custom ring buffer style queue
Diffstat (limited to 'queue.ads')
-rw-r--r--queue.ads18
1 files changed, 18 insertions, 0 deletions
diff --git a/queue.ads b/queue.ads
new file mode 100644
index 0000000..fdfa484
--- /dev/null
+++ b/queue.ads
@@ -0,0 +1,18 @@
+generic
+ type Item is private;
+package Queue is
+ INIT_CAPACITY: constant Integer := 256;
+
+ type Items_Array is array (Natural range <>) of Item;
+ type Items_Array_Access is access Items_Array;
+
+ type Queue is record
+ Items: Items_Array_Access := null;
+ Start: Integer := 0;
+ Count: Integer := 0;
+ end record;
+
+ procedure Grow(Q: in out Queue);
+ procedure Enqueue(Q: in out Queue; X: Item);
+ function Dequeue(Q: in out Queue; X: out Item) return Boolean;
+end Queue;