Changeset 1039 for branches/Carsten_PtrWork2/Source/System/FieldContainer/Base/OSGReferenceCountPointer.inl
- Timestamp:
- 01/16/08 16:07:40 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/Carsten_PtrWork2/Source/System/FieldContainer/Base/OSGReferenceCountPointer.inl
r1033 r1039 51 51 52 52 /*-------------------------------------------------------------------------*/ 53 /* InternalRefCountPolicy<BaseObjectT> */ 54 /*-------------------------------------------------------------------------*/ 55 56 template <class BaseObjectT> 57 inline void 58 InternalRefCountPolicy<BaseObjectT>::addRef(BaseObjectPtrConstArg baseObjectPtr) 59 { 60 if(baseObjectPtr != NULL) 61 baseObjectPtr->addReference(); 62 } 63 64 template <class BaseObjectT> 65 inline void 66 InternalRefCountPolicy<BaseObjectT>::subRef(BaseObjectPtrConstArg baseObjectPtr) 67 { 68 if(baseObjectPtr != NULL) 69 baseObjectPtr->subReference(); 70 } 71 72 template <class BaseObjectT> 73 inline typename InternalRefCountPolicy<BaseObjectT>::BaseObjectPtr 74 InternalRefCountPolicy<BaseObjectT>::deref(BaseObjectPtrConstArg baseObjectPtr) 75 { 76 return baseObjectPtr; 77 } 78 79 /*-------------------------------------------------------------------------*/ 80 /* RefCountPolicy<BaseObjectT> */ 81 /*-------------------------------------------------------------------------*/ 82 83 template <class BaseObjectT> 84 inline void 85 RefCountPolicy<BaseObjectT>::addRef(BaseObjectPtrConstArg baseObjectPtr) 86 { 87 if(baseObjectPtr != NULL) 88 baseObjectPtr->addExternalReference(); 89 } 90 91 template <class BaseObjectT> 92 inline void 93 RefCountPolicy<BaseObjectT>::subRef(BaseObjectPtrConstArg baseObjectPtr) 94 { 95 if(baseObjectPtr != NULL) 96 baseObjectPtr->subExternalReference(); 97 } 98 99 template <class BaseObjectT> 100 inline typename RefCountPolicy<BaseObjectT>::BaseObjectPtr 101 RefCountPolicy<BaseObjectT>::deref(BaseObjectPtrConstArg baseObjectPtr) 102 { 103 return baseObjectPtr; 104 } 105 106 /*-------------------------------------------------------------------------*/ 107 /* MTRefCountPolicy<BaseObjectT> */ 108 /*-------------------------------------------------------------------------*/ 109 110 template <class BaseObjectT> 111 inline void 112 MTRefCountPolicy<BaseObjectT>::addRef(BaseObjectPtrConstArg baseObjectPtr) 113 { 114 if(baseObjectPtr != NULL) 115 baseObjectPtr->addExternalReference(); 116 } 117 118 template <class BaseObjectT> 119 inline void 120 MTRefCountPolicy<BaseObjectT>::subRef(BaseObjectPtrConstArg baseObjectPtr) 121 { 122 if(baseObjectPtr != NULL) 123 baseObjectPtr->subExternalReference(); 124 } 125 126 template <class BaseObjectT> 127 inline typename MTRefCountPolicy<BaseObjectT>::BaseObjectPtr 128 MTRefCountPolicy<BaseObjectT>::deref(BaseObjectPtrConstArg baseObjectPtr) 129 { 130 BaseObjectPtr retVal = NullFC; 131 132 if(baseObjectPtr != NullFC) 133 retVal = baseObjectPtr->getAspectPtr(Thread::getCurrentAspect()); 134 135 return retVal; 136 } 137 138 /*-------------------------------------------------------------------------*/ 139 /* MTRefCountPolicy<FieldBundle> */ 140 /*-------------------------------------------------------------------------*/ 141 142 inline void 143 MTRefCountPolicy<FieldBundle>::addRef(BaseObjectPtrConstArg baseObjectPtr) 144 { 145 // if(baseObjectPtr != NULL) 146 // baseObjectPtr->addExternalReference(); 147 } 148 149 inline void 150 MTRefCountPolicy<FieldBundle>::subRef(BaseObjectPtrConstArg baseObjectPtr) 151 { 152 // if(baseObjectPtr != NULL) 153 // baseObjectPtr->subExternalReference(); 154 } 155 156 inline MTRefCountPolicy<FieldBundle>::BaseObjectPtr 157 MTRefCountPolicy<FieldBundle>::deref(BaseObjectPtrConstArg baseObjectPtr) 158 { 159 return baseObjectPtr; 160 } 161 162 /*-------------------------------------------------------------------------*/ 163 /* WeakRefCountPolicy<BaseObjectT> */ 164 /*-------------------------------------------------------------------------*/ 165 166 template <class BaseObjectT> 167 inline void 168 WeakRefCountPolicy<BaseObjectT>::addRef(BaseObjectPtrConstArg baseObjectPtr) 169 { 170 if(baseObjectPtr != NULL) 171 baseObjectPtr->addWeakReference(); 172 } 173 174 template <class BaseObjectT> 175 inline void 176 WeakRefCountPolicy<BaseObjectT>::subRef(BaseObjectPtrConstArg baseObjectPtr) 177 { 178 if(baseObjectPtr != NULL) 179 baseObjectPtr->subWeakReference(); 180 } 181 182 template <class BaseObjectT> 183 inline typename WeakRefCountPolicy<BaseObjectT>::BaseObjectPtr 184 WeakRefCountPolicy<BaseObjectT>::deref(BaseObjectPtrConstArg baseObjectPtr) 185 { 186 return baseObjectPtr; 187 } 188 189 /*-------------------------------------------------------------------------*/ 190 /* ReferenceCountPointer<ObjectT, RefCountPolicyT> */ 53 /* ReferenceCountPointer<ObjectT, RefCountPolicyT> */ 191 54 /*-------------------------------------------------------------------------*/ 192 55 … … 227 90 { 228 91 RefCountPolicy::addRef( baseObjectPtr); 229 RefCountPolicy::subRef(_baseObj ectPtr);230 231 _baseObj ectPtr = baseObjectPtr;92 RefCountPolicy::subRef(_baseObjPtr); 93 94 _baseObjPtr = baseObjectPtr; 232 95 } 233 96 … … 240 103 RefCountPolicyT, 241 104 BaseObjectT >::ReferenceCountPointer(void) 242 : _baseObj ectPtr(NullFC)105 : _baseObjPtr(NullFC) 243 106 { 244 107 } … … 250 113 BaseObjectT >::ReferenceCountPointer( 251 114 Self const &other) 252 : _baseObj ectPtr(NullFC)253 { 254 internalSet( other._baseObjectPtr);115 : _baseObjPtr(NullFC) 116 { 117 internalSet(Self::castPtrUp(other.get())); 255 118 } 256 119 … … 261 124 BaseObjectT >::ReferenceCountPointer( 262 125 ObjectPtrConstArg objectPtr) 263 : _baseObj ectPtr(NullFC)126 : _baseObjPtr(NullFC) 264 127 { 265 128 internalSet(Self::castPtrUp(objectPtr)); … … 275 138 OtherRefCountPolicyT, 276 139 BaseObjectT > const &refPtr) 277 : _baseObj ectPtr(NullFC)140 : _baseObjPtr(NullFC) 278 141 { 279 142 internalSet(Self::castPtrUp(refPtr.get())); 143 } 144 145 template <class ObjectT, class RefCountPolicyT, class BaseObjectT> 146 template <class OtherObjectT > 147 inline 148 ReferenceCountPointer<ObjectT, 149 RefCountPolicyT, 150 BaseObjectT >::ReferenceCountPointer( 151 TransitPointer<OtherObjectT, BaseObjectT> const &transPtr) 152 153 : _baseObjPtr(NullFC) 154 { 155 internalSet(Self::castPtrUp(static_cast<ObjectPtr>(transPtr.getCPtr()))); 156 157 const_cast<TransitPointer<OtherObjectT, BaseObjectT> &>(transPtr).release(); 280 158 } 281 159 … … 291 169 detail::StaticCastTag ) 292 170 293 : _baseObj ectPtr(NullFC)171 : _baseObjPtr(NullFC) 294 172 { 295 173 internalSet(Self::castPtrUp(static_cast<ObjectPtr>(refPtr.get()))); … … 307 185 detail::ConstCastTag ) 308 186 309 : _baseObj ectPtr(NullFC)187 : _baseObjPtr(NullFC) 310 188 { 311 189 internalSet(Self::castPtrUp(const_cast<ObjectPtr>(refPtr.get()))); … … 323 201 detail::DynamicCastTag ) 324 202 325 : _baseObj ectPtr(NullFC)203 : _baseObjPtr(NullFC) 326 204 { 327 205 internalSet(Self::castPtrUp(dynamic_cast<ObjectPtr>(refPtr.get()))); … … 337 215 BaseObjectT >::~ReferenceCountPointer(void) 338 216 { 217 #ifdef OSG_DEBUG 218 if((GlobalSystemState == Shutdown) && (_baseObjPtr != NullFC)) 219 { 220 FWARNING(("ReferenceCountPointer<>::~ReferenceCountPointer (this=%p, _baseObjPtr=%p) [%s]: " 221 "Pointer is live after OpenSG shutdown, can not destroy object.\n", this, _baseObjPtr, get()->getType().getCName())); 222 223 OSG_ASSERT(_baseObjPtr == NullFC); // temporary, to help debugging 224 } 225 else 226 { 227 internalSet(NullFC); 228 } 229 #else 339 230 internalSet(NullFC); 231 #endif 340 232 } 341 233 … … 352 244 BaseObjectT >::operator=(Self const &other) 353 245 { 354 internalSet( other._baseObjectPtr);246 internalSet(Self::castPtrUp(other.get())); 355 247 356 248 return *this; … … 390 282 } 391 283 284 template <class ObjectT, class RefCountPolicyT, class BaseObjectT> 285 template <class OtherObjectT > 286 typename 287 ReferenceCountPointer<ObjectT, 288 RefCountPolicyT, 289 BaseObjectT >::Self & 290 ReferenceCountPointer<ObjectT, 291 RefCountPolicyT, 292 BaseObjectT >::operator=( 293 TransitPointer<OtherObjectT, BaseObject> const &transPtr) 294 { 295 internalSet(Self::castPtrUp(static_cast<ObjectPtr>(transPtr.getCPtr()))); 296 297 const_cast<TransitPointer<OtherObjectT, BaseObject> &>(transPtr).release(); 298 299 return *this; 300 } 301 392 302 /*-------------------------------------------------------------------------*/ 393 303 /* Conversion */ … … 399 309 BaseObjectT >::operator ObjectPtr(void) const 400 310 { 401 return Self::castPtrDown(RefCountPolicy::deref(_baseObj ectPtr));311 return Self::castPtrDown(RefCountPolicy::deref(_baseObjPtr)); 402 312 } 403 313 … … 414 324 BaseObjectT >::operator->(void) const 415 325 { 416 return Self::castPtrDown(RefCountPolicy::deref(_baseObj ectPtr));326 return Self::castPtrDown(RefCountPolicy::deref(_baseObjPtr)); 417 327 } 418 328 … … 426 336 BaseObjectT >::operator*(void) const 427 337 { 428 return *(Self::castPtrDown(RefCountPolicy::deref(_baseObj ectPtr)));338 return *(Self::castPtrDown(RefCountPolicy::deref(_baseObjPtr))); 429 339 } 430 340 … … 438 348 BaseObjectT >::get(void) const 439 349 { 440 return Self::castPtrDown(RefCountPolicy::deref(_baseObj ectPtr));350 return Self::castPtrDown(RefCountPolicy::deref(_baseObjPtr)); 441 351 } 442 352 … … 448 358 ObjectPtrConstArg objectPtr) 449 359 { 450 _baseObjectPtr = Self::castPtrUp(objectPtr);360 internalSet(Self::castPtrUp(objectPtr)); 451 361 } 452 362 … … 457 367 BaseObjectT >::swap(Self &other) 458 368 { 459 std::swap(_baseObj ectPtr, other._baseObjectPtr);369 std::swap(_baseObjPtr, other._baseObjPtr); 460 370 } 461 371
