#ifndef STACK_
#define STACK_
#ifndef NULL
#define NULL 0
#endif

class Stack {
  public:
    virtual ~Stack() {}
    
    /**
     * Returns the top element of the stack without removing it
     */
    virtual int peek() const = 0;
    
    /**
     * Removes (and returns) the top element of the stack
     */
    virtual int pop() = 0;
    
    /**
     * Pushes the given value onto the top of the stack
     */
    virtual void push(int) = 0;
};

#endif /*STACK_*/
