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;
Queue_Size : constant Positive := 10;
Queue_underflow : 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); |