1 #ifndef BALL_LINALG_RANDOMACCESSFILTERITERATOR_H
2 #define BALL_LINALG_RANDOMACCESSFILTERITERATOR_H
4 #ifndef BALL_LINALG_BIDIRECTIONALFILTERITERATOR_H
19 template <
class Predicate,
class IteratorRandomAccess>
33 typedef typename IteratorRandomAccess::value_type
value_type;
35 typedef typename IteratorRandomAccess::container_type
Container;
37 typedef typename IteratorRandomAccess::value_type
DataType;
39 typedef typename IteratorRandomAccess::difference_type
Position;
41 typedef typename IteratorRandomAccess::traits_type
Traits;
43 typedef typename IteratorRandomAccess::pointer
pointer;
45 typedef typename IteratorRandomAccess::reference
reference;
218 template <
class Predicate,
class IteratorRandomAccess>
219 ConstRandomAccessFilterIterator<Predicate, IteratorRandomAccess>
operator +
223 return (tmp_iterator += distance);
232 template <
class Predicate,
class IteratorRandomAccess>
233 Distance ConstRandomAccessFilterIterator<Predicate, IteratorRandomAccess>::operator -
236 if (!Base::getTraits().isValid())
241 if (!b.getTraits().isValid())
246 if (Base::getTraits().getContainer() != b.getTraits().getContainer())
251 return Base::getTraits().getDistance(b.getTraits());
254 template <
class Predicate,
class IteratorRandomAccess>
258 if (!Base::getTraits().isValid())
265 return (*
this -= -distance);
267 Base::getTraits().forward(distance);
269 while (!Base::isEnd() && !Base::predicate_(Base::getTraits().getData()))
270 Base::getTraits().forward();
274 template <
class Predicate,
class IteratorRandomAccess>
278 if (Base::getTraits().isSingular())
285 return (*
this += -distance);
287 if (Base::getTraits().isEnd() ==
true)
289 Base::getTraits().toRBegin();
290 Base::getTraits().backward(distance - 1);
294 Base::getTraits().backward(distance);
296 while (!Base::isBegin() && !Base::predicate_(Base::getTraits().getData()))
297 Base::getTraits().backward();
302 template <
class Predicate,
class IteratorRandomAccess>
307 return (iterator += distance);
310 template <
class Predicate,
class IteratorRandomAccess>
315 return (iterator -= distance);
318 template <
class Predicate,
class IteratorRandomAccess>
322 if (!Base::getTraits().isValid())
327 if (!iterator.isValid())
332 if (Base::getTraits().getContainer() != iterator.getContainer())
338 return (Base::getTraits().operator < (iterator.getTraits()));
341 template <
class Predicate,
class IteratorRandomAccess>
345 if (!Base::getTraits().isValid())
350 if (!iterator.isValid())
355 if (Base::getTraits().getContainer() != iterator.getContainer())
360 return !(Base::getTraits().operator > (iterator.getTraits()));
363 template <
class Predicate,
class IteratorRandomAccess>
367 if (!Base::getTraits().isValid())
372 if (!iterator.isValid())
377 if (Base::getTraits().getContainer() != iterator.getContainer())
383 return !(Base::getTraits().operator < (iterator.getTraits()));
386 template <
class Predicate,
class IteratorRandomAccess>
390 if (!Base::getTraits().isValid())
395 if (!iterator.isValid())
400 if (Base::getTraits().getContainer() != iterator.getContainer())
406 return (Base::getTraits().operator > (iterator.getTraits()));
409 template <
class Predicate,
class IteratorRandomAccess>
418 template <
class Predicate,
class IteratorRandomAccess>
427 template <
class Predicate,
class IteratorRandomAccess>
436 template <
class Predicate,
class IteratorRandomAccess>
452 template <
class Predicate,
class IteratorRandomAccess>
463 typedef typename IteratorRandomAccess::container_type
Container;
465 typedef typename IteratorRandomAccess::value_type
value_type;
469 typedef typename IteratorRandomAccess::pointer
pointer;
471 typedef typename IteratorRandomAccess::reference
reference;
550 template <
class Predicate,
class IteratorRandomAccess>
551 RandomAccessFilterIterator<Predicate, IteratorRandomAccess>
559 template <
class Predicate,
class IteratorRandomAccess>
568 template <
class Predicate,
class IteratorRandomAccess>
577 template <
class Predicate,
class IteratorRandomAccess>
588 #endif // BALL_KERNEL_RANDOMACCESSFILTERITERATOR_H