summaryrefslogtreecommitdiffstats
path: root/src/Common/SharedPtr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/SharedPtr.h')
-rw-r--r--src/Common/SharedPtr.h101
1 files changed, 0 insertions, 101 deletions
diff --git a/src/Common/SharedPtr.h b/src/Common/SharedPtr.h
deleted file mode 100644
index 3696344..0000000
--- a/src/Common/SharedPtr.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * SharedPtr.h
- *
- * Copyright (C) 2008 Johannes Thorn <dante@g4t3.de>
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef MAD_COMMON_SHAREDPTR_H_
-#define MAD_COMMON_SHAREDPTR_H_
-
-namespace Mad {
-namespace Common {
-
-template <typename T>
-class SharedPtr {
- protected:
- class Counter {
- public:
- Counter(T *o) : object(o), refCount(1), cCount(new unsigned int(1)) {}
- Counter(T *o, unsigned int *count) : object(o), refCount(1), cCount(count) {++*cCount;}
-
- virtual ~Counter() {
- if(--cCount)
- return;
-
- if(object)
- delete object;
-
- delete cCount;
- }
-
- T *object;
- unsigned int refCount;
- unsigned int *cCount;
- };
-
- Counter *counter;
-
- template <typename T2>
- class CastPtr : public SharedPtr<T2> {
- public:
- CastPtr(T *o, unsigned int *cCount) : SharedPtr<T2>(o, cCount) {}
- };
-
- SharedPtr(T *o, unsigned int *cCount) : counter(new Counter(o, cCount)) {}
-
- public:
- SharedPtr(T *o = 0) : counter(new Counter(o)) {}
-
- SharedPtr(const SharedPtr<T> &c) : counter(c.counter) {
- ++counter->refCount;
- }
-
- virtual ~SharedPtr() {
- if(--counter->refCount == 0)
- delete counter;
- }
-
- SharedPtr<T>& operator=(const SharedPtr<T>& c) {
- ++c.counter->refCount;
- if(--counter->refCount == 0)
- delete counter;
-
- counter = c.counter;
- return *this;
- }
-
- bool empty() const {
- return counter->object;
- }
-
- T* operator->() {return counter->object;}
- T& operator*() {return *counter->object;}
-
- const T* operator->() const {return counter->object;}
- const T& operator*() const {return *counter->object;}
-
- bool operator<(const SharedPtr<T> &o) const {return counter->object < o.counter->object;}
- bool operator==(const SharedPtr<T> &o) const {return counter->object == o.counter->object;}
-
- template <typename T2> SharedPtr<T2> cast() const {
- return CastPtr<T2>(counter->object, counter->cCount);
- }
-};
-
-}
-}
-
-#endif /*MAD_COMMON_SHAREDPTR_H_*/