Changeset 988 for branches/Carsten_PtrWork/Source/System/FieldContainer/Base/OSGReferenceCountPointer.inl
- Timestamp:
- 10/24/07 19:30:30 (10 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/Carsten_PtrWork/Source/System/FieldContainer/Base/OSGReferenceCountPointer.inl
r976 r988 51 51 52 52 /*-------------------------------------------------------------------------*/ 53 /* InternalRefCountPolicy */53 /* InternalRefCountPolicy<RootObjectT> */ 54 54 /*-------------------------------------------------------------------------*/ 55 55 … … 58 58 InternalRefCountPolicy<RootObjectT>::addRef(RootObjectPtrConstArg rootObjectPtr) 59 59 { 60 addInternalRef(rootObjectPtr);60 rootObjectPtr->addReference(); 61 61 } 62 62 … … 65 65 InternalRefCountPolicy<RootObjectT>::subRef(RootObjectPtrConstArg rootObjectPtr) 66 66 { 67 subInternalRef(rootObjectPtr);67 rootObjectPtr->subReference(); 68 68 } 69 69 … … 76 76 77 77 /*-------------------------------------------------------------------------*/ 78 /* RefCountPolicy */78 /* RefCountPolicy<RootObjectT> */ 79 79 /*-------------------------------------------------------------------------*/ 80 80 … … 83 83 RefCountPolicy<RootObjectT>::addRef(RootObjectPtrConstArg rootObjectPtr) 84 84 { 85 addExternalRef(rootObjectPtr);85 rootObjectPtr->addExternalReference(); 86 86 } 87 87 … … 90 90 RefCountPolicy<RootObjectT>::subRef(RootObjectPtrConstArg rootObjectPtr) 91 91 { 92 subExternalRef(rootObjectPtr);92 rootObjectPtr->subExternalReference(); 93 93 } 94 94 … … 101 101 102 102 /*-------------------------------------------------------------------------*/ 103 /* MTRefCountPolicy< FieldContainer> */104 /*-------------------------------------------------------------------------*/ 105 106 template < >107 inline void 108 MTRefCountPolicy< FieldContainer>::addRef(RootObjectPtrConstArg rootObjectPtr)109 { 110 addExternalRef(rootObjectPtr);111 } 112 113 template < >114 inline void 115 MTRefCountPolicy< FieldContainer>::subRef(RootObjectPtrConstArg rootObjectPtr)116 { 117 subExternalRef(rootObjectPtr);118 } 119 120 template < >121 inline typename RefCountPolicy<FieldContainer>::RootObjectPtr122 MTRefCountPolicy< FieldContainer>::deref(RootObjectPtrConstArg rootObjectPtr)103 /* MTRefCountPolicy<RootObjectT> */ 104 /*-------------------------------------------------------------------------*/ 105 106 template <class RootObjectT> 107 inline void 108 MTRefCountPolicy<RootObjectT>::addRef(RootObjectPtrConstArg rootObjectPtr) 109 { 110 rootObjectPtr->addExternalReference(); 111 } 112 113 template <class RootObjectT> 114 inline void 115 MTRefCountPolicy<RootObjectT>::subRef(RootObjectPtrConstArg rootObjectPtr) 116 { 117 rootObjectPtr->subExternalReference(); 118 } 119 120 template <class RootObjectT> 121 inline typename MTRefCountPolicy<RootObjectT>::RootObjectPtr 122 MTRefCountPolicy<RootObjectT>::deref(RootObjectPtrConstArg rootObjectPtr) 123 123 { 124 124 return rootObjectPtr->getAspectPtr(Thread::getCurrentAspect()); … … 129 129 /*-------------------------------------------------------------------------*/ 130 130 131 template <>132 131 inline void 133 132 MTRefCountPolicy<FieldBundle>::addRef(RootObjectPtrConstArg rootObjectPtr) 134 133 { 135 addExternalRef(rootObjectPtr); 136 } 137 138 template <> 134 // rootObjectPtr->addExternalReference(); 135 } 136 139 137 inline void 140 138 MTRefCountPolicy<FieldBundle>::subRef(RootObjectPtrConstArg rootObjectPtr) 141 139 { 142 subExternalRef(rootObjectPtr); 143 } 144 145 template <> 146 inline typename RefCountPolicy<FieldContainer>::RootObjectPtr 140 // rootObjectPtr->subExternalReference(); 141 } 142 143 inline MTRefCountPolicy<FieldBundle>::RootObjectPtr 147 144 MTRefCountPolicy<FieldBundle>::deref(RootObjectPtrConstArg rootObjectPtr) 148 145 { … … 151 148 152 149 /*-------------------------------------------------------------------------*/ 153 /* WeakRefCountPolicy */150 /* WeakRefCountPolicy<RootObjectT> */ 154 151 /*-------------------------------------------------------------------------*/ 155 152 … … 158 155 WeakRefCountPolicy<RootObjectT>::addRef(RootObjectPtrConstArg rootObjectPtr) 159 156 { 160 addWeakRef(rootObjectPtr);157 rootObjectPtr->addWeakReference(); 161 158 } 162 159 … … 165 162 WeakRefCountPolicy<RootObjectT>::subRef(RootObjectPtrConstArg rootObjectPtr) 166 163 { 167 subWeakRef(rootObjectPtr);168 } 169 170 template <class RootObjectT> 171 inline typename RefCountPolicy<RootObjectT>::RootObjectPtr164 rootObjectPtr->subWeakReference(); 165 } 166 167 template <class RootObjectT> 168 inline typename WeakRefCountPolicy<RootObjectT>::RootObjectPtr 172 169 WeakRefCountPolicy<RootObjectT>::deref(RootObjectPtrConstArg rootObjectPtr) 173 170 { … … 176 173 177 174 /*-------------------------------------------------------------------------*/ 178 /* ReferenceCountPointer< ContainerT, RefCountPolicyT> */175 /* ReferenceCountPointer<ObjectT, RefCountPolicyT> */ 179 176 /*-------------------------------------------------------------------------*/ 180 177 … … 182 179 /* Internal Helpers */ 183 180 184 template <class ContainerT, class RefCountPolicyT, class RootObjectT>181 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 185 182 inline typename 186 ReferenceCountPointer< ContainerT,183 ReferenceCountPointer<ObjectT, 187 184 RefCountPolicyT, 188 185 RootObjectT >::RootObjectPtr 189 ReferenceCountPointer< ContainerT,186 ReferenceCountPointer<ObjectT, 190 187 RefCountPolicyT, 191 188 RootObjectT >::castPtrUp(ObjectPtrConstArg objectPtr) … … 194 191 } 195 192 196 template <class ContainerT, class RefCountPolicyT, class RootObjectT>193 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 197 194 inline typename 198 ReferenceCountPointer< ContainerT,195 ReferenceCountPointer<ObjectT, 199 196 RefCountPolicyT, 200 197 RootObjectT >::ObjectPtr 201 ReferenceCountPointer< ContainerT,198 ReferenceCountPointer<ObjectT, 202 199 RefCountPolicyT, 203 200 RootObjectT >::castPtrDown( 204 201 RootObjectPtrConstArg rootObjectPtr) 205 202 { 206 return static_cast< ContainerPtr>(static_cast<void *>(rootObjectPtr));207 } 208 209 template <class ContainerT, class RefCountPolicyT, class RootObjectT>210 inline void 211 ReferenceCountPointer< ContainerT,203 return static_cast<ObjectPtr>(static_cast<void *>(rootObjectPtr)); 204 } 205 206 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 207 inline void 208 ReferenceCountPointer<ObjectT, 212 209 RefCountPolicyT, 213 210 RootObjectT >::internalSet( … … 223 220 /* Constructors */ 224 221 225 template <class ContainerT, class RefCountPolicyT, class RootObjectT>222 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 226 223 inline 227 ReferenceCountPointer< ContainerT,224 ReferenceCountPointer<ObjectT, 228 225 RefCountPolicyT, 229 226 RootObjectT >::ReferenceCountPointer(void) … … 232 229 } 233 230 234 template <class ContainerT, class RefCountPolicyT, class RootObjectT>231 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 235 232 inline 236 ReferenceCountPointer< ContainerT,233 ReferenceCountPointer<ObjectT, 237 234 RefCountPolicyT, 238 235 RootObjectT >::ReferenceCountPointer( … … 243 240 } 244 241 245 template <class ContainerT, class RefCountPolicyT, class RootObjectT>242 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 246 243 inline 247 ReferenceCountPointer< ContainerT,244 ReferenceCountPointer<ObjectT, 248 245 RefCountPolicyT, 249 246 RootObjectT >::ReferenceCountPointer( … … 254 251 } 255 252 256 template <class ContainerT, class RefCountPolicyT, class RootObjectT>257 template <class Other ContainerT, class OtherRefCountPolicyT >253 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 254 template <class OtherObjectT, class OtherRefCountPolicyT > 258 255 inline 259 ReferenceCountPointer< ContainerT,256 ReferenceCountPointer<ObjectT, 260 257 RefCountPolicyT, 261 258 RootObjectT >::ReferenceCountPointer( 262 ReferenceCountPointer<Other ContainerT,259 ReferenceCountPointer<OtherObjectT, 263 260 OtherRefCountPolicyT, 264 261 RootObjectT > const &refPtr) 265 : _ pContainer(NullFC)266 { 267 // // This requires ContainerT and OtherContainerT to be a complete types262 : _rootObjectPtr(NullFC) 263 { 264 // // This requires ObjectT and OtherObjectT to be a complete types 268 265 // BOOST_STATIC_ASSERT(( 269 266 // boost::is_convertible< 270 267 // typename ReferenceCountPointer< 271 // Other ContainerT,268 // OtherObjectT, 272 269 // OtherRefCountPolicyT>::ContainerPtr, 273 270 // ContainerPtr >::value)); 274 271 275 internalSet(Self::castPtrUp(refPtr.get()); 272 internalSet(Self::castPtrUp(refPtr.get())); 273 } 274 275 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 276 template <class OtherObjectT, class OtherRefCountPolicyT > 277 inline 278 ReferenceCountPointer<ObjectT, 279 RefCountPolicyT, 280 RootObjectT >::ReferenceCountPointer( 281 ReferenceCountPointer<OtherObjectT, 282 OtherRefCountPolicyT, 283 RootObject > const &refPtr, 284 detail::StaticCastTag ) 285 286 : _rootObjectPtr(NullFC) 287 { 288 internalSet(Self::castPtrUp(static_cast<ObjectPtr>(refPtr.get()))); 289 } 290 291 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 292 template <class OtherObjectT, class OtherRefCountPolicyT > 293 inline 294 ReferenceCountPointer<ObjectT, 295 RefCountPolicyT, 296 RootObjectT >::ReferenceCountPointer( 297 ReferenceCountPointer<OtherObjectT, 298 OtherRefCountPolicyT, 299 RootObject > const &refPtr, 300 detail::ConstCastTag ) 301 302 : _rootObjectPtr(NullFC) 303 { 304 internalSet(Self::castPtrUp(const_cast<ObjectPtr>(refPtr.get()))); 305 } 306 307 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 308 template <class OtherObjectT, class OtherRefCountPolicyT > 309 inline 310 ReferenceCountPointer<ObjectT, 311 RefCountPolicyT, 312 RootObjectT >::ReferenceCountPointer( 313 ReferenceCountPointer<OtherObjectT, 314 OtherRefCountPolicyT, 315 RootObject > const &refPtr, 316 detail::DynamicCastTag ) 317 318 : _rootObjectPtr(NullFC) 319 { 320 internalSet(Self::castPtrUp(dynamic_cast<ObjectPtr>(refPtr.get()))); 276 321 } 277 322 … … 279 324 /* Destructor */ 280 325 281 template <class ContainerT, class RefCountPolicyT, class RootObjectT>326 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 282 327 inline 283 ReferenceCountPointer< ContainerT,328 ReferenceCountPointer<ObjectT, 284 329 RefCountPolicyT, 285 330 RootObjectT >::~ReferenceCountPointer(void) … … 291 336 /* Assignment */ 292 337 293 template <class ContainerT, class RefCountPolicyT, class RootObjectT> 294 inline typename ReferenceCountContainer<ContainerT, RefCountPolicyT>::Self & 295 ReferenceCountPointer<ContainerT, 296 RefCountPolicyT, 297 RootObjectT >::operator=(Self const &other) 298 { 299 internalSet(other._rootObjectPtr); 300 301 return *this; 302 } 303 304 template <class ContainerT, class RefCountPolicyT, class RootObjectT> 338 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 305 339 inline typename 306 ReferenceCountPointer< ContainerT,340 ReferenceCountPointer<ObjectT, 307 341 RefCountPolicyT, 308 342 RootObjectT >::Self & 309 ReferenceCountPointer<ContainerT, 343 ReferenceCountPointer<ObjectT, 344 RefCountPolicyT, 345 RootObjectT >::operator=(Self const &other) 346 { 347 internalSet(other._rootObjectPtr); 348 349 return *this; 350 } 351 352 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 353 inline typename 354 ReferenceCountPointer<ObjectT, 355 RefCountPolicyT, 356 RootObjectT >::Self & 357 ReferenceCountPointer<ObjectT, 310 358 RefCountPolicyT, 311 359 RootObjectT >::operator=( … … 317 365 } 318 366 319 template <class ContainerT, class RefCountPolicyT, class RootObjectT>320 template <class Other ContainerT, class OtherRefCountPolicyT >367 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 368 template <class OtherObjectT, class OtherRefCountPolicyT > 321 369 inline typename 322 ReferenceCountPointer< ContainerT,370 ReferenceCountPointer<ObjectT, 323 371 RefCountPolicyT, 324 RootObjectT > 325 ReferenceCountPointer< ContainerT,372 RootObjectT >::Self & 373 ReferenceCountPointer<ObjectT, 326 374 RefCountPolicyT, 327 375 RootObjectT >::operator=( 328 ReferenceCountPointer<Other ContainerT,329 OtherRefCountPolicy ,330 RootObjectT > const &refPtr)331 { 332 // // This requires ContainerT and OtherContainerT to be a complete types376 ReferenceCountPointer<OtherObjectT, 377 OtherRefCountPolicyT, 378 RootObjectT > const &refPtr) 379 { 380 // // This requires ObjectT and OtherObjectT to be a complete types 333 381 // BOOST_STATIC_ASSERT(( 334 382 // boost::is_convertible< 335 383 // typename ReferenceCountPointer< 336 // Other ContainerT,384 // OtherObjectT, 337 385 // OtherRefCountPolicyT>::ContainerPtr, 338 386 // ContainerPtr >::value)); … … 346 394 /* Conversion */ 347 395 348 template <class ContainerT, class RefCountPolicyT, class RootObjectT>396 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 349 397 inline 350 ReferenceCountPointer< ContainerT,398 ReferenceCountPointer<ObjectT, 351 399 RefCountPolicyT, 352 400 RootObjectT >::operator ObjectPtr(void) const … … 358 406 /* Access */ 359 407 360 template <class ContainerT, class RefCountPolicyT, class RootObjectT>408 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 361 409 inline typename 362 ReferenceCountPointer< ContainerT,410 ReferenceCountPointer<ObjectT, 363 411 RefCountPolicyT, 364 412 RootObjectT >::ObjectPtr 365 ReferenceCountPointer< ContainerT,413 ReferenceCountPointer<ObjectT, 366 414 RefCountPolicyT, 367 415 RootObjectT >::operator->(void) const … … 370 418 } 371 419 372 template <class ContainerT, class RefCountPolicyT, class RootObjectT>420 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 373 421 inline typename 374 ReferenceCountPointer< ContainerT,422 ReferenceCountPointer<ObjectT, 375 423 RefCountPolicyT, 376 424 RootObjectT >::Object & 377 ReferenceCountPointer< ContainerT,425 ReferenceCountPointer<ObjectT, 378 426 RefCountPolicyT, 379 427 RootObjectT >::operator*(void) const … … 382 430 } 383 431 384 template <class ContainerT, class RefCountPolicyT, class RootObjectT>432 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 385 433 inline typename 386 ReferenceCountPointer< ContainerT,434 ReferenceCountPointer<ObjectT, 387 435 RefCountPolicyT, 388 436 RootObjectT >::ObjectPtr 389 ReferenceCountPointer< ContainerT,437 ReferenceCountPointer<ObjectT, 390 438 RefCountPolicyT, 391 439 RootObjectT >::get(void) const … … 394 442 } 395 443 396 template <class ContainerT, class RefCountPolicyT, class RootObjectT>397 inline void 398 ReferenceCountPointer< ContainerT,444 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 445 inline void 446 ReferenceCountPointer<ObjectT, 399 447 RefCountPolicyT, 400 448 RootObjectT >::set( 401 449 ObjectPtrConstArg objectPtr) 402 450 { 403 _ objectPtr = Self::castPtrUp(objectPtr);404 } 405 406 template <class ContainerT, class RefCountPolicyT, class RootObjectT>407 inline void 408 ReferenceCountPointer< ContainerT,451 _rootObjectPtr = Self::castPtrUp(objectPtr); 452 } 453 454 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 455 inline void 456 ReferenceCountPointer<ObjectT, 409 457 RefCountPolicyT, 410 458 RootObjectT >::swap(Self &other) … … 416 464 /* Comparison */ 417 465 418 template <class ContainerT, class RefCountPolicyT, class RootObjectT>466 template <class ObjectT, class RefCountPolicyT, class RootObjectT> 419 467 inline bool 420 operator!(ReferenceCountPointer< ContainerT,468 operator!(ReferenceCountPointer<ObjectT, 421 469 RefCountPolicyT, 422 470 RootObjectT > const &refPtr) … … 425 473 } 426 474 427 template <class LHS ContainerT, class LHSRefCountPolicyT,428 class RHS ContainerT, class RHSRefCountPolicyT,475 template <class LHSObjectT, class LHSRefCountPolicyT, 476 class RHSObjectT, class RHSRefCountPolicyT, 429 477 class RootObjectT > 430 478 inline bool 431 operator==(ReferenceCountPointer<LHS ContainerT,479 operator==(ReferenceCountPointer<LHSObjectT, 432 480 LHSRefCountPolicyT, 433 481 RootObjectT > const &lhs, 434 ReferenceCountPointer<RHS ContainerT,482 ReferenceCountPointer<RHSObjectT, 435 483 RHSRefCountPolicyT, 436 484 RootObjectT > const &rhs) … … 439 487 } 440 488 441 template <class LHS ContainerT, class LHSRefCountPolicyT,442 class RHS ContainerT, class RHSRefCountPolicyT,489 template <class LHSObjectT, class LHSRefCountPolicyT, 490 class RHSObjectT, class RHSRefCountPolicyT, 443 491 class RootObjectT > 444 492 inline bool 445 operator!=(ReferenceCountPointer<LHS ContainerT,493 operator!=(ReferenceCountPointer<LHSObjectT, 446 494 LHSRefCountPolicyT, 447 495 RootObjectT > const &lhs, 448 ReferenceCountPointer<RHS ContainerT,496 ReferenceCountPointer<RHSObjectT, 449 497 RHSRefCountPolicyT, 450 498 RootObjectT > const &rhs) … … 453 501 } 454 502 455 template <class LHS ContainerT, class LHSRefCountPolicyT,456 class RHS ContainerT, class RHSRefCountPolicyT,503 template <class LHSObjectT, class LHSRefCountPolicyT, 504 class RHSObjectT, class RHSRefCountPolicyT, 457 505 class RootObjectT > 458 506 inline bool 459 operator<(ReferenceCountPointer<LHS ContainerT,507 operator<(ReferenceCountPointer<LHSObjectT, 460 508 LHSRefCountPolicyT, 461 RootObject > const &lhs,462 ReferenceCountPointer<RHS ContainerT,509 RootObjectT > const &lhs, 510 ReferenceCountPointer<RHSObjectT, 463 511 RHSRefCountPolicyT, 464 512 RootObjectT > const &rhs) 465 513 { 466 return std::less (static_cast<void *>(lhs.get()),467 static_cast<void *>(rhs.get()) );514 return std::less<void *>()(static_cast<void *>(lhs.get()), 515 static_cast<void *>(rhs.get()) ); 468 516 } 469 517 470 518 OSG_END_NAMESPACE 519 520 namespace boost 521 { 522 523 template <class TargetObjectT, class SourceObjectT, 524 class RefCountPolicyT, class RootObjectT > 525 inline OSG::ReferenceCountPointer<TargetObjectT, RefCountPolicyT, RootObjectT> 526 static_pointer_cast(OSG::ReferenceCountPointer<SourceObjectT, 527 RefCountPolicyT, 528 RootObjectT > const &source) 529 { 530 return OSG::ReferenceCountPointer<TargetObjectT, 531 RefCountPolicyT, 532 RootObjectT >( 533 source.get(), OSG::detail::StaticCastTag()); 534 } 535 536 template <class TargetObjectT, class SourceObjectT, 537 class RefCountPolicyT, class RootObjectT > 538 inline OSG::ReferenceCountPointer<TargetObjectT, RefCountPolicyT, RootObjectT> 539 const_pointer_cast(OSG::ReferenceCountPointer<SourceObjectT, 540 RefCountPolicyT, 541 RootObjectT > const &source) 542 { 543 return OSG::ReferenceCountPointer<TargetObjectT, 544 RefCountPolicyT, 545 RootObjectT >( 546 source.get(), OSG::detail::ConstCastTag()); 547 } 548 549 template <class TargetObjectT, class SourceObjectT, 550 class RefCountPolicyT, class RootObjectT > 551 inline OSG::ReferenceCountPointer<TargetObjectT, RefCountPolicyT, RootObjectT> 552 dynamic_pointer_cast(OSG::ReferenceCountPointer<SourceObjectT, 553 RefCountPolicyT, 554 RootObjectT > const &source) 555 { 556 return OSG::ReferenceCountPointer<TargetObjectT, 557 RefCountPolicyT, 558 RootObjectT >( 559 source.get(), OSG::detail::DynamicCastTag()); 560 } 561 562 } // namespace boost
