00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include "OSGNewActionBase.h"
00044
00045 #include "OSGActorBase.h"
00046 #include "OSGExtendActorBase.h"
00047 #include "OSGBasicActorBase.h"
00048
00049 OSG_USING_NAMESPACE
00050
00051
00052
00053
00054
00055
00056
00099 #ifdef OSG_NEWACTION_STATISTICS
00100
00101
00102
00103
00104
00105 StatElemDesc<StatIntElem>
00106 NewActionBase::statNodesEnter("NewActionBase::nodesEnter",
00107 "Number of nodes entered" );
00108 StatElemDesc<StatIntElem>
00109 NewActionBase::statNodesLeave("NewActionBase::nodesLeave",
00110 "Number of nodes left" );
00111
00112
00113 #endif
00114
00115
00116
00117
00118
00122 NewActionBase::~NewActionBase(void)
00123 {
00124 }
00125
00126
00127
00128
00129
00143 UInt32
00144 NewActionBase::addActor(ActorBase *pActor)
00145 {
00146 return pActor->addHelper(this);
00147 }
00148
00158 void
00159 NewActionBase::subActor(ActorBase *pActor)
00160 {
00161 pActor->subHelper(this);
00162 }
00163
00176 UInt32
00177 NewActionBase::findActor(ActorBase *pActor) const
00178 {
00179 return pActor->findHelper(this);
00180 }
00181
00185 UInt32
00186 NewActionBase::getNumActors(void) const
00187 {
00188 return _extendActors.size() + _basicActors.size();
00189 }
00190
00191
00192
00193
00194
00201 UInt32
00202 NewActionBase::addExtendActor(ExtendActorBase *pActor)
00203 {
00204 return addExtendActor(pActor, _extendActors.size());
00205 }
00206
00213 UInt32
00214 NewActionBase::addExtendActor(ExtendActorBase *pActor, UInt32 pos)
00215 {
00216 UInt32 actorId = getNumActors();
00217
00218 pActor ->addEvent (this, actorId);
00219 _extendActors. insert (_extendActors.begin() + pos, pActor );
00220 this ->addExtendEvent(pActor, pos );
00221
00222 return pos;
00223 }
00224
00229 void
00230 NewActionBase::subExtendActor(UInt32 pos)
00231 {
00232 ExtendActorStoreIt itActor = _extendActors.begin() + pos;
00233 ExtendActorBase *pActor = *itActor;
00234
00235 this ->subExtendEvent(pActor, pos );
00236 pActor->subEvent (this, pActor->getActorId());
00237
00238 _extendActors.erase(itActor);
00239 }
00240
00246 UInt32
00247 NewActionBase::findExtendActor(ExtendActorBase *pActor) const
00248 {
00249 ExtendActorStoreConstIt itActors = _extendActors.begin();
00250 ExtendActorStoreConstIt endActors = _extendActors.end ();
00251
00252 UInt32 pos = 0;
00253 bool found = false;
00254
00255 for(; (itActors != endActors) && !found; ++itActors, ++pos)
00256 {
00257 if(*itActors == pActor)
00258 {
00259 found = true;
00260 break;
00261 }
00262 }
00263
00264 return (found ? pos : TypeTraits<UInt32>::getMax());
00265 }
00266
00270 UInt32
00271 NewActionBase::getNumExtendActors(void) const
00272 {
00273 return _extendActors.size();
00274 }
00275
00276
00277
00278
00279
00286 UInt32
00287 NewActionBase::addBasicActor(BasicActorBase *pActor)
00288 {
00289 return addBasicActor(pActor, _basicActors.size());
00290 }
00291
00298 UInt32
00299 NewActionBase::addBasicActor(BasicActorBase *pActor, UInt32 pos)
00300 {
00301 UInt32 actorId = getNumActors();
00302
00303 pActor ->addEvent (this, actorId);
00304 _basicActors. insert (_basicActors.begin() + pos, pActor );
00305 this ->addBasicEvent(pActor, pos );
00306
00307 return pos;
00308 }
00309
00314 void
00315 NewActionBase::subBasicActor(UInt32 pos)
00316 {
00317 BasicActorStoreIt itActor = _basicActors.begin() + pos;
00318 BasicActorBase *pActor = *itActor;
00319
00320 this ->subBasicEvent(pActor, pos );
00321 pActor->subEvent (this, pActor->getActorId());
00322
00323 _basicActors.erase(itActor);
00324 }
00325
00331 UInt32
00332 NewActionBase::findBasicActor(BasicActorBase *pActor) const
00333 {
00334 BasicActorStoreConstIt itActors = _basicActors.begin();
00335 BasicActorStoreConstIt endActors = _basicActors.end ();
00336
00337 UInt32 pos = 0;
00338 bool found = false;
00339
00340 for(; (itActors != endActors) && !found; ++itActors, ++pos)
00341 {
00342 if(*itActors == pActor)
00343 {
00344 found = true;
00345 break;
00346 }
00347 }
00348
00349 return (found ? pos : TypeTraits<UInt32>::getMax());
00350 }
00351
00355 UInt32
00356 NewActionBase::getNumBasicActors(void) const
00357 {
00358 return _basicActors.size();
00359 }
00360
00361
00362
00363
00364
00365 NewActionBase::NewActionBase(void)
00366 : _extendActors ( ),
00367 _basicActors ( ),
00368 #ifdef OSG_NEWACTION_STATISTICS
00369 _pStatistics (NULL ),
00370 _ownStatistics (false ),
00371 #endif
00372 _travMask (TypeTraits<UInt32>::BitsSet),
00373 _numPasses (1 ),
00374 _childrenListEnabled(false ),
00375 _childrenList ( ),
00376 _extraChildrenList ( )
00377 {
00378 }
00379
00380
00381
00382
00383
00388 void
00389 NewActionBase::startEvent(void)
00390 {
00391 #ifdef OSG_NEWACTION_STATISTICS
00392 if(_pStatistics == NULL)
00393 {
00394 _pStatistics = StatCollector::create();
00395 _ownStatistics = true;
00396 }
00397 else
00398 {
00399 _ownStatistics = false;
00400 }
00401
00402 getStatistics()->getElem(statNodesEnter)->reset();
00403 getStatistics()->getElem(statNodesLeave)->reset();
00404 #endif
00405 }
00406
00411 void
00412 NewActionBase::stopEvent(void)
00413 {
00414 #ifdef OSG_NEWACTION_STATISTICS
00415 if(_ownStatistics == true)
00416 {
00417 delete _pStatistics;
00418 _pStatistics = NULL;
00419 }
00420 #endif
00421 }
00422
00423
00424
00425
00426
00427 NewActionBase::ResultE
00428 NewActionBase::startActors(void)
00429 {
00430 ResultE result = NewActionTypes::Continue;
00431
00432 ExtendActorStoreIt itExtend = beginExtend();
00433 ExtendActorStoreIt endItExtend = endExtend ();
00434
00435 for(; (itExtend != endItExtend ) &&
00436 !(result & NewActionTypes::Quit); ++itExtend)
00437 {
00438 result = (*itExtend)->start();
00439 }
00440
00441 BasicActorStoreIt itBasic = beginBasic();
00442 BasicActorStoreIt endItBasic = endBasic ();
00443
00444 for(; (itBasic != endItBasic ) &&
00445 !(result & NewActionTypes::Quit); ++itBasic)
00446 {
00447 result = (*itBasic)->start();
00448 }
00449
00450 return result;
00451 }
00452
00453 NewActionBase::ResultE
00454 NewActionBase::stopActors(void)
00455 {
00456 ResultE result = NewActionTypes::Continue;
00457
00458 ExtendActorStoreIt itExtend = beginExtend();
00459 ExtendActorStoreIt endItExtend = endExtend ();
00460
00461 for(; (itExtend != endItExtend ) &&
00462 !(result & NewActionTypes::Quit); ++itExtend)
00463 {
00464 result = (*itExtend)->stop();
00465 }
00466
00467 BasicActorStoreIt itBasic = beginBasic();
00468 BasicActorStoreIt endItBasic = endBasic ();
00469
00470 for(; (itBasic != endItBasic ) &&
00471 !(result & NewActionTypes::Quit); ++itBasic)
00472 {
00473 result = (*itBasic)->stop();
00474 }
00475
00476 return result;
00477 }
00478
00479
00480
00481
00482 #ifdef OSG_SGI_CC
00483 #pragma set woff 1174
00484 #endif
00485
00486 #ifdef OSG_LINUX_ICC
00487 #pragma warning(disable : 177)
00488 #endif
00489
00490 namespace
00491 {
00492 static Char8 cvsid_cpp [] = "@(#)$Id: OSGNewActionBase.cpp,v 1.4 2005/08/30 13:18:01 dirk Exp $";
00493 static Char8 cvsid_hpp [] = OSGNEWACTIONBASE_HEADER_CVSID;
00494 static Char8 cvsid_inl [] = OSGNEWACTIONBASE_INLINE_CVSID;
00495 }
00496
00497 #ifdef OSG_LINUX_ICC
00498 #pragma warning(enable : 177)
00499 #endif
00500
00501 #ifdef OSG_SGI_CC
00502 #pragma reset woff 1174
00503 #endif