Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
helios::utils::SkipWhileAdapter< Iter, Pred > Class Template Reference

Iterator adapter that skips elements while a predicate returns true. More...

#include <functional_adapters.hpp>

Inheritance diagram for helios::utils::SkipWhileAdapter< Iter, Pred >:
helios::utils::FunctionalAdapterBase< SkipWhileAdapter< Iter, Pred > >

Public Types

using iterator_concept = details::adapter_iterator_concept_t<Iter>
using iterator_category = details::adapter_iterator_category_t<Iter>
using value_type = std::iter_value_t<Iter>
using reference = value_type
using pointer = void
using difference_type = std::iter_difference_t<Iter>

Public Member Functions

constexpr SkipWhileAdapter (Iter begin, Iter end, Pred predicate) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_move_constructible_v< Pred > &&noexcept(AdvancePastSkipped()))
 Constructs a skip-while adapter with the given iterator range and predicate.
template<ExternalRange R>
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
constexpr SkipWhileAdapter (R &range, Pred predicate) noexcept(noexcept(SkipWhileAdapter(std::ranges::begin(range), std::ranges::end(range), std::move(predicate))))
 Constructs a skip-while adapter from a range and predicate.
template<ExternalRange R>
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<const R>, Pred>
constexpr SkipWhileAdapter (const R &range, Pred predicate) noexcept(noexcept(SkipWhileAdapter(std::ranges::cbegin(range), std::ranges::cend(range), std::move(predicate))))
 Constructs a skip-while adapter from a const range and predicate.
constexpr SkipWhileAdapter (const SkipWhileAdapter &) noexcept(std::is_nothrow_copy_constructible_v< Iter > &&std::is_nothrow_copy_constructible_v< Pred >)=default
constexpr SkipWhileAdapter (SkipWhileAdapter &&) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_move_constructible_v< Pred >)=default
constexpr ~SkipWhileAdapter () noexcept(std::is_nothrow_destructible_v< Iter > &&std::is_nothrow_destructible_v< Pred >)=default
constexpr SkipWhileAdapteroperator= (const SkipWhileAdapter &) noexcept(std::is_nothrow_copy_assignable_v< Iter > &&std::is_nothrow_copy_assignable_v< Pred >)=default
constexpr SkipWhileAdapteroperator= (SkipWhileAdapter &&) noexcept(std::is_nothrow_move_assignable_v< Iter > &&std::is_nothrow_move_assignable_v< Pred >)=default
constexpr SkipWhileAdapteroperator++ () noexcept(noexcept(++std::declval< Iter & >()))
constexpr SkipWhileAdapter operator++ (int) noexcept(std::is_nothrow_copy_constructible_v< SkipWhileAdapter > &&noexcept(++std::declval< SkipWhileAdapter & >()))
constexpr reference operator* () const noexcept(noexcept(*std::declval< const Iter & >()))
pointer operator-> () const =delete
constexpr bool operator== (const SkipWhileAdapter &other) const noexcept(noexcept(std::declval< const Iter & >()==std::declval< const Iter & >()))
constexpr bool operator!= (const SkipWhileAdapter &other) const noexcept(noexcept(std::declval< const SkipWhileAdapter & >()==std::declval< const SkipWhileAdapter & >()))
constexpr SkipWhileAdapter begin () const noexcept(std::is_nothrow_copy_constructible_v< SkipWhileAdapter >)
constexpr SkipWhileAdapter end () const noexcept(std::is_nothrow_constructible_v< SkipWhileAdapter, const Iter &, const Iter &, const Pred & >)
Public Member Functions inherited from helios::utils::FunctionalAdapterBase< SkipWhileAdapter< Iter, Pred > >
constexpr auto Filter (Pred predicate) const noexcept(noexcept(FilterAdapter< SkipWhileAdapter< Iter, Pred >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Chains another filter operation on top of this iterator.
constexpr auto Map (Func transform) const noexcept(noexcept(MapAdapter< SkipWhileAdapter< Iter, Pred >, Func >(GetDerived().begin(), GetDerived().end(), std::move(transform))))
 Transforms each element using the given function.
constexpr auto Take (size_t count) const noexcept(noexcept(TakeAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end(), count)))
 Limits the number of elements to at most count.
constexpr auto Skip (size_t count) const noexcept(noexcept(SkipAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end(), count)))
 Skips the first count elements.
constexpr auto TakeWhile (Pred predicate) const noexcept(noexcept(TakeWhileAdapter< SkipWhileAdapter< Iter, Pred >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Takes elements while a predicate is true.
constexpr auto SkipWhile (Pred predicate) const noexcept(noexcept(SkipWhileAdapter< Derived, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Skips elements while a predicate is true.
constexpr auto Enumerate () const noexcept(noexcept(EnumerateAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end())))
 Adds an index to each element.
constexpr auto Inspect (Func inspector) const noexcept(noexcept(InspectAdapter< SkipWhileAdapter< Iter, Pred >, Func >(GetDerived().begin(), GetDerived().end(), std::move(inspector))))
 Observes each element without modifying it.
constexpr auto StepBy (size_t step) const noexcept(noexcept(StepByAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end(), step)))
 Takes every Nth element.
constexpr auto Chain (OtherIter begin, OtherIter end) const noexcept(noexcept(ChainAdapter< SkipWhileAdapter< Iter, Pred >, OtherIter >(GetDerived().begin(), GetDerived().end(), std::move(begin), std::move(end))))
 Chains another range after this one.
constexpr auto Reverse () const noexcept(noexcept(ReverseAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end())))
 Reverses the order of elements.
constexpr auto Slide (size_t window_size) const noexcept(noexcept(SlideAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end(), window_size)))
 Creates sliding windows over elements.
constexpr auto Stride (size_t stride) const noexcept(noexcept(StrideAdapter< SkipWhileAdapter< Iter, Pred > >(GetDerived().begin(), GetDerived().end(), stride)))
 Takes every Nth element with stride.
constexpr auto Zip (OtherIter begin, OtherIter end) const noexcept(noexcept(ZipAdapter< SkipWhileAdapter< Iter, Pred >, OtherIter >(GetDerived().begin(), GetDerived().end(), std::move(begin), std::move(end))))
 Zips another range with this one.
constexpr void ForEach (const Action &action) const
 Terminal operation: applies an action to each element.
constexpr T Fold (T init, const Folder &folder) const
 Terminal operation: reduces elements to a single value using a folder function.
constexpr auto Find (const Pred &predicate) const
 Terminal operation: finds the first element satisfying a predicate.
constexpr size_t CountIf (const Pred &predicate) const
 Terminal operation: counts elements satisfying a predicate.
constexpr auto Partition (const Pred &predicate) const
 Terminal operation: partitions elements into two groups based on a predicate.
constexpr auto PartitionWith (const Pred &predicate, Allocator allocator) const
 Terminal operation: partitions elements with a custom allocator.
constexpr auto MaxBy (const KeyFunc &key_func) const
 Terminal operation: finds the element with the maximum value according to a key function.
constexpr auto MinBy (const KeyFunc &key_func) const
 Terminal operation: finds the element with the minimum value according to a key function.
constexpr auto GroupBy (const KeyFunc &key_func) const
 Terminal operation: groups elements by a key function.
constexpr auto GroupByWith (const KeyFunc &key_func, MapAllocator map_allocator, ValueAllocator value_allocator) const
 Terminal operation: groups elements by key with custom allocators.
constexpr auto Collect () const
 Terminal operation: collects all elements into a vector.
constexpr auto CollectWith (Allocator allocator={}) const
 Terminal operation: collects all elements into a vector with a custom allocator.
constexpr void Into (OutIt out) const
 Terminal operation: writes all elements into an output iterator.
constexpr bool Any (const Pred &predicate) const
 Terminal operation: checks if any element satisfies a predicate.
constexpr bool All (const Pred &predicate) const
 Terminal operation: checks if all elements satisfy a predicate.
constexpr bool None (const Pred &predicate) const
 Terminal operation: checks if no elements satisfy a predicate.

Additional Inherited Members

Protected Member Functions inherited from helios::utils::FunctionalAdapterBase< SkipWhileAdapter< Iter, Pred > >
constexpr SkipWhileAdapter< Iter, Pred > & GetDerived () noexcept
 Gets reference to derived class instance.

Detailed Description

template<typename Iter, typename Pred>
requires SkipWhileAdapterRequirements<Iter, Pred>
class helios::utils::SkipWhileAdapter< Iter, Pred >

Iterator adapter that skips elements while a predicate returns true.

Template Parameters
IterUnderlying iterator type
PredPredicate function type
// Skip entities while their health is zero
auto non_zero_health = query.SkipWhile([](const Health& h) { return h.points
== 0; });

Definition at line 1396 of file functional_adapters.hpp.

Member Typedef Documentation

◆ difference_type

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::difference_type = std::iter_difference_t<Iter>

Definition at line 1404 of file functional_adapters.hpp.

◆ iterator_category

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::iterator_category = details::adapter_iterator_category_t<Iter>

Definition at line 1400 of file functional_adapters.hpp.

◆ iterator_concept

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::iterator_concept = details::adapter_iterator_concept_t<Iter>

Definition at line 1399 of file functional_adapters.hpp.

◆ pointer

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::pointer = void

Definition at line 1403 of file functional_adapters.hpp.

◆ reference

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::reference = value_type

Definition at line 1402 of file functional_adapters.hpp.

◆ value_type

template<typename Iter, typename Pred>
using helios::utils::SkipWhileAdapter< Iter, Pred >::value_type = std::iter_value_t<Iter>

Definition at line 1401 of file functional_adapters.hpp.

Constructor & Destructor Documentation

◆ SkipWhileAdapter() [1/5]

template<typename Iter, typename Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::SkipWhileAdapter ( Iter begin,
Iter end,
Pred predicate )
inlineconstexprnoexcept

Constructs a skip-while adapter with the given iterator range and predicate.

Parameters
beginStart of the iterator range
endEnd of the iterator range
predicateFunction to test elements

Definition at line 1413 of file functional_adapters.hpp.

◆ SkipWhileAdapter() [2/5]

template<typename Iter, typename Pred>
template<ExternalRange R>
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<R>, Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::SkipWhileAdapter ( R & range,
Pred predicate )
inlineconstexprnoexcept

Constructs a skip-while adapter from a range and predicate.

Template Parameters
RThe type of the input range
Parameters
rangeThe input range to adapt
predicateFunction to test elements

Definition at line 1431 of file functional_adapters.hpp.

◆ SkipWhileAdapter() [3/5]

template<typename Iter, typename Pred>
template<ExternalRange R>
requires SkipWhileAdapterRequirements<std::ranges::iterator_t<const R>, Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::SkipWhileAdapter ( const R & range,
Pred predicate )
inlineconstexprnoexcept

Constructs a skip-while adapter from a const range and predicate.

Template Parameters
RThe type of the input range
Parameters
rangeThe input range to adapt
predicateFunction to test elements

Definition at line 1446 of file functional_adapters.hpp.

◆ SkipWhileAdapter() [4/5]

template<typename Iter, typename Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::SkipWhileAdapter ( const SkipWhileAdapter< Iter, Pred > & ) const &&
constexprdefaultnoexcept

◆ SkipWhileAdapter() [5/5]

template<typename Iter, typename Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::SkipWhileAdapter ( SkipWhileAdapter< Iter, Pred > && ) const &&
constexprdefaultnoexcept

◆ ~SkipWhileAdapter()

template<typename Iter, typename Pred>
helios::utils::SkipWhileAdapter< Iter, Pred >::~SkipWhileAdapter ( ) &&
constexprdefaultnoexcept

Member Function Documentation

◆ begin()

template<typename Iter, typename Pred>
SkipWhileAdapter helios::utils::SkipWhileAdapter< Iter, Pred >::begin ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 1494 of file functional_adapters.hpp.

◆ end()

template<typename Iter, typename Pred>
SkipWhileAdapter helios::utils::SkipWhileAdapter< Iter, Pred >::end ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 1499 of file functional_adapters.hpp.

◆ operator!=()

template<typename Iter, typename Pred>
bool helios::utils::SkipWhileAdapter< Iter, Pred >::operator!= ( const SkipWhileAdapter< Iter, Pred > & other) const
inlinenodiscardconstexprnoexcept

Definition at line 1488 of file functional_adapters.hpp.

◆ operator*()

template<typename Iter, typename Pred>
reference helios::utils::SkipWhileAdapter< Iter, Pred >::operator* ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 1475 of file functional_adapters.hpp.

◆ operator++() [1/2]

template<typename Iter, typename Pred>
requires SkipWhileAdapterRequirements<Iter, Pred>
auto helios::utils::SkipWhileAdapter< Iter, Pred >::operator++ ( )
constexprnoexcept

Definition at line 1526 of file functional_adapters.hpp.

◆ operator++() [2/2]

template<typename Iter, typename Pred>
requires SkipWhileAdapterRequirements<Iter, Pred>
auto helios::utils::SkipWhileAdapter< Iter, Pred >::operator++ ( int )
nodiscardconstexprnoexcept

Definition at line 1534 of file functional_adapters.hpp.

◆ operator->()

template<typename Iter, typename Pred>
pointer helios::utils::SkipWhileAdapter< Iter, Pred >::operator-> ( ) const
delete

◆ operator=() [1/2]

template<typename Iter, typename Pred>
SkipWhileAdapter & helios::utils::SkipWhileAdapter< Iter, Pred >::operator= ( const SkipWhileAdapter< Iter, Pred > & ) &&
constexprdefaultnoexcept

◆ operator=() [2/2]

template<typename Iter, typename Pred>
SkipWhileAdapter & helios::utils::SkipWhileAdapter< Iter, Pred >::operator= ( SkipWhileAdapter< Iter, Pred > && ) &&
constexprdefaultnoexcept

◆ operator==()

template<typename Iter, typename Pred>
bool helios::utils::SkipWhileAdapter< Iter, Pred >::operator== ( const SkipWhileAdapter< Iter, Pred > & other) const
inlinenodiscardconstexprnoexcept

Definition at line 1482 of file functional_adapters.hpp.