16 #ifndef OPENKALMAN_INDEXIBLE_OBJECT_TRAITS_HPP 17 #define OPENKALMAN_INDEXIBLE_OBJECT_TRAITS_HPP 19 #include <type_traits> 34 template<
typename T,
typename>
38 #ifdef DOXYGEN_SHOULD_SKIP_THIS 45 using scalar_type = double;
79 static constexpr coordinates::pattern
auto 82 template<
typename N, std::enable_if_t<values::index<N>,
int> = 0>
95 nested_object(std::convertible_to<const T&>
auto&& arg) =
delete;
97 template<
typename Arg, std::enable_if_t<std::is_convertible_v<Arg, const T&>,
int> = 0>
108 #ifdef __cpp_concepts 109 static constexpr values::scalar
auto 111 static constexpr
auto 113 get_constant(
const T& arg) =
delete;
122 #ifdef __cpp_concepts 123 static constexpr values::scalar
auto 125 static constexpr
auto 127 get_constant_diagonal(
const T& arg) =
delete;
136 template<Applicability b>
137 static constexpr
bool 146 template<Applicability b>
147 static constexpr
bool 157 template<TriangleType t>
158 static constexpr
bool 159 is_triangular =
false;
166 static constexpr
bool 167 is_triangular_adapter =
false;
177 static constexpr
bool 178 is_hermitian =
false;
195 static constexpr
bool 203 #ifdef __cpp_lib_concepts 204 template<std::convertible_to<const T&> Arg> requires requires(Arg&& arg) { {*std::forward<Arg>(arg).data()} -> values::scalar; } and direct_access
207 template<
typename Arg, std::enable_if_t<
208 std::is_convertible_v<Arg, const T> and values::scalar<decltype(*std::declval<Arg&&>().data())> and direct_access,
int> = 0>
209 static constexpr
auto decltype(
auto)
211 raw_data(Arg&& arg) =
delete;
231 static constexpr
auto 232 strides(
const T& arg) =
delete;
234 #endif // DOXYGEN_SHOULD_SKIP_THIS 240 #endif //OPENKALMAN_INDEXIBLE_OBJECT_TRAITS_HPP constexpr auto count_indices(const T &t)
Get the number of indices available to address the components of an indexible object.
Definition: count_indices.hpp:33
constexpr bool one_dimensional
Specifies that a type is one-dimensional in every index.
Definition: one_dimensional.hpp:83
Definition: indexible_object_traits.hpp:36
Definition: basics.hpp:41
No storage layout (e.g., if the elements are calculated rather than stored).
Lower, upper, or diagonal matrix.
constexpr bool indexible
T is a generalized tensor type.
Definition: indexible.hpp:32
constexpr bool number
T is a numerical type.
Definition: number.hpp:33
HermitianAdapterType
The type of a hermitian adapter, indicating which triangle of the nested matrix is used...
Definition: global-definitions.hpp:78
Layout
The layout format of a multidimensional array.
Definition: global-definitions.hpp:47
constexpr bool index
T is an index value.
Definition: index.hpp:56
decltype(auto) constexpr nested_object(Arg &&arg)
Retrieve a nested object of Arg, if it exists.
Definition: nested_object.hpp:34
constexpr auto get_vector_space_descriptor(const T &t, const N &n)
Get the coordinates::pattern object for index N of indexible object T.
Definition: get_vector_space_descriptor.hpp:56