diff options
| -rw-r--r-- | main.adb | 2 | ||||
| -rw-r--r-- | queue.adb | 50 | ||||
| -rw-r--r-- | queue.ads | 28 | ||||
| -rw-r--r-- | snake.gpr | 2 |
4 files changed, 69 insertions, 13 deletions
@@ -4,6 +4,8 @@ use Ada.Text_IO; with Graphics; use Graphics; +with Queue; + procedure Main is state: T_State; begin @@ -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; @@ -1,21 +1,25 @@ generic - type T_Data is limited private; + type T_Data is private; package Queue is - type T_Queue is record - front: T_List; - back: T_List; - end record; - - type T_List_Cell; - type T_List is access T_List_Cell; - type T_List_Cell is record + type T_List_Node; + type T_List is access all T_List_Node; + type T_List_Node is record data: T_Data; next: T_List; end record; - procedure Enqueue(queue: T_Queue; - data: T_Data); - procedure Dequeue(queue: T_Queue); + type T_Queue is record + front: T_List := null; + back: T_List := null; + end record; + + procedure Enqueue(queue: in out T_Queue; data: T_Data); + procedure Dequeue(queue: in out T_Queue); + function Length(queue: T_Queue) return Natural; + +private + + function Empty(queue: T_Queue) return Boolean; end Queue; @@ -2,6 +2,6 @@ with "./vendor/sdlada/share/gpr/sdlada.gpr"; project Snake is for Source_Dirs use ("./"); - for Source_Files use ("main.adb", "graphics.adb", "game.adb"); + for Source_Files use ("main.adb", "graphics.adb", "game.adb", "queue.adb"); for Main use ("main.adb"); end Snake; |
