| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #pragma once
- #include <iterator/join_iterator.h>
- #include <stream/forward.h>
- #include <stream/detail/traits.h>
- #include <stream/view/interface.h>
- #include <stream/detail/macro.h>
- namespace stream::ranges {
- template <typename S>
- struct join_view
- : public view_interface<join_view<S>,
- iterator::joining_iterator<detail::begin_t<S>>,
- sentinel_t> {
- private:
- S stream_;
- public:
- join_view(S && stream) : stream_(FWD(stream)) {}
- auto begin() const { return iterator::joining_iterator(stream_); }
- auto end() const { return iterator::sentinel; }
- };
- template <typename S> join_view(S &&) -> join_view<S>;
- }
- namespace stream::ranges::views {
- struct join {
- template <typename Stream> friend auto operator|(Stream && stream, join) {
- return join_view(FWD(stream));
- }
- };
- }
- #include <stream/detail/undef.h>
|