OO Generalized Stack Package
MC logo

OO Generalized Stack Package

Ada Code Examples

<<Polymorphic Driver Download OO Generalized Stack Body>>
-- Object-oriented generalized stack.  This illustrates the use of a
-- controlled type, which is one that has construction and destructions.
-- It also shows how to create two related types in the same package so
-- that they can share private declarations.  This sort of thing is
-- accomplished in Java or C++ using nested classes, or using friend
-- declarations in C++.
with Ada.Finalization; use Ada.Finalization;

package GenStack is
   -- This is the stack type.
   type Stack is new Controlled with private;

   -- This is the base type for nodes.  Client packages must derive their
   -- nodes from StackData.  Since it comes from Controlled, the user can
   -- override the Initialize, Adjust, and Finalize methods as needed.
   type StackData is new Controlled with null record;

   -- Initialization operations.
   procedure Initialize(S: in out Stack);
   procedure Adjust(S: in out Stack);
   procedure Finalize(S: in out Stack);

   -- Stack operations.
   procedure Push(S: in out Stack; D: StackData'class);
   procedure Pop(S: in out Stack; D: in out StackData'class);
   procedure Top(S: Stack; Data: in out StackData'class);
   function Empty(S: Stack) return Boolean;

      -- Pointer to the node type.
      type Node;
      type Node_Ptr is access Node;

      -- Here is the generalized stack itself.  We would just make it the
      -- pointer itself, but it needs to be a record so it can be in a with.
      type Stack is new Controlled with record
         Head: Node_Ptr;
      end record;

      -- Now, we need a pointer to the data part.
      type Data_Ptr is access StackData'Class;

      -- This is the node type.
      type Node is record
         Data: Data_Ptr;
         Next: Node_Ptr;
      end record;

end GenStack;
<<Polymorphic Driver OO Generalized Stack Body>>