Ada Int Stack Package
-- Linked-list based stack package.
package IntStackPkg is
-- This declares that Int_Stack is a type, but the contents of the type
-- are private, and are invisible to clients of the package.
type IntStack is limited private;
-- All the public stack operations.
procedure Push(S: in out IntStack; I: Integer);
procedure Pop(S: in out IntStack; I: out Integer);
function Top(S: IntStack) return Integer;
function IsEmpty(S: IntStack) return Boolean;
procedure Clear(S: in out IntStack);
-- The items here cannot be accessed by clients of the package.
type StackNode; -- There is a node type.
type IntStack is access all StackNode; -- Stack is ptr to a list head
type NodePtr is access all StackNode; -- Other node pointers.
type StackNode is record -- Nodes are like this.
Data: Integer; -- Content.
Next: NodePtr; -- Link to next node.
-- Note: We have no direct way to initialize Stacks when declared. We
-- depend on the behavior of Ada that pointers are always initialized to