/*------------------------------------------------------------------------* * programm : S T A C K . C P P * * date : 05.11.1992 * * created by : (fa) * * Projekt MEE * * * *------------------------------------------------------------------------*/ // // Contents ------------------------------------------------- // // Stack // // Member functions: // // Stack::Stack // Stack::~Stack // Stack::Push // Stack::Pop // Stack::Top // Stack::isNotEmpty // Stack::forEach // // End ------------------------------------------------------ // // Implementation Dependencies ------------------------------ #include "stack.hpp" // End ------------------------------------------------------ // Implementation ------------------------------------------- Stack::Stack(){ top = NULL; itemsInStack = NULL; } //----------------------------------------------------------- void Stack::Push(Element &element){ if(itemsInStack==NULL){ // 0 ... 1 element top = new Stack_element; top->object=&element; } else{ Stack_element *p=new Stack_element(top); p->object=&element; top=p; } itemsInStack++; } //----------------------------------------------------------- Element& Stack::Pop(){ Stack_element *se_tmp; Element *ob_tmp; ob_tmp = top->object; se_tmp = top; top = top->next; delete se_tmp; itemsInStack--; return *ob_tmp; } //----------------------------------------------------------- Element& Stack::Top(){ return *(top->object); } //----------------------------------------------------------- int Stack::isNotEmpty(){ return itemsInStack; } //----------------------------------------------------------- void Stack::forEach( void (Element::*fun)() ){ Stack_element *se_tmp =top; if(itemsInStack!=NULL){ do{ (Top().*fun)(); top=top->next; }while(!(top==(Stack_element*)NULL)); } top=se_tmp; } //----------------------------------------------------------- Stack::~Stack(){ while(isNotEmpty()) Pop(); } // End of implementation -----------------------------------