KUMI v3.1.0
Exquisite Epidote
Loading...
Searching...
No Matches
kumi Namespace Reference

Main KUMI namespace. More...

Detailed Description

Main KUMI namespace.

Classes

struct  all_unique_names
 Checks if a parameter pack only contains distinct kumi::field_member names. Evaluates to false if no type is a kumi::field_member. More...
struct  all_uniques
 Checks if a parameter pack only contains distinct types. More...
class  as
 Lightweight type-wrapper. More...
struct  as_tuple
 Generate a kumi::tuple type from a type. More...
class  boolean_and
 A type representing the logical and monoid and it's associated identity. The identity of the boolean_and is true. More...
class  boolean_or
 A type representing the logical or monoid and it's associated identity. The identity of boolean_or is false. More...
class  boolean_xor
 A type representing the logical xor monoid and it's associated identity. The identity of boolean_xor is false. More...
class  builder
 Helper structure to build the correct output product type based on the given template parameter. If the provided product type is a not a record_type the builder will output a tuple otherwise a record. One can specialize the builder for it's own type matching the product type semantic. More...
struct  common_product_type
 Extracts the common product_type of a parameter pack. More...
struct  container_size
 Returns the number of elements of a kumi::static_container. More...
struct  container_type
 Provides access to the type of the elements of a kumi::static_container. More...
struct  element
 Provides indexed access to the types of the elements of a kumi::product_type. More...
class  field
 Named wrapper over a type. More...
struct  field< Id, T >
 Specialisation to clearly indicate an error. More...
struct  has_static_size
 Detects if a given kumi::container instance size is static. More...
class  identifier
 identifier definition class More...
class  index_t
 Integral constant type. More...
struct  is_container
 Traits detecting types behaving like a kumi::container. More...
struct  is_homogeneous
 Detects if a given kumi::product_type instance is homogeneous. More...
struct  is_product_type
 Detects if a type follows the tuple protocol. More...
struct  is_record_type
 Opt-in traits for types behaving like a kumi::product_type. More...
class  label_t
 Literal constant type. More...
struct  member
 Computes the return type of a call to kumi::get. More...
class  name
 Compile-time text based identifier. More...
class  numeric_add
 A type representing the addition monoid with it's associated identity. The identity of the addition is 0. More...
class  numeric_prod
 A type representing the multiplication monoid with it's associated identity. The identity of the multiplication is 1. More...
class  projection_map
 A stateless, compile-time schema for product type transformation. More...
struct  raw_element
 Provides indexed access to the types of the elements of a product type and unwraps the returned field_capture for record type. More...
struct  raw_member
 Computes the return type of a call to kumi::get on a kumi::tuple and unwrap the field returned by kumi::get on a kumi::record. More...
class  record
 Fixed-size collection of heterogeneous tagged fields, tags are unique. More...
struct  size
 Computes the number of elements of a kumi::product_type. More...
class  str
 Static string used to create named fields. More...
class  tuple
 Fixed-size collection of heterogeneous values. More...
class  unit
 A type representing the product of no type also called the unit type. More...
class  unknown
 Type indicating a identifier was not found in a given kumi::product_type. More...

Functions

template<concepts::product_type T>
constexpr auto all_of (T &&t) noexcept
 Computes the reduction of a product type over the && operator.
template<typename Pred, concepts::product_type T>
constexpr auto all_of (T &&t, Pred p) noexcept
 Checks if a unary predicate p returns true for every element of t.
template<concepts::product_type T>
constexpr auto all_unique (T &&t)
 Return the product type containing the values of the first occurence of each type in t.
template<concepts::product_type T>
constexpr auto any_of (T &&t) noexcept
 Computes the reduction of a product type over the || operator.
template<typename Pred, concepts::product_type T>
constexpr auto any_of (T &&t, Pred p) noexcept
 Checks if a unary predicate p returns true for any element of t.
template<typename Function, concepts::product_type T>
constexpr decltype(auto) apply (Function &&f, T &&t) noexcept(kumi_implementation_defined)
 Invoke the Callable object f with the elements of the product type unrolled as arguments.
template<concepts::product_type T>
auto as_flat_ptr (T &&t) noexcept
 Convert a product type to a flat product type of pointers to each its components.
template<concepts::non_empty_product_type T>
constexpr decltype(auto) back (T &&t)
 Retrieves the back of a product type.
template<concepts::product_type T>
constexpr auto bit_and (T &&t)
 Computes the bitwise AND of all elements.
template<concepts::product_type T, typename Value>
constexpr auto bit_and (T &&t, Value init)
 Computes the bitwise AND of all elements.
template<concepts::product_type T>
constexpr auto bit_or (T &&t)
 Computes the bitwise OR of all elements.
template<concepts::product_type T, typename Value>
constexpr auto bit_or (T &&t, Value init)
 Computes the bitwise OR of all elements.
template<concepts::product_type T>
constexpr auto bit_xor (T &&t)
 Computes the bitwise XOR of all elements.
template<concepts::product_type T, typename Value>
constexpr auto bit_xor (T &&t, Value init)
 Computes the bitwise XOR of all elements.
template<kumi_implementation_defined auto Name, typename T>
decltype(auto) constexpr capture_field (T &&t) noexcept
 Creates a field from a given value keeping the qualifiers.
template<concepts::product_type... Ts>
requires (concepts::follows_same_semantic<Ts...>)
constexpr auto cartesian_product (Ts &&... ts)
 Return the Cartesian Product of all elements of its arguments product types.
template<concepts::product_type... Ts>
requires (concepts::follows_same_semantic<Ts...>)
constexpr auto cat (Ts &&... ts)
 Concatenates product types in a single one.
template<std::size_t N, concepts::product_type T>
constexpr auto chunks (T &&t)
 Creates a tuple of product types, each containing N consecutive elements from t. Chunks starts at 0 and advance by N element each time.
template<concepts::product_type T, concepts::identifier ID>
constexpr bool contains (T &&t, ID const &id) noexcept
 Checks if a product type contains a given identifier.
template<concepts::product_type T, concepts::identifier... Is>
constexpr bool contains_any (T &&t, Is const &... ids) noexcept
 Checks if a product type contains at least one of many identifiers.
template<concepts::product_type T, concepts::identifier... Is>
constexpr bool contains_none (T &&t, Is const &... ids) noexcept
 Checks if a product type contains no fields based on any of the selected identifiers.
template<concepts::product_type T, concepts::identifier... Is>
constexpr bool contains_only (T &&t, Is const &... ids) noexcept
 Checks if a product type contains fields based only on selected identifiers.
template<concepts::product_type T>
constexpr std::size_t count (T &&t) noexcept
 Counts the number of elements of t not equivalent to false.
template<typename Pred, concepts::product_type T>
constexpr std::size_t count_if (T &&t, Pred p) noexcept
 Counts the number of elements of t satisfying predicates p.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto exclusive_scan_left (Function f, T &&t, Value init)
 Computes the exclusive prefix scan of all elements of a product type using a tail recursive call.
template<concepts::monoid M, concepts::sized_product_type_or_more< 1 > T>
constexpr auto exclusive_scan_left (M &&m, T &&t)
 Computes the exclusive prefix scan of all elements of a product type using a tail recursive call.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto exclusive_scan_right (Function f, T &&t, Value init)
 Computes the exclusive suffix scan of all elements of a product type using a tail recursive call.
template<concepts::monoid M, concepts::sized_product_type_or_more< 1 > T>
constexpr auto exclusive_scan_right (M &&m, T &&t)
 Computes the exclusive suffix scan of all elements of a product type using a non-tail recursive call.
template<std::size_t I0, concepts::product_type T>
constexpr auto extract (T &&t, index_t< I0 > i0) noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<std::size_t I0, std::size_t I1, concepts::product_type T>
constexpr auto extract (T &&t, index_t< I0 > i0, index_t< I1 > i1) noexcept
 Extracts a sub product type from a product type.
template<typename U, typename T>
decltype(auto) constexpr field_cast (T &&t) noexcept
 Casts the provided value to the target type using static_cast.
template<typename T>
constexpr decltype(auto) field_value_of (T &&t) noexcept
 Extracts the value from a kumi::concepts::field or returns the parameter.
template<std::size_t N, typename T>
constexpr auto fill (T const &v) noexcept
 Creates a kumi::tuple containing N copies of v.
template<template< typename > typename Pred, concepts::product_type T>
constexpr auto filter (T &&t) noexcept
 Filters a product type over a predicate.
template<template< typename > typename Pred, concepts::product_type T>
constexpr auto filter_not (T &&t) noexcept
 Filters a product type over a predicate.
template<concepts::product_type T>
constexpr auto flatten (T &&t)
 Converts a product type of product types into a product type of all elements.
template<concepts::product_type T>
constexpr auto flatten_all (T &&t)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<concepts::product_type T, typename Func>
constexpr auto flatten_all (T &&t, Func f)
 Recursively converts a product type of product types into a product type of all elements.
template<typename Function, concepts::non_empty_product_type T>
constexpr auto fold_left (Function f, T &&t)
 Computes the generalized associative combination of all elements using a tail recursive call.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto fold_left (Function f, T &&t, Value init)
 Computes the generalized combination of all elements using a tail recursive call.
template<typename Function, concepts::non_empty_product_type T>
constexpr auto fold_right (Function f, T &&t)
 Computes the generalized associative combinationof all elements using a non-tail recursive call.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto fold_right (Function f, T &&t, Value init)
 Computes the generalized combination of all elements using a non-tail recursive call.
template<typename Function, concepts::product_type T, concepts::product_type... Ts>
requires (concepts::compatible_product_types<T, Ts...>)
constexpr void for_each (Function f, T &&t, Ts &&... ts)
 Applies the Callable object f on each element of a product type. f is applied on the values if the given product_type is a record type.
template<typename Function, concepts::record_type R, concepts::record_type... Rs>
requires (concepts::compatible_product_types<R, Rs...>)
constexpr void for_each_field (Function f, R &&r, Rs &&... rs)
 Applies the Callable object f on each element of a record type and its field.
template<typename Function, concepts::product_type T, concepts::product_type... Ts>
requires (!concepts::record_type<T> && (!concepts::record_type<Ts> && ...))
constexpr void for_each_index (Function f, T &&t, Ts &&... ts)
 Applies the Callable object f on each element of a product type and its index.
template<concepts::non_empty_product_type T>
constexpr decltype(auto) front (T &&t)
 Retrieves the front of a product type.
template<std::size_t N, typename Function>
constexpr auto generate (Function const &f) noexcept
 Creates a kumi::tuple containing N applications of the f Callable.
template<concepts::identifier Id, concepts::product_type T>
consteval auto get_index_of_field ()
 Helper to retrive the index of a type in a product type by it s identifier.
template<typename U, concepts::product_type T>
consteval auto get_index_of_type ()
 Helper to retrive the index of a type in a product type by it s type.
template<typename T>
consteval auto identifier_of () noexcept
 Extracts the identifiers from a kumi::concepts::field or returns the parameter.
template<concepts::identifier... Ts>
consteval auto identifiers (Ts... ts) noexcept
 Creates a kumi::projection_map object, deducing the target type from the types of arguments.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto inclusive_scan_left (Function f, T &&t, Value init)
 Computes the inclusive prefix scan of all elements of a product type using a tail recursive call.
template<concepts::monoid M, concepts::sized_product_type_or_more< 1 > T>
constexpr auto inclusive_scan_left (M &&m, T &&t)
 Computes the inclusive prefix scan of all elements of a product type using a tail recursive call.
template<typename Function, concepts::product_type T, typename Value>
constexpr auto inclusive_scan_right (Function f, T &&t, Value init)
 Computes the inclusive suffix scan of all elements of a product type using a non-tail recursive call.
template<concepts::monoid M, concepts::sized_product_type_or_more< 1 > T>
constexpr auto inclusive_scan_right (M &&m, T &&t)
 Computes the inclusive suffix scan of all elements of a product type using a non-tail recursive call.
template<concepts::index... Ts>
consteval auto indexes (Ts... ts) noexcept
 Creates a kumi::projection_map object, deducing the target type from the types of arguments.
template<concepts::product_type S1, concepts::sized_product_type< size_v< S1 > > S2, typename T>
requires (concepts::compatible_product_types<S1, S2>)
constexpr auto inner_product (S1 &&s1, S2 &&s2, T init) noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
template<concepts::product_type S1, concepts::sized_product_type< size_v< S1 > > S2, typename T, typename Sum, typename Prod>
requires (concepts::compatible_product_types<S1, S2>)
constexpr auto inner_product (S1 &&s1, S2 &&s2, T init, Sum sum, Prod prod) noexcept
 Computes inner product (i.e. sum of products).
template<typename C, typename... Ts>
requires (std::is_invocable<C, Ts...>::value)
constexpr decltype(auto) invoke (C &&c, Ts &&... ts) noexcept(std::is_nothrow_invocable< C, Ts... >::value)
 Invoke the Callable object c with a pack of arguments.
template<typename R, typename C, typename... Ts>
requires (std::is_invocable_r<R, C, Ts...>::value)
constexpr R invoke_r (C &&c, Ts &&... ts) noexcept(std::is_nothrow_invocable_r< R, C, Ts... >::value)
 Invoke the Callable object c with a pack of arguments with return type R.
template<std::size_t N, typename T>
constexpr auto iota (T v) noexcept
 Creates a kumi::tuple containing an increasing ramp of values.
template<typename T>
consteval str label_of () noexcept
 Extracts the label from a kumi::concepts::field or returns the parameter.
template<typename Pred, concepts::product_type T>
constexpr auto locate (T &&t, Pred p) noexcept
 Return the index of a value which type satisfies a given predicate.
template<std::convertible_to< std::size_t > auto... vs>
consteval auto make_indexes () noexcept
 Creates a kumi::projection_map object, deducing the target type from the types of arguments.
template<concepts::product_type T, typename Function, concepts::sized_product_type< size_v< T > >... Ts>
requires (concepts::compatible_product_types<T, Ts...>)
constexpr auto map (Function f, T &&t0, Ts &&... others)
 Applies the Callable object f on each product types' elements.
template<concepts::record_type T, typename Function, concepts::sized_product_type< size_v< T > >... Ts>
requires (concepts::compatible_product_types<T, Ts...>)
constexpr auto map_field (Function f, T &&t0, Ts &&... others)
 Applies the Callable object f on each records' fields and their associated names.
template<concepts::product_type T, typename Function, concepts::sized_product_type< size_v< T > >... Ts>
requires (!concepts::record_type<T> && (!concepts::record_type<Ts> && ...))
constexpr auto map_index (Function f, T &&t0, Ts &&... others)
 Applies the Callable object f on each tuples' elements and their indexes.
template<concepts::product_type T, concepts::monoid M, typename Function>
constexpr auto map_reduce (Function f, M &&m, T &&t)
 Performs a tree-like reduction of all elements of a product type. The given map function is applied before excution the reduction to each element of the input.
template<concepts::monoid M, concepts::product_type T, typename Function, typename Value>
constexpr auto map_reduce (Function f, M &&m, T &&t, Value init)
 Performs a tree-like reduction of all elements of a product type. The given map function is applied before excution the reduction to each element of the input.
template<concepts::product_type T>
constexpr auto max (T &&t) noexcept
 Computes the maximum value all elements of t.
template<concepts::product_type T, typename F>
constexpr auto max (T &&t, F f) noexcept
 Computes the maximum value of applications of f to all elements of t.
template<concepts::product_type T, typename F>
constexpr auto max_flat (T &&t, F f) noexcept
 Computes the maximum value of applications of f to all elements of kumi::flatten_all(t).
template<typename Target, concepts::product_type T>
constexpr auto member_cast (T &&t)
 Converts a product_type<Ts...> to an instance of a product_type<Target...>.
template<concepts::product_type T>
constexpr auto members_of (as< T >) noexcept
 Extracts the identifiers of the fields of a product type.
template<concepts::product_type T>
constexpr auto min (T &&t) noexcept
 Computes the minimum value all elements of t.
template<concepts::product_type T, typename F>
constexpr auto min (T &&t, F f) noexcept
 Computes the minimum value of applications of f to all elements of t.
template<concepts::product_type T, typename F>
constexpr auto min_flat (T &&t, F f) noexcept
 Computes the minimum value of applications of f to all elements of kumi::flatten_all(t).
template<concepts::product_type T>
constexpr bool none_of (T &&t) noexcept
 Checks if no elements of a product type are true.
template<typename Pred, concepts::product_type T>
constexpr bool none_of (T &&t, Pred p) noexcept
 Checks if a unary predicate p does not returns true for any element in t.
template<char... c>
constexpr auto operator""_c () noexcept
 Forms a integral constant literal of the desired value.
template<kumi::str ID>
constexpr auto operator""_id () noexcept
 Forms a constant string literal of the desired value.
template<kumi::str ID>
constexpr auto operator""_l () noexcept
 Forms a constant string literal of the desired value.
template<concepts::identifier L, kumi::concepts::identifier R>
constexpr bool operator== (L const &, R const &)
 identifier comparison
template<template< typename > typename Pred, concepts::product_type T>
constexpr auto partition (T &&t) noexcept
 Partition a product type over a predicate.
template<concepts::product_type T>
constexpr auto pop_back (T &&t)
 Remove the last (if any) element of a kumi::product_type.
template<concepts::product_type T>
constexpr auto pop_front (T &&t)
 Remove the first (if any) element of t.
template<template< class > class Pred>
constexpr auto predicate () noexcept
 Convert a unary template meta-program in a running predicate.
template<concepts::product_type T>
constexpr auto prod (T &&t)
 Computes the product of all elements.
template<concepts::product_type T, typename Value>
constexpr auto prod (T &&t, Value init)
 Computes the product of all elements.
template<concepts::projection... Ts>
KUMI_CUDA projection_map (Ts...) -> projection_map< Ts... >
 kumi::indexes_t deduction guide
template<concepts::product_type T, typename V>
constexpr auto push_back (T &&t, V &&v)
 Constructs a product type by adding a value v at the end of t.
template<concepts::product_type T, typename V>
constexpr auto push_front (T &&t, V &&v)
 Constructs a product type by adding a value v at the beginning of t.
template<concepts::monoid M, concepts::product_type T>
constexpr auto reduce (M &&m, T &&t)
 Performs a tree-like reduction of all elements of a product type.
template<concepts::monoid M, concepts::product_type T, typename Value>
constexpr auto reduce (M &&m, T &&t, Value init)
 Performs a tree-like reduction of all elements of a product type.
template<concepts::projection_map auto Projections, concepts::product_type T>
constexpr auto reindex (T &&t)
 Reindex elements of a kumi::product_type.
template<std::size_t... Idx, concepts::product_type T>
constexpr auto reorder (T &&t)
 Reorder elements of a product type.
template<concepts::identifier auto... Name, concepts::product_type Tuple>
constexpr auto reorder_fields (Tuple &&t)
 Reorder elements of a kumi::record.
template<concepts::product_type T>
constexpr auto reverse (T &&t)
 Reverse elements of a product type.
template<std::size_t R, concepts::product_type T>
constexpr auto rotate_left (T &&t)
 Rotates the element of a product type R positions to the left, wrapping around when getting to the beginning.
template<std::size_t R, concepts::product_type T>
constexpr auto rotate_right (T &&t)
 Rotates the element of a product type R positions to the right, wrapping around when getting to the end.
template<std::size_t I0, concepts::product_type T>
constexpr auto split (T &&t, index_t< I0 > i0) noexcept
 Split a product type into two.
template<concepts::product_type T>
constexpr auto sum (T &&t)
 Computes the sum of all elements.
template<concepts::product_type T, typename Value>
constexpr auto sum (T &&t, Value init)
 Computes the sum of all elements.
template<concepts::product_type T>
constexpr auto transpose (T &&t)
 Transpose a product type of product types by shifting elements in their transposed position always returning a tuple as the external product type.
template<concepts::product_type T>
constexpr auto unique (T &&t)
 Returns a product type with consecutive duplicate types removed (pairwise uniqueness).
template<concepts::product_type T>
constexpr auto values_of (T &&t) noexcept
 Extracts the values of the fields of a product type.
template<std::size_t N, concepts::product_type T>
constexpr auto windows (T &&t)
 Creates a tuple of product types, each containing N consecutive elements from t. Windows starts at 0 and advance by 1 element each time.
template<concepts::product_type T0, concepts::sized_product_type< size_v< T0 > >... Ts>
requires (concepts::follows_same_semantic<T0, Ts...>)
constexpr auto zip (T0 &&t0, Ts &&... ts)
 Constructs a tuple where the ith element is the product type of all ith elements of t0,ts...
template<concepts::product_type T0, concepts::product_type... Ts>
requires (concepts::follows_same_semantic<T0, Ts...>)
constexpr auto zip_max (T0 &&t0, Ts &&... ts)
 Constructs a tuple where the ith element is the product type of all ith elements of t0,ts...
template<concepts::product_type T0, concepts::product_type... Ts>
requires (concepts::follows_same_semantic<T0, Ts...>)
constexpr auto zip_min (T0 &&t0, Ts &&... ts)
 Constructs a tuple where the ith element is the product type of all ith elements of t0,ts...

Variables

template<template< class > typename Traits>
constexpr traits_check< Traits > if_ = {}
 Option specifying a traits that type should verify for being used as a identifier value.
template<std::size_t N>
constexpr index_t< N > const index = {}
 Inline integral constant value for kumi::index_t.
template<typename T>
constexpr auto is_projection_map_v = requires { T::is_projection_map; }
 Checks if a type can be used as a kumi::projection_map.
template<str Label>
constexpr label_t< Label > const label = {}
 Inline literal constant value for kumi::label_t.
constexpr unit none = {}
 Inline constant representing a kumi::unit.
template<typename T>
constexpr only_t< T > only = {}
 Option specifying the single type a identifier will accept.

Tuple conversions

template<typename Type, typename... Ts>
requires (!concepts::product_type<Type> && kumi_implementation_defined)
constexpr auto from_tuple (tuple< Ts... > const &t)
 Converts a kumi::tuple to an instance of an arbitrary type.
template<concepts::product_type T>
constexpr auto to_tuple (T &&t)
 Converts a kumi::product_type to an instance kumi::tuple.
template<concepts::static_container S>
requires (!concepts::product_type<S>)
constexpr auto to_tuple (S &&s)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Record construction

template<concepts::identifier auto... Fields, typename... Ts>
constexpr auto tie (Ts &... ts) -> record< field< decltype(Fields), Ts & >... > requires(sizeof...(Fields)==sizeof...(Ts))
 Creates a kumi::record of lvalue references to its arguments.
template<concepts::identifier auto... Fields, typename... Ts>
constexpr auto forward_as_record (Ts &&... ts) -> record< field< decltype(Fields), Ts && >... > requires(sizeof...(Fields)==sizeof...(Ts))
 Creates a kumi::record of forwarding references to its arguments.
template<typename... Ts>
constexpr auto make_record (Ts &&... ts) -> record< std::unwrap_ref_decay_t< Ts >... > requires(concepts::entirely_uniquely_named< Ts... >)
 Creates a record object, deducing the target type from the types of arguments.
template<concepts::record_type R>
constexpr auto to_ref (R &&r)
 Creates a kumi::record of references given a reference to a kumi::record_type.

Record conversion

template<concepts::record_type Type, typename... Ts>
requires (concepts::equivalent<typename kumi_implementation_defined::type, tuple<Ts...>>)
constexpr auto from_record (record< Ts... > const &r)
 Converts a kumi::record to an instance of a type that models kumi::record_type.
template<concepts::record_type Type>
constexpr auto to_record (Type &&r)
 Converts a kumi::record_type to an instance kumi::record.

Tuple construction

template<typename... Ts>
constexpr auto tie (Ts &... ts) -> tuple< Ts &... >
 Creates a kumi::tuple of lvalue references to its arguments.
template<typename... Ts>
constexpr auto forward_as_tuple (Ts &&... ts) -> tuple< Ts &&... >
 Creates a kumi::tuple of forwarding references to its arguments.
template<typename... Ts>
constexpr auto make_tuple (Ts &&... ts) -> tuple< std::unwrap_ref_decay_t< Ts >... >
 Creates a tuple object, deducing the target type from the types of arguments.
template<concepts::product_type T>
constexpr auto to_ref (T &&t)
 Creates a kumi::tuple of references given a reference to a kumi::product_type.

Record Deduction Guides

template<typename... Ts>
KUMI_CUDA record (Ts &&...) -> record< std::unwrap_ref_decay_t< Ts >... >
 kumi::record deduction guide

Record accessors

template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &r) noexcept
 Extracts the Ith field from a kumi::record.
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &&r) noexcept
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &r) noexcept
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &&r) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &r) noexcept
 Extracts the element of the field labeled L from a kumi::record if it exists.
template<str L, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &&r) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &r) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &&r) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &r) noexcept
 Extracts the field identified by Id from a kumi::record if it exists.
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &&r) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &r) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &&r) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &r) noexcept
 Extracts the field which underlying type is T from a kumi::record if it exist.
template<typename T, typename... Ts>
decltype(auto) constexpr get (record< Ts... > &&r) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &r) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (record< Ts... > const &&r) noexcept

Tuple deduction guides

template<typename... Ts>
KUMI_CUDA tuple (Ts &&...) -> tuple< std::unwrap_ref_decay_t< Ts >... >
 kumi::tuple deduction guide

Tuple Accessors

template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &t) noexcept
 Extracts the Ith element from a kumi::tuple.
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &&arg) noexcept
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &arg) noexcept
template<std::size_t I, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &&arg) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &t) noexcept
 Extracts the field labeled L from a kumi::tuple if it exists.
template<str L, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &&t) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &t) noexcept
template<str L, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &&t) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &t) noexcept
 Extracts the field identified by Id from a kumi::tuple if it exists.
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &&t) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &t) noexcept
template<concepts::identifier auto Id, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &&t) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &t) noexcept
 Extracts the field which type is T from a kumi::tuple if it exist.
template<typename T, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > &&t) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &t) noexcept
template<typename T, typename... Ts>
decltype(auto) constexpr get (tuple< Ts... > const &&t) noexcept