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:
47
Runtime/IVParamObj.hpp
Normal file
47
Runtime/IVParamObj.hpp
Normal 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__
|
||||
Reference in New Issue
Block a user