33 #ifndef SHARK_CORE_ZIPPAIR_H 34 #define SHARK_CORE_ZIPPAIR_H 37 #include "Impl/boost_iterator_facade_fixed.hpp" 46 template<
class Pair,
class Iterator1,
class Iterator2>
51 template<
class T,
class U,
class Iterator1,
class Iterator2>
54 typename boost::iterator_reference<Iterator1>::type,
55 typename boost::iterator_reference<Iterator2>::type
69 template<
class Value,
class Iterator1,
class Iterator2>
71 PairIterator<Value,Iterator1,Iterator2>,
73 std::random_access_iterator_tag,
74 typename PairReference<Value,Iterator1,Iterator2>::type
83 template<
class IteratorT1,
class IteratorT2>
84 PairIterator(IteratorT1
const& iterator1, IteratorT2
const& iterator2)
85 : m_iterator1(iterator1),m_iterator2(iterator2){}
87 template<
class V,
class I1,
class I2>
89 : m_iterator1(iterator.m_iterator1),m_iterator2(iterator.m_iterator2){}
100 return std::make_pair(m_iterator1,m_iterator2);
104 friend class SHARK_ITERATOR_CORE_ACCESS;
115 void advance(std::ptrdiff_t n){
120 template<
class V,
class I1,
class I2>
122 return other.m_iterator1 - m_iterator1;
125 template<
class V,
class I1,
class I2>
127 return m_iterator1 == other.m_iterator1;
129 Reference dereference()
const {
130 return Reference(*m_iterator1,*m_iterator2);
133 Iterator1 m_iterator1;
134 Iterator2 m_iterator2;
139 template<
class PairType,
class Iterator1,
class Iterator2>
140 boost::iterator_range<
143 zipPairRange(Iterator1 begin1, Iterator1 end1, Iterator2 begin2,Iterator2 end2){
145 return boost::make_iterator_range(iterator(begin1,begin2),iterator(end1,end2));
148 template<
class PairType,
class Range1,
class Range2>
150 typedef boost::iterator_range<
153 typename boost::range_iterator<Range1>::type,
154 typename boost::range_iterator<Range2>::type
163 template<
class PairType,
class Range1,
class Range2>
164 typename PairRangeType<PairType, Range1, Range2>::type
166 return zipPairRange<PairType>(boost::begin(range1), boost::end(range1), boost::begin(range2),boost::end(range2));
175 template<
class PairType,
class Range1,
class Range2>
176 typename PairRangeType<PairType, Range1 const, Range2 const>::type
178 return zipPairRange<PairType>(boost::begin(range1), boost::end(range1), boost::begin(range2),boost::end(range2));