aimstil  5.0.5
ordered_iterator.h
Go to the documentation of this file.
1 #ifndef TIL_ORDERED_ITERATOR_H_
2 #define TIL_ORDERED_ITERATOR_H_
3 
4 // includes from STL
5 #include <iterator>
6 
7 // includes from TIL
8 #include "til/traits.h"
9 
10 namespace til
11 {
12 
14  template < typename TIterator, typename TOrderIterator >
16  : public std::iterator<
17  typename std::iterator_traits<TOrderIterator>::iterator_category,
18  typename std::iterator_traits<TIterator>::value_type,
19  typename std::iterator_traits<TIterator>::difference_type,
20  typename std::iterator_traits<TIterator>::pointer,
21  typename std::iterator_traits<TIterator>::reference>
22  {
23  public: // typedefs
25  typedef std::iterator<
26  typename std::iterator_traits<TOrderIterator>::iterator_category,
27  typename std::iterator_traits<TIterator>::value_type,
28  typename std::iterator_traits<TIterator>::difference_type,
29  typename std::iterator_traits<TIterator>::pointer,
30  typename std::iterator_traits<TIterator>::reference> Base;
31  typedef typename Base::reference reference;
32 
33  public: // constructors
34 
37  Ordered_iterator(TIterator databegin, TOrderIterator orderbegin)
38  : Base()
39  , m_databegin(databegin)
40  , m_orderit(orderbegin)
41  {}
42 
43  public: // operators
44 
45  void operator++() { ++m_orderit; }
46  reference operator*() { return *this->current_iter(); }
47  reference operator->() { return *this->current_iter(); }
48  bool operator==(const Ordered_iterator & it) const { return this->current_iter() == it.current_iter(); }
49  bool operator!=(const Ordered_iterator & it) const { return !(*this == it); }
50 
51  private: // functions
52 
53  // TODO: adapt this for maps...
54  TIterator current_iter() { return m_databegin + *m_orderit; }
55 
56  private: // checks
57 
58  // check that TIterator is a random access iterator
61 
62  private: // data, input
63 
64  TIterator m_databegin;
65  TOrderIterator m_orderit;
66  };
67 
68  template < typename TCollection, typename TOrderIterator >
70  ordered_iterator(TOrderIterator obegin, TCollection & coll)
72 
73  template < typename TCollection, typename TOrderIterator >
75  ordered_iterator(TOrderIterator obegin, const TCollection & coll)
77 
78 } // namespace til
79 
80 
81 #endif /*PERMUATION_ITERATOR_H_*/
Ordered_iterator(TIterator databegin, TOrderIterator orderbegin)
Construct an Ordered_iterator from a random-access iterator on the beginning of the data and an itera...
std::iterator< typename std::iterator_traits< TOrderIterator >::iterator_category, typename std::iterator_traits< TIterator >::value_type, typename std::iterator_traits< TIterator >::difference_type, typename std::iterator_traits< TIterator >::pointer, typename std::iterator_traits< TIterator >::reference > Base
bool operator!=(const Ordered_iterator &it) const
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
Ordered_iterator< typename TCollection::iterator, TOrderIterator > ordered_iterator(TOrderIterator obegin, TCollection &coll)
Base::reference reference
Iterate through a random access container according to some predefined order.
Ordered_iterator< TIterator, TOrderIterator > Self
bool operator==(const Ordered_iterator &it) const