mirror of
https://github.com/encounter/Petari.git
synced 2026-03-30 11:34:15 -07:00
89 lines
2.1 KiB
C++
89 lines
2.1 KiB
C++
#include "Game/System/FileHolder.hpp"
|
|
|
|
FileHolderFileEntry::FileHolderFileEntry(const char *pName, JKRHeap *pHeap, void *pData) {
|
|
mEntryNum = DVDConvertPathToEntrynum(pName);
|
|
mContext = 0;
|
|
mHeap = pHeap;
|
|
mState = 0;
|
|
mContextSet = true;
|
|
|
|
OSInitMessageQueue(&mQueue, &mMessage, 1);
|
|
|
|
if (pData) {
|
|
mContextSet = false;
|
|
mContext = pData;
|
|
}
|
|
}
|
|
|
|
FileHolderFileEntry::~FileHolderFileEntry() {
|
|
if (mContextSet) {
|
|
if (mContext) {
|
|
delete (u8*)mContext;
|
|
}
|
|
}
|
|
}
|
|
|
|
void FileHolderFileEntry::waitReadDone() {
|
|
if (mState != 2) {
|
|
OSMessage msg;
|
|
OSReceiveMessage(&mQueue, &msg, 1);
|
|
mState = 2;
|
|
}
|
|
}
|
|
|
|
void FileHolderFileEntry::setContext(void *pData, JKRHeap *pHeap) {
|
|
mContext = pData;
|
|
mHeap = pHeap;
|
|
|
|
OSSendMessage(&mQueue, 0, 0);
|
|
mState = 1;
|
|
}
|
|
|
|
FileHolder::FileHolder() {
|
|
mArray.mArray.mArr = new FileHolderFileEntry*[0x180];
|
|
mArray.mArray.mMaxSize = 0x180;
|
|
}
|
|
|
|
FileHolderFileEntry* FileHolder::add(const char *pName, JKRHeap *pHeap, void *pData) {
|
|
FileHolderFileEntry* entry = new(pHeap, 0) FileHolderFileEntry(pName, pHeap, pData);
|
|
s32 count = mArray.mCount;
|
|
mArray.mCount++;
|
|
mArray.mArray.mArr[count] = entry;
|
|
return entry;
|
|
}
|
|
|
|
bool FileHolder::isExist(const char *pFile) const {
|
|
return findEntry(pFile);
|
|
}
|
|
|
|
void* FileHolder::getContext(const char *pFile) const {
|
|
return findEntry(pFile)->mContext;
|
|
}
|
|
|
|
// FileHolder::removeIfIsEqualHeap
|
|
|
|
FileHolderFileEntry** FileHolder::removeFile(const char *pFile) {
|
|
FileHolderFileEntry* entry = findEntry(pFile);
|
|
FileHolderFileEntry** i;
|
|
|
|
for (i = mArray.mArray.mArr; i != &mArray.mArray.mArr[mArray.mCount] && *i != entry; i++) {
|
|
}
|
|
|
|
delete *i;
|
|
|
|
return mArray.erase(i);
|
|
}
|
|
|
|
FileHolderFileEntry* FileHolder::findEntry(const char *pFile) const {
|
|
s32 entryNum = DVDConvertPathToEntrynum(pFile);
|
|
|
|
FileHolderFileEntry** curEntry;
|
|
|
|
for (curEntry = mArray.mArray.mArr; curEntry != &mArray.mArray.mArr[mArray.mCount]; curEntry++) {
|
|
if (entryNum == (*(curEntry))->mEntryNum) {
|
|
return *curEntry;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |