From 36dc1f859a13e428c441fc8f4f35550fe12ed72f Mon Sep 17 00:00:00 2001 From: nasr Date: Sun, 19 Apr 2026 18:38:22 +0200 Subject: feature(base): refactored the base library. removed some files etc and did stuff --- source/base/base.h | 26 ++++++++ source/base/base_arena.c | 139 ------------------------------------------ source/base/base_arena.h | 143 ++++++++++++++++++++++++++++++++++++++++++++ source/base/base_include.h | 28 ++++----- source/base/base_math.h | 10 ++++ source/base/base_mem.h | 26 -------- source/base/base_os.h | 31 +++------- source/base/base_platform.h | 6 -- source/base/base_rand.h | 3 +- source/base/base_stack.h | 6 +- source/base/base_string.c | 30 ---------- source/base/base_string.h | 36 ++++++++++- source/base/bash_hash.h | 24 -------- 13 files changed, 238 insertions(+), 270 deletions(-) mode change 100755 => 100644 source/base/base_arena.c create mode 100644 source/base/base_math.h delete mode 100644 source/base/base_mem.h delete mode 100644 source/base/base_platform.h delete mode 100644 source/base/bash_hash.h diff --git a/source/base/base.h b/source/base/base.h index 3fe9dca..f908962 100755 --- a/source/base/base.h +++ b/source/base/base.h @@ -6,6 +6,11 @@ #define global_variable static #define local_persist static +#define ARENA_ALIGN (2 * sizeof(void *)) + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + #define unused(x) (void)(x) #define NIL 0 @@ -62,3 +67,24 @@ typedef intptr_t smm; #define Len(s) (sizeof(s) - 1) #endif + +#ifdef BASE_IMPLEMENTATION + +internal inline b8 +is_pow(umm x) +{ + return (x & (x - 1)) == 0; +} + +internal inline u64 +align(u64 pointer, umm alignment) +{ + if ((alignment & (alignment - 1)) == 0) + { + return pointer; + } + + return (pointer + alignment - 1) & ~(alignment - 1); +} + +#endif diff --git a/source/base/base_arena.c b/source/base/base_arena.c old mode 100755 new mode 100644 index 8fc8c13..e69de29 --- a/source/base/base_arena.c +++ b/source/base/base_arena.c @@ -1,139 +0,0 @@ -internal mem_arena * -arena_create(u64 capacity) -{ - mem_arena *arena = (mem_arena *)mmap( - /* kernel decides where to throw the arena */ - NULL, - capacity + sizeof(mem_arena), - PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_ANONYMOUS, - -1, - 0); - - if (arena == MAP_FAILED) - { - return NULL; - } - - arena->capacity = capacity; - arena->base_position = (u8 *)arena + sizeof(mem_arena); - arena->current_position = 0; - arena->previous_position = 0; - - return arena; -} - -internal void -arena_destroy(mem_arena *arena) -{ - if (!arena) - { - return; - } - munmap(arena, arena->capacity + sizeof(mem_arena)); -} -internal void * -arena_alloc(mem_arena *arena, u64 size, b32 zero) -{ - if (!arena) - { - return NULL; - } - u64 aligned = Align(arena->current_position, ARENA_ALIGN); - u64 new_pos = aligned + size; - if (new_pos > arena->capacity) - { - return NULL; - } - - void *out = arena->base_position + aligned; - - arena->previous_position = arena->current_position; - arena->current_position = aligned + size; - - if (zero) MemSet(out, size); - - return out; -} - -internal void -arena_pop(mem_arena *arena, u64 size) -{ - size = MIN(size, arena->current_position); - arena->current_position -= size; -} - -internal void -arena_pop_to(mem_arena *arena, u64 pos) -{ - u64 size = pos < arena->current_position ? arena->current_position - pos : 0; - arena_pop(arena, size); -} - -internal void -arena_clear(mem_arena *arena) -{ - arena->current_position = 0; -} - -internal mem_arena * -arena_resize_align(mem_arena *arena, void *old_memory, u64 new_size, u64 old_size, umm alignment) -{ - u8 *old_mem = (u8 *)old_memory; - - if (!is_pow(alignment)) - { - Align(arena->current_position, alignment); - } - - if (old_memory == NULL || old_size == 0) - { - return (mem_arena *)arena_alloc(arena, new_size, 0); - } - else if ((old_mem >= arena->base_position && old_mem < arena->base_position + arena->capacity)) - { - if ((arena->base_position + arena->previous_position) == old_memory) - { - arena->current_position = arena->previous_position + new_size; - if (new_size > old_size) - { - MemSet(&arena->current_position, new_size - old_size); - } - return (mem_arena *)old_memory; - } - else - { - void *new_memory = arena_alloc(arena, new_size, 0); - umm copy_size = old_size < new_size ? old_size : new_size; - memmove(new_memory, old_mem, copy_size); - } - } - else - { - // warn(0); - } - - return NULL; -} - -internal mem_arena * -arena_resize(mem_arena *arena, void *old_memory, u64 new_size, u64 old_size) -{ - return arena_resize_align(arena, old_memory, new_size, old_size, ARENA_ALIGN); -} - -internal temp_arena -temp_arena_begin(mem_arena *arena) -{ - temp_arena t; - t.arena = arena; - t.start_position = arena->current_position; - - return t; -} - -internal void -temp_arena_end(temp_arena temp) -{ - temp.arena->current_position = temp.start_position; -} diff --git a/source/base/base_arena.h b/source/base/base_arena.h index dc6dd73..d24eeea 100755 --- a/source/base/base_arena.h +++ b/source/base/base_arena.h @@ -29,3 +29,146 @@ struct temp_arena }; #endif /* BASE_ARENA_H */ + +#ifdef BASE_IMPLEMENTATION +internal mem_arena * +arena_create(u64 capacity) +{ + mem_arena *arena = (mem_arena *)mmap( + /* kernel decides where to throw the arena */ + NULL, + capacity + sizeof(mem_arena), + PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_ANONYMOUS, + -1, + 0); + + if (arena == MAP_FAILED) + { + return NULL; + } + + arena->capacity = capacity; + arena->base_position = (u8 *)arena + sizeof(mem_arena); + arena->current_position = 0; + arena->previous_position = 0; + + return arena; +} + +internal void +arena_destroy(mem_arena *arena) +{ + if (!arena) + { + return; + } + munmap(arena, arena->capacity + sizeof(mem_arena)); +} +internal void * +arena_alloc(mem_arena *arena, u64 size, b32 zero) +{ + if (!arena) + { + return NULL; + } + u64 aligned = Align(arena->current_position, ARENA_ALIGN); + u64 new_pos = aligned + size; + if (new_pos > arena->capacity) + { + return NULL; + } + + void *out = arena->base_position + aligned; + + arena->previous_position = arena->current_position; + arena->current_position = aligned + size; + + if (zero) MemSet(out, size); + + return out; +} + +internal void +arena_pop(mem_arena *arena, u64 size) +{ + size = MIN(size, arena->current_position); + arena->current_position -= size; +} + +internal void +arena_pop_to(mem_arena *arena, u64 pos) +{ + u64 size = pos < arena->current_position ? arena->current_position - pos : 0; + arena_pop(arena, size); +} + +internal void +arena_clear(mem_arena *arena) +{ + arena->current_position = 0; +} + +internal mem_arena * +arena_resize_align(mem_arena *arena, void *old_memory, u64 new_size, u64 old_size, umm alignment) +{ + u8 *old_mem = (u8 *)old_memory; + + if (!is_pow(alignment)) + { + Align(arena->current_position, alignment); + } + + if (old_memory == NULL || old_size == 0) + { + return (mem_arena *)arena_alloc(arena, new_size, 0); + } + else if ((old_mem >= arena->base_position && old_mem < arena->base_position + arena->capacity)) + { + if ((arena->base_position + arena->previous_position) == old_memory) + { + arena->current_position = arena->previous_position + new_size; + if (new_size > old_size) + { + MemSet(&arena->current_position, new_size - old_size); + } + return (mem_arena *)old_memory; + } + else + { + void *new_memory = arena_alloc(arena, new_size, 0); + umm copy_size = old_size < new_size ? old_size : new_size; + memmove(new_memory, old_mem, copy_size); + } + } + else + { + // warn(0); + } + + return NULL; +} + +internal mem_arena * +arena_resize(mem_arena *arena, void *old_memory, u64 new_size, u64 old_size) +{ + return arena_resize_align(arena, old_memory, new_size, old_size, ARENA_ALIGN); +} + +internal temp_arena +temp_arena_begin(mem_arena *arena) +{ + temp_arena t; + t.arena = arena; + t.start_position = arena->current_position; + + return t; +} + +internal void +temp_arena_end(temp_arena temp) +{ + temp.arena->current_position = temp.start_position; +} + +#endif diff --git a/source/base/base_include.h b/source/base/base_include.h index a376f29..8eabb3e 100755 --- a/source/base/base_include.h +++ b/source/base/base_include.h @@ -2,37 +2,31 @@ #define BASE_INCLUDE_H #include +#include #include #include #include #include +//- needed for random +#include +#include +#include #include #include -#include -#include -#include -#include #include -#include "base.h" -#include "base_mem.h" +#include + +#include +#include "base.h" #include "base_arena.h" #include "base_stack.h" - -#ifdef BASE_IMPLEMENTATION -#include "base_arena.c" -#endif - - #include "base_string.h" -#include "base_string.c" - +#include "base_math.h" #include "base_os.h" #include "base_error.h" - #include "base_rand.h" - - +#include "base_simd.h" #endif diff --git a/source/base/base_math.h b/source/base/base_math.h new file mode 100644 index 0000000..71ac97f --- /dev/null +++ b/source/base/base_math.h @@ -0,0 +1,10 @@ +#ifndef BASE_MATH_H +#define BASE_MATH_H + + +#endif + + +#ifdef BASE_MATH_IMPLEMENTATION + +#endif diff --git a/source/base/base_mem.h b/source/base/base_mem.h deleted file mode 100644 index 2778fce..0000000 --- a/source/base/base_mem.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef BASE_MEM_H -#define BASE_MEM_H - -#define ARENA_ALIGN (2 * sizeof(void *)) -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) - -internal inline b8 -is_pow(umm x) -{ - return (x & (x - 1)) == 0; -} - -internal inline u64 -align(u64 pointer, umm alignment) -{ - if ((alignment & (alignment - 1)) == 0) - { - return pointer; - } - - return (pointer + alignment - 1) & ~(alignment - 1); -} - - -#endif diff --git a/source/base/base_os.h b/source/base/base_os.h index 82aa70d..2e192c5 100644 --- a/source/base/base_os.h +++ b/source/base/base_os.h @@ -15,7 +15,6 @@ load_file(mem_arena *arena, const char *path) string8 result = {0}; struct stat sbuf = {0}; - // TODO(nasr): abstract this to a platform layer s32 file = open(path, O_RDONLY); if(file == -1) { @@ -28,9 +27,7 @@ load_file(mem_arena *arena, const char *path) return (string8){0}; } - result = PushString8(arena, sbuf.st_size); - result.size = (u64)sbuf.st_size; if(result.size != 0) { @@ -68,8 +65,9 @@ write_file(const char *path, string8 data) return result; } -#define os_write(buf, count) _os_write(STDIN_FD, buf, count) -#define os_read(buf, count) _os_read(STDIN_FD, buf, count) +#if 0 +#define os_write(buf, count) _os_write(STDOUT_FD, buf, count) +#define os_read(buf, count) _os_read(STDIN_FD, buf, count) internal s64 _os_write(s32 fd, void const *buf, u64 count) @@ -83,6 +81,7 @@ _os_read(s32 fd, void *buf, u64 count) return syscall(SYS_read, fd, buf, count); } + internal void log_s8(string8 s) { @@ -100,10 +99,10 @@ _log(const char *str) #else unused(str); #endif - } #endif + internal void write_string(const char *str) { @@ -112,10 +111,11 @@ write_string(const char *str) os_write(str, len); } +#endif + internal void write_int(s32 num) { - if (num < 0) { write(STDERR_FILENO, "-", 1); @@ -124,22 +124,7 @@ write_int(s32 num) if (num >= 10) write_int(num / 10); char digit = '0' + (num % 10); - write(STDERR_FILENO, &digit, 1); } -internal inline void -sleep_ms(long ms) -{ - struct timespec ts; - ts.tv_sec = ms / 1000; - ts.tv_nsec = (ms % 1000) * 1000000L; - - while (nanosleep(&ts, &ts)) - { - NULL; - } -} - - -#endif +#endif /* BASE_IMPLEMENTATION */ diff --git a/source/base/base_platform.h b/source/base/base_platform.h deleted file mode 100644 index b34a7d0..0000000 --- a/source/base/base_platform.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef BASE_PLATFORM_H -#define BASE_PLATFORM_H - -#ifdef BASE_PLATFORM_IMPLEMENTATION -#endif /* BASE_PLATFORM_IMPLEMENTATION */ -#endif /* BASE_PLATFORM_H */ diff --git a/source/base/base_rand.h b/source/base/base_rand.h index bfdab0f..5a8668c 100644 --- a/source/base/base_rand.h +++ b/source/base/base_rand.h @@ -8,7 +8,8 @@ #endif /* BASE_RAND_H */ -#ifdef BASE_RAND_IMPLEMENTATION +#ifdef BASE_IMPLEMENTATION + internal u64 generate_random_u64(u64 constant) { diff --git a/source/base/base_stack.h b/source/base/base_stack.h index 43a7230..99217f5 100755 --- a/source/base/base_stack.h +++ b/source/base/base_stack.h @@ -1,5 +1,5 @@ -#ifndef STACK_H -#define STACK_H +#ifndef BASE_STACK_H +#define BASE_STACK_H typedef struct mem_stack_header mem_stack_header; struct mem_stack_header @@ -207,4 +207,4 @@ stack_destroy(mem_stack *stack) munmap(stack, stack->capacity + sizeof(mem_stack)); } -#endif +#endif /* BASE_STACK_H */ diff --git a/source/base/base_string.c b/source/base/base_string.c index 986fde5..e69de29 100644 --- a/source/base/base_string.c +++ b/source/base/base_string.c @@ -1,30 +0,0 @@ -internal b32 -is_alpha(u8 point) -{ - return ((point >= 'a' && point <= 'z') || (point >= 'A' && point <= 'Z') || (point == '_')); -} - -internal b32 -is_digit(u8 point) -{ - return (point >= '0' && point <= '9'); -} - -internal b32 -is_alpha_num(u8 point) -{ - return (is_alpha(point) || is_digit(point)); -} - -internal b32 is_whitespace(u8 point) -{ - return (point == '\n' || point == '\r' || point == ' ' || point == '\t'); -} - -internal b32 -is_slash(u8 point) -{ - return (point == '/' || point == '\\'); -} - - diff --git a/source/base/base_string.h b/source/base/base_string.h index eb51e65..1f754f3 100644 --- a/source/base/base_string.h +++ b/source/base/base_string.h @@ -38,7 +38,7 @@ struct string32 //- string linked list implementation typedef struct string8_node string8_node; -struct string8_node +struct string8_node { string8 *next; string8 string; @@ -82,3 +82,37 @@ string8_appendc(string8 *buf, u8 c) } #endif /* BASE_STRING_H */ + +#ifdef BASE_IMPLEMENTATION + +internal b32 +is_alpha(u8 point) +{ + return ((point >= 'a' && point <= 'z') || (point >= 'A' && point <= 'Z') || (point == '_')); +} + +internal b32 +is_digit(u8 point) +{ + return (point >= '0' && point <= '9'); +} + +internal b32 +is_alpha_num(u8 point) +{ + return (is_alpha(point) || is_digit(point)); +} + +internal b32 is_whitespace(u8 point) +{ + return (point == '\n' || point == '\r' || point == ' ' || point == '\t'); +} + +internal b32 +is_slash(u8 point) +{ + return (point == '/' || point == '\\'); +} + + +#endif diff --git a/source/base/bash_hash.h b/source/base/bash_hash.h deleted file mode 100644 index 758ef72..0000000 --- a/source/base/bash_hash.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef BASH_HASH_H -#define BASH_HASH_H - -typedef struct hash_map hash_map; -typedef struct hash hash; - -struct map -{ - string8 - u64 capacity -}; - - -struct index -{ - string8 key; - string8 value; -}; - - - -internal void - -#endif /* BASH_HASH_H */ -- cgit v1.3