//////////////////////////////////////////////////////////// //~ @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)