arena.h

cross platform rendering playground

src/core/arena.h

659 B
#pragma once

#include "globals.h"

constexpr usize DEFAULT_ALIGNMENT = sizeof(void *);

constexpr usize align_up_pow_2(usize x, usize b) {
    return (x + b - 1) & ~(b - 1);
}

constexpr usize align_down_pow_2(usize x, usize b) {
    return x & ~(b - 1);
}

struct ArenaC {
    u8 *base;
    usize capacity;
    usize position;

    void *push(u64 push_size, u64 push_alignment = DEFAULT_ALIGNMENT, bool zero_init = true);
    void pop(u64 size);
    void reset();

    u64 used() const;
    u64 remaining() const;

    ArenaC(usize requested_capacity);
    ~ArenaC();

    ArenaC(const ArenaC &) = delete;
    ArenaC &operator=(const ArenaC &) = delete;
};