Compare commits

...

2 Commits

Author SHA1 Message Date
e7e2829a63 Definitions for arena memory management. 2024-08-05 01:34:05 -05:00
367057174d General code base needs. 2024-08-05 01:33:43 -05:00
3 changed files with 85 additions and 4 deletions

58
src/base/base_arena.h Normal file
View File

@ -0,0 +1,58 @@
#ifndef BASE_ARENA_H
#define BASE_ARENA_H
// Constants
#define ARENA_HEADER_SIZE 64
// Types
typedef u32 ArenaFlags;
enum { ArenaFlag_NoChain = (1 << 0); ArenaFlag_LargePages = (1 << 1); };
typedef struct ArenaParams ArenaParams;
struct ArenaParams {
ArenaFlags flags;
u64 reserve_size;
u64 commite_size;
void *optional_backing_buffer; // NOTE(tijani): ??
};
typedef struct Arena Arena;
struct Arena {
Arena *previous; // Previous arena in the chain
Arena *current; // Current arena in the chain
ArenaFlags flags;
u32 commit_size;
u64 reserve_size;
u64 base_position;
u64 position;
u64 commit;
u64 reserve;
};
typedef struct Temp Temp;
struct Temp {
Arena *arena;
u64 position;
};
// creation, destruction
internal Arena *arena_alloc_(ArenaParams *params);
#define arena_alloc(...) arena_alloc_(&(ArenaParams){.reserve_size = MB(64), .commit_size = KB(64), __VA_ARGS__})
internal void arena_releas(Arena *arena);
// push, pop operations
internal void *arena_psuh(Arena *arena, u64 size, u64 align);
internal u64 arena_position(Arena *arena);
internal void arena_pop_to(Arena *arena, u64 position);
internal void arena_clear(Arena *arena);
internal void arena_pop(Arena *arena, u64 amount);
#define push_array_no_zero_aligned(a, T, c, align) (T *)arena_push((a), sizeof(T) * (c), (align))
#define push_array_aligned(a, T, c, align) (T *)MemoryZero(push_array_no_zero_aligned(a, T, c, align), sizeof(T) * (c))
#define push_array_no_zero(a, T, c) push_array_no_zero_aligned(a, T, c, Max(8, Align_Of(T)))
#define push_array(a, T, c) push_array_aligned(a, T, c, Max(8, Align_Of(T)))
// Temp
internal Temp temp_begin(Arena *arena);
internal void temp_end(Temp temp);
#endif // BASE_ARENA_H

View File

@ -1,10 +1,12 @@
#ifndef BASE_CORE_H
#define BASE_CORE_H
#define global static
#define local static
#define internal static
// Foreigns
#include <string.h>
#define global static
#define local static
#define internal static
// Base Types
typedef uint8_t u8;
@ -25,5 +27,27 @@ typedef s64 b64;
typedef float f32;
typedef double f64;
// Units
#define KB(n) (((u64)(n)) << 10)
#define MB(n) (((u64)(n)) << 20)
#define GB(n) (((u64)(n)) << 30)
#define TB(n) (((u64)(n)) << 40)
#define Thousand(n) ((n) * 1000)
#define Million(n) ((n) * 1000000)
#define Billion(n) ((n) * 1000000000)
// Memory operations
#define MemoryZero(dest, count) memset((dest), 0, (count))
// Max, Min
#define Max(A, B) (((A) > (B)) ? (A) : (B))
#define Min(A, B) (((A) < (B)) ? (A) : (B))
// Type Alignment
#if COMPILER_MSVC
#define Align_Of(T) __alignof(T)
#else
#error Align_Of not defined for this compiler.
#endif
#endif // BASE_CORE_H

View File

@ -10,5 +10,4 @@
// clang-format on
#endif // BASE_INC_H