![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: vrfObjFiltIter.h,v $ $Revision: 1.13 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtVrfObjectFilterIterator_H_ 00013 #define DtVrfObjectFilterIterator_H_ 00014 00015 #include "vrfobjcore/fltrFcnInf.h" 00016 #include "vrfobjcore/vrfObjIter.h" 00017 #include "vrfobjcore/vrfObject.h" 00018 #include "vrfobjcore/simObjSR.h" 00019 #include "vrfobjcore/vrfObjPred.h" 00020 00023 00043 #include "vrfobjcore/vrfobjcoreDefines.h" 00044 class DT_DLL_vrfobjcore DtVrfObjectFilterIterator : public DtVrfObjectIterator 00045 { 00046 00047 private: 00049 DtVrfObjectFilterIterator(); 00050 DtVrfObjectFilterIterator& operator=(const DtVrfObjectFilterIterator& orig); 00051 00052 public: 00053 00060 DtVrfObjectFilterIterator(const DtList& list, 00061 const DtObjectType & filter = DtObjectType::anyType(), 00062 bool invertFilter = false); 00063 00064 DtVrfObjectFilterIterator(const DtList& list, 00065 DtFilterFcn filter, bool invertFilter = false, 00066 void* usrData = 0); 00067 00071 DtVrfObjectFilterIterator(const DtList& list, 00072 const DtVrfObjectPredicate& predicate); 00073 00074 DtVrfObjectFilterIterator(const DtVrfObjectFilterIterator& orig); 00075 00077 virtual ~DtVrfObjectFilterIterator(); 00078 00082 virtual DtVrfObject* first(bool move = true) 00083 { 00084 return firstMatch(DtVrfObjectIterator::first(move), false, move); //don't wrap 00085 }; 00086 00089 virtual DtVrfObject* next(bool move = true) 00090 { 00091 return firstMatch(DtVrfObjectIterator::next(move), false, move); //don't wrap 00092 }; 00093 00094 virtual DtVrfObject* wrapNext(bool move = true) 00095 { 00096 return firstMatch(DtVrfObjectIterator::wrapNext(move), true, move); //wrap 00097 }; 00098 00101 virtual DtVrfObject* prev(bool move = true) 00102 { 00103 return lastMatch(DtVrfObjectIterator::prev(move), false, move); //don't wrap 00104 }; 00105 00106 virtual DtVrfObject* wrapPrev(bool move = true) 00107 { 00108 return lastMatch(DtVrfObjectIterator::wrapPrev(move), true, move); //wrap 00109 }; 00110 00114 virtual DtVrfObject* last(bool move = true) 00115 { 00116 return lastMatch(DtVrfObjectIterator::last(move), false, move); //don't wrap 00117 }; 00118 00121 virtual DtVrfObject* firstMatch(DtVrfObject* initial, bool wrap, 00122 bool move = true); 00123 00126 virtual DtVrfObject* lastMatch(DtVrfObject* initial, bool wrap, bool move = true); 00127 00129 virtual void setFilter(const DtVrfObjectPredicate& objectPredicate); 00130 00131 void setFilter(const DtObjectType& filter); 00132 00133 virtual void setFilter(DtFilterFcn filter, void* usrData = 0); 00134 00135 virtual void setInvertFilter(bool invert) { myInvertFilter = invert; }; 00136 virtual bool invertFilter() const { return myInvertFilter; }; 00137 00138 00139 protected: 00144 virtual bool matchFilter(DtVrfObject* simObject) const; 00145 00146 static bool filterByObjType(const DtVrfObject* object, void* usr); 00147 static bool filterByPredicate(const DtVrfObject* object, void* usr); 00148 00149 protected: 00150 DtVrfObjectPredicate* myVrfObjectPredicate; 00151 bool myDoFiltering; 00152 DtFilterFcnInfo myFilterInfo; 00153 DtObjectType myFilter; 00154 bool myInvertFilter; 00155 }; 00156 00157 #endif