E.V.E
v2023.02.15
Loading...
Searching...
No Matches

Detailed Description

Views that adapt a range for an algorithm without copying it.

A view wraps one or several ranges and presents them as one: eve::algo::views::zip walks several ranges in step and hands the callable a tuple, eve::algo::views::convert reads a range as another type, eve::algo::views::reverse walks it backwards, eve::algo::views::map applies a function on the way in and on the way out, and eve::algo::views::iota is a range of consecutive values. A view is itself a range an algorithm or another view accepts.

Classes

struct  eve::algo::views::backward_iterator< I >
 An adapter over a relaxed_iterator that replaces going forward with going backward. For semantic of reverse you should use eve::algo::views::reverse this is just a helper to do backward algorithms. Should be created by a call to eve::algo::views::backward. More...
struct  eve::algo::views::backward_range< R >
 An adapter over a relaxed_range that replaces going forward with going backward. For semantic of reverse you should use eve::algo::views::reverse this is just a helper to do backward algorithms. Should be created by a call to eve::algo::views::backward. More...
struct  eve::algo::views::converting_iterator< I, T >
 An adapter over a relaxed_iterator that converts it's values to T. Should be created via convert. More...
struct  eve::algo::views::converting_range< R, T >
 An adapter over a relaxed_range that converts it's values to T. Should be created via convert. More...
struct  eve::algo::views::iota_with_step_iterator< T, N >
 An iterator for all values from base to offset. Should be created with iota_with_step or iota. Not OK to compare two iterators generated from a different base. More...
struct  eve::algo::views::map_iterator< I, LoadOp, StoreOp >
 An iterator for map, map_convert. Should be created with one of those functions. If one of the operations is not available, it's eve::algo::nothing_t. More...
struct  eve::algo::views::map_range< R, LoadOp, StoreOp >
 A range for map, map_covnert. Should be created via one of those functions. If the store operation is not available, it's eve::algo::nothing_t. More...
struct  eve::algo::views::reverse_iterator< I >
 An adapter over a relaxed_iterator that allows to iterate in the reverse order. Should be created by a call to eve::algo::views::reverse. More...
struct  eve::algo::views::reverse_range< R >
 An adapter over a relaxed_range that allows to iterate in the reverse order. Should be created by a call to eve::algo::views::reverse. NOTE: at this point convert(reverse) will not do anything smart. More...
struct  eve::algo::views::zip_range< Rngs >
 A relaxed_range on top of multiple relaxed_range. All individual components have to have the same size. Should probably never be created directly, instead use zip. More...
struct  eve::algo::views::zip_iterator< Is >
 A relaxed_iterator on top of multiple relaxed_iterator. If all of the components are iterator they have to have the same cardinal and the zip_iterator will model iterator. Should probably never be created directly, use zip. More...
struct  backward_iterator
 a shorthand for eve::algo::views::backward_iterator More...
struct  backward_range
 a shorthand for eve::algo::views::backward_range More...
struct  converting_iterator
 a shorthand for eve::algo::views::converting_iterator More...
struct  converting_range
 a shorthand for eve::algo::views::converting_range More...
struct  iota_with_step_iterator
 a shorthand for eve::algo::views::iota_with_step_iterator More...
struct  reverse_iterator
 a shorthand for eve::algo::views::reverse_iterator More...
struct  reverse_range
 a shorthand for eve::algo::views::reverse_range More...
struct  zip_iterator
 a shorthand for eve::algo::views::zip_iterator More...
struct  zip_range
 a shorthand for eve::algo::views::zip_range More...

Variables

struct eve::algo::views::backward_ eve::algo::views::backward
 Takes an iterator or a range and returns an adapter for backward iteration. For semantic of reverse you should use eve::algo::views::reverse this is just a helper to do backward algorithms.
struct eve::algo::views::convert_ eve::algo::views::convert
 Takes an iterator or a range and returns an adapter that has a provided value type.
struct { 
eve::algo::views::iota_with_step
 A function to generate an iota with a step i.e. a general arithmetic sequence. To generate an iterator pass T base, T step. For a range pass a range size as ptrdiff_t as a 3rd parameter.
struct { 
eve::algo::views::iota
 A function to generate an iota iterator/view like [0.5, 2.5, 4.5, ...]. \((0.5 + 2(n-1))_{n \in \N}\) To generate an iterator base + (n-1) step pass T base and T step. For a range pass a range size as ptrdiff_t as a 2nd parameter.
struct { 
eve::algo::views::map_convert
 Given a relaxed iterator/range and 2 operations return relaxed iterator/range that applies the first operation before load and the second operation before store.
struct { 
eve::algo::views::map
 Given a relaxed iterator/range and an operation return relaxed iterator/range that has no store and applies provided operation on read/load.
struct eve::algo::views::reverse_ eve::algo::views::reverse
 Takes an iterator or a range and returns an adapter for reverse iteration.
constexpr auto eve::algo::views::zip = function_with_traits<zip_>
 Given relaxed_iterors and relaxed ranges, zips them together (creates a single object). If at least one component is a relaxed_range - result is a zip_range, otherwise it's zip_iterator. All range compinents have to have the same length. NOTE: uses range_ref inside, so never owns/copies any elements.

Variable Documentation

◆ backward

struct eve::algo::views::backward_ eve::algo::views::backward

Takes an iterator or a range and returns an adapter for backward iteration. For semantic of reverse you should use eve::algo::views::reverse this is just a helper to do backward algorithms.

struct eve::algo::views::backward_ backward
Takes an iterator or a range and returns an adapter for backward iteration. For semantic of reverse y...

Required header: #include <eve/module/algo/algo/views/backward.hpp>

Has a shorthand eve::views::backward in <eve/views/backward.hpp>.

◆ convert

struct eve::algo::views::convert_ eve::algo::views::convert

Takes an iterator or a range and returns an adapter that has a provided value type.

struct eve::algo::views::convert_ convert
Takes an iterator or a range and returns an adapter that has a provided value type.
Lightweight type-wrapper.
Definition as.hpp:29

Behaviour for a specific iterator/range can be customized via tagged dispatch:

template <typename T>
EVE_FORCEINLINE friend auto tagged_dispatch(eve::algo::views::convert_, my_rng self, eve::as<T> tgt);

Required header: #include <eve/module/algo/algo/views/convert.hpp>

Has a shorthand eve::views::convert in <eve/views/convert.hpp>.

◆ [struct]

struct { ... } eve::algo::views::iota

A function to generate an iota iterator/view like [0.5, 2.5, 4.5, ...]. \((0.5 + 2(n-1))_{n \in \N}\) To generate an iterator base + (n-1) step pass T base and T step. For a range pass a range size as ptrdiff_t as a 2nd parameter.

Required header: #include <eve/module/algo/algo/views/iota.hpp>

Has a shorthand eve::views::iota_with_step in <eve/views/iota.hpp>.

◆ [struct]

struct { ... } eve::algo::views::iota_with_step

A function to generate an iota with a step i.e. a general arithmetic sequence. To generate an iterator pass T base, T step. For a range pass a range size as ptrdiff_t as a 3rd parameter.

Example: iota_with_step(0.1, 0.2, 4) is a range [0.1, 0.3, 0.5, 0.7]

Required header: #include <eve/module/algo/algo/views/iota.hpp>

Has a shorthand eve::views::iota_with_step in <eve/views/iota.hpp>.

◆ [struct]

struct { ... } eve::algo::views::map

Given a relaxed iterator/range and an operation return relaxed iterator/range that has no store and applies provided operation on read/load.

operation has to be a template and accept scalar and all width wides for the value type of the underlying iterator/range.

Required header: #include <eve/module/algo/algo/views/map.hpp>

Has a shorthand eve::views::map in <eve/views/map.hpp>

◆ [struct]

struct { ... } eve::algo::views::map_convert

Given a relaxed iterator/range and 2 operations return relaxed iterator/range that applies the first operation before load and the second operation before store.

operations has to be a template and accept scalar and all width wides for the value type of the underlying iterator/range.

store operation, for conviniece accepts the as<underlying_type> as a second parameter. (this allows to define load/store ops without knowing the underlying iterator).

Required header: #include <eve/module/algo/algo/views/map.hpp>

Has a shorthand eve::views::map_convert in <eve/views/map.hpp>

◆ reverse

struct eve::algo::views::reverse_ eve::algo::views::reverse

Takes an iterator or a range and returns an adapter for reverse iteration.

struct eve::algo::views::reverse_ reverse
Takes an iterator or a range and returns an adapter for reverse iteration.

Required header: #include <eve/module/algo/algo/views/reverse.hpp>

Has a shorthand eve::views::reverse in <eve/views/reverse.hpp>.

◆ zip

auto eve::algo::views::zip = function_with_traits<zip_>
inlineconstexpr

Given relaxed_iterors and relaxed ranges, zips them together (creates a single object). If at least one component is a relaxed_range - result is a zip_range, otherwise it's zip_iterator. All range compinents have to have the same length. NOTE: uses range_ref inside, so never owns/copies any elements.

Supports zip[eve::algo::force_type<T>], zip[eve::algo::common_type<T>], zip[common_with_types<Ts...>] traits. force_type<T> will convert every component to the type T. common_type and common_with_types will compute the common type (maybe including extra provided), and convert to that.

Required header: #include <eve/module/algo/algo/views/zip.hpp>

Has a shorthand eve::views::zip in <eve/views/zip.hpp>.