Integer Stack Package Specification
MC logo

Integer Stack Package Specification

Ada Code Examples

<<Function Access Download Integer Stack Package Body>>
-- A simple array-based stack package.  Of course, it has a size
-- limit.  The operations are what you would expect:
--   Int_Stack  : Type of stack variables.
--   Push       : Push the integer on the stack.
--   Pop        : Pop the integer and place the result in the parameter.
--                If empty, puts zero and leaves stack unchanged.
--   Top        : Return the top of the stack, or 0 if there is none.
--   Empty      : See if the stack is empty.
--   Full       : See if the stack is full.
--   Clean      : Make the stack empty.
-- This has some similarity to a class, but it is not a blueprint for
-- objects.  Its main purpose is to control access to declarations.
-- A class can contain a type declaration (or several).  These types serve
-- the "blueprint" role.
-- This file is a package declaration.  It is named; the
-- .ads extension is what Gnat expects for files containing such declarations.
-- Also note that you do not need to compile this file.  (In fact, it will
-- complain if you try.)  This file is read automatically when the compiler
-- sees a with clause, or when the body file (int_stack.adb) is compiled.
package I_Stack 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 Int_Stack is private;

   -- Max stack size.
   Max_Size: constant Integer := 100;

   -- All the public stack operations.
   procedure Push(S: in out Int_Stack; I: Integer);
   procedure Pop(S: in out Int_Stack; I: out Integer);
   function Top(S: Int_Stack) return Integer;
   function Empty(S: Int_Stack) return Boolean;
   function Full(S: Int_Stack) return Boolean;
   procedure Clean(S: in out Int_Stack);

      -- The items here cannot be accessed by clients of the package.
      type Stack_Data_Type is array(1..Max_Size) of Integer;
      type Int_Stack is record
         Size: Integer := 0;
         Data: Stack_Data_Type;
      end record;
end I_Stack;
<<Function Access Integer Stack Package Body>>