1#ifndef _TSTACK_H
2#define _TSTACK_H
3/* Stack - a template stack class, does not call any constructors/destructors
4**
5** Copyright 2001 pinc Software. All Rights Reserved.
6** This file may be used under the terms of the MIT License.
7**
8** 2002-03-10 Modified by Marcus Overhagen
9*/
10
11template<class T> class Stack {
12	public:
13		Stack()
14			:
15			fArray(NULL),
16			fUsed(0),
17			fMax(0)
18		{
19		}
20
21		~Stack()
22		{
23			if (fArray)
24				free(fArray);
25		}
26
27		bool Push(const T & value)
28		{
29			if (fUsed >= fMax) {
30				fMax += 16;
31				T *newArray = (T *)realloc(fArray, fMax * sizeof(T));
32				if (newArray == NULL)
33					return false;
34
35				fArray = newArray;
36			}
37			fArray[fUsed++] = value;
38			return true;
39		}
40
41		bool Pop(T *value)
42		{
43			if (fUsed == 0)
44				return false;
45
46			*value = fArray[--fUsed];
47			return true;
48		}
49
50		int32 CountItems() const
51		{
52			return fUsed;
53		}
54
55	private:
56		T		*fArray;
57		int32	fUsed;
58		int32	fMax;
59};
60
61#endif	/* TSTACK_H */
62