diff options
| author | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
|---|---|---|
| committer | maximius <none@none> | 2009-10-17 15:51:44 -0700 |
| commit | e585187b248f48b3c6e9247b49fa07c6565d65e5 (patch) | |
| tree | 637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/framework/Utilities/LinkedReference | |
| parent | 26b5e033ffde3d161382fc9addbfa99738379641 (diff) | |
*Backed out changeset 3be01fb200a5
--HG--
branch : trunk
Diffstat (limited to 'src/framework/Utilities/LinkedReference')
| -rw-r--r-- | src/framework/Utilities/LinkedReference/RefManager.h | 7 | ||||
| -rw-r--r-- | src/framework/Utilities/LinkedReference/Reference.h | 15 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/framework/Utilities/LinkedReference/RefManager.h b/src/framework/Utilities/LinkedReference/RefManager.h index 819e7775bf6..ed580f49ec2 100644 --- a/src/framework/Utilities/LinkedReference/RefManager.h +++ b/src/framework/Utilities/LinkedReference/RefManager.h @@ -17,25 +17,31 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef _REFMANAGER_H #define _REFMANAGER_H //===================================================== + #include "Utilities/LinkedList.h" #include "Utilities/LinkedReference/Reference.h" + template <class TO, class FROM> class RefManager : public LinkedListHead { public: typedef LinkedListHead::Iterator< Reference<TO, FROM> > iterator; RefManager() { } virtual ~RefManager() { clearReferences(); } + Reference<TO, FROM>* getFirst() { return ((Reference<TO, FROM>*) LinkedListHead::getFirst()); } Reference<TO, FROM> const* getFirst() const { return ((Reference<TO, FROM> const*) LinkedListHead::getFirst()); } Reference<TO, FROM>* getLast() { return ((Reference<TO, FROM>*) LinkedListHead::getLast()); } Reference<TO, FROM> const* getLast() const { return ((Reference<TO, FROM> const*) LinkedListHead::getLast()); } + iterator begin() { return iterator(getFirst()); } iterator end() { return iterator(NULL); } iterator rbegin() { return iterator(getLast()); } iterator rend() { return iterator(NULL); } + void clearReferences() { LinkedListElement* ref; @@ -46,6 +52,7 @@ template <class TO, class FROM> class RefManager : public LinkedListHead } } }; + //===================================================== #endif diff --git a/src/framework/Utilities/LinkedReference/Reference.h b/src/framework/Utilities/LinkedReference/Reference.h index 7ac5bd4ef3d..c77d3a2cbdb 100644 --- a/src/framework/Utilities/LinkedReference/Reference.h +++ b/src/framework/Utilities/LinkedReference/Reference.h @@ -17,10 +17,14 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef _REFERENCE_H #define _REFERENCE_H + #include "Utilities/LinkedList.h" + //===================================================== + template <class TO, class FROM> class Reference : public LinkedListElement { private: @@ -29,13 +33,16 @@ template <class TO, class FROM> class Reference : public LinkedListElement protected: // Tell our refTo (target) object that we have a link virtual void targetObjectBuildLink() = 0; + // Tell our refTo (taget) object, that the link is cut virtual void targetObjectDestroyLink() = 0; + // Tell our refFrom (source) object, that the link is cut (Target destroyed) virtual void sourceObjectDestroyLink() = 0; public: Reference() { iRefTo = NULL; iRefFrom = NULL; } virtual ~Reference() {} + // Create new link void link(TO* toObj, FROM* fromObj) { @@ -49,31 +56,39 @@ template <class TO, class FROM> class Reference : public LinkedListElement targetObjectBuildLink(); } } + // We don't need the reference anymore. Call comes from the refFrom object // Tell our refTo object, that the link is cut void unlink() { targetObjectDestroyLink(); delink(); iRefTo = NULL; iRefFrom = NULL; } + // Link is invalid due to destruction of referenced target object. Call comes from the refTo object // Tell our refFrom object, that the link is cut void invalidate() // the iRefFrom MUST remain!! { sourceObjectDestroyLink(); delink(); iRefTo = NULL; } + bool isValid() const // Only check the iRefTo { return iRefTo != NULL; } + Reference<TO,FROM> * next() { return((Reference<TO,FROM> *) LinkedListElement::next()); } Reference<TO,FROM> const * next() const { return((Reference<TO,FROM> const *) LinkedListElement::next()); } Reference<TO,FROM> * prev() { return((Reference<TO,FROM> *) LinkedListElement::prev()); } Reference<TO,FROM> const * prev() const { return((Reference<TO,FROM> const *) LinkedListElement::prev()); } + Reference<TO,FROM> * nocheck_next() { return((Reference<TO,FROM> *) LinkedListElement::nocheck_next()); } Reference<TO,FROM> const * nocheck_next() const { return((Reference<TO,FROM> const *) LinkedListElement::nocheck_next()); } Reference<TO,FROM> * nocheck_prev() { return((Reference<TO,FROM> *) LinkedListElement::nocheck_prev()); } Reference<TO,FROM> const * nocheck_prev() const { return((Reference<TO,FROM> const *) LinkedListElement::nocheck_prev()); } + TO* operator ->() const { return iRefTo; } TO* getTarget() const { return iRefTo; } + FROM* getSource() const { return iRefFrom; } }; + //===================================================== #endif |
