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

#include <functional_adapters.hpp>

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

Public Types

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

Public Member Functions

constexpr TakeAdapter (Iter begin, Iter end, size_t count) noexcept(std::is_nothrow_move_constructible_v< Iter > &&std::is_nothrow_copy_constructible_v< Iter >)
 Constructs a take adapter with the given iterator range and count.
 
constexpr TakeAdapter (const TakeAdapter &) noexcept(std::is_nothrow_copy_constructible_v< Iter >)=default
 
constexpr TakeAdapter (TakeAdapter &&) noexcept(std::is_nothrow_move_constructible_v< Iter >)=default
 
constexpr ~TakeAdapter () noexcept(std::is_nothrow_destructible_v< Iter >)=default
 
constexpr TakeAdapteroperator= (const TakeAdapter &) noexcept(std::is_nothrow_copy_assignable_v< Iter >)=default
 
constexpr TakeAdapteroperator= (TakeAdapter &&) noexcept(std::is_nothrow_move_assignable_v< Iter >)=default
 
constexpr TakeAdapteroperator++ () noexcept(noexcept(++std::declval< Iter & >()))
 
constexpr TakeAdapter operator++ (int) noexcept(std::is_nothrow_copy_constructible_v< TakeAdapter > &&noexcept(++std::declval< TakeAdapter & >()))
 
constexpr value_type operator* () const noexcept(noexcept(*std::declval< const Iter & >()))
 
constexpr bool operator== (const TakeAdapter &other) const noexcept(noexcept(std::declval< const Iter & >()==std::declval< const Iter & >()))
 
constexpr bool operator!= (const TakeAdapter &other) const noexcept(noexcept(std::declval< const TakeAdapter & >()==std::declval< const TakeAdapter & >()))
 
constexpr bool IsAtEnd () const noexcept(noexcept(std::declval< const Iter & >()==std::declval< const Iter & >()))
 Checks if the iterator has reached the end.
 
constexpr TakeAdapter begin () const noexcept(std::is_nothrow_copy_constructible_v< TakeAdapter >)
 
constexpr TakeAdapter end () const noexcept(std::is_nothrow_copy_constructible_v< TakeAdapter >)
 

Detailed Description

template<typename Iter>
requires TakeAdapterRequirements<Iter>
class helios::utils::TakeAdapter< Iter >

Definition at line 649 of file functional_adapters.hpp.

Member Typedef Documentation

◆ difference_type

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

◆ iterator_category

template<typename Iter >
using helios::utils::TakeAdapter< Iter >::iterator_category = std::forward_iterator_tag

◆ pointer

◆ reference

◆ value_type

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

Constructor & Destructor Documentation

◆ TakeAdapter() [1/3]

template<typename Iter >
constexpr helios::utils::TakeAdapter< Iter >::TakeAdapter ( Iter  begin,
Iter  end,
size_t  count 
)
inlineconstexprnoexcept

Constructs a take adapter with the given iterator range and count.

Parameters
beginStart of the iterator range
endEnd of the iterator range
countMaximum number of elements to yield

Definition at line 663 of file functional_adapters.hpp.

665 : begin_(std::move(begin)), current_(begin_), end_(std::move(end)), initial_count_(count), remaining_(count) {}
constexpr TakeAdapter end() const noexcept(std::is_nothrow_copy_constructible_v< TakeAdapter >)
constexpr TakeAdapter begin() const noexcept(std::is_nothrow_copy_constructible_v< TakeAdapter >)

◆ TakeAdapter() [2/3]

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

◆ TakeAdapter() [3/3]

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

◆ ~TakeAdapter()

Member Function Documentation

◆ begin()

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

◆ end()

template<typename Iter >
requires TakeAdapterRequirements<Iter>
constexpr auto helios::utils::TakeAdapter< Iter >::end ( ) const
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 749 of file functional_adapters.hpp.

750 {
751 auto end_iter = *this;
752 end_iter.remaining_ = 0;
753 return end_iter;
754}

◆ IsAtEnd()

template<typename Iter >
constexpr bool helios::utils::TakeAdapter< Iter >::IsAtEnd ( ) const
inlineconstexprnoexcept

Checks if the iterator has reached the end.

Returns
True if at end, false otherwise
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 694 of file functional_adapters.hpp.

695 {
696 return remaining_ == 0 || current_ == end_;
697 }

◆ operator!=()

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

◆ operator*()

template<typename Iter >
constexpr value_type helios::utils::TakeAdapter< Iter >::operator* ( ) const
inlineconstexprnoexcept

◆ operator++() [1/2]

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

Definition at line 715 of file functional_adapters.hpp.

715 {
716 if (remaining_ > 0 && current_ != end_) {
717 ++current_;
718 --remaining_;
719 }
720 return *this;
721}

◆ operator++() [2/2]

template<typename Iter >
requires TakeAdapterRequirements<Iter>
constexpr auto helios::utils::TakeAdapter< Iter >::operator++ ( int  )
constexprnoexcept

Definition at line 725 of file functional_adapters.hpp.

726 {
727 auto temp = *this;
728 ++(*this);
729 return temp;
730}

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==()

template<typename Iter >
requires TakeAdapterRequirements<Iter>
constexpr bool helios::utils::TakeAdapter< Iter >::operator== ( const TakeAdapter< Iter > &  other) const
constexprnoexcept
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 734 of file functional_adapters.hpp.

735 {
736 // Both are at end if either has no remaining elements or both iterators are at end
737 const bool this_at_end = (remaining_ == 0) || (current_ == end_);
738 const bool other_at_end = (other.remaining_ == 0) || (other.current_ == other.end_);
739
740 if (this_at_end && other_at_end) {
741 return true;
742 }
743
744 return (current_ == other.current_) && (remaining_ == other.remaining_);
745}