Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
externals
Box2D
Box2D
Common
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
19
#include <
Box2D/Common/b2StackAllocator.h
>
20
#include <
Box2D/Common/b2Math.h
>
21
22
b2StackAllocator::b2StackAllocator
()
23
{
24
m_index
= 0;
25
m_allocation
= 0;
26
m_maxAllocation
= 0;
27
m_entryCount
= 0;
28
}
29
30
b2StackAllocator::~b2StackAllocator
()
31
{
32
b2Assert
(
m_index
== 0);
33
b2Assert
(
m_entryCount
== 0);
34
}
35
36
void
*
b2StackAllocator::Allocate
(
int32
size
)
37
{
38
b2Assert
(
m_entryCount
<
b2_maxStackEntries
);
39
40
b2StackEntry
*
entry
=
m_entries
+
m_entryCount
;
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;
55
m_maxAllocation
=
b2Max
(
m_maxAllocation
,
m_allocation
);
56
++
m_entryCount
;
57
58
return
entry->
data
;
59
}
60
61
void
b2StackAllocator::Free
(
void
*
p
)
62
{
63
b2Assert
(
m_entryCount
> 0);
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
80
int32
b2StackAllocator::GetMaxAllocation
()
const
81
{
82
return
m_maxAllocation
;
83
}
b2StackAllocator::m_index
int32 m_index
Definition:
b2StackAllocator.h:51
b2_stackSize
const int32 b2_stackSize
Definition:
b2StackAllocator.h:24
entry
int entry
b2StackAllocator::m_entryCount
int32 m_entryCount
Definition:
b2StackAllocator.h:57
b2StackAllocator.h
b2Math.h
b2StackAllocator::m_maxAllocation
int32 m_maxAllocation
Definition:
b2StackAllocator.h:54
b2StackAllocator::b2StackAllocator
b2StackAllocator()
Definition:
b2StackAllocator.cpp:22
b2StackEntry::data
char * data
Definition:
b2StackAllocator.h:29
b2Max
T b2Max(T a, T b)
Definition:
b2Math.h:642
int32
signed int int32
Definition:
b2Settings.h:31
b2StackEntry::size
int32 size
Definition:
b2StackAllocator.h:30
b2StackAllocator::GetMaxAllocation
int32 GetMaxAllocation() const
Definition:
b2StackAllocator.cpp:80
b2StackAllocator::Allocate
void * Allocate(int32 size)
Definition:
b2StackAllocator.cpp:36
b2StackAllocator::m_entries
b2StackEntry m_entries[b2_maxStackEntries]
Definition:
b2StackAllocator.h:56
p
GLfloat GLfloat p
b2StackAllocator::m_data
char m_data[b2_stackSize]
Definition:
b2StackAllocator.h:50
b2StackAllocator::~b2StackAllocator
~b2StackAllocator()
Definition:
b2StackAllocator.cpp:30
size
GLsizeiptr size
b2StackEntry::usedMalloc
bool usedMalloc
Definition:
b2StackAllocator.h:31
b2StackAllocator::Free
void Free(void *p)
Definition:
b2StackAllocator.cpp:61
b2Assert
#define b2Assert(A)
Definition:
b2Settings.h:27
b2StackEntry
Definition:
b2StackAllocator.h:27
b2Alloc
void * b2Alloc(int32 size)
Implement this function to use your own memory allocator.
Definition:
b2Settings.cpp:27
b2_maxStackEntries
const int32 b2_maxStackEntries
Definition:
b2StackAllocator.h:25
b2Free
void b2Free(void *mem)
If you implement b2Alloc, you should also implement this function.
Definition:
b2Settings.cpp:32
b2StackAllocator::m_allocation
int32 m_allocation
Definition:
b2StackAllocator.h:53
mvsim
Author(s):
autogenerated on Fri May 7 2021 03:05:51