1 #ifndef MEMBER_ITERATOR_HPP
2 #define MEMBER_ITERATOR_HPP
16 typedef Iterator base_iterator;
49 bool operator==(
const Derived& other)
const {
50 return it == other.it;
53 bool operator!=(
const Derived& other)
const {
54 return it != other.it;
63 return static_cast<Derived&
>(*this);
72 return static_cast<Derived&
>(*this);
93 return static_cast<Derived&
>(*this);
114 return static_cast<Derived&
>(*this);
123 return static_cast<Derived&
>(*this);
126 bool operator<(
const Derived& other)
const {
127 return it < other.it;
130 bool operator>(
const Derived& other)
const {
131 return it > other.it;
134 bool operator<=(
const Derived& other)
const {
135 return it <= other.it;
138 bool operator>=(
const Derived& other)
const {
139 return it >= other.it;
177 return last.it - first.it;
229 template <class Iterator, class T, T std::iterator_traits<Iterator>::value_type::*member,
class Reference = T&,
232 :
public BaseIterator<Iterator, SelectMemberIterator<Iterator, T, member, Reference, Pointer> > {
288 return (*this->
it).*member;
294 return (*this->
it).*member;
301 return &((*this->
it).*member);
307 return &((*this->
it).*member);
317 template <class Iterator, class T, T remove_pointer<typename std::iterator_traits<Iterator>::value_type>::type::*member,
318 class Reference = T&,
class Pointer = T*>
320 :
public BaseIterator<Iterator, SelectMemberPointerIterator<Iterator, T, member, Reference, Pointer> > {
376 return (**this->
it).*member;
382 return (**this->
it).*member;
389 return &((**this->
it).*member);
395 return &((**this->
it).*member);
Definition: MemberIterator.hpp:15
Derived & operator--()
Prefix decrement operator.
Definition: MemberIterator.hpp:90
Derived & operator++()
Prefix increment operator.
Definition: MemberIterator.hpp:69
Pointer pointer
Type of a pointer on the values.
Definition: MemberIterator.hpp:348
Definition: MemberIterator.hpp:311
SelectMemberPointerIterator(const base_iterator &i)
Conversion from the base iterator.
Definition: MemberIterator.hpp:359
std::iterator_traits< Iterator >::difference_type difference_type
Type of the difference between two iterators.
Definition: MemberIterator.hpp:20
const reference operator*() const
Constant dereference operator.
Definition: MemberIterator.hpp:381
base_iterator base() const
Direct access to the base iterator.
Definition: MemberIterator.hpp:184
Derived & operator++(int)
Postfix increment operator.
Definition: MemberIterator.hpp:77
BaseIterator(const base_iterator &i)
Conversion from the base iterator.
Definition: MemberIterator.hpp:33
std::iterator_traits< Iterator >::difference_type difference_type
Type of the difference between two iterators.
Definition: MemberIterator.hpp:252
T value_type
Type of the value iterated on.
Definition: MemberIterator.hpp:336
BaseIterator< Iterator, SelectMemberPointerIterator< Iterator, T, member, Reference, Pointer > > Super
Type of the base class.
Definition: MemberIterator.hpp:324
reference operator*()
Dereference operator.
Definition: MemberIterator.hpp:287
std::iterator_traits< Iterator >::difference_type difference_type
Type of the difference between two iterators.
Definition: MemberIterator.hpp:340
SelectMemberPointerIterator(const SelectMemberPointerIterator &other)
Copy constructor.
Definition: MemberIterator.hpp:367
Derived & operator--(int)
Postfix decrement operator.
Definition: MemberIterator.hpp:98
T value_type
Type of the value iterated on.
Definition: MemberIterator.hpp:248
Pointer pointer
Type of a pointer on the values.
Definition: MemberIterator.hpp:260
Iterate over a container of structure, dereferencing only a member of it.
Definition: MemberIterator.hpp:231
SelectMemberIterator(const SelectMemberIterator &other)
Copy constructor.
Definition: MemberIterator.hpp:279
const reference operator*() const
Constant dereference operator.
Definition: MemberIterator.hpp:293
Iterator base_iterator
Type of the underlying iterator.
Definition: MemberIterator.hpp:240
SelectMemberPointerIterator()
Default constructor.
Definition: MemberIterator.hpp:353
std::iterator_traits< Iterator >::iterator_category iterator_category
Category of the iterator.
Definition: MemberIterator.hpp:244
Reference reference
Type of a reference on the values.
Definition: MemberIterator.hpp:344
pointer operator->()
Pointer-like arrow operator.
Definition: MemberIterator.hpp:300
Derived & operator-=(difference_type n)
In-place random decrement operator.
Definition: MemberIterator.hpp:120
BaseIterator(const BaseIterator &other)
Copy constructor.
Definition: MemberIterator.hpp:41
SelectMemberIterator(const base_iterator &i)
Conversion from the base iterator.
Definition: MemberIterator.hpp:271
BaseIterator< Iterator, SelectMemberIterator< Iterator, T, member, Reference, Pointer > > Super
Type of the base class.
Definition: MemberIterator.hpp:236
reference operator*()
Dereference operator.
Definition: MemberIterator.hpp:375
const pointer operator->() const
Pointer-like constant arrow operator.
Definition: MemberIterator.hpp:394
Definition: MemberIterator.hpp:319
friend difference_type operator-(const Derived &last, const Derived &first)
Distance between two iterators.
Definition: MemberIterator.hpp:176
SelectMemberIterator()
Default constructor.
Definition: MemberIterator.hpp:265
Iterator base_iterator
Type of the underlying iterator.
Definition: MemberIterator.hpp:328
std::iterator_traits< Iterator >::iterator_category iterator_category
Category of the iterator.
Definition: MemberIterator.hpp:332
Reference reference
Type of a reference on the values.
Definition: MemberIterator.hpp:256
Derived & operator=(const Derived ©)
Assignment operator.
Definition: MemberIterator.hpp:60
BaseIterator()
Default constructor.
Definition: MemberIterator.hpp:25
base_iterator it
Underlying iterator.
Definition: MemberIterator.hpp:192
Derived & operator+=(difference_type n)
In-place random increment operator.
Definition: MemberIterator.hpp:111
pointer operator->()
Pointer-like arrow operator.
Definition: MemberIterator.hpp:388
const pointer operator->() const
Pointer-like constant arrow operator.
Definition: MemberIterator.hpp:306