Changeset 9596 for code/branches/core6/src/libraries/core/object/Iterator.h
- Timestamp:
- Mar 29, 2013, 12:42:24 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/core6/src/libraries/core/object/Iterator.h
r9573 r9596 56 56 #include "core/CorePrereqs.h" 57 57 58 #include "core/class/Identifier.h"59 58 #include "ObjectListBase.h" 60 59 … … 78 77 inline Iterator() 79 78 { 80 this->element_ = 0; 81 this->list_ = 0; 82 } 83 84 /** 85 @brief Constructor: Sets this element to the exported element. 86 @param exp The exported element 87 */ 88 inline Iterator(const ObjectListBase::Export& exp) 89 { 90 this->element_ = exp.element_; 91 this->list_ = exp.list_; 92 this->list_->registerIterator(this); 79 this->element_ = NULL; 80 this->list_ = NULL; 93 81 } 94 82 … … 100 88 { 101 89 this->element_ = other.element_; 102 this->list_ = other.list_; 103 this->list_->registerIterator(this); 90 this->registerIterator(); 104 91 } 105 92 … … 108 95 @param element The element 109 96 */ 110 template <class O> 111 inline Iterator(ObjectListElement<O>* element) 97 inline Iterator(ObjectListBaseElement* element) 112 98 { 113 99 this->element_ = element; 114 this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects(); 115 this->list_->registerIterator(this); 100 this->registerIterator(); 116 101 } 117 102 … … 124 109 { 125 110 this->element_ = other.element_; 126 this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects(); 127 this->list_->registerIterator(this); 111 this->registerIterator(); 128 112 } 129 113 … … 133 117 inline ~Iterator() 134 118 { 135 this->list_->unregisterIterator(this); 136 } 137 138 /** 139 @brief Assigns an exported element. 140 @param exp The exported element 141 */ 142 inline Iterator<T>& operator=(const ObjectListBase::Export& exp) 143 { 144 if (this->list_) 145 this->list_->unregisterIterator(this); 146 147 this->element_ = exp.element_; 148 this->list_ = exp.list_; 149 this->list_->registerIterator(this); 150 151 return (*this); 119 this->unregisterIterator(); 152 120 } 153 121 … … 158 126 inline Iterator<T>& operator=(const Iterator<T>& other) 159 127 { 160 if (this->list_) 161 this->list_->unregisterIterator(this); 162 163 this->element_ = other.element_; 164 this->list_ = other.list_; 165 this->list_->registerIterator(this); 128 this->unregisterIterator(); 129 this->element_ = other.element_; 130 this->registerIterator(); 166 131 167 132 return (*this); … … 172 137 @param element The element 173 138 */ 174 template <class O> 175 inline Iterator<T>& operator=(ObjectListElement<O>* element) 176 { 177 if (this->list_) 178 this->list_->unregisterIterator(this); 179 139 inline Iterator<T>& operator=(ObjectListBaseElement* element) 140 { 141 this->unregisterIterator(); 180 142 this->element_ = element; 181 this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects(); 182 this->list_->registerIterator(this); 143 this->registerIterator(); 183 144 184 145 return (*this); … … 192 153 inline Iterator<T>& operator=(const ObjectListIterator<O>& other) 193 154 { 194 if (this->list_) 195 this->list_->unregisterIterator(this); 196 197 this->element_ = other.element_; 198 this->list_ = ClassIdentifier<O>::getIdentifier()->getObjects(); 199 this->list_->registerIterator(this); 155 this->unregisterIterator(); 156 this->element_ = other.element_; 157 this->registerIterator(); 200 158 201 159 return (*this); … … 268 226 inline operator bool() const 269 227 { 270 return (this->element_ != 0);228 return (this->element_ != NULL); 271 229 } 272 230 … … 301 259 } 302 260 303 protected: 304 ObjectListBaseElement* element_; //!< The element the Iterator points at 305 ObjectListBase* list_; //!< The list wherein the element is 261 private: 262 /** 263 * @brief Registers the Iterator at the list to which it belongs 264 */ 265 inline void registerIterator() 266 { 267 if (this->element_) 268 { 269 this->list_ = this->element_->list_; 270 this->list_->registerIterator(this); 271 } 272 else 273 this->list_ = NULL; 274 } 275 276 /** 277 * @brief Unregisters the Iterator from the list (if any) 278 */ 279 inline void unregisterIterator() 280 { 281 if (this->list_) 282 this->list_->unregisterIterator(this); 283 } 284 285 ObjectListBaseElement* element_; //!< The element the Iterator points at 286 ObjectListBase* list_; //!< The list in which the Iterator registered itself 306 287 }; 307 288 }
Note: See TracChangeset
for help on using the changeset viewer.