60 for (PxU32 a = 0; a < mBlocks.
size(); ++a)
62 for (PxU32 i = 0; i < SlabSize; ++i)
71 void reserve(PxU32 capacity)
73 if (capacity > mCapacity)
75 PxU32 nbSlabsRequired = (capacity + SlabSize - 1) / SlabSize;
77 PxU32 nbSlabsToAllocate = nbSlabsRequired - mBlocks.
size();
79 mCapacity += nbSlabsToAllocate * SlabSize;
81 for (PxU32 a = 0; a < nbSlabsToAllocate; ++a)
83 T* ts =
reinterpret_cast<T*
>(PX_ALLOC(
sizeof(T) * SlabSize,
"BlockArray"));
84 for(PxU32 i = 0; i < SlabSize; ++i)
85 PX_PLACEMENT_NEW(ts+i, T)();
91 void resize(PxU32 size)
94 for (PxU32 a = mSize; a < size; ++a)
96 mBlocks[a / SlabSize][a&(SlabSize - 1)].~T();
97 mBlocks[a / SlabSize][a&(SlabSize-1)] = T();
102 void forceSize_Unsafe(PxU32 size)
104 PX_ASSERT(size <= mCapacity);
108 void remove(PxU32 idx)
110 PX_ASSERT(idx < mSize);
111 for (PxU32 a = idx; a < mSize; ++a)
113 mBlocks[a / SlabSize][a&(SlabSize-1)] = mBlocks[(a + 1) / SlabSize][(a + 1) &(SlabSize-1)];
117 mBlocks[mSize / SlabSize][mSize&(SlabSize - 1)].~T();
120 void replaceWithLast(PxU32 idx)
122 PX_ASSERT(idx < mSize);
124 mBlocks[idx / SlabSize][idx%SlabSize] = mBlocks[mSize / SlabSize][mSize%SlabSize];
127 T& operator [] (
const PxU32 idx)
129 PX_ASSERT(idx < mSize);
131 return mBlocks[idx / SlabSize][idx%SlabSize];
134 const T& operator [] (
const PxU32 idx)
const
136 PX_ASSERT(idx < mSize);
138 return mBlocks[idx / SlabSize][idx%SlabSize];
141 void pushBack(
const T& item)
144 mBlocks[mSize / SlabSize][mSize%SlabSize] = item;
148 PxU32 capacity()
const {
return mCapacity; }
150 PxU32 size()
const {
return mSize; }
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39