libostd
|
The range system implementation. More...
Go to the source code of this file.
Classes | |
struct | ostd::input_range_tag |
The input range tag. More... | |
struct | ostd::output_range_tag |
The output range tag. More... | |
struct | ostd::forward_range_tag |
The forward range tag. More... | |
struct | ostd::bidirectional_range_tag |
The bidirectional range tag. More... | |
struct | ostd::random_access_range_tag |
The infinite random access range tag. More... | |
struct | ostd::finite_random_access_range_tag |
The finite random access range tag. More... | |
struct | ostd::contiguous_range_tag |
The contiguous range tag. More... | |
struct | ostd::range_traits< R > |
The traits (properties) of a range type. More... | |
struct | ostd::input_range< B > |
A base type for all input-type ranges to derive from. More... | |
struct | ostd::output_range< B > |
The base type for all pure output ranges. More... | |
struct | ostd::ranged_traits< C > |
A structure to implement iterability of any object. More... | |
struct | ostd::iterator_range< T > |
A range type made up of two iterators. More... | |
struct | ostd::ranged_traits< std::initializer_list< T > > |
A specialization of ostd::ranged_traits for initializer list types. More... | |
struct | ostd::ranged_traits< T[N]> |
A specialization of ostd::ranged_traits for static arrays. More... | |
Macros | |
#define | OSTD_TEST_MODULE libostd_range |
Typedefs | |
template<typename R > | |
using | ostd::range_category_t = typename range_traits< R >::range_category |
The category tag of a range type. More... | |
template<typename R > | |
using | ostd::range_size_t = typename range_traits< R >::size_type |
The size type of a range type. More... | |
template<typename R > | |
using | ostd::range_value_t = typename range_traits< R >::value_type |
The value type of range elements. More... | |
template<typename R > | |
using | ostd::range_reference_t = typename range_traits< R >::reference |
The type returned by range element accessors. More... | |
template<typename T > | |
using | ostd::iterator_range_tag = typename detail::iterator_range_tag_base< T >::type |
Gets the best range category that can be created from the given iterator category. More... | |
Functions | |
template<typename IR > | |
range_size_t< IR > | ostd::range_pop_front_n (IR &range, range_size_t< IR > n) |
Pops out at most n elements from the front of the given range. More... | |
template<typename IR > | |
range_size_t< IR > | ostd::range_pop_back_n (IR &range, range_size_t< IR > n) |
Pops out at most n elements from the back of the given range. More... | |
template<typename OR , typename IR > | |
void | ostd::range_put_all (OR &orange, IR range) |
Puts all of range 's elements into orange . More... | |
template<typename T > | |
auto | ostd::noop_sink () |
Creates an output range that does nothing. More... | |
template<typename R > | |
auto | ostd::counting_sink (R const &range) |
Creates an output range that counts items put into it. More... | |
auto | ostd::reverse () |
A pipeable version of ostd::input_range::reverse(). | |
auto | ostd::movable () |
A pipeable version of ostd::input_range::movable(). | |
auto | ostd::enumerate () |
A pipeable version of ostd::input_range::enumerate(). | |
auto | ostd::take (std::size_t n) |
A pipeable version of ostd::input_range::take(). | |
auto | ostd::chunks (std::size_t n) |
A pipeable version of ostd::input_range::chunks(). | |
template<typename R > | |
auto | ostd::join (R &&range) |
A pipeable version of ostd::input_range::join(). | |
template<typename R1 , typename ... R> | |
auto | ostd::join (R1 &&r1, R &&...rr) |
A pipeable version of ostd::input_range::join(). | |
template<typename R > | |
auto | ostd::zip (R &&range) |
A pipeable version of ostd::input_range::zip(). | |
template<typename R1 , typename ... R> | |
auto | ostd::zip (R1 &&r1, R &&...rr) |
A pipeable version of ostd::input_range::zip(). | |
template<typename T > | |
auto | ostd::iter (T &&r) -> decltype(ranged_traits< std::remove_reference_t< T >>::iter(r)) |
A generic function to iterate any object. More... | |
template<typename T > | |
auto | ostd::citer (T const &r) -> decltype(ranged_traits< T const >::iter(r)) |
A generic function to iterate an immutable version of any object. More... | |
template<typename T > | |
auto | ostd::range (T a, T b, std::make_signed_t< T > step=1) |
Creates an integer interval between a and b . More... | |
template<typename T > | |
auto | ostd::range (T v) |
Creates an integer interval between 0 and v . More... | |
template<typename Container > | |
auto | ostd::appender () |
Creates am appender output range for a container. More... | |
template<typename Container > | |
auto | ostd::appender (Container &&v) |
Creates an appender from an existing container. More... | |
template<typename T > | |
iterator_range< T const * > | ostd::iter (std::initializer_list< T > init) noexcept |
An overload of ostd::iter() for initializer lists. More... | |
template<typename T > | |
iterator_range< T const * > | ostd::citer (std::initializer_list< T > init) noexcept |
An overload of ostd::citer() for initializer lists. More... | |
template<typename T > | |
iterator_range< T * > | ostd::iter (T *a, T *b) |
Creates an ostd::iterator_range from two pointers. More... | |
template<typename Container , typename InputRange , typename ... Args> | |
Container | ostd::from_range (InputRange range, Args &&...args) |
Creates a Container from range . More... | |
The range system implementation.
This file provides the actual range system implementation, some basic range types, iteration utilities and range traits.
Some examples:
Pipe syntax examples: