// ----------------------------------------------------------------
//
// Class    : STACK from STACK.H
// Parents  : 
// Friends  :
// Part of  :
// Created  : 12 Oct 1990 by A.C.Coder
// Abstract : This module implements a dynamic stack for integers.
//            Other stacks can be easily constructed by changing
//            the defintion of STACK_ITEM type. Note: STACK_ITEM
//            should not be any array type.
// Revision : 1.0, 12 Oct 1990 12:00:00, by ACC
//
//              Copyright (C) 1990 Sample Software Ltd.
// ----------------------------------------------------------------
// Revision history
//
// 1.0: Initial revision
//
// ----------------------------------------------------------------

#ifndef STACK_H
#define STACK_H


// ------------------------- PUBLIC TYPES -------------------------

//
// STACK_ITEM: The items stored in the stack are of this type
//

typedef int STACK_ITEM;


// ----------------------- CLASS DECLARATION ----------------------


class Stack
{
public:
    Stack();
    ~Stack();
    void clear();
    unsigned height();
    void push(
        STACK_ITEM item);
    STACK_ITEM pop();
    STACK_ITEM top();
protected:
    STACK_ITEM &element(unsigned index);    
private:
    unsigned   myheight; // current height of stack
    unsigned   size;     // current size (max. height)
    STACK_ITEM *value;   // the data in stack
};


// ------------------ INLINE MEMBER DEFINTIONS -------------------

#endif