Util--  1.1
iterator_sequence.hh
Go to the documentation of this file.
1 #ifndef UTILMM_ITERATOR_SEQUENCE_HPP
2 #define UTILMM_ITERATOR_SEQUENCE_HPP
3 
4 #include <boost/iterator/iterator_facade.hpp>
5 #include <boost/iterator/iterator_traits.hpp>
6 
7 namespace utilmm {
13  template<typename It1, typename It2>
15  public boost::iterator_facade<
16  iterator_sequence<It1, It2>,
17  typename It1::value_type,
18  typename boost::iterator_traversal<It1>::type,
19  typename It1::reference >
20  {
22 
23  public:
37  It1 first, It1 first_end,
38  It2 second_begin, It2 second)
39  : m_first(first), m_first_end(first_end)
40  , m_second_begin(second_begin), m_second(second) {}
42 
43  private:
45 
46  It1 m_first, m_first_end;
47  It2 m_second_begin, m_second;
48 
49  typename Self::reference dereference() const
50  {
51  if (m_first == m_first_end)
52  return *m_second;
53  else
54  return *m_first;
55  }
56  bool equal(Self x) const
57  { return (x.m_first == m_first && x.m_second == m_second); }
58  void increment()
59  {
60  if (m_first == m_first_end)
61  ++m_second;
62  else
63  ++m_first;
64  }
65  void decrement()
66  {
67  if (m_second == m_second_begin)
68  --m_first;
69  else
70  --m_second;
71  }
72  void advance(typename Self::difference_type i)
73  {
74  if (i > 0)
75  {
76  typename Self::difference_type remains = m_first_end - m_first;
77  if (remains > i)
78  m_first += i;
79  else
80  {
81  m_first = m_first_end;
82  m_second += i - remains;
83  }
84  }
85  else
86  {
87  typename Self::difference_type remains = m_second_begin - m_second;
88  if (remains < i)
89  m_second += i;
90  else
91  {
92  m_second = m_second_begin;
93  m_first += i - remains;
94  }
95  }
96  }
97 
98  typename Self::difference_type distance_to(Self x) const
99  { return (x.m_first - m_first) + (x.m_second - m_second); }
100  };
101 }
102 #endif
iterator_sequence(It1 first, It1 first_end, It2 second_begin, It2 second)
Definition: iterator_sequence.hh:36
friend class boost::iterator_core_access
Definition: iterator_sequence.hh:44
Definition: auto_flag.hh:6
iterator_sequence()
Definition: iterator_sequence.hh:41
Definition: iterator_sequence.hh:14

Generated on Mon Oct 22 2018 18:39:28 for Util-- by doxygen 1.8.13
SourceForge.net Project Page