1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_UTIL_TYPE_TRAITS_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ARRAY_UTIL_TYPE_TRAITS_H
13template <
class A,
class =
void_t<>>
26template <
class A,
bool = has_mapped_type_v<A>>
28 using type =
typename A::value_type;
33 using type =
typename A::mapped_type;
40template <
class T,
typename =
void>
45 std::enable_if_t<!is_sparse_v<T>>>> : std::true_type {};
51template <
class T,
typename =
void>
61template <
class T,
typename =
void>
74template <
class T,
bool = is_iterable_v<T>,
bool = is_sparse_v<T>,
bool = is_distributed_v<T>,
bool = is_disk_v<T>>
auto begin(Span< T > &x)
Definition: Span.h:84
Definition: ArrayHandler.h:22
constexpr bool is_sparse_v
Definition: type_traits.h:23
constexpr auto array_family_v
Definition: type_traits.h:100
constexpr bool has_mapped_type_v
Definition: type_traits.h:20
void void_t
Utility for metaprogramming that maps any types to void.
Definition: type_traits.h:10
constexpr bool is_disk_v
Definition: type_traits.h:68
constexpr bool is_iterable_v
Definition: type_traits.h:48
typename mapped_or_value_type< A >::type mapped_or_value_type_t
Definition: type_traits.h:37
constexpr auto check_abs()
Definition: type_traits.h:103
ArrayFamily
A tag to distinguish different families for array types, e.g. std::vector<> is iterable,...
Definition: type_traits.h:71
constexpr bool is_distributed_v
Definition: type_traits.h:58
constexpr auto value()
Definition: type_traits.h:91
constexpr auto value()
Definition: type_traits.h:96
constexpr auto value()
Definition: type_traits.h:86
constexpr auto value()
Definition: type_traits.h:81
Deduces which family an array type belongs to.
Definition: type_traits.h:75
constexpr auto value()
Definition: type_traits.h:76
checks that type name A::mapped_type exists
Definition: type_traits.h:14
Checks if class T has a tag marking it as a distributed disk array.
Definition: type_traits.h:62
Checks if class T has a tag marking it as a distributed array.
Definition: type_traits.h:52
Checks that class T can be iterated with std::begin and std::end, and is not sparse.
Definition: type_traits.h:41
typename A::mapped_type type
Definition: type_traits.h:33
Stores A::mapped_type or A::value_type as member type value, with former taking priority if both exis...
Definition: type_traits.h:27
typename A::value_type type
Definition: type_traits.h:28