diff options
author | chai <chaifix@163.com> | 2019-09-13 15:32:29 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-09-13 15:32:29 +0800 |
commit | e095043485d1d298571af6d9eca7f0db9009ea7a (patch) | |
tree | 8e60ba581f031ac293301515408f185dedd92149 /src/3rdparty/Box2D/Common/b2StackAllocator.h | |
parent | 20535cb86266d7a4828009f3ddca42e35269b9e2 (diff) |
+box2d
Diffstat (limited to 'src/3rdparty/Box2D/Common/b2StackAllocator.h')
-rw-r--r-- | src/3rdparty/Box2D/Common/b2StackAllocator.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/3rdparty/Box2D/Common/b2StackAllocator.h b/src/3rdparty/Box2D/Common/b2StackAllocator.h new file mode 100644 index 0000000..27340e8 --- /dev/null +++ b/src/3rdparty/Box2D/Common/b2StackAllocator.h @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any damages +* arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it +* freely, subject to the following restrictions: +* 1. The origin of this software must not be misrepresented; you must not +* claim that you wrote the original software. If you use this software +* in a product, an acknowledgment in the product documentation would be +* appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be +* misrepresented as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef B2_STACK_ALLOCATOR_H +#define B2_STACK_ALLOCATOR_H + +#include "Box2D/Common/b2Settings.h" + +const int32 b2_stackSize = 100 * 1024; // 100k +const int32 b2_maxStackEntries = 32; + +struct b2StackEntry +{ + char* data; + int32 size; + bool usedMalloc; +}; + +// This is a stack allocator used for fast per step allocations. +// You must nest allocate/free pairs. The code will assert +// if you try to interleave multiple allocate/free pairs. +class b2StackAllocator +{ +public: + b2StackAllocator(); + ~b2StackAllocator(); + + void* Allocate(int32 size); + void Free(void* p); + + int32 GetMaxAllocation() const; + +private: + + char m_data[b2_stackSize]; + int32 m_index; + + int32 m_allocation; + int32 m_maxAllocation; + + b2StackEntry m_entries[b2_maxStackEntries]; + int32 m_entryCount; +}; + +#endif |