power_play/src/base/base_memory.h

43 lines
1.5 KiB
C

////////////////////////////////////////////////////////////
//~ @hookdecl 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 ops
//- Wrappers
#define MatchBytes(p1, p2, n) (CmpBytes((p1), (p2), (n)) == 0)
#define MatchStruct(p1, p2) MatchBytes((p1), (p2), sizeof(*p1))
#define ZeroBytes(ptr, count) SetBytes((ptr), 0, (count))
#define ZeroFixedArray(a) Assert(IsFixedArray(a)); ZeroBytes((a), sizeof((a)))
#define ZeroStructs(ptr, n) ZeroBytes((ptr), sizeof(*(ptr)) * (n))
#define ZeroStruct(ptr) ZeroStructs((ptr), 1)
#define CopyStructs(ptr_dst, ptr_src, n) CopyBytes((ptr_dst), (ptr_src), sizeof(*(ptr_dst)) * (n))
#define CopyStruct(ptr_dst, ptr_src) CopyStructs((ptr_dst), (ptr_src), 1)
#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 IsCrtlibEnabled
# 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