TransformIterator.h
Go to the documentation of this file.
1 #pragma once
2 #include <boost/iterator/iterator_adaptor.hpp>
3 #include <memory>
4 
5 namespace lanelet {
6 namespace internal {
7 template <typename RetType>
8 class Converter {
9  public:
10  template <typename InType>
11  RetType& convert(InType& t) const {
12  return static_cast<RetType&>(t);
13  }
14 };
15 
16 template <typename T>
17 class Converter<std::shared_ptr<const T>> {
18  public:
19  std::shared_ptr<const T>& convert(std::shared_ptr<T>& t) const {
20  val_ = t;
21  return val_;
22  }
23 
24  private:
26  mutable std::shared_ptr<const T> val_;
27 };
28 
29 template <typename T>
30 class Converter<const std::shared_ptr<const T>> {
31  public:
32  const std::shared_ptr<const T>& convert(const std::shared_ptr<T>& t) const {
33  val_ = t;
34  return val_;
35  }
36 
37  private:
38  mutable std::shared_ptr<const T> val_;
39 };
40 
41 template <typename RetType>
43  public:
44  template <typename PairType>
45  RetType& convert(PairType& p) const {
46  return c_.convert(p.second);
47  }
48 
49  private:
51 };
52 
53 template <typename Iterator, typename RetType, typename Converter = Converter<RetType>>
55  : public boost::iterator_adaptor<TransformIterator<Iterator, RetType, Converter>, Iterator, RetType> {
56  using Base = boost::iterator_adaptor<TransformIterator<Iterator, RetType, Converter>, Iterator, RetType>;
58 
59  public:
60  // Init and convert
61  TransformIterator() = default;
62  TransformIterator(Iterator iter) : Base{iter} {} // NOLINT
63  operator Iterator() const { return this->base(); } // NOLINT
64 
65  private:
66  typename Base::reference dereference() const { return converter_.convert(*this->base()); }
68 };
69 } // namespace internal
70 } // namespace lanelet
lanelet::internal::TransformIterator::dereference
Base::reference dereference() const
Definition: TransformIterator.h:66
lanelet::internal::PairConverter
Definition: TransformIterator.h:42
lanelet
Definition: Attribute.h:13
p
BasicPoint p
Definition: LineStringGeometry.cpp:196
lanelet::internal::TransformIterator::Base
boost::iterator_adaptor< TransformIterator< Iterator, RetType, Converter >, Iterator, RetType > Base
Definition: TransformIterator.h:56
lanelet::internal::Converter< std::shared_ptr< const T > >::val_
std::shared_ptr< const T > val_
Definition: TransformIterator.h:26
lanelet::internal::Converter< const std::shared_ptr< const T > >::val_
std::shared_ptr< const T > val_
Definition: TransformIterator.h:38
lanelet::internal::PairConverter::c_
Converter< RetType > c_
Definition: TransformIterator.h:50
lanelet::internal::Converter< const std::shared_ptr< const T > >::convert
const std::shared_ptr< const T > & convert(const std::shared_ptr< T > &t) const
Definition: TransformIterator.h:32
lanelet::internal::TransformIterator::converter_
Converter converter_
Definition: TransformIterator.h:67
lanelet::internal::TransformIterator::TransformIterator
TransformIterator()=default
lanelet::internal::TransformIterator
Definition: TransformIterator.h:54
lanelet::internal::TransformIterator::TransformIterator
TransformIterator(Iterator iter)
Definition: TransformIterator.h:62
lanelet::internal::Converter::convert
RetType & convert(InType &t) const
Definition: TransformIterator.h:11
std
Definition: primitives/Area.h:369
lanelet::internal::Converter
Definition: TransformIterator.h:8
lanelet::internal::Converter< std::shared_ptr< const T > >::convert
std::shared_ptr< const T > & convert(std::shared_ptr< T > &t) const
Definition: TransformIterator.h:19
lanelet::internal::PairConverter::convert
RetType & convert(PairType &p) const
Definition: TransformIterator.h:45
lanelet::internal::TransformIterator::iterator_core_access
friend class boost::iterator_core_access
Definition: TransformIterator.h:57


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