util::SelectMemberIterator< Iterator, T, member, Reference, Pointer > Class Template Reference

Iterate over a container of structure, dereferencing only a member of it. More...

#include <util/member_iterator.h>

List of all members.

Public Types

typedef Iterator base_iterator
 Type of the underlying iterator.
typedef std::iterator_traits
< Iterator >::difference_type 
difference_type
 Type of the difference between two iterators.
typedef std::iterator_traits
< Iterator >
::iterator_category 
iterator_category
 Category of the iterator.
typedef Pointer pointer
 Type of a pointer on the values.
typedef Reference reference
 Type of a reference on the values.
typedef T value_type
 Type of the value iterated on.

Public Member Functions

base_iterator base () const
 Direct access to the base iterator.
 SelectMemberIterator (const SelectMemberIterator &other)
 Copy constructor.
 SelectMemberIterator (const base_iterator &i)
 Conversion from the base iterator.
 SelectMemberIterator ()
 Default constructor.
1 - Forward/input iterator methods

bool operator!= (const SelectMemberIterator &other) const
const reference operator* () const
 Constant dereference operator.
reference operator* ()
 Dereference operator.
SelectMemberIteratoroperator++ (int)
 Postfix increment operator.
SelectMemberIteratoroperator++ ()
 Prefix increment operator.
const pointer operator-> () const
 Pointer-like constant arrow operator.
pointer operator-> ()
 Pointer-like arrow operator.
SelectMemberIteratoroperator= (const SelectMemberIterator &copy)
 Assignment operator.
bool operator== (const SelectMemberIterator &other) const
3 - Random access methods

SelectMemberIteratoroperator+= (difference_type n)
 In-place random increment operator.
SelectMemberIteratoroperator-= (difference_type n)
 In-place random decrement operator.
bool operator< (const SelectMemberIterator &other) const
bool operator<= (const SelectMemberIterator &other) const
bool operator> (const SelectMemberIterator &other) const
bool operator>= (const SelectMemberIterator &other) const
2 - Bidirectional iterator methods

SelectMemberIteratoroperator-- (int)
 Postfix decrement operator.
SelectMemberIteratoroperator-- ()
 Prefix decrement operator.

Protected Attributes

base_iterator it
 Underlying iterator.

Friends

Functions for random access iterators

SelectMemberIterator operator+ (difference_type n, const SelectMemberIterator &it)
SelectMemberIterator operator+ (const SelectMemberIterator &it, difference_type n)
difference_type operator- (const SelectMemberIterator &last, const SelectMemberIterator &first)
 Distance between two iterators.
SelectMemberIterator operator- (difference_type n, const SelectMemberIterator &it)
SelectMemberIterator operator- (const SelectMemberIterator &it, difference_type n)

Detailed Description

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
class util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >

Iterate over a container of structure, dereferencing only a member of it.

This iterator is used when iterating over a container of a complexe structure. It allows for dereferencing only a member of that structure. A typical example is iterating over a map but dereferencing either the key or the value:

 std::map<int,double> my_map;
 typedef std::map<int,double>::iterator map_iterator;
 typedef std::map<int,double>::value_type map_value;
 util::SelectMemberIterator<map_iterator,const int, &map_value::first> key_iterator;
 util::SelectMemberIterator<map_iterator,int,&map_value::second> data_iterator;
 util::SelectMemberIterator<map_iterator,int,&map_value::second,const int&, const int*> data_const_iterator;
 // Fill in my_map
 for(key_iterator it = my_map.begin() ; it != my_map.end() ; ++it)
 {
   cout << *it << endl; // Output the keys !
 }
 for(data_iterator it = my_map.begin() ; it != my_map.end() ; ++it)
 {
   *it += 5;
   cout << *it << endl; // Output the data !
 }
 for(data_const_iterator it = my_map.begin() ; it != my_map.end() ; ++it)
 {
   // It is not possible to modify the value pointed
   cout << *it << endl; // Output the data !
 }

Definition at line 51 of file member_iterator.h.


Member Typedef Documentation

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef Iterator util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::base_iterator

Type of the underlying iterator.

Definition at line 56 of file member_iterator.h.

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef std::iterator_traits<Iterator>::difference_type util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::difference_type

Type of the difference between two iterators.

Definition at line 68 of file member_iterator.h.

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef std::iterator_traits<Iterator>::iterator_category util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::iterator_category

Category of the iterator.

Definition at line 60 of file member_iterator.h.

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef Pointer util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::pointer

Type of a pointer on the values.

Definition at line 76 of file member_iterator.h.

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef Reference util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::reference

Type of a reference on the values.

Definition at line 72 of file member_iterator.h.

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
typedef T util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::value_type

Type of the value iterated on.

Definition at line 64 of file member_iterator.h.


Constructor & Destructor Documentation

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::SelectMemberIterator (  )  [inline]

Default constructor.

Definition at line 81 of file member_iterator.h.

00081 {}

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::SelectMemberIterator ( const base_iterator i  )  [inline]

Conversion from the base iterator.

Definition at line 86 of file member_iterator.h.

00087       : it(i)
00088       { }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::SelectMemberIterator ( const SelectMemberIterator< Iterator, T, member, Reference, Pointer > &  other  )  [inline]

Copy constructor.

Definition at line 93 of file member_iterator.h.

00094       : it(other.it)
00095       {}


Member Function Documentation

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
base_iterator util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::base (  )  const [inline]
template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
const reference util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator* (  )  const [inline]

Constant dereference operator.

Definition at line 136 of file member_iterator.h.

00136 { return (*it).*member; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
reference util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator* (  )  [inline]

Dereference operator.

Definition at line 132 of file member_iterator.h.

00132 { return (*it).*member; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator++ ( int   )  [inline]

Postfix increment operator.

Definition at line 127 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00127 { SelectMemberIterator tmp(*this); ++it; return tmp; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator++ (  )  [inline]

Prefix increment operator.

Definition at line 123 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00123 { ++it; return *this; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator+= ( difference_type  n  )  [inline]

In-place random increment operator.

Definition at line 165 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00166     { it += n; return *this; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator-- ( int   )  [inline]

Postfix decrement operator.

Definition at line 157 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00157 { SelectMemberIterator tmp(*this); --it; return tmp; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator-- (  )  [inline]

Prefix decrement operator.

Definition at line 153 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00153 { --it; return *this; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator-= ( difference_type  n  )  [inline]

In-place random decrement operator.

Definition at line 171 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00172     { it -= n; return *this; }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
const pointer util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator-> (  )  const [inline]

Pointer-like constant arrow operator.

Definition at line 145 of file member_iterator.h.

00145 { return &((*it).*member); }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
pointer util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator-> (  )  [inline]

Pointer-like arrow operator.

Definition at line 141 of file member_iterator.h.

00141 { return &((*it).*member); }

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
SelectMemberIterator& util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::operator= ( const SelectMemberIterator< Iterator, T, member, Reference, Pointer > &  copy  )  [inline]

Assignment operator.

Definition at line 113 of file member_iterator.h.

References util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it.

00114     { it = copy.it; return *this; }


Friends And Related Function Documentation

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
difference_type operator- ( const SelectMemberIterator< Iterator, T, member, Reference, Pointer > &  last,
const SelectMemberIterator< Iterator, T, member, Reference, Pointer > &  first 
) [friend]

Distance between two iterators.

Definition at line 204 of file member_iterator.h.

00205     { return last.it - first.it; }


Member Data Documentation

template<class Iterator, class T, T std::iterator_traits< Iterator >::value_type::* member, class Reference = T&, class Pointer = T*>
base_iterator util::SelectMemberIterator< Iterator, T, member, Reference, Pointer >::it [protected]

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Fri May 31 15:38:35 2013 for VVE by  doxygen 1.6.3