VR-Forces 4.0.4 Class Documentation
include/vrfutil/recRscrIter.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2004 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: recRscrIter.h,v $ $Revision: 1.3 $ $State: Exp $
00007 Created: 4/5/04 MEM
00008 *******************************************************************************/
00009 
00012 
00018 
00019 #ifndef DtRecursiveResourceIterator_H_
00020 #define DtRecursiveResourceIterator_H_
00021 
00022 #include "vrfutil/simRsrc.h"
00023 #include "vrfutil/rsrcList.h"
00024 #include "vrfutil/iteratorBase.h"
00025 
00031 #include "vrfutil/vrfutilDefines.h"
00032 class DT_DLL_vrfutil DtRecursiveResourceIterator : public DtIteratorBase<DtSimResource>
00033 {
00034 private:
00036    DtRecursiveResourceIterator();
00037 
00039    DtRecursiveResourceIterator(
00040       const DtRecursiveResourceIterator& orig);
00041 
00043    const DtRecursiveResourceIterator& operator=(
00044       const DtRecursiveResourceIterator& orig);
00045 
00046 public:
00047 
00049    DtRecursiveResourceIterator(const DtList& list) :
00050       DtIteratorBase<DtSimResource>(list), myChildIterator(NULL) {};
00051 
00053    virtual ~DtRecursiveResourceIterator() { delete myChildIterator; };
00054 
00057    DtSimResource* first(bool move=true)
00058       {
00059          return DtIteratorBase<DtSimResource>::first(move);
00060       }
00061 
00063    DtSimResource* current() const
00064       {
00065          if (myChildIterator)
00066          {
00067             DtSimResource* currRep = myChildIterator->current();
00068 
00069             if (currRep)
00070             {
00071                return currRep;
00072             }
00073 
00074             else 
00075             {
00076                delete myChildIterator;
00077                DtRecursiveResourceIterator* pRsrcIter =
00078                   (DtRecursiveResourceIterator*)this;
00079                pRsrcIter->myChildIterator = NULL;
00080             }
00081          }
00082 
00083          if (myCursor)
00084          {
00085             return (DtSimResource*) myCursor->data();
00086          }
00087 
00089          return NULL;
00090       }
00091 
00095    DtSimResource* next(bool move=true, bool recurse=false)
00096       {
00097          DtSimResource* currRep;
00098 
00100          if (myChildIterator)
00101          {
00102             currRep = myChildIterator->next(move,recurse);
00103 
00104             if (currRep)
00105             {
00106                return currRep;
00107             }
00108 
00109             else
00110             {
00111                delete myChildIterator;
00112                myChildIterator = NULL;
00113             }
00114          }
00115 
00116          else if ( recurse ) 
00117          {
00118             DtSimResource* currRep = current();
00119 
00120             if (!currRep) 
00121             {
00122                return NULL;
00123             }
00124 
00125             if (currRep->subresources() && currRep->subresources()->count())
00126             {
00128                myChildIterator = new DtRecursiveResourceIterator(*(currRep->subresources()));
00129                if (myChildIterator)
00130                {
00131                   return myChildIterator->first();
00132                }
00133 
00134                else
00135                {
00137                   return NULL;
00138                }
00139             }
00140          }
00141 
00144          if (myCursor)
00145          {
00146             myCursor = myCursor->next();
00147          }
00148 
00149          return current();
00150       }
00151 
00154    void reset()
00155       {
00156          DtIteratorBase<DtSimResource>::reset();
00157 
00158          if (myChildIterator)
00159          {
00160             delete myChildIterator;
00161             myChildIterator = NULL;
00162          }
00163       }
00164 
00165 protected:
00166    DtRecursiveResourceIterator* myChildIterator;
00167 
00168 };
00169 
00170 #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)