rpcsx/rpcs3/Emu/Memory/vm_ref.h

58 lines
1.3 KiB
C
Raw Normal View History

#pragma once
namespace vm
{
template<typename T, typename AT = u32>
class _ref_base
{
AT m_addr;
public:
operator T&()
{
return get_ref<T>(m_addr);
}
operator const T&() const
{
return get_ref<const T>(m_addr);
}
AT addr() const
{
return m_addr;
}
2014-08-31 01:06:43 +02:00
static _ref_base make(u32 addr)
{
2014-08-31 01:06:43 +02:00
return (_ref_base&)addr;
}
};
//BE reference to LE data
template<typename T, typename AT = u32> class brefl : public _ref_base<T, be_t<AT>> {};
//BE reference to BE data
template<typename T, typename AT = u32> class brefb : public _ref_base<be_t<T>, be_t<AT>> {};
//LE reference to BE data
template<typename T, typename AT = u32> class lrefb : public _ref_base<be_t<T>, AT> {};
//LE reference to LE data
template<typename T, typename AT = u32> class lrefl : public _ref_base<T, AT> {};
namespace ps3
{
//default reference for HLE functions (LE reference to BE data)
2014-08-31 01:06:43 +02:00
template<typename T, typename AT = u32> class ref : public lrefb<T, AT> {};
//default reference for HLE structures (BE reference to BE data)
2014-08-31 01:06:43 +02:00
template<typename T, typename AT = u32> class bref : public brefb<T, AT> {};
}
namespace psv
{
//default reference for HLE functions & structures (LE reference to LE data)
2014-08-31 01:06:43 +02:00
template<typename T, typename AT = u32> class ref : public lrefl<T, AT> {};
}
}