--::::::::::
--stcnenad.ads   --       -Advanced
--::::::::::
with Stack_Cntl_Cntl.Advanced;
generic
package Stack_Cntl_En.Advanced is
   ------------------------------------------------------
   -- WARNING: Do not use adv_PPS
      package adv_PPS is new PPS.Advanced;
   ------------------------------------------------------

function Size_Of return natural;
   ---------------------------------------------------------------------
   -- Pre  Cond  : None
   -- Post Cond  : Returns a count of the number of object 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 (Object  : in out Object_Type;
                  Position: in     positive);
   ---------------------------------------------------------------------
   -- 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_Cntl_En.Advanced;