|ASCL User's Guide: ASCL, ADA Standard Component Library; Version 0.1.0; Document Revision $Revision: 1.7 $|
|Prev||Chapter 40. ASCL.Data_Structures.Stack_Unbounded||Next|
package Implementation is new Stack_Unbounded_Unprotected (Element => Element, Assign => Assign); type Context_Data is tagged null record;
type Action_Ptr is access procedure (Item : in out Element; Context : in out Context_Data'Class; Continue : out Boolean);
We can't have a generic protected subprogram, so we use this type to implement Iterate. This means that the actual procedure passed to Iterate must be declared at the library level to pass accessibility checks.
Makes the stack empty.
procedure Push (Item : in Element); -- raise Storage_Exhausted.
Adds Item to the top of the stack.
Raises Storage_Exhausted if there is insufficient storage for the Element.
The stack is unchanged if Storage_Exhausted is raised.
procedure Pop (Item : in out Element); -- raise Empty.
Removes the top Element from the stack and puts it in Item. Raises Empty if the stack has no elements.
The stack is unchanged if Empty is raised.
Contents of Item are undefined if Empty is raised.
Precondition: not Is_Empty raises Empty if violated.
function Is_Empty return Boolean;
Returns True if the stack is empty; False otherwise.
function Length return Natural;
Returns the number of Elements in the stack.
function Peek return Element;
Returns the Element at the top of the stack without altering the stack. Raises Empty if the stack is empty.
procedure Iterate (Action : in Action_Ptr; Context : in out Context_Data'Class);
Applies Action to each Element in the stack in turn, from top to bottom.
Iterate returns immediately if Action sets Continue to False.