![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2001 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: recSRIter.h,v $ $Revision: 1.7 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00017 00018 #ifndef DtRecursiveStateRepositoryIterator_H_ 00019 #define DtRecursiveStateRepositoryIterator_H_ 00020 00021 #include "vrfutil/iteratorBase.h" 00022 #include "vrfobjcore/attachMgr.h" 00023 #include "vrfobjcore/simObjSR.h" 00024 00032 #include "vrfobjcore/vrfobjcoreDefines.h" 00033 class DT_DLL_vrfobjcore DtRecursiveStateRepositoryIterator : public DtIteratorBase<DtSimObjectStateRepository> 00034 { 00035 00036 private: 00038 DtRecursiveStateRepositoryIterator(); 00039 00041 DtRecursiveStateRepositoryIterator( 00042 const DtRecursiveStateRepositoryIterator& orig); 00043 00045 const DtRecursiveStateRepositoryIterator& operator=( 00046 const DtRecursiveStateRepositoryIterator& orig); 00047 00048 public: 00050 DtRecursiveStateRepositoryIterator(const DtList& list) : 00051 DtIteratorBase<DtSimObjectStateRepository>(list), myChildIterator(NULL) {}; 00052 00054 virtual ~DtRecursiveStateRepositoryIterator() { delete myChildIterator; }; 00055 00058 DtSimObjectStateRepository* first(bool reset = true) 00059 { 00060 if (reset) 00061 { 00062 DtIteratorBase<DtSimObjectStateRepository>::reset(); 00063 } 00064 00065 return DtIteratorBase<DtSimObjectStateRepository>::first(); 00066 } 00067 00069 DtSimObjectStateRepository* current() const 00070 { 00071 if (myChildIterator) 00072 { 00073 DtSimObjectStateRepository* currRep = myChildIterator->current(); 00074 00075 if (currRep) 00076 { 00077 return currRep; 00078 } 00079 00080 else 00081 { 00082 delete myChildIterator; 00083 DtRecursiveStateRepositoryIterator* wThis = 00084 (DtRecursiveStateRepositoryIterator*)this; 00085 wThis->myChildIterator = NULL; 00086 } 00087 } 00088 00089 if (myCursor) 00090 { 00091 return (DtSimObjectStateRepository*) myCursor->data(); 00092 } 00093 00095 return NULL; 00096 } 00097 00100 DtSimObjectStateRepository* next() 00101 { 00102 DtSimObjectStateRepository* currRep; 00103 00105 if (myChildIterator) 00106 { 00107 currRep = myChildIterator->next(); 00108 00109 if (currRep) 00110 { 00111 return currRep; 00112 } 00113 00114 else 00115 { 00116 delete myChildIterator; 00117 myChildIterator = NULL; 00118 } 00119 } 00120 00121 else 00122 { 00123 DtSimObjectStateRepository* currRep = current(); 00124 00125 if (!currRep) 00126 { 00127 return NULL; 00128 } 00129 00130 if (currRep->attachments() && currRep->attachments()->numAttachments()) 00131 { 00133 myChildIterator = new DtRecursiveStateRepositoryIterator(currRep->attachments()->elements()); 00134 if (myChildIterator) 00135 { 00136 return myChildIterator->first(); 00137 } 00138 00139 else 00140 { 00142 return NULL; 00143 } 00144 } 00145 } 00146 00149 if (myCursor) 00150 { 00151 myCursor = myCursor->next(); 00152 } 00153 00154 return current(); 00155 } 00156 00159 void reset() 00160 { 00161 DtIteratorBase<DtSimObjectStateRepository>::reset(); 00162 00163 if (myChildIterator) 00164 { 00165 delete myChildIterator; 00166 myChildIterator = NULL; 00167 } 00168 } 00169 00170 protected: 00171 DtRecursiveStateRepositoryIterator* myChildIterator; 00172 }; 00173 00174 #endif