Files

106 lines
2.6 KiB
C++
Raw Permalink Normal View History

#include "Game/Util.hpp"
#include "Game/System/HeapMemoryWatcher.hpp"
#include "Game/SingletonHolder.hpp"
#include <cstdio>
2023-02-22 21:17:07 -05:00
#include <cstring>
#include <mem.h>
2023-02-22 21:17:07 -05:00
#include <size_t.h>
namespace MR {
2022-11-02 01:14:13 -04:00
MEMAllocatorFunc NewDeleteAllocator::sAllocatorFunc = {
NewDeleteAllocator::alloc,
NewDeleteAllocator::free,
};
2023-07-14 08:43:12 -04:00
MEMAllocator NewDeleteAllocator::sAllocator = { &sAllocatorFunc };
2022-11-02 01:14:13 -04:00
#ifdef NON_MATCHING
// shrug
s32 calcCheckSum(const void *pData, u32 a2) {
u32 v2 = 0;
u32 v3 = 0;
for (int i = a2 >> 1; i; i--) {
u16 curData = *(u16*)pData;
pData = (s8*)pData + 2;
v3 += curData;
v2 += ~curData;
}
return (v3 << 16) | v2;
}
#endif
2021-10-18 23:37:08 -04:00
CurrentHeapRestorer::CurrentHeapRestorer(JKRHeap *pHeap) {
_0 = JKRHeap::sCurrentHeap;
OSLockMutex(&MR::MutexHolder<1>::sMutex);
MR::becomeCurrentHeap(pHeap);
}
CurrentHeapRestorer::~CurrentHeapRestorer() {
MR::becomeCurrentHeap(_0);
OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
}
void* NewDeleteAllocator::alloc(MEMAllocator *pAllocator, u32 size) {
return new u8[size];
}
void NewDeleteAllocator::free(MEMAllocator *pAllocator, void *pData) {
delete[] (u8*)pData;
}
// MR::getHomeButtonLayoutAllocator
JKRHeap* getCurrentHeap() {
return JKRHeap::sCurrentHeap;
}
// MR::getAproposHeapForSceneArchive
JKRExpHeap* MR::getStationedHeapNapa() {
return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapNapa;
}
JKRExpHeap* getStationedHeapGDDR3() {
return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapGDDR;
}
JKRSolidHeap* getSceneHeapNapa() {
return SingletonHolder<HeapMemoryWatcher>::sInstance->mSceneHeapNapa;
}
JKRSolidHeap* getSceneHeapGDDR3() {
return SingletonHolder<HeapMemoryWatcher>::sInstance->mSceneHeapGDDR;
}
2021-10-18 23:37:08 -04:00
// MR::getHeapNapa
// MR::getHeapGDDR3
void becomeCurrentHeap(JKRHeap *pHeap) {
OSLockMutex(&MR::MutexHolder<1>::sMutex);
pHeap->becomeCurrentHeap();
OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
}
bool isEqualCurrentHeap(JKRHeap *pHeap) {
return pHeap == JKRHeap::sCurrentHeap;
}
// MR::adjustHeapSize
// MR::copyMemory
2023-02-22 21:17:07 -05:00
void fillMemory(void *pDest, u8 a2, size_t size) {
2021-10-18 23:37:08 -04:00
if (a2 == 0) {
MR::zeroMemory(pDest, size);
}
else {
memset(pDest, a2, size);
}
}
// MR::zeroMemory
// MR::calcCheckSum
// MR::allocFromWPadHeap
// MR::freeFromWPadHeap
};