22#if defined(__cpp_lib_format)
36 template <
class T, std::
size_t Extent = std::dynamic_extent>
44 using base_type::base_type;
46 explicit operator std::vector<value_type>() const noexcept
48 return std::vector<value_type>(this->begin(), this->end());
52 template <
class T, std::
size_t E>
53 constexpr bool operator==(
const sequence_view<T, E>& lhs,
const sequence_view<T, E>& rhs);
55 template <
class T, std::
size_t E, std::ranges::input_range R>
56 requires mpl::weakly_equality_comparable_with<T, std::ranges::range_value_t<R>>
57 constexpr bool operator==(
const sequence_view<T, E>& lhs,
const R& rhs);
59 template <
class T, std::
size_t E>
60 constexpr std::compare_three_way_result<T>
61 operator<=>(
const sequence_view<T, E>& lhs,
const sequence_view<T, E>& rhs);
63 template <
class T, std::
size_t E, std::ranges::input_range R>
64 constexpr std::compare_three_way_result<T, std::ranges::range_value_t<R>>
65 operator<=>(
const sequence_view<T, E>& lhs,
const R& rhs);
70 template <
class T, std::
size_t E>
77 template <
class T, std::
size_t E>
78 constexpr bool enable_borrowed_range<sparrow::sequence_view<T, E>> =
true;
80 template <
class T, std::
size_t E>
81 constexpr bool enable_view<sparrow::sequence_view<T, E>> =
true;
90 typename std::remove_cvref_t<T>::element_type;
91 requires std::tuple_size_v<T> != std::dynamic_extent;
92 requires std::same_as<
94 std::remove_cvref_t<T>>;
101 template <
class T, std::
size_t E>
104 return std::ranges::equal(lhs, rhs);
107 template <
class T, std::
size_t E, std::ranges::input_range R>
108 requires mpl::weakly_equality_comparable_with<T, std::ranges::range_value_t<R>>
111 return std::ranges::equal(lhs, rhs);
114 template <
class T, std::
size_t E>
115 constexpr std::compare_three_way_result<T>
118 return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
121 template <
class T, std::
size_t E, std::ranges::input_range R>
122 constexpr std::compare_three_way_result<T, std::ranges::range_value_t<R>>
125 return std::lexicographical_compare_three_way(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
129#if defined(__cpp_lib_format)
130template <
class T, std::
size_t E>
131struct std::formatter<
sparrow::sequence_view<T, E>>
133 constexpr auto parse(std::format_parse_context& ctx)
138 auto format(
const sparrow::sequence_view<T, E>& vec, std::format_context& ctx)
const
140 std::format_to(ctx.out(),
"<");
143 for (std::size_t i = 0; i < vec.size() - 1; ++i)
145 std::format_to(ctx.out(),
"{}, ", vec[i]);
148 return std::format_to(ctx.out(),
"{}>", vec.back());
152template <
typename T, std::
size_t E>
155 os << std::format(
"{}", value);
The class sequence_view describes an object that can refer to a constant contiguous sequence of T wit...
typename base_type::value_type value_type
std::span< const byte_t, std::dynamic_extent > base_type
constexpr std::compare_three_way_result_t< typename cloning_ptr< T1 >::pointer, typename cloning_ptr< T2 >::pointer > operator<=>(const cloning_ptr< T1 > &lhs, const cloning_ptr< T2 > &rhs) noexcept
SPARROW_API bool operator==(const array &lhs, const array &rhs)
Compares the content of two arrays.
std::ostream & operator<<(std::ostream &os, const sparrow::nullval_t &)