aboutsummaryrefslogtreecommitdiffstats
path: root/vmime/utility/smartPtr.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'vmime/utility/smartPtr.hpp')
-rw-r--r--vmime/utility/smartPtr.hpp60
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);
};