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

#include <functional_adapters.hpp>

Inheritance diagram for helios::utils::MapAdapter< Iter, Func >:
helios::utils::FunctionalAdapterBase< MapAdapter< Iter, Func > >

Public Types

using iterator_category = std::forward_iterator_tag
 
using value_type = typename DeduceValueType< std::iter_value_t< Iter > >::Type
 
using difference_type = std::iter_difference_t< Iter >
 
using pointer = value_type *
 
using reference = value_type
 

Public Member Functions

constexpr MapAdapter (Iter begin, Iter end, Func transform) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_move_constructible_v< Func >)
 Constructs a map adapter with the given iterator range and transform function.
 
constexpr MapAdapter (const MapAdapter &) noexcept(std::is_nothrow_copy_constructible_v< Iter > &&std::is_nothrow_copy_constructible_v< Func >)=default
 
constexpr MapAdapter (MapAdapter &&) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_move_constructible_v< Func >)=default
 
constexpr ~MapAdapter () noexcept(std::is_nothrow_destructible_v< Iter > &&std::is_nothrow_destructible_v< Func >)=default
 
constexpr MapAdapteroperator= (const MapAdapter &) noexcept(std::is_nothrow_copy_assignable_v< Iter > &&std::is_nothrow_copy_assignable_v< Func >)=default
 
constexpr MapAdapteroperator= (MapAdapter &&) noexcept(std::is_nothrow_move_assignable_v< Iter > &&std::is_nothrow_move_assignable_v< Func >)=default
 
constexpr MapAdapteroperator++ () noexcept(noexcept(++std::declval< Iter & >()))
 
constexpr MapAdapter operator++ (int) noexcept(std::is_nothrow_copy_constructible_v< MapAdapter > &&noexcept(++std::declval< MapAdapter & >()))
 
constexpr value_type operator* () const noexcept(std::is_nothrow_invocable_v< Func, std::iter_value_t< Iter > > &&noexcept(*std::declval< const Iter & >()))
 
constexpr bool operator== (const MapAdapter &other) const noexcept(noexcept(std::declval< const Iter & >()==std::declval< const Iter & >()))
 
constexpr bool operator!= (const MapAdapter &other) const noexcept(noexcept(std::declval< const MapAdapter & >()==std::declval< const MapAdapter & >()))
 
constexpr MapAdapter begin () const noexcept(std::is_nothrow_copy_constructible_v< MapAdapter >)
 
constexpr MapAdapter end () const noexcept(std::is_nothrow_constructible_v< MapAdapter, const Iter &, const Iter &, const Func & >)
 
- Public Member Functions inherited from helios::utils::FunctionalAdapterBase< MapAdapter< Iter, Func > >
constexpr auto Filter (Pred predicate) const noexcept(noexcept(FilterAdapter< MapAdapter< Iter, Func >, 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< MapAdapter< Iter, Func >, 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< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end(), count)))
 Limits the number of elements to at most count.
 
constexpr auto Skip (size_t count) const noexcept(noexcept(SkipAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end(), count)))
 Skips the first count elements.
 
constexpr auto TakeWhile (Pred predicate) const noexcept(noexcept(TakeWhileAdapter< MapAdapter< Iter, Func >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Takes elements while a predicate is true.
 
constexpr auto SkipWhile (Pred predicate) const noexcept(noexcept(SkipWhileAdapter< MapAdapter< Iter, Func >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Skips elements while a predicate is true.
 
constexpr auto Enumerate () const noexcept(noexcept(EnumerateAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end())))
 Adds an index to each element.
 
constexpr auto Inspect (Func inspector) const noexcept(noexcept(InspectAdapter< MapAdapter< Iter, Func >, Func >(GetDerived().begin(), GetDerived().end(), std::move(inspector))))
 Observes each element without modifying it.
 
constexpr auto StepBy (size_t step) const noexcept(noexcept(StepByAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end(), step)))
 Takes every Nth element.
 
constexpr auto Chain (OtherIter begin, OtherIter end) const noexcept(noexcept(ChainAdapter< MapAdapter< Iter, Func >, OtherIter >(GetDerived().begin(), GetDerived().end(), std::move(begin), std::move(end))))
 Chains another range after this one.
 
constexpr auto Chain (R &range) const noexcept(noexcept(ChainAdapterFromRange(GetDerived(), range)))
 Chains another range after this one.
 
constexpr auto Chain (const R &range) const noexcept(noexcept(ChainAdapterFromRange(GetDerived(), range)))
 Chains another range after this one.
 
constexpr auto Reverse () const noexcept(noexcept(ReverseAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end())))
 Reverses the order of elements.
 
constexpr auto Slide (size_t window_size) const noexcept(noexcept(SlideAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end(), window_size)))
 Creates sliding windows over elements.
 
constexpr auto Stride (size_t stride) const noexcept(noexcept(StrideAdapter< MapAdapter< Iter, Func > >(GetDerived().begin(), GetDerived().end(), stride)))
 Takes every Nth element with stride.
 
constexpr auto Zip (OtherIter begin, OtherIter end) const noexcept(noexcept(ZipAdapter< MapAdapter< Iter, Func >, OtherIter >(GetDerived().begin(), GetDerived().end(), std::move(begin), std::move(end))))
 Zips another range with this one.
 
constexpr auto Zip (R &range) const noexcept(noexcept(ZipAdapterFromRange(GetDerived(), range)))
 Zips another range with this one.
 
constexpr auto Zip (const R &range) const noexcept(noexcept(ZipAdapterFromRange(GetDerived(), range)))
 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 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.
 
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 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 Collect () const
 Terminal operation: collects all elements into a vector.
 
constexpr void Into (OutIt out) const
 

Additional Inherited Members

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

Detailed Description

template<typename Iter, typename Func>
requires MapAdapterRequirements<Iter, Func>
class helios::utils::MapAdapter< Iter, Func >

Definition at line 540 of file functional_adapters.hpp.

Member Typedef Documentation

◆ difference_type

template<typename Iter , typename Func >
using helios::utils::MapAdapter< Iter, Func >::difference_type = std::iter_difference_t<Iter>

◆ iterator_category

template<typename Iter , typename Func >
using helios::utils::MapAdapter< Iter, Func >::iterator_category = std::forward_iterator_tag

◆ pointer

template<typename Iter , typename Func >
using helios::utils::MapAdapter< Iter, Func >::pointer = value_type*

◆ reference

template<typename Iter , typename Func >
using helios::utils::MapAdapter< Iter, Func >::reference = value_type

◆ value_type

template<typename Iter , typename Func >
using helios::utils::MapAdapter< Iter, Func >::value_type = typename DeduceValueType<std::iter_value_t<Iter> >::Type

Constructor & Destructor Documentation

◆ MapAdapter() [1/3]

template<typename Iter , typename Func >
constexpr helios::utils::MapAdapter< Iter, Func >::MapAdapter ( Iter  begin,
Iter  end,
Func  transform 
)
inlineconstexprnoexcept

Constructs a map adapter with the given iterator range and transform function.

Parameters
beginStart of the iterator range
endEnd of the iterator range
transformFunction to transform elements

Definition at line 569 of file functional_adapters.hpp.

571 : begin_(std::move(begin)), current_(begin_), end_(std::move(end)), transform_(std::move(transform)) {}
constexpr MapAdapter end() const noexcept(std::is_nothrow_constructible_v< MapAdapter, const Iter &, const Iter &, const Func & >)
constexpr MapAdapter begin() const noexcept(std::is_nothrow_copy_constructible_v< MapAdapter >)

◆ MapAdapter() [2/3]

template<typename Iter , typename Func >
constexpr helios::utils::MapAdapter< Iter, Func >::MapAdapter ( const MapAdapter< Iter, Func > &  ) const &&
constexprdefaultnoexcept

◆ MapAdapter() [3/3]

template<typename Iter , typename Func >
constexpr helios::utils::MapAdapter< Iter, Func >::MapAdapter ( MapAdapter< Iter, Func > &&  ) const &&
constexprdefaultnoexcept

◆ ~MapAdapter()

template<typename Iter , typename Func >
constexpr helios::utils::MapAdapter< Iter, Func >::~MapAdapter ( ) &&
constexprdefaultnoexcept

Member Function Documentation

◆ begin()

template<typename Iter , typename Func >
constexpr MapAdapter helios::utils::MapAdapter< Iter, Func >::begin ( ) const
inlineconstexprnoexcept

◆ end()

template<typename Iter , typename Func >
constexpr MapAdapter helios::utils::MapAdapter< Iter, Func >::end ( ) const
inlineconstexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 605 of file functional_adapters.hpp.

606 {
607 return {end_, end_, transform_};
608 }

◆ operator!=()

template<typename Iter , typename Func >
constexpr bool helios::utils::MapAdapter< Iter, Func >::operator!= ( const MapAdapter< Iter, Func > &  other) const
inlineconstexprnoexcept

◆ operator*()

template<typename Iter , typename Func >
requires MapAdapterRequirements<Iter, Func>
constexpr auto helios::utils::MapAdapter< Iter, Func >::operator* ( ) const
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 635 of file functional_adapters.hpp.

637 {
638 auto value = *current_;
639 if constexpr (std::invocable<Func, decltype(value)>) {
640 return transform_(value);
641 } else {
642 return std::apply(transform_, value);
643 }
644}

◆ operator++() [1/2]

template<typename Iter , typename Func >
requires MapAdapterRequirements<Iter, Func>
constexpr auto helios::utils::MapAdapter< Iter, Func >::operator++ ( )
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 619 of file functional_adapters.hpp.

619 {
620 ++current_;
621 return *this;
622}

◆ operator++() [2/2]

template<typename Iter , typename Func >
requires MapAdapterRequirements<Iter, Func>
constexpr auto helios::utils::MapAdapter< Iter, Func >::operator++ ( int  )
constexprnoexcept

Definition at line 626 of file functional_adapters.hpp.

627 {
628 auto temp = *this;
629 ++(*this);
630 return temp;
631}

◆ operator=() [1/2]

template<typename Iter , typename Func >
constexpr MapAdapter & helios::utils::MapAdapter< Iter, Func >::operator= ( const MapAdapter< Iter, Func > &  ) &&
constexprdefaultnoexcept

◆ operator=() [2/2]

template<typename Iter , typename Func >
constexpr MapAdapter & helios::utils::MapAdapter< Iter, Func >::operator= ( MapAdapter< Iter, Func > &&  ) &&
constexprdefaultnoexcept

◆ operator==()

template<typename Iter , typename Func >
constexpr bool helios::utils::MapAdapter< Iter, Func >::operator== ( const MapAdapter< Iter, Func > &  other) const
inlineconstexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 592 of file functional_adapters.hpp.

593 {
594 return current_ == other.current_;
595 }