power_play/src/base/base_memory.h
2025-10-22 03:22:23 -05:00

41 lines
1.3 KiB
C

////////////////////////////////////////////////////////////
//~ Memory allocation
//- Reserve
void *ReserveMemory(u64 size);
void ReleaseMemory(void *address);
//- Commit
void *CommitMemory(void *address, u64 size);
void DecommitMemory(void *address, u64 size);
//- Protect
void SetMemoryReadonly(void *address, u64 size);
void SetMemoryReadWrite(void *address, u64 size);
////////////////////////////////////////////////////////////
//~ Memory operations
//- Wrappers
#define ZeroStruct(ptr) ZeroBytes((ptr), sizeof(*(ptr)))
#define ZeroArray(a) Assert(IsArray(a)); ZeroBytes((a), sizeof((a)))
#define CopyStruct(ptr_dst, ptr_src) CopyBytes((ptr_dst), (ptr_src), sizeof(*(ptr_dst)))
#define EqStruct(p1, p2) EqBytes((p1), (p2), sizeof(*p1))
#define ZeroBytes(ptr, count) SetBytes((ptr), 0, (count))
#define EqBytes(p1, p2, n) (CmpBytes((p1), (p2), (n)) == 0)
#define CopyBytes(dst, src, count) memcpy(dst, src, count)
#define SetBytes(dst, c, count) memset(dst, c, count)
#define CmpBytes(p1, p2, count) memcmp(p1, p2, count)
////////////////////////////////////////////////////////////
//~ Crtlib stubs
#if CrtlibIsEnabled
# include <memory.h>
#else
void *memcpy(void *__restrict dst, const void *__restrict src, u64 n);
void *memset(void *dst, i32 c, u64 n);
i32 memcmp(const void *p1, const void *p2, u64 n);
#endif