1#ifndef STACK_H 2#define STACK_H 3/* Stack - a template stack class 4** 5** Copyright 2001 pinc Software. All Rights Reserved. 6** Released under the terms of the MIT license. 7*/ 8 9 10#include <stdlib.h> 11 12#include <SupportDefs.h> 13 14 15template<class T> class Stack 16{ 17 public: 18 Stack() 19 : 20 fArray(NULL), 21 fUsed(0), 22 fMax(0) 23 { 24 } 25 26 ~Stack() 27 { 28 if (fArray) 29 free(fArray); 30 } 31 32 status_t Push(T value) 33 { 34 if (fUsed >= fMax) 35 { 36 fMax += 16; 37 fArray = (T *)realloc(fArray,fMax * sizeof(T)); 38 if (fArray == NULL) 39 return B_NO_MEMORY; 40 } 41 fArray[fUsed++] = value; 42 return B_OK; 43 } 44 45 bool Pop(T *value) 46 { 47 if (fUsed == 0) 48 return false; 49 50 *value = fArray[--fUsed]; 51 return true; 52 } 53 54 private: 55 T *fArray; 56 int32 fUsed; 57 int32 fMax; 58}; 59 60#endif /* STACK_H */ 61