1 #ifndef BALL_LINALG_BIDIRECTIONALFILTERITERATOR_H
2 #define BALL_LINALG_BIDIRECTIONALFILTERITERATOR_H
4 #ifndef BALL_LINALG_FORWARDFILTERITERATOR_H
18 template <
class Predicate,
class IteratorB
idirectional>
30 typedef typename IteratorBidirectional::container_type
Container;
32 typedef typename IteratorBidirectional::value_type
DataType;
34 typedef typename IteratorBidirectional::difference_type
Position;
36 typedef typename IteratorBidirectional::traits_type
Traits;
38 typedef typename IteratorBidirectional::value_type
value_type;
42 typedef typename IteratorBidirectional::pointer
pointer;
44 typedef typename IteratorBidirectional::reference
reference;
179 template <
class Predicate,
class IteratorB
idirectional>
182 if (Base::getTraits().isSingular())
187 Base::getTraits().toBegin();
190 template <
class Predicate,
class IteratorB
idirectional>
193 if (Base::getTraits().isSingular())
198 Base::getTraits().toEnd();
201 template <
class Predicate,
class IteratorB
idirectional>
204 if (Base::getTraits().isSingular())
209 Base::getTraits().toRBegin();
212 template <
class Predicate,
class IteratorB
idirectional>
215 if (Base::getTraits().isSingular())
220 Base::getTraits().toREnd();
223 template <
class Predicate,
class IteratorB
idirectional>
227 if (!Base::getTraits().isValid())
232 Base::getTraits().forward();
234 while (!isEnd() && !Base::predicate_(Base::getTraits().getData()))
235 Base::getTraits().forward();
239 template <
class Predicate,
class IteratorB
idirectional>
243 if (!Base::getTraits().isValid())
253 template <
class Predicate,
class IteratorB
idirectional>
257 if (Base::getTraits().isSingular())
262 Base::getTraits().backward();
264 while (!isBegin() && !Base::predicate_(Base::getTraits().getData()))
265 Base::getTraits().backward();
269 template <
class Predicate,
class IteratorB
idirectional>
273 if (Base::getTraits().isSingular())
283 template <
class Predicate,
class IteratorB
idirectional>
292 template <
class Predicate,
class IteratorB
idirectional>
301 template <
class Predicate,
class IteratorB
idirectional>
310 template <
class Predicate,
class IteratorB
idirectional>
320 template <
class Predicate,
class IteratorB
idirectional>
331 typedef typename IteratorBidirectional::container_type
Container;
333 typedef typename IteratorBidirectional::value_type
DataType;
335 typedef typename IteratorBidirectional::difference_type
Position;
337 typedef typename IteratorBidirectional::traits_type
Traits;
339 typedef typename IteratorBidirectional::value_type
value_type;
343 typedef typename IteratorBidirectional::pointer
pointer;
345 typedef typename IteratorBidirectional::reference
reference;
432 template <
class Predicate,
class IteratorB
idirectional>
433 BidirectionalFilterIterator<Predicate, IteratorBidirectional>&
436 Base::operator ++ ();
440 template <
class Predicate,
class IteratorB
idirectional>
445 this->operator ++ ();
449 template <
class Predicate,
class IteratorB
idirectional>
453 Base::operator -- ();
457 template <
class Predicate,
class IteratorB
idirectional>
462 this->operator -- ();
466 template <
class Predicate,
class IteratorB
idirectional>
475 template <
class Predicate,
class IteratorB
idirectional>
484 template <
class Predicate,
class IteratorB
idirectional>
493 template <
class Predicate,
class IteratorB
idirectional>
502 template <
class Predicate,
class IteratorB
idirectional>
511 #endif // BALL_KERNEL_BIDIRECTIONALFILTERITERATOR_H