Improve match of MxDiskStreamController::VTable0x28

This commit is contained in:
Christian Semmler 2023-12-22 13:43:28 -05:00
parent e6b86a87f4
commit f572b60f36
2 changed files with 20 additions and 10 deletions

View File

@ -97,19 +97,17 @@ void MxDiskStreamController::FUN_100c7980()
MxDSStreamingAction* MxDiskStreamController::VTable0x28() MxDSStreamingAction* MxDiskStreamController::VTable0x28()
{ {
MxAutoLocker lock(&this->m_criticalSection); MxAutoLocker lock(&this->m_criticalSection);
MxDSAction* oldAction;
MxDSStreamingAction* result = NULL; MxDSStreamingAction* result = NULL;
MxU32 filesize = m_provider->GetFileSize(); MxU32 filesize = m_provider->GetFileSize();
if (m_unk0x3c.size() != 0) { if (m_unk0x3c.PopFront(oldAction)) {
MxDSStreamingAction* oldAction = (MxDSStreamingAction*) m_unk0x3c.front(); result = new MxDSStreamingAction((MxDSStreamingAction&) *oldAction);
m_unk0x3c.pop_front(); if (result) {
MxU32 offset = result->GetBufferOffset() + filesize;
MxDSStreamingAction* action = new MxDSStreamingAction(*oldAction); ((MxDSStreamingAction*) oldAction)->SetUnknown94(offset);
result = action; ((MxDSStreamingAction*) oldAction)->SetBufferOffset(offset);
if (action) { m_unk0x3c.push_back(result);
oldAction->SetUnknown94(action->GetBufferOffset() + filesize);
oldAction->SetBufferOffset(action->GetBufferOffset() + filesize);
m_unk0x3c.push_back(action);
} }
} }

View File

@ -13,6 +13,18 @@ class MxStreamList : public list<T> {};
class MxStreamListMxDSAction : public MxStreamList<MxDSAction*> { class MxStreamListMxDSAction : public MxStreamList<MxDSAction*> {
public: public:
MxDSAction* Find(MxDSAction* p_action, MxBool p_delete); MxDSAction* Find(MxDSAction* p_action, MxBool p_delete);
// Could move this to MxStreamList
MxBool PopFront(MxDSAction*& p_obj)
{
if (!empty()) {
p_obj = front();
pop_front();
return TRUE;
}
return FALSE;
}
}; };
// SIZE 0xc // SIZE 0xc