From 16664c68b59ebc93a52c8a38908e4863d1179929 Mon Sep 17 00:00:00 2001 From: Patedam Date: Sun, 18 Oct 2026 00:25:02 -0400 Subject: [PATCH] wok on arena --- Juliet/core/core.h | 21 +++++++++++++++++++++ Juliet/core/core_arena.c | 10 ++++++++++ Juliet/core/core_arena.h | 39 +++++++++++++++++++++++++++++++++++++++ Juliet/core/core_inc.c | 1 + Juliet/core/core_inc.h | 1 + 5 files changed, 72 insertions(+) create mode 100644 Juliet/core/core_arena.c create mode 100644 Juliet/core/core_arena.h diff --git a/Juliet/core/core.h b/Juliet/core/core.h index 6f2e7aa..96ae9bb 100644 --- a/Juliet/core/core.h +++ b/Juliet/core/core.h @@ -5,6 +5,27 @@ #define internal static #define global static +// ============================================================================= +// Units + +#define KB(d) ((uint64)(d) << 10) +#define MB(d) ((uint64)(d) << 20) +#define GB(d) ((uint64)(d) << 30) + +// ============================================================================= +// Asserts + +#define StaticAssert(cond, ID) global uint8 GLUE(ID, __LINE__)[(cond) ? 1 : -1] + +// ============================================================================= +// Helpers + +#define GLUE_(A, B) A##B +#define GLUE(A, B) GLUE_(A, B) + +// ============================================================================= +// Core Types + typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; diff --git a/Juliet/core/core_arena.c b/Juliet/core/core_arena.c new file mode 100644 index 0000000..4580f44 --- /dev/null +++ b/Juliet/core/core_arena.c @@ -0,0 +1,10 @@ +// ============================================================================= +// Arena Functions + +internal Arena* arena_alloc_internal() +{ + Arena* arena = NULL; + return arena; +} + +internal void arena_release(Arena* arena) {} diff --git a/Juliet/core/core_arena.h b/Juliet/core/core_arena.h new file mode 100644 index 0000000..8fd2657 --- /dev/null +++ b/Juliet/core/core_arena.h @@ -0,0 +1,39 @@ +#pragma once + +#define ARENA_HEADER_SIZE 128 + +// ============================================================================= +// Arena Types + +typedef struct Arena Arena; +struct Arena +{ + Arena* previous; + Arena* current; + uint64 base_position; + uint64 position; + uint64 commit_size; + uint64 committed; + uint64 reserve_size; + uint64 reserved; + +#if BUILD_DEBUG + char* alloc_file; + int alloc_line; + char* name; +#endif +}; +StaticAssert(sizeof(Arena) <= ARENA_HEADER_SIZE, arena_header_size_check); + +typedef struct TempArena TempArena; +struct TempAren +{ + Arena* arena; + uint64 position; +}; + +// ============================================================================= +// Arena Functions + +global uint64 arena_default_reserve_size = MB(64); +global uint64 arena_default_commit_size = KB(64); diff --git a/Juliet/core/core_inc.c b/Juliet/core/core_inc.c index 48ce51c..0720eaf 100644 --- a/Juliet/core/core_inc.c +++ b/Juliet/core/core_inc.c @@ -1,5 +1,6 @@ // clang-format off #include "core_string.c" +#include "core_arena.c" #include "core_entry_point.c" // clang-format on diff --git a/Juliet/core/core_inc.h b/Juliet/core/core_inc.h index 398b883..daff020 100644 --- a/Juliet/core/core_inc.h +++ b/Juliet/core/core_inc.h @@ -4,6 +4,7 @@ #include "core_defines.h" #include "core.h" +#include "core_arena.h" #include "core_string.h" #include "core_entry_point.h" // clang-format on