! An implementation of the stack datatype. By Fredrik Ramsberg, 15 Jan 2003.
! After each Stack.push() operation, Stack.failure or Stack.success will be
! returned. After each Stack.pop() operation, the value popped or
! Stack.failure will be returned. Stack.failure and Stack.success can both
! be changed by the application creating the Stack object. Also, you can
! choose to read Stack.status after each pop operation, in case there is
! no safe value to use for signaling a failure.
!
! Sample of how to set up a stack:
!
! Array stack1tab table 3; ! Last argument states max # of items on stack
!
! Stack stack1 "Stack 1"
!   with
!     stacktable stack1tab;

Class Stack
 private
   stacktable -1,
   top 0,
 with
   failure -2,
   success -1,
   status -1,
   push [ element;
     self.status=self.success;
     if(self.top>=self.stacktable-->0)
       self.status=self.failure;
     else
       (self.stacktable)-->(++self.top)=element;
     return self.status;
   ],
   pop [;
     self.status=self.success;
     if(self.top<=0)
       self.status=self.failure;
     else
       return (self.stacktable)-->(self.top--);
     return self.status;
   ],
   size [;
     return self.stacktable-->0;
   ],
   element_count [;
     return self.top;
   ];