b2StackAllocator.cpp
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2006-2009 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 
20 #include <Box2D/Common/b2Math.h>
21 
23 {
24  m_index = 0;
25  m_allocation = 0;
26  m_maxAllocation = 0;
27  m_entryCount = 0;
28 }
29 
31 {
32  b2Assert(m_index == 0);
33  b2Assert(m_entryCount == 0);
34 }
35 
37 {
39 
41  entry->size = size;
42  if (m_index + size > b2_stackSize)
43  {
44  entry->data = (char*)b2Alloc(size);
45  entry->usedMalloc = true;
46  }
47  else
48  {
49  entry->data = m_data + m_index;
50  entry->usedMalloc = false;
51  m_index += size;
52  }
53 
54  m_allocation += size;
56  ++m_entryCount;
57 
58  return entry->data;
59 }
60 
62 {
64  b2StackEntry* entry = m_entries + m_entryCount - 1;
65  b2Assert(p == entry->data);
66  if (entry->usedMalloc)
67  {
68  b2Free(p);
69  }
70  else
71  {
72  m_index -= entry->size;
73  }
74  m_allocation -= entry->size;
75  --m_entryCount;
76 
77  p = NULL;
78 }
79 
81 {
82  return m_maxAllocation;
83 }
const int32 b2_stackSize
T b2Max(T a, T b)
Definition: b2Math.h:643
signed int int32
Definition: b2Settings.h:31
int32 GetMaxAllocation() const
void * Allocate(int32 size)
b2StackEntry m_entries[b2_maxStackEntries]
char m_data[b2_stackSize]
void Free(void *p)
#define b2Assert(A)
Definition: b2Settings.h:27
void * b2Alloc(int32 size)
Implement this function to use your own memory allocator.
Definition: b2Settings.cpp:27
const int32 b2_maxStackEntries
void b2Free(void *mem)
If you implement b2Alloc, you should also implement this function.
Definition: b2Settings.cpp:32


mvsim
Author(s):
autogenerated on Thu Jun 6 2019 19:36:40