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

#include <functional_adapters.hpp>

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

Public Types

using iterator_category = std::bidirectional_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 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.
 
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 value_type operator* () const noexcept(noexcept(*std::declval< const Iter & >()))
 
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 >)
 

Detailed Description

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

Definition at line 1613 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>

◆ iterator_category

template<typename Iter >
using helios::utils::ReverseAdapter< Iter >::iterator_category = std::bidirectional_iterator_tag

◆ pointer

◆ reference

◆ value_type

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

Constructor & Destructor Documentation

◆ ReverseAdapter() [1/3]

template<typename Iter >
requires ReverseAdapterRequirements<Iter>
constexpr 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
Examples
/home/runner/work/HeliosEngine/HeliosEngine/src/core/include/helios/core/utils/functional_adapters.hpp.

Definition at line 1673 of file functional_adapters.hpp.

1676 : begin_(std::move(begin)), current_(std::move(end)), end_(current_), done_(begin_ == end_) {
1677 if (current_ != begin_) {
1678 --current_;
1679 }
1680}
constexpr ReverseAdapter end() const noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter >)
constexpr ReverseAdapter begin() const noexcept(std::is_nothrow_copy_constructible_v< ReverseAdapter >)

◆ ReverseAdapter() [2/3]

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

◆ ReverseAdapter() [3/3]

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

◆ ~ReverseAdapter()

Member Function Documentation

◆ begin()

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

◆ end()

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

Definition at line 1745 of file functional_adapters.hpp.

1746 {
1747 auto result = *this;
1748 result.done_ = true;
1749 return result;
1750}

◆ operator!=()

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

Definition at line 1653 of file functional_adapters.hpp.

1654 {
1655 return !(*this == other);
1656 }

◆ operator*()

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

◆ operator++() [1/2]

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

Definition at line 1684 of file functional_adapters.hpp.

1685 {
1686 if (!done_) {
1687 if (current_ == begin_) {
1688 done_ = true;
1689 } else {
1690 --current_;
1691 }
1692 }
1693 return *this;
1694}

◆ operator++() [2/2]

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

Definition at line 1698 of file functional_adapters.hpp.

1700 {
1701 auto temp = *this;
1702 ++(*this);
1703 return temp;
1704}

◆ operator--() [1/2]

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

Definition at line 1708 of file functional_adapters.hpp.

1711 {
1712 if (done_) {
1713 done_ = false;
1714 current_ = begin_;
1715 } else {
1716 if (current_ != end_) {
1717 ++current_;
1718 }
1719 }
1720 return *this;
1721}

◆ operator--() [2/2]

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

Definition at line 1725 of file functional_adapters.hpp.

1727 {
1728 auto temp = *this;
1729 --(*this);
1730 return temp;
1731}

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ operator==()

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

Definition at line 1735 of file functional_adapters.hpp.

1736 {
1737 if (done_ && other.done_) {
1738 return true;
1739 }
1740 return done_ == other.done_ && current_ == other.current_;
1741}