JH-Toolkit v1.4.1
An engineering-oriented C++20 toolkit with duck-typed concepts, static design, async coroutines, and semantic containers — header-only, RTTI-free, and concurrency-friendly.
Loading...
Searching...
No Matches
jh::ranges::vis_transform_view< R, F >::iterator Struct Reference

Iterator type implementing the transformation projection. More...

#include <jh/ranges/vis_transform_view.h>

Public Types

using Base = const std::remove_reference_t<R>
using base_iterator = std::ranges::iterator_t<Base>
using iterator_concept
using difference_type = std::ranges::range_difference_t<Base>
using value_type

Public Member Functions

constexpr iterator (const vis_transform_view *p, base_iterator it)
constexpr decltype(auto) operator* () const noexcept(noexcept(std::invoke(std::declval< const F & >(), *std::declval< base_iterator & >())))
 Apply the transformation function on dereference.
constexpr iterator & operator++ ()
constexpr iterator operator++ (int) noexcept(noexcept(std::declval< base_iterator & >()++))
constexpr iterator & operator-- () noexcept(noexcept(--std::declval< base_iterator & >()))
constexpr iterator operator-- (int) noexcept(noexcept(std::declval< base_iterator & >() --))
constexpr iterator & operator+= (difference_type n) noexcept(noexcept(std::declval< base_iterator & >()+=n))
constexpr iterator & operator-= (difference_type n) noexcept(noexcept(std::declval< base_iterator & >() -=n))
constexpr iterator operator+ (difference_type n) const noexcept(noexcept(std::declval< const base_iterator & >()+n))
constexpr iterator operator- (difference_type n) const noexcept(noexcept(std::declval< const base_iterator & >() - n))
constexpr decltype(auto) operator[] (difference_type n) const noexcept(noexcept(std::declval< const base_iterator & >()[n]))

Public Attributes

base_iterator current_
const vis_transform_viewparent_ = nullptr

Friends

constexpr bool operator== (const iterator &a, const iterator &b) noexcept(noexcept(a.current_==b.current_))
constexpr bool operator!= (const iterator &a, const iterator &b) noexcept(noexcept(!(a==b)))
constexpr difference_type operator- (const iterator &a, const iterator &b) noexcept(noexcept(a.current_ - b.current_))
constexpr bool operator< (const iterator &a, const iterator &b) noexcept(noexcept(a.current_< b.current_))
constexpr bool operator> (const iterator &a, const iterator &b) noexcept(noexcept(a.current_ > b.current_))
constexpr bool operator<= (const iterator &a, const iterator &b) noexcept(noexcept(a.current_<=b.current_))
constexpr bool operator>= (const iterator &a, const iterator &b) noexcept(noexcept(a.current_ >=b.current_))
constexpr iterator operator+ (difference_type n, const iterator &it) noexcept(noexcept(n+std::declval< const base_iterator & >()))
template<typename Sentinel>
constexpr bool operator== (const iterator &it, const Sentinel &sent) noexcept(noexcept(it.current_==sent))
template<typename Sentinel>
constexpr bool operator== (const Sentinel &sent, const iterator &it) noexcept(noexcept(it==sent))
template<typename Sentinel>
constexpr bool operator!= (const iterator &it, const Sentinel &sent) noexcept(noexcept(!(it==sent)))
template<typename Sentinel>
constexpr bool operator!= (const Sentinel &sent, const iterator &it) noexcept(noexcept(!(it==sent)))

Detailed Description

template<std::ranges::range R, typename F>
struct jh::ranges::vis_transform_view< R, F >::iterator

Iterator type implementing the transformation projection.

Each dereference applies the stored function to the corresponding element of the base iterator. Iterator category and operations mirror those of the base iterator.

Member Typedef Documentation

◆ iterator_concept

template<std::ranges::range R, typename F>
using jh::ranges::vis_transform_view< R, F >::iterator::iterator_concept
Initial value:
decltype([] {
if constexpr (std::ranges::random_access_range<Base>)
return std::type_identity<std::random_access_iterator_tag>{};
else if constexpr (std::ranges::bidirectional_range<Base>)
return std::type_identity<std::bidirectional_iterator_tag>{};
else if constexpr (std::ranges::forward_range<Base>)
return std::type_identity<std::forward_iterator_tag>{};
else
return std::type_identity<std::input_iterator_tag>{};
}())::type

◆ value_type

template<std::ranges::range R, typename F>
using jh::ranges::vis_transform_view< R, F >::iterator::value_type
Initial value:
std::remove_cvref_t<
std::invoke_result_t<const F &, std::ranges::range_reference_t<Base>>>

The documentation for this struct was generated from the following file: