16 #ifndef OPENKALMAN_IS_UNIFORM_COMPONENT_OF_HPP 17 #define OPENKALMAN_IS_UNIFORM_COMPONENT_OF_HPP 19 #include <type_traits> 29 template<coordinates::pattern A, coordinates::pattern B>
31 template<
typename A,
typename B, std::enable_if_t<coordinates::pattern<A> and coordinates::pattern<B>,
int> = 0>
33 constexpr
bool is_uniform_component_of(
const A& a,
const B& b)
35 if constexpr (fixed_pattern<A> and fixed_pattern<B>)
36 return equivalent_to_uniform_static_vector_space_descriptor_component_of<A, B>;
37 else if constexpr (euclidean_pattern<A> and euclidean_pattern<B>)
48 template<
typename S1,
typename S2>
49 constexpr
bool is_uniform_component_of(
const coordinates::DynamicDescriptor<S1>& a,
const coordinates::DynamicDescriptor<S2>& b)
51 if constexpr (not std::is_same_v<S1, S2>)
return false;
54 else return a * coordinates::get_dimension(b) == b;
63 template<coordinates::pattern A,
typename S>
65 template<
typename A,
typename S, std::enable_if_t<coordinates::pattern<A>,
int> = 0>
67 constexpr
bool is_uniform_component_of(
const A& a,
const coordinates::DynamicDescriptor<S>& b)
71 else return a * coordinates::get_dimension(b) == b;
80 template<
typename S, coordinates::pattern B>
82 template<
typename S,
typename B, std::enable_if_t<coordinates::pattern<B>,
int> = 0>
84 constexpr
bool is_uniform_component_of(
const coordinates::DynamicDescriptor<S>& a,
const B& b)
88 else return a * coordinates::get_dimension(b) == b;
95 #endif //OPENKALMAN_VECTOR_SPACE_DESCRIPTOR_FUNCTIONS_HPP Definition: get_component_start_indices.hpp:29
constexpr auto get_dimension(const Arg &arg)
Get the vector dimension of coordinates::pattern Arg.
Definition: get_dimension.hpp:55
constexpr auto get_is_euclidean(const Arg &arg)
Determine, whether coordinates::pattern Arg is euclidean.
Definition: get_is_euclidean.hpp:70