diff --git a/shared/Base/Utility.hpp b/shared/Base/Utility.hpp index f9f7a7bf..39b7185d 100644 --- a/shared/Base/Utility.hpp +++ b/shared/Base/Utility.hpp @@ -1447,6 +1447,109 @@ public: } }; +/* ------------------------------------------------------------------------------------------------ + * RAII approach to delete an instance of a class if not released. +*/ +template < typename T > class AutoDelete +{ +private: + + // -------------------------------------------------------------------------------------------- + T * m_Inst; // The managed instance. + +public: + + /* -------------------------------------------------------------------------------------------- + * Default constructor. + */ + AutoDelete(T * inst) + : m_Inst(inst) + { + /* ... */ + } + + /* -------------------------------------------------------------------------------------------- + * Copy constructor. (disabled) + */ + AutoDelete(const AutoDelete & o) = delete; + + /* -------------------------------------------------------------------------------------------- + * Move constructor. (disabled) + */ + AutoDelete(AutoDelete && o) = delete; + + /* -------------------------------------------------------------------------------------------- + * Destructor. + */ + ~AutoDelete() + { + if (m_Inst) + { + delete m_Inst; + } + } + + /* -------------------------------------------------------------------------------------------- + * Copy assignment operator. (disabled) + */ + AutoDelete & operator = (const AutoDelete & o) = delete; + + /* -------------------------------------------------------------------------------------------- + * Move assignment operator. (disabled) + */ + AutoDelete & operator = (AutoDelete && o) = delete; + + /* -------------------------------------------------------------------------------------------- + * Implicit cast to the managed instance. + */ + operator T * () + { + return m_Inst; + } + + /* -------------------------------------------------------------------------------------------- + * Implicit cast to the managed instance. + */ + operator const T * () const + { + return m_Inst; + } + + /* -------------------------------------------------------------------------------------------- + * Released the managed instance. + */ + void Release() + { + m_Inst = nullptr; + } + + /* -------------------------------------------------------------------------------------------- + * Released the managed instance. + */ + T * Grab() + { + T * ptr = m_Inst; + m_Inst = nullptr; + return ptr; + } + + /* -------------------------------------------------------------------------------------------- + * Retrieve the managed instance. + */ + T * Get() + { + return m_Inst; + } + + /* -------------------------------------------------------------------------------------------- + * Retrieve the managed instance. + */ + const T * Get() const + { + return m_Inst; + } +}; + /* ------------------------------------------------------------------------------------------------ * Retrieve the string representation of a certain type. */ diff --git a/source/Base/Shared.hpp b/source/Base/Shared.hpp index 4fe6252b..b2b6e246 100644 --- a/source/Base/Shared.hpp +++ b/source/Base/Shared.hpp @@ -238,109 +238,6 @@ Color3 GetColor(const StackStrF & name); */ void SqThrowLastF(CSStr msg, ...); -/* ------------------------------------------------------------------------------------------------ - * RAII approach to delete an instance of a class if not released. -*/ -template < typename T > class AutoDelete -{ -private: - - // -------------------------------------------------------------------------------------------- - T * m_Inst; // The managed instance. - -public: - - /* -------------------------------------------------------------------------------------------- - * Default constructor. - */ - AutoDelete(T * inst) - : m_Inst(inst) - { - /* ... */ - } - - /* -------------------------------------------------------------------------------------------- - * Copy constructor. (disabled) - */ - AutoDelete(const AutoDelete & o) = delete; - - /* -------------------------------------------------------------------------------------------- - * Move constructor. (disabled) - */ - AutoDelete(AutoDelete && o) = delete; - - /* -------------------------------------------------------------------------------------------- - * Destructor. - */ - ~AutoDelete() - { - if (m_Inst) - { - delete m_Inst; - } - } - - /* -------------------------------------------------------------------------------------------- - * Copy assignment operator. (disabled) - */ - AutoDelete & operator = (const AutoDelete & o) = delete; - - /* -------------------------------------------------------------------------------------------- - * Move assignment operator. (disabled) - */ - AutoDelete & operator = (AutoDelete && o) = delete; - - /* -------------------------------------------------------------------------------------------- - * Implicit cast to the managed instance. - */ - operator T * () - { - return m_Inst; - } - - /* -------------------------------------------------------------------------------------------- - * Implicit cast to the managed instance. - */ - operator const T * () const - { - return m_Inst; - } - - /* -------------------------------------------------------------------------------------------- - * Released the managed instance. - */ - void Release() - { - m_Inst = nullptr; - } - - /* -------------------------------------------------------------------------------------------- - * Released the managed instance. - */ - T * Grab() - { - T * ptr = m_Inst; - m_Inst = nullptr; - return ptr; - } - - /* -------------------------------------------------------------------------------------------- - * Retrieve the managed instance. - */ - T * Get() - { - return m_Inst; - } - - /* -------------------------------------------------------------------------------------------- - * Retrieve the managed instance. - */ - const T * Get() const - { - return m_Inst; - } -}; - /* ------------------------------------------------------------------------------------------------ * Retrieve the string delimiter of a base type. */