6#ifndef _ZFI_ZFFilter_h_
7#define _ZFI_ZFFilter_h_
24#define ZFTOKEN_ZFFilterTypeInclude "Include"
26#define ZFTOKEN_ZFFilterTypeExclude "Exclude"
30 case ZFFilterTypeInclude:
33 case ZFFilterTypeExclude:
45 ZFFilterResultNotSpecified,
47 ZFFilterResultNotActive,
50#define ZFTOKEN_ZFFilterResultNotSpecified "NotSpecified"
52#define ZFTOKEN_ZFFilterResultActive "Active"
54#define ZFTOKEN_ZFFilterResultNotActive "NotActive"
58 case ZFFilterResultNotSpecified:
61 case ZFFilterResultActive:
64 case ZFFilterResultNotActive:
86 typedef SuperClass zfsuper; \ \
88 typedef ChildClass zfself; \
93template<
typename T_Element>
105template<
typename T_Public,
typename T_Internal = T_Public>
130 : _filters(ref._filters)
133 if(ref._customFilters !=
zfnull) {
134 this->_customFilters = zfnew(
135 _CustomFilterCallbacksType,
136 *ref._customFilters);
144 this->_filters = ref._filters;
145 if(this->_customFilters !=
zfnull) {
147 this->_customFilters =
zfnull;
149 if(ref._customFilters !=
zfnull) {
150 this->_customFilters =
zfnew(
151 _CustomFilterCallbacksType,
152 *ref._customFilters);
159 return this->_filters == ref._filters;
170 this->_filters.copyFrom(ref._filters);
171 if(ref._customFilters !=
zfnull) {
172 if(this->_customFilters ==
zfnull) {
173 this->_customFilters =
zfnew(_CustomFilterCallbacksType);
175 this->_customFilters->copyFrom(*ref._customFilters);
178 if(this->_customFilters !=
zfnull) {
191 ZF_IN T_Public
const &e
195 _ZFP_ZFFilterData<T_Internal> filterData;
197 filterData.filterType = filterType;
198 this->_filters.add(filterData);
206 ZF_IN T_Public
const &e
210 for(
zfindex i = 0; i < this->_filters.count(); ++i) {
212 && this->_filters.get(i).filterType == filterType
215 this->_filters.remove(i);
227 this->_filters.remove(index);
234 for(
zfindex i = 0; i < this->_filters.count(); ++i) {
237 this->_filters.removeAll();
239 this->_customFilters =
zfnull;
245 return this->_filters.count();
259 return this->_filters.get(index).element;
265 return this->_filters.get(index).filterType;
271 if(this->_customFilters ==
zfnull) {
272 this->_customFilters =
zfnew(_CustomFilterCallbacksType);
274 this->_customFilters->add(customFilterCallback);
281 if(this->_customFilters !=
zfnull) {
282 for(
zfindex i = 0; i < this->_customFilters->count(); ++i) {
283 if(this->_customFilters->get(i) == customFilterCallback) {
284 this->_customFilters->remove(i);
295 if(this->_customFilters !=
zfnull) {
296 this->_customFilters->remove(index);
304 if(this->_customFilters !=
zfnull) {
305 return this->_customFilters->count();
313 return this->_customFilters->get(index);
322 if(this->_customFilters !=
zfnull) {
323 for(
zfindex i = 0; i < this->_customFilters->count(); ++i) {
324 switch(this->_customFilters->get(i)(e)) {
325 case ZFFilterResultNotSpecified:
327 case ZFFilterResultActive:
329 case ZFFilterResultNotActive:
341 static void _ZFP_ZFFilterBase_contentInfoGetter(
343 ,
ZF_IN const _ZFP_ZFFilterData<T_Internal> &v
346 switch(v.filterType) {
347 case ZFFilterTypeInclude:
350 case ZFFilterTypeExclude:
363 this->_filters.objectInfoOfContentT(ret,
366 _ZFP_ZFFilterBase_contentInfoGetter);
389 ,
ZF_IN T_Public
const &from
400 ,
ZF_IN T_Internal
const &from
408 ZF_IN T_Internal
const &e1
409 ,
ZF_IN T_Public
const &e2
417 for(
zfindex i = 0; i < this->_filters.count(); ++i) {
418 const _ZFP_ZFFilterData<T_Internal> &
filter = this->_filters.get(i);
419 switch(
filter.filterType) {
420 case ZFFilterTypeInclude:
426 case ZFFilterTypeExclude:
436 return (!hasIncludeMode || included);
442 _FiltersType _filters;
443 _CustomFilterCallbacksType *_customFilters;
455template<typename T_Public, typename T_Internal = T_Public>
478 zfsuper::operator = (ref);
487 virtual void filterOnStore(
489 ,
ZF_IN T_Public
const &from
494 virtual void filterOnAccess(
496 ,
ZF_IN T_Internal
const &from
501 virtual zfbool filterOnCheckEqual(
502 ZF_IN T_Internal
const &e1
503 ,
ZF_IN T_Public
const &e2
530template<
typename T_Public,
typename T_Internal>
553 zfsuper::operator = (ref);
567 ,
ZF_IN T_Public
const &from
574 ,
ZF_IN T_Internal
const &from
580 ZF_IN T_Internal
const &e1
581 ,
ZF_IN T_Public
const &e2
583 return (e1.compare(e2) == 0);
#define ZFCoreCriticalShouldNotGoHere()
log that likes "[file function (line)] should not go here"
Definition ZFCoreLog_CommonLog.h:131
utilities for ZFFramework
zfbool zfsFromPointerT(zfstring &s, const void *p)
convert pointer value to string
Definition ZFCoreStringConvert.h:327
#define zfclassLikePOD
shows the class is not a POD type, but you may use it like a POD except memset it to 0
Definition ZFCoreTypeDef_ClassType.h:41
#define zfextend
dummy macro shows class inherit from another
Definition ZFCoreTypeDef_ClassType.h:53
#define zfpurevirtual
dummy macro shows that a method is pure virtual method
Definition ZFCoreTypeDef_ClassType.h:68
#define zfdelete(instance)
same as delete defined for future use
Definition ZFCoreTypeDef_ClassType.h:91
#define zfoverride
dummy macro shows that method override parent's method
Definition ZFCoreTypeDef_ClassType.h:58
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define ZF_IN_OPT
dummy macro that shows the param used as optional input
Definition ZFCoreTypeDef_ClassType.h:184
#define ZF_IN_OUT
dummy macro that shows the param used as required input and output
Definition ZFCoreTypeDef_ClassType.h:196
#define zfnew(Type,...)
same as new defined for future use
Definition ZFCoreTypeDef_ClassType.h:89
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
#define zftrue
bool true type
Definition ZFCoreTypeDef_CoreType.h:107
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZFOUTPUT_TYPE(T_Type, outputAction)
declare your custom type conversion to string, convenient for debug
Definition ZFCoreTypeDef_OtherType.h:221
#define ZFOUTPUT_TYPE_TEMPLATE(T_typenameList, T_Type, outputAction)
see ZFOUTPUT_TYPE
Definition ZFCoreTypeDef_OtherType.h:262
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
#define ZFM_EXPAND(...)
macro to expand a macro
Definition ZFCoreUtilMacro.h:148
ZFFilterBasic< zfidentity > ZFFilterForIdentity
number filter with zfidentity as filter type
Definition ZFFilter.h:524
ZFFilterForStringBase< const zfchar *, zfstring > ZFFilterForString
string filter with const zfchar * as public type and zfstring as internal storage type
Definition ZFFilter.h:591
#define ZFTOKEN_ZFFilterResultActive
string tokens
Definition ZFFilter.h:52
#define ZFTOKEN_ZFFilterResultNotActive
string tokens
Definition ZFFilter.h:54
ZFFilterBasic< zfindex > ZFFilterForIndex
number filter with zfindex as filter type
Definition ZFFilter.h:519
#define ZFFILTER_DECLARE(ChildClass, SuperClass)
declare a filter class
Definition ZFFilter.h:83
#define ZFTOKEN_ZFFilterTypeExclude
string tokens
Definition ZFFilter.h:26
ZFFilterType
filter type
Definition ZFFilter.h:19
ZFFilterBasic< zfint > ZFFilterForNumber
number filter with zfint as filter type
Definition ZFFilter.h:514
#define ZFTOKEN_ZFFilterTypeInclude
string tokens
Definition ZFFilter.h:24
ZFFilterResult
filter result for custom filter callback
Definition ZFFilter.h:44
#define ZFTOKEN_ZFFilterResultNotSpecified
string tokens
Definition ZFFilter.h:50
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
#define ZFTokenForContainerDefault()
see ZFTokenForContainer, modifyable, ZFTokenForContainerTrim by default
Definition ZFToken.h:107
light weight array
Definition ZFCoreArray.h:331
base class of filter
Definition ZFFilter.h:106
virtual ZFFilterBase< T_Public, T_Internal > & customFilterCallbackRemove(typename ZFFilterBase< T_Public, T_Internal >::CustomFilterCallback customFilterCallback)
remove custom filter callback
Definition ZFFilter.h:280
ZFFilterResult(* CustomFilterCallback)(T_Public const &e)
Definition ZFFilter.h:115
ZFFilterBase(void)
main constructor
Definition ZFFilter.h:121
virtual zfstring objectInfo(void) const
return object info
Definition ZFFilter.h:369
virtual void filterRemoveAll(void)
remove all contents of this filter
Definition ZFFilter.h:233
virtual zfbool filterPassed(T_Public const &e) const
return true if e is not filtered by this filter, see ZFFilterType
Definition ZFFilter.h:318
virtual ZFFilterBase< T_Public, T_Internal > & filterRemoveAt(zfindex index)
remove a element
Definition ZFFilter.h:225
virtual zfbool filterOnCheckEqual(T_Internal const &e1, T_Public const &e2) const=0
virtual ZFFilterType filterTypeAt(zfindex index) const
get filter type for filter data at index
Definition ZFFilter.h:264
ZFFilterBase(const ZFFilterBase< T_Public, T_Internal > &ref)
construct from another filter, retain only, you should use copyFrom to copy contents
Definition ZFFilter.h:129
virtual ZFFilterBase< T_Public, T_Internal > & customFilterCallbackRemove(zfindex index)
remove custom filter callback
Definition ZFFilter.h:294
ZFFilterBase< T_Public, T_Internal > zfself
typedef for self
Definition ZFFilter.h:109
virtual void copyFrom(ZFFilterBase< T_Public, T_Internal > const &ref)
copy from another filter
Definition ZFFilter.h:169
virtual void filterOnRemove(T_Internal &value) const
Definition ZFFilter.h:394
virtual T_Public filterElementAt(zfindex index) const
get element at index
Definition ZFFilter.h:250
virtual zfbool filterOnCheckValid(T_Public const &e) const
Definition ZFFilter.h:381
virtual zfbool filterOnCheckActive(T_Public const &e) const
Definition ZFFilter.h:414
virtual void objectInfoT(zfstring &ret) const
see objectInfo
Definition ZFFilter.h:362
virtual ZFFilterBase< T_Public, T_Internal > & filter(T_Public const &e, ZFFilterType filterType=ZFFilterTypeExclude)
add a element
Definition ZFFilter.h:190
virtual ZFFilterBase< T_Public, T_Internal > & customFilterCallbackAdd(typename ZFFilterBase< T_Public, T_Internal >::CustomFilterCallback customFilterCallback)
add a custom filter callback
Definition ZFFilter.h:270
virtual ZFFilterBase< T_Public, T_Internal >::CustomFilterCallback customFilterCallbackAt(zfindex index) const
get custom filter callback
Definition ZFFilter.h:312
virtual zfindex customFilterCallbackCount(void) const
get custom filter callback count
Definition ZFFilter.h:303
virtual ZFFilterBase< T_Public, T_Internal > & filterRemove(T_Public const &e, ZFFilterType filterType=ZFFilterTypeExclude)
remove a element
Definition ZFFilter.h:205
virtual void filterOnStore(T_Internal &to, T_Public const &from) const=0
virtual zfindex filterCount(void) const
get count of element
Definition ZFFilter.h:244
virtual void filterOnAccess(T_Public &to, T_Internal const &from) const=0
virtual T_Internal const & filterInternalAt(zfindex index) const
get filter data at index
Definition ZFFilter.h:258
basic filter
Definition ZFFilter.h:456
ZFFilterBasic(void)
see ZFFilterBasic
Definition ZFFilter.h:465
ZFFilterBasic(const ZFFilterBasic< T_Public, T_Internal > &ref)
see ZFFilterBasic
Definition ZFFilter.h:472
ZFFilterBase< T_Public, T_Internal > zfsuper
Definition ZFFilter.h:459
base class of string filter
Definition ZFFilter.h:531
virtual void filterOnStore(T_Internal &to, T_Public const &from) const
store public type to internal storage type
Definition ZFFilter.h:565
virtual zfbool filterOnCheckValid(T_Public const &e) const
return true if element is valid for a filter
Definition ZFFilter.h:561
ZFFilterForStringBase(void)
main constructor
Definition ZFFilter.h:540
ZFFilterBase< const zfchar *, zfstring > zfsuper
Definition ZFFilter.h:534
virtual void filterOnAccess(T_Public &to, T_Internal const &from) const
access public type from internal storage type
Definition ZFFilter.h:572
ZFFilterForStringBase(const ZFFilterForStringBase< T_Public, T_Internal > &ref)
see ZFFilterBase
Definition ZFFilter.h:547
virtual zfbool filterOnCheckEqual(T_Internal const &e1, T_Public const &e2) const
true if e1 is regarded as equal to e2
Definition ZFFilter.h:579