SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
FileHolder.cpp
1#include "Game/System/FileHolder.hpp"
2
3FileHolderFileEntry::FileHolderFileEntry(const char *pName, JKRHeap *pHeap, void *pData) {
4 mEntryNum = DVDConvertPathToEntrynum(pName);
5 mContext = 0;
6 mHeap = pHeap;
7 mState = 0;
8 mContextSet = true;
9
10 OSInitMessageQueue(&mQueue, &mMessage, 1);
11
12 if (pData) {
13 mContextSet = false;
14 mContext = pData;
15 }
16}
17
18FileHolderFileEntry::~FileHolderFileEntry() {
19 if (mContextSet) {
20 if (mContext) {
21 delete (u8*)mContext;
22 }
23 }
24}
25
26void FileHolderFileEntry::waitReadDone() {
27 if (mState != 2) {
28 OSMessage msg;
29 OSReceiveMessage(&mQueue, &msg, 1);
30 mState = 2;
31 }
32}
33
34void FileHolderFileEntry::setContext(void *pData, JKRHeap *pHeap) {
35 mContext = pData;
36 mHeap = pHeap;
37
38 OSSendMessage(&mQueue, 0, 0);
39 mState = 1;
40}
41
42FileHolder::FileHolder() {
43 mArray.mArray.mArr = new FileHolderFileEntry*[0x180];
44 mArray.mArray.mMaxSize = 0x180;
45}
46
47FileHolderFileEntry* FileHolder::add(const char *pName, JKRHeap *pHeap, void *pData) {
48 FileHolderFileEntry* entry = new(pHeap, 0) FileHolderFileEntry(pName, pHeap, pData);
49 s32 count = mArray.mCount;
50 mArray.mCount++;
51 mArray.mArray.mArr[count] = entry;
52 return entry;
53}
54
55bool FileHolder::isExist(const char *pFile) const {
56 return findEntry(pFile);
57}
58
59void* FileHolder::getContext(const char *pFile) const {
60 return findEntry(pFile)->mContext;
61}
62
63// FileHolder::removeIfIsEqualHeap
64
65FileHolderFileEntry** FileHolder::removeFile(const char *pFile) {
66 FileHolderFileEntry* entry = findEntry(pFile);
68
69 for (i = mArray.mArray.mArr; i != &mArray.mArray.mArr[mArray.mCount] && *i != entry; i++) {
70 }
71
72 delete *i;
73
74 return mArray.erase(i);
75}
76
77FileHolderFileEntry* FileHolder::findEntry(const char *pFile) const {
78 s32 entryNum = DVDConvertPathToEntrynum(pFile);
79
80 FileHolderFileEntry** curEntry;
81
82 for (curEntry = mArray.mArray.mArr; curEntry != &mArray.mArray.mArr[mArray.mCount]; curEntry++) {
83 if (entryNum == (*(curEntry))->mEntryNum) {
84 return *curEntry;
85 }
86 }
87
88 return 0;
89}
Definition FileHolder.hpp:8