forwards.h 1.1 KB

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