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

Adapter that iterates through elements in reverse order. More...

#include <functional_adapters.hpp>

Inheritance diagram for helios::utils::ReverseAdapter< Iter >:
helios::utils::FunctionalAdapterBase< ReverseAdapter< Iter > >

Public Types

using iterator_concept
using iterator_category
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 ReverseAdapter (Iter begin, Iter end) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_copy_constructible_v< Iter > &&noexcept(std::declval< Iter & >()==std::declval< Iter & >()) &&noexcept(--std::declval< Iter & >()))
 Constructs a reverse adapter.
template<ExternalRange R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<R>> && std::ranges::bidirectional_range<R>
constexpr ReverseAdapter (R &range) noexcept(noexcept(ReverseAdapter(std::ranges::begin(range), std::ranges::end(range))))
 Constructs a reverse adapter with the given range.
template<ExternalRange R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<const R>> && std::ranges::bidirectional_range<R>
constexpr ReverseAdapter (const R &range) noexcept(noexcept(ReverseAdapter(std::ranges::cbegin(range), std::ranges::cend(range))))
 Constructs a reverse adapter with the given const range.
constexpr ReverseAdapter (const ReverseAdapter &) noexcept(std::is_nothrow_copy_constructible_v< Iter >)=default
constexpr ReverseAdapter (ReverseAdapter &&) noexcept(std::is_nothrow_move_constructible_v< Iter >)=default
constexpr ~ReverseAdapter () noexcept(std::is_nothrow_destructible_v< Iter >)=default
constexpr ReverseAdapteroperator= (const ReverseAdapter &) noexcept(std::is_nothrow_copy_assignable_v< Iter >)=default
constexpr ReverseAdapteroperator= (ReverseAdapter &&) noexcept(std::is_nothrow_move_assignable_v< Iter >)=default
constexpr ReverseAdapteroperator++ () noexcept(noexcept(std::declval< Iter & >()==std::declval< Iter & >()) &&noexcept(--std::declval< Iter & >()))
constexpr ReverseAdapter operator++ (int) noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter > &&noexcept(++std::declval< ReverseAdapter & >()))
constexpr ReverseAdapteroperator-- () noexcept(std::is_nothrow_copy_constructible_v< Iter > &&noexcept(++std::declval< Iter & >()) &&noexcept(std::declval< Iter & >() !=std::declval< Iter & >()))
constexpr ReverseAdapter operator-- (int) noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter > &&noexcept(--std::declval< ReverseAdapter & >()))
constexpr reference operator* () const noexcept(noexcept(*std::declval< const Iter & >()))
pointer operator-> () const =delete
constexpr bool operator== (const ReverseAdapter &other) const noexcept(noexcept(std::declval< const Iter & >()==std::declval< const Iter & >()))
constexpr bool operator!= (const ReverseAdapter &other) const noexcept(noexcept(std::declval< ReverseAdapter >()==std::declval< ReverseAdapter >()))
constexpr ReverseAdapter begin () const noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter >)
constexpr ReverseAdapter end () const noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter >)
Public Member Functions inherited from helios::utils::FunctionalAdapterBase< ReverseAdapter< Iter > >
constexpr auto Filter (Pred predicate) const noexcept(noexcept(FilterAdapter< ReverseAdapter< Iter >, 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< ReverseAdapter< Iter >, 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< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end(), count)))
 Limits the number of elements to at most count.
constexpr auto Skip (size_t count) const noexcept(noexcept(SkipAdapter< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end(), count)))
 Skips the first count elements.
constexpr auto TakeWhile (Pred predicate) const noexcept(noexcept(TakeWhileAdapter< ReverseAdapter< Iter >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Takes elements while a predicate is true.
constexpr auto SkipWhile (Pred predicate) const noexcept(noexcept(SkipWhileAdapter< ReverseAdapter< Iter >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Skips elements while a predicate is true.
constexpr auto Enumerate () const noexcept(noexcept(EnumerateAdapter< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end())))
 Adds an index to each element.
constexpr auto Inspect (Func inspector) const noexcept(noexcept(InspectAdapter< ReverseAdapter< Iter >, Func >(GetDerived().begin(), GetDerived().end(), std::move(inspector))))
 Observes each element without modifying it.
constexpr auto StepBy (size_t step) const noexcept(noexcept(StepByAdapter< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end(), step)))
 Takes every Nth element.
constexpr auto Chain (OtherIter begin, OtherIter end) const noexcept(noexcept(ChainAdapter< ReverseAdapter< Iter >, OtherIter >(GetDerived().begin(), GetDerived().end(), std::move(begin), std::move(end))))
 Chains another range after this one.
constexpr auto Reverse () const noexcept(noexcept(ReverseAdapter< Derived >(GetDerived().begin(), GetDerived().end())))
 Reverses the order of elements.
constexpr auto Slide (size_t window_size) const noexcept(noexcept(SlideAdapter< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end(), window_size)))
 Creates sliding windows over elements.
constexpr auto Stride (size_t stride) const noexcept(noexcept(StrideAdapter< ReverseAdapter< Iter > >(GetDerived().begin(), GetDerived().end(), stride)))
 Takes every Nth element with stride.
constexpr auto Zip (OtherIter begin, OtherIter end) const noexcept(noexcept(ZipAdapter< ReverseAdapter< Iter >, 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< ReverseAdapter< Iter > >
constexpr ReverseAdapter< Iter > & GetDerived () noexcept
 Gets reference to derived class instance.

Detailed Description

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
class helios::utils::ReverseAdapter< Iter >

Adapter that iterates through elements in reverse order.

Requires a bidirectional iterator. Uses operator-- to traverse backwards.

Template Parameters
IterType of the underlying iterator
// Reverse iterate through entities
auto reversed = query.Reverse();

Definition at line 2298 of file functional_adapters.hpp.

Member Typedef Documentation

◆ difference_type

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::difference_type = std::iter_difference_t<Iter>

Definition at line 2312 of file functional_adapters.hpp.

◆ iterator_category

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::iterator_category
Initial value:
std::conditional_t<details::IterYieldsReference<Iter>,
std::bidirectional_iterator_tag,
std::input_iterator_tag>

Definition at line 2305 of file functional_adapters.hpp.

◆ iterator_concept

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::iterator_concept
Initial value:
std::conditional_t<details::IterYieldsReference<Iter>,
std::bidirectional_iterator_tag,
std::input_iterator_tag>

Definition at line 2301 of file functional_adapters.hpp.

◆ pointer

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::pointer = void

Definition at line 2311 of file functional_adapters.hpp.

◆ reference

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::reference = value_type

Definition at line 2310 of file functional_adapters.hpp.

◆ value_type

template<typename Iter>
using helios::utils::ReverseAdapter< Iter >::value_type = std::iter_value_t<Iter>

Definition at line 2309 of file functional_adapters.hpp.

Constructor & Destructor Documentation

◆ ReverseAdapter() [1/5]

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
helios::utils::ReverseAdapter< Iter >::ReverseAdapter ( Iter begin,
Iter end )
constexprnoexcept

Constructs a reverse adapter.

Parameters
beginIterator to the beginning of the range
endIterator to the end of the range

Definition at line 2415 of file functional_adapters.hpp.

◆ ReverseAdapter() [2/5]

template<typename Iter>
template<ExternalRange R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<R>> && std::ranges::bidirectional_range<R>
helios::utils::ReverseAdapter< Iter >::ReverseAdapter ( R & range)
inlineexplicitconstexprnoexcept

Constructs a reverse adapter with the given range.

Template Parameters
RThe type of the range
Parameters
rangeThe range to adapt

Definition at line 2333 of file functional_adapters.hpp.

◆ ReverseAdapter() [3/5]

template<typename Iter>
template<ExternalRange R>
requires ReverseAdapterRequirements<std::ranges::iterator_t<const R>> && std::ranges::bidirectional_range<R>
helios::utils::ReverseAdapter< Iter >::ReverseAdapter ( const R & range)
inlineexplicitconstexprnoexcept

Constructs a reverse adapter with the given const range.

Template Parameters
RThe type of the range
Parameters
rangeThe range to adapt

Definition at line 2345 of file functional_adapters.hpp.

◆ ReverseAdapter() [4/5]

template<typename Iter>
helios::utils::ReverseAdapter< Iter >::ReverseAdapter ( const ReverseAdapter< Iter > & ) const
constexprdefaultnoexcept

◆ ReverseAdapter() [5/5]

template<typename Iter>
helios::utils::ReverseAdapter< Iter >::ReverseAdapter ( ReverseAdapter< Iter > && ) const
constexprdefaultnoexcept

◆ ~ReverseAdapter()

template<typename Iter>
helios::utils::ReverseAdapter< Iter >::~ReverseAdapter ( )
constexprdefaultnoexcept

Member Function Documentation

◆ begin()

template<typename Iter>
ReverseAdapter helios::utils::ReverseAdapter< Iter >::begin ( ) const
inlineconstexprnoexcept

Definition at line 2392 of file functional_adapters.hpp.

◆ end()

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
auto helios::utils::ReverseAdapter< Iter >::end ( ) const
constexprnoexcept

Definition at line 2495 of file functional_adapters.hpp.

◆ operator!=()

template<typename Iter>
bool helios::utils::ReverseAdapter< Iter >::operator!= ( const ReverseAdapter< Iter > & other) const
inlineconstexprnoexcept

Definition at line 2386 of file functional_adapters.hpp.

◆ operator*()

template<typename Iter>
reference helios::utils::ReverseAdapter< Iter >::operator* ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 2376 of file functional_adapters.hpp.

◆ operator++() [1/2]

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
auto helios::utils::ReverseAdapter< Iter >::operator++ ( )
constexprnoexcept

Definition at line 2431 of file functional_adapters.hpp.

◆ operator++() [2/2]

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
auto helios::utils::ReverseAdapter< Iter >::operator++ ( int )
nodiscardconstexprnoexcept

Definition at line 2446 of file functional_adapters.hpp.

◆ operator--() [1/2]

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
auto helios::utils::ReverseAdapter< Iter >::operator-- ( )
constexprnoexcept

Definition at line 2456 of file functional_adapters.hpp.

◆ operator--() [2/2]

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
auto helios::utils::ReverseAdapter< Iter >::operator-- ( int )
nodiscardconstexprnoexcept

Definition at line 2474 of file functional_adapters.hpp.

◆ operator->()

template<typename Iter>
pointer helios::utils::ReverseAdapter< Iter >::operator-> ( ) const
delete

◆ operator=() [1/2]

template<typename Iter>
ReverseAdapter & helios::utils::ReverseAdapter< Iter >::operator= ( const ReverseAdapter< Iter > & )
constexprdefaultnoexcept

◆ operator=() [2/2]

template<typename Iter>
ReverseAdapter & helios::utils::ReverseAdapter< Iter >::operator= ( ReverseAdapter< Iter > && )
constexprdefaultnoexcept

◆ operator==()

template<typename Iter>
requires ReverseAdapterRequirements<Iter>
bool helios::utils::ReverseAdapter< Iter >::operator== ( const ReverseAdapter< Iter > & other) const
constexprnoexcept

Definition at line 2484 of file functional_adapters.hpp.