17 #ifndef OPENKALMAN_LESS_FIXED_THAN_HPP 18 #define OPENKALMAN_LESS_FIXED_THAN_HPP 25 template<
typename T, std::size_t N, std::size_t...offset>
26 constexpr
bool an_extended_dim_is_dynamic_impl(std::index_sequence<offset...>)
28 return ((... or (dynamic_dimension<T, N + offset>)));
32 template<
typename T, std::
size_t N>
33 constexpr
bool an_extended_dim_is_dynamic()
35 if constexpr (index_count_v<T> !=
dynamic_size and index_count_v<T> > N)
36 return an_extended_dim_is_dynamic_impl<T, N>(std::make_index_sequence<index_count_v<T> - N>{});
42 #if not defined(__cpp_concepts) or __cpp_generic_lambdas < 201707L 43 template<
typename T,
typename Descriptors, std::size_t...Ix>
44 static constexpr
bool less_fixed_than_impl(std::index_sequence<Ix...>)
46 return ((dynamic_dimension<T, Ix> and fixed_pattern<std::tuple_element_t<Ix, Descriptors>>) or ... or
47 an_extended_dim_is_dynamic<T,
sizeof...(Ix)>());
56 template<
typename T,
typename Descriptors>
57 #if defined(__cpp_concepts) and __cpp_generic_lambdas >= 201707L 59 indexible<T> and pattern_collection<Descriptors> and
60 (not pattern_tuple<Descriptors> or
61 []<std::size_t...Ix>(std::index_sequence<Ix...>)
62 {
return ((dynamic_dimension<T, Ix> and fixed_pattern<std::tuple_element_t<Ix, Descriptors>>) or ... or
63 detail::an_extended_dim_is_dynamic<T,
sizeof...(Ix)>()); }
64 (std::make_index_sequence<std::tuple_size_v<Descriptors>>{}));
66 constexpr
bool less_fixed_than =
67 indexible<T> and pattern_collection<Descriptors> and
68 (not pattern_tuple<Descriptors> or
69 detail::less_fixed_than_impl<T, Descriptors>(std::make_index_sequence<std::tuple_size_v<Descriptors>>{}));
75 #endif //OPENKALMAN_LESS_FIXED_THAN_HPP constexpr bool less_fixed_than
indexible T's vector space descriptors are less fixed than the at least one of the specified vectors_...
Definition: less_fixed_than.hpp:66
constexpr std::size_t dynamic_size
A constant indicating that a size or index is dynamic.
Definition: global-definitions.hpp:33
Definition: basics.hpp:48