join.h 649 B

1234567891011121314151617181920212223242526272829303132
  1. #pragma once
  2. #include <iterator/join_iterator.h>
  3. #include <stream/forward.h>
  4. #include <stream/detail/macro.h>
  5. namespace stream::ranges {
  6. template <typename S> struct join_view {
  7. private:
  8. S stream_;
  9. public:
  10. join_view(S && stream) : stream_(FWD(stream)) {}
  11. auto begin() const { return iterator::joining_iterator(stream_); }
  12. auto end() const { return iterator::sentinel; }
  13. };
  14. template <typename S> join_view(S &&) -> join_view<S>;
  15. }
  16. namespace stream::ranges::views {
  17. struct join {
  18. template <typename Stream> friend auto operator|(Stream && stream, join) {
  19. return join_view(FWD(stream));
  20. }
  21. };
  22. }
  23. #include <stream/detail/undef.h>