49class DualRandomIterator
52 typedef typename TupleRandomIteratorTraits<IteratorA>::value_type TypeA;
53 typedef typename TupleRandomIteratorTraits<IteratorB>::value_type TypeB;
56 typedef boost::tuple<TypeA, TypeB> value_type;
57 typedef ptrdiff_t difference_type;
58 typedef value_type* pointer;
59 typedef boost::tuple<TypeA&, TypeB&> reference;
60 typedef std::random_access_iterator_tag iterator_category;
61 typedef boost::tuple<const TypeA&, const TypeB&> const_reference;
64 DualRandomIterator() {}
65 DualRandomIterator(IteratorA i, IteratorB j)
70 DualRandomIterator& operator++()
76 DualRandomIterator& operator--()
82 DualRandomIterator operator++(
int)
84 DualRandomIterator tmp(*
this);
88 DualRandomIterator operator--(
int)
90 DualRandomIterator tmp(*
this);
95 bool operator==(
const DualRandomIterator& rhs)
const {
return m_i == rhs.m_i; }
96 bool operator!=(
const DualRandomIterator& rhs)
const {
return m_i != rhs.m_i; }
97 bool operator<(
const DualRandomIterator& rhs)
const {
return m_i < rhs.m_i; }
99 reference operator*() {
return reference(*m_i, *m_j); }
101 difference_type operator-(
const DualRandomIterator& rhs)
const {
return m_i - rhs.m_i; }
103 DualRandomIterator& operator+=(
const difference_type n)
109 DualRandomIterator& operator-=(
const difference_type n)
115 DualRandomIterator operator+(
const difference_type n)
const
117 return DualRandomIterator(m_i + n, m_j + n);
119 DualRandomIterator operator-(
const difference_type n)
const
121 return DualRandomIterator(m_i - n, m_j - n);
132class TripleRandomIterator
135 typedef typename TupleRandomIteratorTraits<IteratorA>::value_type TypeA;
136 typedef typename TupleRandomIteratorTraits<IteratorB>::value_type TypeB;
137 typedef typename TupleRandomIteratorTraits<IteratorC>::value_type TypeC;
140 typedef boost::tuple<TypeA, TypeB, TypeC> value_type;
141 typedef ptrdiff_t difference_type;
142 typedef value_type* pointer;
143 typedef boost::tuple<TypeA&, TypeB&, TypeC&> reference;
144 typedef std::random_access_iterator_tag iterator_category;
145 typedef boost::tuple<const TypeA&, const TypeB&, const TypeC&> const_reference;
148 TripleRandomIterator() {}
149 TripleRandomIterator(IteratorA i, IteratorB j, IteratorC k)
155 TripleRandomIterator& operator++()
162 TripleRandomIterator& operator--()
169 TripleRandomIterator operator++(
int)
171 TripleRandomIterator tmp(*
this);
175 TripleRandomIterator operator--(
int)
177 TripleRandomIterator tmp(*
this);
182 bool operator==(
const TripleRandomIterator& rhs)
const {
return m_i == rhs.m_i; }
183 bool operator!=(
const TripleRandomIterator& rhs)
const {
return m_i != rhs.m_i; }
184 bool operator<(
const TripleRandomIterator& rhs)
const {
return m_i < rhs.m_i; }
186 reference operator*() {
return reference(*m_i, *m_j, *m_k); }
188 difference_type operator-(
const TripleRandomIterator& rhs)
const
190 return m_i - rhs.m_i;
193 TripleRandomIterator& operator+=(
const difference_type n)
200 TripleRandomIterator& operator-=(
const difference_type n)
207 TripleRandomIterator operator+(
const difference_type n)
const
209 return TripleRandomIterator(m_i + n, m_j + n, m_k + n);
211 TripleRandomIterator operator-(
const difference_type n)
const
213 return TripleRandomIterator(m_i - n, m_j - n, m_k - n);
275 TupleIterator::value_type(1,1,1),
280 TupleIterator::value_type(3,1,1),