RosettaCodeData/Task/Queue-Definition/Elisa/queue-definition-1.elisa

24 lines
967 B
Plaintext

component GenericQueue ( Queue, Element );
type Queue;
Queue (MaxLength = integer) -> Queue;
Length( Queue ) -> integer;
Empty ( Queue ) -> boolean;
Full ( Queue ) -> boolean;
Push ( Queue, Element) -> nothing;
Pull ( Queue ) -> Element;
begin
Queue (MaxLength) = Queue:[ MaxLength; length:=0; list=alist(Element) ];
Length ( queue ) = queue.length;
Empty ( queue ) = (queue.length <= 0);
Full ( queue ) = (queue.length >= queue.MaxLength);
Push ( queue, element ) =
[ exception (Full(queue), "Queue Overflow");
queue.length:= queue.length + 1;
add (queue.list, element)];
Pull ( queue ) =
[ exception (Empty(queue), "Queue Underflow");
queue.length:= queue.length - 1;
remove(first(queue.list))];
end component GenericQueue;