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

#include <functional_adapters.hpp>

Inheritance diagram for helios::utils::ZipAdapter< Iter1, Iter2 >:
helios::utils::FunctionalAdapterBase< ZipAdapter< Iter1, Iter2 > >

Public Types

using iterator_category = std::forward_iterator_tag
 
using value_type = std::tuple< std::iter_value_t< Iter1 >, std::iter_value_t< Iter2 > >
 
using difference_type = std::ptrdiff_t
 
using pointer = value_type *
 
using reference = value_type
 

Public Member Functions

constexpr ZipAdapter (Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) noexcept(std::is_nothrow_move_constructible_v< Iter1 > &&std::is_nothrow_copy_constructible_v< Iter1 > &&std::is_nothrow_move_constructible_v< Iter2 > &&std::is_nothrow_copy_constructible_v< Iter2 >)
 Constructs a zip adapter.
 
constexpr ZipAdapter (const ZipAdapter &) noexcept(std::is_nothrow_copy_constructible_v< Iter1 > &&std::is_nothrow_copy_constructible_v< Iter2 >)=default
 
constexpr ZipAdapter (ZipAdapter &&) noexcept(std::is_nothrow_move_constructible_v< Iter1 > &&std::is_nothrow_move_constructible_v< Iter2 >)=default
 
constexpr ~ZipAdapter () noexcept(std::is_nothrow_destructible_v< Iter1 > &&std::is_nothrow_destructible_v< Iter2 >)=default
 
constexpr ZipAdapteroperator= (const ZipAdapter &) noexcept(std::is_nothrow_copy_assignable_v< Iter1 > &&std::is_nothrow_copy_assignable_v< Iter2 >)=default
 
constexpr ZipAdapteroperator= (ZipAdapter &&) noexcept(std::is_nothrow_move_assignable_v< Iter1 > &&std::is_nothrow_move_assignable_v< Iter2 >)=default
 
constexpr ZipAdapteroperator++ () noexcept(noexcept(std::declval< Iter1 & >() !=std::declval< Iter1 & >()) &&noexcept(++std::declval< Iter1 & >()) &&noexcept(std::declval< Iter2 & >() !=std::declval< Iter2 & >()) &&noexcept(++std::declval< Iter2 & >()))
 
constexpr ZipAdapter operator++ (int) noexcept(std::is_nothrow_copy_constructible_v< ZipAdapter > &&noexcept(++std::declval< ZipAdapter & >()))
 
constexpr value_type operator* () const
 
constexpr bool operator== (const ZipAdapter &other) const noexcept(noexcept(std::declval< const Iter1 & >()==std::declval< const Iter1 & >()) &&noexcept(std::declval< const Iter2 & >()==std::declval< const Iter2 & >()))
 
constexpr bool operator!= (const ZipAdapter &other) const noexcept(noexcept(std::declval< const ZipAdapter & >()==std::declval< const ZipAdapter & >()))
 
constexpr bool IsAtEnd () const noexcept(noexcept(std::declval< const Iter1 & >()==std::declval< const Iter1 & >()) &&noexcept(std::declval< const Iter2 & >()==std::declval< const Iter2 & >()))
 
constexpr ZipAdapter begin () const noexcept(std::is_nothrow_copy_constructible_v< ZipAdapter >)
 
constexpr ZipAdapter end () const noexcept(std::is_nothrow_copy_constructible_v< ZipAdapter >)
 
- Public Member Functions inherited from helios::utils::FunctionalAdapterBase< ZipAdapter< Iter1, Iter2 > >
constexpr auto Filter (Pred predicate) const noexcept(noexcept(FilterAdapter< ZipAdapter< Iter1, Iter2 >, 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< ZipAdapter< Iter1, Iter2 >, 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< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end(), count)))
 Limits the number of elements to at most count.
 
constexpr auto Skip (size_t count) const noexcept(noexcept(SkipAdapter< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end(), count)))
 Skips the first count elements.
 
constexpr auto TakeWhile (Pred predicate) const noexcept(noexcept(TakeWhileAdapter< ZipAdapter< Iter1, Iter2 >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Takes elements while a predicate is true.
 
constexpr auto SkipWhile (Pred predicate) const noexcept(noexcept(SkipWhileAdapter< ZipAdapter< Iter1, Iter2 >, Pred >(GetDerived().begin(), GetDerived().end(), std::move(predicate))))
 Skips elements while a predicate is true.
 
constexpr auto Enumerate () const noexcept(noexcept(EnumerateAdapter< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end())))
 Adds an index to each element.
 
constexpr auto Inspect (Func inspector) const noexcept(noexcept(InspectAdapter< ZipAdapter< Iter1, Iter2 >, Func >(GetDerived().begin(), GetDerived().end(), std::move(inspector))))
 Observes each element without modifying it.
 
constexpr auto StepBy (size_t step) const noexcept(noexcept(StepByAdapter< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end(), step)))
 Takes every Nth element.
 
constexpr auto Chain (OtherIter begin, OtherIter end) const noexcept(noexcept(ChainAdapter< ZipAdapter< Iter1, Iter2 >, 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< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end())))
 Reverses the order of elements.
 
constexpr auto Slide (size_t window_size) const noexcept(noexcept(SlideAdapter< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end(), window_size)))
 Creates sliding windows over elements.
 
constexpr auto Stride (size_t stride) const noexcept(noexcept(StrideAdapter< ZipAdapter< Iter1, Iter2 > >(GetDerived().begin(), GetDerived().end(), stride)))
 Takes every Nth element with stride.
 
constexpr auto Zip (OtherIter begin, OtherIter end) const noexcept(noexcept(ZipAdapter< ZipAdapter< Iter1, Iter2 >, 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< ZipAdapter< Iter1, Iter2 > >
constexpr ZipAdapter< Iter1, Iter2 > & GetDerived () noexcept
 Gets reference to derived class instance.
 
constexpr const ZipAdapter< Iter1, Iter2 > & GetDerived () const noexcept
 Gets const reference to derived class instance.
 

Detailed Description

template<typename Iter1, typename Iter2>
requires ZipAdapterRequirements<Iter1, Iter2>
class helios::utils::ZipAdapter< Iter1, Iter2 >

Definition at line 2406 of file functional_adapters.hpp.

Member Typedef Documentation

◆ difference_type

template<typename Iter1 , typename Iter2 >
using helios::utils::ZipAdapter< Iter1, Iter2 >::difference_type = std::ptrdiff_t

◆ iterator_category

template<typename Iter1 , typename Iter2 >
using helios::utils::ZipAdapter< Iter1, Iter2 >::iterator_category = std::forward_iterator_tag

◆ pointer

template<typename Iter1 , typename Iter2 >
using helios::utils::ZipAdapter< Iter1, Iter2 >::pointer = value_type*

◆ reference

template<typename Iter1 , typename Iter2 >
using helios::utils::ZipAdapter< Iter1, Iter2 >::reference = value_type

◆ value_type

template<typename Iter1 , typename Iter2 >
using helios::utils::ZipAdapter< Iter1, Iter2 >::value_type = std::tuple<std::iter_value_t<Iter1>, std::iter_value_t<Iter2> >

Constructor & Destructor Documentation

◆ ZipAdapter() [1/3]

template<typename Iter1 , typename Iter2 >
constexpr helios::utils::ZipAdapter< Iter1, Iter2 >::ZipAdapter ( Iter1  begin1,
Iter1  end1,
Iter2  begin2,
Iter2  end2 
)
inlineconstexprnoexcept

Constructs a zip adapter.

Parameters
begin1Iterator to the beginning of the first range
end1Iterator to the end of the first range
begin2Iterator to the beginning of the second range
end2Iterator to the end of the second range

Definition at line 2421 of file functional_adapters.hpp.

2426 : first_begin_(std::move(begin1)),
2427 first_current_(first_begin_),
2428 first_end_(std::move(end1)),
2429 second_begin_(std::move(begin2)),
2430 second_current_(second_begin_),
2431 second_end_(std::move(end2)) {}

◆ ZipAdapter() [2/3]

template<typename Iter1 , typename Iter2 >
constexpr helios::utils::ZipAdapter< Iter1, Iter2 >::ZipAdapter ( const ZipAdapter< Iter1, Iter2 > &  ) const &&
constexprdefaultnoexcept

◆ ZipAdapter() [3/3]

template<typename Iter1 , typename Iter2 >
constexpr helios::utils::ZipAdapter< Iter1, Iter2 >::ZipAdapter ( ZipAdapter< Iter1, Iter2 > &&  ) const &&
constexprdefaultnoexcept

◆ ~ZipAdapter()

template<typename Iter1 , typename Iter2 >
constexpr helios::utils::ZipAdapter< Iter1, Iter2 >::~ZipAdapter ( ) &&
constexprdefaultnoexcept

Member Function Documentation

◆ begin()

template<typename Iter1 , typename Iter2 >
constexpr ZipAdapter helios::utils::ZipAdapter< Iter1, Iter2 >::begin ( ) const
inlineconstexprnoexcept

◆ end()

template<typename Iter1 , typename Iter2 >
requires ZipAdapterRequirements<Iter1, Iter2>
constexpr auto helios::utils::ZipAdapter< Iter1, Iter2 >::end ( ) const
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 2509 of file functional_adapters.hpp.

2510 {
2511 auto result = *this;
2512 result.first_current_ = result.first_end_;
2513 result.second_current_ = result.second_end_;
2514 return result;
2515}

◆ IsAtEnd()

template<typename Iter1 , typename Iter2 >
constexpr bool helios::utils::ZipAdapter< Iter1, Iter2 >::IsAtEnd ( ) const
inlineconstexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 2466 of file functional_adapters.hpp.

2467 {
2468 return first_current_ == first_end_ || second_current_ == second_end_;
2469 }

◆ operator!=()

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

Definition at line 2461 of file functional_adapters.hpp.

2462 {
2463 return !(*this == other);
2464 }

◆ operator*()

template<typename Iter1 , typename Iter2 >
constexpr value_type helios::utils::ZipAdapter< Iter1, Iter2 >::operator* ( ) const
inlineconstexpr
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 2453 of file functional_adapters.hpp.

2453{ return std::make_tuple(*first_current_, *second_current_); }

◆ operator++() [1/2]

template<typename Iter1 , typename Iter2 >
requires ZipAdapterRequirements<Iter1, Iter2>
constexpr auto helios::utils::ZipAdapter< Iter1, Iter2 >::operator++ ( )
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 2485 of file functional_adapters.hpp.

2487 {
2488 if (first_current_ != first_end_) {
2489 ++first_current_;
2490 }
2491 if (second_current_ != second_end_) {
2492 ++second_current_;
2493 }
2494 return *this;
2495}

◆ operator++() [2/2]

template<typename Iter1 , typename Iter2 >
requires ZipAdapterRequirements<Iter1, Iter2>
constexpr auto helios::utils::ZipAdapter< Iter1, Iter2 >::operator++ ( int  )
constexprnoexcept

Definition at line 2499 of file functional_adapters.hpp.

2501 {
2502 auto temp = *this;
2503 ++(*this);
2504 return temp;
2505}

◆ operator=() [1/2]

template<typename Iter1 , typename Iter2 >
constexpr ZipAdapter & helios::utils::ZipAdapter< Iter1, Iter2 >::operator= ( const ZipAdapter< Iter1, Iter2 > &  ) &&
constexprdefaultnoexcept

◆ operator=() [2/2]

template<typename Iter1 , typename Iter2 >
constexpr ZipAdapter & helios::utils::ZipAdapter< Iter1, Iter2 >::operator= ( ZipAdapter< Iter1, Iter2 > &&  ) &&
constexprdefaultnoexcept

◆ operator==()

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

Definition at line 2455 of file functional_adapters.hpp.

2457 {
2458 return first_current_ == other.first_current_ || second_current_ == other.second_current_;
2459 }