SDEngine
Game Engine
Loading...
Searching...
No Matches
arena_vec.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "SD/arena.hpp"
4
5template<typename T>
6struct ArenaVec {
7 T* data = nullptr;
8 U64 count = 0;
9 U64 cap = 0;
10
11 void push(Arena* arena, const T& item) {
12 if (count >= cap) {
13 cap = cap ? cap * 2 : 16;
14 T* new_data = arena->push_array<T>(cap);
15 for (U64 i = 0; i < count; ++i)
16 new_data[i] = data[i];
17 data = new_data;
18 }
19 data[count++] = item;
20 }
21
22 void clear() {
23 count = 0;
24 data = nullptr;
25 cap = 0;
26 }
27
28 T& operator[](U64 i) { return data[i]; }
29 const T& operator[](U64 i) const { return data[i]; }
30
31 T* begin() { return data; }
32 T* end() { return data + count; }
33 const T* begin() const { return data; }
34 const T* end() const { return data + count; }
35};
Definition arena_vec.hpp:6
T * end()
Definition arena_vec.hpp:32
U64 count
Definition arena_vec.hpp:8
T & operator[](U64 i)
Definition arena_vec.hpp:28
void clear()
Definition arena_vec.hpp:22
U64 cap
Definition arena_vec.hpp:9
const T * end() const
Definition arena_vec.hpp:34
T * data
Definition arena_vec.hpp:7
const T * begin() const
Definition arena_vec.hpp:33
const T & operator[](U64 i) const
Definition arena_vec.hpp:29
void push(Arena *arena, const T &item)
Definition arena_vec.hpp:11
T * begin()
Definition arena_vec.hpp:31
Definition arena.hpp:85
T * push_array(this Arena &arena, U64 count)
Definition arena.hpp:120
std::uint64_t U64
Definition types.hpp:16