array.h
cross platform rendering playgroundsrc/core/array.h
654 B#pragma once
#include "arena.h"
#include "globals.h"
template <typename T> struct Array {
ArenaC *arena;
T *data;
u64 count;
Array(ArenaC *a) : arena(a), data(nullptr), count(0) {
}
T *push(const T &value) {
T *slot = static_cast<T *>(arena->push(sizeof(T), alignof(T)));
if (!data) {
data = slot;
}
*slot = value;
count++;
return slot;
}
T &operator[](u64 i) {
return data[i];
}
const T &operator[](u64 i) const {
return data[i];
}
u64 size() const {
return count;
}
void clear() {
count = 0;
}
};