mirror of
https://github.com/thunderbrewhq/squall.git
synced 2026-02-03 16:39:08 +00:00
feat(memory): add SMemCopy and SMemMove
This commit is contained in:
parent
60523c3fe8
commit
73e0097395
3 changed files with 79 additions and 0 deletions
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
#include <cstring>
|
||||
|
||||
|
||||
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);
|
||||
|
||||
|
|
@ -23,6 +25,10 @@ void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t
|
|||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
@ -39,6 +45,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;
|
||||
|
|
|
|||
|
|
@ -10,12 +10,16 @@
|
|||
|
||||
void* SMemAlloc(size_t bytes, const char* filename, int32_t linenumber, uint32_t flags = 0);
|
||||
|
||||
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 = 0);
|
||||
|
||||
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 = 0);
|
||||
|
||||
void SMemZero(void* ptr, size_t bytes);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <cstring>
|
||||
#include <numeric>
|
||||
#include <vector>
|
||||
|
||||
|
||||
TEST_CASE("SMemAlloc", "[memory]") {
|
||||
|
|
@ -30,6 +31,38 @@ TEST_CASE("SMemAlloc", "[memory]") {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SMemCopy", "[memory]") {
|
||||
std::vector<uint8_t> data = { 1, 255, 128, 42, 69, 99, 13, 37 };
|
||||
|
||||
SECTION("copies memory") {
|
||||
std::vector<uint8_t> dest(8);
|
||||
SMemCopy(dest.data(), data.data(), 8);
|
||||
|
||||
CHECK_THAT(dest, Catch::Matchers::Equals(data));
|
||||
}
|
||||
|
||||
SECTION("copies nothing if size is 0") {
|
||||
std::vector<uint8_t> dest(8);
|
||||
SMemCopy(dest.data(), data.data(), 0);
|
||||
|
||||
CHECK(std::accumulate(dest.begin(), dest.end(), 0u) == 0);
|
||||
}
|
||||
|
||||
SECTION("copies overlapping memory right") {
|
||||
std::vector<uint8_t> result = { 1, 255, 1, 255, 128, 42, 13, 37 };
|
||||
SMemCopy(data.data() + 2, data.data(), 4);
|
||||
|
||||
CHECK_THAT(data, Catch::Matchers::Equals(result));
|
||||
}
|
||||
|
||||
SECTION("copies overlapping memory left") {
|
||||
std::vector<uint8_t> result = { 1, 255, 69, 99, 13, 37, 13, 37 };
|
||||
SMemCopy(data.data() + 2, data.data() + 4, 4);
|
||||
|
||||
CHECK_THAT(data, Catch::Matchers::Equals(result));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SMemFill", "[memory]") {
|
||||
std::vector<uint8_t> data = { 1, 255, 128, 42, 69, 99, 13, 37 };
|
||||
|
||||
|
|
@ -63,6 +96,38 @@ TEST_CASE("SMemFree full args", "[memory]") {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SMemMove", "[memory]") {
|
||||
std::vector<uint8_t> data = { 1, 255, 128, 42, 69, 99, 13, 37 };
|
||||
|
||||
SECTION("copies memory") {
|
||||
std::vector<uint8_t> dest(8);
|
||||
SMemMove(dest.data(), data.data(), 8);
|
||||
|
||||
CHECK_THAT(dest, Catch::Matchers::Equals(data));
|
||||
}
|
||||
|
||||
SECTION("copies nothing if size is 0") {
|
||||
std::vector<uint8_t> dest(8);
|
||||
SMemMove(dest.data(), data.data(), 0);
|
||||
|
||||
CHECK(std::accumulate(dest.begin(), dest.end(), 0u) == 0);
|
||||
}
|
||||
|
||||
SECTION("copies overlapping memory right") {
|
||||
std::vector<uint8_t> result = { 1, 255, 1, 255, 128, 42, 13, 37 };
|
||||
SMemMove(data.data() + 2, data.data(), 4);
|
||||
|
||||
CHECK_THAT(data, Catch::Matchers::Equals(result));
|
||||
}
|
||||
|
||||
SECTION("copies overlapping memory left") {
|
||||
std::vector<uint8_t> result = { 1, 255, 69, 99, 13, 37, 13, 37 };
|
||||
SMemMove(data.data() + 2, data.data() + 4, 4);
|
||||
|
||||
CHECK_THAT(data, Catch::Matchers::Equals(result));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SMemReAlloc", "[memory]") {
|
||||
SECTION("allocates memory") {
|
||||
void* ptr = SMemReAlloc(nullptr, 16, __FILE__, __LINE__);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue