diff --git a/storm/Memory.cpp b/storm/Memory.cpp index 19f3882..4147c57 100644 --- a/storm/Memory.cpp +++ b/storm/Memory.cpp @@ -1,5 +1,7 @@ #include "storm/Memory.hpp" +#include + constexpr size_t ALIGNMENT = 8; void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags) { @@ -21,6 +23,10 @@ void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t } } +void SMemFill(void* ptr, size_t bytes, uint8_t value) { + memset(ptr, value, bytes); +} + void SMemFree(void* ptr) { if (ptr) { free(ptr); diff --git a/storm/Memory.hpp b/storm/Memory.hpp index 33e2b0d..e5ac2f0 100644 --- a/storm/Memory.hpp +++ b/storm/Memory.hpp @@ -10,6 +10,8 @@ void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags = 0); +void SMemFill(void* ptr, size_t bytes, uint8_t value); + void SMemFree(void* ptr); void SMemFree(void* ptr, const char* filename, int32_t linenumber, uint32_t flags = 0); diff --git a/test/Memory.cpp b/test/Memory.cpp index a6c4593..ba67c7e 100644 --- a/test/Memory.cpp +++ b/test/Memory.cpp @@ -30,6 +30,27 @@ TEST_CASE("SMemAlloc", "[memory]") { } } +TEST_CASE("SMemFill", "[memory]") { + std::vector data = { 1, 255, 128, 42, 69, 99, 13, 37 }; + + SECTION("replaces bytes") { + std::vector result1(8, 255); + SMemFill(data.data(), 8, 255); + CHECK_THAT(data, Catch::Matchers::Equals(result1)); + + std::vector result2 = { 0, 0, 0, 0, 0, 255, 255, 255 }; + SMemFill(data.data(), 5, 0); + CHECK_THAT(data, Catch::Matchers::Equals(result2)); + } + + SECTION("does nothing if size is 0") { + std::vector changedata = data; + SMemFill(changedata.data(), 0, 255); + + CHECK_THAT(changedata, Catch::Matchers::Equals(data)); + } +} + TEST_CASE("SMemFree", "[memory]") { SECTION("does nothing on nullptr") { CHECK_NOTHROW(SMemFree(nullptr));