16 #ifndef OPENKALMAN_GET_IS_EUCLIDEAN_HPP 17 #define OPENKALMAN_GET_IS_EUCLIDEAN_HPP 19 #include "../../../basics/compatibility/language-features.hpp" 23 #include "linear-algebra/coordinates/interfaces/coordinate_descriptor_traits.hpp" 31 template<
typename Arg>
32 constexpr
auto get_descriptor_is_euclidean(
const Arg& arg)
34 if constexpr (interface::coordinate_descriptor_traits<Arg>::is_specialized)
40 static_assert(values::index<Arg>);
41 return std::true_type{};
46 template<std::
size_t i = 0,
typename Tup>
47 static constexpr
auto get_is_euclidean_tuple(
const Tup& tup)
49 if constexpr (i < std::tuple_size_v<Tup>)
53 get_descriptor_is_euclidean(OpenKalman::internal::generalized_std_get<i>(tup)),
54 get_is_euclidean_tuple<i + 1>(tup)};
56 else return std::true_type {};
67 template<
typename Arg, std::enable_if_t<pattern<Arg>,
int> = 0>
72 if constexpr (descriptor<Arg>)
74 return detail::get_descriptor_is_euclidean(arg);
76 else if constexpr (collections::tuple_like<Arg>)
78 return detail::get_is_euclidean_tuple(arg);
82 for (
auto& c : arg)
if (not detail::get_descriptor_is_euclidean(c))
return false;
91 #endif //OPENKALMAN_GET_IS_EUCLIDEAN_HPP Definition for collections::tuple_like.
Definition for values::index.
static constexpr auto is_euclidean
A callable object returning a bool reflecting whether the coordinates::pattern object describes Eucli...
Definition: coordinate_descriptor_traits.hpp:71
Definition for coordinates::pattern.
Definition for coordinates::descriptor.
Definition: compares_with.hpp:28
constexpr auto get_is_euclidean(const Arg &arg)
Determine, whether coordinates::pattern Arg is euclidean.
Definition: get_is_euclidean.hpp:70
operation(const Operation &, const Args &...) -> operation< Operation, Args... >
Deduction guide.