forwards.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // iterator_fwd.h
  3. // iterator
  4. //
  5. // Created by Sam Jaffe on 2/18/17.
  6. //
  7. #pragma once
  8. #include <cstdlib>
  9. #include <iterator>
  10. namespace iterator::recursive {
  11. struct unbounded;
  12. template <size_t N, size_t I = 1> struct bounded;
  13. template <typename, typename = unbounded> class rimpl;
  14. }
  15. namespace iterator {
  16. enum class category : unsigned char {
  17. single_pass, // input/output iterator, for example
  18. forward,
  19. bidirectional,
  20. random_access
  21. };
  22. struct sentinel_t;
  23. // Iterator types
  24. template <typename Iterator> class end_aware_iterator;
  25. template <typename Iterator, typename Predicate> class filter_iterator;
  26. template <typename OuterIterator> class joining_iterator;
  27. template <typename Iterator> class unkeyed_iterator;
  28. template <typename... Iterators> class zip_iterator;
  29. template <typename Iterator>
  30. using recursive_iterator = recursive::rimpl<Iterator>;
  31. template <typename Iterator, std::size_t N>
  32. using recursive_iterator_n = recursive::rimpl<Iterator, recursive::bounded<N>>;
  33. template <typename CRTP, category C> class facade;
  34. template <typename Iterator, typename CRTP,
  35. typename = typename std::iterator_traits<Iterator>::iterator_category>
  36. class proxy;
  37. }