diff --git a/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp b/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp index c2136a3..dcf0281 100644 --- a/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp +++ b/Bigfoot/Sources/Engine/Include/Engine/Asset/Reference.hpp @@ -21,27 +21,6 @@ template class ReferenceBase { public: - ReferenceBase() = default; - - ReferenceBase(const UUID& p_uuid): - m_uuid(p_uuid) - { - Acquire(); - } - - ReferenceBase(const ReferenceBase& p_ref): - m_uuid(p_ref.m_uuid), - m_handle(p_ref.m_handle) - { - Acquire(); - } - - ReferenceBase(ReferenceBase&& p_ref) noexcept: - m_uuid(std::exchange(p_ref.m_uuid, UUID::NULL_UUID)), - m_handle(std::exchange(p_ref.m_handle, nullptr)) - { - } - [[nodiscard]] const UUID& GetUUID() const { @@ -65,33 +44,55 @@ class ReferenceBase Release(); } - ReferenceBase& operator=(const ReferenceBase& p_ref) + ReferenceBase& operator=(const ReferenceBase& p_reference) { - if (this != &p_ref) + if (this != &p_reference) { Release(); - m_uuid = p_ref.m_uuid; - m_handle = p_ref.m_handle; + m_uuid = p_reference.m_uuid; + m_handle = p_reference.m_handle; Acquire(); } return *this; } - ReferenceBase& operator=(ReferenceBase&& p_ref) noexcept + ReferenceBase& operator=(ReferenceBase&& p_reference) noexcept { - if (this != &p_ref) + if (this != &p_reference) { Release(); - m_uuid = std::exchange(p_ref.m_uuid, UUID::NULL_UUID); - m_handle = std::exchange(p_ref.m_handle, nullptr); + m_uuid = std::exchange(p_reference.m_uuid, UUID::NULL_UUID); + m_handle = std::exchange(p_reference.m_handle, nullptr); } return *this; } [[nodiscard]] - bool operator==(const ReferenceBase& p_ref) const + bool operator==(const ReferenceBase& p_reference) const + { + return m_uuid == p_reference.m_uuid; + } + + protected: + ReferenceBase() = default; + + ReferenceBase(const UUID& p_uuid): + m_uuid(p_uuid) + { + Acquire(); + } + + ReferenceBase(const ReferenceBase& p_reference): + m_uuid(p_reference.m_uuid), + m_handle(p_reference.m_handle) + { + Acquire(); + } + + ReferenceBase(ReferenceBase&& p_reference) noexcept: + m_uuid(std::exchange(p_reference.m_uuid, UUID::NULL_UUID)), + m_handle(std::exchange(p_reference.m_handle, nullptr)) { - return m_uuid == p_ref.m_uuid; } private: @@ -128,6 +129,16 @@ class ReferenceBase template class HardReference: public ReferenceBase, ASSET> { + using Base = ReferenceBase, ASSET>; + + public: + HardReference() = default; + + HardReference(const UUID& p_uuid): + Base(p_uuid) + { + } + private: static void IncrementCount(ContainerHandle& p_handle) { @@ -139,12 +150,22 @@ class HardReference: public ReferenceBase, ASSET> p_handle.DecrementHardRefCount(); } - friend ReferenceBase, ASSET>; + friend Base; }; template class SoftReference: public ReferenceBase, ASSET> { + using Base = ReferenceBase, ASSET>; + + public: + SoftReference() = default; + + SoftReference(const UUID& p_uuid): + Base(p_uuid) + { + } + private: static void IncrementCount(ContainerHandle& p_handle) { @@ -156,7 +177,7 @@ class SoftReference: public ReferenceBase, ASSET> p_handle.DecrementSoftRefCount(); } - friend ReferenceBase, ASSET>; + friend Base; }; } // namespace Bigfoot #endif