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