diff options
Diffstat (limited to 'vmime/utility/smartPtr.hpp')
-rw-r--r-- | vmime/utility/smartPtr.hpp | 60 |
1 files changed, 20 insertions, 40 deletions
diff --git a/vmime/utility/smartPtr.hpp b/vmime/utility/smartPtr.hpp index c52752ed..9b97121c 100644 --- a/vmime/utility/smartPtr.hpp +++ b/vmime/utility/smartPtr.hpp @@ -58,86 +58,66 @@ public: }; -/** Reference counter for shared pointers. - */ - -class refCounter -{ -public: - - refCounter(const long initialValue); - ~refCounter(); - - const long increment(); - const long decrement(); - const long compareExchange(const long compare, const long exchangeWith); - - operator long() const; - -private: - - long m_value; -}; - - /** Manage the life cycle of an object. */ class refManager { +protected: + + refManager() {} + public: - refManager(object* obj); - ~refManager(); + virtual ~refManager() {} + + /** Create a ref manager for the specified object. + * + * @return a new manager + */ + static refManager* create(object* obj); /** Add a strong reference to the managed object. */ - const bool addStrong(); + virtual const bool addStrong() = 0; /** Release a strong reference to the managed object. * If it is the last reference, the object is destroyed. */ - void releaseStrong(); + virtual void releaseStrong() = 0; /** Add a weak reference to the managed object. */ - void addWeak(); + virtual void addWeak() = 0; /** Release a weak reference to the managed object. * If it is the last weak reference, the manager is destroyed. */ - void releaseWeak(); + virtual void releaseWeak() = 0; /** Return a raw pointer to the managed object. * * @return pointer to the managed object */ - object* getObject(); + virtual object* getObject() = 0; /** Return the number of strong refs to this object. * For debugging purposes only. * * @return strong reference count */ - const long getStrongRefCount() const; + virtual const long getStrongRefCount() const = 0; /** Return the number of weak refs to this object. * For debugging purposes only. * * @return weak reference count */ - const long getWeakRefCount() const; - -private: + virtual const long getWeakRefCount() const = 0; - void deleteManager(); - void deleteObject(); - - - object* m_object; +protected: - refCounter m_strongCount; - refCounter m_weakCount; + void deleteObjectImpl(object* obj); }; |