OpenKalman
Classes | Namespaces | Typedefs | Variables
iterator.hpp File Reference
#include <iterator>
#include "language-features.hpp"
#include "common_reference.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::detail_indirectly_readable::no_value_type
 
struct  OpenKalman::detail_indirectly_readable::cond_value_type< typename, typename >
 
struct  OpenKalman::detail_indirectly_readable::cond_value_type< T, std::enable_if_t< std::is_object_v< T > > >
 
struct  OpenKalman::detail_indirectly_readable::has_member_value_type_impl< typename, typename >
 
struct  OpenKalman::detail_indirectly_readable::has_member_value_type_impl< T, std::void_t< typename T::value_type > >
 
struct  OpenKalman::detail_indirectly_readable::has_member_element_type_impl< typename, typename >
 
struct  OpenKalman::detail_indirectly_readable::has_member_element_type_impl< T, std::void_t< typename T::element_type > >
 
struct  OpenKalman::indirectly_readable_traits< I, typename >
 
struct  OpenKalman::indirectly_readable_traits< T * >
 
struct  OpenKalman::indirectly_readable_traits< I, std::enable_if_t< std::is_array_v< I > > >
 
struct  OpenKalman::indirectly_readable_traits< const T >
 
struct  OpenKalman::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::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::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::detail::has_member_difference_type< typename, typename >
 
struct  OpenKalman::detail::has_member_difference_type< T, std::void_t< typename T::difference_type > >
 
struct  OpenKalman::incrementable_traits< I, typename >
 
struct  OpenKalman::incrementable_traits< T *, std::enable_if_t< std::is_object_v< T > > >
 
struct  OpenKalman::incrementable_traits< const T >
 
struct  OpenKalman::incrementable_traits< T, std::enable_if_t< detail::has_member_difference_type< T >::value > >
 
struct  OpenKalman::incrementable_traits< T, std::enable_if_t< not detail::has_member_difference_type< T >::value and std::is_integral_v< decltype(std::declval< const T & >() - std::declval< const T & >())> > >
 
struct  OpenKalman::detail::iter_value_impl< T, typename >
 
struct  OpenKalman::detail::iter_value_impl< T, std::void_t< typename std::iterator_traits< T >::value_type > >
 
struct  OpenKalman::detail::iter_difference_impl< T, typename >
 
struct  OpenKalman::detail::iter_difference_impl< T, std::void_t< typename std::iterator_traits< T >::difference_type > >
 
struct  OpenKalman::detail::is_indirectly_readable< I, typename, typename >
 
struct  OpenKalman::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::detail::is_indirectly_writable< Out, T, typename >
 
struct  OpenKalman::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::detail::is_weakly_incrementable< I, typename, typename >
 
struct  OpenKalman::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::detail::is_input_or_output_iterator< I, typename, typename >
 
struct  OpenKalman::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::detail::output_iterator_impl< I, T, typename >
 
struct  OpenKalman::detail::output_iterator_impl< I, T, std::void_t< decltype(*std::declval< I & >()++=std::declval< T && >())> >
 
struct  OpenKalman::detail::is_incrementable< I, typename >
 
struct  OpenKalman::detail::is_incrementable< I, std::enable_if_t< std::is_same< decltype(std::declval< I & >()++), I >::value > >
 
struct  OpenKalman::detail::is_bidirectional_iterator< I, typename >
 
struct  OpenKalman::detail::is_bidirectional_iterator< I, std::enable_if_t< std::is_same< decltype(--std::declval< I & >()), I & >::value and std::is_same< decltype(std::declval< I & >() --), I >::value > >
 
struct  OpenKalman::detail::is_random_access_iterator< I, typename >
 
struct  OpenKalman::detail::is_random_access_iterator< I, std::enable_if_t< std::is_same_v< decltype(std::declval< I & >()+=std::declval< iter_difference_t< I >>()), I & > and std::is_same_v< decltype(std::declval< const I & >()+std::declval< iter_difference_t< I >>()), I > and std::is_same_v< decltype(std::declval< iter_difference_t< I >>()+std::declval< const I & >()), I > and std::is_same_v< decltype(std::declval< I & >() -=std::declval< iter_difference_t< I >>()), I & > and std::is_same_v< decltype(std::declval< const I & >() - std::declval< iter_difference_t< I >>()), I > and std::is_same_v< decltype(std::declval< const I & >()[std::declval< iter_difference_t< I >>()]), iter_reference_t< I > > > >
 
struct  OpenKalman::detail::WeaklyEqualityComparableWith< T, U, typename >
 
struct  OpenKalman::detail::WeaklyEqualityComparableWith< T, U, std::enable_if_t< std::is_convertible_v< decltype(std::declval< const T & >()==std::declval< const U & >()), bool > and std::is_convertible_v< decltype(std::declval< const T & >() !=std::declval< const U & >()), bool > and std::is_convertible_v< decltype(std::declval< const U & >()==std::declval< const T & >()), bool > and std::is_convertible_v< decltype(std::declval< const U & >() !=std::declval< const T & >()), bool > > >
 
struct  OpenKalman::detail::subtractable< T, U, typename >
 
struct  OpenKalman::detail::subtractable< I, S, std::enable_if_t< std::is_same_v< decltype(std::declval< const S & >() - std::declval< const I & >()), iter_difference_t< I > > and std::is_same_v< decltype(std::declval< const I & >() - std::declval< const S & >()), iter_difference_t< I > > > >
 
struct  OpenKalman::unreachable_sentinel_t
 

Namespaces

 OpenKalman
 The root namespace for OpenKalman.
 
 OpenKalman::detail
 T is an acceptable noise perturbation input to a tests.
 

Typedefs

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

Variables

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