-- This is the specification for an integer stack abstract data type.

package IntStackPkg is

   type StackType is limited private;

   Stack_Is_Empty, Stack_Is_Full : Exception;

   function IsEmpty (S : StackType) return Boolean;
   function IsFull  (S : StackType) return Boolean;

   procedure Push (I : Integer; S : in out StackType);
   procedure Pop  (S : in out StackType);

   function  Top  (S : StackType) return Integer;

private
   MaxSize : Constant Integer := 1_000;

   type ElementArray is array(1 .. MaxSize) of Integer;

   type StackType is record
      Elements : ElementArray;
      TheTop : Integer range 0 .. MaxSize := 0;
   end record;

end IntStackPkg;