SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
MemoryUtil.cpp
1#include "Game/Util.hpp"
2#include "Game/System/HeapMemoryWatcher.hpp"
3#include "Game/SingletonHolder.hpp"
4#include <cstdio>
5#include <cstring>
6#include <mem.h>
7#include <size_t.h>
8
9namespace MR {
10 MEMAllocatorFunc NewDeleteAllocator::sAllocatorFunc = {
11 NewDeleteAllocator::alloc,
12 NewDeleteAllocator::free,
13 };
14 MEMAllocator NewDeleteAllocator::sAllocator = { &sAllocatorFunc };
15
16 #ifdef NON_MATCHING
17 // shrug
18 s32 calcCheckSum(const void *pData, u32 a2) {
19 u32 v2 = 0;
20 u32 v3 = 0;
21
22 for (int i = a2 >> 1; i; i--) {
23 u16 curData = *(u16*)pData;
24 pData = (s8*)pData + 2;
25 v3 += curData;
26 v2 += ~curData;
27 }
28
29 return (v3 << 16) | v2;
30 }
31 #endif
32
33 CurrentHeapRestorer::CurrentHeapRestorer(JKRHeap *pHeap) {
34 _0 = JKRHeap::sCurrentHeap;
35 OSLockMutex(&MR::MutexHolder<1>::sMutex);
36 MR::becomeCurrentHeap(pHeap);
37 }
38
39 CurrentHeapRestorer::~CurrentHeapRestorer() {
40 MR::becomeCurrentHeap(_0);
41 OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
42 }
43
44 void* NewDeleteAllocator::alloc(MEMAllocator *pAllocator, u32 size) {
45 return new u8[size];
46 }
47
48 void NewDeleteAllocator::free(MEMAllocator *pAllocator, void *pData) {
49 delete[] (u8*)pData;
50 }
51
52 // MR::getHomeButtonLayoutAllocator
53
54 JKRHeap* getCurrentHeap() {
55 return JKRHeap::sCurrentHeap;
56 }
57
58 // MR::getAproposHeapForSceneArchive
59
60 JKRExpHeap* MR::getStationedHeapNapa() {
61 return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapNapa;
62 }
63
64 JKRExpHeap* getStationedHeapGDDR3() {
65 return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapGDDR;
66 }
67
68 JKRSolidHeap* getSceneHeapNapa() {
70 }
71
72 JKRSolidHeap* getSceneHeapGDDR3() {
74 }
75
76 // MR::getHeapNapa
77 // MR::getHeapGDDR3
78
79 void becomeCurrentHeap(JKRHeap *pHeap) {
80 OSLockMutex(&MR::MutexHolder<1>::sMutex);
81 pHeap->becomeCurrentHeap();
82 OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
83 }
84
85 bool isEqualCurrentHeap(JKRHeap *pHeap) {
86 return pHeap == JKRHeap::sCurrentHeap;
87 }
88
89 // MR::adjustHeapSize
90 // MR::copyMemory
91
92 void fillMemory(void *pDest, u8 a2, size_t size) {
93 if (a2 == 0) {
94 MR::zeroMemory(pDest, size);
95 }
96 else {
97 memset(pDest, a2, size);
98 }
99 }
100
101 // MR::zeroMemory
102 // MR::calcCheckSum
103 // MR::allocFromWPadHeap
104 // MR::freeFromWPadHeap
105};