aboutsummaryrefslogtreecommitdiff
path: root/queue.adb
blob: 286998469f95f081c7174018c2319ab8fcadf050 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;