Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/general/stack.hpp
3206 views
1
#ifndef FILE_STACK
2
#define FILE_STACK
3
4
/*****************************************************************************/
5
/* File: stack.hh */
6
/* Author: Wolfram Muehlhuber */
7
/* Date: September 98 */
8
/*****************************************************************************/
9
10
/*
11
12
Stack class, based on a resizable array
13
14
*/
15
16
17
#include "array.hpp"
18
19
20
///
21
template <class T> class STACK
22
{
23
public:
24
///
25
inline STACK (INDEX asize = 0, INDEX ainc = 0);
26
///
27
inline ~STACK ();
28
29
///
30
inline void Push (const T & el);
31
///
32
inline T & Pop ();
33
///
34
const inline T & Top () const;
35
///
36
inline int IsEmpty () const;
37
///
38
inline void MakeEmpty ();
39
40
private:
41
///
42
ARRAY<T> elems;
43
///
44
INDEX size;
45
};
46
47
48
49
50
/*
51
52
Stack class, based on a resizable array
53
54
*/
55
56
template <class T>
57
inline STACK<T> :: STACK (INDEX asize, INDEX ainc)
58
: elems(asize, ainc)
59
{
60
size = 0;
61
}
62
63
64
template <class T>
65
inline STACK<T> :: ~STACK ()
66
{
67
;
68
}
69
70
71
template <class T>
72
inline void STACK<T> :: Push (const T & el)
73
{
74
if (size < elems.Size())
75
elems.Elem(++size) = el;
76
else
77
{
78
elems.Append(el);
79
size++;
80
}
81
}
82
83
84
template <class T>
85
inline T & STACK<T> :: Pop ()
86
{
87
return elems.Elem(size--);
88
}
89
90
91
template <class T>
92
const inline T & STACK<T> :: Top () const
93
{
94
return elems.Get(size);
95
}
96
97
template <class T>
98
inline int STACK<T> :: IsEmpty () const
99
{
100
return (size == 0);
101
}
102
103
104
template <class T>
105
inline void STACK<T> :: MakeEmpty ()
106
{
107
size = 0;
108
}
109
110
111
112
#endif
113
114