16 #ifndef OPENKALMAN_COMPATIBLE_WITH_VECTOR_SPACE_DESCRIPTOR_COLLECTION_HPP 17 #define OPENKALMAN_COMPATIBLE_WITH_VECTOR_SPACE_DESCRIPTOR_COLLECTION_HPP 24 template<
typename T, std::size_t N, std::size_t...Ix>
25 constexpr
bool compatible_extension(std::index_sequence<Ix...>)
27 return (... and (compares_with<vector_space_descriptor_of_t<T, N + Ix>, coordinates::Dimensions<1>, equal_to<>,
Applicability::permitted>));
31 template<
typename T,
typename D, std::size_t...Ix>
32 constexpr
bool is_compatible_descriptor_tuple(std::index_sequence<Ix...>)
34 constexpr std::size_t N =
sizeof...(Ix);
35 constexpr
bool Dsmatch = (... and (compares_with<vector_space_descriptor_of_t<T, Ix>, std::tuple_element_t<Ix, D>, equal_to<>,
Applicability::permitted>));
37 if constexpr (index_count_v<T> !=
dynamic_size and N < index_count_v<T>)
38 return Dsmatch and compatible_extension<T, N>(std::make_index_sequence<index_count_v<T> - N>{});
45 template<
typename T,
typename D>
47 template<
typename T,
typename D,
typename =
void>
53 template<
typename T, pattern_tuple D>
56 template<typename T, typename D>
60 : std::bool_constant<is_compatible_descriptor_tuple<T, D>(std::make_index_sequence<std::tuple_size_v<D>>{})> {};
70 template<
typename T,
typename D>
74 constexpr
bool compatible_with_vector_space_descriptor_collection =
76 indexible<T> and pattern_collection<D> and
82 #endif //OPENKALMAN_COMPATIBLE_WITH_VECTOR_SPACE_DESCRIPTOR_COLLECTION_HPP Definition: tuple_reverse.hpp:103
The root namespace for OpenKalman.
Definition: basics.hpp:34
The concept, trait, or restraint is permitted, but whether it applies is not necessarily known at com...
constexpr bool compatible_with_vector_space_descriptor_collection
indexible T is compatible with pattern_collection D.
Definition: compatible_with_vector_space_descriptor_collection.hpp:74
constexpr std::size_t dynamic_size
A constant indicating that a size or index is dynamic.
Definition: global-definitions.hpp:33
Definition: compatible_with_vector_space_descriptor_collection.hpp:49