// rpimpl_stack.h // Copyright (c) Menno Rubingh 2016. Web: [http://rubinghsoftware.de] // // MR Mar 2016. // // StackDbl: // Stack of 'double' values, used for the evaluation of a RP expression. // Used internally by the RPInterpreter implementation. // #ifndef _RPIMPL_STACK_H_ #define _RPIMPL_STACK_H_ #include "rpimpl_ex.h" //SContext, Ex. class StackDbl { static int const ARRSIZE = 20; //Max stack size. int m_n; //Nr of elems currently on the stack. double m_arr[ARRSIZE]; public: void clear( void ) { m_n = 0; } StackDbl( void ) { clear(); } int getN( void ) const { return m_n; } void push( SContext const * iCxt, double iVal ) { if ( m_n == ARRSIZE ) { throw Ex( iCxt, "stack overflow"); } m_arr[m_n] = iVal; m_n++; } double pop ( SContext const * iCxt ) { if ( m_n == 0 ) { throw Ex( iCxt, "stack underflow"); } m_n--; return m_arr[m_n]; } }; #endif //_RPIMPL_STACK_H_