Skip to content

Commit f415445

Browse files
feat: add get to iterator interface (#111)
1 parent 1a07aa1 commit f415445

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

include/rusty_iterators/interface.hpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ class IterInterface
121121
requires ForEachFunctor<T, Functor>
122122
auto forEach(Functor&& f) -> void;
123123

124+
template <size_t LB>
125+
auto get() -> Skip<T, Derived>;
126+
127+
template <size_t LB, size_t UB>
128+
auto get() -> Take<T, Skip<T, Derived>>;
129+
124130
template <class Functor>
125131
requires InspectFunctor<T, Functor>
126132
[[nodiscard]] auto inspect(Functor&& f) -> Inspect<T, Functor, Derived>;
@@ -352,6 +358,20 @@ auto rusty_iterators::interface::IterInterface<T, Derived>::forEach(Functor&& f)
352358
}
353359
}
354360

361+
template <class T, class Derived>
362+
template <size_t LB>
363+
auto rusty_iterators::interface::IterInterface<T, Derived>::get() -> Skip<T, Derived>
364+
{
365+
return self().skip(LB);
366+
}
367+
368+
template <class T, class Derived>
369+
template <size_t LB, size_t UB>
370+
auto rusty_iterators::interface::IterInterface<T, Derived>::get() -> Take<T, Skip<T, Derived>>
371+
{
372+
return self().skip(LB).take(UB);
373+
}
374+
355375
template <class T, class Derived>
356376
template <class Functor>
357377
requires rusty_iterators::concepts::InspectFunctor<T, Functor>

tests/iterator.test.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,19 @@ TEST(TestIterator, TestProductOnMapIterator)
395395

396396
ASSERT_EQ(it.product(), 2 * 4 * 6 * 8);
397397
}
398+
399+
TEST(TestIterator, TestGetWithLowerBound)
400+
{
401+
auto vec = std::vector{1, 2, 3, 4};
402+
auto it = LazyIterator{vec}.get<2>();
403+
404+
EXPECT_THAT(it.collect(), ElementsAreArray({3, 4}));
405+
}
406+
407+
TEST(TestIterator, TestGetWithUbAndLb)
408+
{
409+
auto vec = std::vector{1, 2, 3, 4};
410+
auto it = LazyIterator{vec}.get<1, 2>();
411+
412+
EXPECT_THAT(it.collect(), ElementsAreArray({2, 3}));
413+
}

0 commit comments

Comments
 (0)