22 #ifndef DUAL_RANGE_HPP_INCLUDED
23 #define DUAL_RANGE_HPP_INCLUDED
40 template <
class IterationMode,
class It1,
class It2>
48 template <
class It1,
class It2>
50 public std::pair<It1, It2>
52 typedef std::pair<It1, It2> base_t;
82 return base_t::first != other.
get_first() ||
99 return base_t::second;
108 template <
class It1,
class It2>
126 base_t(it1, it2), m_begin(begin2), m_end(end2)
136 if (base_t::second == m_end)
138 base_t::second = m_begin;
153 template <
class IterationMode,
class OutIt,
class InIt>
166 dual_range(OutIt obegin, OutIt oend, InIt ibegin, InIt iend) :
167 m_obegin(obegin), m_oend(oend), m_ibegin(ibegin), m_iend(iend)
174 return begin_impl(IterationMode());
180 return end_impl(IterationMode());
187 if (m_obegin == m_oend || m_ibegin == m_iend)
189 return iterator(m_obegin, m_ibegin, m_ibegin, m_iend);
193 iterator begin_impl(iteration::diagonal)
const
195 return iterator(m_obegin, m_ibegin);
199 iterator end_impl(iteration::diadic)
const
201 return iterator(m_oend, m_ibegin, m_ibegin, m_iend);
205 iterator end_impl(iteration::diagonal)
const
232 template <
class IterationMode,
class OutIt,
class InIt>
233 dual_range<IterationMode, OutIt, InIt>
241 #endif // DUAL_RANGE_HPP_INCLUDED