ReverseAndForwardIterator.h
Go to the documentation of this file.
1 #pragma once
2 #include <boost/iterator/iterator_adaptor.hpp>
3 #include <cassert>
4 
5 namespace lanelet {
6 namespace internal {
7 
8 template <typename IteratorT>
9 class ReverseAndForwardIterator : public boost::iterator_adaptor<ReverseAndForwardIterator<IteratorT>, IteratorT> {
10  using Base = boost::iterator_adaptor<ReverseAndForwardIterator<IteratorT>, IteratorT>;
12 
13  public:
14  using Iterator = IteratorT;
15  using ReverseIterator = std::reverse_iterator<IteratorT>;
16 
19  riter.forward_ = false;
20  return riter;
21  }
22  ReverseAndForwardIterator() = default;
25  : Base(iter.base()), forward_{false} {}
26  operator Iterator() const { return this->base(); } // NOLINT
27 
28  bool reversed() const { return !forward_; }
29  bool forward() const { return forward_; }
30 
31  private:
32  void increment() { forward() ? ++iter() : --iter(); }
33  void decrement() { forward() ? --iter() : ++iter(); }
34  void advance(typename Base::difference_type d) { forward() ? iter() += d : iter() -= d; }
35  typename Base::reference dereference() const { return forward_ ? *this->base() : *ReverseIterator(this->base()); }
36 
37  template <class OtherIterator>
38  typename Base::difference_type distance_to( // NOLINT
40  assert(forward() == y.forward());
41  auto d = std::distance(this->base(), y.base());
42  return forward() ? d : -d;
43  }
44  inline IteratorT& iter() { return this->base_reference(); }
45  bool forward_{true};
46 };
47 } // namespace internal
48 } // namespace lanelet
lanelet::internal::ReverseAndForwardIterator::ReverseIterator
std::reverse_iterator< IteratorT > ReverseIterator
Definition: ReverseAndForwardIterator.h:15
lanelet::internal::ReverseAndForwardIterator::ReverseAndForwardIterator
ReverseAndForwardIterator()=default
lanelet
Definition: Attribute.h:13
lanelet::internal::ReverseAndForwardIterator::increment
void increment()
Definition: ReverseAndForwardIterator.h:32
lanelet::internal::ReverseAndForwardIterator::iter
IteratorT & iter()
Definition: ReverseAndForwardIterator.h:44
lanelet::internal::ReverseAndForwardIterator::Base
boost::iterator_adaptor< ReverseAndForwardIterator< IteratorT >, IteratorT > Base
Definition: ReverseAndForwardIterator.h:10
lanelet::internal::ReverseAndForwardIterator::forward
bool forward() const
Definition: ReverseAndForwardIterator.h:29
lanelet::internal::ReverseAndForwardIterator::dereference
Base::reference dereference() const
Definition: ReverseAndForwardIterator.h:35
lanelet::internal::ReverseAndForwardIterator::forward_
bool forward_
Definition: ReverseAndForwardIterator.h:45
lanelet::internal::ReverseAndForwardIterator::iterator_core_access
friend class boost::iterator_core_access
Definition: ReverseAndForwardIterator.h:11
lanelet::internal::ReverseAndForwardIterator::reversed
bool reversed() const
Definition: ReverseAndForwardIterator.h:28
lanelet::internal::ReverseAndForwardIterator::advance
void advance(typename Base::difference_type d)
Definition: ReverseAndForwardIterator.h:34
lanelet::internal::ReverseAndForwardIterator::ReverseAndForwardIterator
ReverseAndForwardIterator(Iterator iter)
Definition: ReverseAndForwardIterator.h:23
lanelet::internal::ReverseAndForwardIterator::Iterator
IteratorT Iterator
Definition: ReverseAndForwardIterator.h:14
lanelet::internal::ReverseAndForwardIterator::decrement
void decrement()
Definition: ReverseAndForwardIterator.h:33
lanelet::internal::ReverseAndForwardIterator::reversed
static ReverseAndForwardIterator reversed(Iterator iter)
Definition: ReverseAndForwardIterator.h:17
distance
Optional< double > distance
Definition: LineStringGeometry.cpp:168
d
double d
Definition: RegulatoryElementGeometry.cpp:69
lanelet::internal::ReverseAndForwardIterator::distance_to
Base::difference_type distance_to(const ReverseAndForwardIterator< OtherIterator > &y) const
Definition: ReverseAndForwardIterator.h:38
lanelet::internal::ReverseAndForwardIterator
Definition: ReverseAndForwardIterator.h:9
lanelet::internal::ReverseAndForwardIterator::ReverseAndForwardIterator
ReverseAndForwardIterator(ReverseIterator iter)
Definition: ReverseAndForwardIterator.h:24


lanelet2_core
Author(s): Fabian Poggenhans
autogenerated on Thu Mar 6 2025 03:25:52