diff --git a/src/core/mem/arena/mem_arena.c b/src/core/mem/arena/mem_arena.c index 4d30bd9..6e1ce4a 100644 --- a/src/core/mem/arena/mem_arena.c +++ b/src/core/mem/arena/mem_arena.c @@ -1,7 +1,7 @@ #include "mem_arena.h" #include "aliases.h" #include "misc_utils.h" -#include "mem_utils.h" +#include "mem_os.h" #include #include #include diff --git a/src/core/mem/arena/mem_arena.h b/src/core/mem/arena/mem_arena.h index d35c994..3c832d8 100644 --- a/src/core/mem/arena/mem_arena.h +++ b/src/core/mem/arena/mem_arena.h @@ -2,7 +2,7 @@ #define MEM_ARENA_H #include "aliases.h" -#include "mem_utils.h" +#include "mem_os.h" #include #ifdef __cplusplus diff --git a/src/core/mem/arena/mem_arena_allocator.h b/src/core/mem/arena/mem_arena_allocator.h index 8350bc6..28f2597 100644 --- a/src/core/mem/arena/mem_arena_allocator.h +++ b/src/core/mem/arena/mem_arena_allocator.h @@ -2,7 +2,7 @@ #define MEM_ARENA_ALLOCATOR_H #include "aliases.h" -#include "mem_utils.h" +#include "mem_os.h" #include "mem_allocator.h" #include diff --git a/src/core/mem/utils/mem_utils.c b/src/core/mem/utils/mem_utils.c new file mode 100644 index 0000000..dcb2411 --- /dev/null +++ b/src/core/mem/utils/mem_utils.c @@ -0,0 +1,28 @@ +#include "aliases.h" +#include "mem_utils.h" +#include +#include +#include + +internal bool is_power_of_two(u64 num) { return (num & (num - 1)) == 0; } + +void *wapp_mem_util_align_forward(void *ptr, u64 alignment) { + if (!ptr) { + return NULL; + } + + assert(is_power_of_two(alignment)); + + uptr p = (uptr)ptr; + uptr align = (uptr)alignment; + + // Similar to p % align, but it's a faster implementation that works fine + // because align is guaranteed to be a power of 2 + uptr modulo = p & (align - 1); + + if (modulo != 0) { + p += align - modulo; + } + + return (void *)p; +} diff --git a/src/core/mem/utils/mem_utils.h b/src/core/mem/utils/mem_utils.h new file mode 100644 index 0000000..60e3137 --- /dev/null +++ b/src/core/mem/utils/mem_utils.h @@ -0,0 +1,16 @@ +#ifndef MEM_UTILS_H +#define MEM_UTILS_H + +#include "aliases.h" + +#ifdef __cplusplus +BEGIN_C_LINKAGE +#endif // __cplusplus + +void *wapp_mem_util_align_forward(void *ptr, u64 alignment); + +#ifdef __cplusplus +END_C_LINKAGE +#endif // __cplusplus + +#endif // !MEM_UTILS_H diff --git a/src/core/wapp_core.c b/src/core/wapp_core.c index 3f14036..7160e94 100644 --- a/src/core/wapp_core.c +++ b/src/core/wapp_core.c @@ -2,6 +2,7 @@ #define WAPP_CORE_C #include "wapp_core.h" +#include "mem_utils.c" #include "mem_arena.c" #include "mem_arena_allocator.c" #include "mem_allocator.c" diff --git a/src/core/wapp_core.h b/src/core/wapp_core.h index 0cf370b..e836dc3 100644 --- a/src/core/wapp_core.h +++ b/src/core/wapp_core.h @@ -3,6 +3,7 @@ #include "mem_arena_allocator.h" #include "mem_arena.h" +#include "mem_utils.h" #include "mem_allocator.h" #include "str8.h" #include "wapp_common.h" diff --git a/src/os/mem/mem_os.c b/src/os/mem/mem_os.c new file mode 100644 index 0000000..c3fc7be --- /dev/null +++ b/src/os/mem/mem_os.c @@ -0,0 +1,29 @@ +#include "mem_os.h" +#include "mem_os_ops.h" +#include "aliases.h" +#include "platform.h" +#include +#include +#include + +#if defined(WAPP_PLATFORM_WINDOWS) +#include "mem_os_win.h" +#elif defined(WAPP_PLATFORM_POSIX) +#include "mem_os_posix.h" +#else +#error "Unrecognised platform" +#endif + +void *wapp_mem_util_alloc(void *addr, u64 size, MemAccess access, MemAllocFlags flags, MemInitType type) { + void *output = mem_util_allocate(addr, size, access, flags, type); + + if (type == WAPP_MEM_INIT_INITIALISED) { + memset(output, 0, size); + } + + return output; +} + +void wapp_mem_util_free(void *ptr, u64 size) { + mem_util_free(ptr, size); +} diff --git a/src/os/mem/mem_utils.h b/src/os/mem/mem_os.h similarity index 81% rename from src/os/mem/mem_utils.h rename to src/os/mem/mem_os.h index edda2a2..2c2eed4 100644 --- a/src/os/mem/mem_utils.h +++ b/src/os/mem/mem_os.h @@ -1,5 +1,5 @@ -#ifndef MEM_UTILS_H -#define MEM_UTILS_H +#ifndef MEM_OS_H +#define MEM_OS_H #include "aliases.h" #include "platform.h" @@ -8,12 +8,12 @@ BEGIN_C_LINKAGE #endif // __cplusplus -#include "mem_utils_ops.h" +#include "mem_os_ops.h" #if defined(WAPP_PLATFORM_WINDOWS) -#include "mem_utils_win.h" +#include "mem_os_win.h" #elif defined(WAPP_PLATFORM_POSIX) -#include "mem_utils_posix.h" +#include "mem_os_posix.h" #else #error "Unrecognised platform" #endif @@ -29,4 +29,4 @@ external void mem_util_free(void *ptr, u64 size); END_C_LINKAGE #endif // __cplusplus -#endif // !MEM_UTILS_H +#endif // !MEM_OS_H diff --git a/src/os/mem/mem_utils_ops.h b/src/os/mem/mem_os_ops.h similarity index 85% rename from src/os/mem/mem_utils_ops.h rename to src/os/mem/mem_os_ops.h index 26beecf..c4d0944 100644 --- a/src/os/mem/mem_utils_ops.h +++ b/src/os/mem/mem_os_ops.h @@ -1,5 +1,5 @@ -#ifndef MEM_UTILS_OPS_H -#define MEM_UTILS_OPS_H +#ifndef MEM_OS_OPS_H +#define MEM_OS_OPS_H #ifdef __cplusplus BEGIN_C_LINKAGE @@ -23,4 +23,4 @@ typedef enum mem_init_type { END_C_LINKAGE #endif // __cplusplus -#endif // !MEM_UTILS_OPS_H +#endif // !MEM_OS_OPS_H diff --git a/src/os/mem/mem_utils.c b/src/os/mem/mem_utils.c deleted file mode 100644 index 9630697..0000000 --- a/src/os/mem/mem_utils.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "mem_utils.h" -#include "mem_utils_ops.h" -#include "aliases.h" -#include "platform.h" -#include -#include -#include -#include - -#if defined(WAPP_PLATFORM_WINDOWS) -#include "mem_utils_win.h" -#elif defined(WAPP_PLATFORM_POSIX) -#include "mem_utils_posix.h" -#else -#error "Unrecognised platform" -#endif - -internal bool is_power_of_two(u64 num) { return (num & (num - 1)) == 0; } - -void *wapp_mem_util_align_forward(void *ptr, u64 alignment) { - if (!ptr) { - return NULL; - } - - assert(is_power_of_two(alignment)); - - uptr p = (uptr)ptr; - uptr align = (uptr)alignment; - - // Similar to p % align, but it's a faster implementation that works fine - // because align is guaranteed to be a power of 2 - uptr modulo = p & (align - 1); - - if (modulo != 0) { - p += align - modulo; - } - - return (void *)p; -} - -void *wapp_mem_util_alloc(void *addr, u64 size, MemAccess access, MemAllocFlags flags, MemInitType type) { - void *output = mem_util_allocate(addr, size, access, flags, type); - - if (type == WAPP_MEM_INIT_INITIALISED) { - memset(output, 0, size); - } - - return output; -} - -void wapp_mem_util_free(void *ptr, u64 size) { - mem_util_free(ptr, size); -} diff --git a/src/os/mem/posix/mem_utils_posix.c b/src/os/mem/posix/mem_os_posix.c similarity index 94% rename from src/os/mem/posix/mem_utils_posix.c rename to src/os/mem/posix/mem_os_posix.c index f0e57db..485b7f6 100644 --- a/src/os/mem/posix/mem_utils_posix.c +++ b/src/os/mem/posix/mem_os_posix.c @@ -3,8 +3,8 @@ #ifdef WAPP_PLATFORM_POSIX -#include "mem_utils_ops.h" -#include "mem_utils_posix.h" +#include "mem_os_ops.h" +#include "mem_os_posix.h" #include internal const i32 access_types[] = { diff --git a/src/os/mem/posix/mem_utils_posix.h b/src/os/mem/posix/mem_os_posix.h similarity index 89% rename from src/os/mem/posix/mem_utils_posix.h rename to src/os/mem/posix/mem_os_posix.h index 737e74f..f3dca7f 100644 --- a/src/os/mem/posix/mem_utils_posix.h +++ b/src/os/mem/posix/mem_os_posix.h @@ -1,5 +1,5 @@ -#ifndef MEM_UTILS_POSIX_H -#define MEM_UTILS_POSIX_H +#ifndef MEM_OS_POSIX_H +#define MEM_OS_POSIX_H #include "platform.h" @@ -30,4 +30,4 @@ typedef enum mem_alloc_flags { END_C_LINKAGE #endif // !__cplusplus -#endif // !MEM_UTILS_POSIX_H +#endif // !MEM_OS_POSIX_H diff --git a/src/os/mem/win/mem_utils_win.c b/src/os/mem/win/mem_os_win.c similarity index 94% rename from src/os/mem/win/mem_utils_win.c rename to src/os/mem/win/mem_os_win.c index 275e953..4bb1ef6 100644 --- a/src/os/mem/win/mem_utils_win.c +++ b/src/os/mem/win/mem_os_win.c @@ -3,8 +3,8 @@ #ifdef WAPP_PLATFORM_WINDOWS -#include "mem_utils_ops.h" -#include "mem_utils_win.h" +#include "mem_os_ops.h" +#include "mem_os_win.h" #define WIN32_LEAN_AND_MEAN #include diff --git a/src/os/mem/win/mem_utils_win.h b/src/os/mem/win/mem_os_win.h similarity index 84% rename from src/os/mem/win/mem_utils_win.h rename to src/os/mem/win/mem_os_win.h index f2b5718..289ac51 100644 --- a/src/os/mem/win/mem_utils_win.h +++ b/src/os/mem/win/mem_os_win.h @@ -1,5 +1,5 @@ -#ifndef MEM_UTILS_WIN_H -#define MEM_UTILS_WIN_H +#ifndef MEM_OS_WIN_H +#define MEM_OS_WIN_H #include "platform.h" @@ -24,4 +24,4 @@ typedef enum mem_alloc_flags { END_C_LINKAGE #endif // !__cplusplus -#endif // !MEM_UTILS_WIN_H +#endif // !MEM_OS_WIN_H diff --git a/src/os/wapp_os.c b/src/os/wapp_os.c index 027c451..4923b3e 100644 --- a/src/os/wapp_os.c +++ b/src/os/wapp_os.c @@ -8,9 +8,9 @@ #include "commander_win.c" #include "commander.c" #include "commander_posix.c" -#include "mem_utils_win.c" -#include "mem_utils.c" -#include "mem_utils_posix.c" +#include "mem_os_win.c" +#include "mem_os.c" +#include "mem_os_posix.c" #include "cpath.c" #include "wapp_core.c" diff --git a/src/os/wapp_os.h b/src/os/wapp_os.h index 8a7c5f9..c8d88ad 100644 --- a/src/os/wapp_os.h +++ b/src/os/wapp_os.h @@ -6,10 +6,10 @@ #include "shell_utils.h" #include "commander_output.h" #include "commander.h" -#include "mem_utils_ops.h" -#include "mem_utils_win.h" -#include "mem_utils.h" -#include "mem_utils_posix.h" +#include "mem_os_ops.h" +#include "mem_os_win.h" +#include "mem_os.h" +#include "mem_os_posix.h" #include "cpath.h" #include "wapp_common.h" #include "wapp_core.h"