summaryrefslogtreecommitdiff
path: root/third_party/libcxx/include/c++/v1/__ranges
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libcxx/include/c++/v1/__ranges')
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/access.h210
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/adjacent_transform_view.h406
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/adjacent_view.h419
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/all.h78
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/as_rvalue_view.h142
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/chunk_by_view.h235
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/common_view.h142
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/concepts.h182
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/container_compatible_range.h33
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/counted.h89
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/dangling.h42
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/data.h102
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/drop_view.h329
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/drop_while_view.h136
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/elements_of.h49
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/elements_view.h418
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/empty.h71
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/empty_view.h54
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/enable_borrowed_range.h40
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/enable_view.h50
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/filter_view.h260
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/from_range.h33
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/iota_view.h423
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/istream_view.h141
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/join_view.h429
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/join_with_view.h459
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/lazy_split_view.h442
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/movable_box.h247
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/non_propagating_cache.h103
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/owning_view.h116
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/range_adaptor.h99
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/rbegin.h120
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/ref_view.h89
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/rend.h123
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/repeat_view.h274
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/reverse_view.h204
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/single_view.h112
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/size.h138
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/split_view.h232
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/subrange.h275
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/take_view.h368
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/take_while_view.h170
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/to.h248
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/transform_view.h419
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/view_interface.h170
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/views.h35
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/zip_transform_view.h357
-rw-r--r--third_party/libcxx/include/c++/v1/__ranges/zip_view.h499
48 files changed, 0 insertions, 9812 deletions
diff --git a/third_party/libcxx/include/c++/v1/__ranges/access.h b/third_party/libcxx/include/c++/v1/__ranges/access.h
deleted file mode 100644
index bbacef3..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/access.h
+++ /dev/null
@@ -1,210 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ACCESS_H
-#define _LIBCPP___RANGES_ACCESS_H
-
-#include <__concepts/class_or_enum.h>
-#include <__config>
-#include <__cstddef/size_t.h>
-#include <__iterator/concepts.h>
-#include <__iterator/readable_traits.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/remove_cvref.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/auto_cast.h>
-#include <__utility/declval.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class _Tp>
-concept __can_borrow = is_lvalue_reference_v<_Tp> || enable_borrowed_range<remove_cvref_t<_Tp>>;
-} // namespace ranges
-
-// [range.access.begin]
-
-namespace ranges {
-namespace __begin {
-template <class _Tp>
-concept __member_begin = __can_borrow<_Tp> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(__t.begin()) } -> input_or_output_iterator;
-};
-
-void begin() = delete;
-
-template <class _Tp>
-concept __unqualified_begin =
- !__member_begin<_Tp> && __can_borrow<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(begin(__t)) } -> input_or_output_iterator;
- };
-
-struct __fn {
- template <class _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp (&__t)[]) const noexcept
- requires(sizeof(_Tp) >= 0) // Disallow incomplete element types.
- {
- return __t + 0;
- }
-
- template <class _Tp, size_t _Np>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp (&__t)[_Np]) const noexcept
- requires(sizeof(_Tp) >= 0) // Disallow incomplete element types.
- {
- return __t + 0;
- }
-
- template <class _Tp>
- requires __member_begin<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.begin()))) {
- return _LIBCPP_AUTO_CAST(__t.begin());
- }
-
- template <class _Tp>
- requires __unqualified_begin<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(begin(__t)))) {
- return _LIBCPP_AUTO_CAST(begin(__t));
- }
-
- void operator()(auto&&) const = delete;
-};
-} // namespace __begin
-
-inline namespace __cpo {
-inline constexpr auto begin = __begin::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.range]
-
-namespace ranges {
-template <class _Tp>
-using iterator_t = decltype(ranges::begin(std::declval<_Tp&>()));
-} // namespace ranges
-
-// [range.access.end]
-
-namespace ranges {
-namespace __end {
-template <class _Tp>
-concept __member_end = __can_borrow<_Tp> && requires(_Tp&& __t) {
- typename iterator_t<_Tp>;
- { _LIBCPP_AUTO_CAST(__t.end()) } -> sentinel_for<iterator_t<_Tp>>;
-};
-
-void end() = delete;
-
-template <class _Tp>
-concept __unqualified_end =
- !__member_end<_Tp> && __can_borrow<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- typename iterator_t<_Tp>;
- { _LIBCPP_AUTO_CAST(end(__t)) } -> sentinel_for<iterator_t<_Tp>>;
- };
-
-struct __fn {
- template <class _Tp, size_t _Np>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp (&__t)[_Np]) const noexcept
- requires(sizeof(_Tp) >= 0) // Disallow incomplete element types.
- {
- return __t + _Np;
- }
-
- template <class _Tp>
- requires __member_end<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.end()))) {
- return _LIBCPP_AUTO_CAST(__t.end());
- }
-
- template <class _Tp>
- requires __unqualified_end<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(end(__t)))) {
- return _LIBCPP_AUTO_CAST(end(__t));
- }
-
- void operator()(auto&&) const = delete;
-};
-} // namespace __end
-
-inline namespace __cpo {
-inline constexpr auto end = __end::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.access.cbegin]
-
-namespace ranges {
-namespace __cbegin {
-struct __fn {
- template <class _Tp>
- requires is_lvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::begin(static_cast<const remove_reference_t<_Tp>&>(__t))))
- -> decltype(ranges::begin(static_cast<const remove_reference_t<_Tp>&>(__t))) {
- return ranges::begin(static_cast<const remove_reference_t<_Tp>&>(__t));
- }
-
- template <class _Tp>
- requires is_rvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::begin(static_cast<const _Tp&&>(__t))))
- -> decltype(ranges::begin(static_cast<const _Tp&&>(__t))) {
- return ranges::begin(static_cast<const _Tp&&>(__t));
- }
-};
-} // namespace __cbegin
-
-inline namespace __cpo {
-inline constexpr auto cbegin = __cbegin::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.access.cend]
-
-namespace ranges {
-namespace __cend {
-struct __fn {
- template <class _Tp>
- requires is_lvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::end(static_cast<const remove_reference_t<_Tp>&>(__t))))
- -> decltype(ranges::end(static_cast<const remove_reference_t<_Tp>&>(__t))) {
- return ranges::end(static_cast<const remove_reference_t<_Tp>&>(__t));
- }
-
- template <class _Tp>
- requires is_rvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(
- noexcept(ranges::end(static_cast<const _Tp&&>(__t)))) -> decltype(ranges::end(static_cast<const _Tp&&>(__t))) {
- return ranges::end(static_cast<const _Tp&&>(__t));
- }
-};
-} // namespace __cend
-
-inline namespace __cpo {
-inline constexpr auto cend = __cend::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_ACCESS_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/adjacent_transform_view.h b/third_party/libcxx/include/c++/v1/__ranges/adjacent_transform_view.h
deleted file mode 100644
index 11b1176..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/adjacent_transform_view.h
+++ /dev/null
@@ -1,406 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ADJACENT_TRANSFORM_VIEW_H
-#define _LIBCPP___RANGES_ADJACENT_TRANSFORM_VIEW_H
-
-#include <__config>
-
-#include <__algorithm/min.h>
-#include <__compare/three_way_comparable.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__concepts/invocable.h>
-#include <__cstddef/size_t.h>
-#include <__functional/bind_back.h>
-#include <__functional/invoke.h>
-#include <__functional/operations.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/next.h>
-#include <__iterator/prev.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/adjacent_view.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__ranges/zip_transform_view.h>
-#include <__type_traits/common_type.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/is_referenceable.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/maybe_const.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/integer_sequence.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <class _Fn, size_t _Np>
-struct __apply_n {
- template <class _Tp, size_t... _Is>
- static auto __apply(index_sequence<_Is...>) -> invoke_result_t<_Fn, decltype((void)_Is, std::declval<_Tp>())...>;
-
- template <class _Tp>
- static auto operator()(_Tp&&) -> decltype(__apply<_Tp>(make_index_sequence<_Np>{}));
-};
-
-template <forward_range _View, move_constructible _Fn, size_t _Np>
- requires view<_View> && (_Np > 0) && is_object_v<_Fn> &&
- regular_invocable<__apply_n<_Fn&, _Np>, range_reference_t<_View>> &&
- __referenceable<invoke_result_t<__apply_n<_Fn&, _Np>, range_reference_t<_View>>>
-class adjacent_transform_view : public view_interface<adjacent_transform_view<_View, _Fn, _Np>> {
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS adjacent_view<_View, _Np> __inner_;
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Fn> __fun_;
-
- using _InnerView _LIBCPP_NODEBUG = adjacent_view<_View, _Np>;
-
- template <bool _Const>
- using __inner_iterator _LIBCPP_NODEBUG = iterator_t<__maybe_const<_Const, _InnerView>>;
-
- template <bool _Const>
- using __inner_sentinel _LIBCPP_NODEBUG = sentinel_t<__maybe_const<_Const, _InnerView>>;
-
- template <bool>
- class __iterator;
-
- template <bool>
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI adjacent_transform_view() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit adjacent_transform_view(_View __base, _Fn __fun)
- : __inner_(std::move(__base)), __fun_(std::in_place, std::move(__fun)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __inner_.base();
- }
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__inner_).base(); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() { return __iterator<false>(*this, __inner_.begin()); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _InnerView> && regular_invocable<__apply_n<const _Fn&, _Np>, range_reference_t<const _View>>
- {
- return __iterator<true>(*this, __inner_.begin());
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (common_range<_InnerView>) {
- return __iterator<false>(*this, __inner_.end());
- } else {
- return __sentinel<false>(__inner_.end());
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _InnerView> && regular_invocable<__apply_n<const _Fn&, _Np>, range_reference_t<const _View>>
- {
- if constexpr (common_range<const _InnerView>) {
- return __iterator<true>(*this, __inner_.end());
- } else {
- return __sentinel<true>(__inner_.end());
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_InnerView>
- {
- return __inner_.size();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _InnerView>
- {
- return __inner_.size();
- }
-};
-
-template <forward_range _View, move_constructible _Fn, size_t _Np>
- requires view<_View> && (_Np > 0) && is_object_v<_Fn> &&
- regular_invocable<__apply_n<_Fn&, _Np>, range_reference_t<_View>> &&
- __referenceable<invoke_result_t<__apply_n<_Fn&, _Np>, range_reference_t<_View>>>
-template <bool _Const>
-class adjacent_transform_view<_View, _Fn, _Np>::__iterator {
- friend adjacent_transform_view;
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, adjacent_transform_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- _Parent* __parent_ = nullptr;
- __inner_iterator<_Const> __inner_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent& __parent, __inner_iterator<_Const> __inner)
- : __parent_(std::addressof(__parent)), __inner_(std::move(__inner)) {}
-
- static consteval auto __get_iterator_category() {
- using _Cat = iterator_traits<iterator_t<_Base>>::iterator_category;
- if constexpr (!is_reference_v<
- invoke_result_t<__apply_n<__maybe_const<_Const, _Fn>&, _Np>, range_reference_t<_Base>>>)
- return input_iterator_tag{};
- else if constexpr (derived_from<_Cat, random_access_iterator_tag>)
- return random_access_iterator_tag{};
- else if constexpr (derived_from<_Cat, bidirectional_iterator_tag>)
- return bidirectional_iterator_tag{};
- else if constexpr (derived_from<_Cat, forward_iterator_tag>)
- return forward_iterator_tag{};
- else
- return input_iterator_tag{};
- }
-
- template <size_t... _Is>
- static consteval bool __noexcept_dereference(index_sequence<_Is...>) {
- return noexcept(std::invoke(
- std::declval<__maybe_const<_Const, _Fn>&>(), ((void)_Is, *std::declval<iterator_t<_Base> const&>())...));
- }
-
-public:
- using iterator_category = decltype(__get_iterator_category());
- using iterator_concept = typename __inner_iterator<_Const>::iterator_concept;
- using value_type =
- remove_cvref_t<invoke_result_t<__apply_n<__maybe_const<_Const, _Fn>&, _Np>, range_reference_t<_Base>>>;
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<__inner_iterator<false>, __inner_iterator<true>>
- : __parent_(__i.__parent_), __inner_(std::move(__i.__inner_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const
- noexcept(__noexcept_dereference(make_index_sequence<_Np>{})) {
- return std::apply(
- [&](const auto&... __iters) -> decltype(auto) { return std::invoke(*__parent_->__fun_, *__iters...); },
- __adjacent_view_iter_access::__get_current(__inner_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__inner_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_Base>
- {
- --__inner_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_Base>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __x)
- requires random_access_range<_Base>
- {
- __inner_ += __x;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __x)
- requires random_access_range<_Base>
- {
- __inner_ -= __x;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](difference_type __n) const
- requires random_access_range<_Base>
- {
- return std::apply(
- [&](const auto&... __iters) -> decltype(auto) { return std::invoke(*__parent_->__fun_, __iters[__n]...); },
- __adjacent_view_iter_access::__get_current(__inner_));
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y) {
- return __x.__inner_ == __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__inner_ < __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__inner_ > __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__inner_ <= __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__inner_ >= __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base> && three_way_comparable<__inner_iterator<_Const>>
- {
- return __x.__inner_ <=> __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, const __iterator& __i)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ - __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires sized_sentinel_for<__inner_iterator<_Const>, __inner_iterator<_Const>>
- {
- return __x.__inner_ - __y.__inner_;
- }
-};
-
-template <forward_range _View, move_constructible _Fn, size_t _Np>
- requires view<_View> && (_Np > 0) && is_object_v<_Fn> &&
- regular_invocable<__apply_n<_Fn&, _Np>, range_reference_t<_View>> &&
- __referenceable<invoke_result_t<__apply_n<_Fn&, _Np>, range_reference_t<_View>>>
-template <bool _Const>
-class adjacent_transform_view<_View, _Fn, _Np>::__sentinel {
- friend adjacent_transform_view;
-
- __inner_sentinel<_Const> __inner_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(__inner_sentinel<_Const> __inner)
- : __inner_(std::move(__inner)) {}
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __i)
- requires _Const && convertible_to<__inner_sentinel<false>, __inner_sentinel<_Const>>
- : __inner_(std::move(__i.__inner_)) {}
-
- template <bool _OtherConst>
- requires sentinel_for<__inner_sentinel<_Const>, __inner_iterator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__inner_ == __y.__inner_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<__inner_sentinel<_Const>, __inner_iterator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _InnerView>>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__inner_ - __y.__inner_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<__inner_sentinel<_Const>, __inner_iterator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _InnerView>>
- operator-(const __sentinel& __x, const __iterator<_OtherConst>& __y) {
- return __x.__inner_ - __y.__inner_;
- }
-};
-
-namespace views {
-namespace __adjacent_transform {
-
-template <size_t _Np>
-struct __fn : __range_adaptor_closure<__fn<_Np>> {
- template <class _Range, class _Fn>
- requires(_Np == 0 && forward_range<_Range &&>)
- _LIBCPP_HIDE_FROM_ABI static constexpr auto
- operator()(_Range&&, _Fn&& __fn) noexcept(noexcept(views::zip_transform(std::forward<_Fn>(__fn))))
- -> decltype(views::zip_transform(std::forward<_Fn>(__fn))) {
- return views::zip_transform(std::forward<_Fn>(__fn));
- }
-
- template <class _Range, class _Fn>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Range&& __range, _Fn&& __fn) noexcept(
- noexcept(adjacent_transform_view<views::all_t<_Range&&>, decay_t<_Fn>, _Np>(
- std::forward<_Range>(__range), std::forward<_Fn>(__fn))))
- -> decltype(adjacent_transform_view<views::all_t<_Range&&>, decay_t<_Fn>, _Np>(
- std::forward<_Range>(__range), std::forward<_Fn>(__fn))) {
- return adjacent_transform_view<views::all_t<_Range&&>, decay_t<_Fn>, _Np>(
- std::forward<_Range>(__range), std::forward<_Fn>(__fn));
- }
-
- template <class _Fn>
- requires constructible_from<decay_t<_Fn>, _Fn>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Fn&& __f) const
- noexcept(is_nothrow_constructible_v<decay_t<_Fn>, _Fn>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Fn>(__f)));
- }
-};
-
-} // namespace __adjacent_transform
-inline namespace __cpo {
-template <size_t _Np>
-inline constexpr auto adjacent_transform = __adjacent_transform::__fn<_Np>{};
-inline constexpr auto pairwise_transform = adjacent_transform<2>;
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ADJACENT_TRANSFORM_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/adjacent_view.h b/third_party/libcxx/include/c++/v1/__ranges/adjacent_view.h
deleted file mode 100644
index 40474b8..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/adjacent_view.h
+++ /dev/null
@@ -1,419 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ADJACENT_VIEW_H
-#define _LIBCPP___RANGES_ADJACENT_VIEW_H
-
-#include <__config>
-
-#include <__algorithm/min.h>
-#include <__compare/three_way_comparable.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/equality_comparable.h>
-#include <__cstddef/size_t.h>
-#include <__functional/invoke.h>
-#include <__functional/operations.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/next.h>
-#include <__iterator/prev.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__tuple/tuple_transform.h>
-#include <__type_traits/common_type.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/maybe_const.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-#include <__utility/integer_sequence.h>
-#include <__utility/move.h>
-#include <array>
-#include <tuple>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <forward_range _View, size_t _Np>
- requires view<_View> && (_Np > 0)
-class adjacent_view : public view_interface<adjacent_view<_View, _Np>> {
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
- template <bool>
- class __iterator;
-
- template <bool>
- class __sentinel;
-
- struct __as_sentinel {};
-
-public:
- _LIBCPP_HIDE_FROM_ABI adjacent_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit adjacent_view(_View __base) : __base_(std::move(__base)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!__simple_view<_View>)
- {
- return __iterator<false>(ranges::begin(__base_), ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View> // LWG4482 This is under-constrained.
- {
- return __iterator<true>(ranges::begin(__base_), ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View>)
- {
- if constexpr (common_range<_View>) {
- return __iterator<false>(__as_sentinel{}, ranges::begin(__base_), ranges::end(__base_));
- } else {
- return __sentinel<false>(ranges::end(__base_));
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View> // LWG4482 This is under-constrained.
- {
- if constexpr (common_range<const _View>) {
- return __iterator<true>(__as_sentinel{}, ranges::begin(__base_), ranges::end(__base_));
- } else {
- return __sentinel<true>(ranges::end(__base_));
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- using _ST = decltype(ranges::size(__base_));
- using _CT = common_type_t<_ST, size_t>;
- auto __sz = static_cast<_CT>(ranges::size(__base_));
- __sz -= std::min<_CT>(__sz, _Np - 1);
- return static_cast<_ST>(__sz);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- using _ST = decltype(ranges::size(__base_));
- using _CT = common_type_t<_ST, size_t>;
- auto __sz = static_cast<_CT>(ranges::size(__base_));
- __sz -= std::min<_CT>(__sz, _Np - 1);
- return static_cast<_ST>(__sz);
- }
-};
-
-struct __adjacent_view_iter_access {
- template <class _Iter>
- _LIBCPP_HIDE_FROM_ABI constexpr static auto& __get_current(_Iter& __it) noexcept {
- return __it.__current_;
- }
-};
-
-template <forward_range _View, size_t _Np>
- requires view<_View> && (_Np > 0)
-template <bool _Const>
-class adjacent_view<_View, _Np>::__iterator {
- friend __adjacent_view_iter_access;
- friend adjacent_view;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- array<iterator_t<_Base>, _Np> __current_ = array<iterator_t<_Base>, _Np>();
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(iterator_t<_Base> __first, sentinel_t<_Base> __last) {
- __current_[0] = __first;
- for (size_t __i = 1; __i < _Np; ++__i) {
- __current_[__i] = ranges::next(__current_[__i - 1], 1, __last);
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__as_sentinel, iterator_t<_Base> __first, iterator_t<_Base> __last) {
- if constexpr (!bidirectional_range<_Base>) {
- __current_.fill(__last);
- } else {
- __current_[_Np - 1] = __last;
- for (int __i = static_cast<int>(_Np) - 2; __i >= 0; --__i) {
- __current_[__i] = ranges::prev(__current_[__i + 1], 1, __first);
- }
- }
- }
-
- template <class _Iter, size_t... _Is>
- _LIBCPP_HIDE_FROM_ABI explicit constexpr __iterator(_Iter&& __i, index_sequence<_Is...>)
- : __current_{std::move(__i.__current_[_Is])...} {}
-
- static consteval auto __get_iterator_concept() {
- if constexpr (random_access_range<_Base>)
- return random_access_iterator_tag{};
- else if constexpr (bidirectional_range<_Base>)
- return bidirectional_iterator_tag{};
- else
- return forward_iterator_tag{};
- }
-
- template <class _Tp, size_t _Index>
- using __always _LIBCPP_NODEBUG = _Tp;
-
- template <class _Tp, size_t... _Is>
- static auto __repeat_tuple_helper(index_sequence<_Is...>) -> tuple<__always<_Tp, _Is>...>;
-
-public:
- using iterator_category = input_iterator_tag;
- using iterator_concept = decltype(__get_iterator_concept());
- using value_type = decltype(__repeat_tuple_helper<range_value_t<_Base>>(make_index_sequence<_Np>{}));
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, iterator_t<const _View>>
- : __iterator(std::move(__i), make_index_sequence<_Np>{}) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator*() const {
- return std::__tuple_transform([](auto& __i) -> decltype(auto) { return *__i; }, __current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- for (auto& __i : __current_) {
- ++__i;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_Base>
- {
- for (auto& __i : __current_) {
- --__i;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_Base>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __x)
- requires random_access_range<_Base>
- {
- for (auto& __i : __current_) {
- __i += __x;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __x)
- requires random_access_range<_Base>
- {
- for (auto& __i : __current_) {
- __i -= __x;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator[](difference_type __n) const
- requires random_access_range<_Base>
- {
- return std::__tuple_transform([&](auto& __i) -> decltype(auto) { return __i[__n]; }, __current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y) {
- return __x.__current_.back() == __y.__current_.back();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_.back() < __y.__current_.back();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __y < __x;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return !(__y < __x);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return !(__x < __y);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>
- {
- return __x.__current_.back() <=> __y.__current_.back();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- auto __r = __i;
- __r += __n;
- return __r;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, const __iterator& __i)
- requires random_access_range<_Base>
- {
- return __i + __n;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- auto __r = __i;
- __r -= __n;
- return __r;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>
- {
- return __x.__current_.back() - __y.__current_.back();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto iter_move(const __iterator& __i) noexcept(
- noexcept(ranges::iter_move(std::declval<const iterator_t<_Base>&>())) &&
- is_nothrow_move_constructible_v<range_rvalue_reference_t<_Base>>) {
- return std::__tuple_transform(ranges::iter_move, __i.__current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void iter_swap(const __iterator& __l, const __iterator& __r) noexcept(
- noexcept(ranges::iter_swap(std::declval<iterator_t<_Base>>(), std::declval<iterator_t<_Base>>())))
- requires indirectly_swappable<iterator_t<_Base>>
- {
- for (size_t __i = 0; __i < _Np; ++__i) {
- ranges::iter_swap(__l.__current_[__i], __r.__current_[__i]);
- }
- }
-};
-
-template <forward_range _View, size_t _Np>
- requires view<_View> && (_Np > 0)
-template <bool _Const>
-class adjacent_view<_View, _Np>::__sentinel {
- friend adjacent_view;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(sentinel_t<_Base> __end) { __end_ = std::move(__end); }
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __i)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__i.__end_)) {}
-
- template <bool _OtherConst>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__current_.back() == __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__current_.back() - __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __sentinel& __y, const __iterator<_OtherConst>& __x) {
- return __y.__end_ - __x.__current_.back();
- }
-};
-
-template <class _View, size_t _Np>
-constexpr bool enable_borrowed_range<adjacent_view<_View, _Np>> = enable_borrowed_range<_View>;
-
-namespace views {
-namespace __adjacent {
-
-template <size_t _Np>
-struct __fn : __range_adaptor_closure<__fn<_Np>> {
- template <class _Range>
- requires(_Np == 0 && forward_range<_Range &&>)
- _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Range&&) noexcept {
- return empty_view<tuple<>>{};
- }
-
- template <class _Ranges>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Ranges&& __range) noexcept(
- noexcept(adjacent_view<views::all_t<_Ranges&&>, _Np>(std::forward<_Ranges>(__range))))
- -> decltype(adjacent_view<views::all_t<_Ranges&&>, _Np>(std::forward<_Ranges>(__range))) {
- return adjacent_view<views::all_t<_Ranges&&>, _Np>(std::forward<_Ranges>(__range));
- }
-};
-
-} // namespace __adjacent
-inline namespace __cpo {
-template <size_t _Np>
-inline constexpr auto adjacent = __adjacent::__fn<_Np>{};
-inline constexpr auto pairwise = adjacent<2>;
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ADJACENT_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/all.h b/third_party/libcxx/include/c++/v1/__ranges/all.h
deleted file mode 100644
index 023cee6..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/all.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ALL_H
-#define _LIBCPP___RANGES_ALL_H
-
-#include <__config>
-#include <__functional/compose.h> // TODO(modules): Those should not be required
-#include <__functional/perfect_forward.h> //
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/owning_view.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/ref_view.h>
-#include <__type_traits/decay.h>
-#include <__utility/auto_cast.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges::views {
-
-namespace __all {
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Tp>
- requires ranges::view<decay_t<_Tp>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(
- noexcept(_LIBCPP_AUTO_CAST(std::forward<_Tp>(__t)))) -> decltype(_LIBCPP_AUTO_CAST(std::forward<_Tp>(__t))) {
- return _LIBCPP_AUTO_CAST(std::forward<_Tp>(__t));
- }
-
- template <class _Tp>
- requires(!ranges::view<decay_t<_Tp>>) && requires(_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::ref_view{std::forward<_Tp>(__t)})) {
- return ranges::ref_view{std::forward<_Tp>(__t)};
- }
-
- template <class _Tp>
- requires(
- !ranges::view<decay_t<_Tp>> && !requires(_Tp&& __t) { ranges::ref_view{std::forward<_Tp>(__t)}; } &&
- requires(_Tp&& __t) { ranges::owning_view{std::forward<_Tp>(__t)}; })
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::owning_view{std::forward<_Tp>(__t)})) {
- return ranges::owning_view{std::forward<_Tp>(__t)};
- }
-};
-} // namespace __all
-
-inline namespace __cpo {
-inline constexpr auto all = __all::__fn{};
-} // namespace __cpo
-
-template <ranges::viewable_range _Range>
-using all_t = decltype(views::all(std::declval<_Range>()));
-
-} // namespace ranges::views
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_ALL_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/as_rvalue_view.h b/third_party/libcxx/include/c++/v1/__ranges/as_rvalue_view.h
deleted file mode 100644
index a553f39..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/as_rvalue_view.h
+++ /dev/null
@@ -1,142 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_AS_RVALUE_H
-#define _LIBCPP___RANGES_AS_RVALUE_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__iterator/move_iterator.h>
-#include <__iterator/move_sentinel.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-#if _LIBCPP_STD_VER >= 23
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-namespace ranges {
-template <view _View>
- requires input_range<_View>
-class as_rvalue_view : public view_interface<as_rvalue_view<_View>> {
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
-public:
- _LIBCPP_HIDE_FROM_ABI as_rvalue_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit as_rvalue_view(_View __base) : __base_(std::move(__base)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!__simple_view<_View>)
- {
- return move_iterator(ranges::begin(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View>
- {
- return move_iterator(ranges::begin(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View>)
- {
- if constexpr (common_range<_View>) {
- return move_iterator(ranges::end(__base_));
- } else {
- return move_sentinel(ranges::end(__base_));
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View>
- {
- if constexpr (common_range<const _View>) {
- return move_iterator(ranges::end(__base_));
- } else {
- return move_sentinel(ranges::end(__base_));
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return ranges::size(__base_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return ranges::size(__base_);
- }
-};
-
-template <class _Range>
-as_rvalue_view(_Range&&) -> as_rvalue_view<views::all_t<_Range>>;
-
-template <class _View>
-inline constexpr bool enable_borrowed_range<as_rvalue_view<_View>> = enable_borrowed_range<_View>;
-
-namespace views {
-namespace __as_rvalue {
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto
- operator()(_Range&& __range) noexcept(noexcept(as_rvalue_view(std::forward<_Range>(__range))))
- -> decltype(/*--------------------------*/ as_rvalue_view(std::forward<_Range>(__range))) {
- return /*---------------------------------*/ as_rvalue_view(std::forward<_Range>(__range));
- }
-
- template <input_range _Range>
- requires same_as<range_rvalue_reference_t<_Range>, range_reference_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto
- operator()(_Range&& __range) noexcept(noexcept(views::all(std::forward<_Range>(__range))))
- -> decltype(/*--------------------------*/ views::all(std::forward<_Range>(__range))) {
- return /*---------------------------------*/ views::all(std::forward<_Range>(__range));
- }
-};
-} // namespace __as_rvalue
-
-inline namespace __cpo {
-inline constexpr auto as_rvalue = __as_rvalue::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_AS_RVALUE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/chunk_by_view.h b/third_party/libcxx/include/c++/v1/__ranges/chunk_by_view.h
deleted file mode 100644
index 8007f76..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/chunk_by_view.h
+++ /dev/null
@@ -1,235 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_CHUNK_BY_VIEW_H
-#define _LIBCPP___RANGES_CHUNK_BY_VIEW_H
-
-#include <__algorithm/ranges_adjacent_find.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/invoke.h>
-#include <__iterator/concepts.h>
-#include <__iterator/default_sentinel.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/next.h>
-#include <__iterator/prev.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/reverse_view.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <forward_range _View, indirect_binary_predicate<iterator_t<_View>, iterator_t<_View>> _Pred>
- requires view<_View> && is_object_v<_Pred>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS chunk_by_view : public view_interface<chunk_by_view<_View, _Pred>> {
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
-
- // We cache the result of begin() to allow providing an amortized O(1).
- using _Cache _LIBCPP_NODEBUG = __non_propagating_cache<iterator_t<_View>>;
- _Cache __cached_begin_;
-
- class __iterator;
-
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> __find_next(iterator_t<_View> __current) {
- // Note: this duplicates a check in `optional` but provides a better error message.
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __pred_.__has_value(), "Trying to call __find_next() on a chunk_by_view that does not have a valid predicate.");
- auto __reversed_pred = [this]<class _Tp, class _Up>(_Tp&& __x, _Up&& __y) -> bool {
- return !std::invoke(*__pred_, std::forward<_Tp>(__x), std::forward<_Up>(__y));
- };
- return ranges::next(
- ranges::adjacent_find(__current, ranges::end(__base_), __reversed_pred), 1, ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> __find_prev(iterator_t<_View> __current)
- requires bidirectional_range<_View>
- {
- // Attempting to decrement a begin iterator is a no-op (`__find_prev` would return the same argument given to it).
- _LIBCPP_ASSERT_PEDANTIC(__current != ranges::begin(__base_), "Trying to call __find_prev() on a begin iterator.");
- // Note: this duplicates a check in `optional` but provides a better error message.
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __pred_.__has_value(), "Trying to call __find_prev() on a chunk_by_view that does not have a valid predicate.");
-
- auto __first = ranges::begin(__base_);
- reverse_view __reversed{subrange{__first, __current}};
- auto __reversed_pred = [this]<class _Tp, class _Up>(_Tp&& __x, _Up&& __y) -> bool {
- return !std::invoke(*__pred_, std::forward<_Up>(__y), std::forward<_Tp>(__x));
- };
- return ranges::prev(ranges::adjacent_find(__reversed, __reversed_pred).base(), 1, std::move(__first));
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI chunk_by_view()
- requires default_initializable<_View> && default_initializable<_Pred>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit chunk_by_view(_View __base, _Pred __pred)
- : __base_(std::move(__base)), __pred_(in_place, std::move(__pred)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Pred& pred() const { return *__pred_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator begin() {
- // Note: this duplicates a check in `optional` but provides a better error message.
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __pred_.__has_value(), "Trying to call begin() on a chunk_by_view that does not have a valid predicate.");
-
- auto __first = ranges::begin(__base_);
- if (!__cached_begin_.__has_value()) {
- __cached_begin_.__emplace(__find_next(__first));
- }
- return {*this, std::move(__first), *__cached_begin_};
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (common_range<_View>) {
- return __iterator{*this, ranges::end(__base_), ranges::end(__base_)};
- } else {
- return default_sentinel;
- }
- }
-};
-
-template <class _Range, class _Pred>
-chunk_by_view(_Range&&, _Pred) -> chunk_by_view<views::all_t<_Range>, _Pred>;
-
-template <forward_range _View, indirect_binary_predicate<iterator_t<_View>, iterator_t<_View>> _Pred>
- requires view<_View> && is_object_v<_Pred>
-class chunk_by_view<_View, _Pred>::__iterator {
- friend chunk_by_view;
-
- chunk_by_view* __parent_ = nullptr;
- _LIBCPP_NO_UNIQUE_ADDRESS iterator_t<_View> __current_ = iterator_t<_View>();
- _LIBCPP_NO_UNIQUE_ADDRESS iterator_t<_View> __next_ = iterator_t<_View>();
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(
- chunk_by_view& __parent, iterator_t<_View> __current, iterator_t<_View> __next)
- : __parent_(std::addressof(__parent)), __current_(__current), __next_(__next) {}
-
-public:
- using value_type = subrange<iterator_t<_View>>;
- using difference_type = range_difference_t<_View>;
- using iterator_category = input_iterator_tag;
- using iterator_concept = conditional_t<bidirectional_range<_View>, bidirectional_iterator_tag, forward_iterator_tag>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr value_type operator*() const {
- // If the iterator is at end, this would return an empty range which can be checked by the calling code and doesn't
- // necessarily lead to a bad access.
- _LIBCPP_ASSERT_PEDANTIC(__current_ != __next_, "Trying to dereference past-the-end chunk_by_view iterator.");
- return {__current_, __next_};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- // Attempting to increment an end iterator is a no-op (`__find_next` would return the same argument given to it).
- _LIBCPP_ASSERT_PEDANTIC(__current_ != __next_, "Trying to increment past end chunk_by_view iterator.");
- __current_ = __next_;
- __next_ = __parent_->__find_next(__current_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_View>
- {
- __next_ = __current_;
- __current_ = __parent_->__find_prev(__next_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_View>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y) {
- return __x.__current_ == __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, default_sentinel_t) {
- return __x.__current_ == __x.__next_;
- }
-};
-
-namespace views {
-namespace __chunk_by {
-struct __fn {
- template <class _Range, class _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pred&& __pred) const
- noexcept(noexcept(/**/ chunk_by_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))))
- -> decltype(/*--*/ chunk_by_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))) {
- return /*-------------*/ chunk_by_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred));
- }
-
- template <class _Pred>
- requires constructible_from<decay_t<_Pred>, _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pred&& __pred) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pred>, _Pred>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pred>(__pred)));
- }
-};
-} // namespace __chunk_by
-
-inline namespace __cpo {
-inline constexpr auto chunk_by = __chunk_by::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_CHUNK_BY_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/common_view.h b/third_party/libcxx/include/c++/v1/__ranges/common_view.h
deleted file mode 100644
index eec1045..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/common_view.h
+++ /dev/null
@@ -1,142 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_COMMON_VIEW_H
-#define _LIBCPP___RANGES_COMMON_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/copyable.h>
-#include <__config>
-#include <__iterator/common_iterator.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <view _View>
- requires(!common_range<_View> && copyable<iterator_t<_View>>)
-class common_view : public view_interface<common_view<_View>> {
- _View __base_ = _View();
-
-public:
- _LIBCPP_HIDE_FROM_ABI common_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit common_view(_View __v) : __base_(std::move(__v)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- if constexpr (random_access_range<_View> && sized_range<_View>)
- return ranges::begin(__base_);
- else
- return common_iterator<iterator_t<_View>, sentinel_t<_View>>(ranges::begin(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View>
- {
- if constexpr (random_access_range<const _View> && sized_range<const _View>)
- return ranges::begin(__base_);
- else
- return common_iterator<iterator_t<const _View>, sentinel_t<const _View>>(ranges::begin(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (random_access_range<_View> && sized_range<_View>)
- return ranges::begin(__base_) + ranges::size(__base_);
- else
- return common_iterator<iterator_t<_View>, sentinel_t<_View>>(ranges::end(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View>
- {
- if constexpr (random_access_range<const _View> && sized_range<const _View>)
- return ranges::begin(__base_) + ranges::size(__base_);
- else
- return common_iterator<iterator_t<const _View>, sentinel_t<const _View>>(ranges::end(__base_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return ranges::size(__base_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return ranges::size(__base_);
- }
-};
-
-template <class _Range>
-common_view(_Range&&) -> common_view<views::all_t<_Range>>;
-
-template <class _View>
-inline constexpr bool enable_borrowed_range<common_view<_View>> = enable_borrowed_range<_View>;
-
-namespace views {
-namespace __common {
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Range>
- requires common_range<_Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const noexcept(
- noexcept(views::all(std::forward<_Range>(__range)))) -> decltype(views::all(std::forward<_Range>(__range))) {
- return views::all(std::forward<_Range>(__range));
- }
-
- template <class _Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const noexcept(noexcept(common_view{
- std::forward<_Range>(__range)})) -> decltype(common_view{std::forward<_Range>(__range)}) {
- return common_view{std::forward<_Range>(__range)};
- }
-};
-} // namespace __common
-
-inline namespace __cpo {
-inline constexpr auto common = __common::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_COMMON_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/concepts.h b/third_party/libcxx/include/c++/v1/__ranges/concepts.h
deleted file mode 100644
index bf75fe8..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/concepts.h
+++ /dev/null
@@ -1,182 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_CONCEPTS_H
-#define _LIBCPP___RANGES_CONCEPTS_H
-
-#include <__concepts/common_reference_with.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/movable.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/readable_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/data.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/enable_view.h>
-#include <__ranges/size.h>
-#include <__type_traits/add_pointer.h>
-#include <__type_traits/common_reference.h>
-#include <__type_traits/common_type.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/remove_cvref.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/declval.h>
-#include <initializer_list>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-// [range.range]
-
-template <class _Tp>
-concept range = requires(_Tp& __t) {
- ranges::begin(__t); // sometimes equality-preserving
- ranges::end(__t);
-};
-
-template <class _Tp>
-concept input_range = range<_Tp> && input_iterator<iterator_t<_Tp>>;
-
-template <class _Range>
-concept borrowed_range =
- range<_Range> && (is_lvalue_reference_v<_Range> || enable_borrowed_range<remove_cvref_t<_Range>>);
-
-// `iterator_t` defined in <__ranges/access.h>
-
-template <range _Rp>
-using sentinel_t = decltype(ranges::end(std::declval<_Rp&>()));
-
-template <range _Rp>
-using range_difference_t = iter_difference_t<iterator_t<_Rp>>;
-
-template <range _Rp>
-using range_value_t = iter_value_t<iterator_t<_Rp>>;
-
-template <range _Rp>
-using range_reference_t = iter_reference_t<iterator_t<_Rp>>;
-
-template <range _Rp>
-using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<_Rp>>;
-
-template <range _Rp>
-using range_common_reference_t = iter_common_reference_t<iterator_t<_Rp>>;
-
-// [range.sized]
-template <class _Tp>
-concept sized_range = range<_Tp> && requires(_Tp& __t) { ranges::size(__t); };
-
-template <sized_range _Rp>
-using range_size_t = decltype(ranges::size(std::declval<_Rp&>()));
-
-// `disable_sized_range` defined in `<__ranges/size.h>`
-
-// [range.view], views
-
-// `enable_view` defined in <__ranges/enable_view.h>
-// `view_base` defined in <__ranges/enable_view.h>
-
-template <class _Tp>
-concept view = range<_Tp> && movable<_Tp> && enable_view<_Tp>;
-
-template <class _Range>
-concept __simple_view =
- view<_Range> && range<const _Range> && same_as<iterator_t<_Range>, iterator_t<const _Range>> &&
- same_as<sentinel_t<_Range>, sentinel_t<const _Range>>;
-
-// [range.refinements], other range refinements
-template <class _Rp, class _Tp>
-concept output_range = range<_Rp> && output_iterator<iterator_t<_Rp>, _Tp>;
-
-template <class _Tp>
-concept forward_range = input_range<_Tp> && forward_iterator<iterator_t<_Tp>>;
-
-template <class _Tp>
-concept bidirectional_range = forward_range<_Tp> && bidirectional_iterator<iterator_t<_Tp>>;
-
-template <class _Tp>
-concept random_access_range = bidirectional_range<_Tp> && random_access_iterator<iterator_t<_Tp>>;
-
-template <class _Tp>
-concept contiguous_range = random_access_range<_Tp> && contiguous_iterator<iterator_t<_Tp>> && requires(_Tp& __t) {
- { ranges::data(__t) } -> same_as<add_pointer_t<range_reference_t<_Tp>>>;
-};
-
-template <class _Tp>
-concept common_range = range<_Tp> && same_as<iterator_t<_Tp>, sentinel_t<_Tp>>;
-
-template <class _Tp>
-inline constexpr bool __is_std_initializer_list = false;
-
-template <class _Ep>
-inline constexpr bool __is_std_initializer_list<initializer_list<_Ep>> = true;
-
-template <class _Tp>
-concept viewable_range =
- range<_Tp> &&
- ((view<remove_cvref_t<_Tp>> && constructible_from<remove_cvref_t<_Tp>, _Tp>) ||
- (!view<remove_cvref_t<_Tp>> &&
- (is_lvalue_reference_v<_Tp> ||
- (movable<remove_reference_t<_Tp>> && !__is_std_initializer_list<remove_cvref_t<_Tp>>))));
-
-# if _LIBCPP_STD_VER >= 23
-
-template <class... _Rs>
-using __concat_reference_t _LIBCPP_NODEBUG = common_reference_t<range_reference_t<_Rs>...>;
-
-template <class... _Rs>
-using __concat_value_t _LIBCPP_NODEBUG = common_type_t<range_value_t<_Rs>...>;
-
-template <class... _Rs>
-using __concat_rvalue_reference_t _LIBCPP_NODEBUG = common_reference_t<range_rvalue_reference_t<_Rs>...>;
-
-template <class _Ref, class _RRef, class _It>
-concept __concat_indirectly_readable_impl = requires(const _It __it) {
- { *__it } -> convertible_to<_Ref>;
- { ranges::iter_move(__it) } -> convertible_to<_RRef>;
-};
-
-template <class... _Rs>
-concept __concat_indirectly_readable =
- common_reference_with<__concat_reference_t<_Rs...>&&, __concat_value_t<_Rs...>&> &&
- common_reference_with<__concat_reference_t<_Rs...>&&, __concat_rvalue_reference_t<_Rs...>&&> &&
- common_reference_with<__concat_rvalue_reference_t<_Rs...>&&, const __concat_value_t<_Rs...>&> &&
- (__concat_indirectly_readable_impl<__concat_reference_t<_Rs...>,
- __concat_rvalue_reference_t<_Rs...>,
- iterator_t<_Rs>> &&
- ...);
-
-template <class... _Rs>
-concept __concatable = requires {
- typename __concat_reference_t<_Rs...>;
- typename __concat_value_t<_Rs...>;
- typename __concat_rvalue_reference_t<_Rs...>;
-} && __concat_indirectly_readable<_Rs...>;
-
-# endif // _LIBCPP_STD_VER >= 23
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_CONCEPTS_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/container_compatible_range.h b/third_party/libcxx/include/c++/v1/__ranges/container_compatible_range.h
deleted file mode 100644
index a58f111..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/container_compatible_range.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_CONTAINER_COMPATIBLE_RANGE_H
-#define _LIBCPP___RANGES_CONTAINER_COMPATIBLE_RANGE_H
-
-#include <__concepts/convertible_to.h>
-#include <__config>
-#include <__ranges/concepts.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-template <class _Range, class _Tp>
-concept _ContainerCompatibleRange =
- ranges::input_range<_Range> && convertible_to<ranges::range_reference_t<_Range>, _Tp>;
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_CONTAINER_COMPATIBLE_RANGE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/counted.h b/third_party/libcxx/include/c++/v1/__ranges/counted.h
deleted file mode 100644
index 65bf1a3..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/counted.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_COUNTED_H
-#define _LIBCPP___RANGES_COUNTED_H
-
-#include <__concepts/convertible_to.h>
-#include <__config>
-#include <__cstddef/size_t.h>
-#include <__iterator/concepts.h>
-#include <__iterator/counted_iterator.h>
-#include <__iterator/default_sentinel.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/pointer_traits.h>
-#include <__ranges/subrange.h>
-#include <__type_traits/decay.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-#include <span>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges::views {
-
-namespace __counted {
-
-struct __fn {
- template <contiguous_iterator _It>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto
- __go(_It __it,
- iter_difference_t<_It> __count) noexcept(noexcept(span(std::to_address(__it), static_cast<size_t>(__count))))
- // Deliberately omit return-type SFINAE, because to_address is not SFINAE-friendly
- {
- return span(std::to_address(__it), static_cast<size_t>(__count));
- }
-
- template <random_access_iterator _It>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_It __it, iter_difference_t<_It> __count) noexcept(
- noexcept(subrange(__it, __it + __count))) -> decltype(subrange(__it, __it + __count)) {
- return subrange(__it, __it + __count);
- }
-
- template <class _It>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_It __it, iter_difference_t<_It> __count) noexcept(
- noexcept(subrange(counted_iterator(std::move(__it), __count), default_sentinel)))
- -> decltype(subrange(counted_iterator(std::move(__it), __count), default_sentinel)) {
- return subrange(counted_iterator(std::move(__it), __count), default_sentinel);
- }
-
- template <class _It, convertible_to<iter_difference_t<_It>> _Diff>
- requires input_or_output_iterator<decay_t<_It>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_It&& __it, _Diff&& __count) const
- noexcept(noexcept(__go(std::forward<_It>(__it), std::forward<_Diff>(__count))))
- -> decltype(__go(std::forward<_It>(__it), std::forward<_Diff>(__count))) {
- return __go(std::forward<_It>(__it), std::forward<_Diff>(__count));
- }
-};
-
-} // namespace __counted
-
-inline namespace __cpo {
-inline constexpr auto counted = __counted::__fn{};
-} // namespace __cpo
-
-} // namespace ranges::views
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_COUNTED_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/dangling.h b/third_party/libcxx/include/c++/v1/__ranges/dangling.h
deleted file mode 100644
index 613084d..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/dangling.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_DANGLING_H
-#define _LIBCPP___RANGES_DANGLING_H
-
-#include <__config>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__type_traits/conditional.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-struct dangling {
- dangling() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr dangling(auto&&...) noexcept {}
-};
-
-template <range _Rp>
-using borrowed_iterator_t = _If<borrowed_range<_Rp>, iterator_t<_Rp>, dangling>;
-
-// borrowed_subrange_t defined in <__ranges/subrange.h>
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_DANGLING_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/data.h b/third_party/libcxx/include/c++/v1/__ranges/data.h
deleted file mode 100644
index cb3b826..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/data.h
+++ /dev/null
@@ -1,102 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_DATA_H
-#define _LIBCPP___RANGES_DATA_H
-
-#include <__concepts/class_or_enum.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/pointer_traits.h>
-#include <__ranges/access.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/is_pointer.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/remove_pointer.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/auto_cast.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-// [range.prim.data]
-
-namespace ranges {
-namespace __data {
-template <class _Tp>
-concept __ptr_to_object = is_pointer_v<_Tp> && is_object_v<remove_pointer_t<_Tp>>;
-
-template <class _Tp>
-concept __member_data = __can_borrow<_Tp> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(__t.data()) } -> __ptr_to_object;
-};
-
-template <class _Tp>
-concept __ranges_begin_invocable = !__member_data<_Tp> && __can_borrow<_Tp> && requires(_Tp&& __t) {
- { ranges::begin(__t) } -> contiguous_iterator;
-};
-
-struct __fn {
- template <__member_data _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(__t.data())) {
- return __t.data();
- }
-
- template <__ranges_begin_invocable _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(std::to_address(ranges::begin(__t)))) {
- return std::to_address(ranges::begin(__t));
- }
-};
-} // namespace __data
-
-inline namespace __cpo {
-inline constexpr auto data = __data::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.prim.cdata]
-
-namespace ranges {
-namespace __cdata {
-struct __fn {
- template <class _Tp>
- requires is_lvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::data(static_cast<const remove_reference_t<_Tp>&>(__t))))
- -> decltype(ranges::data(static_cast<const remove_reference_t<_Tp>&>(__t))) {
- return ranges::data(static_cast<const remove_reference_t<_Tp>&>(__t));
- }
-
- template <class _Tp>
- requires is_rvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(
- noexcept(ranges::data(static_cast<const _Tp&&>(__t)))) -> decltype(ranges::data(static_cast<const _Tp&&>(__t))) {
- return ranges::data(static_cast<const _Tp&&>(__t));
- }
-};
-} // namespace __cdata
-
-inline namespace __cpo {
-inline constexpr auto cdata = __cdata::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_DATA_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/drop_view.h b/third_party/libcxx/include/c++/v1/__ranges/drop_view.h
deleted file mode 100644
index feb3705..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/drop_view.h
+++ /dev/null
@@ -1,329 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_DROP_VIEW_H
-#define _LIBCPP___RANGES_DROP_VIEW_H
-
-#include <__algorithm/min.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__config>
-#include <__cstddef/size_t.h>
-#include <__functional/bind_back.h>
-#include <__fwd/span.h>
-#include <__fwd/string_view.h>
-#include <__iterator/concepts.h>
-#include <__iterator/distance.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/next.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/iota_view.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/repeat_view.h>
-#include <__ranges/size.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/auto_cast.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <view _View>
-class drop_view : public view_interface<drop_view<_View>> {
- // We cache begin() whenever ranges::next is not guaranteed O(1) to provide an
- // amortized O(1) begin() method. If this is an input_range, then we cannot cache
- // begin because begin is not equality preserving.
- // Note: drop_view<input-range>::begin() is still trivially amortized O(1) because
- // one can't call begin() on it more than once.
- static constexpr bool _UseCache = forward_range<_View> && !(random_access_range<_View> && sized_range<_View>);
- using _Cache _LIBCPP_NODEBUG = _If<_UseCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
- range_difference_t<_View> __count_ = 0;
- _View __base_ = _View();
-
-public:
- _LIBCPP_HIDE_FROM_ABI drop_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23
- drop_view(_View __base, range_difference_t<_View> __count)
- : __count_(__count), __base_(std::move(__base)) {
- _LIBCPP_ASSERT_UNCATEGORIZED(__count_ >= 0, "count must be greater than or equal to zero.");
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!(__simple_view<_View> && random_access_range<const _View> && sized_range<const _View>))
- {
- if constexpr (random_access_range<_View> && sized_range<_View>) {
- const auto __dist = std::min(ranges::distance(__base_), __count_);
- return ranges::begin(__base_) + __dist;
- }
- if constexpr (_UseCache)
- if (__cached_begin_.__has_value())
- return *__cached_begin_;
-
- auto __tmp = ranges::next(ranges::begin(__base_), __count_, ranges::end(__base_));
- if constexpr (_UseCache)
- __cached_begin_.__emplace(__tmp);
- return __tmp;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires random_access_range<const _View> && sized_range<const _View>
- {
- const auto __dist = std::min(ranges::distance(__base_), __count_);
- return ranges::begin(__base_) + __dist;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View>)
- {
- return ranges::end(__base_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View>
- {
- return ranges::end(__base_);
- }
-
- _LIBCPP_HIDE_FROM_ABI static constexpr auto __size(auto& __self) {
- const auto __s = ranges::size(__self.__base_);
- const auto __c = static_cast<decltype(__s)>(__self.__count_);
- return __s < __c ? 0 : __s - __c;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return __size(*this);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return __size(*this);
- }
-};
-
-template <class _Range>
-drop_view(_Range&&, range_difference_t<_Range>) -> drop_view<views::all_t<_Range>>;
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<drop_view<_Tp>> = enable_borrowed_range<_Tp>;
-
-namespace views {
-namespace __drop {
-
-template <class _Tp>
-inline constexpr bool __is_empty_view = false;
-
-template <class _Tp>
-inline constexpr bool __is_empty_view<empty_view<_Tp>> = true;
-
-template <class _Tp>
-inline constexpr bool __is_passthrough_specialization = false;
-
-template <class _Tp, size_t _Extent>
-inline constexpr bool __is_passthrough_specialization<span<_Tp, _Extent>> = true;
-
-template <class _CharT, class _Traits>
-inline constexpr bool __is_passthrough_specialization<basic_string_view<_CharT, _Traits>> = true;
-
-template <class _Np, class _Bound>
-inline constexpr bool __is_passthrough_specialization<iota_view<_Np, _Bound>> = true;
-
-template <class _Iter, class _Sent, subrange_kind _Kind>
-inline constexpr bool __is_passthrough_specialization<subrange<_Iter, _Sent, _Kind>> =
- !subrange<_Iter, _Sent, _Kind>::_StoreSize;
-
-template <class _Tp>
-inline constexpr bool __is_subrange_specialization_with_store_size = false;
-
-template <class _Iter, class _Sent, subrange_kind _Kind>
-inline constexpr bool __is_subrange_specialization_with_store_size<subrange<_Iter, _Sent, _Kind>> =
- subrange<_Iter, _Sent, _Kind>::_StoreSize;
-
-template <class _Tp>
-struct __passthrough_type;
-
-template <class _Tp, size_t _Extent>
-struct __passthrough_type<span<_Tp, _Extent>> {
- using type _LIBCPP_NODEBUG = span<_Tp>;
-};
-
-template <class _CharT, class _Traits>
-struct __passthrough_type<basic_string_view<_CharT, _Traits>> {
- using type _LIBCPP_NODEBUG = basic_string_view<_CharT, _Traits>;
-};
-
-template <class _Np, class _Bound>
-struct __passthrough_type<iota_view<_Np, _Bound>> {
- using type _LIBCPP_NODEBUG = iota_view<_Np, _Bound>;
-};
-
-template <class _Iter, class _Sent, subrange_kind _Kind>
-struct __passthrough_type<subrange<_Iter, _Sent, _Kind>> {
- using type _LIBCPP_NODEBUG = subrange<_Iter, _Sent, _Kind>;
-};
-
-template <class _Tp>
-using __passthrough_type_t _LIBCPP_NODEBUG = typename __passthrough_type<_Tp>::type;
-
-struct __fn {
- // [range.drop.overview]: the `empty_view` case.
- template <class _Range, convertible_to<range_difference_t<_Range>> _Np>
- requires __is_empty_view<remove_cvref_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&&) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(std::forward<_Range>(__range))))
- -> decltype(_LIBCPP_AUTO_CAST(std::forward<_Range>(__range))) {
- return _LIBCPP_AUTO_CAST(std::forward<_Range>(__range));
- }
-
- // [range.drop.overview]: the `span | basic_string_view | iota_view | subrange (StoreSize == false)` case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires(!__is_empty_view<_RawRange> && random_access_range<_RawRange> && sized_range<_RawRange> &&
- __is_passthrough_specialization<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __rng, _Np&& __n) const
- noexcept(noexcept(__passthrough_type_t<_RawRange>(
- ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)), ranges::end(__rng))))
- -> decltype(__passthrough_type_t<_RawRange>(
- // Note: deliberately not forwarding `__rng` to guard against double moves.
- ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)),
- ranges::end(__rng))) {
- return __passthrough_type_t<_RawRange>(
- ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)), ranges::end(__rng));
- }
-
- // [range.drop.overview]: the `subrange (StoreSize == true)` case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires(!__is_empty_view<_RawRange> && random_access_range<_RawRange> && sized_range<_RawRange> &&
- __is_subrange_specialization_with_store_size<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __rng, _Np&& __n) const noexcept(noexcept(
- _RawRange(ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)),
- ranges::end(__rng),
- std::__to_unsigned_like(ranges::distance(__rng) -
- std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n))))))
- -> decltype(_RawRange(
- // Note: deliberately not forwarding `__rng` to guard against double moves.
- ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)),
- ranges::end(__rng),
- std::__to_unsigned_like(ranges::distance(__rng) -
- std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n))))) {
- // Introducing local variables avoids calculating `min` and `distance` twice (at the cost of diverging from the
- // expression used in the `noexcept` clause and the return statement).
- auto __dist = ranges::distance(__rng);
- auto __clamped = std::min<_Dist>(__dist, std::forward<_Np>(__n));
- return _RawRange(ranges::begin(__rng) + __clamped, ranges::end(__rng), std::__to_unsigned_like(__dist - __clamped));
- }
- // clang-format off
-#if _LIBCPP_STD_VER >= 23
- // [range.drop.overview]: the `repeat_view` "_RawRange models sized_range" case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires (__is_repeat_specialization<_RawRange> && sized_range<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&& __n) const
- noexcept(noexcept(views::repeat(*__range.__value_, ranges::distance(__range) - std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n)))))
- -> decltype( views::repeat(*__range.__value_, ranges::distance(__range) - std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n))))
- { return views::repeat(*__range.__value_, ranges::distance(__range) - std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n))); }
-
- // [range.drop.overview]: the `repeat_view` "otherwise" case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires (__is_repeat_specialization<_RawRange> && !sized_range<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
- constexpr auto operator()(_Range&& __range, _Np&&) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(std::forward<_Range>(__range))))
- -> decltype( _LIBCPP_AUTO_CAST(std::forward<_Range>(__range)))
- { return _LIBCPP_AUTO_CAST(std::forward<_Range>(__range)); }
-#endif
- // clang-format on
-
- // [range.drop.overview]: the "otherwise" case.
- template <class _Range, convertible_to<range_difference_t<_Range>> _Np, class _RawRange = remove_cvref_t<_Range>>
- // Note: without specifically excluding the other cases, GCC sees this overload as ambiguous with the other
- // overloads.
- requires(!(__is_empty_view<_RawRange> ||
-# if _LIBCPP_STD_VER >= 23
- __is_repeat_specialization<_RawRange> ||
-# endif
- (__is_subrange_specialization_with_store_size<_RawRange> && sized_range<_RawRange> &&
- random_access_range<_RawRange>) ||
- (__is_passthrough_specialization<_RawRange> && sized_range<_RawRange> &&
- random_access_range<_RawRange>)))
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&& __n) const
- noexcept(noexcept(drop_view(std::forward<_Range>(__range), std::forward<_Np>(__n))))
- -> decltype(drop_view(std::forward<_Range>(__range), std::forward<_Np>(__n))) {
- return drop_view(std::forward<_Range>(__range), std::forward<_Np>(__n));
- }
-
- template <class _Np>
- requires constructible_from<decay_t<_Np>, _Np>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Np&& __n) const
- noexcept(is_nothrow_constructible_v<decay_t<_Np>, _Np>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Np>(__n)));
- }
-};
-
-} // namespace __drop
-
-inline namespace __cpo {
-inline constexpr auto drop = __drop::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_DROP_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/drop_while_view.h b/third_party/libcxx/include/c++/v1/__ranges/drop_while_view.h
deleted file mode 100644
index 1fe4e17..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/drop_while_view.h
+++ /dev/null
@@ -1,136 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_DROP_WHILE_VIEW_H
-#define _LIBCPP___RANGES_DROP_WHILE_VIEW_H
-
-#include <__algorithm/ranges_find_if_not.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/reference_wrapper.h>
-#include <__iterator/concepts.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <view _View, class _Pred>
- requires input_range<_View> && is_object_v<_Pred> && indirect_unary_predicate<const _Pred, iterator_t<_View>>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS drop_while_view : public view_interface<drop_while_view<_View, _Pred>> {
-public:
- _LIBCPP_HIDE_FROM_ABI drop_while_view()
- requires default_initializable<_View> && default_initializable<_Pred>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 drop_while_view(_View __base, _Pred __pred)
- : __base_(std::move(__base)), __pred_(std::in_place, std::move(__pred)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Pred& pred() const { return *__pred_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- // Note: this duplicates a check in `optional` but provides a better error message.
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __pred_.__has_value(),
- "drop_while_view needs to have a non-empty predicate before calling begin() -- did a previous "
- "assignment to this drop_while_view fail?");
- if constexpr (_UseCache) {
- if (!__cached_begin_.__has_value()) {
- __cached_begin_.__emplace(ranges::find_if_not(__base_, std::cref(*__pred_)));
- }
- return *__cached_begin_;
- } else {
- return ranges::find_if_not(__base_, std::cref(*__pred_));
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() { return ranges::end(__base_); }
-
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
-
- static constexpr bool _UseCache = forward_range<_View>;
- using _Cache _LIBCPP_NODEBUG = _If<_UseCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
-};
-
-template <class _View, class _Pred>
-inline constexpr bool enable_borrowed_range<drop_while_view<_View, _Pred>> = enable_borrowed_range<_View>;
-
-template <class _Range, class _Pred>
-drop_while_view(_Range&&, _Pred) -> drop_while_view<views::all_t<_Range>, _Pred>;
-
-namespace views {
-namespace __drop_while {
-
-struct __fn {
- template <class _Range, class _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pred&& __pred) const
- noexcept(noexcept(/**/ drop_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))))
- -> decltype(/*--*/ drop_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))) {
- return /*-------------*/ drop_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred));
- }
-
- template <class _Pred>
- requires constructible_from<decay_t<_Pred>, _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pred&& __pred) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pred>, _Pred>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pred>(__pred)));
- }
-};
-
-} // namespace __drop_while
-
-inline namespace __cpo {
-inline constexpr auto drop_while = __drop_while::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_DROP_WHILE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/elements_of.h b/third_party/libcxx/include/c++/v1/__ranges/elements_of.h
deleted file mode 100644
index 3f89f49..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/elements_of.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ELEMENTS_OF_H
-#define _LIBCPP___RANGES_ELEMENTS_OF_H
-
-#include <__config>
-#include <__cstddef/byte.h>
-#include <__memory/allocator.h>
-#include <__ranges/concepts.h>
-#include <__utility/forward.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <range _Range, class _Allocator = allocator<byte>>
-struct elements_of {
- _LIBCPP_NO_UNIQUE_ADDRESS _Range range;
- _LIBCPP_NO_UNIQUE_ADDRESS _Allocator allocator = _Allocator();
-};
-
-template <class _Range, class _Allocator = allocator<byte>>
-elements_of(_Range&&, _Allocator = _Allocator()) -> elements_of<_Range&&, _Allocator>;
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ELEMENTS_OF_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/elements_view.h b/third_party/libcxx/include/c++/v1/__ranges/elements_view.h
deleted file mode 100644
index b1419f2..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/elements_view.h
+++ /dev/null
@@ -1,418 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ELEMENTS_VIEW_H
-#define _LIBCPP___RANGES_ELEMENTS_VIEW_H
-
-#include <__compare/three_way_comparable.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__config>
-#include <__fwd/get.h>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__tuple/tuple_element.h>
-#include <__tuple/tuple_like.h>
-#include <__tuple/tuple_size.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/maybe_const.h>
-#include <__type_traits/remove_cv.h>
-#include <__type_traits/remove_cvref.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-#include <tuple> // std::get
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <class _Tp, size_t _Np>
-concept __has_tuple_element = __tuple_like<_Tp> && _Np < tuple_size<_Tp>::value;
-
-template <class _Tp, size_t _Np>
-concept __returnable_element = is_reference_v<_Tp> || move_constructible<tuple_element_t<_Np, _Tp>>;
-
-template <input_range _View, size_t _Np>
- requires view<_View> && __has_tuple_element<range_value_t<_View>, _Np> &&
- __has_tuple_element<remove_reference_t<range_reference_t<_View>>, _Np> &&
- __returnable_element<range_reference_t<_View>, _Np>
-class elements_view : public view_interface<elements_view<_View, _Np>> {
-private:
- template <bool>
- class __iterator;
-
- template <bool>
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI elements_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit elements_view(_View __base) : __base_(std::move(__base)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!__simple_view<_View>)
- {
- return __iterator</*_Const=*/false>(ranges::begin(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View>
- {
- return __iterator</*_Const=*/true>(ranges::begin(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View> && !common_range<_View>)
- {
- return __sentinel</*_Const=*/false>{ranges::end(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View> && common_range<_View>)
- {
- return __iterator</*_Const=*/false>{ranges::end(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View>
- {
- return __sentinel</*_Const=*/true>{ranges::end(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires common_range<const _View>
- {
- return __iterator</*_Const=*/true>{ranges::end(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return ranges::size(__base_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return ranges::size(__base_);
- }
-
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-};
-
-template <class, size_t>
-struct __elements_view_iterator_category_base {};
-
-template <forward_range _Base, size_t _Np>
-struct __elements_view_iterator_category_base<_Base, _Np> {
- static consteval auto __get_iterator_category() {
- using _Result = decltype(std::get<_Np>(*std::declval<iterator_t<_Base>>()));
- using _Cat = typename iterator_traits<iterator_t<_Base>>::iterator_category;
-
- if constexpr (!is_lvalue_reference_v<_Result>) {
- return input_iterator_tag{};
- } else if constexpr (derived_from<_Cat, random_access_iterator_tag>) {
- return random_access_iterator_tag{};
- } else {
- return _Cat{};
- }
- }
-
- using iterator_category = decltype(__get_iterator_category());
-};
-
-template <input_range _View, size_t _Np>
- requires view<_View> && __has_tuple_element<range_value_t<_View>, _Np> &&
- __has_tuple_element<remove_reference_t<range_reference_t<_View>>, _Np> &&
- __returnable_element<range_reference_t<_View>, _Np>
-template <bool _Const>
-class elements_view<_View, _Np>::__iterator
- : public __elements_view_iterator_category_base<__maybe_const<_Const, _View>, _Np> {
- template <bool>
- friend class __iterator;
-
- template <bool>
- friend class __sentinel;
-
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- iterator_t<_Base> __current_ = iterator_t<_Base>();
-
- _LIBCPP_HIDE_FROM_ABI static constexpr decltype(auto) __get_element(const iterator_t<_Base>& __i) {
- if constexpr (is_reference_v<range_reference_t<_Base>>) {
- return std::get<_Np>(*__i);
- } else {
- using _Element = remove_cv_t<tuple_element_t<_Np, range_reference_t<_Base>>>;
- return static_cast<_Element>(std::get<_Np>(*__i));
- }
- }
-
- static consteval auto __get_iterator_concept() {
- if constexpr (random_access_range<_Base>) {
- return random_access_iterator_tag{};
- } else if constexpr (bidirectional_range<_Base>) {
- return bidirectional_iterator_tag{};
- } else if constexpr (forward_range<_Base>) {
- return forward_iterator_tag{};
- } else {
- return input_iterator_tag{};
- }
- }
-
-public:
- using iterator_concept = decltype(__iterator::__get_iterator_concept());
- using value_type = remove_cvref_t<tuple_element_t<_Np, range_value_t<_Base>>>;
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator()
- requires default_initializable<iterator_t<_Base>>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(iterator_t<_Base> __current) : __current_(std::move(__current)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, iterator_t<_Base>>
- : __current_(std::move(__i.__current_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr const iterator_t<_Base>& base() const& noexcept { return __current_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Base> base() && { return std::move(__current_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const { return __get_element(__current_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++__current_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires forward_range<_Base>
- {
- auto __temp = *this;
- ++__current_;
- return __temp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_Base>
- {
- --__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_Base>
- {
- auto __temp = *this;
- --__current_;
- return __temp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __n)
- requires random_access_range<_Base>
- {
- __current_ += __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __n)
- requires random_access_range<_Base>
- {
- __current_ -= __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](difference_type __n) const
- requires random_access_range<_Base>
- {
- return __get_element(__current_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires equality_comparable<iterator_t<_Base>>
- {
- return __x.__current_ == __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_ < __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __y < __x;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return !(__y < __x);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return !(__x < __y);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>
- {
- return __x.__current_ <=> __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(const __iterator& __x, difference_type __y)
- requires random_access_range<_Base>
- {
- return __iterator{__x} += __y;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __y + __x;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(const __iterator& __x, difference_type __y)
- requires random_access_range<_Base>
- {
- return __iterator{__x} -= __y;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>
- {
- return __x.__current_ - __y.__current_;
- }
-};
-
-template <input_range _View, size_t _Np>
- requires view<_View> && __has_tuple_element<range_value_t<_View>, _Np> &&
- __has_tuple_element<remove_reference_t<range_reference_t<_View>>, _Np> &&
- __returnable_element<range_reference_t<_View>, _Np>
-template <bool _Const>
-class elements_view<_View, _Np>::__sentinel {
-private:
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- _LIBCPP_NO_UNIQUE_ADDRESS sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
- template <bool>
- friend class __sentinel;
-
- template <bool _AnyConst>
- _LIBCPP_HIDE_FROM_ABI static constexpr decltype(auto) __get_current(const __iterator<_AnyConst>& __iter) {
- return (__iter.__current_);
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(sentinel_t<_Base> __end) : __end_(std::move(__end)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __other)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__other.__end_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Base> base() const { return __end_; }
-
- template <bool _OtherConst>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __get_current(__x) == __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __get_current(__x) - __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __sentinel& __x, const __iterator<_OtherConst>& __y) {
- return __x.__end_ - __get_current(__y);
- }
-};
-
-template <class _Tp, size_t _Np>
-inline constexpr bool enable_borrowed_range<elements_view<_Tp, _Np>> = enable_borrowed_range<_Tp>;
-
-template <class _Tp>
-using keys_view = elements_view<_Tp, 0>;
-template <class _Tp>
-using values_view = elements_view<_Tp, 1>;
-
-namespace views {
-namespace __elements {
-
-template <size_t _Np>
-struct __fn : __range_adaptor_closure<__fn<_Np>> {
- template <class _Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- /**/ noexcept(noexcept(elements_view<all_t<_Range&&>, _Np>(std::forward<_Range>(__range))))
- /*------*/ -> decltype(elements_view<all_t<_Range&&>, _Np>(std::forward<_Range>(__range))) {
- /*-------------*/ return elements_view<all_t<_Range&&>, _Np>(std::forward<_Range>(__range));
- }
-};
-} // namespace __elements
-
-inline namespace __cpo {
-template <size_t _Np>
-inline constexpr auto elements = __elements::__fn<_Np>{};
-inline constexpr auto keys = elements<0>;
-inline constexpr auto values = elements<1>;
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ELEMENTS_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/empty.h b/third_party/libcxx/include/c++/v1/__ranges/empty.h
deleted file mode 100644
index 5c10040..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/empty.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_EMPTY_H
-#define _LIBCPP___RANGES_EMPTY_H
-
-#include <__concepts/class_or_enum.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__ranges/access.h>
-#include <__ranges/size.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-// [range.prim.empty]
-
-namespace ranges {
-namespace __empty {
-template <class _Tp>
-concept __member_empty = requires(_Tp&& __t) { bool(__t.empty()); };
-
-template <class _Tp>
-concept __can_invoke_size = !__member_empty<_Tp> && requires(_Tp&& __t) { ranges::size(__t); };
-
-template <class _Tp>
-concept __can_compare_begin_end = !__member_empty<_Tp> && !__can_invoke_size<_Tp> && requires(_Tp&& __t) {
- bool(ranges::begin(__t) == ranges::end(__t));
- { ranges::begin(__t) } -> forward_iterator;
-};
-
-struct __fn {
- template <__member_empty _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const noexcept(noexcept(bool(__t.empty()))) {
- return bool(__t.empty());
- }
-
- template <__can_invoke_size _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const noexcept(noexcept(ranges::size(__t))) {
- return ranges::size(__t) == 0;
- }
-
- template <__can_compare_begin_end _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(_Tp&& __t) const
- noexcept(noexcept(bool(ranges::begin(__t) == ranges::end(__t)))) {
- return ranges::begin(__t) == ranges::end(__t);
- }
-};
-} // namespace __empty
-
-inline namespace __cpo {
-inline constexpr auto empty = __empty::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_EMPTY_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/empty_view.h b/third_party/libcxx/include/c++/v1/__ranges/empty_view.h
deleted file mode 100644
index 54d62b3..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/empty_view.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_EMPTY_VIEW_H
-#define _LIBCPP___RANGES_EMPTY_VIEW_H
-
-#include <__config>
-#include <__cstddef/size_t.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/is_object.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class _Tp>
- requires is_object_v<_Tp>
-class empty_view : public view_interface<empty_view<_Tp>> {
-public:
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* begin() noexcept { return nullptr; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* end() noexcept { return nullptr; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr _Tp* data() noexcept { return nullptr; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr size_t size() noexcept { return 0; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr bool empty() noexcept { return true; }
-};
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<empty_view<_Tp>> = true;
-
-namespace views {
-
-template <class _Tp>
-inline constexpr empty_view<_Tp> empty{};
-
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_EMPTY_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/enable_borrowed_range.h b/third_party/libcxx/include/c++/v1/__ranges/enable_borrowed_range.h
deleted file mode 100644
index 1d06833..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/enable_borrowed_range.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ENABLE_BORROWED_RANGE_H
-#define _LIBCPP___RANGES_ENABLE_BORROWED_RANGE_H
-
-// These customization variables are used in <span> and <string_view>. The
-// separate header is used to avoid including the entire <ranges> header in
-// <span> and <string_view>.
-
-#include <__config>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-// [range.range], ranges
-
-template <class>
-inline constexpr bool enable_borrowed_range = false;
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_ENABLE_BORROWED_RANGE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/enable_view.h b/third_party/libcxx/include/c++/v1/__ranges/enable_view.h
deleted file mode 100644
index 6dee6ea..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/enable_view.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ENABLE_VIEW_H
-#define _LIBCPP___RANGES_ENABLE_VIEW_H
-
-#include <__concepts/derived_from.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__type_traits/is_class.h>
-#include <__type_traits/remove_cv.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-struct view_base {};
-
-template <class _Derived>
- requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>
-class view_interface;
-
-template <class _Op, class _Yp>
- requires(!same_as<_Op, view_interface<_Yp>>)
-void __is_derived_from_view_interface(view_interface<_Yp>*);
-
-template <class _Tp>
-inline constexpr bool enable_view = derived_from<_Tp, view_base> || requires {
- ranges::__is_derived_from_view_interface<remove_cv_t<_Tp>>((remove_cv_t<_Tp>*)nullptr);
-};
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_ENABLE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/filter_view.h b/third_party/libcxx/include/c++/v1/__ranges/filter_view.h
deleted file mode 100644
index 3ad69ea..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/filter_view.h
+++ /dev/null
@@ -1,260 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_FILTER_VIEW_H
-#define _LIBCPP___RANGES_FILTER_VIEW_H
-
-#include <__algorithm/ranges_find_if.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/copyable.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/invoke.h>
-#include <__functional/reference_wrapper.h>
-#include <__iterator/concepts.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <input_range _View, indirect_unary_predicate<iterator_t<_View>> _Pred>
- requires view<_View> && is_object_v<_Pred>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS filter_view : public view_interface<filter_view<_View, _Pred>> {
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
-
- // We cache the result of begin() to allow providing an amortized O(1) begin() whenever
- // the underlying range is at least a forward_range.
- static constexpr bool _UseCache = forward_range<_View>;
- using _Cache _LIBCPP_NODEBUG = _If<_UseCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
-
- class __iterator;
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI filter_view()
- requires default_initializable<_View> && default_initializable<_Pred>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 filter_view(_View __base, _Pred __pred)
- : __base_(std::move(__base)), __pred_(in_place, std::move(__pred)) {}
-
- template <class _Vp = _View>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_Vp>
- {
- return __base_;
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Pred const& pred() const { return *__pred_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator begin() {
- // Note: this duplicates a check in `optional` but provides a better error message.
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __pred_.__has_value(), "Trying to call begin() on a filter_view that does not have a valid predicate.");
- if constexpr (_UseCache) {
- if (!__cached_begin_.__has_value()) {
- __cached_begin_.__emplace(ranges::find_if(__base_, std::ref(*__pred_)));
- }
- return {*this, *__cached_begin_};
- } else {
- return {*this, ranges::find_if(__base_, std::ref(*__pred_))};
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (common_range<_View>)
- return __iterator{*this, ranges::end(__base_)};
- else
- return __sentinel{*this};
- }
-};
-
-template <class _Range, class _Pred>
-filter_view(_Range&&, _Pred) -> filter_view<views::all_t<_Range>, _Pred>;
-
-template <class _View>
-struct __filter_iterator_category {};
-
-template <forward_range _View>
-struct __filter_iterator_category<_View> {
- using _Cat _LIBCPP_NODEBUG = typename iterator_traits<iterator_t<_View>>::iterator_category;
- using iterator_category =
- _If<derived_from<_Cat, bidirectional_iterator_tag>,
- bidirectional_iterator_tag,
- _If<derived_from<_Cat, forward_iterator_tag>,
- forward_iterator_tag,
- /* else */ _Cat >>;
-};
-
-template <input_range _View, indirect_unary_predicate<iterator_t<_View>> _Pred>
- requires view<_View> && is_object_v<_Pred>
-class filter_view<_View, _Pred>::__iterator : public __filter_iterator_category<_View> {
-public:
- _LIBCPP_NO_UNIQUE_ADDRESS iterator_t<_View> __current_ = iterator_t<_View>();
- _LIBCPP_NO_UNIQUE_ADDRESS filter_view* __parent_ = nullptr;
-
- using iterator_concept =
- _If<bidirectional_range<_View>,
- bidirectional_iterator_tag,
- _If<forward_range<_View>,
- forward_iterator_tag,
- /* else */ input_iterator_tag >>;
- // using iterator_category = inherited;
- using value_type = range_value_t<_View>;
- using difference_type = range_difference_t<_View>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator()
- requires default_initializable<iterator_t<_View>>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(filter_view& __parent, iterator_t<_View> __current)
- : __current_(std::move(__current)), __parent_(std::addressof(__parent)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> const& base() const& noexcept { return __current_; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> base() && { return std::move(__current_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_reference_t<_View> operator*() const { return *__current_; }
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> operator->() const
- requires __has_arrow<iterator_t<_View>> && copyable<iterator_t<_View>>
- {
- return __current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- __current_ =
- ranges::find_if(std::move(++__current_), ranges::end(__parent_->__base_), std::ref(*__parent_->__pred_));
- return *this;
- }
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires forward_range<_View>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_View>
- {
- do {
- --__current_;
- } while (!std::invoke(*__parent_->__pred_, *__current_));
- return *this;
- }
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_View>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(__iterator const& __x, __iterator const& __y)
- requires equality_comparable<iterator_t<_View>>
- {
- return __x.__current_ == __y.__current_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr range_rvalue_reference_t<_View>
- iter_move(__iterator const& __it) noexcept(noexcept(ranges::iter_move(__it.__current_))) {
- return ranges::iter_move(__it.__current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void
- iter_swap(__iterator const& __x,
- __iterator const& __y) noexcept(noexcept(ranges::iter_swap(__x.__current_, __y.__current_)))
- requires indirectly_swappable<iterator_t<_View>>
- {
- return ranges::iter_swap(__x.__current_, __y.__current_);
- }
-};
-
-template <input_range _View, indirect_unary_predicate<iterator_t<_View>> _Pred>
- requires view<_View> && is_object_v<_Pred>
-class filter_view<_View, _Pred>::__sentinel {
-public:
- sentinel_t<_View> __end_ = sentinel_t<_View>();
-
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(filter_view& __parent) : __end_(ranges::end(__parent.__base_)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_View> base() const { return __end_; }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(__iterator const& __x, __sentinel const& __y) {
- return __x.__current_ == __y.__end_;
- }
-};
-
-namespace views {
-namespace __filter {
-struct __fn {
- template <class _Range, class _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pred&& __pred) const
- noexcept(noexcept(filter_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))))
- -> decltype(filter_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))) {
- return filter_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred));
- }
-
- template <class _Pred>
- requires constructible_from<decay_t<_Pred>, _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pred&& __pred) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pred>, _Pred>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pred>(__pred)));
- }
-};
-} // namespace __filter
-
-inline namespace __cpo {
-inline constexpr auto filter = __filter::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_FILTER_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/from_range.h b/third_party/libcxx/include/c++/v1/__ranges/from_range.h
deleted file mode 100644
index a6cb9e3..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/from_range.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_FROM_RANGE_H
-#define _LIBCPP___RANGES_FROM_RANGE_H
-
-#include <__config>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-struct from_range_t {
- explicit from_range_t() = default;
-};
-
-inline constexpr from_range_t from_range{};
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_FROM_RANGE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/iota_view.h b/third_party/libcxx/include/c++/v1/__ranges/iota_view.h
deleted file mode 100644
index 29f9654..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/iota_view.h
+++ /dev/null
@@ -1,423 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_IOTA_VIEW_H
-#define _LIBCPP___RANGES_IOTA_VIEW_H
-
-#include <__assert>
-#include <__compare/three_way_comparable.h>
-#include <__concepts/arithmetic.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/copyable.h>
-#include <__concepts/equality_comparable.h>
-#include <__concepts/invocable.h>
-#include <__concepts/same_as.h>
-#include <__concepts/semiregular.h>
-#include <__concepts/totally_ordered.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/unreachable_sentinel.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/type_identity.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class _Int>
-struct __get_wider_signed {
- consteval static auto __call() {
- if constexpr (sizeof(_Int) < sizeof(short))
- return type_identity<short>{};
- else if constexpr (sizeof(_Int) < sizeof(int))
- return type_identity<int>{};
- else if constexpr (sizeof(_Int) < sizeof(long))
- return type_identity<long>{};
- else if constexpr (sizeof(_Int) < sizeof(long long))
- return type_identity<long long>{};
-# if _LIBCPP_HAS_INT128
- else if constexpr (sizeof(_Int) <= sizeof(__int128))
- return type_identity<__int128>{};
-# else
- else if constexpr (sizeof(_Int) <= sizeof(long long))
- return type_identity<long long>{};
-# endif
- else
- static_assert(false, "Found integer-like type that is bigger than the largest integer like type.");
- }
-
- using type = typename decltype(__call())::type;
-};
-
-template <class _Start>
-using _IotaDiffT _LIBCPP_NODEBUG =
- typename _If< (!integral<_Start> || sizeof(iter_difference_t<_Start>) > sizeof(_Start)),
- type_identity<iter_difference_t<_Start>>,
- __get_wider_signed<_Start> >::type;
-
-template <class _Iter>
-concept __decrementable = incrementable<_Iter> && requires(_Iter __i) {
- { --__i } -> same_as<_Iter&>;
- { __i-- } -> same_as<_Iter>;
-};
-
-template <class _Iter>
-concept __advanceable =
- __decrementable<_Iter> && totally_ordered<_Iter> &&
- requires(_Iter __i, const _Iter __j, const _IotaDiffT<_Iter> __n) {
- { __i += __n } -> same_as<_Iter&>;
- { __i -= __n } -> same_as<_Iter&>;
- _Iter(__j + __n);
- _Iter(__n + __j);
- _Iter(__j - __n);
- { __j - __j } -> convertible_to<_IotaDiffT<_Iter>>;
- };
-
-template <class>
-struct __iota_iterator_category {};
-
-template <incrementable _Tp>
-struct __iota_iterator_category<_Tp> {
- using iterator_category = input_iterator_tag;
-};
-
-template <weakly_incrementable _Start, semiregular _BoundSentinel = unreachable_sentinel_t>
- requires __weakly_equality_comparable_with<_Start, _BoundSentinel> && copyable<_Start>
-class iota_view : public view_interface<iota_view<_Start, _BoundSentinel>> {
- struct __iterator : public __iota_iterator_category<_Start> {
- friend class iota_view;
-
- using iterator_concept =
- _If<__advanceable<_Start>,
- random_access_iterator_tag,
- _If<__decrementable<_Start>,
- bidirectional_iterator_tag,
- _If<incrementable<_Start>,
- forward_iterator_tag,
- /*Else*/ input_iterator_tag>>>;
-
- using value_type = _Start;
- using difference_type = _IotaDiffT<_Start>;
-
- _Start __value_ = _Start();
-
- _LIBCPP_HIDE_FROM_ABI __iterator()
- requires default_initializable<_Start>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(_Start __value) : __value_(std::move(__value)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Start operator*() const
- noexcept(is_nothrow_copy_constructible_v<_Start>) {
- return __value_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__value_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires incrementable<_Start>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires __decrementable<_Start>
- {
- --__value_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires __decrementable<_Start>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __n)
- requires __advanceable<_Start>
- {
- if constexpr (__integer_like<_Start> && !__signed_integer_like<_Start>) {
- if (__n >= difference_type(0)) {
- __value_ += static_cast<_Start>(__n);
- } else {
- __value_ -= static_cast<_Start>(-__n);
- }
- } else {
- __value_ += __n;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __n)
- requires __advanceable<_Start>
- {
- if constexpr (__integer_like<_Start> && !__signed_integer_like<_Start>) {
- if (__n >= difference_type(0)) {
- __value_ -= static_cast<_Start>(__n);
- } else {
- __value_ += static_cast<_Start>(-__n);
- }
- } else {
- __value_ -= __n;
- }
- return *this;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Start operator[](difference_type __n) const
- requires __advanceable<_Start>
- {
- return _Start(__value_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires equality_comparable<_Start>
- {
- return __x.__value_ == __y.__value_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
- requires totally_ordered<_Start>
- {
- return __x.__value_ < __y.__value_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
- requires totally_ordered<_Start>
- {
- return __y < __x;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
- requires totally_ordered<_Start>
- {
- return !(__y < __x);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
- requires totally_ordered<_Start>
- {
- return !(__x < __y);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires totally_ordered<_Start> && three_way_comparable<_Start>
- {
- return __x.__value_ <=> __y.__value_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(__iterator __i, difference_type __n)
- requires __advanceable<_Start>
- {
- __i += __n;
- return __i;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, __iterator __i)
- requires __advanceable<_Start>
- {
- return __i + __n;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(__iterator __i, difference_type __n)
- requires __advanceable<_Start>
- {
- __i -= __n;
- return __i;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type
- operator-(const __iterator& __x, const __iterator& __y)
- requires __advanceable<_Start>
- {
- if constexpr (__integer_like<_Start>) {
- if constexpr (__signed_integer_like<_Start>) {
- return difference_type(difference_type(__x.__value_) - difference_type(__y.__value_));
- }
- if (__y.__value_ > __x.__value_) {
- return difference_type(-difference_type(__y.__value_ - __x.__value_));
- }
- return difference_type(__x.__value_ - __y.__value_);
- }
- return __x.__value_ - __y.__value_;
- }
- };
-
- struct __sentinel {
- friend class iota_view;
-
- private:
- _BoundSentinel __bound_sentinel_ = _BoundSentinel();
-
- public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(_BoundSentinel __bound_sentinel)
- : __bound_sentinel_(std::move(__bound_sentinel)) {}
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __sentinel& __y) {
- return __x.__value_ == __y.__bound_sentinel_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Start>
- operator-(const __iterator& __x, const __sentinel& __y)
- requires sized_sentinel_for<_BoundSentinel, _Start>
- {
- return __x.__value_ - __y.__bound_sentinel_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr iter_difference_t<_Start>
- operator-(const __sentinel& __x, const __iterator& __y)
- requires sized_sentinel_for<_BoundSentinel, _Start>
- {
- return -(__y - __x);
- }
- };
-
- _Start __value_ = _Start();
- _BoundSentinel __bound_sentinel_ = _BoundSentinel();
-
-public:
- _LIBCPP_HIDE_FROM_ABI iota_view()
- requires default_initializable<_Start>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit iota_view(_Start __value) : __value_(std::move(__value)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23
- iota_view(type_identity_t<_Start> __value, type_identity_t<_BoundSentinel> __bound_sentinel)
- : __value_(std::move(__value)), __bound_sentinel_(std::move(__bound_sentinel)) {
- // Validate the precondition if possible.
- if constexpr (totally_ordered_with<_Start, _BoundSentinel>) {
- _LIBCPP_ASSERT_VALID_INPUT_RANGE(
- bool(__value_ <= __bound_sentinel_), "iota_view: bound must be reachable from value");
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 iota_view(__iterator __first, __iterator __last)
- requires same_as<_Start, _BoundSentinel>
- : iota_view(std::move(__first.__value_), std::move(__last.__value_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 iota_view(__iterator __first, _BoundSentinel __last)
- requires same_as<_BoundSentinel, unreachable_sentinel_t>
- : iota_view(std::move(__first.__value_), std::move(__last)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 iota_view(__iterator __first, __sentinel __last)
- requires(!same_as<_Start, _BoundSentinel> && !same_as<_BoundSentinel, unreachable_sentinel_t>)
- : iota_view(std::move(__first.__value_), std::move(__last.__bound_sentinel_)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator begin() const { return __iterator{__value_}; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const {
- if constexpr (same_as<_BoundSentinel, unreachable_sentinel_t>)
- return unreachable_sentinel;
- else
- return __sentinel{__bound_sentinel_};
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator end() const
- requires same_as<_Start, _BoundSentinel>
- {
- return __iterator{__bound_sentinel_};
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const { return __value_ == __bound_sentinel_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires(same_as<_Start, _BoundSentinel> && __advanceable<_Start>) ||
- (__integer_like<_Start> && __integer_like<_BoundSentinel>) || sized_sentinel_for<_BoundSentinel, _Start>
- {
- if constexpr (__integer_like<_Start> && __integer_like<_BoundSentinel>) {
- return (__value_ < 0)
- ? ((__bound_sentinel_ < 0)
- ? std::__to_unsigned_like(-__value_) - std::__to_unsigned_like(-__bound_sentinel_)
- : std::__to_unsigned_like(__bound_sentinel_) + std::__to_unsigned_like(-__value_))
- : std::__to_unsigned_like(__bound_sentinel_) - std::__to_unsigned_like(__value_);
- } else {
- return std::__to_unsigned_like(__bound_sentinel_ - __value_);
- }
- }
-};
-
-template <class _Start, class _BoundSentinel>
- requires(!__integer_like<_Start> || !__integer_like<_BoundSentinel> ||
- (__signed_integer_like<_Start> == __signed_integer_like<_BoundSentinel>))
-iota_view(_Start, _BoundSentinel) -> iota_view<_Start, _BoundSentinel>;
-
-template <class _Start, class _BoundSentinel>
-inline constexpr bool enable_borrowed_range<iota_view<_Start, _BoundSentinel>> = true;
-
-namespace views {
-namespace __iota {
-struct __fn {
- template <class _Start>
- requires(requires(_Start __s) { ranges::iota_view<decay_t<_Start>>(std::forward<_Start>(__s)); })
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Start&& __start) const
- noexcept(noexcept(ranges::iota_view<decay_t<_Start>>(std::forward<_Start>(__start)))) {
- return ranges::iota_view<decay_t<_Start>>(std::forward<_Start>(__start));
- }
-
- template <class _Start, class _BoundSentinel>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto
- operator()(_Start&& __start, _BoundSentinel&& __bound_sentinel) const noexcept(
- noexcept(ranges::iota_view(std::forward<_Start>(__start), std::forward<_BoundSentinel>(__bound_sentinel))))
- -> decltype(ranges::iota_view(std::forward<_Start>(__start), std::forward<_BoundSentinel>(__bound_sentinel))) {
- return ranges::iota_view(std::forward<_Start>(__start), std::forward<_BoundSentinel>(__bound_sentinel));
- }
-};
-} // namespace __iota
-
-inline namespace __cpo {
-inline constexpr auto iota = __iota::__fn{};
-} // namespace __cpo
-
-# if _LIBCPP_STD_VER >= 26
-
-inline constexpr auto indices = [] [[nodiscard]] (__integer_like auto __size) static {
- return ranges::views::iota(decltype(__size){}, __size);
-};
-
-# endif
-
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_IOTA_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/istream_view.h b/third_party/libcxx/include/c++/v1/__ranges/istream_view.h
deleted file mode 100644
index ab05cb6..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/istream_view.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ISTREAM_VIEW_H
-#define _LIBCPP___RANGES_ISTREAM_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/movable.h>
-#include <__config>
-#include <__cstddef/ptrdiff_t.h>
-#include <__fwd/istream.h>
-#include <__fwd/string.h>
-#include <__iterator/default_sentinel.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/forward.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-#if _LIBCPP_STD_VER >= 20
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-namespace ranges {
-
-template <class _Val, class _CharT, class _Traits>
-concept __stream_extractable = requires(basic_istream<_CharT, _Traits>& __is, _Val& __t) { __is >> __t; };
-
-template <movable _Val, class _CharT, class _Traits = char_traits<_CharT>>
- requires default_initializable<_Val> && __stream_extractable<_Val, _CharT, _Traits>
-class basic_istream_view : public view_interface<basic_istream_view<_Val, _CharT, _Traits>> {
- class __iterator;
-
-public:
- _LIBCPP_HIDE_FROM_ABI constexpr explicit basic_istream_view(basic_istream<_CharT, _Traits>& __stream)
- : __stream_(std::addressof(__stream)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- *__stream_ >> __value_;
- return __iterator{*this};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr default_sentinel_t end() const noexcept { return default_sentinel; }
-
-private:
- basic_istream<_CharT, _Traits>* __stream_;
- _LIBCPP_NO_UNIQUE_ADDRESS _Val __value_ = _Val();
-};
-
-template <movable _Val, class _CharT, class _Traits>
- requires default_initializable<_Val> && __stream_extractable<_Val, _CharT, _Traits>
-class basic_istream_view<_Val, _CharT, _Traits>::__iterator {
-public:
- using iterator_concept = input_iterator_tag;
- using difference_type = ptrdiff_t;
- using value_type = _Val;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(basic_istream_view<_Val, _CharT, _Traits>& __parent) noexcept
- : __parent_(std::addressof(__parent)) {}
-
- __iterator(const __iterator&) = delete;
- _LIBCPP_HIDE_FROM_ABI __iterator(__iterator&&) = default;
-
- __iterator& operator=(const __iterator&) = delete;
- _LIBCPP_HIDE_FROM_ABI __iterator& operator=(__iterator&&) = default;
-
- _LIBCPP_HIDE_FROM_ABI __iterator& operator++() {
- *__parent_->__stream_ >> __parent_->__value_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI _Val& operator*() const { return __parent_->__value_; }
-
- _LIBCPP_HIDE_FROM_ABI friend bool operator==(const __iterator& __x, default_sentinel_t) {
- return !*__x.__get_parent_stream();
- }
-
-private:
- basic_istream_view<_Val, _CharT, _Traits>* __parent_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr basic_istream<_CharT, _Traits>* __get_parent_stream() const {
- return __parent_->__stream_;
- }
-};
-
-template <class _Val>
-using istream_view = basic_istream_view<_Val, char>;
-
-# if _LIBCPP_HAS_WIDE_CHARACTERS
-template <class _Val>
-using wistream_view = basic_istream_view<_Val, wchar_t>;
-# endif
-
-namespace views {
-namespace __istream {
-
-// clang-format off
-template <class _Tp>
-struct __fn {
- template <class _Up, class _UnCVRef = remove_cvref_t<_Up>>
- requires derived_from<_UnCVRef, basic_istream<typename _UnCVRef::char_type,
- typename _UnCVRef::traits_type>>
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Up&& __u) const
- noexcept(noexcept(basic_istream_view<_Tp, typename _UnCVRef::char_type,
- typename _UnCVRef::traits_type>(std::forward<_Up>(__u))))
- -> decltype( basic_istream_view<_Tp, typename _UnCVRef::char_type,
- typename _UnCVRef::traits_type>(std::forward<_Up>(__u)))
- { return basic_istream_view<_Tp, typename _UnCVRef::char_type,
- typename _UnCVRef::traits_type>(std::forward<_Up>(__u));
- }
-};
-// clang-format on
-
-} // namespace __istream
-
-inline namespace __cpo {
-template <class _Tp>
-inline constexpr auto istream = __istream::__fn<_Tp>{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP_STD_VER >= 20
-
-#endif // _LIBCPP___RANGES_ISTREAM_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/join_view.h b/third_party/libcxx/include/c++/v1/__ranges/join_view.h
deleted file mode 100644
index 364f056..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/join_view.h
+++ /dev/null
@@ -1,429 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_JOIN_VIEW_H
-#define _LIBCPP___RANGES_JOIN_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/copyable.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/iterator_with_data.h>
-#include <__iterator/segmented_iterator.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/common_type.h>
-#include <__type_traits/maybe_const.h>
-#include <__utility/as_lvalue.h>
-#include <__utility/empty.h>
-#include <__utility/forward.h>
-#include <optional>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class>
-struct __join_view_iterator_category {};
-
-template <class _View>
- requires is_reference_v<range_reference_t<_View>> && forward_range<_View> && forward_range<range_reference_t<_View>>
-struct __join_view_iterator_category<_View> {
- using _OuterC _LIBCPP_NODEBUG = typename iterator_traits<iterator_t<_View>>::iterator_category;
- using _InnerC _LIBCPP_NODEBUG = typename iterator_traits<iterator_t<range_reference_t<_View>>>::iterator_category;
-
- using iterator_category =
- _If< derived_from<_OuterC, bidirectional_iterator_tag> && derived_from<_InnerC, bidirectional_iterator_tag> &&
- common_range<range_reference_t<_View>>,
- bidirectional_iterator_tag,
- _If< derived_from<_OuterC, forward_iterator_tag> && derived_from<_InnerC, forward_iterator_tag>,
- forward_iterator_tag,
- input_iterator_tag > >;
-};
-
-template <input_range _View>
- requires view<_View> && input_range<range_reference_t<_View>>
-class join_view : public view_interface<join_view<_View>> {
-private:
- using _InnerRange _LIBCPP_NODEBUG = range_reference_t<_View>;
-
- template <bool>
- struct __iterator;
-
- template <bool>
- struct __sentinel;
-
- template <class>
- friend struct std::__segmented_iterator_traits;
-
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
- static constexpr bool _UseOuterCache = !forward_range<_View>;
- using _OuterCache _LIBCPP_NODEBUG = _If<_UseOuterCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _OuterCache __outer_;
-
- static constexpr bool _UseInnerCache = !is_reference_v<_InnerRange>;
- using _InnerCache _LIBCPP_NODEBUG =
- _If<_UseInnerCache, __non_propagating_cache<remove_cvref_t<_InnerRange>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _InnerCache __inner_;
-
-public:
- _LIBCPP_HIDE_FROM_ABI join_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit join_view(_View __base) : __base_(std::move(__base)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- if constexpr (forward_range<_View>) {
- constexpr bool __use_const = __simple_view<_View> && is_reference_v<range_reference_t<_View>>;
- return __iterator<__use_const>{*this, ranges::begin(__base_)};
- } else {
- __outer_.__emplace(ranges::begin(__base_));
- return __iterator<false>{*this};
- }
- }
-
- template <class _V2 = _View>
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires forward_range<const _V2> && is_reference_v<range_reference_t<const _V2>> &&
- input_range<range_reference_t<const _V2>>
- {
- return __iterator<true>{*this, ranges::begin(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (forward_range<_View> && is_reference_v<_InnerRange> && forward_range<_InnerRange> &&
- common_range<_View> && common_range<_InnerRange>)
- return __iterator<__simple_view<_View>>{*this, ranges::end(__base_)};
- else
- return __sentinel<__simple_view<_View>>{*this};
- }
-
- template <class _V2 = _View>
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires forward_range<const _V2> && is_reference_v<range_reference_t<const _V2>> &&
- input_range<range_reference_t<const _V2>>
- {
- using _ConstInnerRange = range_reference_t<const _View>;
- if constexpr (forward_range<_ConstInnerRange> && common_range<const _View> && common_range<_ConstInnerRange>) {
- return __iterator<true>{*this, ranges::end(__base_)};
- } else {
- return __sentinel<true>{*this};
- }
- }
-};
-
-template <input_range _View>
- requires view<_View> && input_range<range_reference_t<_View>>
-template <bool _Const>
-struct join_view<_View>::__sentinel {
-private:
- template <bool>
- friend struct __sentinel;
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, join_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(_Parent& __parent) : __end_(ranges::end(__parent.__base_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __s)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__s.__end_)) {}
-
- template <bool _OtherConst>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__get_outer() == __y.__end_;
- }
-};
-
-// https://reviews.llvm.org/D142811#inline-1383022
-// To simplify the segmented iterator traits specialization,
-// make the iterator `final`
-template <input_range _View>
- requires view<_View> && input_range<range_reference_t<_View>>
-template <bool _Const>
-struct join_view<_View>::__iterator final : public __join_view_iterator_category<__maybe_const<_Const, _View>> {
- friend join_view;
-
- template <class>
- friend struct std::__segmented_iterator_traits;
-
- static constexpr bool __is_join_view_iterator = true;
-
-private:
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, join_view<_View>>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- using _Outer _LIBCPP_NODEBUG = iterator_t<_Base>;
- using _Inner _LIBCPP_NODEBUG = iterator_t<range_reference_t<_Base>>;
- using _InnerRange _LIBCPP_NODEBUG = range_reference_t<_View>;
-
- static_assert(!_Const || forward_range<_Base>, "Const can only be true when Base models forward_range.");
-
- static constexpr bool __ref_is_glvalue = is_reference_v<range_reference_t<_Base>>;
-
- static constexpr bool _OuterPresent = forward_range<_Base>;
- using _OuterType _LIBCPP_NODEBUG = _If<_OuterPresent, _Outer, std::__empty>;
- _LIBCPP_NO_UNIQUE_ADDRESS _OuterType __outer_ = _OuterType();
-
- optional<_Inner> __inner_;
- _Parent* __parent_ = nullptr;
-
- _LIBCPP_HIDE_FROM_ABI constexpr void __satisfy() {
- for (; __get_outer() != ranges::end(__parent_->__base_); ++__get_outer()) {
- auto&& __inner = [this]() -> auto&& {
- if constexpr (__ref_is_glvalue)
- return *__get_outer();
- else
- return __parent_->__inner_.__emplace_from([&]() -> decltype(auto) { return *__get_outer(); });
- }();
- __inner_ = ranges::begin(__inner);
- if (*__inner_ != ranges::end(__inner))
- return;
- }
-
- if constexpr (__ref_is_glvalue)
- __inner_.reset();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Outer& __get_outer() {
- if constexpr (forward_range<_Base>) {
- return __outer_;
- } else {
- return *__parent_->__outer_;
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr const _Outer& __get_outer() const {
- if constexpr (forward_range<_Base>) {
- return __outer_;
- } else {
- return *__parent_->__outer_;
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent& __parent, _Outer __outer)
- requires forward_range<_Base>
- : __outer_(std::move(__outer)), __parent_(std::addressof(__parent)) {
- __satisfy();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(_Parent& __parent)
- requires(!forward_range<_Base>)
- : __parent_(std::addressof(__parent)) {
- __satisfy();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent* __parent, _Outer __outer, _Inner __inner)
- requires forward_range<_Base>
- : __outer_(std::move(__outer)), __inner_(std::move(__inner)), __parent_(__parent) {}
-
-public:
- using iterator_concept =
- _If< __ref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<range_reference_t<_Base>> &&
- common_range<range_reference_t<_Base>>,
- bidirectional_iterator_tag,
- _If< __ref_is_glvalue && forward_range<_Base> && forward_range<range_reference_t<_Base>>,
- forward_iterator_tag,
- input_iterator_tag > >;
-
- using value_type = range_value_t<range_reference_t<_Base>>;
-
- using difference_type = common_type_t< range_difference_t<_Base>, range_difference_t<range_reference_t<_Base>>>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, _Outer> && convertible_to<iterator_t<_InnerRange>, _Inner>
- : __outer_(std::move(__i.__outer_)), __inner_(std::move(__i.__inner_)), __parent_(__i.__parent_) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const { return **__inner_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Inner operator->() const
- requires __has_arrow<_Inner> && copyable<_Inner>
- {
- return *__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- auto __get_inner_range = [&]() -> decltype(auto) {
- if constexpr (__ref_is_glvalue)
- return *__get_outer();
- else
- return *__parent_->__inner_;
- };
- if (++*__inner_ == ranges::end(std::__as_lvalue(__get_inner_range()))) {
- ++__get_outer();
- __satisfy();
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires __ref_is_glvalue && forward_range<_Base> && forward_range<range_reference_t<_Base>>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires __ref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<range_reference_t<_Base>> &&
- common_range<range_reference_t<_Base>>
- {
- if (__outer_ == ranges::end(__parent_->__base_))
- __inner_ = ranges::end(std::__as_lvalue(*--__outer_));
-
- // Skip empty inner ranges when going backwards.
- while (*__inner_ == ranges::begin(std::__as_lvalue(*__outer_))) {
- __inner_ = ranges::end(std::__as_lvalue(*--__outer_));
- }
-
- --*__inner_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires __ref_is_glvalue && bidirectional_range<_Base> && bidirectional_range<range_reference_t<_Base>> &&
- common_range<range_reference_t<_Base>>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires __ref_is_glvalue && forward_range<_Base> && equality_comparable<iterator_t<range_reference_t<_Base>>>
- {
- return __x.__outer_ == __y.__outer_ && __x.__inner_ == __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr decltype(auto)
- iter_move(const __iterator& __i) noexcept(noexcept(ranges::iter_move(*__i.__inner_))) {
- return ranges::iter_move(*__i.__inner_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void
- iter_swap(const __iterator& __x,
- const __iterator& __y) noexcept(noexcept(ranges::iter_swap(*__x.__inner_, *__y.__inner_)))
- requires indirectly_swappable<_Inner>
- {
- return ranges::iter_swap(*__x.__inner_, *__y.__inner_);
- }
-};
-
-template <class _Range>
-explicit join_view(_Range&&) -> join_view<views::all_t<_Range>>;
-
-namespace views {
-namespace __join_view {
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(join_view<all_t<_Range&&>>(std::forward<_Range>(__range))))
- -> decltype(join_view<all_t<_Range&&>>(std::forward<_Range>(__range))) {
- return join_view<all_t<_Range&&>>(std::forward<_Range>(__range));
- }
-};
-} // namespace __join_view
-inline namespace __cpo {
-inline constexpr auto join = __join_view::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-template <class _JoinViewIterator>
- requires(_JoinViewIterator::__is_join_view_iterator && ranges::common_range<typename _JoinViewIterator::_Parent> &&
- __has_random_access_iterator_category<typename _JoinViewIterator::_Outer>::value &&
- __has_random_access_iterator_category<typename _JoinViewIterator::_Inner>::value)
-struct __segmented_iterator_traits<_JoinViewIterator> {
- using __segment_iterator _LIBCPP_NODEBUG =
- __iterator_with_data<typename _JoinViewIterator::_Outer, typename _JoinViewIterator::_Parent*>;
- using __local_iterator _LIBCPP_NODEBUG = typename _JoinViewIterator::_Inner;
-
- // TODO: Would it make sense to enable the optimization for other iterator types?
-
- static constexpr _LIBCPP_HIDE_FROM_ABI __segment_iterator __segment(_JoinViewIterator __iter) {
- if (ranges::empty(__iter.__parent_->__base_))
- return {};
- if (!__iter.__inner_.has_value())
- return __segment_iterator(--__iter.__outer_, __iter.__parent_);
- return __segment_iterator(__iter.__outer_, __iter.__parent_);
- }
-
- static constexpr _LIBCPP_HIDE_FROM_ABI __local_iterator __local(_JoinViewIterator __iter) {
- if (ranges::empty(__iter.__parent_->__base_))
- return {};
- if (!__iter.__inner_.has_value())
- return ranges::end(*--__iter.__outer_);
- return *__iter.__inner_;
- }
-
- static constexpr _LIBCPP_HIDE_FROM_ABI __local_iterator __begin(__segment_iterator __iter) {
- return ranges::begin(*__iter.__get_iter());
- }
-
- static constexpr _LIBCPP_HIDE_FROM_ABI __local_iterator __end(__segment_iterator __iter) {
- return ranges::end(*__iter.__get_iter());
- }
-
- static constexpr _LIBCPP_HIDE_FROM_ABI _JoinViewIterator
- __compose(__segment_iterator __seg_iter, __local_iterator __local_iter) {
- auto&& __parent = std::move(__seg_iter).__get_data();
- auto&& __outer = std::move(__seg_iter).__get_iter();
- if (__local_iter == ranges::end(*__outer)) {
- ++__outer;
- return _JoinViewIterator(*__parent, __outer);
- }
- return _JoinViewIterator(__parent, __outer, std::move(__local_iter));
- }
-};
-
-#endif // #if _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_JOIN_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/join_with_view.h b/third_party/libcxx/include/c++/v1/__ranges/join_with_view.h
deleted file mode 100644
index 3ce9011..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/join_with_view.h
+++ /dev/null
@@ -1,459 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_JOIN_WITH_VIEW_H
-#define _LIBCPP___RANGES_JOIN_WITH_VIEW_H
-
-#include <__concepts/common_reference_with.h>
-#include <__concepts/common_with.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/single_view.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/maybe_const.h>
-#include <__utility/as_const.h>
-#include <__utility/as_lvalue.h>
-#include <__utility/empty.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-#include <variant>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-template <class _Range>
-concept __bidirectional_common = bidirectional_range<_Range> && common_range<_Range>;
-
-template <input_range _View, forward_range _Pattern>
- requires view<_View> && input_range<range_reference_t<_View>> && view<_Pattern> &&
- __concatable<range_reference_t<_View>, _Pattern>
-class join_with_view : public view_interface<join_with_view<_View, _Pattern>> {
- using _InnerRng _LIBCPP_NODEBUG = range_reference_t<_View>;
-
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
- static constexpr bool _UseOuterItCache = !forward_range<_View>;
- using _OuterItCache _LIBCPP_NODEBUG =
- _If<_UseOuterItCache, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _OuterItCache __outer_it_;
-
- static constexpr bool _UseInnerCache = !is_reference_v<_InnerRng>;
- using _InnerCache _LIBCPP_NODEBUG =
- _If<_UseInnerCache, __non_propagating_cache<remove_cvref_t<_InnerRng>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _InnerCache __inner_;
-
- _LIBCPP_NO_UNIQUE_ADDRESS _Pattern __pattern_ = _Pattern();
-
- template <bool _Const>
- struct __iterator;
-
- template <bool _Const>
- struct __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI join_with_view()
- requires default_initializable<_View> && default_initializable<_Pattern>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit join_with_view(_View __base, _Pattern __pattern)
- : __base_(std::move(__base)), __pattern_(std::move(__pattern)) {}
-
- template <input_range _Range>
- requires constructible_from<_View, views::all_t<_Range>> &&
- constructible_from<_Pattern, single_view<range_value_t<_InnerRng>>>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit join_with_view(_Range&& __r, range_value_t<_InnerRng> __e)
- : __base_(views::all(std::forward<_Range>(__r))), __pattern_(views::single(std::move(__e))) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- if constexpr (forward_range<_View>) {
- constexpr bool __use_const = __simple_view<_View> && is_reference_v<_InnerRng> && __simple_view<_Pattern>;
- return __iterator<__use_const>{*this, ranges::begin(__base_)};
- } else {
- __outer_it_.__emplace(ranges::begin(__base_));
- return __iterator<false>{*this};
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires forward_range<const _View> && forward_range<const _Pattern> &&
- is_reference_v<range_reference_t<const _View>> && input_range<range_reference_t<const _View>> &&
- __concatable<range_reference_t<const _View>, const _Pattern>
- {
- return __iterator<true>{*this, ranges::begin(__base_)};
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- constexpr bool __use_const = __simple_view<_View> && __simple_view<_Pattern>;
- if constexpr (forward_range<_View> && is_reference_v<_InnerRng> && forward_range<_InnerRng> &&
- common_range<_View> && common_range<_InnerRng>)
- return __iterator<__use_const>{*this, ranges::end(__base_)};
- else
- return __sentinel<__use_const>{*this};
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires forward_range<const _View> && forward_range<const _Pattern> &&
- is_reference_v<range_reference_t<const _View>> && input_range<range_reference_t<const _View>> &&
- __concatable<range_reference_t<const _View>, const _Pattern>
- {
- using _InnerConstRng = range_reference_t<const _View>;
- if constexpr (forward_range<_InnerConstRng> && common_range<const _View> && common_range<_InnerConstRng>)
- return __iterator<true>{*this, ranges::end(__base_)};
- else
- return __sentinel<true>{*this};
- }
-};
-
-template <class _Range, class _Pattern>
-join_with_view(_Range&&, _Pattern&&) -> join_with_view<views::all_t<_Range>, views::all_t<_Pattern>>;
-
-template <input_range _Range>
-join_with_view(_Range&&, range_value_t<range_reference_t<_Range>>)
- -> join_with_view<views::all_t<_Range>, single_view<range_value_t<range_reference_t<_Range>>>>;
-
-template <class _Base, class _PatternBase, class _InnerBase = range_reference_t<_Base>>
-struct __join_with_view_iterator_category {};
-
-template <class _Base, class _PatternBase, class _InnerBase>
- requires is_reference_v<_InnerBase> && forward_range<_Base> && forward_range<_InnerBase>
-struct __join_with_view_iterator_category<_Base, _PatternBase, _InnerBase> {
-private:
- static consteval auto __get_iterator_category() noexcept {
- using _OuterC = iterator_traits<iterator_t<_Base>>::iterator_category;
- using _InnerC = iterator_traits<iterator_t<_InnerBase>>::iterator_category;
- using _PatternC = iterator_traits<iterator_t<_PatternBase>>::iterator_category;
-
- if constexpr (!is_reference_v<common_reference_t<iter_reference_t<iterator_t<_InnerBase>>,
- iter_reference_t<iterator_t<_PatternBase>>>>)
- return input_iterator_tag{};
- else if constexpr (derived_from<_OuterC, bidirectional_iterator_tag> &&
- derived_from<_InnerC, bidirectional_iterator_tag> &&
- derived_from<_PatternC, bidirectional_iterator_tag> && common_range<_InnerBase> &&
- common_range<_PatternBase>)
- return bidirectional_iterator_tag{};
- else if constexpr (derived_from<_OuterC, forward_iterator_tag> && derived_from<_InnerC, forward_iterator_tag> &&
- derived_from<_PatternC, forward_iterator_tag>)
- return forward_iterator_tag{};
- else
- return input_iterator_tag{};
- }
-
-public:
- using iterator_category = decltype(__get_iterator_category());
-};
-
-template <input_range _View, forward_range _Pattern>
- requires view<_View> && input_range<range_reference_t<_View>> && view<_Pattern> &&
- __concatable<range_reference_t<_View>, _Pattern>
-template <bool _Const>
-struct join_with_view<_View, _Pattern>::__iterator
- : public __join_with_view_iterator_category<__maybe_const<_Const, _View>, __maybe_const<_Const, _Pattern>> {
-private:
- friend join_with_view;
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, join_with_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- using _InnerBase _LIBCPP_NODEBUG = range_reference_t<_Base>;
- using _PatternBase _LIBCPP_NODEBUG = __maybe_const<_Const, _Pattern>;
-
- using _OuterIter _LIBCPP_NODEBUG = iterator_t<_Base>;
- using _InnerIter _LIBCPP_NODEBUG = iterator_t<_InnerBase>;
- using _PatternIter _LIBCPP_NODEBUG = iterator_t<_PatternBase>;
-
- static_assert(!_Const || forward_range<_Base>, "Const can only be true when Base models forward_range.");
-
- static constexpr bool __ref_is_glvalue = is_reference_v<_InnerBase>;
-
- _Parent* __parent_ = nullptr;
-
- static constexpr bool _OuterIterPresent = forward_range<_Base>;
- using _OuterIterType _LIBCPP_NODEBUG = _If<_OuterIterPresent, _OuterIter, std::__empty>;
- _LIBCPP_NO_UNIQUE_ADDRESS _OuterIterType __outer_it_ = _OuterIterType();
-
- variant<_PatternIter, _InnerIter> __inner_it_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent& __parent, _OuterIter __outer)
- requires forward_range<_Base>
- : __parent_(std::addressof(__parent)), __outer_it_(std::move(__outer)) {
- if (__get_outer() != ranges::end(__parent_->__base_)) {
- __inner_it_.template emplace<1>(ranges::begin(__update_inner()));
- __satisfy();
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(_Parent& __parent)
- requires(!forward_range<_Base>)
- : __parent_(std::addressof(__parent)) {
- if (__get_outer() != ranges::end(__parent_->__base_)) {
- __inner_it_.template emplace<1>(ranges::begin(__update_inner()));
- __satisfy();
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _OuterIter& __get_outer() {
- if constexpr (forward_range<_Base>)
- return __outer_it_;
- else
- return *__parent_->__outer_it_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _OuterIter& __get_outer() const {
- if constexpr (forward_range<_Base>)
- return __outer_it_;
- else
- return *__parent_->__outer_it_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto& __update_inner() {
- if constexpr (__ref_is_glvalue)
- return std::__as_lvalue(*__get_outer());
- else
- return __parent_->__inner_.__emplace_from([this]() -> decltype(auto) { return *__get_outer(); });
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto& __get_inner() {
- if constexpr (__ref_is_glvalue)
- return std::__as_lvalue(*__get_outer());
- else
- return *__parent_->__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void __satisfy() {
- while (true) {
- if (__inner_it_.index() == 0) {
- if (std::get<0>(__inner_it_) != ranges::end(__parent_->__pattern_))
- break;
-
- __inner_it_.template emplace<1>(ranges::begin(__update_inner()));
- } else {
- if (std::get<1>(__inner_it_) != ranges::end(__get_inner()))
- break;
-
- if (++__get_outer() == ranges::end(__parent_->__base_)) {
- if constexpr (__ref_is_glvalue)
- __inner_it_.template emplace<0>();
-
- break;
- }
-
- __inner_it_.template emplace<0>(ranges::begin(__parent_->__pattern_));
- }
- }
- }
-
- [[nodiscard]] static consteval auto __get_iterator_concept() noexcept {
- if constexpr (__ref_is_glvalue && bidirectional_range<_Base> && __bidirectional_common<_InnerBase> &&
- __bidirectional_common<_PatternBase>)
- return bidirectional_iterator_tag{};
- else if constexpr (__ref_is_glvalue && forward_range<_Base> && forward_range<_InnerBase>)
- return forward_iterator_tag{};
- else
- return input_iterator_tag{};
- }
-
-public:
- using iterator_concept = decltype(__get_iterator_concept());
- using value_type = common_type_t<iter_value_t<_InnerIter>, iter_value_t<_PatternIter>>;
- using difference_type =
- common_type_t<iter_difference_t<_OuterIter>, iter_difference_t<_InnerIter>, iter_difference_t<_PatternIter>>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, _OuterIter> &&
- convertible_to<iterator_t<_InnerRng>, _InnerIter> && convertible_to<iterator_t<_Pattern>, _PatternIter>
- : __parent_(__i.__parent_), __outer_it_(std::move(__i.__outer_it_)) {
- if (__i.__inner_it_.index() == 0) {
- __inner_it_.template emplace<0>(std::get<0>(std::move(__i.__inner_it_)));
- } else {
- __inner_it_.template emplace<1>(std::get<1>(std::move(__i.__inner_it_)));
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const {
- using __reference = common_reference_t<iter_reference_t<_InnerIter>, iter_reference_t<_PatternIter>>;
- return std::visit([](auto& __it) -> __reference { return *__it; }, __inner_it_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- std::visit([](auto& __it) { ++__it; }, __inner_it_);
- __satisfy();
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires __ref_is_glvalue && forward_iterator<_OuterIter> && forward_iterator<_InnerIter>
- {
- __iterator __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires __ref_is_glvalue
- && bidirectional_range<_Base> && __bidirectional_common<_InnerBase> && __bidirectional_common<_PatternBase>
- {
- if (__outer_it_ == ranges::end(__parent_->__base_)) {
- auto&& __inner = *--__outer_it_;
- __inner_it_.template emplace<1>(ranges::end(__inner));
- }
-
- while (true) {
- if (__inner_it_.index() == 0) {
- auto& __it = std::get<0>(__inner_it_);
- if (__it == ranges::begin(__parent_->__pattern_)) {
- auto&& __inner = *--__outer_it_;
- __inner_it_.template emplace<1>(ranges::end(__inner));
- } else
- break;
- } else {
- auto& __it = std::get<1>(__inner_it_);
- auto&& __inner = *__outer_it_;
- if (__it == ranges::begin(__inner))
- __inner_it_.template emplace<0>(ranges::end(__parent_->__pattern_));
- else
- break;
- }
- }
-
- std::visit([](auto& __it) { --__it; }, __inner_it_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires __ref_is_glvalue
- && bidirectional_range<_Base> && __bidirectional_common<_InnerBase> && __bidirectional_common<_PatternBase>
- {
- __iterator __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires __ref_is_glvalue && forward_range<_Base> && equality_comparable<_InnerIter>
- {
- return __x.__outer_it_ == __y.__outer_it_ && __x.__inner_it_ == __y.__inner_it_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr decltype(auto) iter_move(const __iterator& __x) {
- using __rvalue_reference =
- common_reference_t<iter_rvalue_reference_t<_InnerIter>, iter_rvalue_reference_t<_PatternIter>>;
- return std::visit<__rvalue_reference>(ranges::iter_move, __x.__inner_it_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void iter_swap(const __iterator& __x, const __iterator& __y)
- requires indirectly_swappable<_InnerIter, _PatternIter>
- {
- std::visit(ranges::iter_swap, __x.__inner_it_, __y.__inner_it_);
- }
-};
-
-template <input_range _View, forward_range _Pattern>
- requires view<_View> && input_range<range_reference_t<_View>> && view<_Pattern> &&
- __concatable<range_reference_t<_View>, _Pattern>
-template <bool _Const>
-struct join_with_view<_View, _Pattern>::__sentinel {
-private:
- friend join_with_view;
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, join_with_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- _LIBCPP_NO_UNIQUE_ADDRESS sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(_Parent& __parent) : __end_(ranges::end(__parent.__base_)) {}
-
- template <bool _OtherConst>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto& __get_outer_of(const __iterator<_OtherConst>& __x) {
- return __x.__get_outer();
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __s)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__s.__end_)) {}
-
- template <bool _OtherConst>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __get_outer_of(__x) == __y.__end_;
- }
-};
-
-namespace views {
-namespace __join_with_view {
-struct __fn {
- template <class _Range, class _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pattern&& __pattern) const
- noexcept(noexcept(/**/ join_with_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern))))
- -> decltype(/*--*/ join_with_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern))) {
- return /*-------------*/ join_with_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern));
- }
-
- template <class _Pattern>
- requires constructible_from<decay_t<_Pattern>, _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pattern&& __pattern) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pattern>, _Pattern>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pattern>(__pattern)));
- }
-};
-} // namespace __join_with_view
-
-inline namespace __cpo {
-inline constexpr auto join_with = __join_with_view::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_JOIN_WITH_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/lazy_split_view.h b/third_party/libcxx/include/c++/v1/__ranges/lazy_split_view.h
deleted file mode 100644
index cca9191..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/lazy_split_view.h
+++ /dev/null
@@ -1,442 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_LAZY_SPLIT_VIEW_H
-#define _LIBCPP___RANGES_LAZY_SPLIT_VIEW_H
-
-#include <__algorithm/ranges_find.h>
-#include <__algorithm/ranges_mismatch.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/ranges_operations.h>
-#include <__iterator/concepts.h>
-#include <__iterator/default_sentinel.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/indirectly_comparable.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/single_view.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/maybe_const.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <auto>
-struct __require_constant;
-
-template <class _Range>
-concept __tiny_range = sized_range<_Range> && requires {
- typename __require_constant<remove_reference_t<_Range>::size()>;
-} && (remove_reference_t<_Range>::size() <= 1);
-
-template <input_range _View, forward_range _Pattern>
- requires view<_View> && view<_Pattern> &&
- indirectly_comparable<iterator_t<_View>, iterator_t<_Pattern>, ranges::equal_to> &&
- (forward_range<_View> || __tiny_range<_Pattern>)
-class lazy_split_view : public view_interface<lazy_split_view<_View, _Pattern>> {
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS _Pattern __pattern_ = _Pattern();
-
- using _MaybeCurrent _LIBCPP_NODEBUG =
- _If<!forward_range<_View>, __non_propagating_cache<iterator_t<_View>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _MaybeCurrent __current_ = _MaybeCurrent();
-
- template <bool>
- struct __outer_iterator;
- template <bool>
- struct __inner_iterator;
-
-public:
- _LIBCPP_HIDE_FROM_ABI lazy_split_view()
- requires default_initializable<_View> && default_initializable<_Pattern>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 lazy_split_view(_View __base, _Pattern __pattern)
- : __base_(std::move(__base)), __pattern_(std::move(__pattern)) {}
-
- template <input_range _Range>
- requires constructible_from<_View, views::all_t<_Range>> &&
- constructible_from<_Pattern, single_view<range_value_t<_Range>>>
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 lazy_split_view(_Range&& __r, range_value_t<_Range> __e)
- : __base_(views::all(std::forward<_Range>(__r))), __pattern_(views::single(std::move(__e))) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() {
- if constexpr (forward_range<_View>) {
- return __outer_iterator < __simple_view<_View> && __simple_view < _Pattern >> {*this, ranges::begin(__base_)};
- } else {
- __current_.__emplace(ranges::begin(__base_));
- return __outer_iterator<false>{*this};
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires forward_range<_View> && forward_range<const _View>
- {
- return __outer_iterator<true>{*this, ranges::begin(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires forward_range<_View> && common_range<_View>
- {
- return __outer_iterator < __simple_view<_View> && __simple_view < _Pattern >> {*this, ranges::end(__base_)};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const {
- if constexpr (forward_range<_View> && forward_range<const _View> && common_range<const _View>) {
- return __outer_iterator<true>{*this, ranges::end(__base_)};
- } else {
- return default_sentinel;
- }
- }
-
-private:
- template <class>
- struct __outer_iterator_category {};
-
- template <forward_range _Tp>
- struct __outer_iterator_category<_Tp> {
- using iterator_category = input_iterator_tag;
- };
-
- template <bool _Const>
- struct __outer_iterator : __outer_iterator_category<__maybe_const<_Const, _View>> {
- private:
- template <bool>
- friend struct __inner_iterator;
- friend __outer_iterator<true>;
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, lazy_split_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- _Parent* __parent_ = nullptr;
- using _MaybeCurrent _LIBCPP_NODEBUG = _If<forward_range<_View>, iterator_t<_Base>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _MaybeCurrent __current_ = _MaybeCurrent();
- bool __trailing_empty_ = false;
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto& __current() noexcept {
- if constexpr (forward_range<_View>) {
- return __current_;
- } else {
- return *__parent_->__current_;
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const auto& __current() const noexcept {
- if constexpr (forward_range<_View>) {
- return __current_;
- } else {
- return *__parent_->__current_;
- }
- }
-
- // Workaround for the GCC issue that doesn't allow calling `__parent_->__base_` from friend functions (because
- // `__base_` is private).
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto& __parent_base() const noexcept { return __parent_->__base_; }
-
- public:
- // using iterator_category = inherited;
- using iterator_concept = conditional_t<forward_range<_Base>, forward_iterator_tag, input_iterator_tag>;
- using difference_type = range_difference_t<_Base>;
-
- struct value_type : view_interface<value_type> {
- private:
- __outer_iterator __i_ = __outer_iterator();
-
- public:
- _LIBCPP_HIDE_FROM_ABI value_type() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr explicit value_type(__outer_iterator __i) : __i_(std::move(__i)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __inner_iterator<_Const> begin() const { return __inner_iterator<_Const>{__i_}; }
- _LIBCPP_HIDE_FROM_ABI constexpr default_sentinel_t end() const noexcept { return default_sentinel; }
- };
-
- _LIBCPP_HIDE_FROM_ABI __outer_iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __outer_iterator(_Parent& __parent)
- requires(!forward_range<_Base>)
- : __parent_(std::addressof(__parent)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __outer_iterator(_Parent& __parent, iterator_t<_Base> __current)
- requires forward_range<_Base>
- : __parent_(std::addressof(__parent)), __current_(std::move(__current)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __outer_iterator(__outer_iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, iterator_t<_Base>>
- : __parent_(__i.__parent_), __current_(std::move(__i.__current_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr value_type operator*() const { return value_type{*this}; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __outer_iterator& operator++() {
- const auto __end = ranges::end(__parent_->__base_);
- if (__current() == __end) {
- __trailing_empty_ = false;
- return *this;
- }
-
- const auto [__pbegin, __pend] = ranges::subrange{__parent_->__pattern_};
- if (__pbegin == __pend) {
- // Empty pattern: split on every element in the input range
- ++__current();
-
- } else if constexpr (__tiny_range<_Pattern>) {
- // One-element pattern: we can use `ranges::find`.
- __current() = ranges::find(std::move(__current()), __end, *__pbegin);
- if (__current() != __end) {
- // Make sure we point to after the separator we just found.
- ++__current();
- if (__current() == __end)
- __trailing_empty_ = true;
- }
-
- } else {
- // General case for n-element pattern.
- do {
- const auto [__b, __p] = ranges::mismatch(__current(), __end, __pbegin, __pend);
- if (__p == __pend) {
- __current() = __b;
- if (__current() == __end) {
- __trailing_empty_ = true;
- }
- break; // The pattern matched; skip it.
- }
- } while (++__current() != __end);
- }
-
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator++(int) {
- if constexpr (forward_range<_Base>) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
-
- } else {
- ++*this;
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __outer_iterator& __x, const __outer_iterator& __y)
- requires forward_range<_Base>
- {
- return __x.__current_ == __y.__current_ && __x.__trailing_empty_ == __y.__trailing_empty_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __outer_iterator& __x, default_sentinel_t) {
- _LIBCPP_ASSERT_NON_NULL(__x.__parent_ != nullptr, "Cannot call comparison on a default-constructed iterator.");
- return __x.__current() == ranges::end(__x.__parent_base()) && !__x.__trailing_empty_;
- }
- };
-
- template <class>
- struct __inner_iterator_category {};
-
- template <forward_range _Tp>
- struct __inner_iterator_category<_Tp> {
- using iterator_category =
- _If< derived_from<typename iterator_traits<iterator_t<_Tp>>::iterator_category, forward_iterator_tag>,
- forward_iterator_tag,
- typename iterator_traits<iterator_t<_Tp>>::iterator_category >;
- };
-
- template <bool _Const>
- struct __inner_iterator : __inner_iterator_category<__maybe_const<_Const, _View>> {
- private:
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- // Workaround for a GCC issue.
- static constexpr bool _OuterConst = _Const;
- __outer_iterator<_Const> __i_ = __outer_iterator<_OuterConst>();
- bool __incremented_ = false;
-
- // Note: these private functions are necessary because GCC doesn't allow calls to private members of `__i_` from
- // free functions that are friends of `inner-iterator`.
-
- _LIBCPP_HIDE_FROM_ABI constexpr bool __is_done() const {
- _LIBCPP_ASSERT_NON_NULL(__i_.__parent_ != nullptr, "Cannot call comparison on a default-constructed iterator.");
-
- auto [__pcur, __pend] = ranges::subrange{__i_.__parent_->__pattern_};
- auto __end = ranges::end(__i_.__parent_->__base_);
-
- if constexpr (__tiny_range<_Pattern>) {
- const auto& __cur = __i_.__current();
- if (__cur == __end)
- return true;
- if (__pcur == __pend)
- return __incremented_;
-
- return *__cur == *__pcur;
-
- } else {
- auto __cur = __i_.__current();
- if (__cur == __end)
- return true;
- if (__pcur == __pend)
- return __incremented_;
-
- do {
- if (*__cur != *__pcur)
- return false;
- if (++__pcur == __pend)
- return true;
- } while (++__cur != __end);
-
- return false;
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto& __outer_current() noexcept { return __i_.__current(); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const auto& __outer_current() const noexcept {
- return __i_.__current();
- }
-
- public:
- // using iterator_category = inherited;
- using iterator_concept = typename __outer_iterator<_Const>::iterator_concept;
- using value_type = range_value_t<_Base>;
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __inner_iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __inner_iterator(__outer_iterator<_Const> __i) : __i_(std::move(__i)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr const iterator_t<_Base>& base() const& noexcept { return __i_.__current(); }
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Base> base() &&
- requires forward_range<_View>
- {
- return std::move(__i_.__current());
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const { return *__i_.__current(); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __inner_iterator& operator++() {
- __incremented_ = true;
-
- if constexpr (!forward_range<_Base>) {
- if constexpr (_Pattern::size() == 0) {
- return *this;
- }
- }
-
- ++__i_.__current();
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator++(int) {
- if constexpr (forward_range<_Base>) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
-
- } else {
- ++*this;
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __inner_iterator& __x, const __inner_iterator& __y)
- requires forward_range<_Base>
- {
- return __x.__outer_current() == __y.__outer_current();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __inner_iterator& __x, default_sentinel_t) {
- return __x.__is_done();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr decltype(auto)
- iter_move(const __inner_iterator& __i) noexcept(noexcept(ranges::iter_move(__i.__outer_current()))) {
- return ranges::iter_move(__i.__outer_current());
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void iter_swap(
- const __inner_iterator& __x,
- const __inner_iterator& __y) noexcept(noexcept(ranges::iter_swap(__x.__outer_current(), __y.__outer_current())))
- requires indirectly_swappable<iterator_t<_Base>>
- {
- ranges::iter_swap(__x.__outer_current(), __y.__outer_current());
- }
- };
-};
-
-template <class _Range, class _Pattern>
-lazy_split_view(_Range&&, _Pattern&&) -> lazy_split_view<views::all_t<_Range>, views::all_t<_Pattern>>;
-
-template <input_range _Range>
-lazy_split_view(_Range&&,
- range_value_t<_Range>) -> lazy_split_view<views::all_t<_Range>, single_view<range_value_t<_Range>>>;
-
-namespace views {
-namespace __lazy_split_view {
-struct __fn {
- template <class _Range, class _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pattern&& __pattern) const
- noexcept(noexcept(lazy_split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern))))
- -> decltype(lazy_split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern))) {
- return lazy_split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern));
- }
-
- template <class _Pattern>
- requires constructible_from<decay_t<_Pattern>, _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pattern&& __pattern) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pattern>, _Pattern>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pattern>(__pattern)));
- }
-};
-} // namespace __lazy_split_view
-
-inline namespace __cpo {
-inline constexpr auto lazy_split = __lazy_split_view::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_LAZY_SPLIT_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/movable_box.h b/third_party/libcxx/include/c++/v1/__ranges/movable_box.h
deleted file mode 100644
index 5a456cc..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/movable_box.h
+++ /dev/null
@@ -1,247 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_MOVABLE_BOX_H
-#define _LIBCPP___RANGES_MOVABLE_BOX_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/copyable.h>
-#include <__concepts/movable.h>
-#include <__config>
-#include <__memory/addressof.h>
-#include <__memory/construct_at.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__utility/move.h>
-#include <optional>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-// __movable_box allows turning a type that is move-constructible (but maybe not move-assignable) into
-// a type that is both move-constructible and move-assignable. It does that by introducing an empty state
-// and basically doing destroy-then-copy-construct in the assignment operator. The empty state is necessary
-// to handle the case where the copy construction fails after destroying the object.
-//
-// In some cases, we can completely avoid the use of an empty state; we provide a specialization of
-// __movable_box that does this, see below for the details.
-
-// until C++23, `__movable_box` was named `__copyable_box` and required the stored type to be copy-constructible, not
-// just move-constructible; we preserve the old behavior in pre-C++23 modes.
-template <class _Tp>
-concept __movable_box_object =
-# if _LIBCPP_STD_VER >= 23
- move_constructible<_Tp>
-# else
- copy_constructible<_Tp>
-# endif
- && is_object_v<_Tp>;
-
-namespace ranges {
-// Primary template - uses std::optional and introduces an empty state in case assignment fails.
-template <__movable_box_object _Tp>
-class __movable_box {
- _LIBCPP_NO_UNIQUE_ADDRESS optional<_Tp> __val_;
-
-public:
- template <class... _Args>
- requires is_constructible_v<_Tp, _Args...>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __movable_box(in_place_t, _Args&&... __args) noexcept(
- is_nothrow_constructible_v<_Tp, _Args...>)
- : __val_(in_place, std::forward<_Args>(__args)...) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box() noexcept(is_nothrow_default_constructible_v<_Tp>)
- requires default_initializable<_Tp>
- : __val_(in_place) {}
-
- _LIBCPP_HIDE_FROM_ABI __movable_box(__movable_box const&) = default;
- _LIBCPP_HIDE_FROM_ABI __movable_box(__movable_box&&) = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box&
- operator=(__movable_box const& __other) noexcept(is_nothrow_copy_constructible_v<_Tp>)
-# if _LIBCPP_STD_VER >= 23
- requires copy_constructible<_Tp>
-# endif
- {
- if (this != std::addressof(__other)) {
- if (__other.__has_value())
- __val_.emplace(*__other);
- else
- __val_.reset();
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI __movable_box& operator=(__movable_box&&)
- requires movable<_Tp>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box&
- operator=(__movable_box&& __other) noexcept(is_nothrow_move_constructible_v<_Tp>) {
- if (this != std::addressof(__other)) {
- if (__other.__has_value())
- __val_.emplace(std::move(*__other));
- else
- __val_.reset();
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp const& operator*() const noexcept { return *__val_; }
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp& operator*() noexcept { return *__val_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr const _Tp* operator->() const noexcept { return __val_.operator->(); }
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp* operator->() noexcept { return __val_.operator->(); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr bool __has_value() const noexcept { return __val_.has_value(); }
-};
-
-// This partial specialization implements an optimization for when we know we don't need to store
-// an empty state to represent failure to perform an assignment. For copy-assignment, this happens:
-//
-// 1. If the type is copyable (which includes copy-assignment), we can use the type's own assignment operator
-// directly and avoid using std::optional.
-// 2. If the type is not copyable, but it is nothrow-copy-constructible, then we can implement assignment as
-// destroy-and-then-construct and we know it will never fail, so we don't need an empty state.
-//
-// The exact same reasoning can be applied for move-assignment, with copyable replaced by movable and
-// nothrow-copy-constructible replaced by nothrow-move-constructible. This specialization is enabled
-// whenever we can apply any of these optimizations for both the copy assignment and the move assignment
-// operator.
-
-# if _LIBCPP_STD_VER >= 23
-template <class _Tp>
-concept __doesnt_need_empty_state =
- (copy_constructible<_Tp>
- // 1. If copy_constructible<T> is true, movable-box<T> should store only a T if either T models
- // copyable, or is_nothrow_move_constructible_v<T> && is_nothrow_copy_constructible_v<T> is true.
- ? copyable<_Tp> || (is_nothrow_move_constructible_v<_Tp> && is_nothrow_copy_constructible_v<_Tp>)
- // 2. Otherwise, movable-box<T> should store only a T if either T models movable or
- // is_nothrow_move_constructible_v<T> is true.
- : movable<_Tp> || is_nothrow_move_constructible_v<_Tp>);
-
-// When _Tp doesn't have an assignment operator, we must implement __movable_box's assignment operator
-// by doing destroy_at followed by construct_at. However, that implementation strategy leads to UB if the nested
-// _Tp is potentially overlapping, as it is doing a non-transparent replacement of the sub-object, which means that
-// we're not considered "nested" inside the movable-box anymore, and since we're not nested within it, [basic.life]/1.5
-// says that we essentially just reused the storage of the movable-box for a completely unrelated object and ended the
-// movable-box's lifetime.
-// https://github.com/llvm/llvm-project/issues/70494#issuecomment-1845646490
-//
-// Hence, when the _Tp doesn't have an assignment operator, we can't risk making it a potentially-overlapping
-// subobject because of the above, and we don't use [[no_unique_address]] in that case.
-template <class _Tp>
-concept __can_use_no_unique_address = (copy_constructible<_Tp> ? copyable<_Tp> : movable<_Tp>);
-
-# else
-
-template <class _Tp>
-concept __doesnt_need_empty_state_for_copy = copyable<_Tp> || is_nothrow_copy_constructible_v<_Tp>;
-
-template <class _Tp>
-concept __doesnt_need_empty_state_for_move = movable<_Tp> || is_nothrow_move_constructible_v<_Tp>;
-
-template <class _Tp>
-concept __doesnt_need_empty_state = __doesnt_need_empty_state_for_copy<_Tp> && __doesnt_need_empty_state_for_move<_Tp>;
-
-template <class _Tp>
-concept __can_use_no_unique_address = copyable<_Tp>;
-# endif
-
-template <class _Tp>
-struct __movable_box_holder {
- _Tp __val_;
-
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __movable_box_holder(in_place_t, _Args&&... __args)
- : __val_(std::forward<_Args>(__args)...) {}
-};
-
-template <class _Tp>
- requires __can_use_no_unique_address<_Tp>
-struct __movable_box_holder<_Tp> {
- _LIBCPP_NO_UNIQUE_ADDRESS _Tp __val_;
-
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __movable_box_holder(in_place_t, _Args&&... __args)
- : __val_(std::forward<_Args>(__args)...) {}
-};
-
-template <__movable_box_object _Tp>
- requires __doesnt_need_empty_state<_Tp>
-class __movable_box<_Tp> {
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box_holder<_Tp> __holder_;
-
-public:
- template <class... _Args>
- requires is_constructible_v<_Tp, _Args...>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __movable_box(in_place_t __inplace, _Args&&... __args) noexcept(
- is_nothrow_constructible_v<_Tp, _Args...>)
- : __holder_(__inplace, std::forward<_Args>(__args)...) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box() noexcept(is_nothrow_default_constructible_v<_Tp>)
- requires default_initializable<_Tp>
- : __holder_(in_place_t{}) {}
-
- _LIBCPP_HIDE_FROM_ABI __movable_box(__movable_box const&) = default;
- _LIBCPP_HIDE_FROM_ABI __movable_box(__movable_box&&) = default;
-
- // Implementation of assignment operators in case we perform optimization (1)
- _LIBCPP_HIDE_FROM_ABI __movable_box& operator=(__movable_box const&)
- requires copyable<_Tp>
- = default;
- _LIBCPP_HIDE_FROM_ABI __movable_box& operator=(__movable_box&&)
- requires movable<_Tp>
- = default;
-
- // Implementation of assignment operators in case we perform optimization (2)
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box& operator=(__movable_box const& __other) noexcept {
- static_assert(is_nothrow_copy_constructible_v<_Tp>);
- static_assert(!__can_use_no_unique_address<_Tp>);
- if (this != std::addressof(__other)) {
- std::destroy_at(std::addressof(__holder_.__val_));
- std::construct_at(std::addressof(__holder_.__val_), __other.__holder_.__val_);
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __movable_box& operator=(__movable_box&& __other) noexcept {
- static_assert(is_nothrow_move_constructible_v<_Tp>);
- static_assert(!__can_use_no_unique_address<_Tp>);
- if (this != std::addressof(__other)) {
- std::destroy_at(std::addressof(__holder_.__val_));
- std::construct_at(std::addressof(__holder_.__val_), std::move(__other.__holder_.__val_));
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp const& operator*() const noexcept { return __holder_.__val_; }
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp& operator*() noexcept { return __holder_.__val_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr const _Tp* operator->() const noexcept { return std::addressof(__holder_.__val_); }
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp* operator->() noexcept { return std::addressof(__holder_.__val_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr bool __has_value() const noexcept { return true; }
-};
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_MOVABLE_BOX_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/non_propagating_cache.h b/third_party/libcxx/include/c++/v1/__ranges/non_propagating_cache.h
deleted file mode 100644
index beae13a..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/non_propagating_cache.h
+++ /dev/null
@@ -1,103 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
-#define _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
-
-#include <__config>
-#include <__iterator/concepts.h> // indirectly_readable
-#include <__iterator/iterator_traits.h> // iter_reference_t
-#include <__memory/addressof.h>
-#include <__utility/forward.h>
-#include <optional>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-// __non_propagating_cache is a helper type that allows storing an optional value in it,
-// but which does not copy the source's value when it is copy constructed/assigned to,
-// and which resets the source's value when it is moved-from.
-//
-// This type is used as an implementation detail of some views that need to cache the
-// result of `begin()` in order to provide an amortized O(1) begin() method. Typically,
-// we don't want to propagate the value of the cache upon copy because the cached iterator
-// may refer to internal details of the source view.
-template <class _Tp>
- requires is_object_v<_Tp>
-class __non_propagating_cache {
- struct __from_tag {};
- struct __forward_tag {};
-
- // This helper class is needed to perform copy and move elision when
- // constructing the contained type from an iterator.
- struct __wrapper {
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __wrapper(__forward_tag, _Args&&... __args)
- : __t_(std::forward<_Args>(__args)...) {}
- template <class _Fn>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __wrapper(__from_tag, _Fn const& __f) : __t_(__f()) {}
- _Tp __t_;
- };
-
- optional<__wrapper> __value_ = nullopt;
-
-public:
- _LIBCPP_HIDE_FROM_ABI __non_propagating_cache() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __non_propagating_cache(__non_propagating_cache const&) noexcept
- : __value_(nullopt) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __non_propagating_cache(__non_propagating_cache&& __other) noexcept
- : __value_(nullopt) {
- __other.__value_.reset();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __non_propagating_cache& operator=(__non_propagating_cache const& __other) noexcept {
- if (this != std::addressof(__other)) {
- __value_.reset();
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __non_propagating_cache& operator=(__non_propagating_cache&& __other) noexcept {
- __value_.reset();
- __other.__value_.reset();
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp& operator*() { return __value_->__t_; }
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp const& operator*() const { return __value_->__t_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr bool __has_value() const { return __value_.has_value(); }
-
- template <class _Fn>
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp& __emplace_from(_Fn const& __f) {
- return __value_.emplace(__from_tag{}, __f).__t_;
- }
-
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI constexpr _Tp& __emplace(_Args&&... __args) {
- return __value_.emplace(__forward_tag{}, std::forward<_Args>(__args)...).__t_;
- }
-};
-
-struct __empty_cache {};
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_NON_PROPAGATING_CACHE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/owning_view.h b/third_party/libcxx/include/c++/v1/__ranges/owning_view.h
deleted file mode 100644
index 1ab81af..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/owning_view.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_OWNING_VIEW_H
-#define _LIBCPP___RANGES_OWNING_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/movable.h>
-#include <__config>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/data.h>
-#include <__ranges/empty.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <range _Rp>
- requires movable<_Rp> && (!__is_std_initializer_list<remove_cvref_t<_Rp>>)
-class owning_view : public view_interface<owning_view<_Rp>> {
- _Rp __r_ = _Rp();
-
-public:
- _LIBCPP_HIDE_FROM_ABI owning_view()
- requires default_initializable<_Rp>
- = default;
- _LIBCPP_HIDE_FROM_ABI constexpr owning_view(_Rp&& __r) : __r_(std::move(__r)) {}
-
- _LIBCPP_HIDE_FROM_ABI owning_view(owning_view&&) = default;
- _LIBCPP_HIDE_FROM_ABI owning_view& operator=(owning_view&&) = default;
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Rp& base() & noexcept { return __r_; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Rp& base() const& noexcept { return __r_; }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Rp&& base() && noexcept { return std::move(__r_); }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Rp&& base() const&& noexcept { return std::move(__r_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Rp> begin() { return ranges::begin(__r_); }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Rp> end() { return ranges::end(__r_); }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _Rp>
- {
- return ranges::begin(__r_);
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _Rp>
- {
- return ranges::end(__r_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty()
- requires requires { ranges::empty(__r_); }
- {
- return ranges::empty(__r_);
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
- requires requires { ranges::empty(__r_); }
- {
- return ranges::empty(__r_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_Rp>
- {
- return ranges::size(__r_);
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _Rp>
- {
- return ranges::size(__r_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto data()
- requires contiguous_range<_Rp>
- {
- return ranges::data(__r_);
- }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto data() const
- requires contiguous_range<const _Rp>
- {
- return ranges::data(__r_);
- }
-};
-_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(owning_view);
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<owning_view<_Tp>> = enable_borrowed_range<_Tp>;
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_OWNING_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/range_adaptor.h b/third_party/libcxx/include/c++/v1/__ranges/range_adaptor.h
deleted file mode 100644
index 4bcb53e..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/range_adaptor.h
+++ /dev/null
@@ -1,99 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_RANGE_ADAPTOR_H
-#define _LIBCPP___RANGES_RANGE_ADAPTOR_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/invocable.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__functional/compose.h>
-#include <__functional/invoke.h>
-#include <__ranges/concepts.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/invoke.h>
-#include <__type_traits/is_class.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/remove_cv.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-// CRTP base that one can derive from in order to be considered a range adaptor closure
-// by the library. When deriving from this class, a pipe operator will be provided to
-// make the following hold:
-// - `x | f` is equivalent to `f(x)`
-// - `f1 | f2` is an adaptor closure `g` such that `g(x)` is equivalent to `f2(f1(x))`
-template <class _Tp>
- requires is_class_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>>
-struct __range_adaptor_closure {};
-
-// Type that wraps an arbitrary function object and makes it into a range adaptor closure,
-// i.e. something that can be called via the `x | f` notation.
-template <class _Fn>
-struct __pipeable : _Fn, __range_adaptor_closure<__pipeable<_Fn>> {
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __pipeable(_Fn&& __f) : _Fn(std::move(__f)) {}
-};
-_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(__pipeable);
-
-template <class _Tp>
-_Tp __derived_from_range_adaptor_closure(__range_adaptor_closure<_Tp>*);
-
-template <class _Tp>
-concept _RangeAdaptorClosure = !ranges::range<remove_cvref_t<_Tp>> && requires {
- // Ensure that `remove_cvref_t<_Tp>` is derived from `__range_adaptor_closure<remove_cvref_t<_Tp>>` and isn't derived
- // from `__range_adaptor_closure<U>` for any other type `U`.
- { ranges::__derived_from_range_adaptor_closure((remove_cvref_t<_Tp>*)nullptr) } -> same_as<remove_cvref_t<_Tp>>;
-};
-
-template <ranges::range _Range, _RangeAdaptorClosure _Closure>
- requires invocable<_Closure, _Range>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto)
-operator|(_Range&& __range, _Closure&& __closure) noexcept(is_nothrow_invocable_v<_Closure, _Range>) {
- return std::invoke(std::forward<_Closure>(__closure), std::forward<_Range>(__range));
-}
-
-template <_RangeAdaptorClosure _Closure, _RangeAdaptorClosure _OtherClosure>
- requires constructible_from<decay_t<_Closure>, _Closure> && constructible_from<decay_t<_OtherClosure>, _OtherClosure>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator|(_Closure&& __c1, _OtherClosure&& __c2) noexcept(
- is_nothrow_constructible_v<decay_t<_Closure>, _Closure> &&
- is_nothrow_constructible_v<decay_t<_OtherClosure>, _OtherClosure>) {
- return __pipeable(std::__compose(std::forward<_OtherClosure>(__c2), std::forward<_Closure>(__c1)));
-}
-
-# if _LIBCPP_STD_VER >= 23
-template <class _Tp>
- requires is_class_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>>
-class _LIBCPP_NO_SPECIALIZATIONS range_adaptor_closure : public __range_adaptor_closure<_Tp> {};
-# endif // _LIBCPP_STD_VER >= 23
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_RANGE_ADAPTOR_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/rbegin.h b/third_party/libcxx/include/c++/v1/__ranges/rbegin.h
deleted file mode 100644
index 12e739e..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/rbegin.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_RBEGIN_H
-#define _LIBCPP___RANGES_RBEGIN_H
-
-#include <__concepts/class_or_enum.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/readable_traits.h>
-#include <__iterator/reverse_iterator.h>
-#include <__ranges/access.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/remove_cvref.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/auto_cast.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-// [ranges.access.rbegin]
-
-namespace ranges {
-namespace __rbegin {
-template <class _Tp>
-concept __member_rbegin = __can_borrow<_Tp> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(__t.rbegin()) } -> input_or_output_iterator;
-};
-
-void rbegin() = delete;
-
-template <class _Tp>
-concept __unqualified_rbegin =
- !__member_rbegin<_Tp> && __can_borrow<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(rbegin(__t)) } -> input_or_output_iterator;
- };
-
-template <class _Tp>
-concept __can_reverse =
- __can_borrow<_Tp> && !__member_rbegin<_Tp> && !__unqualified_rbegin<_Tp> && requires(_Tp&& __t) {
- { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>;
- { ranges::begin(__t) } -> bidirectional_iterator;
- };
-
-struct __fn {
- template <class _Tp>
- requires __member_rbegin<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rbegin()))) {
- return _LIBCPP_AUTO_CAST(__t.rbegin());
- }
-
- template <class _Tp>
- requires __unqualified_rbegin<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(rbegin(__t)))) {
- return _LIBCPP_AUTO_CAST(rbegin(__t));
- }
-
- template <class _Tp>
- requires __can_reverse<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(noexcept(ranges::end(__t))) {
- return std::make_reverse_iterator(ranges::end(__t));
- }
-
- void operator()(auto&&) const = delete;
-};
-} // namespace __rbegin
-
-inline namespace __cpo {
-inline constexpr auto rbegin = __rbegin::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.access.crbegin]
-
-namespace ranges {
-namespace __crbegin {
-struct __fn {
- template <class _Tp>
- requires is_lvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t))))
- -> decltype(ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t))) {
- return ranges::rbegin(static_cast<const remove_reference_t<_Tp>&>(__t));
- }
-
- template <class _Tp>
- requires is_rvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::rbegin(static_cast<const _Tp&&>(__t))))
- -> decltype(ranges::rbegin(static_cast<const _Tp&&>(__t))) {
- return ranges::rbegin(static_cast<const _Tp&&>(__t));
- }
-};
-} // namespace __crbegin
-
-inline namespace __cpo {
-inline constexpr auto crbegin = __crbegin::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_RBEGIN_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/ref_view.h b/third_party/libcxx/include/c++/v1/__ranges/ref_view.h
deleted file mode 100644
index 109a10c..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/ref_view.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_REF_VIEW_H
-#define _LIBCPP___RANGES_REF_VIEW_H
-
-#include <__concepts/convertible_to.h>
-#include <__concepts/different_from.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/data.h>
-#include <__ranges/empty.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/is_object.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <range _Range>
- requires is_object_v<_Range>
-class ref_view : public view_interface<ref_view<_Range>> {
- _Range* __range_;
-
- static void __fun(_Range&);
- static void __fun(_Range&&) = delete; // NOLINT(modernize-use-equals-delete) ; This is llvm.org/PR54276
-
-public:
- template <class _Tp>
- requires __different_from<_Tp, ref_view> && convertible_to<_Tp, _Range&> && requires { __fun(std::declval<_Tp>()); }
- _LIBCPP_HIDE_FROM_ABI constexpr ref_view(_Tp&& __t)
- : __range_(std::addressof(static_cast<_Range&>(std::forward<_Tp>(__t)))) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Range& base() const { return *__range_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Range> begin() const { return ranges::begin(*__range_); }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Range> end() const { return ranges::end(*__range_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
- requires requires { ranges::empty(*__range_); }
- {
- return ranges::empty(*__range_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<_Range>
- {
- return ranges::size(*__range_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto data() const
- requires contiguous_range<_Range>
- {
- return ranges::data(*__range_);
- }
-};
-
-template <class _Range>
-ref_view(_Range&) -> ref_view<_Range>;
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<ref_view<_Tp>> = true;
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_REF_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/rend.h b/third_party/libcxx/include/c++/v1/__ranges/rend.h
deleted file mode 100644
index 02b4c59..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/rend.h
+++ /dev/null
@@ -1,123 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_REND_H
-#define _LIBCPP___RANGES_REND_H
-
-#include <__concepts/class_or_enum.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/readable_traits.h>
-#include <__iterator/reverse_iterator.h>
-#include <__ranges/access.h>
-#include <__ranges/rbegin.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/remove_cvref.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/auto_cast.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-// [range.access.rend]
-
-namespace ranges {
-namespace __rend {
-template <class _Tp>
-concept __member_rend = __can_borrow<_Tp> && requires(_Tp&& __t) {
- ranges::rbegin(__t);
- { _LIBCPP_AUTO_CAST(__t.rend()) } -> sentinel_for<decltype(ranges::rbegin(__t))>;
-};
-
-void rend() = delete;
-
-template <class _Tp>
-concept __unqualified_rend =
- !__member_rend<_Tp> && __can_borrow<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- ranges::rbegin(__t);
- { _LIBCPP_AUTO_CAST(rend(__t)) } -> sentinel_for<decltype(ranges::rbegin(__t))>;
- };
-
-template <class _Tp>
-concept __can_reverse = __can_borrow<_Tp> && !__member_rend<_Tp> && !__unqualified_rend<_Tp> && requires(_Tp&& __t) {
- { ranges::begin(__t) } -> same_as<decltype(ranges::end(__t))>;
- { ranges::begin(__t) } -> bidirectional_iterator;
-};
-
-class __fn {
-public:
- template <class _Tp>
- requires __member_rend<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.rend()))) {
- return _LIBCPP_AUTO_CAST(__t.rend());
- }
-
- template <class _Tp>
- requires __unqualified_rend<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(rend(__t)))) {
- return _LIBCPP_AUTO_CAST(rend(__t));
- }
-
- template <class _Tp>
- requires __can_reverse<_Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::begin(__t))) {
- return std::make_reverse_iterator(ranges::begin(__t));
- }
-
- void operator()(auto&&) const = delete;
-};
-} // namespace __rend
-
-inline namespace __cpo {
-inline constexpr auto rend = __rend::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.access.crend]
-
-namespace ranges {
-namespace __crend {
-struct __fn {
- template <class _Tp>
- requires is_lvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t))))
- -> decltype(ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t))) {
- return ranges::rend(static_cast<const remove_reference_t<_Tp>&>(__t));
- }
-
- template <class _Tp>
- requires is_rvalue_reference_v<_Tp&&>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const noexcept(
- noexcept(ranges::rend(static_cast<const _Tp&&>(__t)))) -> decltype(ranges::rend(static_cast<const _Tp&&>(__t))) {
- return ranges::rend(static_cast<const _Tp&&>(__t));
- }
-};
-} // namespace __crend
-
-inline namespace __cpo {
-inline constexpr auto crend = __crend::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_REND_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/repeat_view.h b/third_party/libcxx/include/c++/v1/__ranges/repeat_view.h
deleted file mode 100644
index 9192183..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/repeat_view.h
+++ /dev/null
@@ -1,274 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_REPEAT_VIEW_H
-#define _LIBCPP___RANGES_REPEAT_VIEW_H
-
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/same_as.h>
-#include <__concepts/semiregular.h>
-#include <__config>
-#include <__cstddef/ptrdiff_t.h>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/unreachable_sentinel.h>
-#include <__memory/addressof.h>
-#include <__ranges/iota_view.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/remove_cv.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-#include <__utility/piecewise_construct.h>
-#include <tuple>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <class _Tp>
-concept __integer_like_with_usable_difference_type =
- __signed_integer_like<_Tp> || (__integer_like<_Tp> && weakly_incrementable<_Tp>);
-
-template <class _Tp>
-struct __repeat_view_iterator_difference {
- using type _LIBCPP_NODEBUG = _IotaDiffT<_Tp>;
-};
-
-template <__signed_integer_like _Tp>
-struct __repeat_view_iterator_difference<_Tp> {
- using type _LIBCPP_NODEBUG = _Tp;
-};
-
-template <class _Tp>
-using __repeat_view_iterator_difference_t _LIBCPP_NODEBUG = typename __repeat_view_iterator_difference<_Tp>::type;
-
-namespace views::__drop {
-struct __fn;
-} // namespace views::__drop
-
-namespace views::__take {
-struct __fn;
-} // namespace views::__take
-
-template <move_constructible _Tp, semiregular _Bound = unreachable_sentinel_t>
- requires(is_object_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>> &&
- (__integer_like_with_usable_difference_type<_Bound> || same_as<_Bound, unreachable_sentinel_t>))
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS repeat_view : public view_interface<repeat_view<_Tp, _Bound>> {
- friend struct views::__take::__fn;
- friend struct views::__drop::__fn;
- class __iterator;
-
-public:
- _LIBCPP_HIDE_FROM_ABI repeat_view()
- requires default_initializable<_Tp>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit repeat_view(const _Tp& __value, _Bound __bound_sentinel = _Bound())
- requires copy_constructible<_Tp>
- : __value_(in_place, __value), __bound_(__bound_sentinel) {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(__bound_ >= 0, "The value of bound must be greater than or equal to 0");
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit repeat_view(_Tp&& __value, _Bound __bound_sentinel = _Bound())
- : __value_(in_place, std::move(__value)), __bound_(__bound_sentinel) {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(__bound_ >= 0, "The value of bound must be greater than or equal to 0");
- }
-
- template <class... _TpArgs, class... _BoundArgs>
- requires(constructible_from<_Tp, _TpArgs...> && constructible_from<_Bound, _BoundArgs...>)
- _LIBCPP_HIDE_FROM_ABI constexpr explicit repeat_view(
- piecewise_construct_t, tuple<_TpArgs...> __value_args, tuple<_BoundArgs...> __bound_args = tuple<>{})
- : __value_(in_place, std::make_from_tuple<_Tp>(std::move(__value_args))),
- __bound_(std::make_from_tuple<_Bound>(std::move(__bound_args))) {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(
- __bound_ >= 0, "The behavior is undefined if Bound is not unreachable_sentinel_t and bound is negative");
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator begin() const {
- return __iterator(std::addressof(*__value_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __iterator end() const
- requires(!same_as<_Bound, unreachable_sentinel_t>)
- {
- return __iterator(std::addressof(*__value_), __bound_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr unreachable_sentinel_t end() const noexcept {
- return unreachable_sentinel;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires(!same_as<_Bound, unreachable_sentinel_t>)
- {
- return std::__to_unsigned_like(__bound_);
- }
-
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Tp> __value_;
- _LIBCPP_NO_UNIQUE_ADDRESS _Bound __bound_ = _Bound();
-};
-
-template <class _Tp, class _Bound = unreachable_sentinel_t>
-repeat_view(_Tp, _Bound = _Bound()) -> repeat_view<_Tp, _Bound>;
-
-// [range.repeat.iterator]
-template <move_constructible _Tp, semiregular _Bound>
- requires(is_object_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>> &&
- (__integer_like_with_usable_difference_type<_Bound> || same_as<_Bound, unreachable_sentinel_t>))
-class repeat_view<_Tp, _Bound>::__iterator {
- friend class repeat_view;
-
- using _IndexT _LIBCPP_NODEBUG = conditional_t<same_as<_Bound, unreachable_sentinel_t>, ptrdiff_t, _Bound>;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(const _Tp* __value, _IndexT __bound_sentinel = _IndexT())
- : __value_(__value), __current_(__bound_sentinel) {}
-
-public:
- using iterator_concept = random_access_iterator_tag;
- using iterator_category = random_access_iterator_tag;
- using value_type = _Tp;
- using difference_type = __repeat_view_iterator_difference_t<_IndexT>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& operator*() const noexcept { return *__value_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--() {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(__current_ > 0, "The value of bound must be greater than or equal to 0");
- --__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int) {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __n) {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(__current_ + __n >= 0, "The value of bound must be greater than or equal to 0");
- __current_ += __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __n) {
- if constexpr (!same_as<_Bound, unreachable_sentinel_t>)
- _LIBCPP_ASSERT_UNCATEGORIZED(__current_ - __n >= 0, "The value of bound must be greater than or equal to 0");
- __current_ -= __n;
- return *this;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& operator[](difference_type __n) const noexcept {
- return *(*this + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y) {
- return __x.__current_ == __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y) {
- return __x.__current_ <=> __y.__current_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(__iterator __i, difference_type __n) {
- __i += __n;
- return __i;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, __iterator __i) {
- __i += __n;
- return __i;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(__iterator __i, difference_type __n) {
- __i -= __n;
- return __i;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type
- operator-(const __iterator& __x, const __iterator& __y) {
- return static_cast<difference_type>(__x.__current_) - static_cast<difference_type>(__y.__current_);
- }
-
-private:
- const _Tp* __value_ = nullptr;
- _IndexT __current_ = _IndexT();
-};
-
-// clang-format off
-namespace views {
-namespace __repeat {
-struct __fn {
- template <class _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Tp&& __value)
- noexcept(noexcept(ranges::repeat_view<decay_t<_Tp>>(std::forward<_Tp>(__value))))
- -> decltype( ranges::repeat_view<decay_t<_Tp>>(std::forward<_Tp>(__value)))
- { return ranges::repeat_view<decay_t<_Tp>>(std::forward<_Tp>(__value)); }
-
- template <class _Tp, class _Bound>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Tp&& __value, _Bound&& __bound_sentinel)
- noexcept(noexcept(ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel))))
- -> decltype( ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel)))
- { return ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel)); }
-};
-} // namespace __repeat
-// clang-format on
-
-inline namespace __cpo {
-inline constexpr auto repeat = __repeat::__fn{};
-} // namespace __cpo
-} // namespace views
-
-template <class _Tp>
-inline constexpr bool __is_repeat_specialization = false;
-
-template <class _Tp, class _Bound>
-inline constexpr bool __is_repeat_specialization<repeat_view<_Tp, _Bound>> = true;
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_REPEAT_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/reverse_view.h b/third_party/libcxx/include/c++/v1/__ranges/reverse_view.h
deleted file mode 100644
index c36ba77..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/reverse_view.h
+++ /dev/null
@@ -1,204 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_REVERSE_VIEW_H
-#define _LIBCPP___RANGES_REVERSE_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/next.h>
-#include <__iterator/reverse_iterator.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <view _View>
- requires bidirectional_range<_View>
-class reverse_view : public view_interface<reverse_view<_View>> {
- // We cache begin() whenever ranges::next is not guaranteed O(1) to provide an
- // amortized O(1) begin() method.
- static constexpr bool _UseCache = !random_access_range<_View> && !common_range<_View>;
- using _Cache _LIBCPP_NODEBUG =
- _If<_UseCache, __non_propagating_cache<reverse_iterator<iterator_t<_View>>>, __empty_cache>;
- _LIBCPP_NO_UNIQUE_ADDRESS _Cache __cached_begin_ = _Cache();
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
-public:
- _LIBCPP_HIDE_FROM_ABI reverse_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit reverse_view(_View __view) : __base_(std::move(__view)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr reverse_iterator<iterator_t<_View>> begin() {
- if constexpr (_UseCache)
- if (__cached_begin_.__has_value())
- return *__cached_begin_;
-
- auto __tmp = std::make_reverse_iterator(ranges::next(ranges::begin(__base_), ranges::end(__base_)));
- if constexpr (_UseCache)
- __cached_begin_.__emplace(__tmp);
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr reverse_iterator<iterator_t<_View>> begin()
- requires common_range<_View>
- {
- return std::make_reverse_iterator(ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires common_range<const _View>
- {
- return std::make_reverse_iterator(ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr reverse_iterator<iterator_t<_View>> end() {
- return std::make_reverse_iterator(ranges::begin(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires common_range<const _View>
- {
- return std::make_reverse_iterator(ranges::begin(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return ranges::size(__base_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return ranges::size(__base_);
- }
-};
-
-template <class _Range>
-reverse_view(_Range&&) -> reverse_view<views::all_t<_Range>>;
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<reverse_view<_Tp>> = enable_borrowed_range<_Tp>;
-
-namespace views {
-namespace __reverse {
-template <class _Tp>
-inline constexpr bool __is_reverse_view = false;
-
-template <class _Tp>
-inline constexpr bool __is_reverse_view<reverse_view<_Tp>> = true;
-
-template <class _Tp>
-inline constexpr bool __is_sized_reverse_subrange = false;
-
-template <class _Iter>
-inline constexpr bool
- __is_sized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, subrange_kind::sized>> =
- true;
-
-template <class _Tp>
-inline constexpr bool __is_unsized_reverse_subrange = false;
-
-template <class _Iter, subrange_kind _Kind>
-inline constexpr bool __is_unsized_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> =
- _Kind == subrange_kind::unsized;
-
-template <class _Tp>
-struct __unwrapped_reverse_subrange {
- using type _LIBCPP_NODEBUG =
- void; // avoid SFINAE-ing out the overload below -- let the concept requirements do it for better diagnostics
-};
-
-template <class _Iter, subrange_kind _Kind>
-struct __unwrapped_reverse_subrange<subrange<reverse_iterator<_Iter>, reverse_iterator<_Iter>, _Kind>> {
- using type _LIBCPP_NODEBUG = subrange<_Iter, _Iter, _Kind>;
-};
-
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Range>
- requires __is_reverse_view<remove_cvref_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(std::forward<_Range>(__range).base())) -> decltype(std::forward<_Range>(__range).base()) {
- return std::forward<_Range>(__range).base();
- }
-
- template <class _Range,
- class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
- requires __is_sized_reverse_subrange<remove_cvref_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size())))
- -> decltype(_UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size())) {
- return _UnwrappedSubrange(__range.end().base(), __range.begin().base(), __range.size());
- }
-
- template <class _Range,
- class _UnwrappedSubrange = typename __unwrapped_reverse_subrange<remove_cvref_t<_Range>>::type>
- requires __is_unsized_reverse_subrange<remove_cvref_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(_UnwrappedSubrange(__range.end().base(), __range.begin().base())))
- -> decltype(_UnwrappedSubrange(__range.end().base(), __range.begin().base())) {
- return _UnwrappedSubrange(__range.end().base(), __range.begin().base());
- }
-
- template <class _Range>
- requires(!__is_reverse_view<remove_cvref_t<_Range>> && !__is_sized_reverse_subrange<remove_cvref_t<_Range>> &&
- !__is_unsized_reverse_subrange<remove_cvref_t<_Range>>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const noexcept(noexcept(reverse_view{
- std::forward<_Range>(__range)})) -> decltype(reverse_view{std::forward<_Range>(__range)}) {
- return reverse_view{std::forward<_Range>(__range)};
- }
-};
-} // namespace __reverse
-
-inline namespace __cpo {
-inline constexpr auto reverse = __reverse::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_REVERSE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/single_view.h b/third_party/libcxx/include/c++/v1/__ranges/single_view.h
deleted file mode 100644
index 213c507..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/single_view.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_SINGLE_VIEW_H
-#define _LIBCPP___RANGES_SINGLE_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__config>
-#include <__cstddef/ptrdiff_t.h>
-#include <__cstddef/size_t.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_object.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-# if _LIBCPP_STD_VER >= 23
-template <move_constructible _Tp>
-# else
-template <copy_constructible _Tp>
-# endif
- requires is_object_v<_Tp>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS single_view : public view_interface<single_view<_Tp>> {
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Tp> __value_;
-
-public:
- _LIBCPP_HIDE_FROM_ABI single_view()
- requires default_initializable<_Tp>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit single_view(const _Tp& __t)
-# if _LIBCPP_STD_VER >= 23
- requires copy_constructible<_Tp>
-# endif
- : __value_(in_place, __t) {
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit single_view(_Tp&& __t) : __value_(in_place, std::move(__t)) {}
-
- template <class... _Args>
- requires constructible_from<_Tp, _Args...>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit single_view(in_place_t, _Args&&... __args)
- : __value_{in_place, std::forward<_Args>(__args)...} {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp* begin() noexcept { return data(); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp* begin() const noexcept { return data(); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp* end() noexcept { return data() + 1; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp* end() const noexcept { return data() + 1; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr bool empty() noexcept { return false; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr size_t size() noexcept { return 1; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp* data() noexcept { return __value_.operator->(); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp* data() const noexcept { return __value_.operator->(); }
-};
-
-template <class _Tp>
-single_view(_Tp) -> single_view<_Tp>;
-
-namespace views {
-namespace __single_view {
-
-struct __fn : __range_adaptor_closure<__fn> {
- template <class _Range>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(single_view<decay_t<_Range&&>>(std::forward<_Range>(__range))))
- -> decltype(single_view<decay_t<_Range&&>>(std::forward<_Range>(__range))) {
- return single_view<decay_t<_Range&&>>(std::forward<_Range>(__range));
- }
-};
-} // namespace __single_view
-
-inline namespace __cpo {
-inline constexpr auto single = __single_view::__fn{};
-} // namespace __cpo
-
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_SINGLE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/size.h b/third_party/libcxx/include/c++/v1/__ranges/size.h
deleted file mode 100644
index 5da3a6f..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/size.h
+++ /dev/null
@@ -1,138 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_SIZE_H
-#define _LIBCPP___RANGES_SIZE_H
-
-#include <__concepts/arithmetic.h>
-#include <__concepts/class_or_enum.h>
-#include <__config>
-#include <__cstddef/ptrdiff_t.h>
-#include <__cstddef/size_t.h>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/make_signed.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/auto_cast.h>
-#include <__utility/declval.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class>
-inline constexpr bool disable_sized_range = false;
-} // namespace ranges
-
-// [range.prim.size]
-
-namespace ranges {
-namespace __size {
-void size() = delete;
-
-template <class _Tp>
-concept __size_enabled = !disable_sized_range<remove_cvref_t<_Tp>>;
-
-template <class _Tp>
-concept __member_size = __size_enabled<_Tp> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(__t.size()) } -> __integer_like;
-};
-
-template <class _Tp>
-concept __unqualified_size =
- __size_enabled<_Tp> && !__member_size<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- { _LIBCPP_AUTO_CAST(size(__t)) } -> __integer_like;
- };
-
-template <class _Tp>
-concept __difference =
- !__member_size<_Tp> && !__unqualified_size<_Tp> && __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
- { ranges::begin(__t) } -> forward_iterator;
- { ranges::end(__t) } -> sized_sentinel_for<decltype(ranges::begin(std::declval<_Tp>()))>;
- };
-
-struct __fn {
- // `[range.prim.size]`: the array case (for rvalues).
- template <class _Tp, size_t _Sz>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr size_t operator()(_Tp (&&)[_Sz]) const noexcept {
- return _Sz;
- }
-
- // `[range.prim.size]`: the array case (for lvalues).
- template <class _Tp, size_t _Sz>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr size_t operator()(_Tp (&)[_Sz]) const noexcept {
- return _Sz;
- }
-
- // `[range.prim.size]`: `auto(t.size())` is a valid expression.
- template <__member_size _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __integer_like auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(__t.size()))) {
- return _LIBCPP_AUTO_CAST(__t.size());
- }
-
- // `[range.prim.size]`: `auto(size(t))` is a valid expression.
- template <__unqualified_size _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __integer_like auto operator()(_Tp&& __t) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(size(__t)))) {
- return _LIBCPP_AUTO_CAST(size(__t));
- }
-
- // [range.prim.size]: the `to-unsigned-like` case.
- template <__difference _Tp>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t) const
- noexcept(noexcept(std::__to_unsigned_like(ranges::end(__t) - ranges::begin(__t))))
- -> decltype(std::__to_unsigned_like(ranges::end(__t) - ranges::begin(__t))) {
- return std::__to_unsigned_like(ranges::end(__t) - ranges::begin(__t));
- }
-};
-
-} // namespace __size
-
-inline namespace __cpo {
-inline constexpr auto size = __size::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-// [range.prim.ssize]
-
-namespace ranges {
-namespace __ssize {
-struct __fn {
- template <class _Tp>
- requires requires(_Tp&& __t) { ranges::size(__t); }
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr integral auto operator()(_Tp&& __t) const
- noexcept(noexcept(ranges::size(__t))) {
- using _Signed = make_signed_t<decltype(ranges::size(__t))>;
- if constexpr (sizeof(ptrdiff_t) > sizeof(_Signed))
- return static_cast<ptrdiff_t>(ranges::size(__t));
- else
- return static_cast<_Signed>(ranges::size(__t));
- }
-};
-} // namespace __ssize
-
-inline namespace __cpo {
-inline constexpr auto ssize = __ssize::__fn{};
-} // namespace __cpo
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_SIZE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/split_view.h b/third_party/libcxx/include/c++/v1/__ranges/split_view.h
deleted file mode 100644
index 2ec908b..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/split_view.h
+++ /dev/null
@@ -1,232 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_SPLIT_VIEW_H
-#define _LIBCPP___RANGES_SPLIT_VIEW_H
-
-#include <__algorithm/ranges_search.h>
-#include <__concepts/constructible.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/ranges_operations.h>
-#include <__iterator/indirectly_comparable.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty.h>
-#include <__ranges/non_propagating_cache.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/single_view.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <forward_range _View, forward_range _Pattern>
- requires view<_View> && view<_Pattern> &&
- indirectly_comparable<iterator_t<_View>, iterator_t<_Pattern>, ranges::equal_to>
-class split_view : public view_interface<split_view<_View, _Pattern>> {
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS _Pattern __pattern_ = _Pattern();
- using _Cache _LIBCPP_NODEBUG = __non_propagating_cache<subrange<iterator_t<_View>>>;
- _Cache __cached_begin_ = _Cache();
-
- template <class, class>
- friend struct __iterator;
-
- template <class, class>
- friend struct __sentinel;
-
- struct __iterator;
- struct __sentinel;
-
- _LIBCPP_HIDE_FROM_ABI constexpr subrange<iterator_t<_View>> __find_next(iterator_t<_View> __it) {
- auto [__begin, __end] = ranges::search(subrange(__it, ranges::end(__base_)), __pattern_);
- if (__begin != ranges::end(__base_) && ranges::empty(__pattern_)) {
- ++__begin;
- ++__end;
- }
- return {__begin, __end};
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI split_view()
- requires default_initializable<_View> && default_initializable<_Pattern>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 split_view(_View __base, _Pattern __pattern)
- : __base_(std::move(__base)), __pattern_(std::move((__pattern))) {}
-
- template <forward_range _Range>
- requires constructible_from<_View, views::all_t<_Range>> &&
- constructible_from<_Pattern, single_view<range_value_t<_Range>>>
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23
- split_view(_Range&& __range, range_value_t<_Range> __elem)
- : __base_(views::all(std::forward<_Range>(__range))), __pattern_(views::single(std::move(__elem))) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator begin() {
- if (!__cached_begin_.__has_value()) {
- __cached_begin_.__emplace(__find_next(ranges::begin(__base_)));
- }
- return {*this, ranges::begin(__base_), *__cached_begin_};
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (common_range<_View>) {
- return __iterator{*this, ranges::end(__base_), {}};
- } else {
- return __sentinel{*this};
- }
- }
-};
-
-template <class _Range, class _Pattern>
-split_view(_Range&&, _Pattern&&) -> split_view<views::all_t<_Range>, views::all_t<_Pattern>>;
-
-template <forward_range _Range>
-split_view(_Range&&, range_value_t<_Range>) -> split_view<views::all_t<_Range>, single_view<range_value_t<_Range>>>;
-
-template <forward_range _View, forward_range _Pattern>
- requires view<_View> && view<_Pattern> &&
- indirectly_comparable<iterator_t<_View>, iterator_t<_Pattern>, ranges::equal_to>
-struct split_view<_View, _Pattern>::__iterator {
-private:
- split_view* __parent_ = nullptr;
- _LIBCPP_NO_UNIQUE_ADDRESS iterator_t<_View> __cur_ = iterator_t<_View>();
- _LIBCPP_NO_UNIQUE_ADDRESS subrange<iterator_t<_View>> __next_ = subrange<iterator_t<_View>>();
- bool __trailing_empty_ = false;
-
- friend struct __sentinel;
-
-public:
- using iterator_concept = forward_iterator_tag;
- using iterator_category = input_iterator_tag;
- using value_type = subrange<iterator_t<_View>>;
- using difference_type = range_difference_t<_View>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(
- split_view<_View, _Pattern>& __parent, iterator_t<_View> __current, subrange<iterator_t<_View>> __next)
- : __parent_(std::addressof(__parent)), __cur_(std::move(__current)), __next_(std::move(__next)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_View> base() const { return __cur_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr value_type operator*() const { return {__cur_, __next_.begin()}; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- __cur_ = __next_.begin();
- if (__cur_ != ranges::end(__parent_->__base_)) {
- __cur_ = __next_.end();
- if (__cur_ == ranges::end(__parent_->__base_)) {
- __trailing_empty_ = true;
- __next_ = {__cur_, __cur_};
- } else {
- __next_ = __parent_->__find_next(__cur_);
- }
- } else {
- __trailing_empty_ = false;
- }
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int) {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y) {
- return __x.__cur_ == __y.__cur_ && __x.__trailing_empty_ == __y.__trailing_empty_;
- }
-};
-
-template <forward_range _View, forward_range _Pattern>
- requires view<_View> && view<_Pattern> &&
- indirectly_comparable<iterator_t<_View>, iterator_t<_Pattern>, ranges::equal_to>
-struct split_view<_View, _Pattern>::__sentinel {
-private:
- _LIBCPP_NO_UNIQUE_ADDRESS sentinel_t<_View> __end_ = sentinel_t<_View>();
-
- _LIBCPP_HIDE_FROM_ABI static constexpr bool __equals(const __iterator& __x, const __sentinel& __y) {
- return __x.__cur_ == __y.__end_ && !__x.__trailing_empty_;
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(split_view<_View, _Pattern>& __parent)
- : __end_(ranges::end(__parent.__base_)) {}
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __sentinel& __y) {
- return __equals(__x, __y);
- }
-};
-
-namespace views {
-namespace __split_view {
-struct __fn {
- // clang-format off
- template <class _Range, class _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
- constexpr auto operator()(_Range&& __range, _Pattern&& __pattern) const
- noexcept(noexcept(split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern))))
- -> decltype( split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern)))
- { return split_view(std::forward<_Range>(__range), std::forward<_Pattern>(__pattern)); }
- // clang-format on
-
- template <class _Pattern>
- requires constructible_from<decay_t<_Pattern>, _Pattern>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pattern&& __pattern) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pattern>, _Pattern>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pattern>(__pattern)));
- }
-};
-} // namespace __split_view
-
-inline namespace __cpo {
-inline constexpr auto split = __split_view::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_SPLIT_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/subrange.h b/third_party/libcxx/include/c++/v1/__ranges/subrange.h
deleted file mode 100644
index 3d94b0a..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/subrange.h
+++ /dev/null
@@ -1,275 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_SUBRANGE_H
-#define _LIBCPP___RANGES_SUBRANGE_H
-
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/copyable.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/different_from.h>
-#include <__config>
-#include <__cstddef/size_t.h>
-#include <__fwd/subrange.h>
-#include <__iterator/advance.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/dangling.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__tuple/tuple_element.h>
-#include <__tuple/tuple_like_no_subrange.h>
-#include <__tuple/tuple_size.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_pointer.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/remove_const.h>
-#include <__type_traits/remove_pointer.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-template <class _From, class _To>
-concept __uses_nonqualification_pointer_conversion =
- is_pointer_v<_From> && is_pointer_v<_To> &&
- !convertible_to<remove_pointer_t<_From> (*)[], remove_pointer_t<_To> (*)[]>;
-
-template <class _From, class _To>
-concept __convertible_to_non_slicing =
- convertible_to<_From, _To> && !__uses_nonqualification_pointer_conversion<decay_t<_From>, decay_t<_To>>;
-
-template <class _Pair, class _Iter, class _Sent>
-concept __pair_like_convertible_from =
- !range<_Pair> && __pair_like_no_subrange<_Pair> && constructible_from<_Pair, _Iter, _Sent> &&
- __convertible_to_non_slicing<_Iter, tuple_element_t<0, _Pair>> && convertible_to<_Sent, tuple_element_t<1, _Pair>>;
-
-template <input_or_output_iterator _Iter,
- sentinel_for<_Iter> _Sent = _Iter,
- subrange_kind _Kind = sized_sentinel_for<_Sent, _Iter> ? subrange_kind::sized : subrange_kind::unsized>
- requires(_Kind == subrange_kind::sized || !sized_sentinel_for<_Sent, _Iter>)
-class subrange : public view_interface<subrange<_Iter, _Sent, _Kind>> {
-public:
- // Note: this is an internal implementation detail that is public only for internal usage.
- static constexpr bool _StoreSize = (_Kind == subrange_kind::sized && !sized_sentinel_for<_Sent, _Iter>);
-
-private:
- static constexpr bool _MustProvideSizeAtConstruction = !_StoreSize; // just to improve compiler diagnostics
- struct _Empty {
- _LIBCPP_HIDE_FROM_ABI constexpr _Empty(auto) noexcept {}
- };
- using _Size _LIBCPP_NODEBUG = conditional_t<_StoreSize, make_unsigned_t<iter_difference_t<_Iter>>, _Empty>;
- _LIBCPP_NO_UNIQUE_ADDRESS _Iter __begin_ = _Iter();
- _LIBCPP_NO_UNIQUE_ADDRESS _Sent __end_ = _Sent();
- _LIBCPP_NO_UNIQUE_ADDRESS _Size __size_ = 0;
-
-public:
- _LIBCPP_HIDE_FROM_ABI subrange()
- requires default_initializable<_Iter>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr subrange(__convertible_to_non_slicing<_Iter> auto __iter, _Sent __sent)
- requires _MustProvideSizeAtConstruction
- : __begin_(std::move(__iter)), __end_(std::move(__sent)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr subrange(
- __convertible_to_non_slicing<_Iter> auto __iter, _Sent __sent, make_unsigned_t<iter_difference_t<_Iter>> __n)
- requires(_Kind == subrange_kind::sized)
- : __begin_(std::move(__iter)), __end_(std::move(__sent)), __size_(__n) {
- if constexpr (sized_sentinel_for<_Sent, _Iter>)
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS((__end_ - __begin_) == static_cast<iter_difference_t<_Iter>>(__n),
- "std::ranges::subrange was passed an invalid size hint");
- }
-
- template <__different_from<subrange> _Range>
- requires borrowed_range<_Range> && __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
- convertible_to<sentinel_t<_Range>, _Sent>
- _LIBCPP_HIDE_FROM_ABI constexpr subrange(_Range&& __range)
- requires(!_StoreSize)
- : subrange(ranges::begin(__range), ranges::end(__range)) {}
-
- template <__different_from<subrange> _Range>
- requires borrowed_range<_Range> && __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
- convertible_to<sentinel_t<_Range>, _Sent>
- _LIBCPP_HIDE_FROM_ABI constexpr subrange(_Range&& __range)
- requires _StoreSize && sized_range<_Range>
- : subrange(__range, ranges::size(__range)) {}
-
- template <borrowed_range _Range>
- requires __convertible_to_non_slicing<iterator_t<_Range>, _Iter> &&
- convertible_to<sentinel_t<_Range>, _Sent>
- _LIBCPP_HIDE_FROM_ABI constexpr subrange(_Range&& __range, make_unsigned_t<iter_difference_t<_Iter>> __n)
- requires(_Kind == subrange_kind::sized)
- : subrange(ranges::begin(__range), ranges::end(__range), __n) {}
-
- template <__pair_like_convertible_from<const _Iter&, const _Sent&> _Pair>
- _LIBCPP_HIDE_FROM_ABI constexpr operator _Pair() const {
- return _Pair(__begin_, __end_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter begin() const
- requires copyable<_Iter>
- {
- return __begin_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter begin()
- requires(!copyable<_Iter>)
- {
- return std::move(__begin_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Sent end() const { return __end_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const { return __begin_ == __end_; }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr make_unsigned_t<iter_difference_t<_Iter>> size() const
- requires(_Kind == subrange_kind::sized)
- {
- if constexpr (_StoreSize)
- return __size_;
- else
- return std::__to_unsigned_like(__end_ - __begin_);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange next(iter_difference_t<_Iter> __n = 1) const&
- requires forward_iterator<_Iter>
- {
- auto __tmp = *this;
- __tmp.advance(__n);
- return __tmp;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange next(iter_difference_t<_Iter> __n = 1) && {
- advance(__n);
- return std::move(*this);
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange prev(iter_difference_t<_Iter> __n = 1) const
- requires bidirectional_iterator<_Iter>
- {
- auto __tmp = *this;
- __tmp.advance(-__n);
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr subrange& advance(iter_difference_t<_Iter> __n) {
- if constexpr (bidirectional_iterator<_Iter>) {
- if (__n < 0) {
- ranges::advance(__begin_, __n);
- if constexpr (_StoreSize)
- __size_ += std::__to_unsigned_like(-__n);
- return *this;
- }
- }
-
- auto __d = __n - ranges::advance(__begin_, __n, __end_);
- if constexpr (_StoreSize)
- __size_ -= std::__to_unsigned_like(__d);
- return *this;
- }
-};
-
-template <input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent>
-subrange(_Iter, _Sent) -> subrange<_Iter, _Sent>;
-
-template <input_or_output_iterator _Iter, sentinel_for<_Iter> _Sent>
-subrange(_Iter, _Sent, make_unsigned_t<iter_difference_t<_Iter>>) -> subrange<_Iter, _Sent, subrange_kind::sized>;
-
-template <borrowed_range _Range>
-subrange(_Range&&)
- -> subrange<iterator_t<_Range>,
- sentinel_t<_Range>,
- (sized_range<_Range> || sized_sentinel_for<sentinel_t<_Range>, iterator_t<_Range>>)
- ? subrange_kind::sized
- : subrange_kind::unsized>;
-
-template <borrowed_range _Range>
-subrange(_Range&&, make_unsigned_t<range_difference_t<_Range>>)
- -> subrange<iterator_t<_Range>, sentinel_t<_Range>, subrange_kind::sized>;
-
-template <size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
- requires((_Index == 0 && copyable<_Iter>) || _Index == 1)
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto get(const subrange<_Iter, _Sent, _Kind>& __subrange) {
- if constexpr (_Index == 0)
- return __subrange.begin();
- else
- return __subrange.end();
-}
-
-template <size_t _Index, class _Iter, class _Sent, subrange_kind _Kind>
- requires(_Index < 2)
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto get(subrange<_Iter, _Sent, _Kind>&& __subrange) {
- if constexpr (_Index == 0)
- return __subrange.begin();
- else
- return __subrange.end();
-}
-
-template <class _Ip, class _Sp, subrange_kind _Kp>
-inline constexpr bool enable_borrowed_range<subrange<_Ip, _Sp, _Kp>> = true;
-
-template <range _Rp>
-using borrowed_subrange_t = _If<borrowed_range<_Rp>, subrange<iterator_t<_Rp>>, dangling>;
-} // namespace ranges
-
-// [range.subrange.general]
-
-using ranges::get;
-
-// [ranges.syn]
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct tuple_size<ranges::subrange<_Ip, _Sp, _Kp>> : integral_constant<size_t, 2> {};
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct tuple_element<0, ranges::subrange<_Ip, _Sp, _Kp>> {
- using type _LIBCPP_NODEBUG = _Ip;
-};
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct tuple_element<1, ranges::subrange<_Ip, _Sp, _Kp>> {
- using type _LIBCPP_NODEBUG = _Sp;
-};
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct tuple_element<0, const ranges::subrange<_Ip, _Sp, _Kp>> {
- using type _LIBCPP_NODEBUG = _Ip;
-};
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct tuple_element<1, const ranges::subrange<_Ip, _Sp, _Kp>> {
- using type _LIBCPP_NODEBUG = _Sp;
-};
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_SUBRANGE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/take_view.h b/third_party/libcxx/include/c++/v1/__ranges/take_view.h
deleted file mode 100644
index 13cb4a2..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/take_view.h
+++ /dev/null
@@ -1,368 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_TAKE_VIEW_H
-#define _LIBCPP___RANGES_TAKE_VIEW_H
-
-#include <__algorithm/min.h>
-#include <__algorithm/ranges_min.h>
-#include <__assert>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__fwd/span.h>
-#include <__fwd/string_view.h>
-#include <__iterator/concepts.h>
-#include <__iterator/counted_iterator.h>
-#include <__iterator/default_sentinel.h>
-#include <__iterator/distance.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/iota_view.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/repeat_view.h>
-#include <__ranges/size.h>
-#include <__ranges/subrange.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/maybe_const.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/auto_cast.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <view _View>
-class take_view : public view_interface<take_view<_View>> {
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- range_difference_t<_View> __count_ = 0;
-
- template <bool>
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI take_view()
- requires default_initializable<_View>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23
- take_view(_View __base, range_difference_t<_View> __count)
- : __base_(std::move(__base)), __count_(__count) {
- _LIBCPP_ASSERT_UNCATEGORIZED(__count >= 0, "count has to be greater than or equal to zero");
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!__simple_view<_View>)
- {
- if constexpr (sized_range<_View>) {
- if constexpr (random_access_range<_View>) {
- return ranges::begin(__base_);
- } else {
- using _DifferenceT = range_difference_t<_View>;
- auto __size = size();
- return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
- }
- } else {
- return counted_iterator(ranges::begin(__base_), __count_);
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View>
- {
- if constexpr (sized_range<const _View>) {
- if constexpr (random_access_range<const _View>) {
- return ranges::begin(__base_);
- } else {
- using _DifferenceT = range_difference_t<const _View>;
- auto __size = size();
- return counted_iterator(ranges::begin(__base_), static_cast<_DifferenceT>(__size));
- }
- } else {
- return counted_iterator(ranges::begin(__base_), __count_);
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View>)
- {
- if constexpr (sized_range<_View>) {
- if constexpr (random_access_range<_View>) {
- return ranges::begin(__base_) + size();
- } else {
- return default_sentinel;
- }
- } else {
- return __sentinel<false>{ranges::end(__base_)};
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View>
- {
- if constexpr (sized_range<const _View>) {
- if constexpr (random_access_range<const _View>) {
- return ranges::begin(__base_) + size();
- } else {
- return default_sentinel;
- }
- } else {
- return __sentinel<true>{ranges::end(__base_)};
- }
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- auto __n = ranges::size(__base_);
- return ranges::min(__n, static_cast<decltype(__n)>(__count_));
- }
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- auto __n = ranges::size(__base_);
- return ranges::min(__n, static_cast<decltype(__n)>(__count_));
- }
-};
-
-template <view _View>
-template <bool _Const>
-class take_view<_View>::__sentinel {
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
- template <bool _OtherConst>
- using _Iter _LIBCPP_NODEBUG = counted_iterator<iterator_t<__maybe_const<_OtherConst, _View>>>;
- _LIBCPP_NO_UNIQUE_ADDRESS sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
- template <bool>
- friend class take_view<_View>::__sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(sentinel_t<_Base> __end) : __end_(std::move(__end)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __s)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__s.__end_)) {}
-
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Base> base() const { return __end_; }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const _Iter<_Const>& __lhs, const __sentinel& __rhs) {
- return __lhs.count() == 0 || __lhs.base() == __rhs.__end_;
- }
-
- template <bool _OtherConst = !_Const>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const _Iter<_OtherConst>& __lhs, const __sentinel& __rhs) {
- return __lhs.count() == 0 || __lhs.base() == __rhs.__end_;
- }
-};
-
-template <class _Range>
-take_view(_Range&&, range_difference_t<_Range>) -> take_view<views::all_t<_Range>>;
-
-template <class _Tp>
-inline constexpr bool enable_borrowed_range<take_view<_Tp>> = enable_borrowed_range<_Tp>;
-
-namespace views {
-namespace __take {
-
-template <class _Tp>
-inline constexpr bool __is_empty_view = false;
-
-template <class _Tp>
-inline constexpr bool __is_empty_view<empty_view<_Tp>> = true;
-
-template <class _Tp>
-inline constexpr bool __is_passthrough_specialization = false;
-
-template <class _Tp, size_t _Extent>
-inline constexpr bool __is_passthrough_specialization<span<_Tp, _Extent>> = true;
-
-template <class _CharT, class _Traits>
-inline constexpr bool __is_passthrough_specialization<basic_string_view<_CharT, _Traits>> = true;
-
-template <class _Iter, class _Sent, subrange_kind _Kind>
-inline constexpr bool __is_passthrough_specialization<subrange<_Iter, _Sent, _Kind>> = true;
-
-template <class _Tp>
-inline constexpr bool __is_iota_specialization = false;
-
-template <class _Np, class _Bound>
-inline constexpr bool __is_iota_specialization<iota_view<_Np, _Bound>> = true;
-
-template <class _Tp>
-struct __passthrough_type;
-
-template <class _Tp, size_t _Extent>
-struct __passthrough_type<span<_Tp, _Extent>> {
- using type _LIBCPP_NODEBUG = span<_Tp>;
-};
-
-template <class _CharT, class _Traits>
-struct __passthrough_type<basic_string_view<_CharT, _Traits>> {
- using type _LIBCPP_NODEBUG = basic_string_view<_CharT, _Traits>;
-};
-
-template <class _Iter, class _Sent, subrange_kind _Kind>
- requires requires { typename subrange<_Iter>; }
-struct __passthrough_type<subrange<_Iter, _Sent, _Kind>> {
- using type _LIBCPP_NODEBUG = subrange<_Iter>;
-};
-
-template <class _Tp>
-using __passthrough_type_t _LIBCPP_NODEBUG = typename __passthrough_type<_Tp>::type;
-
-struct __fn {
- // [range.take.overview]: the `empty_view` case.
- template <class _Range, convertible_to<range_difference_t<_Range>> _Np>
- requires __is_empty_view<remove_cvref_t<_Range>>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&&) const
- noexcept(noexcept(_LIBCPP_AUTO_CAST(std::forward<_Range>(__range))))
- -> decltype(_LIBCPP_AUTO_CAST(std::forward<_Range>(__range))) {
- return _LIBCPP_AUTO_CAST(std::forward<_Range>(__range));
- }
-
- // [range.take.overview]: the `span | basic_string_view | subrange` case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires(!__is_empty_view<_RawRange> && random_access_range<_RawRange> && sized_range<_RawRange> &&
- __is_passthrough_specialization<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto
- operator()(_Range&& __rng, _Np&& __n) const noexcept(noexcept(__passthrough_type_t<_RawRange>(
- ranges::begin(__rng), ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)))))
- -> decltype(__passthrough_type_t<_RawRange>(
- // Note: deliberately not forwarding `__rng` to guard against double moves.
- ranges::begin(__rng),
- ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)))) {
- return __passthrough_type_t<_RawRange>(
- ranges::begin(__rng), ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)));
- }
-
- // [range.take.overview]: the `iota_view` case.
- // clang-format off
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires (!__is_empty_view<_RawRange> &&
- random_access_range<_RawRange> &&
- sized_range<_RawRange> &&
- __is_iota_specialization<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI
- constexpr auto operator()(_Range&& __rng, _Np&& __n) const
- noexcept(noexcept(ranges::iota_view(
- *ranges::begin(__rng),
- *(ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)))
- )))
- -> decltype( ranges::iota_view(
- // Note: deliberately not forwarding `__rng` to guard against double moves.
- *ranges::begin(__rng),
- *(ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)))
- ))
- { return ranges::iota_view(
- *ranges::begin(__rng),
- *(ranges::begin(__rng) + std::min<_Dist>(ranges::distance(__rng), std::forward<_Np>(__n)))
- ); }
-
-#if _LIBCPP_STD_VER >= 23
- // [range.take.overview]: the `repeat_view` "_RawRange models sized_range" case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires(__is_repeat_specialization<_RawRange> && sized_range<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&& __n) const
- noexcept(noexcept(views::repeat(*__range.__value_, std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n)))))
- -> decltype( views::repeat(*__range.__value_, std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n))))
- { return views::repeat(*__range.__value_, std::min<_Dist>(ranges::distance(__range), std::forward<_Np>(__n))); }
-
- // [range.take.overview]: the `repeat_view` "otherwise" case.
- template <class _Range,
- convertible_to<range_difference_t<_Range>> _Np,
- class _RawRange = remove_cvref_t<_Range>,
- class _Dist = range_difference_t<_Range>>
- requires(__is_repeat_specialization<_RawRange> && !sized_range<_RawRange>)
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&& __n) const
- noexcept(noexcept(views::repeat(*__range.__value_, static_cast<_Dist>(__n))))
- -> decltype( views::repeat(*__range.__value_, static_cast<_Dist>(__n)))
- { return views::repeat(*__range.__value_, static_cast<_Dist>(__n)); }
-#endif
- // clang-format on
-
- // [range.take.overview]: the "otherwise" case.
- template <class _Range, convertible_to<range_difference_t<_Range>> _Np, class _RawRange = remove_cvref_t<_Range>>
- // Note: without specifically excluding the other cases, GCC sees this overload as ambiguous with the other
- // overloads.
- requires(!(__is_empty_view<_RawRange> ||
-# if _LIBCPP_STD_VER >= 23
- __is_repeat_specialization<_RawRange> ||
-# endif
- (__is_iota_specialization<_RawRange> && sized_range<_RawRange> && random_access_range<_RawRange>) ||
- (__is_passthrough_specialization<_RawRange> && sized_range<_RawRange> &&
- random_access_range<_RawRange>)))
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Np&& __n) const
- noexcept(noexcept(take_view(std::forward<_Range>(__range), std::forward<_Np>(__n))))
- -> decltype(take_view(std::forward<_Range>(__range), std::forward<_Np>(__n))) {
- return take_view(std::forward<_Range>(__range), std::forward<_Np>(__n));
- }
-
- template <class _Np>
- requires constructible_from<decay_t<_Np>, _Np>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Np&& __n) const
- noexcept(is_nothrow_constructible_v<decay_t<_Np>, _Np>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Np>(__n)));
- }
-};
-
-} // namespace __take
-
-inline namespace __cpo {
-inline constexpr auto take = __take::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_TAKE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/take_while_view.h b/third_party/libcxx/include/c++/v1/__ranges/take_while_view.h
deleted file mode 100644
index 4977f13..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/take_while_view.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_TAKE_WHILE_VIEW_H
-#define _LIBCPP___RANGES_TAKE_WHILE_VIEW_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/invoke.h>
-#include <__iterator/concepts.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/maybe_const.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <view _View, class _Pred>
- requires input_range<_View> && is_object_v<_Pred> && indirect_unary_predicate<const _Pred, iterator_t<_View>>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS take_while_view : public view_interface<take_while_view<_View, _Pred>> {
- template <bool>
- class __sentinel;
-
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Pred> __pred_;
-
-public:
- _LIBCPP_HIDE_FROM_ABI take_while_view()
- requires default_initializable<_View> && default_initializable<_Pred>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 take_while_view(_View __base, _Pred __pred)
- : __base_(std::move(__base)), __pred_(std::in_place, std::move(__pred)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr const _Pred& pred() const { return *__pred_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!__simple_view<_View>)
- {
- return ranges::begin(__base_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _View> && indirect_unary_predicate<const _Pred, iterator_t<const _View>>
- {
- return ranges::begin(__base_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!__simple_view<_View>)
- {
- return __sentinel</*_Const=*/false>(ranges::end(__base_), std::addressof(*__pred_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _View> && indirect_unary_predicate<const _Pred, iterator_t<const _View>>
- {
- return __sentinel</*_Const=*/true>(ranges::end(__base_), std::addressof(*__pred_));
- }
-};
-
-template <class _Range, class _Pred>
-take_while_view(_Range&&, _Pred) -> take_while_view<views::all_t<_Range>, _Pred>;
-
-template <view _View, class _Pred>
- requires input_range<_View> && is_object_v<_Pred> && indirect_unary_predicate<const _Pred, iterator_t<_View>>
-template <bool _Const>
-class take_while_view<_View, _Pred>::__sentinel {
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- sentinel_t<_Base> __end_ = sentinel_t<_Base>();
- const _Pred* __pred_ = nullptr;
-
- friend class __sentinel<!_Const>;
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(sentinel_t<_Base> __end, const _Pred* __pred)
- : __end_(std::move(__end)), __pred_(__pred) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __s)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__s.__end_)), __pred_(__s.__pred_) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Base> base() const { return __end_; }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const iterator_t<_Base>& __x, const __sentinel& __y) {
- return __x == __y.__end_ || !std::invoke(*__y.__pred_, *__x);
- }
-
- template <bool _OtherConst = !_Const>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator==(const iterator_t<__maybe_const<_OtherConst, _View>>& __x, const __sentinel& __y) {
- return __x == __y.__end_ || !std::invoke(*__y.__pred_, *__x);
- }
-};
-
-namespace views {
-namespace __take_while {
-
-struct __fn {
- template <class _Range, class _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Pred&& __pred) const
- noexcept(noexcept(/**/ take_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))))
- -> decltype(/*--*/ take_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred))) {
- return /*-------------*/ take_while_view(std::forward<_Range>(__range), std::forward<_Pred>(__pred));
- }
-
- template <class _Pred>
- requires constructible_from<decay_t<_Pred>, _Pred>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Pred&& __pred) const
- noexcept(is_nothrow_constructible_v<decay_t<_Pred>, _Pred>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Pred>(__pred)));
- }
-};
-
-} // namespace __take_while
-
-inline namespace __cpo {
-inline constexpr auto take_while = __take_while::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_TAKE_WHILE_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/to.h b/third_party/libcxx/include/c++/v1/__ranges/to.h
deleted file mode 100644
index 3a2bc42..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/to.h
+++ /dev/null
@@ -1,248 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_TO_H
-#define _LIBCPP___RANGES_TO_H
-
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__cstddef/ptrdiff_t.h>
-#include <__functional/bind_back.h>
-#include <__iterator/iterator_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/from_range.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/ref_view.h>
-#include <__ranges/size.h>
-#include <__ranges/transform_view.h>
-#include <__type_traits/add_pointer.h>
-#include <__type_traits/is_class.h>
-#include <__type_traits/is_const.h>
-#include <__type_traits/is_union.h>
-#include <__type_traits/is_volatile.h>
-#include <__type_traits/type_identity.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <class _Container>
-constexpr bool __reservable_container =
- sized_range<_Container> && requires(_Container& __c, range_size_t<_Container> __n) {
- __c.reserve(__n);
- { __c.capacity() } -> same_as<decltype(__n)>;
- { __c.max_size() } -> same_as<decltype(__n)>;
- };
-
-template <class _Container, class _Ref>
-constexpr bool __container_appendable = requires(_Container& __c, _Ref&& __ref) {
- requires(
- requires { __c.emplace_back(std::forward<_Ref>(__ref)); } ||
- requires { __c.push_back(std::forward<_Ref>(__ref)); } ||
- requires { __c.emplace(__c.end(), std::forward<_Ref>(__ref)); } ||
- requires { __c.insert(__c.end(), std::forward<_Ref>(__ref)); });
-};
-
-// Note: making this a concept allows short-circuiting the second condition.
-template <class _Container, class _Range>
-concept __try_non_recursive_conversion =
- !input_range<_Container> || convertible_to<range_reference_t<_Range>, range_value_t<_Container>>;
-
-template <class _Container, class _Range, class... _Args>
-concept __constructible_from_iter_pair =
- common_range<_Range> && requires { typename iterator_traits<iterator_t<_Range>>::iterator_category; } &&
- derived_from<typename iterator_traits<iterator_t<_Range>>::iterator_category, input_iterator_tag> &&
- constructible_from<_Container, iterator_t<_Range>, sentinel_t<_Range>, _Args...>;
-
-template <class>
-concept __always_false = false;
-
-// `ranges::to` base template -- the `_Container` type is a simple type template parameter.
-template <class _Container, input_range _Range, class... _Args>
- requires(!view<_Container>)
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Container to(_Range&& __range, _Args&&... __args) {
- // Mandates: C is a cv-unqualified class type.
- static_assert(!is_const_v<_Container>, "The target container cannot be const-qualified, please remove the const");
- static_assert(
- !is_volatile_v<_Container>, "The target container cannot be volatile-qualified, please remove the volatile");
- static_assert(is_class_v<_Container> || is_union_v<_Container>, "The target must be a class type or union type");
- // First see if the non-recursive case applies -- the conversion target is either:
- // - a range with a convertible value type;
- // - a non-range type which might support being created from the input argument(s) (e.g. an `optional`).
- if constexpr (__try_non_recursive_conversion<_Container, _Range>) {
- // Case 1 -- construct directly from the given range.
- if constexpr (constructible_from<_Container, _Range, _Args...>) {
- return _Container(std::forward<_Range>(__range), std::forward<_Args>(__args)...);
- }
-
- // Case 2 -- construct using the `from_range_t` tagged constructor.
- else if constexpr (constructible_from<_Container, from_range_t, _Range, _Args...>) {
- return _Container(from_range, std::forward<_Range>(__range), std::forward<_Args>(__args)...);
- }
-
- // Case 3 -- construct from a begin-end iterator pair.
- else if constexpr (__constructible_from_iter_pair<_Container, _Range, _Args...>) {
- return _Container(ranges::begin(__range), ranges::end(__range), std::forward<_Args>(__args)...);
- }
-
- // Case 4 -- default-construct (or construct from the extra arguments) and insert, reserving the size if possible.
- else if constexpr (constructible_from<_Container, _Args...> &&
- __container_appendable<_Container, range_reference_t<_Range>>) {
- _Container __result(std::forward<_Args>(__args)...);
- if constexpr (sized_range<_Range> && __reservable_container<_Container>) {
- __result.reserve(static_cast<range_size_t<_Container>>(ranges::size(__range)));
- }
-
- for (auto&& __ref : __range) {
- using _Ref = decltype(__ref);
- if constexpr (requires { __result.emplace_back(std::declval<_Ref>()); }) {
- __result.emplace_back(std::forward<_Ref>(__ref));
- } else if constexpr (requires { __result.push_back(std::declval<_Ref>()); }) {
- __result.push_back(std::forward<_Ref>(__ref));
- } else if constexpr (requires { __result.emplace(__result.end(), std::declval<_Ref>()); }) {
- __result.emplace(__result.end(), std::forward<_Ref>(__ref));
- } else {
- static_assert(requires { __result.insert(__result.end(), std::declval<_Ref>()); });
- __result.insert(__result.end(), std::forward<_Ref>(__ref));
- }
- }
- return __result;
-
- } else {
- static_assert(__always_false<_Container>, "ranges::to: unable to convert to the given container type.");
- }
-
- // Try the recursive case.
- } else if constexpr (input_range<range_reference_t<_Range>>) {
- return ranges::to<_Container>(
- ref_view(__range) | views::transform([](auto&& __elem) {
- return ranges::to<range_value_t<_Container>>(std::forward<decltype(__elem)>(__elem));
- }),
- std::forward<_Args>(__args)...);
-
- } else {
- static_assert(__always_false<_Container>, "ranges::to: unable to convert to the given container type.");
- }
-}
-
-template <class _Range>
-struct __minimal_input_iterator {
- using iterator_category = input_iterator_tag;
- using value_type = range_value_t<_Range>;
- using difference_type = ptrdiff_t;
- using pointer = add_pointer_t<range_reference_t<_Range>>;
- using reference = range_reference_t<_Range>;
-
- reference operator*() const;
- pointer operator->() const;
- __minimal_input_iterator& operator++();
- __minimal_input_iterator operator++(int);
- bool operator==(const __minimal_input_iterator&) const;
-};
-
-// Deduces the full type of the container from the given template template parameter.
-template <template <class...> class _Container, input_range _Range, class... _Args>
-struct _Deducer {
- _LIBCPP_HIDE_FROM_ABI static constexpr auto __deduce_func() {
- using _InputIter = __minimal_input_iterator<_Range>;
-
- // Case 1 -- can construct directly from the given range.
- if constexpr (requires { _Container(std::declval<_Range>(), std::declval<_Args>()...); }) {
- using _Result = decltype( //
- _Container(std::declval<_Range>(), std::declval<_Args>()...));
- return type_identity<_Result>{};
-
- // Case 2 -- can construct from the given range using the `from_range_t` tagged constructor.
- } else if constexpr ( //
- requires { _Container(from_range, std::declval<_Range>(), std::declval<_Args>()...); }) {
- using _Result = //
- decltype(_Container(from_range, std::declval<_Range>(), std::declval<_Args>()...));
- return type_identity<_Result>{};
-
- // Case 3 -- can construct from a begin-end iterator pair.
- } else if constexpr ( //
- requires { _Container(std::declval<_InputIter>(), std::declval<_InputIter>(), std::declval<_Args>()...); }) {
- using _Result =
- decltype(_Container(std::declval<_InputIter>(), std::declval<_InputIter>(), std::declval<_Args>()...));
- return type_identity<_Result>{};
-
- } else {
- static_assert(__always_false<_Range>,
- "ranges::to: unable to deduce the container type from the template template argument.");
- }
- }
-
- using type = typename decltype(__deduce_func())::type;
-};
-
-// `ranges::to` specialization -- `_Container` is a template template parameter requiring deduction to figure out the
-// container element type.
-template <template <class...> class _Container, input_range _Range, class... _Args>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto to(_Range&& __range, _Args&&... __args) {
- using _DeduceExpr = typename _Deducer<_Container, _Range, _Args...>::type;
- return ranges::to<_DeduceExpr>(std::forward<_Range>(__range), std::forward<_Args>(__args)...);
-}
-
-// Range adaptor closure object 1 -- wrapping the `ranges::to` version where `_Container` is a simple type template
-// parameter.
-template <class _Container, class... _Args>
- requires(!view<_Container>)
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto to(_Args&&... __args) {
- // Mandates: C is a cv-unqualified class type.
- static_assert(!is_const_v<_Container>, "The target container cannot be const-qualified, please remove the const");
- static_assert(
- !is_volatile_v<_Container>, "The target container cannot be volatile-qualified, please remove the volatile");
- static_assert(is_class_v<_Container> || is_union_v<_Container>, "The target must be a class type or union type");
- auto __to_func = []<input_range _Range, class... _Tail>(_Range&& __range, _Tail&&... __tail) static
- requires requires { //
- /**/ ranges::to<_Container>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...);
- }
- { return ranges::to<_Container>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...); };
-
- return __pipeable(std::__bind_back(__to_func, std::forward<_Args>(__args)...));
-}
-
-// Range adaptor closure object 2 -- wrapping the `ranges::to` version where `_Container` is a template template
-// parameter.
-template <template <class...> class _Container, class... _Args>
-[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto to(_Args&&... __args) {
- // clang-format off
- auto __to_func = []<input_range _Range, class... _Tail,
- class _DeducedExpr = typename _Deducer<_Container, _Range, _Tail...>::type>
- (_Range&& __range, _Tail&& ... __tail) static
- requires requires { //
- /**/ ranges::to<_DeducedExpr>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...);
- }
- {
- return ranges::to<_DeducedExpr>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...);
- };
- // clang-format on
-
- return __pipeable(std::__bind_back(__to_func, std::forward<_Args>(__args)...));
-}
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_TO_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/transform_view.h b/third_party/libcxx/include/c++/v1/__ranges/transform_view.h
deleted file mode 100644
index ab1adf9..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/transform_view.h
+++ /dev/null
@@ -1,419 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_TRANSFORM_VIEW_H
-#define _LIBCPP___RANGES_TRANSFORM_VIEW_H
-
-#include <__compare/three_way_comparable.h>
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__concepts/invocable.h>
-#include <__config>
-#include <__functional/bind_back.h>
-#include <__functional/invoke.h>
-#include <__functional/perfect_forward.h>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/range_adaptor.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__type_traits/conditional.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/invoke.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
-#include <__type_traits/maybe_const.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <class _Fn, class _View>
-concept __regular_invocable_with_range_ref = regular_invocable<_Fn, range_reference_t<_View>>;
-
-template <class _View, class _Fn>
-concept __transform_view_constraints =
- view<_View> && is_object_v<_Fn> && regular_invocable<_Fn&, range_reference_t<_View>> &&
- __referenceable<invoke_result_t<_Fn&, range_reference_t<_View>>>;
-
-# if _LIBCPP_STD_VER >= 23
-template <input_range _View, move_constructible _Fn>
-# else
-template <input_range _View, copy_constructible _Fn>
-# endif
- requires __transform_view_constraints<_View, _Fn>
-class _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS transform_view : public view_interface<transform_view<_View, _Fn>> {
- template <bool>
- class __iterator;
- template <bool>
- class __sentinel;
-
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Fn> __func_;
- _LIBCPP_NO_UNIQUE_ADDRESS _View __base_ = _View();
-
-public:
- _LIBCPP_HIDE_FROM_ABI transform_view()
- requires default_initializable<_View> && default_initializable<_Fn>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr _LIBCPP_EXPLICIT_SINCE_CXX23 transform_view(_View __base, _Fn __func)
- : __func_(std::in_place, std::move(__func)), __base_(std::move(__base)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() const&
- requires copy_constructible<_View>
- {
- return __base_;
- }
- _LIBCPP_HIDE_FROM_ABI constexpr _View base() && { return std::move(__base_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator<false> begin() { return __iterator<false>{*this, ranges::begin(__base_)}; }
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator<true> begin() const
- requires range<const _View> && __regular_invocable_with_range_ref<const _Fn&, const _View>
- {
- return __iterator<true>(*this, ranges::begin(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel<false> end() { return __sentinel<false>(ranges::end(__base_)); }
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator<false> end()
- requires common_range<_View>
- {
- return __iterator<false>(*this, ranges::end(__base_));
- }
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel<true> end() const
- requires range<const _View> && __regular_invocable_with_range_ref<const _Fn&, const _View>
- {
- return __sentinel<true>(ranges::end(__base_));
- }
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator<true> end() const
- requires common_range<const _View> && __regular_invocable_with_range_ref<const _Fn&, const _View>
- {
- return __iterator<true>(*this, ranges::end(__base_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_View>
- {
- return ranges::size(__base_);
- }
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _View>
- {
- return ranges::size(__base_);
- }
-};
-
-template <class _Range, class _Fn>
-transform_view(_Range&&, _Fn) -> transform_view<views::all_t<_Range>, _Fn>;
-
-template <class _View>
-struct __transform_view_iterator_concept {
- using type _LIBCPP_NODEBUG = input_iterator_tag;
-};
-
-template <random_access_range _View>
-struct __transform_view_iterator_concept<_View> {
- using type _LIBCPP_NODEBUG = random_access_iterator_tag;
-};
-
-template <bidirectional_range _View>
-struct __transform_view_iterator_concept<_View> {
- using type _LIBCPP_NODEBUG = bidirectional_iterator_tag;
-};
-
-template <forward_range _View>
-struct __transform_view_iterator_concept<_View> {
- using type _LIBCPP_NODEBUG = forward_iterator_tag;
-};
-
-template <class, class>
-struct __transform_view_iterator_category_base {};
-
-template <forward_range _View, class _Fn>
-struct __transform_view_iterator_category_base<_View, _Fn> {
- using _Cat _LIBCPP_NODEBUG = typename iterator_traits<iterator_t<_View>>::iterator_category;
-
- using iterator_category =
- conditional_t< is_reference_v<invoke_result_t<_Fn&, range_reference_t<_View>>>,
- conditional_t< derived_from<_Cat, contiguous_iterator_tag>, random_access_iterator_tag, _Cat >,
- input_iterator_tag >;
-};
-
-# if _LIBCPP_STD_VER >= 23
-template <input_range _View, move_constructible _Fn>
-# else
-template <input_range _View, copy_constructible _Fn>
-# endif
- requires __transform_view_constraints<_View, _Fn>
-template <bool _Const>
-class transform_view<_View, _Fn>::__iterator
- : public __transform_view_iterator_category_base<_View, __maybe_const<_Const, _Fn>> {
-
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, transform_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- _Parent* __parent_ = nullptr;
-
- template <bool>
- friend class transform_view<_View, _Fn>::__iterator;
-
- template <bool>
- friend class transform_view<_View, _Fn>::__sentinel;
-
-public:
- iterator_t<_Base> __current_ = iterator_t<_Base>();
-
- using iterator_concept = typename __transform_view_iterator_concept<_View>::type;
- using value_type = remove_cvref_t<invoke_result_t<__maybe_const<_Const, _Fn>&, range_reference_t<_Base>>>;
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator()
- requires default_initializable<iterator_t<_Base>>
- = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent& __parent, iterator_t<_Base> __current)
- : __parent_(std::addressof(__parent)), __current_(std::move(__current)) {}
-
- // Note: `__i` should always be `__iterator<false>`, but directly using
- // `__iterator<false>` is ill-formed when `_Const` is false
- // (see http://wg21.link/class.copy.ctor#5).
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<iterator_t<_View>, iterator_t<_Base>>
- : __parent_(__i.__parent_), __current_(std::move(__i.__current_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr const iterator_t<_Base>& base() const& noexcept { return __current_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr iterator_t<_Base> base() && { return std::move(__current_); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const
- noexcept(noexcept(std::invoke(*__parent_->__func_, *__current_))) {
- return std::invoke(*__parent_->__func_, *__current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++__current_; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires forward_range<_Base>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_Base>
- {
- --__current_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_Base>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __n)
- requires random_access_range<_Base>
- {
- __current_ += __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __n)
- requires random_access_range<_Base>
- {
- __current_ -= __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](difference_type __n) const
- noexcept(noexcept(std::invoke(*__parent_->__func_, __current_[__n])))
- requires random_access_range<_Base>
- {
- return std::invoke(*__parent_->__func_, __current_[__n]);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires equality_comparable<iterator_t<_Base>>
- {
- return __x.__current_ == __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_ < __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_ > __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_ <= __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__current_ >= __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base> && three_way_comparable<iterator_t<_Base>>
- {
- return __x.__current_ <=> __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(__iterator __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator{*__i.__parent_, __i.__current_ + __n};
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, __iterator __i)
- requires random_access_range<_Base>
- {
- return __iterator{*__i.__parent_, __i.__current_ + __n};
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(__iterator __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator{*__i.__parent_, __i.__current_ - __n};
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires sized_sentinel_for<iterator_t<_Base>, iterator_t<_Base>>
- {
- return __x.__current_ - __y.__current_;
- }
-};
-
-# if _LIBCPP_STD_VER >= 23
-template <input_range _View, move_constructible _Fn>
-# else
-template <input_range _View, copy_constructible _Fn>
-# endif
- requires __transform_view_constraints<_View, _Fn>
-template <bool _Const>
-class transform_view<_View, _Fn>::__sentinel {
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, transform_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _View>;
-
- sentinel_t<_Base> __end_ = sentinel_t<_Base>();
-
- template <bool>
- friend class transform_view<_View, _Fn>::__iterator;
-
- template <bool>
- friend class transform_view<_View, _Fn>::__sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(sentinel_t<_Base> __end) : __end_(__end) {}
-
- // Note: `__i` should always be `__sentinel<false>`, but directly using
- // `__sentinel<false>` is ill-formed when `_Const` is false
- // (see http://wg21.link/class.copy.ctor#5).
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __i)
- requires _Const && convertible_to<sentinel_t<_View>, sentinel_t<_Base>>
- : __end_(std::move(__i.__end_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr sentinel_t<_Base> base() const { return __end_; }
-
- template <bool _OtherConst>
- requires sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__current_ == __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__current_ - __y.__end_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<__maybe_const<_OtherConst, _View>>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _View>>
- operator-(const __sentinel& __x, const __iterator<_OtherConst>& __y) {
- return __x.__end_ - __y.__current_;
- }
-};
-
-namespace views {
-namespace __transform {
-struct __fn {
- template <class _Range, class _Fn>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range, _Fn&& __f) const
- noexcept(noexcept(transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f))))
- -> decltype(transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f))) {
- return transform_view(std::forward<_Range>(__range), std::forward<_Fn>(__f));
- }
-
- template <class _Fn>
- requires constructible_from<decay_t<_Fn>, _Fn>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Fn&& __f) const
- noexcept(is_nothrow_constructible_v<decay_t<_Fn>, _Fn>) {
- return __pipeable(std::__bind_back(*this, std::forward<_Fn>(__f)));
- }
-};
-} // namespace __transform
-
-inline namespace __cpo {
-inline constexpr auto transform = __transform::__fn{};
-} // namespace __cpo
-} // namespace views
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_TRANSFORM_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/view_interface.h b/third_party/libcxx/include/c++/v1/__ranges/view_interface.h
deleted file mode 100644
index 37b2c9e..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/view_interface.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_VIEW_INTERFACE_H
-#define _LIBCPP___RANGES_VIEW_INTERFACE_H
-
-#include <__assert>
-#include <__concepts/derived_from.h>
-#include <__concepts/same_as.h>
-#include <__config>
-#include <__iterator/concepts.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/prev.h>
-#include <__memory/pointer_traits.h>
-#include <__ranges/access.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty.h>
-#include <__ranges/size.h>
-#include <__type_traits/is_class.h>
-#include <__type_traits/make_unsigned.h>
-#include <__type_traits/remove_cv.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-template <class _Derived>
- requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>
-class view_interface {
- _LIBCPP_HIDE_FROM_ABI constexpr _Derived& __derived() noexcept {
- static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
- return static_cast<_Derived&>(*this);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Derived const& __derived() const noexcept {
- static_assert(sizeof(_Derived) && derived_from<_Derived, view_interface> && view<_Derived>);
- return static_cast<_Derived const&>(*this);
- }
-
-public:
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty()
- requires sized_range<_D2> || forward_range<_D2>
- {
- if constexpr (sized_range<_D2>) {
- return ranges::size(__derived()) == 0;
- } else {
- return ranges::begin(__derived()) == ranges::end(__derived());
- }
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
- requires sized_range<const _D2> || forward_range<const _D2>
- {
- if constexpr (sized_range<const _D2>) {
- return ranges::size(__derived()) == 0;
- } else {
- return ranges::begin(__derived()) == ranges::end(__derived());
- }
- }
-
- template <class _D2 = _Derived>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool()
- requires requires(_D2& __t) { ranges::empty(__t); }
- {
- return !ranges::empty(__derived());
- }
-
- template <class _D2 = _Derived>
- _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const
- requires requires(const _D2& __t) { ranges::empty(__t); }
- {
- return !ranges::empty(__derived());
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto data()
- requires contiguous_iterator<iterator_t<_D2>>
- {
- return std::to_address(ranges::begin(__derived()));
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto data() const
- requires range<const _D2> && contiguous_iterator<iterator_t<const _D2>>
- {
- return std::to_address(ranges::begin(__derived()));
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires forward_range<_D2> && sized_sentinel_for<sentinel_t<_D2>, iterator_t<_D2>>
- {
- return std::__to_unsigned_like(ranges::end(__derived()) - ranges::begin(__derived()));
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires forward_range<const _D2> && sized_sentinel_for<sentinel_t<const _D2>, iterator_t<const _D2>>
- {
- return std::__to_unsigned_like(ranges::end(__derived()) - ranges::begin(__derived()));
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) front()
- requires forward_range<_D2>
- {
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- !empty(), "Precondition `!empty()` not satisfied. `.front()` called on an empty view.");
- return *ranges::begin(__derived());
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) front() const
- requires forward_range<const _D2>
- {
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- !empty(), "Precondition `!empty()` not satisfied. `.front()` called on an empty view.");
- return *ranges::begin(__derived());
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) back()
- requires bidirectional_range<_D2> && common_range<_D2>
- {
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- !empty(), "Precondition `!empty()` not satisfied. `.back()` called on an empty view.");
- return *ranges::prev(ranges::end(__derived()));
- }
-
- template <class _D2 = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) back() const
- requires bidirectional_range<const _D2> && common_range<const _D2>
- {
- _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- !empty(), "Precondition `!empty()` not satisfied. `.back()` called on an empty view.");
- return *ranges::prev(ranges::end(__derived()));
- }
-
- template <random_access_range _RARange = _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](range_difference_t<_RARange> __index) {
- return ranges::begin(__derived())[__index];
- }
-
- template <random_access_range _RARange = const _Derived>
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](range_difference_t<_RARange> __index) const {
- return ranges::begin(__derived())[__index];
- }
-};
-
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_VIEW_INTERFACE_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/views.h b/third_party/libcxx/include/c++/v1/__ranges/views.h
deleted file mode 100644
index a4de2a5..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/views.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_VIEWS
-#define _LIBCPP___RANGES_VIEWS
-
-#include <__config>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 20
-
-namespace ranges {
-
-namespace views {}
-
-} // namespace ranges
-
-namespace views = ranges::views;
-
-#endif // _LIBCPP_STD_VER >= 20
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___RANGES_VIEWS
diff --git a/third_party/libcxx/include/c++/v1/__ranges/zip_transform_view.h b/third_party/libcxx/include/c++/v1/__ranges/zip_transform_view.h
deleted file mode 100644
index 07aa182..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/zip_transform_view.h
+++ /dev/null
@@ -1,357 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ZIP_TRANSFORM_VIEW_H
-#define _LIBCPP___RANGES_ZIP_TRANSFORM_VIEW_H
-
-#include <__config>
-
-#include <__concepts/constructible.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/derived_from.h>
-#include <__concepts/equality_comparable.h>
-#include <__concepts/invocable.h>
-#include <__functional/invoke.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iterator_traits.h>
-#include <__memory/addressof.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/movable_box.h>
-#include <__ranges/view_interface.h>
-#include <__ranges/zip_view.h>
-#include <__type_traits/decay.h>
-#include <__type_traits/invoke.h>
-#include <__type_traits/is_object.h>
-#include <__type_traits/is_reference.h>
-#include <__type_traits/is_referenceable.h>
-#include <__type_traits/maybe_const.h>
-#include <__type_traits/remove_cvref.h>
-#include <__utility/forward.h>
-#include <__utility/in_place.h>
-#include <__utility/move.h>
-#include <tuple> // for std::apply
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <move_constructible _Fn, input_range... _Views>
- requires(view<_Views> && ...) &&
- (sizeof...(_Views) > 0) && is_object_v<_Fn> && regular_invocable<_Fn&, range_reference_t<_Views>...> &&
- __referenceable<invoke_result_t<_Fn&, range_reference_t<_Views>...>>
-class zip_transform_view : public view_interface<zip_transform_view<_Fn, _Views...>> {
- _LIBCPP_NO_UNIQUE_ADDRESS zip_view<_Views...> __zip_;
- _LIBCPP_NO_UNIQUE_ADDRESS __movable_box<_Fn> __fun_;
-
- using _InnerView _LIBCPP_NODEBUG = zip_view<_Views...>;
- template <bool _Const>
- using __ziperator _LIBCPP_NODEBUG = iterator_t<__maybe_const<_Const, _InnerView>>;
- template <bool _Const>
- using __zentinel _LIBCPP_NODEBUG = sentinel_t<__maybe_const<_Const, _InnerView>>;
-
- template <bool>
- class __iterator;
-
- template <bool>
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI zip_transform_view() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit zip_transform_view(_Fn __fun, _Views... __views)
- : __zip_(std::move(__views)...), __fun_(in_place, std::move(__fun)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() { return __iterator<false>(*this, __zip_.begin()); }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires range<const _InnerView> && regular_invocable<const _Fn&, range_reference_t<const _Views>...>
- {
- return __iterator<true>(*this, __zip_.begin());
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() {
- if constexpr (common_range<_InnerView>) {
- return __iterator<false>(*this, __zip_.end());
- } else {
- return __sentinel<false>(__zip_.end());
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires range<const _InnerView> && regular_invocable<const _Fn&, range_reference_t<const _Views>...>
- {
- if constexpr (common_range<const _InnerView>) {
- return __iterator<true>(*this, __zip_.end());
- } else {
- return __sentinel<true>(__zip_.end());
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires sized_range<_InnerView>
- {
- return __zip_.size();
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires sized_range<const _InnerView>
- {
- return __zip_.size();
- }
-};
-
-template <class _Fn, class... _Ranges>
-zip_transform_view(_Fn, _Ranges&&...) -> zip_transform_view<_Fn, views::all_t<_Ranges>...>;
-
-template <bool _Const, class _Fn, class... _Views>
-struct __zip_transform_iterator_category_base {};
-
-template <bool _Const, class _Fn, class... _Views>
- requires forward_range<__maybe_const<_Const, zip_view<_Views...>>>
-struct __zip_transform_iterator_category_base<_Const, _Fn, _Views...> {
-private:
- template <class _View>
- using __tag _LIBCPP_NODEBUG = typename iterator_traits<iterator_t<__maybe_const<_Const, _View>>>::iterator_category;
-
- static consteval auto __get_iterator_category() {
- if constexpr (!is_reference_v<invoke_result_t<__maybe_const<_Const, _Fn>&,
- range_reference_t<__maybe_const<_Const, _Views>>...>>) {
- return input_iterator_tag();
- } else if constexpr ((derived_from<__tag<_Views>, random_access_iterator_tag> && ...)) {
- return random_access_iterator_tag();
- } else if constexpr ((derived_from<__tag<_Views>, bidirectional_iterator_tag> && ...)) {
- return bidirectional_iterator_tag();
- } else if constexpr ((derived_from<__tag<_Views>, forward_iterator_tag> && ...)) {
- return forward_iterator_tag();
- } else {
- return input_iterator_tag();
- }
- }
-
-public:
- using iterator_category = decltype(__get_iterator_category());
-};
-
-template <move_constructible _Fn, input_range... _Views>
- requires(view<_Views> && ...) &&
- (sizeof...(_Views) > 0) && is_object_v<_Fn> && regular_invocable<_Fn&, range_reference_t<_Views>...> &&
- __referenceable<invoke_result_t<_Fn&, range_reference_t<_Views>...>>
-template <bool _Const>
-class zip_transform_view<_Fn, _Views...>::__iterator
- : public __zip_transform_iterator_category_base<_Const, _Fn, _Views...> {
- using _Parent _LIBCPP_NODEBUG = __maybe_const<_Const, zip_transform_view>;
- using _Base _LIBCPP_NODEBUG = __maybe_const<_Const, _InnerView>;
-
- friend zip_transform_view<_Fn, _Views...>;
-
- _Parent* __parent_ = nullptr;
- __ziperator<_Const> __inner_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(_Parent& __parent, __ziperator<_Const> __inner)
- : __parent_(std::addressof(__parent)), __inner_(std::move(__inner)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto __get_deref_and_invoke() const noexcept {
- return [&__fun = *__parent_->__fun_](const auto&... __iters) noexcept(noexcept(std::invoke(
- *__parent_->__fun_, *__iters...))) -> decltype(auto) { return std::invoke(__fun, *__iters...); };
- }
-
-public:
- using iterator_concept = typename __ziperator<_Const>::iterator_concept;
- using value_type =
- remove_cvref_t<invoke_result_t<__maybe_const<_Const, _Fn>&, range_reference_t<__maybe_const<_Const, _Views>>...>>;
- using difference_type = range_difference_t<_Base>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && convertible_to<__ziperator<false>, __ziperator<_Const>>
- : __parent_(__i.__parent_), __inner_(std::move(__i.__inner_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator*() const
- noexcept(noexcept(std::apply(__get_deref_and_invoke(), __zip_view_iterator_access::__get_underlying(__inner_)))) {
- return std::apply(__get_deref_and_invoke(), __zip_view_iterator_access::__get_underlying(__inner_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ++__inner_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires forward_range<_Base>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires bidirectional_range<_Base>
- {
- --__inner_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires bidirectional_range<_Base>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __x)
- requires random_access_range<_Base>
- {
- __inner_ += __x;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __x)
- requires random_access_range<_Base>
- {
- __inner_ -= __x;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator[](difference_type __n) const
- requires random_access_range<_Base>
- {
- return std::apply(
- [&]<class... _Is>(const _Is&... __iters) -> decltype(auto) {
- return std::invoke(*__parent_->__fun_, __iters[iter_difference_t<_Is>(__n)]...);
- },
- __zip_view_iterator_access::__get_underlying(__inner_));
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires equality_comparable<__ziperator<_Const>>
- {
- return __x.__inner_ == __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires random_access_range<_Base>
- {
- return __x.__inner_ <=> __y.__inner_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, const __iterator& __i)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(const __iterator& __i, difference_type __n)
- requires random_access_range<_Base>
- {
- return __iterator(*__i.__parent_, __i.__inner_ - __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires sized_sentinel_for<__ziperator<_Const>, __ziperator<_Const>>
- {
- return __x.__inner_ - __y.__inner_;
- }
-};
-
-template <move_constructible _Fn, input_range... _Views>
- requires(view<_Views> && ...) &&
- (sizeof...(_Views) > 0) && is_object_v<_Fn> && regular_invocable<_Fn&, range_reference_t<_Views>...> &&
- __referenceable<invoke_result_t<_Fn&, range_reference_t<_Views>...>>
-template <bool _Const>
-class zip_transform_view<_Fn, _Views...>::__sentinel {
- __zentinel<_Const> __inner_;
-
- friend zip_transform_view<_Fn, _Views...>;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(__zentinel<_Const> __inner) : __inner_(__inner) {}
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __i)
- requires _Const && convertible_to<__zentinel<false>, __zentinel<_Const>>
- : __inner_(__i.__inner_) {}
-
- template <bool _OtherConst>
- requires sentinel_for<__zentinel<_Const>, __ziperator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__inner_ == __y.__inner_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<__zentinel<_Const>, __ziperator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _InnerView>>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return __x.__inner_ - __y.__inner_;
- }
-
- template <bool _OtherConst>
- requires sized_sentinel_for<__zentinel<_Const>, __ziperator<_OtherConst>>
- _LIBCPP_HIDE_FROM_ABI friend constexpr range_difference_t<__maybe_const<_OtherConst, _InnerView>>
- operator-(const __sentinel& __x, const __iterator<_OtherConst>& __y) {
- return __x.__inner_ - __y.__inner_;
- }
-};
-
-namespace views {
-namespace __zip_transform {
-
-struct __fn {
- template <class _Fn>
- requires(move_constructible<decay_t<_Fn>> && regular_invocable<decay_t<_Fn>&> &&
- is_object_v<invoke_result_t<decay_t<_Fn>&>>)
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Fn&&) const
- noexcept(noexcept(auto(views::empty<decay_t<invoke_result_t<decay_t<_Fn>&>>>))) {
- return views::empty<decay_t<invoke_result_t<decay_t<_Fn>&>>>;
- }
-
- template <class _Fn, class... _Ranges>
- requires(sizeof...(_Ranges) > 0)
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Fn&& __fun, _Ranges&&... __rs) const
- noexcept(noexcept(zip_transform_view(std::forward<_Fn>(__fun), std::forward<_Ranges>(__rs)...)))
- -> decltype(zip_transform_view(std::forward<_Fn>(__fun), std::forward<_Ranges>(__rs)...)) {
- return zip_transform_view(std::forward<_Fn>(__fun), std::forward<_Ranges>(__rs)...);
- }
-};
-
-} // namespace __zip_transform
-inline namespace __cpo {
-inline constexpr auto zip_transform = __zip_transform::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ZIP_TRANSFORM_VIEW_H
diff --git a/third_party/libcxx/include/c++/v1/__ranges/zip_view.h b/third_party/libcxx/include/c++/v1/__ranges/zip_view.h
deleted file mode 100644
index bea64c4..0000000
--- a/third_party/libcxx/include/c++/v1/__ranges/zip_view.h
+++ /dev/null
@@ -1,499 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___RANGES_ZIP_VIEW_H
-#define _LIBCPP___RANGES_ZIP_VIEW_H
-
-#include <__config>
-
-#include <__algorithm/ranges_min.h>
-#include <__compare/three_way_comparable.h>
-#include <__concepts/convertible_to.h>
-#include <__concepts/equality_comparable.h>
-#include <__functional/invoke.h>
-#include <__functional/operations.h>
-#include <__iterator/concepts.h>
-#include <__iterator/incrementable_traits.h>
-#include <__iterator/iter_move.h>
-#include <__iterator/iter_swap.h>
-#include <__iterator/iterator_traits.h>
-#include <__iterator/product_iterator.h>
-#include <__ranges/access.h>
-#include <__ranges/all.h>
-#include <__ranges/concepts.h>
-#include <__ranges/empty_view.h>
-#include <__ranges/enable_borrowed_range.h>
-#include <__ranges/size.h>
-#include <__ranges/view_interface.h>
-#include <__tuple/tuple_transform.h>
-#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/make_unsigned.h>
-#include <__utility/declval.h>
-#include <__utility/forward.h>
-#include <__utility/integer_sequence.h>
-#include <__utility/move.h>
-#include <tuple>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_PUSH_MACROS
-#include <__undef_macros>
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-#if _LIBCPP_STD_VER >= 23
-
-namespace ranges {
-
-template <class... _Ranges>
-concept __zip_is_common =
- (sizeof...(_Ranges) == 1 && (common_range<_Ranges> && ...)) ||
- (!(bidirectional_range<_Ranges> && ...) && (common_range<_Ranges> && ...)) ||
- ((random_access_range<_Ranges> && ...) && (sized_range<_Ranges> && ...));
-
-template <class _Fun, class _Tuple>
-_LIBCPP_HIDE_FROM_ABI constexpr void __tuple_for_each(_Fun&& __f, _Tuple&& __tuple) {
- std::apply(
- [&]<class... _Types>(_Types&&... __elements) {
- (static_cast<void>(std::invoke(__f, std::forward<_Types>(__elements))), ...);
- },
- std::forward<_Tuple>(__tuple));
-}
-
-template <class _Fun, class _Tuple1, class _Tuple2, size_t... _Indices>
-_LIBCPP_HIDE_FROM_ABI constexpr tuple<
- invoke_result_t<_Fun&,
- typename tuple_element<_Indices, remove_cvref_t<_Tuple1>>::type,
- typename tuple_element<_Indices, remove_cvref_t<_Tuple2>>::type>...>
-__tuple_zip_transform(_Fun&& __f, _Tuple1&& __tuple1, _Tuple2&& __tuple2, index_sequence<_Indices...>) {
- return {std::invoke(__f,
- std::get<_Indices>(std::forward<_Tuple1>(__tuple1)),
- std::get<_Indices>(std::forward<_Tuple2>(__tuple2)))...};
-}
-
-template <class _Fun, class _Tuple1, class _Tuple2>
-_LIBCPP_HIDE_FROM_ABI constexpr auto __tuple_zip_transform(_Fun&& __f, _Tuple1&& __tuple1, _Tuple2&& __tuple2) {
- return ranges::__tuple_zip_transform(
- __f,
- std::forward<_Tuple1>(__tuple1),
- std::forward<_Tuple2>(__tuple2),
- std::make_index_sequence<tuple_size<remove_cvref_t<_Tuple1>>::value>());
-}
-
-template <class _Fun, class _Tuple1, class _Tuple2, size_t... _Indices>
-_LIBCPP_HIDE_FROM_ABI constexpr void
-__tuple_zip_for_each(_Fun&& __f, _Tuple1&& __tuple1, _Tuple2&& __tuple2, index_sequence<_Indices...>) {
- (std::invoke(
- __f, std::get<_Indices>(std::forward<_Tuple1>(__tuple1)), std::get<_Indices>(std::forward<_Tuple2>(__tuple2))),
- ...);
-}
-
-template <class _Fun, class _Tuple1, class _Tuple2>
-_LIBCPP_HIDE_FROM_ABI constexpr auto __tuple_zip_for_each(_Fun&& __f, _Tuple1&& __tuple1, _Tuple2&& __tuple2) {
- return ranges::__tuple_zip_for_each(
- __f,
- std::forward<_Tuple1>(__tuple1),
- std::forward<_Tuple2>(__tuple2),
- std::make_index_sequence<tuple_size<remove_cvref_t<_Tuple1>>::value>());
-}
-
-template <class _Tuple1, class _Tuple2>
-_LIBCPP_HIDE_FROM_ABI constexpr bool __tuple_any_equals(const _Tuple1& __tuple1, const _Tuple2& __tuple2) {
- const auto __equals = ranges::__tuple_zip_transform(std::equal_to<>(), __tuple1, __tuple2);
- return std::apply([](auto... __bools) { return (__bools || ...); }, __equals);
-}
-
-// abs in cstdlib is not constexpr
-// TODO : remove __abs once P0533R9 is implemented.
-template <class _Tp>
-_LIBCPP_HIDE_FROM_ABI constexpr _Tp __abs(_Tp __t) {
- return __t < 0 ? -__t : __t;
-}
-
-template <input_range... _Views>
- requires(view<_Views> && ...) && (sizeof...(_Views) > 0)
-class zip_view : public view_interface<zip_view<_Views...>> {
- _LIBCPP_NO_UNIQUE_ADDRESS tuple<_Views...> __views_;
-
- template <bool>
- class __iterator;
-
- template <bool>
- class __sentinel;
-
-public:
- _LIBCPP_HIDE_FROM_ABI zip_view() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit zip_view(_Views... __views) : __views_(std::move(__views)...) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin()
- requires(!(__simple_view<_Views> && ...))
- {
- return __iterator<false>(std::__tuple_transform(ranges::begin, __views_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto begin() const
- requires(range<const _Views> && ...)
- {
- return __iterator<true>(std::__tuple_transform(ranges::begin, __views_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end()
- requires(!(__simple_view<_Views> && ...))
- {
- if constexpr (!__zip_is_common<_Views...>) {
- return __sentinel<false>(std::__tuple_transform(ranges::end, __views_));
- } else if constexpr ((random_access_range<_Views> && ...)) {
- return begin() + iter_difference_t<__iterator<false>>(size());
- } else {
- return __iterator<false>(std::__tuple_transform(ranges::end, __views_));
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto end() const
- requires(range<const _Views> && ...)
- {
- if constexpr (!__zip_is_common<const _Views...>) {
- return __sentinel<true>(std::__tuple_transform(ranges::end, __views_));
- } else if constexpr ((random_access_range<const _Views> && ...)) {
- return begin() + iter_difference_t<__iterator<true>>(size());
- } else {
- return __iterator<true>(std::__tuple_transform(ranges::end, __views_));
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size()
- requires(sized_range<_Views> && ...)
- {
- return std::apply(
- [](auto... __sizes) {
- using _CT = make_unsigned_t<common_type_t<decltype(__sizes)...>>;
- return ranges::min({_CT(__sizes)...});
- },
- std::__tuple_transform(ranges::size, __views_));
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto size() const
- requires(sized_range<const _Views> && ...)
- {
- return std::apply(
- [](auto... __sizes) {
- using _CT = make_unsigned_t<common_type_t<decltype(__sizes)...>>;
- return ranges::min({_CT(__sizes)...});
- },
- std::__tuple_transform(ranges::size, __views_));
- }
-};
-
-template <class... _Ranges>
-zip_view(_Ranges&&...) -> zip_view<views::all_t<_Ranges>...>;
-
-template <bool _Const, class... _Views>
-concept __zip_all_random_access = (random_access_range<__maybe_const<_Const, _Views>> && ...);
-
-template <bool _Const, class... _Views>
-concept __zip_all_bidirectional = (bidirectional_range<__maybe_const<_Const, _Views>> && ...);
-
-template <bool _Const, class... _Views>
-concept __zip_all_forward = (forward_range<__maybe_const<_Const, _Views>> && ...);
-
-template <bool _Const, class... _Views>
-consteval auto __get_zip_view_iterator_tag() {
- if constexpr (__zip_all_random_access<_Const, _Views...>) {
- return random_access_iterator_tag();
- } else if constexpr (__zip_all_bidirectional<_Const, _Views...>) {
- return bidirectional_iterator_tag();
- } else if constexpr (__zip_all_forward<_Const, _Views...>) {
- return forward_iterator_tag();
- } else {
- return input_iterator_tag();
- }
-}
-
-template <bool _Const, class... _Views>
-struct __zip_view_iterator_category_base {};
-
-template <bool _Const, class... _Views>
- requires __zip_all_forward<_Const, _Views...>
-struct __zip_view_iterator_category_base<_Const, _Views...> {
- using iterator_category = input_iterator_tag;
-};
-
-struct __zip_view_iterator_access {
- template <class _Iter>
- _LIBCPP_HIDE_FROM_ABI static constexpr decltype(auto) __get_underlying(_Iter& __iter) noexcept {
- return (__iter.__current_);
- }
-};
-
-template <input_range... _Views>
- requires(view<_Views> && ...) && (sizeof...(_Views) > 0)
-template <bool _Const>
-class zip_view<_Views...>::__iterator : public __zip_view_iterator_category_base<_Const, _Views...> {
- tuple<iterator_t<__maybe_const<_Const, _Views>>...> __current_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(tuple<iterator_t<__maybe_const<_Const, _Views>>...> __current)
- : __current_(std::move(__current)) {}
-
- template <bool>
- friend class zip_view<_Views...>::__iterator;
-
- template <bool>
- friend class zip_view<_Views...>::__sentinel;
-
- friend class zip_view<_Views...>;
-
- static constexpr bool __is_zip_view_iterator = true;
-
- friend struct __product_iterator_traits<__iterator>;
- friend __zip_view_iterator_access;
-
-public:
- using iterator_concept = decltype(ranges::__get_zip_view_iterator_tag<_Const, _Views...>());
- using value_type = tuple<range_value_t<__maybe_const<_Const, _Views>>...>;
- using difference_type = common_type_t<range_difference_t<__maybe_const<_Const, _Views>>...>;
-
- _LIBCPP_HIDE_FROM_ABI __iterator() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator(__iterator<!_Const> __i)
- requires _Const && (convertible_to<iterator_t<_Views>, iterator_t<__maybe_const<_Const, _Views>>> && ...)
- : __current_(std::move(__i.__current_)) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator*() const {
- return std::__tuple_transform([](auto& __i) -> decltype(auto) { return *__i; }, __current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator++() {
- ranges::__tuple_for_each([](auto& __i) { ++__i; }, __current_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr void operator++(int) { ++*this; }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator++(int)
- requires __zip_all_forward<_Const, _Views...>
- {
- auto __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator--()
- requires __zip_all_bidirectional<_Const, _Views...>
- {
- ranges::__tuple_for_each([](auto& __i) { --__i; }, __current_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator operator--(int)
- requires __zip_all_bidirectional<_Const, _Views...>
- {
- auto __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator+=(difference_type __x)
- requires __zip_all_random_access<_Const, _Views...>
- {
- ranges::__tuple_for_each([&]<class _Iter>(_Iter& __i) { __i += iter_difference_t<_Iter>(__x); }, __current_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __iterator& operator-=(difference_type __x)
- requires __zip_all_random_access<_Const, _Views...>
- {
- ranges::__tuple_for_each([&]<class _Iter>(_Iter& __i) { __i -= iter_difference_t<_Iter>(__x); }, __current_);
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator[](difference_type __n) const
- requires __zip_all_random_access<_Const, _Views...>
- {
- return std::__tuple_transform(
- [&]<class _Iter>(_Iter& __i) -> decltype(auto) { return __i[iter_difference_t<_Iter>(__n)]; }, __current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator& __x, const __iterator& __y)
- requires(equality_comparable<iterator_t<__maybe_const<_Const, _Views>>> && ...)
- {
- if constexpr (__zip_all_bidirectional<_Const, _Views...>) {
- return __x.__current_ == __y.__current_;
- } else {
- return ranges::__tuple_any_equals(__x.__current_, __y.__current_);
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const __iterator& __x, const __iterator& __y)
- requires __zip_all_random_access<_Const, _Views...>
- {
- return __x.__current_ <=> __y.__current_;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(const __iterator& __i, difference_type __n)
- requires __zip_all_random_access<_Const, _Views...>
- {
- auto __r = __i;
- __r += __n;
- return __r;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator+(difference_type __n, const __iterator& __i)
- requires __zip_all_random_access<_Const, _Views...>
- {
- return __i + __n;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr __iterator operator-(const __iterator& __i, difference_type __n)
- requires __zip_all_random_access<_Const, _Views...>
- {
- auto __r = __i;
- __r -= __n;
- return __r;
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr difference_type operator-(const __iterator& __x, const __iterator& __y)
- requires(sized_sentinel_for<iterator_t<__maybe_const<_Const, _Views>>, iterator_t<__maybe_const<_Const, _Views>>> &&
- ...)
- {
- const auto __diffs = ranges::__tuple_zip_transform(minus<>(), __x.__current_, __y.__current_);
- return std::apply(
- [](auto... __ds) {
- return ranges::min({difference_type(__ds)...}, [](auto __a, auto __b) {
- return ranges::__abs(__a) < ranges::__abs(__b);
- });
- },
- __diffs);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr auto iter_move(const __iterator& __i) noexcept(
- (noexcept(ranges::iter_move(std::declval<const iterator_t<__maybe_const<_Const, _Views>>&>())) && ...) &&
- (is_nothrow_move_constructible_v<range_rvalue_reference_t<__maybe_const<_Const, _Views>>> && ...)) {
- return std::__tuple_transform(ranges::iter_move, __i.__current_);
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr void iter_swap(const __iterator& __l, const __iterator& __r) noexcept(
- (noexcept(ranges::iter_swap(std::declval<const iterator_t<__maybe_const<_Const, _Views>>&>(),
- std::declval<const iterator_t<__maybe_const<_Const, _Views>>&>())) &&
- ...))
- requires(indirectly_swappable<iterator_t<__maybe_const<_Const, _Views>>> && ...)
- {
- ranges::__tuple_zip_for_each(ranges::iter_swap, __l.__current_, __r.__current_);
- }
-};
-
-template <input_range... _Views>
- requires(view<_Views> && ...) && (sizeof...(_Views) > 0)
-template <bool _Const>
-class zip_view<_Views...>::__sentinel {
- tuple<sentinel_t<__maybe_const<_Const, _Views>>...> __end_;
-
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __sentinel(tuple<sentinel_t<__maybe_const<_Const, _Views>>...> __end)
- : __end_(__end) {}
-
- friend class zip_view<_Views...>;
-
- // hidden friend cannot access private member of iterator because they are friends of friends
- template <bool _OtherConst>
- _LIBCPP_HIDE_FROM_ABI static constexpr decltype(auto)
- __iter_current(zip_view<_Views...>::__iterator<_OtherConst> const& __it) {
- return (__it.__current_);
- }
-
-public:
- _LIBCPP_HIDE_FROM_ABI __sentinel() = default;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __sentinel(__sentinel<!_Const> __i)
- requires _Const && (convertible_to<sentinel_t<_Views>, sentinel_t<__maybe_const<_Const, _Views>>> && ...)
- : __end_(std::move(__i.__end_)) {}
-
- template <bool _OtherConst>
- requires(sentinel_for<sentinel_t<__maybe_const<_Const, _Views>>, iterator_t<__maybe_const<_OtherConst, _Views>>> &&
- ...)
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- return ranges::__tuple_any_equals(__iter_current(__x), __y.__end_);
- }
-
- template <bool _OtherConst>
- requires(
- sized_sentinel_for<sentinel_t<__maybe_const<_Const, _Views>>, iterator_t<__maybe_const<_OtherConst, _Views>>> &&
- ...)
- _LIBCPP_HIDE_FROM_ABI friend constexpr common_type_t<range_difference_t<__maybe_const<_OtherConst, _Views>>...>
- operator-(const __iterator<_OtherConst>& __x, const __sentinel& __y) {
- const auto __diffs = ranges::__tuple_zip_transform(minus<>(), __iter_current(__x), __y.__end_);
- return std::apply(
- [](auto... __ds) {
- using _Diff = common_type_t<range_difference_t<__maybe_const<_OtherConst, _Views>>...>;
- return ranges::min({_Diff(__ds)...}, [](auto __a, auto __b) {
- return ranges::__abs(__a) < ranges::__abs(__b);
- });
- },
- __diffs);
- }
-
- template <bool _OtherConst>
- requires(
- sized_sentinel_for<sentinel_t<__maybe_const<_Const, _Views>>, iterator_t<__maybe_const<_OtherConst, _Views>>> &&
- ...)
- _LIBCPP_HIDE_FROM_ABI friend constexpr common_type_t<range_difference_t<__maybe_const<_OtherConst, _Views>>...>
- operator-(const __sentinel& __y, const __iterator<_OtherConst>& __x) {
- return -(__x - __y);
- }
-};
-
-template <class... _Views>
-inline constexpr bool enable_borrowed_range<zip_view<_Views...>> = (enable_borrowed_range<_Views> && ...);
-
-namespace views {
-namespace __zip {
-
-struct __fn {
- _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()() noexcept { return empty_view<tuple<>>{}; }
-
- template <class... _Ranges>
- _LIBCPP_HIDE_FROM_ABI static constexpr auto
- operator()(_Ranges&&... __rs) noexcept(noexcept(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)))
- -> decltype(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)) {
- return zip_view<all_t<_Ranges>...>(std::forward<_Ranges>(__rs)...);
- }
-};
-
-} // namespace __zip
-inline namespace __cpo {
-inline constexpr auto zip = __zip::__fn{};
-} // namespace __cpo
-} // namespace views
-} // namespace ranges
-
-template <class _Iterator>
- requires _Iterator::__is_zip_view_iterator
-struct __product_iterator_traits<_Iterator> {
- static constexpr size_t __size = tuple_size<decltype(std::declval<_Iterator>().__current_)>::value;
-
- template <size_t _Nth, class _Iter>
- requires(_Nth < __size)
- _LIBCPP_HIDE_FROM_ABI static constexpr decltype(auto) __get_iterator_element(_Iter&& __it) {
- return std::get<_Nth>(std::forward<_Iter>(__it).__current_);
- }
-
- template <class... _Iters>
- _LIBCPP_HIDE_FROM_ABI static constexpr _Iterator __make_product_iterator(_Iters&&... __iters) {
- return _Iterator(std::tuple(std::forward<_Iters>(__iters)...));
- }
-};
-
-#endif // _LIBCPP_STD_VER >= 23
-
-_LIBCPP_END_NAMESPACE_STD
-
-_LIBCPP_POP_MACROS
-
-#endif // _LIBCPP___RANGES_ZIP_VIEW_H