1#include <basis/seadRawPrint.h>
2#include <heap/seadHeapMgr.h>
3#include <prim/seadMemUtil.h>
4#include <prim/seadPtrUtil.h>
5
6namespace sead
7{
8void* MemUtil::copyAlign32(void* dst, const void* src, size_t size)
9{
10 SEAD_ASSERT_MSG(size % 32 == 0, "size %% 32 == 0 size:%zu", size);
11 SEAD_ASSERT_MSG(PtrUtil::isAligned(dst, 32) && PtrUtil::isAligned(src, 32),
12 "pointer must be 32-byte aligned. src:%p -> dst:%p", src, dst);
13 return copy(dest: dst, src, size);
14}
15
16// TODO: MemUtil::isStack (in platform specific .cpp)
17
18bool MemUtil::isHeap(const void* addr)
19{
20 return HeapMgr::instance() && HeapMgr::isContainedInAnyHeap(ptr: addr);
21}
22
23// NON_MATCHING: Clang optimizes the if (ptr) return false; into if (ptr) return ptr;
24bool MemUtil::checkFillType(const void* ptr_, size_t size)
25{
26 const u8* ptr = static_cast<const u8*>(ptr_);
27 if (!ptr)
28 return false;
29
30 const u8 value = *ptr;
31 if (size == 0)
32 return value == 0;
33
34 size_t i = 1;
35 while (i < size)
36 {
37 if (value != ptr[i++])
38 return false;
39 }
40 return value == 0;
41}
42
43// TODO: MemUtil::dumpMemoryBinary
44
45} // namespace sead
46