| 1234567891011121314151617181920212223242526272829303132333435 |
- #pragma once
- #include <iterator>
- #include <tuple>
- #include "detail/arrow_proxy.h"
- namespace iterator {
- template <typename... Iterators> class zip_iterator {
- public:
- using value_type = std::tuple<typename Iterators::value_type...>;
- using reference = std::tuple<typename Iterators::reference...>;
- using pointer = void; // tuple cannot be accessed by member
- using difference_type =
- std::common_type_t<typename Iterators::difference_type...>;
- using iterator_category =
- std::common_type_t<typename Iterators::iterator_category...>;
- private:
- std::tuple<Iterators...> iterators_;
- public:
- zip_iterator() = default;
- zip_iterator(Iterators &&... iters) : iterators_(iters...) {}
- reference operator*() const {
- return reference(*std::get<Iterators>(iterators_)...);
- }
- };
- }
- template <typename... Iterators>
- iterator::zip_iterator<Iterators...> make_zip_iterator(Iterators &&... iters) {
- return {std::forward<Iterators>(iters)...};
- }
|