#ifndef MANDEL_ARENA_H #define MANDEL_ARENA_H #include #include #include namespace mnd { namespace util { template class Arena { struct Chunk { std::array data; int used = 0; bool full(void) const { return used = chunkSize; } T* allocate() { return data[used++]; } }; std::vector> chunks; public: T* allocate(void) { if (chunks.empty() || chunks[chunks.size() - 1].full()) { chunks.push_back(Chunk{}); } return chunks[chunks.size() - 1].allocate(); } }; } } #endif // MANDEL_ARENA_H