mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 17:36:12 -05:00
Add MxStreamController::~MxStreamController (#355)
This commit is contained in:
parent
24a3a8f3fd
commit
bbe5d6f810
7 changed files with 44 additions and 21 deletions
|
@ -72,7 +72,7 @@ MxResult MxDiskStreamProvider::SetResourceToGet(MxStreamController* p_resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100d15e0
|
// STUB: LEGO1 0x100d15e0
|
||||||
void MxDiskStreamProvider::VTable0x20(undefined4)
|
void MxDiskStreamProvider::VTable0x20(MxDSAction* p_action)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ class MxDiskStreamProvider : public MxStreamProvider {
|
||||||
virtual MxResult SetResourceToGet(MxStreamController* p_resource) override; // vtable+0x14
|
virtual MxResult SetResourceToGet(MxStreamController* p_resource) override; // vtable+0x14
|
||||||
virtual MxU32 GetFileSize() override; // vtable+0x18
|
virtual MxU32 GetFileSize() override; // vtable+0x18
|
||||||
virtual MxS32 GetStreamBuffersNum() override; // vtable+0x1c
|
virtual MxS32 GetStreamBuffersNum() override; // vtable+0x1c
|
||||||
virtual void VTable0x20(undefined4) override; // vtable+0x20
|
virtual void VTable0x20(MxDSAction* p_action) override; // vtable+0x20
|
||||||
virtual MxU32 GetLengthInDWords() override; // vtable+0x24
|
virtual MxU32 GetLengthInDWords() override; // vtable+0x24
|
||||||
virtual MxU32* GetBufferForDWords() override; // vtable+0x28
|
virtual MxU32* GetBufferForDWords() override; // vtable+0x28
|
||||||
|
|
||||||
|
|
|
@ -31,14 +31,37 @@ MxDSStreamingAction* MxStreamController::VTable0x28()
|
||||||
MxStreamController::MxStreamController()
|
MxStreamController::MxStreamController()
|
||||||
{
|
{
|
||||||
m_provider = NULL;
|
m_provider = NULL;
|
||||||
m_unk0x2c = 0; // TODO: probably also NULL
|
m_unk0x2c = NULL;
|
||||||
m_action0x60 = NULL;
|
m_action0x60 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100c1290
|
// FUNCTION: LEGO1 0x100c1290
|
||||||
MxStreamController::~MxStreamController()
|
MxStreamController::~MxStreamController()
|
||||||
{
|
{
|
||||||
// TODO
|
MxAutoLocker lock(&m_criticalSection);
|
||||||
|
|
||||||
|
MxDSSubscriber* subscriber;
|
||||||
|
while (m_subscriberList.PopFront(subscriber))
|
||||||
|
delete subscriber;
|
||||||
|
|
||||||
|
MxDSAction* action;
|
||||||
|
while (m_unk0x3c.PopFront(action))
|
||||||
|
delete action;
|
||||||
|
|
||||||
|
if (m_provider) {
|
||||||
|
MxStreamProvider* provider = m_provider;
|
||||||
|
m_provider = NULL;
|
||||||
|
provider->VTable0x20(&MxDSAction());
|
||||||
|
delete provider;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_unk0x2c) {
|
||||||
|
delete m_unk0x2c;
|
||||||
|
m_unk0x2c = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (m_unk0x54.PopFront(action))
|
||||||
|
delete action;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100c1520
|
// FUNCTION: LEGO1 0x100c1520
|
||||||
|
|
|
@ -59,7 +59,7 @@ class MxStreamController : public MxCore {
|
||||||
MxCriticalSection m_criticalSection; // 0x8
|
MxCriticalSection m_criticalSection; // 0x8
|
||||||
MxAtomId m_atom; // 0x24
|
MxAtomId m_atom; // 0x24
|
||||||
MxStreamProvider* m_provider; // 0x28
|
MxStreamProvider* m_provider; // 0x28
|
||||||
undefined4 m_unk0x2c; // 0x2c
|
undefined4* m_unk0x2c; // 0x2c
|
||||||
MxStreamListMxDSSubscriber m_subscriberList; // 0x30
|
MxStreamListMxDSSubscriber m_subscriberList; // 0x30
|
||||||
MxStreamListMxDSAction m_unk0x3c; // 0x3c
|
MxStreamListMxDSAction m_unk0x3c; // 0x3c
|
||||||
MxStreamListMxNextActionDataStart m_nextActionList; // 0x48
|
MxStreamListMxNextActionDataStart m_nextActionList; // 0x48
|
||||||
|
|
|
@ -7,24 +7,23 @@
|
||||||
#include "mxstl/stlcompat.h"
|
#include "mxstl/stlcompat.h"
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class MxStreamList : public list<T> {};
|
class MxStreamList : public list<T> {
|
||||||
|
public:
|
||||||
|
MxBool PopFront(T& p_obj)
|
||||||
|
{
|
||||||
|
if (empty())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
p_obj = front();
|
||||||
|
pop_front();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// SIZE 0xc
|
// SIZE 0xc
|
||||||
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
|
||||||
|
|
|
@ -12,6 +12,6 @@ MxResult MxStreamProvider::SetResourceToGet(MxStreamController* p_resource)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100d07d0
|
// FUNCTION: LEGO1 0x100d07d0
|
||||||
void MxStreamProvider::VTable0x20(undefined4)
|
void MxStreamProvider::VTable0x20(MxDSAction* p_action)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "mxdsfile.h"
|
#include "mxdsfile.h"
|
||||||
|
|
||||||
class MxStreamController;
|
class MxStreamController;
|
||||||
|
class MxDSAction;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100dd100
|
// VTABLE: LEGO1 0x100dd100
|
||||||
// SIZE 0x10
|
// SIZE 0x10
|
||||||
|
@ -28,7 +29,7 @@ class MxStreamProvider : public MxCore {
|
||||||
virtual MxResult SetResourceToGet(MxStreamController* p_resource); // vtable+0x14
|
virtual MxResult SetResourceToGet(MxStreamController* p_resource); // vtable+0x14
|
||||||
virtual MxU32 GetFileSize() = 0; // vtable+0x18
|
virtual MxU32 GetFileSize() = 0; // vtable+0x18
|
||||||
virtual MxS32 GetStreamBuffersNum() = 0; // vtable+0x1c
|
virtual MxS32 GetStreamBuffersNum() = 0; // vtable+0x1c
|
||||||
virtual void VTable0x20(undefined4); // vtable+0x20
|
virtual void VTable0x20(MxDSAction* p_action); // vtable+0x20
|
||||||
virtual MxU32 GetLengthInDWords() = 0; // vtable+0x24
|
virtual MxU32 GetLengthInDWords() = 0; // vtable+0x24
|
||||||
virtual MxU32* GetBufferForDWords() = 0; // vtable+0x28
|
virtual MxU32* GetBufferForDWords() = 0; // vtable+0x28
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue