all.h 784 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //
  2. // owning_view.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 3/29/23.
  6. //
  7. #pragma once
  8. #include <stream/forward.h>
  9. #include <iterator/detail/macro.h>
  10. namespace stream::ranges {
  11. template <typename C> class all_view {
  12. private:
  13. C container_;
  14. public:
  15. all_view(C && container) : container_(FWD(container)) {}
  16. auto & base() const { return container_; }
  17. auto begin() const { return container_.begin(); }
  18. auto end() const { return container_.end(); }
  19. bool empty() const { return container_.empty(); }
  20. size_t size() const { return container_.size(); }
  21. };
  22. template <typename C> all_view(C &&) -> all_view<C>;
  23. }
  24. namespace stream::ranges::views {
  25. template <typename C> auto all(C && container) {
  26. return all_view(FWD(container));
  27. }
  28. }
  29. #include <iterator/detail/undef.h>