// ---------------------------------------------------------------- // // Class : STACK from STACK.CPP // Parents : // Friends : // Part of : // Created : 12 Oct 1990 by A.C.Coder // Abstract : This module implements a stack. // Revision : 1.0, 12 Oct 1990 12:00:02, by ACC // // Copyright (C) 1990 Sample Software Ltd. // ---------------------------------------------------------------- // Revision history // // 1.0: Initial revision // // ---------------------------------------------------------------- // -------------------- APPLICATION INCLUDES ---------------------- #include "stack.h" // ----------------------- PRIVATE CONSTANTS ---------------------- // // - SIZE_STEP: defines the number of new stack elements allocated // each time the stack becomes full // int const SIZE_STEP = 40; // ---------------------------------------------------------------- // // Function : Stack::Stack // Description : Initializes the private members, all to 0. Memory // is not allocated before the first push. // Updates : - height // - size // - value // // ---------------------------------------------------------------- Stack::Stack(): myheight(0), size(0), value(0) { // Nothing } // ---------------------------------------------------- // // Function : Stack::~Stack // Description : // Updates : - value // // ---------------------------------------------------- Stack::~Stack() { delete value; } // ---------------------------------------------------- // // Function : Stack::clear // Description : // Updates : - height // // ---------------------------------------------------- void Stack::clear() { myheight = 0; } // ---------------------------------------------------- // // Function : Stack::empty // Description : // Updates : // // ---------------------------------------------------- unsigned Stack::height() { return myheight; } // ---------------------------------------------------- // // Function : Stack::push // Description : // Updates : - height // - size // - value // // ---------------------------------------------------- void Stack::push( STACK_ITEM item) { if (myheight >= size) { size += SIZE_STEP; STACK_ITEM *new_value = new STACK_ITEM[size]; for (unsigned i = 0; i < myheight; i++) new_value[i] = value[i]; delete value; value = new_value; } value[myheight++] = item; } // ---------------------------------------------------- // // Function : Stack::pop // Description : // Updates : - height // // ---------------------------------------------------- STACK_ITEM Stack::pop() { STACK_ITEM item; if (myheight > 0) item = value[--myheight]; return item; } // ----------------------------------------------------- // // Function : Stack::top // Description : // Updates : // // ----------------------------------------------------- STACK_ITEM Stack::top() { STACK_ITEM item; if (myheight > 0) item = value[myheight - 1]; return item; } STACK_ITEM &Stack::element(unsigned index) { return value[index]; }