16 #ifndef OPENKALMAN_COLLECTIONS_UNIFORMLY_GETTABLE_HPP 17 #define OPENKALMAN_COLLECTIONS_UNIFORMLY_GETTABLE_HPP 19 #include <type_traits> 25 #if not defined(__cpp_concepts) or __cpp_generic_lambdas < 201707L 28 template<
typename T,
typename = std::make_index_sequence<size_of_v<T>>,
typename =
void>
29 struct uniformly_gettable_sized_impl : std::false_type {};
31 template<
typename T, std::size_t...i>
32 struct uniformly_gettable_sized_impl<T,
std::index_sequence<i...>, std::enable_if_t<(... and gettable<i, T>)>> : std::true_type {};
35 template<
typename T,
typename =
void>
36 struct uniformly_gettable_sized : std::false_type {};
39 struct uniformly_gettable_sized<T, std::enable_if_t<size_of<T>::value != dynamic_size>>
40 : uniformly_gettable_sized_impl<T> {};
51 #if defined(__cpp_concepts) and __cpp_generic_lambdas >= 201707L 54 (gettable<0_uz, T> and
gettable<std::numeric_limits<std::size_t>::max() - 1_uz, T>)) and
56 []<std::size_t...i>(std::index_sequence<i...>) {
return (... and gettable<i, T>); }
57 (std::make_index_sequence<size_of_v<T>>{}));
59 constexpr
bool uniformly_gettable =
61 (gettable<0_uz, T> and
gettable<std::numeric_limits<std::size_t>::max() - 1_uz, T>)) and
68 #endif //OPENKALMAN_COLLECTIONS_UNIFORMLY_GETTABLE_HPP Namespace for collections.
Definition: collections.hpp:27
constexpr bool uniformly_gettable
T is gettable for all indices.
Definition: uniformly_gettable.hpp:59
constexpr bool gettable
T has an element i that is accessible by a get(...) function.
Definition: gettable.hpp:58
Definition: tuple_reverse.hpp:103
Definition for collections::size_of.
constexpr bool value
T is numerical value or is reducible to a numerical value.
Definition: value.hpp:31
constexpr std::size_t dynamic_size
A constant indicating that a size or index is dynamic.
Definition: global-definitions.hpp:33
Definition for collections::gettable.