17 #ifndef OPENKALMAN_MAKE_FIXED_SIZE_ADAPTER_HPP 18 #define OPENKALMAN_MAKE_FIXED_SIZE_ADAPTER_HPP 24 template<
typename DTup,
typename Arg, std::size_t...Ix>
25 constexpr decltype(
auto)
26 make_fixed_size_adapter_impl(Arg&& arg,
std::index_sequence<Ix...> seq)
28 return FixedSizeAdapter<Arg,
29 std::tuple<decltype(most_fixed_pattern(get_pattern_collection(std::declval<Arg>(), Ix),
30 std::get<Ix>(std::declval<DTup>())))...>> {std::forward<Arg>(arg)};
43 template<pattern_collection Descriptors, compatible_with_vector_space_descriptor_collection<Descriptors> Arg>
45 template<
typename Descriptors,
typename Arg, std::enable_if_t<pattern_collection<Descriptors> and
46 compatible_with_vector_space_descriptor_collection<Arg, Descriptors>,
int> = 0>
48 constexpr decltype(
auto)
49 make_fixed_size_adapter(Arg&& arg)
51 if constexpr (fixed_size_adapter<Arg>)
53 return make_fixed_size_adapter<Descriptors>(
nested_object(std::forward<Arg>(arg)));
55 else if constexpr (internal::less_fixed_than<Arg, Descriptors>)
57 using DTup = std::decay_t<decltype(coordinates::internal::strip_1D_tail(std::declval<Descriptors>()))>;
58 std::make_index_sequence<collections::size_of_v<DTup>> seq {};
59 return detail::make_fixed_size_adapter_impl<DTup>(std::forward<Arg>(arg), seq);
63 return std::forward<Arg>(arg);
72 template<
coordinates::pattern...Ds, compatible_with_vector_space_descriptor_collection<std::tuple<Ds...>> Arg>
74 template<
typename...Ds,
typename Arg, std::enable_if_t<(... and coordinates::pattern<Ds>) and
75 compatible_with_vector_space_descriptor_collection<Arg, std::tuple<Ds...>>,
int> = 0>
77 constexpr decltype(
auto)
88 template<indexible Arg, pattern_collection Descriptors>
89 requires compatible_with_vector_space_descriptor_collection<Arg, Descriptors>
91 template<
typename Arg,
typename Descriptors, std::enable_if_t<indexible<Arg> and pattern_collection<Descriptors> and
92 compatible_with_vector_space_descriptor_collection<Arg, Descriptors>,
int> = 0>
94 constexpr decltype(
auto)
95 make_fixed_size_adapter(Arg&& arg, Descriptors&&)
97 return make_fixed_size_adapter<Descriptors>(std::forward<Arg>(arg));
constexpr bool pattern
An object describing the set of coordinates associated with a tensor index.
Definition: pattern.hpp:31
decltype(auto) constexpr make_fixed_size_adapter(Arg &&arg)
Make the best possible FixedSizeAdapter, if applicable, based on a set of vector space descriptors...
Definition: make_fixed_size_adapter.hpp:49
decltype(auto) constexpr nested_object(Arg &&arg)
Retrieve a nested object of Arg, if it exists.
Definition: nested_object.hpp:35
Definition: basics.hpp:48