join_view.h 553 B

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