52 FlushPool(PxU32 chunkSize) : mChunks(
"FlushPoolChunk"), mChunkIndex(0), mOffset(0), mChunkSize(chunkSize)
54 mChunks.
pushBack(
static_cast<PxU8*
>(PX_ALLOC(mChunkSize,
"PxU8")));
59 for (PxU32 i = 0; i < mChunks.
size(); ++i)
64 void* allocate(PxU32 size, PxU32 alignment=16)
67 return allocateNotThreadSafe(size, alignment);
71 void* allocateNotThreadSafe(PxU32 size, PxU32 alignment=16)
73 PX_ASSERT(PxIsPowerOfTwo(alignment));
74 PX_ASSERT(size <= mChunkSize && !mChunks.
empty());
77 size_t unalignedStart = size_t(mChunks[mChunkIndex]+mOffset);
78 PxU32 pad = PxU32(((unalignedStart+alignment-1)&~(
size_t(alignment)-1)) - unalignedStart);
80 if (mOffset + size + pad > mChunkSize)
84 if (mChunkIndex >= mChunks.
size())
85 mChunks.
pushBack(
static_cast<PxU8*
>(PX_ALLOC(mChunkSize,
"PxU8")));
88 unalignedStart = size_t(mChunks[mChunkIndex]);
89 pad = PxU32(((unalignedStart+alignment-1)&~(
size_t(alignment)-1)) - unalignedStart);
92 void* ptr = mChunks[mChunkIndex] + mOffset + pad;
93 PX_ASSERT((
size_t(ptr)&(
size_t(alignment)-1)) == 0);
94 mOffset += size + pad;
98 void clear(PxU32 spareChunkCount = sSpareChunkCount)
102 clearNotThreadSafe(spareChunkCount);
105 void clearNotThreadSafe(PxU32 spareChunkCount = sSpareChunkCount)
107 PX_UNUSED(spareChunkCount);
110 PxU32 targetSize = mChunkIndex+sSpareChunkCount;
111 while (mChunks.
size() > targetSize)
121 void resetNotThreadSafe()
123 PxU8* firstChunk = mChunks[0];
125 for (PxU32 i = 1; i < mChunks.
size(); ++i)
PX_FORCE_INLINE void unlock() const
Definition PxMutex.h:149
PX_FORCE_INLINE void lock() const
Definition PxMutex.h:130
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39