46 lines
1.4 KiB
C
46 lines
1.4 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
|
|
|
|
Inline b32 MatchBytesZero(u8 *v, u64 size)
|
|
{
|
|
for (u64 idx = 0; idx < size; ++idx)
|
|
{
|
|
if (v[idx] != 0)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
//- Wrappers
|
|
#define MatchStructZero(ptr) MatchBytesZero((u8 *)(ptr), sizeof(*ptr))
|
|
#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)
|
|
|
|
//- Stubs
|
|
#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)
|