ranges.h 718 B

12345678910111213141516171819202122232425262728293031323334353637
  1. //
  2. // ranges.h
  3. // iterator
  4. //
  5. // Created by Sam Jaffe on 4/1/23.
  6. // Copyright © 2023 Sam Jaffe. All rights reserved.
  7. //
  8. #pragma once
  9. #include <ranges>
  10. namespace ranges {
  11. using namespace std::ranges;
  12. template <typename It, typename S, typename F>
  13. auto for_each(It it, S end, F consumer) {
  14. for (; it != end; ++it) {
  15. std::invoke(consumer, *it);
  16. }
  17. return std::make_pair(it, consumer);
  18. }
  19. template <typename It, typename S> auto distance(It it, S end) {
  20. typename std::iterator_traits<It>::difference_type diff{0};
  21. for_each(it, end, [&diff](auto const &) { ++diff; });
  22. return diff;
  23. }
  24. }
  25. namespace iterator::views {
  26. }
  27. namespace views {
  28. using namespace std::views;
  29. using namespace iterator::views;
  30. }