diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-10-16 02:39:56 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-10-16 02:39:56 +0800 |
| commit | 8cace3f05003c6cb4d38c36890055f03151c2ad4 (patch) | |
| tree | aa739deaac0266f17c4e91b333957501cb1ea2e9 /third_party/libcxx/include/c++/v1/__ranges | |
| parent | 3ad39e9878310e5317ee73c9b353c1e2c1c5c4ee (diff) | |
| download | lume-8cace3f05003c6cb4d38c36890055f03151c2ad4.tar.gz lume-8cace3f05003c6cb4d38c36890055f03151c2ad4.tar.xz | |
Remove old code
Signed-off-by: Richard Qin <richard.qin.x@gmail.com>
Diffstat (limited to 'third_party/libcxx/include/c++/v1/__ranges')
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 |
