LiquidFun
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
b2GrowableStack.h
1 /*
2 * Copyright (c) 2010 Erin Catto http://www.box2d.org
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 * 1. The origin of this software must not be misrepresented; you must not
11 * claim that you wrote the original software. If you use this software
12 * in a product, an acknowledgment in the product documentation would be
13 * appreciated but is not required.
14 * 2. Altered source versions must be plainly marked as such, and must not be
15 * misrepresented as being the original software.
16 * 3. This notice may not be removed or altered from any source distribution.
17 */
18 
19 #ifndef B2_GROWABLE_STACK_H
20 #define B2_GROWABLE_STACK_H
21 
23 #include <string.h>
24 #include <memory.h>
25 
29 template <typename T, int32 N>
31 {
32 public:
34  {
35  m_stack = m_array;
36  m_count = 0;
37  m_capacity = N;
38  }
39 
41  {
42  if (m_stack != m_array)
43  {
44  b2Free(m_stack);
45  m_stack = NULL;
46  }
47  }
48 
49  void Push(const T& element)
50  {
51  if (m_count == m_capacity)
52  {
53  T* old = m_stack;
54  m_capacity *= 2;
55  m_stack = (T*)b2Alloc(m_capacity * sizeof(T));
56  memcpy(m_stack, old, m_count * sizeof(T));
57  if (old != m_array)
58  {
59  b2Free(old);
60  }
61  }
62 
63  m_stack[m_count] = element;
64  ++m_count;
65  }
66 
67  T Pop()
68  {
69  b2Assert(m_count > 0);
70  --m_count;
71  return m_stack[m_count];
72  }
73 
74  int32 GetCount()
75  {
76  return m_count;
77  }
78 
79 private:
80  T* m_stack;
81  T m_array[N];
82  int32 m_count;
83  int32 m_capacity;
84 };
85 
86 
87 #endif
void b2Free(void *mem)
If you implement b2Alloc, you should also implement this function.
Definition: b2Settings.cpp:99
void * b2Alloc(int32 size)
Implement this function to use your own memory allocator.
Definition: b2Settings.cpp:93
Definition: b2GrowableStack.h:30