From 737728b9e822a7191431404385985b2079d958b4 Mon Sep 17 00:00:00 2001 From: Adam Heinermann Date: Thu, 16 Oct 2025 03:16:09 -0700 Subject: [PATCH] feat(memory): add SMemCmp --- storm/Memory.cpp | 4 ++++ storm/Memory.hpp | 2 ++ test/Memory.cpp | 24 ++++++++++++++++++++++++ test/stormdll/storm.def | 2 +- test/stormdll/stormstubs.cpp | 1 + 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/storm/Memory.cpp b/storm/Memory.cpp index 26a089f..d79fcac 100644 --- a/storm/Memory.cpp +++ b/storm/Memory.cpp @@ -43,6 +43,10 @@ void* STORMAPI SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, } } +int STORMAPI SMemCmp(void* ptrA, void* ptrB, size_t bytes) { + return memcmp(ptrA, ptrB, bytes); +} + void STORMAPI SMemCopy(void* dst, void* src, size_t bytes) { memmove(dst, src, bytes); } diff --git a/storm/Memory.hpp b/storm/Memory.hpp index 698ad53..d27500f 100644 --- a/storm/Memory.hpp +++ b/storm/Memory.hpp @@ -25,6 +25,8 @@ void* STORMAPI SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags = 0); +int STORMAPI SMemCmp(void* ptrA, void* ptrB, size_t bytes); + void STORMAPI SMemCopy(void* dst, void* src, size_t bytes); void STORMAPI SMemFill(void* ptr, size_t bytes, uint8_t value); diff --git a/test/Memory.cpp b/test/Memory.cpp index 7b3bf39..abffafe 100644 --- a/test/Memory.cpp +++ b/test/Memory.cpp @@ -55,6 +55,30 @@ TEST_CASE("SMemAlloc", "[memory]") { } } +TEST_CASE("SMemCmp", "[memory]") { + std::vector data = { 1, 255, 128, 42, 69, 99, 13, 37 }; + + SECTION("compares zero bytes") { + int blah = 6; + CHECK(SMemCmp(data.data(), &blah, 0) == 0); + } + + SECTION("compares equally") { + std::vector memes = { 128, 42, 69, 99, 99, 129 }; + CHECK(SMemCmp(&data[2], memes.data(), 4) == 0); + } + + SECTION("compares greater") { + std::vector memes = { 128, 42, 69, 99, 99, 129 }; + CHECK(SMemCmp(&data[2], memes.data(), 5) < 0); + } + + SECTION("compares lesser") { + std::vector memes = { 128, 42, 69, 99, 12, 129 }; + CHECK(SMemCmp(&data[2], memes.data(), 5) > 0); + } +} + TEST_CASE("SMemCopy", "[memory]") { std::vector data = { 1, 255, 128, 42, 69, 99, 13, 37 }; diff --git a/test/stormdll/storm.def b/test/stormdll/storm.def index eae1a56..8ec2dc0 100644 --- a/test/stormdll/storm.def +++ b/test/stormdll/storm.def @@ -303,7 +303,7 @@ EXPORTS SMemFill @492 NONAME SMemMove @493 NONAME SMemZero @494 NONAME - ;SMemCmp @495 NONAME + SMemCmp @495 NONAME ;SMemSetDebugFlags @496 NONAME ;SMemDumpState @497 NONAME diff --git a/test/stormdll/stormstubs.cpp b/test/stormdll/stormstubs.cpp index feca531..252a818 100644 --- a/test/stormdll/stormstubs.cpp +++ b/test/stormdll/stormstubs.cpp @@ -58,6 +58,7 @@ int32_t STORMAPI SEvtUnregisterType(uint32_t, uint32_t) { return 0; } #include void* STORMAPI SMemAlloc(size_t, const char*, int32_t, uint32_t) { return 0; } +int STORMAPI SMemCmp(void*, void*, size_t) { return 0; } void STORMAPI SMemCopy(void*, void*, size_t) {} void STORMAPI SMemFill(void*, size_t, uint8_t) {} void STORMAPI SMemFree(void*, const char*, int32_t, uint32_t) {}