diff --git a/include/rusty_iterators/interface.hpp b/include/rusty_iterators/interface.hpp index eb88e9d..757ca4c 100644 --- a/include/rusty_iterators/interface.hpp +++ b/include/rusty_iterators/interface.hpp @@ -121,6 +121,12 @@ class IterInterface requires ForEachFunctor auto forEach(Functor&& f) -> void; + template + auto get() -> Skip; + + template + auto get() -> Take>; + template requires InspectFunctor [[nodiscard]] auto inspect(Functor&& f) -> Inspect; @@ -352,6 +358,20 @@ auto rusty_iterators::interface::IterInterface::forEach(Functor&& f) } } +template +template +auto rusty_iterators::interface::IterInterface::get() -> Skip +{ + return self().skip(LB); +} + +template +template +auto rusty_iterators::interface::IterInterface::get() -> Take> +{ + return self().skip(LB).take(UB); +} + template template requires rusty_iterators::concepts::InspectFunctor diff --git a/tests/iterator.test.cpp b/tests/iterator.test.cpp index 180f045..2316f62 100644 --- a/tests/iterator.test.cpp +++ b/tests/iterator.test.cpp @@ -395,3 +395,19 @@ TEST(TestIterator, TestProductOnMapIterator) ASSERT_EQ(it.product(), 2 * 4 * 6 * 8); } + +TEST(TestIterator, TestGetWithLowerBound) +{ + auto vec = std::vector{1, 2, 3, 4}; + auto it = LazyIterator{vec}.get<2>(); + + EXPECT_THAT(it.collect(), ElementsAreArray({3, 4})); +} + +TEST(TestIterator, TestGetWithUbAndLb) +{ + auto vec = std::vector{1, 2, 3, 4}; + auto it = LazyIterator{vec}.get<1, 2>(); + + EXPECT_THAT(it.collect(), ElementsAreArray({2, 3})); +}