git-svn-id: https://svn.tlawal.org/svn/ragar@6 618e81bd-0769-42e7-8608-769e73fecc77
This commit is contained in:
parent
b658880db8
commit
ec02ae32f6
@ -1,71 +0,0 @@
|
|||||||
#ifndef BASE_ARENA_H
|
|
||||||
#define BASE_ARENA_H
|
|
||||||
|
|
||||||
#define ARENA_HEADER_SIZE 128
|
|
||||||
|
|
||||||
#ifndef ARENA_RESERVE_SIZE
|
|
||||||
#define ARENA_RESERVE_SIZE MB(64)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ARENA_COMMIT_SIZE
|
|
||||||
#define ARENA_COMMIT_SIZE KB(64)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ARENA_RESERVE_SIZE_LARGE_PAGES
|
|
||||||
#define ARENA_RESERVE_SIZE_LARGE_PAGES MB(8)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ARENA_COMMIT_SIZE_LARGE_PAGES
|
|
||||||
#define ARENA_COMMIT_SIZE_LARGE_PAGES MB(2)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Arena
|
|
||||||
typedef struct Arena Arena;
|
|
||||||
struct Arena {
|
|
||||||
struct Arena *previous;
|
|
||||||
struct Arena *current;
|
|
||||||
u64 base_position;
|
|
||||||
u64 position;
|
|
||||||
u64 commit;
|
|
||||||
u64 reserve;
|
|
||||||
u64 align;
|
|
||||||
b8 grow;
|
|
||||||
b8 large_pages;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct Temp Temp;
|
|
||||||
struct Temp {
|
|
||||||
Arena *arena;
|
|
||||||
u64 position;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Implementation
|
|
||||||
internal Arena *arena_alloc__sized(u64 int_res, u64 init_cmt); // cmt? res?
|
|
||||||
|
|
||||||
internal Arena *arena_alloc(void);
|
|
||||||
internal void arena_release(Arena *arena);
|
|
||||||
|
|
||||||
internal void *arena_push__impl(Arena *arena, u64 size);
|
|
||||||
internal u64 arena_position(Arena *arena);
|
|
||||||
internal void arena_pop_to(Arena *arena, u64 position);
|
|
||||||
|
|
||||||
internal void arena_absorb(Arena *arena, Arena *sub);
|
|
||||||
|
|
||||||
// Wrapper functions
|
|
||||||
internal void *arena_push(Arena *arena, u64 size);
|
|
||||||
internal void *arena_push_contiguous(Arena *arena, u64 size);
|
|
||||||
internal void arena_clear(Arena *arena);
|
|
||||||
internal void arena_push_align(Arena *arena, u64 align);
|
|
||||||
internal void arena_put_back(Arena *arena, u64 amount);
|
|
||||||
|
|
||||||
internal Temp temp_begin(Arena *arena);
|
|
||||||
internal void temp_end(Temp temp);
|
|
||||||
|
|
||||||
internal b32 ensure_commit(void **commit, void *position, u64 commit_block_size);
|
|
||||||
|
|
||||||
// Main API Macros
|
|
||||||
#define push_array_no_zero(arena, Type, commit) (Type *)arena_push((arena), sizeof(Type) * (commit))
|
|
||||||
#define push_array(arena, Type, commit) \
|
|
||||||
(Type *)MemoryZero(push_array_no_zero(arena, Type, commit), sizeof(Type) * (commit))
|
|
||||||
|
|
||||||
#endif // BASE_ARENA_H
|
|
Loading…
Reference in New Issue
Block a user