16 #ifndef OPENKALMAN_TO_DENSE_OBJECT_HPP 17 #define OPENKALMAN_TO_DENSE_OBJECT_HPP 29 template<indexible T, data_layout layout = data_layout::none, values::number Scalar = scalar_type_of_t<T>, indexible Arg> requires
30 (layout != data_layout::stride)
31 constexpr writable decltype(
auto)
33 template<
typename T, data_layout layout = data_layout::none,
typename Scalar = scalar_type_of_t<T>,
typename Arg, std::enable_if_t<
34 indexible<T> and (layout != data_layout::str
ide) and values::number<Scalar> and indexible<Arg>,
int> = 0>
35 constexpr decltype(
auto)
39 if constexpr (writable<Arg>)
41 return std::forward<Arg>(arg);
43 else if constexpr (writable<decltype(to_native_matrix<T>(std::declval<Arg&&>()))>)
45 return to_native_matrix<T>(std::forward<Arg>(arg));
49 auto m {make_dense_object<T, layout, Scalar>(all_vector_space_descriptors(arg))};
50 copy(m, std::forward<Arg>(arg));
63 template<data_layout layout, values::number Scalar, indexible Arg> requires (layout != data_layout::stride)
64 constexpr writable decltype(
auto)
66 template<data_layout layout,
typename Scalar,
typename Arg, std::enable_if_t<values::number<Scalar> and indexible<Arg> and
67 (layout != data_layout::str
ide),
int> = 0>
68 constexpr decltype(
auto)
72 if constexpr (writable<Arg> and std::is_same_v<Scalar, scalar_type_of_t<Arg>>)
73 return std::forward<Arg>(arg);
75 return to_dense_object<std::decay_t<Arg>, layout, Scalar>(std::forward<Arg>(arg));
87 template<data_layout layout = data_layout::none, indexible Arg> requires (layout != data_layout::stride)
88 constexpr writable decltype(
auto)
90 template<data_layout layout = data_layout::none,
typename Arg, std::enable_if_t<indexible<Arg> and (layout != data_layout::str
ide),
int> = 0>
91 constexpr decltype(
auto)
95 if constexpr (writable<Arg>)
96 return std::forward<Arg>(arg);
98 return to_dense_object<std::decay_t<Arg>, layout, scalar_type_of_t<Arg>>(std::forward<Arg>(arg));
decltype(auto) constexpr to_dense_object(Arg &&arg)
Convert the argument to a dense, writable matrix of a particular scalar type.
Definition: to_dense_object.hpp:37
The root namespace for OpenKalman.
Definition: basics.hpp:34