VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/recSRIter.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)