From b9dd205765782a44afc03740f3047ab2be5f1c4f Mon Sep 17 00:00:00 2001 From: VDm Date: Sun, 26 Apr 2026 16:34:33 +0400 Subject: [PATCH] feat(memory): add Storm compatibility macros --- .gitignore | 4 ++++ bc/memory/Storm.cpp | 25 +++++++++++++++++++++++++ bc/memory/Storm.hpp | 19 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/.gitignore b/.gitignore index c00a275..bd5730f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,10 @@ .DS_Store .idea .vscode +CMakeSettings.json /build /cmake-build-* +/dist +/out +/.vs diff --git a/bc/memory/Storm.cpp b/bc/memory/Storm.cpp index 53bb31c..0f1ec79 100644 --- a/bc/memory/Storm.cpp +++ b/bc/memory/Storm.cpp @@ -1,5 +1,7 @@ #include "bc/memory/Storm.hpp" +#include + constexpr size_t ALIGNMENT = 8; void* operator new(size_t bytes) { @@ -35,6 +37,18 @@ void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t } } +int SMemCmp(void* ptrA, void* ptrB, size_t bytes) { + return memcmp(ptrA, ptrB, bytes); +} + +void SMemCopy(void* dst, void* src, size_t bytes) { + memmove(dst, src, bytes); +} + +void SMemFill(void* ptr, size_t bytes, uint8_t value) { + memset(ptr, value, bytes); +} + void SMemFree(void* ptr) { if (ptr) { free(ptr); @@ -47,6 +61,10 @@ void SMemFree(void* ptr, const char* filename, int32_t linenumber, uint32_t flag } } +void SMemMove(void* dst, void* src, size_t bytes) { + memmove(dst, src, bytes); +} + void* SMemReAlloc(void* ptr, size_t bytes, const char* filename, int32_t linenumber, uint32_t flags) { if (flags == 0xB00BEEE5) { return nullptr; @@ -78,3 +96,10 @@ void* SMemReAlloc(void* ptr, size_t bytes, const char* filename, int32_t linenum return nullptr; } } + +void SMemZero(void* ptr, size_t bytes) { + uint8_t* ptrdata = static_cast(ptr); + for (size_t i = 0; i < bytes; i++) { + ptrdata[i] = 0; + } +} diff --git a/bc/memory/Storm.hpp b/bc/memory/Storm.hpp index d2c9e94..24080a4 100644 --- a/bc/memory/Storm.hpp +++ b/bc/memory/Storm.hpp @@ -21,16 +21,35 @@ } \ } while (0) +// Whoa compatibility macros +#define STORM_ALLOC(n) SMemAlloc(static_cast(n), __FILE__, __LINE__, 0x0) +#define STORM_ALLOC_ZERO(n) SMemAlloc(static_cast(n), __FILE__, __LINE__, 0x8) +#define STORM_FREE(ptr) SMemFree(ptr, __FILE__, __LINE__, 0x0) + +#define STORM_NEW(T, ...) (new (SMemAlloc(sizeof(T), __FILE__, __LINE__, 0)) T(__VA_ARGS__)) +#define STORM_NEW_ZERO(T, ...) (new (SMemAlloc(sizeof(T), __FILE__, __LINE__, 0x8)) T(__VA_ARGS__)) + + // allocation functions void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags); +int SMemCmp(void* ptrA, void* ptrB, size_t bytes); + +void SMemCopy(void* dst, void* src, size_t bytes); + +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); +void SMemMove(void* dst, void* src, size_t bytes); + void* SMemReAlloc(void* ptr, size_t bytes, const char* filename, int32_t linenumber, uint32_t flags); +void SMemZero(void* ptr, size_t bytes); + // global operators void* operator new(size_t bytes);