35 #ifndef VIGRA_FILTER_ITERATOR_HXX
36 #define VIGRA_FILTER_ITERATOR_HXX
38 #include <type_traits>
41 #include "iteratorfacade.hxx"
49 struct is_const_pointer
51 static bool const value =
false;
55 struct is_const_pointer<T const *>
57 static bool const value =
true;
60 template <
typename ITER>
61 struct is_const_iterator
63 typedef typename std::iterator_traits<ITER>::pointer pointer;
64 static bool const value = is_const_pointer<pointer>::value;
83 template <
typename PREDICATE,
typename ITER>
85 :
public ForwardIteratorFacade<FilterIterator<PREDICATE, ITER>,
86 typename std::iterator_traits<ITER>::value_type,
87 detail::is_const_iterator<ITER>::value>
91 typedef PREDICATE Predicate;
93 typedef typename std::iterator_traits<Iter>::value_type IterValueType;
95 typedef ForwardIteratorFacade<
SelfType,
97 detail::is_const_iterator<ITER>::value> Parent;
98 typedef typename Parent::value_type value_type;
99 typedef typename Parent::reference reference;
100 typedef reference
const const_reference;
115 void satisfy_predicate()
117 while (iter_ != end_ && !pred_(*iter_))
127 reference dereference()
const
134 return iter_ == other.iter_;
141 friend class vigra::IteratorFacadeCoreAccess;
145 template <
typename PREDICATE,
typename ITER>
146 FilterIterator<PREDICATE, ITER>
147 make_filter_iterator(PREDICATE pred, ITER iter, ITER end = ITER())
149 return FilterIterator<PREDICATE, ITER>(pred, iter, end);
This iterator creates a view of another iterator and skips elements that do not fulfill a given predi...
Definition: filter_iterator.hxx:84
FilterIterator(Predicate pred, Iter iter, Iter end=Iter())
Definition: filter_iterator.hxx:104