Tatooine
Classes | Namespaces | Concepts | Typedefs | Functions
iterator_facade.h File Reference

Go to the source code of this file.

Classes

struct  tatooine::iterator_sentinel
 
struct  tatooine::infer_value_type_impl< Iter >
 Just use the return type of derefence operator. More...
 
struct  tatooine::infer_value_type_impl< T >
 If value_type is explicitly given use this typedef. More...
 
struct  tatooine::infer_difference_type_impl< typename >
 Base case. More...
 
struct  tatooine::infer_difference_type_impl< Iter >
 Case when Iter provides a distance_to More...
 
class  tatooine::iterator_facade< Iter >
 C++20 implementation of an iterator facade. More...
 
struct  std::iterator_traits< Iter >
 

Namespaces

namespace  tatooine
 

Concepts

concept  tatooine::implements_distance_to
 
concept  tatooine::implements_decrement
 
concept  tatooine::implements_dereference
 
concept  tatooine::implements_increment
 
concept  tatooine::implements_advance
 
concept  tatooine::difference_type_arg
 
concept  tatooine::implements_equal
 
concept  tatooine::meets_random_access
 
concept  tatooine::meets_bidirectional
 We meet bidirectional if we are random_access, OR we have .decrement()
 
concept  tatooine::declares_single_pass
 Detect if the iterator declares itself to be a single-pass iterator.
 
concept  tatooine::implements_sentinel_type
 
concept  tatooine::iter_sentinel_arg
 
concept  tatooine::implements_basic_iterator_facade
 
concept  tatooine::derived_from_iterator_facade
 

Typedefs

template<typename T >
using tatooine::infer_value_type = typename infer_value_type_impl< T >::type
 
template<typename Iter >
using tatooine::infer_difference_type = typename infer_difference_type_impl< Iter >::type
 

Functions

template<typename Range >
requires requires(Range &&range) { range.begin(); }
auto tatooine::begin (Range &&range)
 
template<typename Range >
requires requires(Range &&range) { range.end(); }
auto tatooine::end (Range &&range)
 
template<derived_from_iterator_facade Iter>
auto tatooine::next (Iter iter)
 
template<derived_from_iterator_facade Iter>
auto tatooine::next (Iter iter, difference_type_arg< Iter > auto off)
 
template<derived_from_iterator_facade Iter>
requires implements_decrement<Iter>
auto tatooine::prev (Iter iter)
 
template<derived_from_iterator_facade Iter>
requires implements_decrement<Iter>
auto tatooine::prev (Iter iter, difference_type_arg< Iter > auto off)
 
template<derived_from_iterator_facade Iter>
requires implements_advance<Iter>
auto tatooine::advance (Iter &iter)
 
template<derived_from_iterator_facade Iter>
requires implements_advance<Iter>
auto tatooine::advance (Iter &iter, difference_type_arg< Iter > auto off)
 
template<derived_from_iterator_facade Iter>
requires implements_distance_to<Iter>
constexpr auto tatooine::distance (Iter const &it0, Iter const &it1)
 
template<derived_from_iterator_facade Iter>
requires implements_distance_to<Iter>
constexpr auto tatooine::distance (Iter const &it0, iter_sentinel_arg< Iter > auto const &it1)
 
template<derived_from_iterator_facade Iter>
requires implements_distance_to<Iter>
constexpr auto tatooine::distance (iter_sentinel_arg< Iter > auto const &it0, Iter const &it1)