1
0
Fork 0
mirror of https://github.com/ocornut/imgui.git synced 2026-01-09 23:54:20 +00:00

Internals: rename ImStableVector's BLOCK_SIZE to avoid conflict with Linux header defines. (#9088)

This commit is contained in:
ocornut 2025-11-21 19:47:03 +01:00
parent 6d910d5487
commit ee48fad09d

View file

@ -712,10 +712,10 @@ struct ImSpanAllocator
}; };
// Helper: ImStableVector<> // Helper: ImStableVector<>
// Allocating chunks of BLOCK_SIZE items. Objects pointers are never invalidated when growing, only by clear(). // Allocating chunks of BLOCKSIZE items. Objects pointers are never invalidated when growing, only by clear().
// Important: does not destruct anything! // Important: does not destruct anything!
// Implemented only the minimum set of functions we need for it. // Implemented only the minimum set of functions we need for it.
template<typename T, int BLOCK_SIZE> template<typename T, int BLOCKSIZE>
struct ImStableVector struct ImStableVector
{ {
int Size = 0; int Size = 0;
@ -729,19 +729,19 @@ struct ImStableVector
inline void resize(int new_size) { if (new_size > Capacity) reserve(new_size); Size = new_size; } inline void resize(int new_size) { if (new_size > Capacity) reserve(new_size); Size = new_size; }
inline void reserve(int new_cap) inline void reserve(int new_cap)
{ {
new_cap = IM_MEMALIGN(new_cap, BLOCK_SIZE); new_cap = IM_MEMALIGN(new_cap, BLOCKSIZE);
int old_count = Capacity / BLOCK_SIZE; int old_count = Capacity / BLOCKSIZE;
int new_count = new_cap / BLOCK_SIZE; int new_count = new_cap / BLOCKSIZE;
if (new_count <= old_count) if (new_count <= old_count)
return; return;
Blocks.resize(new_count); Blocks.resize(new_count);
for (int n = old_count; n < new_count; n++) for (int n = old_count; n < new_count; n++)
Blocks[n] = (T*)IM_ALLOC(sizeof(T) * BLOCK_SIZE); Blocks[n] = (T*)IM_ALLOC(sizeof(T) * BLOCKSIZE);
Capacity = new_cap; Capacity = new_cap;
} }
inline T& operator[](int i) { IM_ASSERT(i >= 0 && i < Size); return Blocks[i / BLOCK_SIZE][i % BLOCK_SIZE]; } inline T& operator[](int i) { IM_ASSERT(i >= 0 && i < Size); return Blocks[i / BLOCKSIZE][i % BLOCKSIZE]; }
inline const T& operator[](int i) const { IM_ASSERT(i >= 0 && i < Size); return Blocks[i / BLOCK_SIZE][i % BLOCK_SIZE]; } inline const T& operator[](int i) const { IM_ASSERT(i >= 0 && i < Size); return Blocks[i / BLOCKSIZE][i % BLOCKSIZE]; }
inline T* push_back(const T& v) { int i = Size; IM_ASSERT(i >= 0); if (Size == Capacity) reserve(Capacity + BLOCK_SIZE); void* ptr = &Blocks[i / BLOCK_SIZE][i % BLOCK_SIZE]; memcpy(ptr, &v, sizeof(v)); Size++; return (T*)ptr; } inline T* push_back(const T& v) { int i = Size; IM_ASSERT(i >= 0); if (Size == Capacity) reserve(Capacity + BLOCKSIZE); void* ptr = &Blocks[i / BLOCKSIZE][i % BLOCKSIZE]; memcpy(ptr, &v, sizeof(v)); Size++; return (T*)ptr; }
}; };
// Helper: ImPool<> // Helper: ImPool<>