emlabcpp
modern opinionated embedded C++ library
convert.h
Go to the documentation of this file.
1 
24 #pragma once
25 
26 #include "../iterator.h"
27 
29 {
30 template < typename, typename >
31 class convert_iterator;
32 }
33 
34 template < typename T, typename Iterator >
35 struct std::iterator_traits< emlabcpp::iterators::convert_iterator< T, Iterator > >
36 {
37  using value_type = T;
38  using difference_type = std::ptrdiff_t;
42  using iterator_category = std::random_access_iterator_tag;
43 };
44 
45 namespace emlabcpp::iterators
46 {
47 template < typename T, typename Iterator >
48 class convert_iterator : public generic_iterator< convert_iterator< T, Iterator > >
49 {
50  Iterator iter_;
51 
52 public:
53  convert_iterator() = default;
54 
55  explicit convert_iterator( Iterator iter )
56  : iter_( std::move( iter ) )
57  {
58  }
59 
61  {
62  return static_cast< T >( *iter_ );
63  }
64 
65  T operator*() const
66  {
67  return static_cast< T >( *iter_ );
68  }
69 
70  convert_iterator& operator+=( std::ptrdiff_t offset )
71  {
72  std::advance( iter_, offset );
73  return *this;
74  }
75 
76  convert_iterator& operator-=( std::ptrdiff_t offset )
77  {
78  std::advance( iter_, -offset );
79  return *this;
80  }
81 
82  auto operator<=>( convert_iterator const& other ) const
83  {
84  return iter_ <=> other.iter_;
85  }
86 
87  bool operator==( convert_iterator const& other ) const
88  {
89  return iter_ == other.iter_;
90  }
91 
92  std::ptrdiff_t operator-( convert_iterator const& other )
93  {
94  return iter_ - other.iter_;
95  }
96 };
97 
98 } // namespace emlabcpp::iterators
auto operator<=>(convert_iterator const &other) const
Definition: convert.h:82
T operator*()
Definition: convert.h:60
bool operator==(convert_iterator const &other) const
Definition: convert.h:87
T operator*() const
Definition: convert.h:65
convert_iterator(Iterator iter)
Definition: convert.h:55
convert_iterator & operator+=(std::ptrdiff_t offset)
Definition: convert.h:70
std::ptrdiff_t operator-(convert_iterator const &other)
Definition: convert.h:92
convert_iterator & operator-=(std::ptrdiff_t offset)
Definition: convert.h:76
MIT License.
Definition: convert.h:29
std::variant< int64_t, float, bool, string_buffer > value_type
Definition: base.h:51
MIT License.
Definition: impl.h:31
generic_iterator simplifies custom iterator implementation using CRTP.
Definition: iterator.h:62
std::random_access_iterator_tag iterator_category
Definition: convert.h:42