array.h

cross platform rendering playground

src/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;
    }
};