#include <OSGChangeList.h>
Inheritance diagram for osg::ChangeList:

Helper | |
| *void | clearAll (void) |
| bool | merge (const ChangeList &list) |
| void | setAspect (UInt32 uiAspectId) |
| void | setReadOnly (bool bReadOnly) |
| static void | setReadWriteDefault (bool bReadWrite=true) |
Member | |
| *bool | _bReadOnly |
| UInt32 | _uiAspectId |
| Mode | _listMode |
| std::vector< ChangeEntry > | _vChangedFieldContainers |
| std::vector< IdRefEntry > | _vAddRefdFieldContainers |
| std::vector< IdRefEntry > | _vSubRefdFieldContainers |
| std::vector< IdRefEntry > | _vCreatedFieldContainers |
| std::vector< IdRefEntry > | _vDestroyedFieldContainers |
| static bool | _bReadWriteDefault = false |
Public Types | |
| typedef std::pair< UInt32, BitVector > | ChangeEntry |
| typedef FieldContainerPtr | RefEntry |
| typedef UInt32 | IdRefEntry |
| typedef std::vector< ChangeEntry >::size_type | changed_size_type |
| typedef std::vector< ChangeEntry >::const_iterator | changed_const_iterator |
| typedef std::vector< IdRefEntry >::size_type | refd_size_type |
| typedef std::vector< IdRefEntry >::const_iterator | refd_const_iterator |
| typedef std::vector< IdRefEntry >::size_type | idrefd_size_type |
| typedef std::vector< IdRefEntry >::const_iterator | idrefd_const_iterator |
| enum | Mode { Private, Public } |
Public Member Functions | |
Constructors | |
| * | ChangeList (void) |
Destructor | |
| *virtual | ~ChangeList (void) |
Get | |
| *changed_size_type | sizeChanged (void) |
| changed_const_iterator | beginChanged (void) const |
| changed_const_iterator | endChanged (void) const |
| refd_size_type | sizeAddRefd (void) |
| refd_const_iterator | beginAddRefd (void) const |
| refd_const_iterator | endAddRefd (void) const |
| refd_size_type | sizeSubRefd (void) |
| refd_const_iterator | beginSubRefd (void) const |
| refd_const_iterator | endSubRefd (void) const |
| idrefd_const_iterator | beginCreated (void) const |
| idrefd_const_iterator | endCreated (void) const |
| idrefd_size_type | sizeCreated (void) const |
| idrefd_const_iterator | beginDestroyed (void) const |
| idrefd_const_iterator | endDestroyed (void) const |
| idrefd_size_type | sizeDestroyed (void) const |
Add | |
| *void | addChanged (const FieldContainerPtr &pFieldContainer, BitVector bvWhichField) |
| void | addAddRefd (const FieldContainerPtr &pFieldContainer) |
| void | addSubRefd (const FieldContainerPtr &pFieldContainer) |
| void | addCreated (const UInt32 uiContainerId) |
| void | addDestroyed (const UInt32 uiContainerId) |
Apply | |
| *void | applyTo (UInt32 uiAspectId) |
| void | applyToCurrent (void) |
| void | apply (void) |
| void | applyAndClear (void) |
Dump | |
| *void | dump (void) |
Reference Counting | |
| *void | addRef (void) |
| void | subRef (void) |
| Int32 | getRefCount (void) |
Protected Types | |
| typedef MemoryObject | Inherited |
Private Member Functions | |
| ChangeList (const ChangeList &source) | |
| prohibit default function (move to 'public' if needed) | |
| void | operator= (const ChangeList &source) |
| prohibit default function (move to 'public' if needed) | |
Friends | |
| class | Thread |
Definition at line 66 of file OSGChangeList.h.
|
|
Definition at line 80 of file OSGChangeList.h. |
|
|
Definition at line 81 of file OSGChangeList.h. |
|
|
Definition at line 82 of file OSGChangeList.h. |
|
|
Definition at line 84 of file OSGChangeList.h. |
|
|
Definition at line 85 of file OSGChangeList.h. |
|
|
Definition at line 90 of file OSGChangeList.h. |
|
|
Definition at line 91 of file OSGChangeList.h. |
|
|
Definition at line 93 of file OSGChangeList.h. |
|
|
Definition at line 94 of file OSGChangeList.h. |
|
|
Definition at line 190 of file OSGChangeList.h. |
|
|
Definition at line 72 of file OSGChangeList.h.
|
|
|
Definition at line 67 of file OSGChangeList.cpp. 00067 : 00068 Inherited ( ), 00069 _bReadOnly (!_bReadWriteDefault), 00070 _uiAspectId (Thread::getAspect()), 00071 _listMode (Public ), 00072 _vChangedFieldContainers ( ), 00073 _vAddRefdFieldContainers ( ), 00074 _vSubRefdFieldContainers ( ), 00075 _vCreatedFieldContainers ( ), 00076 _vDestroyedFieldContainers( ) 00077 { 00078 // Aspect::addList(this, _aspectId); 00079 }
|
|
|
Definition at line 84 of file OSGChangeList.cpp.
|
|
|
|
|
|
Definition at line 91 of file OSGChangeList.cpp. References _vChangedFieldContainers. 00092 { 00093 return _vChangedFieldContainers.size(); 00094 }
|
|
|
Definition at line 96 of file OSGChangeList.cpp. References _vChangedFieldContainers. Referenced by merge(), and osg::RemoteAspect::sendSync(). 00097 { 00098 return _vChangedFieldContainers.begin(); 00099 }
|
|
|
Definition at line 101 of file OSGChangeList.cpp. References _vChangedFieldContainers. Referenced by merge(), and osg::RemoteAspect::sendSync(). 00102 { 00103 return _vChangedFieldContainers.end(); 00104 }
|
|
|
Definition at line 106 of file OSGChangeList.cpp. References _vAddRefdFieldContainers. 00107 { 00108 return _vAddRefdFieldContainers.size(); 00109 }
|
|
|
Definition at line 111 of file OSGChangeList.cpp. References _vAddRefdFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00112 { 00113 return _vAddRefdFieldContainers.begin(); 00114 }
|
|
|
Definition at line 116 of file OSGChangeList.cpp. References _vAddRefdFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00117 { 00118 return _vAddRefdFieldContainers.end(); 00119 }
|
|
|
Definition at line 121 of file OSGChangeList.cpp. References _vSubRefdFieldContainers. 00122 { 00123 return _vSubRefdFieldContainers.size(); 00124 }
|
|
|
Definition at line 126 of file OSGChangeList.cpp. References _vSubRefdFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00127 { 00128 return _vSubRefdFieldContainers.begin(); 00129 }
|
|
|
Definition at line 131 of file OSGChangeList.cpp. References _vSubRefdFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00132 { 00133 return _vSubRefdFieldContainers.end(); 00134 }
|
|
|
Definition at line 136 of file OSGChangeList.cpp. References _vCreatedFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00137 { 00138 return _vCreatedFieldContainers.begin(); 00139 }
|
|
|
Definition at line 141 of file OSGChangeList.cpp. References _vCreatedFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00142 { 00143 return _vCreatedFieldContainers.end(); 00144 }
|
|
|
Definition at line 146 of file OSGChangeList.cpp. References _vCreatedFieldContainers. 00147 { 00148 return _vCreatedFieldContainers.size(); 00149 }
|
|
|
Definition at line 151 of file OSGChangeList.cpp. References _vDestroyedFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00152 { 00153 return _vDestroyedFieldContainers.begin(); 00154 }
|
|
|
Definition at line 156 of file OSGChangeList.cpp. References _vDestroyedFieldContainers. Referenced by merge(), osg::RemoteAspect::sendSync(), and osg::RemoteAspect::storeChangeList(). 00157 { 00158 return _vDestroyedFieldContainers.end(); 00159 }
|
|
|
Definition at line 161 of file OSGChangeList.cpp. References _vDestroyedFieldContainers. 00162 { 00163 return _vDestroyedFieldContainers.size(); 00164 }
|
|
||||||||||||
|
Definition at line 169 of file OSGChangeList.cpp. References _bReadOnly, _vChangedFieldContainers, clearAll(), osg::FieldContainerPtrBase::getFieldContainerId(), osg::RemoteAspect::restoreChangeList(), osg::RemoteAspect::storeChangeList(), and SWARNING. Referenced by osg::FieldContainerPtr::endEditNotChanged(), and osg::RemoteAspect::restoreChangeList(). 00171 { 00172 if(_bReadOnly == true) 00173 return; 00174 00175 UInt32 uiContainerId(pFieldContainer.getFieldContainerId()); 00176 00177 ChangeEntry tmpEntry (uiContainerId, bvWhichField); 00178 00179 try 00180 { 00181 _vChangedFieldContainers.push_back(tmpEntry); 00182 } 00183 00184 // std::bad_alloc doesn't work. 00185 catch(...) 00186 { 00187 // on windows the maximum vector size is 16777216 well 00188 // vector.max_size() returns 268435455 ???? 00189 // to save some memory we recreate a more compact changelist. 00190 std::vector<ChangeEntry>::size_type oldSize = _vChangedFieldContainers.size(); 00191 SWARNING << "Compacting ChangeList ..." << std::endl; 00192 // should move store/restore in this class, better wait for release 1.5.0 00193 RemoteAspect::storeChangeList(this); 00194 clearAll(); 00195 RemoteAspect::restoreChangeList(this); 00196 SWARNING << "Compacted ChangeList from " << oldSize 00197 << " to " << _vChangedFieldContainers.size() << " entries." << std::endl; 00198 _vChangedFieldContainers.push_back(tmpEntry); 00199 } 00200 }
|
|
|
Definition at line 202 of file OSGChangeList.cpp. References _bReadOnly, _vAddRefdFieldContainers, and osg::FieldContainerPtrBase::getFieldContainerId(). Referenced by osg::FieldContainerPtrBase::addRef(), and osg::RemoteAspect::restoreChangeList(). 00203 { 00204 if(_bReadOnly == true) 00205 return; 00206 00207 UInt32 uiContainerId = pFieldContainer.getFieldContainerId(); 00208 00209 _vAddRefdFieldContainers.push_back(uiContainerId); 00210 }
|
|
|
Definition at line 212 of file OSGChangeList.cpp. References _bReadOnly, _vSubRefdFieldContainers, and osg::FieldContainerPtrBase::getFieldContainerId(). Referenced by osg::FieldContainerPtrBase::subRef(). 00213 { 00214 if(_bReadOnly == true) 00215 return; 00216 00217 UInt32 uiContainerId = pFieldContainer.getFieldContainerId(); 00218 00219 _vSubRefdFieldContainers.push_back(uiContainerId); 00220 }
|
|
|
Definition at line 222 of file OSGChangeList.cpp. References _bReadOnly, and _vCreatedFieldContainers. Referenced by osg::FieldContainer::newPtr(), and osg::RemoteAspect::restoreChangeList(). 00223 { 00224 if(_bReadOnly == true) 00225 return; 00226 00227 _vCreatedFieldContainers.push_back(uiContainerId); 00228 }
|
|
|
Definition at line 230 of file OSGChangeList.cpp. References _bReadOnly, and _vDestroyedFieldContainers. Referenced by osg::FieldContainerPtrBase::deleteContainers(). 00231 { 00232 if(_bReadOnly == true) 00233 return; 00234 00235 _vDestroyedFieldContainers.push_back(uiContainerId); 00236 }
|
|
|
Definition at line 241 of file OSGChangeList.cpp. References _vAddRefdFieldContainers, _vChangedFieldContainers, _vCreatedFieldContainers, _vDestroyedFieldContainers, and _vSubRefdFieldContainers. Referenced by addChanged(), applyAndClear(), applyTo(), osg::ClusterWindow::frameInit(), setAspect(), and osg::PThreadBase::setupChangeList(). 00242 { 00243 _vChangedFieldContainers.clear(); 00244 _vAddRefdFieldContainers.clear(); 00245 _vSubRefdFieldContainers.clear(); 00246 00247 _vCreatedFieldContainers .clear(); 00248 _vDestroyedFieldContainers.clear(); 00249 }
|
|
|
|
Definition at line 280 of file OSGChangeList.cpp. References _uiAspectId, _vAddRefdFieldContainers, _vChangedFieldContainers, _vSubRefdFieldContainers, clearAll(), and SWARNING. 00281 { 00282 if(_vChangedFieldContainers.size() != 0 || 00283 _vAddRefdFieldContainers.size() != 0 || 00284 _vSubRefdFieldContainers.size() != 0) 00285 { 00286 SWARNING << "Changing aspect on non empty changelist, all currrent " 00287 << "entries will be lost" << std::endl; 00288 } 00289 00290 clearAll(); 00291 00292 // OSGAspect::moveList(this, _aspectId, aspectId); 00293 00294 _uiAspectId = uiAspectId; 00295 }
|
|
|
Definition at line 297 of file OSGChangeList.cpp. References _bReadOnly. 00298 { 00299 _bReadOnly = bReadOnly; 00300 }
|
|
|
Define whether ChangeLists are created read only by default or not. Per default they are created read only, to not have a memory leak in applications that don't use multiple threads and don't clear the ChangeList. Thus if you want to use the ChangeLists, multiple threads and/or the cluster you have to call ChangeList::setReadOnlyDefault(true). This function should only be called before osgInit. Definition at line 310 of file OSGChangeList.cpp. References _bReadWriteDefault, FWARNING, osg::GlobalSystemState, and osg::Startup. 00311 { 00312 if(GlobalSystemState != Startup) 00313 FWARNING(("setReadWriteDefault: called after startup!\n")); 00314 00315 _bReadWriteDefault = bReadWrite; 00316 }
|
|
|
Definition at line 323 of file OSGChangeList.cpp. References _bReadOnly, _uiAspectId, _vAddRefdFieldContainers, _vChangedFieldContainers, _vSubRefdFieldContainers, osg::addRefCP(), clearAll(), osg::FieldContainerPtrBase::executeSync(), osg::FieldContainerFactory::getContainer(), osg::ThreadManager::getNumAspects(), osg::NullFC, osg::subRefCP(), SWARNING, and osg::FieldContainerFactory::the(). Referenced by applyToCurrent(). 00324 { 00325 UInt32 i; 00326 00327 if(uiAspectId == _uiAspectId) 00328 { 00329 SWARNING << "Sync on the same aspect, ignored " << std::endl; 00330 return; 00331 } 00332 00333 if(uiAspectId >= ThreadManager::getNumAspects()) 00334 { 00335 SWARNING << "Invalid AspectId" << std::endl; 00336 } 00337 00338 _bReadOnly = true; 00339 OSG::Thread::getCurrentChangeList()->setReadOnly(true); 00340 00341 FieldContainerPtr pTmp; 00342 00343 for(i = 0; i < _vChangedFieldContainers.size(); i++) 00344 { 00345 pTmp = FieldContainerFactory::the()->getContainer( 00346 _vChangedFieldContainers[i].first); 00347 00348 if(pTmp == NullFC) 00349 continue; 00350 00351 pTmp.executeSync(_uiAspectId, 00352 uiAspectId, 00353 _vChangedFieldContainers[i].second); 00354 } 00355 00356 for(i = 0; i < _vAddRefdFieldContainers.size(); i++) 00357 { 00358 pTmp = FieldContainerFactory::the()->getContainer( 00359 _vAddRefdFieldContainers[i]); 00360 00361 if(pTmp == NullFC) 00362 continue; 00363 00364 addRefCP(pTmp); 00365 } 00366 00367 for(i = 0; i < _vSubRefdFieldContainers.size(); i++) 00368 { 00369 pTmp = FieldContainerFactory::the()->getContainer( 00370 _vSubRefdFieldContainers[i]); 00371 00372 if(pTmp == NullFC) 00373 continue; 00374 00375 subRefCP(pTmp); 00376 } 00377 00378 clearAll(); 00379 00380 _bReadOnly = false; 00381 OSG::Thread::getCurrentChangeList()->setReadOnly(false); 00382 00383 }
|
|
|
Definition at line 385 of file OSGChangeList.cpp. References applyTo(), and osg::PThreadBase::getAspect(). 00386 { 00387 applyTo(Thread::getAspect()); 00388 }
|
|
|
Definition at line 392 of file OSGChangeList.cpp. References _bReadOnly, _uiAspectId, _vAddRefdFieldContainers, _vChangedFieldContainers, _vSubRefdFieldContainers, osg::addRefCP(), osg::FieldContainerPtrBase::executeSync(), osg::PThreadBase::getAspect(), osg::FieldContainerFactory::getContainer(), osg::NullFC, osg::subRefCP(), SWARNING, and osg::FieldContainerFactory::the(). Referenced by applyAndClear(). 00393 { 00394 UInt32 i; 00395 00396 if(OSG::Thread::getCurrentChangeList() == this) 00397 { 00398 SWARNING << "try to apply current changelist : ignored" << std::endl; 00399 } 00400 00401 _bReadOnly = true; 00402 00403 OSG::Thread::getCurrentChangeList()->setReadOnly(true); 00404 00405 FieldContainerPtr pTmp; 00406 00407 for(i = 0; i < _vChangedFieldContainers.size(); i++) 00408 { 00409 pTmp = FieldContainerFactory::the()->getContainer( 00410 _vChangedFieldContainers[i].first); 00411 00412 if(pTmp == NullFC) 00413 continue; 00414 00415 pTmp.executeSync(_uiAspectId, 00416 Thread::getAspect(), 00417 _vChangedFieldContainers[i].second); 00418 } 00419 00420 for(i = 0; i < _vAddRefdFieldContainers.size(); i++) 00421 { 00422 pTmp = FieldContainerFactory::the()->getContainer( 00423 _vAddRefdFieldContainers[i]); 00424 00425 if(pTmp == NullFC) 00426 continue; 00427 00428 addRefCP(pTmp); 00429 } 00430 00431 for(i = 0; i < _vSubRefdFieldContainers.size(); i++) 00432 { 00433 pTmp = FieldContainerFactory::the()->getContainer( 00434 _vSubRefdFieldContainers[i]); 00435 00436 if(pTmp == NullFC) 00437 continue; 00438 00439 subRefCP(pTmp); 00440 } 00441 00442 _bReadOnly = false; 00443 00444 OSG::Thread::getCurrentChangeList()->setReadOnly(false); 00445 }
|
|
|
Definition at line 447 of file OSGChangeList.cpp. References apply(), and clearAll().
|
|
|
Definition at line 456 of file OSGChangeList.cpp. References _uiAspectId, _vAddRefdFieldContainers, _vChangedFieldContainers, _vCreatedFieldContainers, _vDestroyedFieldContainers, and _vSubRefdFieldContainers. 00457 { 00458 UInt32 i; 00459 00460 fprintf(stderr, "CL: %u\n", _uiAspectId); 00461 fprintf(stderr, "CLChanged:\n"); 00462 00463 for(i = 0; i < _vChangedFieldContainers.size(); i++) 00464 { 00465 // fprintf(stderr, "\t%d\n", 00466 // _vChangedFieldContainers[i].first.getFieldContainerId()); 00467 fprintf(stderr, "\t%u\n", 00468 _vChangedFieldContainers[i].first); 00469 } 00470 00471 fprintf(stderr, "CLAdd:\n"); 00472 for(i = 0; i < _vAddRefdFieldContainers.size(); i++) 00473 { 00474 // fprintf(stderr, "\t%d\n", 00475 // _vAddRefdFieldContainers[i].getFieldContainerId()); 00476 fprintf(stderr, "\t%u\n", 00477 _vAddRefdFieldContainers[i]); 00478 } 00479 00480 fprintf(stderr, "CLSub:\n"); 00481 for(i = 0; i < _vSubRefdFieldContainers.size(); i++) 00482 { 00483 // fprintf(stderr, "\t%d\n", 00484 // _vSubRefdFieldContainers[i].getFieldContainerId()); 00485 fprintf(stderr, "\t%u\n", 00486 _vSubRefdFieldContainers[i]); 00487 } 00488 00489 fprintf(stderr, "CLCreate:\n"); 00490 for(i = 0; i < _vCreatedFieldContainers.size(); i++) 00491 { 00492 fprintf(stderr, "\t%u\n", _vCreatedFieldContainers[i]); 00493 } 00494 00495 fprintf(stderr, "CLDestroy:\n"); 00496 for(i = 0; i < _vDestroyedFieldContainers.size(); i++) 00497 { 00498 fprintf(stderr, "\t%u\n", _vDestroyedFieldContainers[i]); 00499 } 00500 }
|
|
|
|
|
|
Definition at line 64 of file OSGMemoryObject.cpp. References osg::MemoryObject::_refCount. Referenced by osg::SharedObjectHandler::getSharedObject(), and osg::SharedObjectHandler::initialize(). 00065 { 00066 _refCount++; 00067 }
|
|
|
Definition at line 69 of file OSGMemoryObject.cpp. References osg::MemoryObject::_refCount.
|
|
|
Definition at line 77 of file OSGMemoryObject.cpp. References osg::MemoryObject::_refCount. 00078 { 00079 return _refCount; 00080 }
|
|
|
Definition at line 196 of file OSGChangeList.h. |
|
|
Definition at line 202 of file OSGChangeList.h. Referenced by addAddRefd(), addChanged(), addCreated(), addDestroyed(), addSubRefd(), apply(), applyTo(), and setReadOnly(). |
|
|
Definition at line 62 of file OSGChangeList.cpp. Referenced by setReadWriteDefault(). |
|
|
Definition at line 205 of file OSGChangeList.h. Referenced by apply(), applyTo(), dump(), and setAspect(). |
|
|
Definition at line 206 of file OSGChangeList.h. |