Преглед изворни кода

refactor: rename a few files
chore: eliminate macro.h/undef.h

Sam Jaffe пре 2 месеци
родитељ
комит
8246632b26

+ 5 - 10
include/iterator/capture_iterator.h

@@ -11,14 +11,11 @@
 #include <iterator/forwards.h>
 #include <iterator/proxy.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
-
 template <typename It>
-class capture_iterator : public Proxy<It, capture_iterator<It>> {
+class CaptureIterator : public Proxy<It, CaptureIterator<It>> {
 public:
-  using super_t = Proxy<It, capture_iterator<It>>;
+  using super_t = Proxy<It, CaptureIterator<It>>;
   using value_type = typename std::iterator_traits<It>::value_type;
   using difference_type = typename std::iterator_traits<It>::difference_type;
 
@@ -26,8 +23,8 @@ private:
   value_type cache_;
 
 public:
-  capture_iterator() = default;
-  capture_iterator(It it) : super_t(it) { cache_ = super_t::dereference(); }
+  CaptureIterator() = default;
+  CaptureIterator(It it) : super_t(it) { cache_ = super_t::dereference(); }
 
   value_type const & dereference() const { return cache_; }
 
@@ -53,8 +50,6 @@ public:
   }
 };
 
-template <typename It> capture_iterator(It) -> capture_iterator<It>;
+template <typename It> CaptureIterator(It) -> CaptureIterator<It>;
 
 }
-
-#include <iterator/detail/undef.h>

+ 0 - 25
include/iterator/detail/macro.h

@@ -1,25 +0,0 @@
-//
-//  macro.h
-//  iterator
-//
-//  Created by Sam Jaffe on 4/1/23.
-//  Copyright © 2023 Sam Jaffe. All rights reserved.
-//
-
-#ifndef _ITERATOR_MACRO_H
-#define _ITERATOR_MACRO_H
-
-#define FWD(x) std::forward<decltype(x)>(x)
-
-#define REQUIRES_T(trait, rval, ...) std::enable_if_t<trait, rval>
-#define REQUIRES(trait) typename = REQUIRES_T(trait, void)
-
-#define SFINAE(trait) template <bool _ = true, REQUIRES(trait && _)>
-
-#define VAL(X) std::declval<X>()
-#define DEREF_TYPE(X) decltype(*VAL(X))
-#define TYPE(X, EXPR) decltype(VAL(X).EXPR)
-#define EXISTS(EXPR) std::void_t<decltype(EXPR)>
-#define DEFER(TYPE) (std::is_void_v<TYPE> || true)
-
-#endif

+ 0 - 21
include/iterator/detail/undef.h

@@ -1,21 +0,0 @@
-//
-//  undef.h
-//  iterator
-//
-//  Created by Sam Jaffe on 4/1/23.
-//  Copyright © 2023 Sam Jaffe. All rights reserved.
-//
-
-#ifdef _ITERATOR_MACRO_H
-#undef _ITERATOR_MACRO_H
-
-#undef FWD
-#undef SFINAE
-#undef REQUIRES
-#undef REQUIRES_T
-#undef EXISTS
-#undef TYPE
-#undef DEREF_TYPE
-#undef VAL
-
-#endif

+ 0 - 4
include/iterator/end_aware_iterator.h

@@ -12,8 +12,6 @@
 #include <iterator/proxy.h>
 #include <iterator/sentinel.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 /**
  * @class EndAwareIterator
@@ -70,5 +68,3 @@ template <typename It>
 EndAwareIterator(EndAwareIterator<It>, EndAwareIterator<It>)
     -> EndAwareIterator<It>;
 }
-
-#include <iterator/detail/undef.h>

+ 11 - 13
include/iterator/indexed_iterator.h

@@ -12,25 +12,23 @@
 #include <iterator/facade.h>
 #include <iterator/forwards.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename It>
-class indexed_iterator : public Facade<indexed_iterator<It>> {
+class EnumerateIterator : public Facade<EnumerateIterator<It>> {
 public:
-  using reference = std::pair<size_t, DEREF_TYPE(It)>;
+  using reference = std::pair<size_t, std::iter_reference_t<It>>;
   using difference_type = typename std::iterator_traits<It>::difference_type;
 
 private:
-  using super_t = Facade<indexed_iterator<It>>;
+  using super_t = Facade<EnumerateIterator<It>>;
 
 public:
-  indexed_iterator() = default;
-  indexed_iterator(It base) : base_(base) {}
-  indexed_iterator(It base, size_t idx) : base_(base), index_(idx) {}
+  EnumerateIterator() = default;
+  EnumerateIterator(It base) : base_(base) {}
+  EnumerateIterator(It base, size_t idx) : base_(base), index_(idx) {}
 
   template <typename O>
-  indexed_iterator(indexed_iterator<O> const & oiter)
+  EnumerateIterator(EnumerateIterator<O> const & oiter)
       : base_(oiter.base_), index_(oiter.index_) {}
 
   reference dereference() const { return {index_, *base_}; }
@@ -56,11 +54,11 @@ public:
     index_ += off;
   }
 
-  bool equal_to(indexed_iterator const & other) const {
+  bool equal_to(EnumerateIterator const & other) const {
     return base_ == other.base_;
   }
 
-  difference_type distance_to(indexed_iterator const & other) const
+  difference_type distance_to(EnumerateIterator const & other) const
     requires(std::random_access_iterator<It>)
   {
     return other.base_ - base_;
@@ -78,6 +76,6 @@ private:
   size_t index_{0};
 };
 
-template <typename It> indexed_iterator(It) -> indexed_iterator<It>;
-template <typename It> indexed_iterator(It, size_t) -> indexed_iterator<It>;
+template <typename It> EnumerateIterator(It) -> EnumerateIterator<It>;
+template <typename It> EnumerateIterator(It, size_t) -> EnumerateIterator<It>;
 }

+ 0 - 4
include/iterator/facade.h

@@ -6,8 +6,6 @@
 #include <iterator/concepts.h>
 #include <iterator/detail/arrow_proxy.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename CRTP> class Facade {
 private:
@@ -143,5 +141,3 @@ struct std::iterator_traits<It> {
           std::conditional_t<::iterator::single_pass<It>, input_iterator_tag,
                              forward_iterator_tag>>>;
 };
-
-#include <iterator/detail/undef.h>

+ 0 - 4
include/iterator/filter_iterator.h

@@ -13,8 +13,6 @@
 #include <iterator/facade.h>
 #include <iterator/forwards.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename Iter, typename Pred>
 class FilterIterator : public Facade<FilterIterator<Iter, Pred>> {
@@ -76,5 +74,3 @@ FilterIterator(EndAwareIterator<It>, P) -> FilterIterator<It, P>;
 template <typename It, typename P>
 FilterIterator(It, It, P) -> FilterIterator<It, P>;
 }
-
-#include <iterator/detail/undef.h>

+ 5 - 1
include/iterator/forwards.h

@@ -14,8 +14,10 @@ namespace iterator {
 struct sentinel_t;
 
 // Iterator types
+template <typename It> class CaptureIterator;
 template <typename It> class EndAwareIterator;
-template <typename It, typename Predicate> class FilterIterator;
+template <typename It> class EnumerateIterator;
+template <typename It, typename Pred> class FilterIterator;
 template <typename OIt> class JoinIterator;
 template <typename It> class ValuesIterator;
 template <typename... Its> class ZipIterator;
@@ -28,6 +30,8 @@ struct bounded {};
 template <typename It, typename MaxDepth = unbounded> class RecursiveIterator;
 template <typename It, size_t N>
 using RecursiveIteratorN = RecursiveIterator<It, bounded<N>>;
+template <typename It, typename Projs, typename MaxDepth>
+class ProjectingRecursiveIterator;
 
 template <typename CRTP> class Facade;
 

+ 4 - 7
include/iterator/join_iterator.h

@@ -14,22 +14,21 @@
 #include <iterator/facade.h>
 #include <iterator/forwards.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename It> class JoinIterator : public Facade<JoinIterator<It>> {
 private:
   template <typename Ot> friend class JoinIterator;
-  constexpr static bool requires_caching = !std::is_reference_v<DEREF_TYPE(It)>;
+  constexpr static bool requires_caching =
+      !std::is_reference_v<std::iter_reference_t<It>>;
 
 public:
   using sentinel_type = sentinel_t;
   using outer_iterator_t =
       std::conditional_t<requires_caching,
-                         capture_iterator<EndAwareIterator<It>>,
+                         CaptureIterator<EndAwareIterator<It>>,
                          EndAwareIterator<It>>;
   using inner_iterator_t =
-      EndAwareIterator<iterator_t<DEREF_TYPE(outer_iterator_t)>>;
+      EndAwareIterator<iterator_t<std::iter_reference_t<outer_iterator_t>>>;
 
 private:
   outer_iterator_t outer_;
@@ -93,5 +92,3 @@ private:
 template <typename C> JoinIterator(C &) -> JoinIterator<iterator_t<C>>;
 template <typename JI> JoinIterator(EndAwareIterator<JI>) -> JoinIterator<JI>;
 }
-
-#include <iterator/detail/undef.h>

+ 0 - 3
include/iterator/cascade_iterator.h

@@ -10,9 +10,6 @@
 #include <iterator/recursive_iterator.h>
 
 namespace iterator {
-template <typename It, typename Projs, typename MaxDepth>
-class ProjectingRecursiveIterator;
-
 template <typename It, typename... Projs, typename MaxDepth>
 class ProjectingRecursiveIterator<It, detail::Projections<Projs...>, MaxDepth>
     : public RecursiveHelper<It, MaxDepth, detail::Projections<Projs...>>::type,

+ 8 - 8
include/iterator/proxy.h

@@ -3,8 +3,6 @@
 #include <iterator/facade.h>
 #include <iterator/forwards.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename It, typename Self, typename Cat>
 class Proxy : public Facade<Self> {
@@ -17,7 +15,8 @@ private:
 public:
   Proxy() = default;
   Proxy(It impl) : impl_(impl) {}
-  template <typename... Args> Proxy(Args &&... args) : impl_(FWD(args)...) {}
+  template <typename... Args>
+  Proxy(Args &&... args) : impl_(std::forward<Args>(args)...) {}
 
   decltype(auto) dereference() const { return *impl_; }
   void increment() { ++impl_; }
@@ -40,7 +39,8 @@ private:
 public:
   Proxy() = default;
   Proxy(It impl) : impl_(impl) {}
-  template <typename... Args> Proxy(Args &&... args) : impl_(FWD(args)...) {}
+  template <typename... Args>
+  Proxy(Args &&... args) : impl_(std::forward<Args>(args)...) {}
 
   decltype(auto) dereference() const { return *impl_; }
   void increment() { ++impl_; }
@@ -63,7 +63,8 @@ private:
 public:
   Proxy() = default;
   Proxy(It impl) : impl_(impl) {}
-  template <typename... Args> Proxy(Args &&... args) : impl_(FWD(args)...) {}
+  template <typename... Args>
+  Proxy(Args &&... args) : impl_(std::forward<Args>(args)...) {}
 
   decltype(auto) dereference() const { return *impl_; }
   void increment() { ++impl_; }
@@ -90,7 +91,8 @@ private:
 public:
   Proxy() = default;
   Proxy(It impl) : impl_(impl) {}
-  template <typename... Args> Proxy(Args &&... args) : impl_(FWD(args)...) {}
+  template <typename... Args>
+  Proxy(Args &&... args) : impl_(std::forward<Args>(args)...) {}
 
   decltype(auto) dereference() const { return *impl_; }
   void advance(difference_type off) { impl_ += off; }
@@ -113,5 +115,3 @@ protected:
   auto impl() const { return impl_; }
 };
 }
-
-#include <iterator/detail/undef.h>

+ 0 - 4
include/iterator/recursive_iterator.h

@@ -18,8 +18,6 @@
 #include <iterator/facade.h>
 #include <iterator/forwards.h>
 
-#include <iterator/detail/macro.h>
-
 namespace iterator {
 template <typename Tuple, typename Projs, typename Indices> class RecursiveBase;
 template <typename... It, typename... Projs, size_t... Is>
@@ -197,5 +195,3 @@ struct recursive_fn : std::ranges::range_adaptor_closure<recursive_fn> {
 template <size_t N> constexpr recursive_n_fn<N> recursive_n{};
 constexpr recursive_fn recursive;
 } // namespace iterator::views
-
-#include <iterator/detail/undef.h>

include/iterator/unkeyed_iterator.h → include/iterator/values_iterator.h


+ 9 - 12
include/iterator/zip_iterator.h

@@ -7,17 +7,17 @@
 #include <iterator/forwards.h>
 
 namespace iterator::detail {
-template <typename Tuple, typename IS> class zip_iterator_impl;
+template <typename Tuple, typename IS> class ZipImpl;
 
 template <typename... Ts, size_t... Is>
-class zip_iterator_impl<std::tuple<Ts...>, std::index_sequence<Is...>> {
+class ZipImpl<std::tuple<Ts...>, std::index_sequence<Is...>> {
 public:
   using difference_type =
       std::common_type_t<typename std::iterator_traits<Ts>::difference_type...>;
 
 public:
-  zip_iterator_impl() = default;
-  zip_iterator_impl(Ts... iters) : _data(iters...) {}
+  ZipImpl() = default;
+  ZipImpl(Ts... iters) : _data(iters...) {}
 
   auto dereference() const {
     return std::forward_as_tuple(*std::get<Is>(_data)...);
@@ -37,11 +37,9 @@ public:
     [[maybe_unused]] auto l = {((std::get<Is>(_data) += d), 0)...};
   }
 
-  bool equal_to(zip_iterator_impl const & other) const {
-    return _data == other._data;
-  }
+  bool equal_to(ZipImpl const & other) const { return _data == other._data; }
 
-  auto distance_to(zip_iterator_impl const & other) const
+  auto distance_to(ZipImpl const & other) const
     requires(std::random_access_iterator<Ts> && ...)
   {
     return std::get<0>(other._data) - std::get<0>(_data);
@@ -56,15 +54,14 @@ namespace iterator {
 template <typename... Ts>
 using index_sequence = decltype(std::make_index_sequence<sizeof...(Ts)>{});
 template <typename... Ts>
-using zip_impl =
-    detail::zip_iterator_impl<std::tuple<Ts...>, index_sequence<Ts...>>;
+using ZipImpl = detail::ZipImpl<std::tuple<Ts...>, index_sequence<Ts...>>;
 
 template <typename... Iters>
-class ZipIterator : public zip_impl<Iters...>,
+class ZipIterator : public ZipImpl<Iters...>,
                     public Facade<ZipIterator<Iters...>> {
 public:
   ZipIterator() = default;
-  ZipIterator(Iters... iters) : zip_impl<Iters...>(iters...) {}
+  ZipIterator(Iters... iters) : ZipImpl<Iters...>(iters...) {}
 };
 
 template <typename... It> ZipIterator(It...) -> ZipIterator<It...>;

+ 24 - 32
iterator.xcodeproj/project.pbxproj

@@ -7,38 +7,36 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
-		CD0AED842E836E1900E8B05D /* cascade_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0AED832E836E1900E8B05D /* cascade_iterator.h */; };
+		CD0AED842E836E1900E8B05D /* projecting_recursive_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0AED832E836E1900E8B05D /* projecting_recursive_iterator.h */; };
 		CD0AED892E836E4600E8B05D /* recursive_expander.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0AED882E836E4600E8B05D /* recursive_expander.h */; };
 		CD0AED8B2E836E9F00E8B05D /* projection_tuple.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0AED8A2E836E9F00E8B05D /* projection_tuple.h */; };
 		CD0AED8D2E836EF200E8B05D /* capture_fn.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0AED8C2E836EF200E8B05D /* capture_fn.h */; };
-		CD0AED8F2E83FFC400E8B05D /* cascade_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD0AED8E2E83FFC400E8B05D /* cascade_iterator_test.cxx */; };
+		CD0AED8F2E83FFC400E8B05D /* projecting_recursive_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD0AED8E2E83FFC400E8B05D /* projecting_recursive_iterator_test.cxx */; };
 		CD41AFE32E7F13E4004F3E51 /* concepts.h in Headers */ = {isa = PBXBuildFile; fileRef = CD41AFE22E7F0434004F3E51 /* concepts.h */; };
 		CD41AFE42E7F13E4004F3E51 /* forwards.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6122858128C004D5353 /* forwards.h */; };
 		CD41AFE52E7F13E4004F3E51 /* facade.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6132858128C004D5353 /* facade.h */; };
 		CD41AFE62E7F13E4004F3E51 /* proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61C2858128C004D5353 /* proxy.h */; };
 		CD41AFE72E7F13E4004F3E51 /* sentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5A8E7329D7910D008C2A4F /* sentinel.h */; };
 		CD41AFE82E7F13E4004F3E51 /* arrow_proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61A2858128C004D5353 /* arrow_proxy.h */; };
-		CD41AFE92E7F13E4004F3E51 /* macro.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5AEB3129D8885400A390A4 /* macro.h */; };
-		CD41AFEC2E7F13E4004F3E51 /* undef.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5AEB3229D8886200A390A4 /* undef.h */; };
 		CD41AFED2E7F13E4004F3E51 /* capture_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CD5AEB3329D8956600A390A4 /* capture_iterator.h */; };
 		CD41AFEE2E7F13E4004F3E51 /* end_aware_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61B2858128C004D5353 /* end_aware_iterator.h */; };
 		CD41AFEF2E7F13E4004F3E51 /* filter_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61E2858128C004D5353 /* filter_iterator.h */; };
-		CD41AFF02E7F13E4004F3E51 /* indexed_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6142858128C004D5353 /* indexed_iterator.h */; };
+		CD41AFF02E7F13E4004F3E51 /* enumerate_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6142858128C004D5353 /* enumerate_iterator.h */; };
 		CD41AFF12E7F13E4004F3E51 /* join_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61F2858128C004D5353 /* join_iterator.h */; };
 		CD41AFF22E7F13E4004F3E51 /* recursive_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6162858128C004D5353 /* recursive_iterator.h */; };
-		CD41AFF32E7F13E4004F3E51 /* unkeyed_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6152858128C004D5353 /* unkeyed_iterator.h */; };
+		CD41AFF32E7F13E4004F3E51 /* values_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B6152858128C004D5353 /* values_iterator.h */; };
 		CD41AFF42E7F13E4004F3E51 /* zip_iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = CDA2B61D2858128C004D5353 /* zip_iterator.h */; };
 		CD5AEB3529D897DD00A390A4 /* capture_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD5AEB3429D897DD00A390A4 /* capture_iterator_test.cxx */; };
 		CDA2B62028581295004D5353 /* iterator in Headers */ = {isa = PBXBuildFile; fileRef = CDCB3BBC24E1CDE40029B771 /* iterator */; settings = {ATTRIBUTES = (Public, ); }; };
 		CDCB3BCA24E1D39B0029B771 /* GoogleMock.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CDEC1E09235167920091D9F2 /* GoogleMock.framework */; };
 		CDCB3BD624E1D5320029B771 /* join_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BCD24E1D5320029B771 /* join_iterator_test.cxx */; };
-		CDCB3BD724E1D5320029B771 /* unkeyed_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BCE24E1D5320029B771 /* unkeyed_iterator_test.cxx */; };
+		CDCB3BD724E1D5320029B771 /* values_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BCE24E1D5320029B771 /* values_iterator_test.cxx */; };
 		CDCB3BD824E1D5320029B771 /* recursive_iterator_vector_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BCF24E1D5320029B771 /* recursive_iterator_vector_test.cxx */; };
 		CDCB3BD924E1D5320029B771 /* recursive_iterator_accessors_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD024E1D5320029B771 /* recursive_iterator_accessors_test.cxx */; };
 		CDCB3BDA24E1D5320029B771 /* recursive_iterator_mixed_container_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD124E1D5320029B771 /* recursive_iterator_mixed_container_test.cxx */; };
 		CDCB3BDB24E1D5320029B771 /* end_aware_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD224E1D5320029B771 /* end_aware_iterator_test.cxx */; };
 		CDCB3BDC24E1D5320029B771 /* filter_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD324E1D5320029B771 /* filter_iterator_test.cxx */; };
-		CDCB3BDD24E1D5320029B771 /* indexed_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD424E1D5320029B771 /* indexed_iterator_test.cxx */; };
+		CDCB3BDD24E1D5320029B771 /* enumerate_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD424E1D5320029B771 /* enumerate_iterator_test.cxx */; };
 		CDCB3BDE24E1D5320029B771 /* recursive_iterator_map_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BD524E1D5320029B771 /* recursive_iterator_map_test.cxx */; };
 		CDCB3BFC24E327CF0029B771 /* recursive_iterator_single_level_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3BFB24E327CF0029B771 /* recursive_iterator_single_level_test.cxx */; };
 		CDCB3C0324E33A1E0029B771 /* zip_iterator_test.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CDCB3C0224E33A1E0029B771 /* zip_iterator_test.cxx */; };
@@ -83,24 +81,22 @@
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
-		CD0AED832E836E1900E8B05D /* cascade_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cascade_iterator.h; sourceTree = "<group>"; };
+		CD0AED832E836E1900E8B05D /* projecting_recursive_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = projecting_recursive_iterator.h; sourceTree = "<group>"; };
 		CD0AED882E836E4600E8B05D /* recursive_expander.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = recursive_expander.h; sourceTree = "<group>"; };
 		CD0AED8A2E836E9F00E8B05D /* projection_tuple.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = projection_tuple.h; sourceTree = "<group>"; };
 		CD0AED8C2E836EF200E8B05D /* capture_fn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = capture_fn.h; sourceTree = "<group>"; };
-		CD0AED8E2E83FFC400E8B05D /* cascade_iterator_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cascade_iterator_test.cxx; sourceTree = "<group>"; };
+		CD0AED8E2E83FFC400E8B05D /* projecting_recursive_iterator_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = projecting_recursive_iterator_test.cxx; sourceTree = "<group>"; };
 		CD3C6DDB26238F8F00548B64 /* xcode_gtest_helper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xcode_gtest_helper.h; sourceTree = "<group>"; };
 		CD41AFE22E7F0434004F3E51 /* concepts.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = concepts.h; sourceTree = "<group>"; };
 		CD5A8E7329D7910D008C2A4F /* sentinel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sentinel.h; sourceTree = "<group>"; };
 		CD5AEAE729D86D8100A390A4 /* ranges.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ranges.h; sourceTree = "<group>"; };
-		CD5AEB3129D8885400A390A4 /* macro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
-		CD5AEB3229D8886200A390A4 /* undef.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = undef.h; sourceTree = "<group>"; };
 		CD5AEB3329D8956600A390A4 /* capture_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = capture_iterator.h; sourceTree = "<group>"; };
 		CD5AEB3429D897DD00A390A4 /* capture_iterator_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = capture_iterator_test.cxx; sourceTree = "<group>"; };
 		CDA2B60928581255004D5353 /* libiterator.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libiterator.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDA2B6122858128C004D5353 /* forwards.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = forwards.h; sourceTree = "<group>"; };
 		CDA2B6132858128C004D5353 /* facade.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = facade.h; sourceTree = "<group>"; };
-		CDA2B6142858128C004D5353 /* indexed_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = indexed_iterator.h; sourceTree = "<group>"; };
-		CDA2B6152858128C004D5353 /* unkeyed_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unkeyed_iterator.h; sourceTree = "<group>"; };
+		CDA2B6142858128C004D5353 /* enumerate_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = enumerate_iterator.h; sourceTree = "<group>"; };
+		CDA2B6152858128C004D5353 /* values_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = values_iterator.h; sourceTree = "<group>"; };
 		CDA2B6162858128C004D5353 /* recursive_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = recursive_iterator.h; sourceTree = "<group>"; };
 		CDA2B61A2858128C004D5353 /* arrow_proxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = arrow_proxy.h; sourceTree = "<group>"; };
 		CDA2B61B2858128C004D5353 /* end_aware_iterator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = end_aware_iterator.h; sourceTree = "<group>"; };
@@ -112,13 +108,13 @@
 		CDCB3BC124E1D3880029B771 /* iterator-test.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "iterator-test.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDCB3BC524E1D3880029B771 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		CDCB3BCD24E1D5320029B771 /* join_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = join_iterator_test.cxx; sourceTree = "<group>"; };
-		CDCB3BCE24E1D5320029B771 /* unkeyed_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unkeyed_iterator_test.cxx; sourceTree = "<group>"; };
+		CDCB3BCE24E1D5320029B771 /* values_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = values_iterator_test.cxx; sourceTree = "<group>"; };
 		CDCB3BCF24E1D5320029B771 /* recursive_iterator_vector_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = recursive_iterator_vector_test.cxx; sourceTree = "<group>"; };
 		CDCB3BD024E1D5320029B771 /* recursive_iterator_accessors_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = recursive_iterator_accessors_test.cxx; sourceTree = "<group>"; };
 		CDCB3BD124E1D5320029B771 /* recursive_iterator_mixed_container_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = recursive_iterator_mixed_container_test.cxx; sourceTree = "<group>"; };
 		CDCB3BD224E1D5320029B771 /* end_aware_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = end_aware_iterator_test.cxx; sourceTree = "<group>"; };
 		CDCB3BD324E1D5320029B771 /* filter_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_iterator_test.cxx; sourceTree = "<group>"; };
-		CDCB3BD424E1D5320029B771 /* indexed_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = indexed_iterator_test.cxx; sourceTree = "<group>"; };
+		CDCB3BD424E1D5320029B771 /* enumerate_iterator_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enumerate_iterator_test.cxx; sourceTree = "<group>"; };
 		CDCB3BD524E1D5320029B771 /* recursive_iterator_map_test.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = recursive_iterator_map_test.cxx; sourceTree = "<group>"; };
 		CDCB3BFB24E327CF0029B771 /* recursive_iterator_single_level_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = recursive_iterator_single_level_test.cxx; sourceTree = "<group>"; };
 		CDCB3C0224E33A1E0029B771 /* zip_iterator_test.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = zip_iterator_test.cxx; sourceTree = "<group>"; };
@@ -172,17 +168,17 @@
 				CD3C6DDB26238F8F00548B64 /* xcode_gtest_helper.h */,
 				CD5AEAE729D86D8100A390A4 /* ranges.h */,
 				CD5AEB3429D897DD00A390A4 /* capture_iterator_test.cxx */,
-				CD0AED8E2E83FFC400E8B05D /* cascade_iterator_test.cxx */,
 				CDCB3BD224E1D5320029B771 /* end_aware_iterator_test.cxx */,
+				CDCB3BD424E1D5320029B771 /* enumerate_iterator_test.cxx */,
 				CDCB3BD324E1D5320029B771 /* filter_iterator_test.cxx */,
-				CDCB3BD424E1D5320029B771 /* indexed_iterator_test.cxx */,
 				CDCB3BCD24E1D5320029B771 /* join_iterator_test.cxx */,
+				CD0AED8E2E83FFC400E8B05D /* projecting_recursive_iterator_test.cxx */,
 				CDCB3BD024E1D5320029B771 /* recursive_iterator_accessors_test.cxx */,
 				CDCB3BD124E1D5320029B771 /* recursive_iterator_mixed_container_test.cxx */,
 				CDCB3BD524E1D5320029B771 /* recursive_iterator_map_test.cxx */,
 				CDCB3BCF24E1D5320029B771 /* recursive_iterator_vector_test.cxx */,
 				CDCB3BFB24E327CF0029B771 /* recursive_iterator_single_level_test.cxx */,
-				CDCB3BCE24E1D5320029B771 /* unkeyed_iterator_test.cxx */,
+				CDCB3BCE24E1D5320029B771 /* values_iterator_test.cxx */,
 				CDCB3C0224E33A1E0029B771 /* zip_iterator_test.cxx */,
 			);
 			path = test;
@@ -206,13 +202,13 @@
 				CD5A8E7329D7910D008C2A4F /* sentinel.h */,
 				CDA2B6172858128C004D5353 /* detail */,
 				CD5AEB3329D8956600A390A4 /* capture_iterator.h */,
-				CD0AED832E836E1900E8B05D /* cascade_iterator.h */,
+				CD0AED832E836E1900E8B05D /* projecting_recursive_iterator.h */,
 				CDA2B61B2858128C004D5353 /* end_aware_iterator.h */,
 				CDA2B61E2858128C004D5353 /* filter_iterator.h */,
-				CDA2B6142858128C004D5353 /* indexed_iterator.h */,
+				CDA2B6142858128C004D5353 /* enumerate_iterator.h */,
 				CDA2B61F2858128C004D5353 /* join_iterator.h */,
 				CDA2B6162858128C004D5353 /* recursive_iterator.h */,
-				CDA2B6152858128C004D5353 /* unkeyed_iterator.h */,
+				CDA2B6152858128C004D5353 /* values_iterator.h */,
 				CDA2B61D2858128C004D5353 /* zip_iterator.h */,
 			);
 			path = iterator;
@@ -222,8 +218,6 @@
 			isa = PBXGroup;
 			children = (
 				CDA2B61A2858128C004D5353 /* arrow_proxy.h */,
-				CD5AEB3129D8885400A390A4 /* macro.h */,
-				CD5AEB3229D8886200A390A4 /* undef.h */,
 				CD0AED8A2E836E9F00E8B05D /* projection_tuple.h */,
 				CD0AED8C2E836EF200E8B05D /* capture_fn.h */,
 				CD0AED882E836E4600E8B05D /* recursive_expander.h */,
@@ -272,18 +266,16 @@
 				CD0AED892E836E4600E8B05D /* recursive_expander.h in Headers */,
 				CD41AFE72E7F13E4004F3E51 /* sentinel.h in Headers */,
 				CD41AFE82E7F13E4004F3E51 /* arrow_proxy.h in Headers */,
-				CD41AFE92E7F13E4004F3E51 /* macro.h in Headers */,
-				CD41AFEC2E7F13E4004F3E51 /* undef.h in Headers */,
 				CD0AED8D2E836EF200E8B05D /* capture_fn.h in Headers */,
 				CD41AFED2E7F13E4004F3E51 /* capture_iterator.h in Headers */,
 				CD41AFEE2E7F13E4004F3E51 /* end_aware_iterator.h in Headers */,
-				CD0AED842E836E1900E8B05D /* cascade_iterator.h in Headers */,
+				CD0AED842E836E1900E8B05D /* projecting_recursive_iterator.h in Headers */,
 				CD41AFEF2E7F13E4004F3E51 /* filter_iterator.h in Headers */,
 				CD0AED8B2E836E9F00E8B05D /* projection_tuple.h in Headers */,
-				CD41AFF02E7F13E4004F3E51 /* indexed_iterator.h in Headers */,
+				CD41AFF02E7F13E4004F3E51 /* enumerate_iterator.h in Headers */,
 				CD41AFF12E7F13E4004F3E51 /* join_iterator.h in Headers */,
 				CD41AFF22E7F13E4004F3E51 /* recursive_iterator.h in Headers */,
-				CD41AFF32E7F13E4004F3E51 /* unkeyed_iterator.h in Headers */,
+				CD41AFF32E7F13E4004F3E51 /* values_iterator.h in Headers */,
 				CD41AFF42E7F13E4004F3E51 /* zip_iterator.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -428,11 +420,11 @@
 				CDCB3BDB24E1D5320029B771 /* end_aware_iterator_test.cxx in Sources */,
 				CDCB3BD824E1D5320029B771 /* recursive_iterator_vector_test.cxx in Sources */,
 				CDCB3BDC24E1D5320029B771 /* filter_iterator_test.cxx in Sources */,
-				CD0AED8F2E83FFC400E8B05D /* cascade_iterator_test.cxx in Sources */,
+				CD0AED8F2E83FFC400E8B05D /* projecting_recursive_iterator_test.cxx in Sources */,
 				CDCB3BDE24E1D5320029B771 /* recursive_iterator_map_test.cxx in Sources */,
-				CDCB3BDD24E1D5320029B771 /* indexed_iterator_test.cxx in Sources */,
+				CDCB3BDD24E1D5320029B771 /* enumerate_iterator_test.cxx in Sources */,
 				CDCB3BD624E1D5320029B771 /* join_iterator_test.cxx in Sources */,
-				CDCB3BD724E1D5320029B771 /* unkeyed_iterator_test.cxx in Sources */,
+				CDCB3BD724E1D5320029B771 /* values_iterator_test.cxx in Sources */,
 				CDCB3BDA24E1D5320029B771 /* recursive_iterator_mixed_container_test.cxx in Sources */,
 				CDCB3C0324E33A1E0029B771 /* zip_iterator_test.cxx in Sources */,
 				CDCB3BD924E1D5320029B771 /* recursive_iterator_accessors_test.cxx in Sources */,

+ 30 - 28
test/indexed_iterator_test.cxx

@@ -1,4 +1,4 @@
-#include "iterator/indexed_iterator.h"
+#include "iterator/enumerate_iterator.h"
 
 #include <map>
 #include <vector>
@@ -9,7 +9,7 @@
 #include "xcode_gtest_helper.h"
 
 using iterator::EndAwareIterator;
-using iterator::indexed_iterator;
+using iterator::EnumerateIterator;
 
 using testing::Ge;
 using testing::Gt;
@@ -20,40 +20,41 @@ using testing::Ne;
 // TODO: This ought to be implemented as a compiles-test
 TEST(IndexedIteratorTest, CanCastCompatibleIterators) {
   std::vector<int> v{1, 2, 3, 4, 5};
-  indexed_iterator eai(v.begin());
-  indexed_iterator<std::vector<int>::const_iterator>{eai};
+  EnumerateIterator eai(v.begin());
+  EnumerateIterator<std::vector<int>::const_iterator>{eai};
 }
 
 TEST(IndexedIteratorTest, CanLieAboutIndex) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator it(vec.begin(), 3);
+  EnumerateIterator it(vec.begin(), 3);
   EXPECT_THAT(it->first, 3);
 }
 
 TEST(IndexedIteratorTest, FakeIndexDoesntEffectEqualityCheck) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  EXPECT_THAT(indexed_iterator(vec.begin()), indexed_iterator(vec.begin(), 3));
-  EXPECT_THAT(indexed_iterator(vec.begin()) + 3,
-              Ne(indexed_iterator(vec.begin(), 3)));
+  EXPECT_THAT(EnumerateIterator(vec.begin()),
+              EnumerateIterator(vec.begin(), 3));
+  EXPECT_THAT(EnumerateIterator(vec.begin()) + 3,
+              Ne(EnumerateIterator(vec.begin(), 3)));
 }
 
 TEST(IndexedIteratorTest, DoesNotTrackByIndex) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator end(vec.end());
+  EnumerateIterator end(vec.end());
   EXPECT_THAT(decltype(end){}, Ne(end));
 }
 
 TEST(IndexedIteratorTest, IteratorPropagatesAtEnd) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator end(EndAwareIterator(vec.end(), vec.end()));
+  EnumerateIterator end(EndAwareIterator(vec.end(), vec.end()));
 
   EXPECT_EQ(end, iterator::sentinel);
 }
 
 TEST(IndexedIteratorTest, CanCompareIteratorOrder) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator const begin(vec.begin());
-  indexed_iterator const it = begin + 3;
+  EnumerateIterator const begin(vec.begin());
+  EnumerateIterator const it = begin + 3;
 
   EXPECT_THAT(begin, Lt(it));
   EXPECT_THAT(begin, Le(it));
@@ -65,7 +66,7 @@ TEST(IndexedIteratorTest, CanCompareIteratorOrder) {
 
 TEST(IndexedIteratorTest, PreIncrementAdvancesIterator) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator it(vec.begin() + 1);
+  EnumerateIterator it(vec.begin() + 1);
   EXPECT_THAT(it->second, 3);
   EXPECT_THAT((++it)->second, 2);
   EXPECT_THAT(it->second, 2);
@@ -73,7 +74,7 @@ TEST(IndexedIteratorTest, PreIncrementAdvancesIterator) {
 
 TEST(IndexedIteratorTest, PostIncrementReturnsCopyOfPrev) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator it(vec.begin() + 1);
+  EnumerateIterator it(vec.begin() + 1);
   EXPECT_THAT(it->second, 3);
   EXPECT_THAT((it++)->second, 3);
   EXPECT_THAT(it->second, 2);
@@ -81,7 +82,7 @@ TEST(IndexedIteratorTest, PostIncrementReturnsCopyOfPrev) {
 
 TEST(IndexedIteratorTest, PreDecrementAdvancesIterator) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator it(vec.begin() + 1);
+  EnumerateIterator it(vec.begin() + 1);
   EXPECT_THAT(it->second, 3);
   EXPECT_THAT((--it)->second, 5);
   EXPECT_THAT(it->second, 5);
@@ -89,7 +90,7 @@ TEST(IndexedIteratorTest, PreDecrementAdvancesIterator) {
 
 TEST(IndexedIteratorTest, PostDecrementReturnsCopyOfPrev) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator it(vec.begin() + 1);
+  EnumerateIterator it(vec.begin() + 1);
   EXPECT_THAT(it->second, 3);
   EXPECT_THAT((it--)->second, 3);
   EXPECT_THAT(it->second, 5);
@@ -97,25 +98,26 @@ TEST(IndexedIteratorTest, PostDecrementReturnsCopyOfPrev) {
 
 TEST(IndexedIteratorTest, CanWalkNStepsForward) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator const begin(vec.begin());
-  indexed_iterator it = begin;
+  EnumerateIterator const begin(vec.begin());
+  EnumerateIterator it = begin;
   it += 4;
   EXPECT_THAT(ranges::distance(begin, it), 4);
 }
 
 TEST(IndexedIteratorTest, CanWalkNStepsBackwards) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator const end(vec.end());
-  indexed_iterator it = end;
+  EnumerateIterator const end(vec.end());
+  EnumerateIterator it = end;
   it -= 4;
   EXPECT_THAT(ranges::distance(it, end), 4);
 }
 
 TEST(IndexedIteratorTest, RandomAccessIsPassthrough) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  EXPECT_THAT(indexed_iterator(vec.begin()) + 4,
-              indexed_iterator(vec.begin() + 4));
-  EXPECT_THAT(indexed_iterator(vec.end()) - 4, indexed_iterator(vec.end() - 4));
+  EXPECT_THAT(EnumerateIterator(vec.begin()) + 4,
+              EnumerateIterator(vec.begin() + 4));
+  EXPECT_THAT(EnumerateIterator(vec.end()) - 4,
+              EnumerateIterator(vec.end() - 4));
 }
 
 TEST(IndexedIteratorTest, TreatsVectorIteratorAsPairIdxValue) {
@@ -123,8 +125,8 @@ TEST(IndexedIteratorTest, TreatsVectorIteratorAsPairIdxValue) {
   std::vector<std::pair<int, int>> const expected{
       {0, 5}, {1, 3}, {2, 2}, {3, 8}, {4, 9}, {5, 11}, {6, 2}, {7, 4}};
 
-  std::vector<std::pair<int, int>> const result(indexed_iterator(vec.begin()),
-                                                indexed_iterator(vec.end()));
+  std::vector<std::pair<int, int>> const result(EnumerateIterator(vec.begin()),
+                                                EnumerateIterator(vec.end()));
   EXPECT_THAT(result, expected);
 }
 
@@ -133,13 +135,13 @@ TEST(IndexedIteratorTest, TreatsVectorIteratorAsMapIdxToValue) {
   std::map<int, int> const expected{{0, 5}, {1, 3},  {2, 2}, {3, 8},
                                     {4, 9}, {5, 11}, {6, 2}, {7, 4}};
 
-  std::map<int, int> const result(indexed_iterator(vec.begin()),
-                                  indexed_iterator(vec.end()));
+  std::map<int, int> const result(EnumerateIterator(vec.begin()),
+                                  EnumerateIterator(vec.end()));
   EXPECT_THAT(result, expected);
 }
 
 TEST(IndexedIteratorTest, CanMutatePointedToData) {
   std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
-  indexed_iterator(vec.begin() + 4, 4)->second = -1;
+  EnumerateIterator(vec.begin() + 4, 4)->second = -1;
   EXPECT_THAT(vec[4], -1);
 }

+ 1 - 1
test/cascade_iterator_test.cxx

@@ -6,7 +6,7 @@
 //  Copyright © 2025 Sam Jaffe. All rights reserved.
 //
 
-#include "iterator/cascade_iterator.h"
+#include "iterator/projecting_recursive_iterator.h"
 
 #include "ranges.h"
 #include "xcode_gtest_helper.h"

+ 1 - 1
test/unkeyed_iterator_test.cxx

@@ -1,4 +1,4 @@
-#include "iterator/unkeyed_iterator.h"
+#include "iterator/values_iterator.h"
 
 #include <map>
 #include <vector>