type Element is (Up, Down, Spin, Turn);
type Marker is mod Queue_Size;
type Queue_Type is record Top, Free : Marker := Marker'First; Is_Empty : Boolean := True; Elements : List; end record;
Queueunderflow : exception;
procedure Enqueue
| ( | Item | : Element; |
| Queue | : in out Queue_Type); |
procedure Dequeue
| ( | Item | : out Element; |
| Queue | : in out Queue_Type); |
function Is_Empty
| ( | Queue | : Queue_Type) return Boolean is (Queue.Is_Empty); |
function Is_Full
| ( | Queue | : Queue_Type) return Boolean is (not Queue.Is_Empty and then Queue.Top = Queue.Free); |