#pragma once namespace vm { template class _ref_base { AT m_addr; public: operator T&() { return get_ref(m_addr); } operator const T&() const { return get_ref(m_addr); } AT addr() const { return m_addr; } static _ref_base make(AT addr) { return (_ref_base&)addr; } }; //BE reference to LE data template class brefl : public _ref_base> {}; //BE reference to BE data template class brefb : public _ref_base, be_t> {}; //LE reference to BE data template class lrefb : public _ref_base, AT> {}; //LE reference to LE data template class lrefl : public _ref_base {}; namespace ps3 { //default reference for HLE functions (LE reference to BE data) template class ref : public lrefb {}; //default reference for HLE structures (BE reference to BE data) template class bref : public brefb {}; } namespace psv { //default reference for HLE functions & structures (LE reference to LE data) template class ref : public lrefl {}; } }