Helios Engine
A modular ECS based data-oriented C++23 game engine framework
Loading...
Searching...
No Matches
functional_adapters.hpp File Reference
#include <algorithm>
#include <concepts>
#include <cstddef>
#include <functional>
#include <iterator>
#include <optional>
#include <ranges>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  helios::utils::details::adapter_iterator_traits< Iter >
 Traits for Iter, selecting iterator concept from Iter if it has one, else forward. More...
struct  helios::utils::details::is_folder_applicable_impl< Folder, Accumulator, Tuple >
 Helper to extract tuple element types and check if a folder is invocable with accumulator + tuple elements. More...
struct  helios::utils::details::is_folder_applicable_impl< Folder, Accumulator, std::tuple< TupleArgs... > >
struct  helios::utils::details::folder_apply_result< Folder, Accumulator, std::tuple< TupleArgs... > >
class  helios::utils::FilterAdapter< Iter, Pred >
 Iterator adapter that filters elements based on a predicate function. More...
class  helios::utils::MapAdapter< Iter, Func >
 Iterator adapter that transforms each element using a function. More...
class  helios::utils::TakeAdapter< Iter >
 Iterator adapter that yields only the first N elements. More...
class  helios::utils::SkipAdapter< Iter >
 Iterator adapter that skips the first N elements. More...
class  helios::utils::TakeWhileAdapter< Iter, Pred >
 Iterator adapter that takes elements while a predicate returns true. More...
class  helios::utils::SkipWhileAdapter< Iter, Pred >
 Iterator adapter that skips elements while a predicate returns true. More...
class  helios::utils::EnumerateAdapter< Iter >
 Iterator adapter that adds index information to each element. More...
class  helios::utils::InspectAdapter< Iter, Func >
 Iterator adapter that applies a function to each element for observation. More...
class  helios::utils::StepByAdapter< Iter >
 Iterator adapter that steps through elements by a specified stride. More...
class  helios::utils::ChainAdapter< Iter1, Iter2 >
 Iterator adapter that chains two sequences together. More...
class  helios::utils::ReverseAdapter< Iter >
 Adapter that iterates through elements in reverse order. More...
class  helios::utils::SlideView< Iter >
 Adapter that flattens nested ranges into a single sequence. More...
class  helios::utils::SlideAdapter< Iter >
 Adapter that yields sliding windows of elements. More...
class  helios::utils::StrideAdapter< Iter >
 Adapter that yields every Nth element from the range. More...
class  helios::utils::ZipAdapter< Iter1, Iter2 >
 Adapter that combines two ranges into pairs. More...
class  helios::utils::FunctionalAdapterBase< Derived >
 CRTP base class providing common adapter operations. More...

Namespaces

namespace  helios
namespace  helios::utils
namespace  helios::utils::details

Concepts

concept  helios::utils::details::IterYieldsReference
 Checks if the iterator yields a genuine reference (lvalue ref), not a proxy/value.
concept  helios::utils::details::TupleLike
 Concept to check if a type is tuple-like (has tuple_size and get).
concept  helios::utils::details::FolderApplicable
concept  helios::utils::details::CallableOrApplicable
concept  helios::utils::details::CallableOrApplicableWithReturn
concept  helios::utils::AdapterTrait
 Concept for types that are adapter traits (derived from FunctionalAdapterBase).
concept  helios::utils::ExternalRange
 Concept for types that are external ranges (not adapters).
concept  helios::utils::IteratorLike
 Concept for types that can be used as base iterators in adapters.
concept  helios::utils::BidirectionalIteratorLike
 Concept for bidirectional iterators that support decrement operations.
concept  helios::utils::PredicateFor
 Concept for predicate functions that can be applied to iterator values.
concept  helios::utils::TransformFor
 Concept for transformation functions that can be applied to iterator values.
concept  helios::utils::InspectorFor
 Concept for inspection functions that observe but don't modify values.
concept  helios::utils::ActionFor
 Concept for action functions that process values.
concept  helios::utils::FolderFor
 Concept for folder functions that accumulate values.
concept  helios::utils::FilterAdapterRequirements
 Concept to validate FilterAdapter requirements.
concept  helios::utils::MapAdapterRequirements
 Concept to validate MapAdapter requirements.
concept  helios::utils::TakeAdapterRequirements
 Concept to validate TakeAdapter requirements.
concept  helios::utils::SkipAdapterRequirements
 Concept to validate SkipAdapter requirements.
concept  helios::utils::TakeWhileAdapterRequirements
 Concept to validate TakeWhileAdapter requirements.
concept  helios::utils::SkipWhileAdapterRequirements
 Concept to validate SkipWhileAdapter requirements.
concept  helios::utils::EnumerateAdapterRequirements
 Concept to validate EnumerateAdapter requirements.
concept  helios::utils::InspectAdapterRequirements
 Concept to validate InspectAdapter requirements.
concept  helios::utils::StepByAdapterRequirements
 Concept to validate StepByAdapter requirements.
concept  helios::utils::ChainAdapterRequirements
 Concept to validate ChainAdapter requirements.
concept  helios::utils::ReverseAdapterRequirements
 Concept to validate ReverseAdapter requirements.
concept  helios::utils::JoinAdapterRequirements
 Concept to validate JoinAdapter requirements.
concept  helios::utils::SlideAdapterRequirements
 Concept to validate SlideAdapter requirements.
concept  helios::utils::StrideAdapterRequirements
 Concept to validate StrideAdapter requirements.
concept  helios::utils::ZipAdapterRequirements
 Concept to validate ZipAdapter requirements.

Typedefs

template<typename Iter>
using helios::utils::details::find_result_t
 Selects pointer vs optional depending on whether the iterator yields a real ref.
template<typename Iter>
using helios::utils::details::adapter_iterator_concept_t
 Gets the iterator concept from Iter.
template<typename Iter>
using helios::utils::details::adapter_iterator_category_t
 Gets the iterator category from Iter.
template<typename Folder, typename Accumulator, typename Tuple>
using helios::utils::details::folder_apply_result_t
template<typename Func, typename... Args>
using helios::utils::details::call_or_apply_result_t

Functions

template<typename Func, typename... Args>
consteval auto helios::utils::details::GetCallOrApplyResultType () noexcept
 Helper to get the result type of either invoke or apply.
template<ExternalRange R, typename Pred>
 helios::utils::FilterAdapter (R &, Pred) -> FilterAdapter< std::ranges::iterator_t< R >, Pred >
template<ExternalRange R, typename Pred>
 helios::utils::FilterAdapter (const R &, Pred) -> FilterAdapter< std::ranges::iterator_t< const R >, Pred >
template<ExternalRange R, typename Func>
 helios::utils::MapAdapter (R &, Func) -> MapAdapter< std::ranges::iterator_t< R >, Func >
template<ExternalRange R, typename Func>
 helios::utils::MapAdapter (const R &, Func) -> MapAdapter< std::ranges::iterator_t< const R >, Func >
template<ExternalRange R>
 helios::utils::TakeAdapter (R &, size_t) -> TakeAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
 helios::utils::TakeAdapter (const R &, size_t) -> TakeAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R>
 helios::utils::SkipAdapter (R &, size_t) -> SkipAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
 helios::utils::SkipAdapter (const R &, size_t) -> SkipAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R, typename Pred>
 helios::utils::TakeWhileAdapter (R &, Pred) -> TakeWhileAdapter< std::ranges::iterator_t< R >, Pred >
template<ExternalRange R, typename Pred>
 helios::utils::TakeWhileAdapter (const R &, Pred) -> TakeWhileAdapter< std::ranges::iterator_t< const R >, Pred >
template<ExternalRange R, typename Pred>
 helios::utils::SkipWhileAdapter (R &, Pred) -> SkipWhileAdapter< std::ranges::iterator_t< R >, Pred >
template<ExternalRange R, typename Pred>
 helios::utils::SkipWhileAdapter (const R &, Pred) -> SkipWhileAdapter< std::ranges::iterator_t< const R >, Pred >
template<ExternalRange R>
 helios::utils::EnumerateAdapter (R &) -> EnumerateAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
 helios::utils::EnumerateAdapter (const R &) -> EnumerateAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R, typename Func>
 helios::utils::InspectAdapter (R &, Func) -> InspectAdapter< std::ranges::iterator_t< R >, Func >
template<ExternalRange R, typename Func>
 helios::utils::InspectAdapter (const R &, Func) -> InspectAdapter< std::ranges::iterator_t< const R >, Func >
template<ExternalRange R>
 helios::utils::StepByAdapter (R &, size_t) -> StepByAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
 helios::utils::StepByAdapter (const R &, size_t) -> StepByAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R1, ExternalRange R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
 helios::utils::ChainAdapter (R1 &, R2 &) -> ChainAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >
template<ExternalRange R1, ExternalRange R2>
requires ChainAdapterRequirements<std::ranges::iterator_t<const R1>, std::ranges::iterator_t<const R2>>
 helios::utils::ChainAdapter (const R1 &, const R2 &) -> ChainAdapter< std::ranges::iterator_t< const R1 >, std::ranges::iterator_t< const R2 > >
template<ExternalRange R>
 helios::utils::ReverseAdapter (R &) -> ReverseAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
 helios::utils::ReverseAdapter (const R &) -> ReverseAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R>
requires SlideAdapterRequirements<std::ranges::iterator_t<R>>
 helios::utils::SlideAdapter (R &, size_t) -> SlideAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
requires SlideAdapterRequirements<std::ranges::iterator_t<const R>>
 helios::utils::SlideAdapter (const R &, size_t) -> SlideAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R>
requires StrideAdapterRequirements<std::ranges::iterator_t<R>>
 helios::utils::StrideAdapter (R &, size_t) -> StrideAdapter< std::ranges::iterator_t< R > >
template<ExternalRange R>
requires StrideAdapterRequirements<std::ranges::iterator_t<const R>>
 helios::utils::StrideAdapter (const R &, size_t) -> StrideAdapter< std::ranges::iterator_t< const R > >
template<ExternalRange R1, ExternalRange R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<R1>, std::ranges::iterator_t<R2>>
 helios::utils::ZipAdapter (R1 &, R2 &) -> ZipAdapter< std::ranges::iterator_t< R1 >, std::ranges::iterator_t< R2 > >
template<ExternalRange R1, ExternalRange R2>
requires ZipAdapterRequirements<std::ranges::iterator_t<const R1>, std::ranges::iterator_t<const R2>>
 helios::utils::ZipAdapter (const R1 &, const R2 &) -> ZipAdapter< std::ranges::iterator_t< const R1 >, std::ranges::iterator_t< const R2 > >