// // common_view.h // stream // // Created by Sam Jaffe on 3/30/23. // #pragma once #include #include #include #include #include namespace stream::ranges { template class common_view : public view_interface, common_iterator, detail::end_t>> { private: using iterator = common_iterator, detail::end_t>; private: S stream_; public: common_view(S && stream) : stream_(FWD(stream)) {} auto begin() const { return iterator(stream_.begin()); } auto end() const { return iterator(stream_.end()); } }; template common_view(S &&) -> common_view; } namespace stream::ranges::views { struct common { template friend auto operator|(Stream && stream, common) { if constexpr (detail::has_sentinal_v) { return common_view(FWD(stream)); } else { return FWD(stream); } } }; } #include