2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 13:07:42 +00:00

more classes added

This commit is contained in:
Jack Andersen
2015-08-21 15:58:41 -10:00
parent 731d8bbcb4
commit b51911ed3d
53 changed files with 882 additions and 517 deletions

47
Runtime/IVParamObj.hpp Normal file
View File

@@ -0,0 +1,47 @@
#ifndef __RETRO_IVPARAMOBJ_HPP__
#define __RETRO_IVPARAMOBJ_HPP__
#include "IObj.hpp"
namespace Retro
{
class IVParamObj : public IObj
{
public:
virtual ~IVParamObj() {}
};
class CVParamTransfer
{
rstl::CRefData* m_refData;
public:
CVParamTransfer(rstl::CRefData* rd) : m_refData(rd) {m_refData->AddRef();}
~CVParamTransfer()
{
if (m_refData->DelRef() <= 0)
{
delete static_cast<IVParamObj*>(m_refData->GetPtr());
delete m_refData;
}
}
IVParamObj* GetObj() const {return static_cast<IVParamObj*>(m_refData->GetPtr());}
CVParamTransfer ShareTransferRef() {return CVParamTransfer(m_refData);}
static CVParamTransfer Null() {return CVParamTransfer(&rstl::CRefData::sNull);}
};
template<class T>
class TObjOwnerParam : public IVParamObj
{
T m_param;
protected:
~TObjOwnerParam() {}
public:
TObjOwnerParam(T&& obj) : m_param(std::move(obj)) {}
CVParamTransfer NewTransferRef() {return CVParamTransfer(new rstl::CRefData(this));}
};
}
#endif // __RETRO_IVPARAMOBJ_HPP__