------------------------------------------------------------------------------
MC logo
Ada Int Stack Package
[^] Names and Scope
------------------------------------------------------------------------------
[Ch. 1: Overview and History] [Syntax] [Names and Scope] [Types and Type Systems] [Semantics] [Functions] [Memory Management] [Imperitive Programs and Functional Abstraction] [Modular and Class Abstraction] [Functional Programming] [Logic Programming]
[Java Class Scope] [Ada Int Stack Package] [Ada Int Stack Impl] [Ada Int Stack Driver] [Java Int Stack Class] [Java Int Stack Driver] [C++ Int Stack Class] [C++ Int Stack Impl] [C++ Int Stack Driver]
intstackpkg.ads
--
-- 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);

   private
      -- 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.
      end record;
end IntStackPkg;
--
-- Note: We have no direct way to initialize Stacks when declared.  We
-- depend on the behavior of Ada that pointers are always initialized to
-- null.
--