| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- //
- // iterator_fwd.h
- // iterator
- //
- // Created by Sam Jaffe on 2/18/17.
- //
- #pragma once
- #include <cstdlib>
- #include <iterator>
- namespace iterator::recursive {
- struct unbounded;
- template <size_t N, size_t I = 1> struct bounded;
- template <typename, typename = unbounded> class rimpl;
- }
- namespace iterator {
- enum class category : unsigned char {
- single_pass, // input/output iterator, for example
- forward,
- bidirectional,
- random_access
- };
- struct sentinel_t;
- // Iterator types
- template <typename Iterator> class end_aware_iterator;
- template <typename Iterator, typename Predicate> class filter_iterator;
- template <typename OuterIterator> class joining_iterator;
- template <typename Iterator> class unkeyed_iterator;
- template <typename... Iterators> class zip_iterator;
- template <typename Iterator>
- using recursive_iterator = recursive::rimpl<Iterator>;
- template <typename Iterator, std::size_t N>
- using recursive_iterator_n = recursive::rimpl<Iterator, recursive::bounded<N>>;
- template <typename CRTP, category C> class facade;
- template <typename Iterator, typename CRTP,
- typename = typename std::iterator_traits<Iterator>::iterator_category>
- class proxy;
- }
|