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