OpenKalman
Classes | Typedefs | Variables
iterator.hpp File Reference
#include <iterator>
#include "language-features.hpp"
#include "core-concepts.hpp"
#include "object-concepts.hpp"
#include "internal/exposition.hpp"
#include "common.hpp"
Include dependency graph for iterator.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  OpenKalman::stdex::detail_indirectly_readable::no_value_type
 
struct  OpenKalman::stdex::detail_indirectly_readable::cond_value_type< typename, typename >
 
struct  OpenKalman::stdex::detail_indirectly_readable::cond_value_type< T, std::enable_if_t< std::is_object_v< T > > >
 
struct  OpenKalman::stdex::detail_indirectly_readable::has_member_value_type_impl< typename, typename >
 
struct  OpenKalman::stdex::detail_indirectly_readable::has_member_value_type_impl< T, std::void_t< typename T::value_type > >
 
struct  OpenKalman::stdex::detail_indirectly_readable::has_member_element_type_impl< typename, typename >
 
struct  OpenKalman::stdex::detail_indirectly_readable::has_member_element_type_impl< T, std::void_t< typename T::element_type > >
 
struct  OpenKalman::stdex::indirectly_readable_traits< I, typename >
 
struct  OpenKalman::stdex::indirectly_readable_traits< T * >
 
struct  OpenKalman::stdex::indirectly_readable_traits< I, std::enable_if_t< std::is_array_v< I > > >
 
struct  OpenKalman::stdex::indirectly_readable_traits< const T >
 
struct  OpenKalman::stdex::indirectly_readable_traits< T, std::enable_if_t< detail_indirectly_readable::has_member_value_type< T > and not detail_indirectly_readable::has_member_element_type< T > > >
 
struct  OpenKalman::stdex::indirectly_readable_traits< T, std::enable_if_t< not detail_indirectly_readable::has_member_value_type< T > and detail_indirectly_readable::has_member_element_type< T > > >
 
struct  OpenKalman::stdex::indirectly_readable_traits< T, std::enable_if_t< detail_indirectly_readable::has_member_value_type< T > and detail_indirectly_readable::has_member_element_type< T > > >
 
struct  OpenKalman::stdex::detail::has_member_difference_type< typename, typename >
 
struct  OpenKalman::stdex::detail::has_member_difference_type< T, std::void_t< typename T::difference_type > >
 
struct  OpenKalman::stdex::incrementable_traits< I, typename >
 
struct  OpenKalman::stdex::incrementable_traits< T, std::enable_if_t< std::is_pointer_v< T > and std::is_object_v< std::remove_pointer_t< T > > > >
 
struct  OpenKalman::stdex::incrementable_traits< const T >
 
struct  OpenKalman::stdex::incrementable_traits< T, std::enable_if_t< not std::is_pointer_v< T > and detail::has_member_difference_type< T >::value > >
 
struct  OpenKalman::stdex::incrementable_traits< T, std::enable_if_t< not std::is_pointer_v< T > and not detail::has_member_difference_type< T >::value and std::is_integral_v< decltype(std::declval< const T & >() - std::declval< const T & >())> > >
 
struct  OpenKalman::stdex::detail::iterator_traits_defined< T, typename >
 
struct  OpenKalman::stdex::detail::iterator_traits_defined< It, std::void_t< typename It::iterator_category, typename It::value_type, typename It::difference_type, typename It::reference > >
 
struct  OpenKalman::stdex::detail::iterator_traits_pointer_defined< T, typename >
 
struct  OpenKalman::stdex::detail::iterator_traits_pointer_defined< It, std::void_t< typename It::pointer > >
 
struct  OpenKalman::stdex::detail::iterator_traits_reference_defined< T, typename >
 
struct  OpenKalman::stdex::detail::iterator_traits_reference_defined< It, std::void_t< typename It::reference > >
 
struct  OpenKalman::stdex::detail::iterator_traits_arrow_valid< T, typename >
 
struct  OpenKalman::stdex::detail::declval< It & >().operator->())> >
 
struct  OpenKalman::stdex::detail::legacy_iterator< T, typename, typename >
 
struct  OpenKalman::stdex::detail::legacy_iterator< T, std::enable_if_t< stdex::copyable< T > and stdex::same_as< decltype(++std::declval< T >()), T & > >, std::void_t< decltype(*std::declval< T >())&, decltype(*std::declval< T >()++)& > >
 
struct  OpenKalman::stdex::detail::legacy_input_iterator< T, typename, typename >
 
struct  OpenKalman::stdex::detail::legacy_input_iterator< T, std::enable_if_t< stdex::signed_integral< typename stdex::incrementable_traits< T >::difference_type > >, std::void_t< typename stdex::incrementable_traits< T >::difference_type, typename stdex::indirectly_readable_traits< T >::value_type, typename stdex::common_reference< decltype(*std::declval< T & >())&&, typename stdex::indirectly_readable_traits< T >::value_type & >::type, decltype(*std::declval< T >()++), typename stdex::common_reference< decltype(*std::declval< T >()++)&&, typename stdex::indirectly_readable_traits< T >::value_type & >::type > >
 
struct  OpenKalman::stdex::detail::inherit_incrementable_traits_difference_if_exists< T, typename >
 
struct  OpenKalman::stdex::detail::inherit_incrementable_traits_difference_if_exists< T, std::void_t< typename stdex::incrementable_traits< T >::difference_type > >
 
struct  OpenKalman::stdex::iterator_traits< Iter, typename >
 
struct  OpenKalman::stdex::iterator_traits< It, std::enable_if_t< detail::iterator_traits_defined< It >::value > >
 
struct  OpenKalman::stdex::iterator_traits< Iter, std::enable_if_t< not detail::iterator_traits_defined< Iter >::value and not detail::legacy_iterator< Iter >::value and detail::legacy_input_iterator< Iter >::value > >
 
struct  OpenKalman::stdex::iterator_traits< Iter, std::enable_if_t< not detail::iterator_traits_defined< Iter >::value and detail::legacy_iterator< Iter >::value and not detail::legacy_input_iterator< Iter >::value > >
 
struct  OpenKalman::stdex::iterator_traits< T * >
 
struct  OpenKalman::stdex::detail::iter_value_impl< T, typename >
 
struct  OpenKalman::stdex::detail::iter_value_impl< T, std::void_t< typename stdex::iterator_traits< T >::value_type > >
 
struct  OpenKalman::stdex::detail::iter_difference_impl< T, typename >
 
struct  OpenKalman::stdex::detail::iter_difference_impl< T, std::void_t< typename stdex::iterator_traits< T >::difference_type > >
 
struct  OpenKalman::stdex::detail::is_indirectly_readable< I, typename, typename >
 
struct  OpenKalman::stdex::detail::is_indirectly_readable< I, std::void_t< iter_value_t< I >, iter_reference_t< I >, iter_rvalue_reference_t< I > >, std::enable_if_t< std::is_same< decltype(*std::declval< I >()), iter_reference_t< I > >::value > >
 
struct  OpenKalman::stdex::detail::is_indirectly_writable< Out, T, typename >
 
struct  OpenKalman::stdex::detail::is_indirectly_writable< Out, T, std::void_t< decltype(*std::declval< Out & >()=std::declval< T && >()), decltype(*std::declval< Out && >()=std::declval< T && >()), decltype(const_cast< const iter_reference_t< Out > && >(*std::declval< Out & >())=std::declval< T && >()), decltype(const_cast< const iter_reference_t< Out > && >(*std::declval< Out && >())=std::declval< T && >()) > >
 
struct  OpenKalman::stdex::detail::is_weakly_incrementable< I, typename, typename >
 
struct  OpenKalman::stdex::detail::is_weakly_incrementable< I, std::void_t< iter_difference_t< I >, decltype(std::declval< I & >()++)>, std::enable_if_t< std::is_same< decltype(++std::declval< I & >()), I & >::value > >
 
struct  OpenKalman::stdex::detail::is_input_or_output_iterator< I, typename, typename >
 
struct  OpenKalman::stdex::detail::is_input_or_output_iterator< I, std::void_t< iter_value_t< I >, iter_reference_t< I >, iter_rvalue_reference_t< I > >, std::enable_if_t< std::is_same< decltype(*std::declval< I >()), iter_reference_t< I > >::value > >
 
struct  OpenKalman::stdex::detail::output_iterator_impl< I, T, typename >
 
struct  OpenKalman::stdex::detail::output_iterator_impl< I, T, std::void_t< decltype(*std::declval< I & >()++=std::declval< T && >())> >
 
struct  OpenKalman::stdex::detail::is_incrementable< I, typename >
 
struct  OpenKalman::stdex::detail::is_incrementable< I, std::enable_if_t< std::is_same< decltype(std::declval< I & >()++), I >::value > >
 
struct  OpenKalman::stdex::detail::is_bidirectional_iterator< I, typename >
 
struct  OpenKalman::stdex::detail::is_bidirectional_iterator< I, std::enable_if_t< stdex::same_as< decltype(--std::declval< I & >()), I & > and stdex::same_as< decltype(std::declval< I & >() --), I > > >
 
struct  OpenKalman::stdex::detail::subtractable< T, U, typename >
 
struct  OpenKalman::stdex::detail::subtractable< I, S, std::enable_if_t< stdex::same_as< decltype(std::declval< const S & >() - std::declval< const I & >()), iter_difference_t< I > > and stdex::same_as< decltype(std::declval< const I & >() - std::declval< const S & >()), iter_difference_t< I > > > >
 
struct  OpenKalman::stdex::detail::is_random_access_iterator< I, typename >
 
struct  OpenKalman::stdex::detail::is_random_access_iterator< I, std::enable_if_t< stdex::same_as< decltype(std::declval< I & >()+=std::declval< iter_difference_t< I >>()), I & > and stdex::same_as< decltype(std::declval< const I & >()+std::declval< iter_difference_t< I >>()), I > and stdex::same_as< decltype(std::declval< iter_difference_t< I >>()+std::declval< const I & >()), I > and stdex::same_as< decltype(std::declval< I & >() -=std::declval< iter_difference_t< I >>()), I & > and stdex::same_as< decltype(std::declval< const I & >() - std::declval< iter_difference_t< I >>()), I > and stdex::same_as< decltype(std::declval< const I & >()[std::declval< iter_difference_t< I >>()]), iter_reference_t< I > > > >
 
struct  OpenKalman::stdex::unreachable_sentinel_t
 

Typedefs

template<typename I >
using OpenKalman::stdex::iter_value_t = typename detail::iter_value_impl< stdex::remove_cvref_t< I > >::value_type
 
template<typename I >
using OpenKalman::stdex::iter_reference_t = decltype(*std::declval< I & >())
 
template<typename I >
using OpenKalman::stdex::iter_difference_t = typename detail::iter_difference_impl< stdex::remove_cvref_t< I > >::difference_type
 
template<typename I >
using OpenKalman::stdex::iter_rvalue_reference_t = decltype(std::move(*std::declval< I & >()))
 
template<typename T , std::enable_if_t< indirectly_readable< T >, int > = 0>
using OpenKalman::stdex::iter_common_reference_t = stdex::common_reference_t< iter_reference_t< T >, iter_value_t< T > & >
 
template<typename T , std::enable_if_t< indirectly_readable< T >, int > = 0>
using OpenKalman::stdex::iter_const_reference_t = stdex::common_reference_t< const iter_value_t< T > &&, iter_reference_t< T > >
 

Variables

template<typename T >
constexpr bool OpenKalman::stdex::detail_indirectly_readable::has_member_value_type = has_member_value_type_impl<T>::value
 
template<typename T >
constexpr bool OpenKalman::stdex::detail_indirectly_readable::has_member_element_type = has_member_element_type_impl<T>::value
 
template<typename I >
constexpr bool OpenKalman::stdex::indirectly_readable = detail::is_indirectly_readable<stdex::remove_cvref_t<I>>::value
 
template<typename Out , typename T >
constexpr bool OpenKalman::stdex::indirectly_writable = detail::is_indirectly_writable<Out, T>::value
 
template<typename I >
constexpr bool OpenKalman::stdex::weakly_incrementable = detail::is_weakly_incrementable<I>::value
 
template<typename I >
constexpr bool OpenKalman::stdex::input_or_output_iterator = detail::is_input_or_output_iterator<I>::value and weakly_incrementable<I>
 
template<typename I >
constexpr bool OpenKalman::stdex::input_iterator
 
template<typename I , typename T >
constexpr bool OpenKalman::stdex::output_iterator
 
template<typename I >
constexpr bool OpenKalman::stdex::incrementable
 
template<typename I >
constexpr bool OpenKalman::stdex::forward_iterator
 
template<typename I >
constexpr bool OpenKalman::stdex::bidirectional_iterator
 
template<typename S , typename I >
constexpr bool OpenKalman::stdex::sentinel_for
 
template<typename S , typename I >
constexpr bool OpenKalman::stdex::sized_sentinel_for
 
template<typename I >
constexpr bool OpenKalman::stdex::random_access_iterator
 
constexpr unreachable_sentinel_t OpenKalman::stdex::unreachable_sentinel {}
 
template<typename In , typename Out >
constexpr bool OpenKalman::stdex::indirectly_copyable
 

Variable Documentation

◆ bidirectional_iterator

template<typename I >
constexpr bool OpenKalman::stdex::bidirectional_iterator
inline
Initial value:
=
forward_iterator<I> and
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45

◆ forward_iterator

template<typename I >
constexpr bool OpenKalman::stdex::forward_iterator
inline
Initial value:
=
input_iterator<I> and
incrementable<I>

◆ incrementable

template<typename I >
constexpr bool OpenKalman::stdex::incrementable
inline
Initial value:
=
stdex::copy_constructible<I> and
std::is_object_v<I> and
std::is_move_constructible_v<I> and
std::is_assignable_v<I&, I> and
std::is_assignable_v<I&, I&> and
std::is_assignable_v<I&, const I&> and
std::is_assignable_v<I&, const I> and
default_initializable<I> and
weakly_incrementable<I> and
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45

◆ indirectly_copyable

template<typename In , typename Out >
constexpr bool OpenKalman::stdex::indirectly_copyable
inline
Initial value:
=
indirectly_readable<In> and
indirectly_writable<Out, iter_reference_t<In>>

◆ input_iterator

template<typename I >
constexpr bool OpenKalman::stdex::input_iterator
inline
Initial value:
=
input_or_output_iterator<I> and
indirectly_readable<I>

◆ output_iterator

template<typename I , typename T >
constexpr bool OpenKalman::stdex::output_iterator
inline
Initial value:
=
input_or_output_iterator<I> and
indirectly_writable<I, T> and
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45

◆ random_access_iterator

template<typename I >
constexpr bool OpenKalman::stdex::random_access_iterator
inline
Initial value:
=
bidirectional_iterator<I> and
stdex::totally_ordered<I> and
stdex::sized_sentinel_for<I, I> and
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45

◆ sentinel_for

template<typename S , typename I >
constexpr bool OpenKalman::stdex::sentinel_for
inline
Initial value:
=
stdex::semiregular<S> and input_or_output_iterator<I> and OpenKalman::internal::WeaklyEqualityComparableWith<S, I>

◆ sized_sentinel_for

template<typename S , typename I >
constexpr bool OpenKalman::stdex::sized_sentinel_for
inline
Initial value:
= sentinel_for<S, I> and
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45