16 #ifndef OPENKALMAN_VIEWS_REPEAT_HPP 17 #define OPENKALMAN_VIEWS_REPEAT_HPP 30 template<std::
size_t N,
typename T>
33 #ifdef __cpp_lib_concepts 36 template<
typename aT = T, std::enable_if_t<std::is_default_constructible_v<aT>,
int> = 0>
41 #ifdef __cpp_lib_concepts 42 template<
typename Arg> requires std::constructible_from<T, Arg&&>
44 template<
typename Arg, std::enable_if_t<std::is_constructible_v<T, Arg&&>,
int> = 0>
52 constexpr T
value()
const {
return t; }
59 template<std::
size_t i> requires (i < N)
61 template<std::
size_t i, std::enable_if_t<i < N,
int> = 0>
64 get(const repeat_tuple_view& v)
74 template<
size_t i> requires (i < N)
76 template<
size_t i, std::enable_if_t<i < N,
int> = 0>
79 get(repeat_tuple_view&& v)
81 return std::move(v).t;
94 template<std::
size_t N,
typename T>
95 struct tuple_size<OpenKalman::collections::repeat_tuple_view<N, T>> : std::integral_constant<size_t, N> {};
98 template<std::
size_t i, std::
size_t N,
typename T>
99 struct tuple_element<i,
OpenKalman::collections::repeat_tuple_view<N, T>>
101 static_assert(i < N);
113 #ifdef __cpp_lib_ranges 114 template<std::move_constructible W, values::size Bound = std::unreachable_sentinel_t> requires
115 std::is_object_v<W> and std::same_as<W, std::remove_cv_t<W>>
117 template<
typename W,
typename Bound = unreachable_sentinel_t,
typename =
void>
120 operator() [[nodiscard]] (W&&
value, Bound&& bound = {})
const 122 if constexpr (values::fixed<Bound>)
124 #ifdef __cpp_lib_ranges 125 namespace cv = std::ranges::views;
127 namespace cv = ranges::views;
129 if constexpr (values::fixed_number_of_v<Bound> == 1)
return cv::single(std::forward<W>(value)) | all;
134 #ifdef __cpp_lib_ranges_repeat 135 namespace cv = std::ranges::views;
137 namespace cv = ranges::views;
139 return cv::repeat(std::forward<W>(value), std::forward<Bound>(bound)) | all;
Definition: repeat.hpp:111
Namespace for collections.
Definition: collections.hpp:27
Definition for values::size.
constexpr detail::repeat_adaptor repeat
a std::ranges::range_adaptor_closure for a set of repeatenated collection objects.
Definition: repeat.hpp:150
A view of a tuple that replicates a particular value N number of times.
Definition: repeat.hpp:31
The root namespace for OpenKalman.
Definition: basics.hpp:34
Namespace for generalized views.
Definition: collections.hpp:33
constexpr T value() const
Definition: repeat.hpp:52