diff --git a/storm/Memory.cpp b/storm/Memory.cpp index 986a9f6..3f82b95 100644 --- a/storm/Memory.cpp +++ b/storm/Memory.cpp @@ -4,6 +4,26 @@ constexpr size_t ALIGNMENT = 8; +void* operator new(size_t bytes) { + return SMemAlloc(bytes, "new", -1, 0x0); +} + +void* operator new[](size_t bytes) { + return SMemAlloc(bytes, "new[]", -1, 0x0); +} + +void operator delete(void* ptr) noexcept { + if (ptr) { + SMemFree(ptr, "delete", -1, 0x0); + } +} + +void operator delete[](void* ptr) noexcept { + if (ptr) { + SMemFree(ptr, "delete[]", -1, 0x0); + } +} + void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags) { size_t alignedBytes = (bytes + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1); diff --git a/test/Memory.cpp b/test/Memory.cpp index e19f9a4..14e24b7 100644 --- a/test/Memory.cpp +++ b/test/Memory.cpp @@ -5,6 +5,24 @@ #include #include +TEST_CASE("operator new", "[memory]") { + SECTION("allocates memory") { + auto ptr = new int32_t; + REQUIRE(ptr != nullptr); + + delete ptr; + } +} + +TEST_CASE("operator new[]", "[memory]") { + SECTION("allocates memory") { + auto ptr = new int32_t[10]; + REQUIRE(ptr != nullptr); + + delete[] ptr; + } +} + TEST_CASE("SMemAlloc", "[memory]") { SECTION("allocates memory") { void* ptr = SMemAlloc(16, __FILE__, __LINE__);