16 #ifndef OPENKALMAN_COLLECTIONS_VIEWS_REPEAT_HPP 17 #define OPENKALMAN_COLLECTIONS_VIEWS_REPEAT_HPP 29 template<std::
size_t N,
typename T>
32 #ifdef __cpp_lib_concepts 35 template<
bool Enable = true, std::enable_if_t<Enable and stdex::default_initializable<T>,
int> = 0>
40 #ifdef __cpp_lib_concepts 41 template<
typename Arg> requires std::constructible_from<T, Arg&&>
43 template<
typename Arg, std::enable_if_t<stdex::constructible_from<T, Arg&&>,
int> = 0>
51 constexpr T
value()
const {
return t; }
57 #ifdef __cpp_explicit_this_parameter 58 template<std::
size_t i>
59 constexpr decltype(
auto)
60 get(
this auto&&
self) noexcept
62 static_assert(i < N,
"Index out of range");
63 return std::forward<decltype(self)>(
self).t;
66 template<std::
size_t i>
67 constexpr decltype(
auto)
68 get() & { static_assert(i < N,
"Index out of range");
return t; }
71 template<std::
size_t i>
72 constexpr decltype(
auto)
73 get() const & { static_assert(i < N,
"Index out of range");
return t; }
76 template<std::
size_t i>
77 constexpr decltype(
auto)
78 get() && noexcept { static_assert(i < N,
"Index out of range");
return std::move(*this).t; }
81 template<std::
size_t i>
82 constexpr decltype(
auto)
83 get() const && noexcept { static_assert(i < N,
"Index out of range");
return std::move(*this).t; }
96 template<std::
size_t N,
typename T>
97 struct tuple_size<
OpenKalman::collections::repeat_tuple_view<N, T>> : std::integral_constant<size_t, N> {};
100 template<std::
size_t i, std::
size_t N,
typename T>
101 struct tuple_element<i, OpenKalman::collections::repeat_tuple_view<N, T>>
103 static_assert(i < N);
115 #ifdef __cpp_lib_ranges 116 template<std::move_constructible W, values::size Bound = values::unbounded_
size_t>
118 template<
typename W,
typename Bound = values::unbounded_
size_t,
typename =
void>
121 operator() [[nodiscard]] (W&&
value, Bound&& bound = {})
const 123 if constexpr (stdex::same_as<Bound, values::unbounded_size_t>)
127 else if constexpr (values::fixed<Bound>)
129 if constexpr (values::fixed_value_of_v<Bound> == 1)
130 return stdex::ranges::views::single(std::forward<W>(value)) | all;
Definition: repeat.hpp:113
Namespace for collections.
Definition: collections.hpp:27
Header file for code relating to values (e.g., scalars and indices)
constexpr detail::repeat_adaptor repeat
a std::ranges::range_adaptor_closure for a set of repeated collection objects.
Definition: repeat.hpp:148
A uniformly_gettable view that replicates a particular value N number of times.
Definition: repeat.hpp:30
The root namespace for OpenKalman.
Definition: basics.hpp:34
decltype(auto) constexpr get() &
Get element i of a repeat_tuple_view.
Definition: repeat.hpp:68
Namespace for generalized views.
Definition: collections.hpp:33
constexpr T value() const
Definition: repeat.hpp:51