00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __SIM_DataFilter_h__
00015 #define __SIM_DataFilter_h__
00016
00017 #include "SIM_API.h"
00018 #include <UT/UT_Guid.h>
00019 #include <UT/UT_String.h>
00020 #include <UT/UT_WorkArgs.h>
00021 #include <UT/UT_DMatrix4.h>
00022
00023 class SIM_Data;
00024
00025
00026
00027
00028
00029
00030 class SIM_API SIM_DataFilter
00031 {
00032 public:
00033 explicit SIM_DataFilter()
00034 { }
00035 virtual ~SIM_DataFilter()
00036 { }
00037 SIM_DataFilter(const SIM_DataFilter &)
00038 { }
00039
00040
00041
00042
00043 virtual bool acceptData(const SIM_Data *data,
00044 const char *dataname) const = 0;
00045
00046 private:
00047
00048
00049 const SIM_DataFilter &operator=(const SIM_DataFilter &)
00050 { return *this; }
00051 };
00052
00053
00054 class SIM_API SIM_DataFilterAll : public SIM_DataFilter
00055 {
00056 public:
00057 explicit SIM_DataFilterAll()
00058 { }
00059 virtual ~SIM_DataFilterAll()
00060 { }
00061 SIM_DataFilterAll(const SIM_DataFilterAll &)
00062 : SIM_DataFilter()
00063 { }
00064
00065 virtual bool acceptData(const SIM_Data *,
00066 const char *) const
00067 { return true; }
00068 };
00069
00070
00071 class SIM_API SIM_DataFilterNone : public SIM_DataFilter
00072 {
00073 public:
00074 explicit SIM_DataFilterNone()
00075 { }
00076 virtual ~SIM_DataFilterNone()
00077 { }
00078 SIM_DataFilterNone(const SIM_DataFilterNone &)
00079 : SIM_DataFilter()
00080 { }
00081
00082 virtual bool acceptData(const SIM_Data *,
00083 const char *) const
00084 { return false; }
00085 };
00086
00087
00088
00089 class SIM_API SIM_DataFilterByType : public SIM_DataFilter
00090 {
00091 public:
00092 explicit SIM_DataFilterByType(const char *datatype)
00093 : myDataType(datatype, 1)
00094 { }
00095 virtual ~SIM_DataFilterByType()
00096 { }
00097 SIM_DataFilterByType(const SIM_DataFilterByType &src)
00098 : SIM_DataFilter(),
00099 myDataType(src.myDataType, 1)
00100 { }
00101
00102 virtual bool acceptData(const SIM_Data *data,
00103 const char *dataname) const;
00104
00105 private:
00106 const UT_String myDataType;
00107 };
00108
00109
00110
00111
00112 class SIM_API SIM_DataFilterByName : public SIM_DataFilter
00113 {
00114 public:
00115 explicit SIM_DataFilterByName(const char *pattern)
00116 : myPattern(pattern, 1)
00117 { }
00118 virtual ~SIM_DataFilterByName()
00119 { }
00120 SIM_DataFilterByName(const SIM_DataFilterByName &src)
00121 : SIM_DataFilter(),
00122 myPattern(src.myPattern, 1)
00123 { }
00124
00125 virtual bool acceptData(const SIM_Data *data,
00126 const char *dataname) const;
00127
00128 private:
00129 const UT_String myPattern;
00130 };
00131
00132
00133
00134 class SIM_API SIM_DataFilterByUniqueId : public SIM_DataFilter
00135 {
00136 public:
00137 explicit SIM_DataFilterByUniqueId(const UT_Guid &uniqueid)
00138 : myUniqueId(uniqueid)
00139 { }
00140 virtual ~SIM_DataFilterByUniqueId()
00141 { }
00142 SIM_DataFilterByUniqueId(
00143 const SIM_DataFilterByUniqueId &src)
00144 : SIM_DataFilter(),
00145 myUniqueId(src.myUniqueId)
00146 { }
00147
00148 virtual bool acceptData(const SIM_Data *data,
00149 const char *dataname) const;
00150
00151 private:
00152 const UT_Guid myUniqueId;
00153 };
00154
00155
00156
00157
00158
00159
00160 class SIM_API SIM_DataFilterNth : public SIM_DataFilter
00161 {
00162 public:
00163 explicit SIM_DataFilterNth(const SIM_DataFilter &filter, int n)
00164 : myFilter(filter),
00165 myN(n),
00166 myCount(0)
00167 { }
00168 virtual ~SIM_DataFilterNth()
00169 { }
00170 SIM_DataFilterNth(const SIM_DataFilterNth &src)
00171 : SIM_DataFilter(),
00172 myFilter(src.myFilter),
00173 myCount(src.myCount),
00174 myN(src.myN)
00175 { }
00176
00177 virtual bool acceptData(const SIM_Data *data,
00178 const char *dataname) const
00179 {
00180 if( myCount <= myN &&
00181 myFilter.acceptData(data, dataname) )
00182 {
00183 ++myCount;
00184 return myCount == myN + 1;
00185 }
00186 return false;
00187 }
00188
00189 private:
00190 const SIM_DataFilter &myFilter;
00191 mutable int myCount;
00192 const int myN;
00193 };
00194
00195
00196
00197 class SIM_API SIM_DataFilterOr : public SIM_DataFilter
00198 {
00199 public:
00200 explicit SIM_DataFilterOr(const SIM_DataFilter &filter1,
00201 const SIM_DataFilter &filter2)
00202 : myFilter1(filter1),
00203 myFilter2(filter2)
00204 { }
00205 virtual ~SIM_DataFilterOr()
00206 { }
00207 SIM_DataFilterOr(const SIM_DataFilterOr &src)
00208 : SIM_DataFilter(),
00209 myFilter1(src.myFilter1),
00210 myFilter2(src.myFilter2)
00211 { }
00212
00213 virtual bool acceptData(const SIM_Data *data,
00214 const char *dataname) const
00215 {
00216 if( myFilter1.acceptData(data, dataname) ||
00217 myFilter2.acceptData(data, dataname) )
00218 return true;
00219 return false;
00220 }
00221
00222 private:
00223 const SIM_DataFilter &myFilter1;
00224 const SIM_DataFilter &myFilter2;
00225 };
00226
00227
00228
00229 class SIM_API SIM_DataFilterAnd : public SIM_DataFilter
00230 {
00231 public:
00232 explicit SIM_DataFilterAnd(const SIM_DataFilter &filter1,
00233 const SIM_DataFilter &filter2)
00234 : myFilter1(filter1),
00235 myFilter2(filter2)
00236 { }
00237 virtual ~SIM_DataFilterAnd()
00238 { }
00239 SIM_DataFilterAnd(const SIM_DataFilterAnd &src)
00240 : SIM_DataFilter(),
00241 myFilter1(src.myFilter1),
00242 myFilter2(src.myFilter2)
00243 { }
00244
00245 virtual bool acceptData(const SIM_Data *data,
00246 const char *dataname) const
00247 {
00248 if( myFilter1.acceptData(data, dataname) &&
00249 myFilter2.acceptData(data, dataname) )
00250 return true;
00251 return false;
00252 }
00253
00254 private:
00255 const SIM_DataFilter &myFilter1;
00256 const SIM_DataFilter &myFilter2;
00257 };
00258
00259
00260
00261 class SIM_API SIM_DataFilterNot : public SIM_DataFilter
00262 {
00263 public:
00264 explicit SIM_DataFilterNot(const SIM_DataFilter &filter)
00265 : myFilter(filter)
00266 { }
00267 virtual ~SIM_DataFilterNot()
00268 { }
00269 SIM_DataFilterNot(const SIM_DataFilterNot &src)
00270 : SIM_DataFilter(),
00271 myFilter(src.myFilter)
00272 { }
00273
00274 virtual bool acceptData(const SIM_Data *data,
00275 const char *dataname) const
00276 {
00277 if( !myFilter.acceptData(data, dataname) )
00278 return true;
00279 return false;
00280 }
00281
00282 private:
00283 const SIM_DataFilter &myFilter;
00284 };
00285
00286
00287
00288 class SIM_API SIM_DataFilterRootData : public SIM_DataFilter
00289 {
00290 public:
00291 explicit SIM_DataFilterRootData(const char *filterstr)
00292 : myFilterStr(filterstr, 1)
00293 {
00294 myFilterStr.tokenize(myFilterArgs);
00295 }
00296 virtual ~SIM_DataFilterRootData()
00297 { }
00298 SIM_DataFilterRootData(
00299 const SIM_DataFilterRootData &src)
00300 : SIM_DataFilter(),
00301 myFilterStr(src.myFilterStr),
00302 myFilterArgs(src.myFilterArgs)
00303 { }
00304
00305
00306
00307
00308 virtual bool acceptData(const SIM_Data *data,
00309 const char *dataname) const;
00310
00311 private:
00312 UT_String myFilterStr;
00313 UT_WorkArgs myFilterArgs;
00314 };
00315
00316 #endif
00317