29#ifndef PXC_SCRATCH_ALLOCATOR_H
30#define PXC_SCRATCH_ALLOCATOR_H
32#include "foundation/PxAssert.h"
34#include "foundation/PxMutex.h"
35#include "foundation/PxArray.h"
36#include "foundation/PxAllocator.h"
37#include "foundation/PxUserAllocated.h"
51 void setBlock(
void* addr, PxU32 size)
53 PX_ASSERT(!(size&15));
59 PX_ASSERT(mStack.
size()==1);
62 mStart =
reinterpret_cast<PxU8*
>(addr);
67 void* allocAll(PxU32& size)
70 PX_ASSERT(mStack.
size()>0);
71 size = PxU32(mStack.
back()-mStart);
80 void* alloc(PxU32 requestedSize,
bool fallBackToHeap =
false)
82 requestedSize = (requestedSize+15)&~15;
85 PX_ASSERT(mStack.
size()>=1);
87 PxU8* top = mStack.
back();
89 if(top - mStart >= ptrdiff_t(requestedSize))
91 PxU8* addr = top - requestedSize;
99 return PX_ALLOC(requestedSize,
"Scratch Block Fallback");
102 void free(
void* addr)
104 PX_ASSERT(addr!=NULL);
105 if(!isScratchAddr(addr))
112 PX_ASSERT(mStack.
size()>1);
114 PxU32 i=mStack.
size()-1;
115 while(mStack[i]<addr)
118 PX_ASSERT(mStack[i]==addr);
122 bool isScratchAddr(
void* addr)
const
124 PxU8* a =
reinterpret_cast<PxU8*
>(addr);
125 return a>= mStart && a<mStart+mSize;
PX_FORCE_INLINE uint32_t size() const
Definition PxArray.h:242
PX_FORCE_INLINE T & pushBack(const T &a)
Definition PxArray.h:296
PX_INLINE void reserve(const uint32_t capacity)
Definition PxArray.h:486
PX_INLINE T popBack()
Definition PxArray.h:311
PX_INLINE void remove(uint32_t i)
Definition PxArray.h:388
PX_FORCE_INLINE const T & back() const
Definition PxArray.h:224
Definition PxUserAllocated.h:43
Definition PxcScratchAllocator.h:42
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39