23 #ifndef INCLUDED_ALLOCATORS_DYNAMIC_ARENA 24 #define INCLUDED_ALLOCATORS_DYNAMIC_ARENA 43 template<
size_t BLOCK_SIZE>
56 debug_warn(
"DynamicArena failed to allocate chunk");
57 throw std::bad_alloc();
63 std::free(static_cast<void*>(
m_Data));
81 Block tmp(std::move(other));
126 void*
allocate(
size_t n,
const void*,
size_t alignment)
134 debug_warn(
"DynamicArena cannot allocate more than chunk size");
135 throw std::bad_alloc();
138 if (!
m_Blocks.back().Available(n, alignment))
141 return reinterpret_cast<void*
>(
m_Blocks.back().Allocate(n, alignment));
161 #endif // INCLUDED_ALLOCATORS_DYNAMIC_ARENA static const size_t BLOCK_SIZE
Definition: write_buffer.cpp:32
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
Definition: code_annotation.h:38
#define ROUND_UP(n, multiple)
Definition: bits.h:284
Block & operator=(Block &&other)
Definition: DynamicArena.h:76
Block(Block &&other)
Definition: DynamicArena.h:69
bool Available(size_t n, size_t alignment) const
Definition: DynamicArena.h:95
void AllocateNewBlock()
Definition: DynamicArena.h:121
uint8_t * m_Data
Definition: DynamicArena.h:110
size_t m_Size
Definition: DynamicArena.h:109
Definition: DynamicArena.h:47
std::vector< Block > m_Blocks
Definition: DynamicArena.h:156
~Block()
Definition: DynamicArena.h:61
Block & operator=(const Block &other)=delete
unsigned char uint8_t
Definition: wposix_types.h:51
Block()
Definition: DynamicArena.h:50
friend void swap(Block &lhs, Block &rhs)
Definition: DynamicArena.h:87
Definition: allocator_policies.h:36
DynamicArena()
Definition: DynamicArena.h:115
void clear()
Definition: DynamicArena.h:149
void * allocate(size_t n, const void *, size_t alignment)
Definition: DynamicArena.h:126
uint8_t * Allocate(size_t n, size_t alignment)
Definition: DynamicArena.h:100
'Blind' memory allocator.
Definition: DynamicArena.h:44
void deallocate(void *p, size_t n)
Definition: DynamicArena.h:144
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:332
NONCOPYABLE(DynamicArena)