--::::::::::
--stlpenad.ads   --       -Advanced
--::::::::::
with Stack_Lpt_Cntl.Advanced;
generic
package Stack_Lpt_En.Advanced is
   ---------------------------------------------------------------------
   -- WARNING: Do not use Adv_Stk
      package Adv_Stk is new Stk.Advanced;
   ---------------------------------------------------------------------

function Size_Of return natural;
   ---------------------------------------------------------------------
   -- Pre  Cond : None
   -- Post Cond : Returns count of objects in the stack
   -- Exceptions: None
   ---------------------------------------------------------------------

function Peek (Position: positive) return Object_Type;
   ---------------------------------------------------------------------
   -- Pre  Cond : 1 <= Position <= Size_Of (Stack)
   --             1 = top, Size_Of (Stack) = bottom
   -- Post Cond : Returns Stack(Position)
   -- Exceptions: Invalid_Position
   ---------------------------------------------------------------------

procedure Poke (Position: in     positive;
                Object  : in out Object_Type);
   ---------------------------------------------------------------------
   -- Pre  Cond : 1 <= Position <= Size_Of (Stack)
   --             1 = top, Size_Of (Stack) = bottom
   -- Post Cond : Stack(Position)' = Object
   -- Exceptions: Invalid_Position
   -- NOTE:   Swap used to exchange value of Object_Type
   ---------------------------------------------------------------------

procedure Insert (Position: in     positive;
                  Object  : in out Object_Type);
   ---------------------------------------------------------------------
   -- Pre  Cond : 1 <= Position <= Size_Of (Stack)
   -- Post Cond : Stack'=(a ,...,a          ,Object,a        ,...,a )
   --                      1      position-1         position      n
   -- Exceptions: Invalid_Position
   -- NOTE:   Swap used to exchange value of Object_Type
   ---------------------------------------------------------------------

procedure Remove (Position: in     positive;
                  Object  : in out Object_Type);
   ---------------------------------------------------------------------
   -- Pre  Cond : 1 <= Position <= Size_Of (Stack)
   -- Post Cond : Stack'=(a ,...,a          ,a          ,...,a )
   --                      1      position-1  position+1      n
   --             Object' = Stack(position)
   -- Exceptions: Invalid_Position
   -- NOTE:   Swap used to exchange value of Object_Type
   ---------------------------------------------------------------------

end Stack_Lpt_En.Advanced;