/** * @file fl_stack.h * @brief Fixed-length stack * * @date Jul 9, 2014 * @author Andrey Belomutskiy, (c) 2012-2015 */ #ifndef FL_STACK_H_ #define FL_STACK_H_ #include "main.h" #include "error_handling.h" template class FLStack { public: FLStack(); void push(T value); void reset(); T pop(); T get(int index); int size(); bool isEmpty(); private: int index; T values[MAXSIZE]; }; template FLStack::FLStack() { reset(); } template bool FLStack::isEmpty() { return index == 0; } template void FLStack::reset() { index = 0; } template void FLStack::push(T value) { if(index >= MAXSIZE) { firmwareError("FLstack overflow"); return; //warning() } values[index++] = value; } template T FLStack::pop() { if (index == 0) { firmwareError("FLStack is empty"); } return values[--index]; } template T FLStack::get(int index) { efiAssert(index >= 0 && index < MAXSIZE, "FLget", values[0]); return values[index]; } template int FLStack::size() { return index; } template class ArrayList { public: ArrayList(); int size; Type elements[Dimention]; void reset(void); Type *add(void); }; template ArrayList< Type, Dimention>::ArrayList(void) { memset(&elements, 0, sizeof(elements)); reset(); } template void ArrayList< Type, Dimention>::reset(void) { size = 0; } template Type * ArrayList< Type, Dimention>::add(void) { efiAssert(size < Dimention, "add() too many elements", (Type *)NULL); return &elements[size++]; } #endif /* FL_STACK_H_ */