all.h 709 B

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