27 #ifndef EMBB_ALGORITHMS_ZIP_ITERATOR_H_ 28 #define EMBB_ALGORITHMS_ZIP_ITERATOR_H_ 35 namespace algorithms {
52 template<
typename TypeA,
typename TypeB>
64 :first_(first), second_(second) {}
73 :first_(other.first_), second_(other.second_) {}
138 template<
typename IteratorA,
typename IteratorB>
146 typedef std::random_access_iterator_tag iterator_category;
147 typedef typename std::iterator_traits<IteratorA>::difference_type
149 typedef typename std::iterator_traits<IteratorA>::reference RefA;
150 typedef typename std::iterator_traits<IteratorB>::reference RefB;
151 typedef typename std::iterator_traits<IteratorA>::value_type ValueA;
152 typedef typename std::iterator_traits<IteratorB>::value_type ValueB;
169 :iter_a_(iter_a), iter_b_(iter_b) {}
180 return iter_a_ == other.iter_a_ && iter_b_ == other.iter_b_;
192 return iter_a_ != other.iter_a_ || iter_b_ != other.iter_b_;
218 difference_type distance
222 new_iterator.iter_a_ += distance;
223 new_iterator.iter_b_ += distance;
235 difference_type distance
239 new_iterator.iter_a_ -= distance;
240 new_iterator.iter_b_ -= distance;
251 difference_type distance
265 difference_type distance
284 assert(iter_a_ - other.iter_a_ == iter_b_ - other.iter_b_);
285 return iter_a_ - other.iter_a_;
311 template<
typename IteratorA,
typename IteratorB>
327 #endif // EMBB_ALGORITHMS_ZIP_ITERATOR_H_ Definition: lock_free_mpmc_queue.h:40
const TypeA First() const
Returns the first value of the pair.
Definition: zip_iterator.h:98
bool operator!=(const ZipIterator &other) const
Compares two zip iterators for inequality.
Definition: zip_iterator.h:188
const TypeB Second() const
Returns the second value of the pair.
Definition: zip_iterator.h:107
ZipPair(TypeA first, TypeB second)
Constructs a pair from two values.
Definition: zip_iterator.h:58
Container for the values of two dereferenced iterators.
Definition: zip_iterator.h:53
ZipIterator< IteratorA, IteratorB > & operator+=(difference_type distance)
Advances both iterators by the specified distance.
Definition: zip_iterator.h:250
difference_type operator-(const ZipIterator< IteratorA, IteratorB > &other) const
Computes the distance between two zip iterators.
Definition: zip_iterator.h:279
ZipIterator< IteratorA, IteratorB > & operator-=(difference_type distance)
Regresses both iterators by the specified distance.
Definition: zip_iterator.h:264
Zip container for two iterators.
Definition: zip_iterator.h:139
ZipPair(const ZipPair &other)
Copies a pair.
Definition: zip_iterator.h:69
ZipIterator(IteratorA iter_a, IteratorB iter_b)
Constructs a zip iterator from two iterators of any type.
Definition: zip_iterator.h:163
ZipIterator< IteratorA, IteratorB > operator-(difference_type distance) const
Returns an instance of a zip iterator where both iterators have been regressed by the specified dista...
Definition: zip_iterator.h:234
TypeA First()
Returns the first value of the pair.
Definition: zip_iterator.h:80
reference operator*() const
Dereferences the zip iterator.
Definition: zip_iterator.h:293
ZipIterator< IteratorA, IteratorB > operator+(difference_type distance) const
Returns an instance of a zip iterator where both iterators have been advanced by the specified distan...
Definition: zip_iterator.h:217
bool operator==(const ZipIterator &other) const
Compares two zip iterators for equality.
Definition: zip_iterator.h:176
ZipIterator< IteratorA, IteratorB > Zip(IteratorA iter_a, IteratorB iter_b)
Creates a zip iterator from two iterators.
Definition: zip_iterator.h:312
void operator--()
Applies prefix decrement on both iterators.
Definition: zip_iterator.h:206
TypeB Second()
Returns the second value of the pair.
Definition: zip_iterator.h:89
void operator++()
Applies prefix increment on both iterators.
Definition: zip_iterator.h:198