to.h 821 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. //
  2. // to.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 3/29/23.
  6. //
  7. #pragma once
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. namespace stream::ranges {
  12. template <typename C> class store {
  13. private:
  14. C & to_;
  15. public:
  16. store(C & to) : to_(to) {}
  17. template <typename Stream>
  18. friend void operator|(Stream && stream, store && store) {
  19. store.to_.emplace(store.to_.end(), stream.begin(), stream.end());
  20. }
  21. };
  22. template <template <typename...> class C> struct to_range {
  23. template <typename Stream> friend auto operator|(Stream && stream, to_range) {
  24. return C(stream.begin(), stream.end());
  25. }
  26. };
  27. template <template <typename...> class C> auto to() { return to_range<C>(); }
  28. auto to_vector() { return to<std::vector>(); }
  29. auto to_map() { return to<std::map>(); }
  30. auto to_set() { return to<std::set>(); }
  31. }