27 #ifndef INCLUDED_ALLOCATORS_ARENA 28 #define INCLUDED_ALLOCATORS_ARENA 42 template<
class Storage = Storage_Fixed<> >
99 return size <= (capacity -
end);
126 while (chunk != NULL)
140 head->storage =
sizeof(
ArenaChunk) + uintptr_t(head);
142 head->capacity = chunkSize;
148 if (size > chunkSize)
150 debug_warn(L
"DynamicArena cannot allocate more than chunk size");
151 throw std::bad_alloc();
153 else if (!head->Available(size))
156 return (
void*)head->Allocate(size);
173 #endif // #ifndef INCLUDED_ALLOCATORS_ARENA size_t capacity
Definition: arena.h:112
const size_t chunkSize
Definition: arena.h:166
#define UNUSED(param)
mark a function parameter as unused and avoid the corresponding compiler warning. ...
Definition: code_annotation.h:38
allocator design parameters:
Definition: arena.h:43
size_t MaxCapacity() const
void AllocateNewChunk()
Definition: arena.h:134
Arena(size_t maxSize)
Definition: arena.h:47
bool Contains(uintptr_t address) const
Definition: arena.h:74
void TestArena()
Definition: arena.cpp:70
static uintptr_t StorageAppend(Storage &storage, size_t &end, size_t size)
Definition: allocator_policies.h:319
#define ENSURE(expr)
ensure the expression <expr> evaluates to non-zero.
Definition: debug.h:287
size_t end
Definition: arena.h:81
void DeallocateAll()
Definition: arena.h:68
DynamicArena(size_t chunkSize)
Definition: arena.h:118
size_t RemainingBytes() const
Definition: arena.h:53
void deallocate(void *p, size_t size)
Definition: arena.h:63
uintptr_t storage
Definition: arena.h:110
ArenaChunk * next
Definition: arena.h:113
uintptr_t Allocate(size_t size)
Definition: arena.h:103
bool Available(size_t size) const
Definition: arena.h:97
Definition: allocator_policies.h:35
~DynamicArena()
Definition: arena.h:123
void deallocate(void *p, size_t size)
Definition: arena.h:159
allocator design parameters:
Definition: arena.h:93
Storage storage
Definition: arena.h:80
#define debug_warn(expr)
display the error dialog with the given text.
Definition: debug.h:329
ArenaChunk * head
Definition: arena.h:167
void * allocate(size_t size)
Definition: arena.h:146
size_t end
Definition: arena.h:111
Definition: allocator_policies.h:86
uintptr_t Address() const
void * allocate(size_t size)
Definition: arena.h:58