squall/storm/Memory.cpp
2020-11-01 17:45:45 -06:00

66 lines
1.3 KiB
C++

#include "storm/Memory.hpp"
constexpr size_t ALIGNMENT = 8;
void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags) {
size_t alignedBytes = (bytes + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1);
void* result;
if (flags & 0x8) {
result = calloc(1, alignedBytes);
} else {
result = malloc(alignedBytes);
}
if (result) {
return result;
} else {
// TODO handle errors
return nullptr;
}
}
void SMemFree(void* ptr) {
if (ptr) {
free(ptr);
}
}
void SMemFree(void* ptr, const char* filename, int32_t linenumber, uint32_t flags) {
if (ptr) {
free(ptr);
}
}
void* SMemReAlloc(void* ptr, size_t bytes, const char* filename, int32_t linenumber, uint32_t flags) {
if (flags == 0xB00BEEE5) {
return nullptr;
}
if (!ptr) {
return SMemAlloc(bytes, filename, linenumber, flags);
}
if (flags & 0x10) {
return nullptr;
}
size_t alignedBytes = (bytes + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1);
void* result = realloc(ptr, alignedBytes);
if (result) {
if (flags & 0x8) {
// TODO zero out expanded portion
}
return result;
} else {
if (alignedBytes) {
// TODO handle errors
}
return nullptr;
}
}