17 #ifndef OPENKALMAN_COMPATIBILITY_VIEWS_SINGLE_HPP 18 #define OPENKALMAN_COMPATIBILITY_VIEWS_SINGLE_HPP 20 #ifndef __cpp_lib_ranges 32 template<std::move_constructible T> requires std::is_object_v<T>
43 single_view() requires std::default_initializable<T> =
default;
45 template<
typename aT = T, std::enable_if_t<std::is_default_constructible_v<aT>,
int> = 0>
56 single_view(
const T& t) requires std::copy_constructible<T> : t_ {t} {}
57 requires std::copy_constructible<T>
59 template<
typename aT = T, std::enable_if_t<std::is_copy_constructible_v<aT>,
int> = 0>
91 end() const noexcept {
return data() + 1_uz; }
98 empty() noexcept {
return false; }
104 static constexpr std::size_t
105 size() noexcept {
return 1_uz; }
112 data() noexcept {
return std::addressof(std::get<0>(t_)); }
119 data() const noexcept {
return std::addressof(std::get<0>(t_)); }
131 template<
typename Arg>
135 #ifdef __cpp_impl_three_way_comparison 137 constexpr std::partial_ordering
140 return get(lhs, std::integral_constant<std::size_t, 0>{}) <=> rhs;
147 return std::is_eq(operator<=>(lhs, rhs));
151 constexpr
bool operator==(
const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) == rhs; }
154 constexpr
bool operator!=(
const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) != rhs; }
157 constexpr
bool operator<(const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) < rhs; }
160 constexpr
bool operator>(
const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) > rhs; }
163 constexpr
bool operator<=(const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) <= rhs; }
166 constexpr
bool operator>=(
const single_view<T>& lhs,
const T& rhs) noexcept {
return get(lhs, std::integral_constant<std::size_t, 0>{}) >= rhs; }
170 constexpr
bool operator==(
const T& lhs,
const single_view<T>& rhs) noexcept {
return lhs ==
get(rhs, std::integral_constant<std::size_t, 0>{}); }
173 constexpr
bool operator!=(
const T& lhs,
const single_view<T>& rhs) noexcept {
return lhs !=
get(rhs, std::integral_constant<std::size_t, 0>{}); }
176 constexpr
bool operator<(const T& lhs, const single_view<T>& rhs) noexcept {
return lhs < get(rhs, std::integral_constant<std::size_t, 0>{}); }
179 constexpr
bool operator>(
const T& lhs,
const single_view<T>& rhs) noexcept {
return lhs >
get(rhs, std::integral_constant<std::size_t, 0>{}); }
182 constexpr
bool operator<=(const T& lhs, const single_view<T>& rhs) noexcept {
return lhs <= get(rhs, std::integral_constant<std::size_t, 0>{}); }
185 constexpr
bool operator>=(
const T& lhs,
const single_view<T>& rhs) noexcept {
return lhs >=
get(rhs, std::integral_constant<std::size_t, 0>{}); }
200 operator() [[nodiscard]] (R&& r)
const {
return single_view<R> {std::forward<R>(r)}; }
216 #endif //OPENKALMAN_COMPATIBILITY_VIEWS_SINGLE_HPP constexpr T * data() noexcept
A pointer to the contained value.
Definition: single.hpp:112
constexpr single_view()
Default constructor.
Definition: single.hpp:47
Equivalent to std::ranges::single_view.
Definition: single.hpp:36
constexpr T * end() noexcept
Equivalent to data() + 1;.
Definition: single.hpp:87
Definition: single.hpp:196
Definition: view_interface.hpp:32
constexpr single_view(const T &t)
Construct from an object convertible to type T.
Definition: single.hpp:61
Definition: range-access.hpp:25
constexpr const T * end() const noexcept
Definition: single.hpp:91
constexpr detail::single_impl single
Equivalent to std::ranges::views::single.
Definition: single.hpp:210
constexpr const T * data() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: single.hpp:119
static constexpr std::size_t size() noexcept
The size of the resulting object (which is always 1)
Definition: single.hpp:105
constexpr T * begin() noexcept
Equivalent to data();.
Definition: single.hpp:76
static constexpr auto empty() noexcept
Definition: single.hpp:98
constexpr const T * begin() const noexcept
Definition: single.hpp:80
constexpr single_view(T &&t)
Construct from an object convertible to type T.
Definition: single.hpp:69