Compare commits
No commits in common. "e7e2829a631903dab6cb03542cb8338855dd0191" and "e7f7f3e321450f1b3fb37bb958f31b4203ab192b" have entirely different histories.
e7e2829a63
...
e7f7f3e321
@ -1,58 +0,0 @@
|
|||||||
#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
|
|
@ -1,13 +1,11 @@
|
|||||||
#ifndef BASE_CORE_H
|
#ifndef BASE_CORE_H
|
||||||
#define BASE_CORE_H
|
#define BASE_CORE_H
|
||||||
|
|
||||||
// Foreigns
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define global static
|
#define global static
|
||||||
#define local static
|
#define local static
|
||||||
#define internal static
|
#define internal static
|
||||||
|
|
||||||
|
|
||||||
// Base Types
|
// Base Types
|
||||||
typedef uint8_t u8;
|
typedef uint8_t u8;
|
||||||
typedef uint16_t u16;
|
typedef uint16_t u16;
|
||||||
@ -27,27 +25,5 @@ typedef s64 b64;
|
|||||||
typedef float f32;
|
typedef float f32;
|
||||||
typedef double f64;
|
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
|
#endif // BASE_CORE_H
|
||||||
|
@ -10,4 +10,5 @@
|
|||||||
|
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
||||||
#endif // BASE_INC_H
|
#endif // BASE_INC_H
|
||||||
|
Loading…
Reference in New Issue
Block a user