فهرست منبع

chore: cleanup

Sam Jaffe 2 ماه پیش
والد
کامیت
b73c24cd61

+ 0 - 1
include/iterator/facade.h

@@ -1,6 +1,5 @@
 #pragma once
 
-#include <concepts>
 #include <iterator>
 #include <type_traits>
 

+ 0 - 8
include/iterator/forwards.h

@@ -7,7 +7,6 @@
 
 #pragma once
 
-#include <concepts>
 #include <cstdlib>
 #include <iterator>
 
@@ -18,13 +17,6 @@ template <typename, typename = unbounded> class rimpl;
 }
 
 namespace iterator {
-enum class category : unsigned char {
-  single_pass, // input/output iterator, for example
-  forward,
-  bidirectional,
-  random_access
-};
-
 struct sentinel_t;
 
 // Iterator types

+ 0 - 2
include/iterator/join_iterator.h

@@ -8,8 +8,6 @@
 #pragma once
 
 #include <iterator>
-#include <memory>
-#include <utility>
 
 #include <iterator/capture_iterator.h>
 #include <iterator/end_aware_iterator.h>

+ 22 - 0
include/iterator/recursive_iterator.h

@@ -205,4 +205,26 @@ auto make_recursive_iterator(C && collect) {
   return iterator::recursive_iterator_n<iterator::iterator_t<C>, Max>(collect);
 }
 
+namespace iterator::views {
+template <size_t N>
+struct recursive_n_fn : std::ranges::range_adaptor_closure<recursive_n_fn<N>> {
+  template <std::ranges::range Rng> auto operator()(Rng && rng) const {
+    auto begin =
+        make_recursive_iterator<N>(std::views::all(std::forward<Rng>(rng)));
+    return std::ranges::subrange(begin, decltype(begin)());
+  }
+};
+
+struct recursive_fn : std::ranges::range_adaptor_closure<recursive_fn> {
+  template <std::ranges::range Rng> auto operator()(Rng && rng) const {
+    auto begin =
+        make_recursive_iterator(std::views::all(std::forward<Rng>(rng)));
+    return std::ranges::subrange(begin, decltype(begin)());
+  }
+};
+
+template <size_t N> constexpr recursive_n_fn<N> recursive_n{};
+constexpr recursive_fn recursive;
+}
+
 #include <iterator/detail/undef.h>

+ 0 - 2
test/join_iterator_test.cxx

@@ -7,8 +7,6 @@
 using iterator::end_aware_iterator;
 using iterator::joining_iterator;
 
-using testing::Ne;
-
 TEST(JoinIteratorTest, FirstDereferencedElemIsTheFirstInTheChain) {
   std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
   EXPECT_EQ(*joining_iterator(mv), mv[0][0]);

+ 4 - 4
test/recursive_iterator_map_test.cxx

@@ -1,6 +1,7 @@
 #include "iterator/recursive_iterator.h"
 
 #include <map>
+#include <ranges>
 #include <tuple>
 #include <vector>
 
@@ -86,11 +87,10 @@ TEST(BoundRecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
       {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
   std::vector<std::tuple<int, int, std::map<int, int>>> const expected{
       {1, 1, {{1, 1}}}, {2, 2, {{2, 2}}}, {2, 3, {{3, 3}, {4, 4}}}};
-  auto rit = make_recursive_iterator<2>(map);
 
-  EXPECT_EQ((ranges::to<std::vector<std::tuple<int, int, std::map<int, int>>>>(
-                rit, iterator::sentinel)),
-            expected);
+  EXPECT_THAT(map | iterator::views::recursive_n<2> |
+                  std::ranges::to<std::vector>(),
+              testing::ElementsAreArray(expected));
 }
 
 TEST(BoundedRecursiveIteratorMapTest, CanMutatePointedToData) {