diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-08-23 02:59:46 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2024-09-19 18:20:21 -0700 |
| commit | 1c8f0b8909f342201f84def1efb8c6fb4386cc2c (patch) | |
| tree | b58a1488ff85440a65565474627add3fdc66b32e /lib/libcxx/include/algorithm | |
| parent | d13bc04cb4c4c2f0806b9d9c676cb013ea888828 (diff) | |
| download | zig-1c8f0b8909f342201f84def1efb8c6fb4386cc2c.tar.gz zig-1c8f0b8909f342201f84def1efb8c6fb4386cc2c.zip | |
libcxx: Update to LLVM 19.
* Moved the tz.cpp patch to experimental/tzdb.cpp.
* Extended the __config_site patch to a few more files.
Diffstat (limited to 'lib/libcxx/include/algorithm')
| -rw-r--r-- | lib/libcxx/include/algorithm | 283 |
1 files changed, 158 insertions, 125 deletions
diff --git a/lib/libcxx/include/algorithm b/lib/libcxx/include/algorithm index 1176602a2b..698e6f5cb7 100644 --- a/lib/libcxx/include/algorithm +++ b/lib/libcxx/include/algorithm @@ -102,6 +102,31 @@ namespace ranges { constexpr borrowed_iterator_t<R> find_if_not(R&& r, Pred pred, Proj proj = {}); // since C++20 + template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity> + requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> + constexpr subrange<I> find_last(I first, S last, const T& value, Proj proj = {}); // since C++23 + + template<forward_range R, class T, class Proj = identity> + requires + indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> + constexpr borrowed_subrange_t<R> find_last(R&& r, const T& value, Proj proj = {}); // since C++23 + + template<forward_iterator I, sentinel_for<I> S, class Proj = identity, + indirect_unary_predicate<projected<I, Proj>> Pred> + constexpr subrange<I> find_last_if(I first, S last, Pred pred, Proj proj = {}); // since C++23 + + template<forward_range R, class Proj = identity, + indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> + constexpr borrowed_subrange_t<R> find_last_if(R&& r, Pred pred, Proj proj = {}); // since C++23 + + template<forward_iterator I, sentinel_for<I> S, class Proj = identity, + indirect_unary_predicate<projected<I, Proj>> Pred> + constexpr subrange<I> find_last_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++23 + + template<forward_range R, class Proj = identity, + indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> + constexpr borrowed_subrange_t<R> find_last_if_not(R&& r, Pred pred, Proj proj = {}); // since C++23 + template<class T, class Proj = identity, indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 @@ -217,6 +242,19 @@ namespace ranges { constexpr ranges::minmax_element_result<borrowed_iterator_t<R>> minmax_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 + template<forward_iterator I1, sentinel_for<I1> S1, + forward_iterator I2, sentinel_for<I2> S2, + class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> + requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> + constexpr bool contains_subrange(I1 first1, S1 last1, I2 first2, S2 last2, + Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 + + template<forward_range R1, forward_range R2, + class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> + requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> + constexpr bool contains_subrange(R1&& r1, R2&& r2, Pred pred = {}, + Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 + template<class I, class O> using copy_result = in_out_result<I, O>; // since C++20 @@ -1780,17 +1818,12 @@ template <class BidirectionalIterator, class Compare> */ -#include <__assert> // all public C++ headers provide the assertion handler #include <__config> -#include <version> #include <__algorithm/adjacent_find.h> #include <__algorithm/all_of.h> #include <__algorithm/any_of.h> #include <__algorithm/binary_search.h> -#include <__algorithm/clamp.h> -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> #include <__algorithm/copy.h> #include <__algorithm/copy_backward.h> #include <__algorithm/copy_if.h> @@ -1806,18 +1839,9 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/find_first_of.h> #include <__algorithm/find_if.h> #include <__algorithm/find_if_not.h> -#include <__algorithm/fold.h> #include <__algorithm/for_each.h> -#include <__algorithm/for_each_n.h> #include <__algorithm/generate.h> #include <__algorithm/generate_n.h> -#include <__algorithm/half_positive.h> -#include <__algorithm/in_found_result.h> -#include <__algorithm/in_fun_result.h> -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/in_in_result.h> -#include <__algorithm/in_out_out_result.h> -#include <__algorithm/in_out_result.h> #include <__algorithm/includes.h> #include <__algorithm/inplace_merge.h> #include <__algorithm/is_heap.h> @@ -1828,7 +1852,6 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/is_sorted_until.h> #include <__algorithm/iter_swap.h> #include <__algorithm/lexicographical_compare.h> -#include <__algorithm/lexicographical_compare_three_way.h> #include <__algorithm/lower_bound.h> #include <__algorithm/make_heap.h> #include <__algorithm/max.h> @@ -1836,7 +1859,6 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/merge.h> #include <__algorithm/min.h> #include <__algorithm/min_element.h> -#include <__algorithm/min_max_result.h> #include <__algorithm/minmax.h> #include <__algorithm/minmax_element.h> #include <__algorithm/mismatch.h> @@ -1852,111 +1874,7 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/partition_point.h> #include <__algorithm/pop_heap.h> #include <__algorithm/prev_permutation.h> -#include <__algorithm/pstl_any_all_none_of.h> -#include <__algorithm/pstl_copy.h> -#include <__algorithm/pstl_count.h> -#include <__algorithm/pstl_equal.h> -#include <__algorithm/pstl_fill.h> -#include <__algorithm/pstl_find.h> -#include <__algorithm/pstl_for_each.h> -#include <__algorithm/pstl_generate.h> -#include <__algorithm/pstl_is_partitioned.h> -#include <__algorithm/pstl_merge.h> -#include <__algorithm/pstl_move.h> -#include <__algorithm/pstl_replace.h> -#include <__algorithm/pstl_rotate_copy.h> -#include <__algorithm/pstl_sort.h> -#include <__algorithm/pstl_stable_sort.h> -#include <__algorithm/pstl_transform.h> #include <__algorithm/push_heap.h> -#include <__algorithm/ranges_adjacent_find.h> -#include <__algorithm/ranges_all_of.h> -#include <__algorithm/ranges_any_of.h> -#include <__algorithm/ranges_binary_search.h> -#include <__algorithm/ranges_clamp.h> -#include <__algorithm/ranges_contains.h> -#include <__algorithm/ranges_copy.h> -#include <__algorithm/ranges_copy_backward.h> -#include <__algorithm/ranges_copy_if.h> -#include <__algorithm/ranges_copy_n.h> -#include <__algorithm/ranges_count.h> -#include <__algorithm/ranges_count_if.h> -#include <__algorithm/ranges_ends_with.h> -#include <__algorithm/ranges_equal.h> -#include <__algorithm/ranges_equal_range.h> -#include <__algorithm/ranges_fill.h> -#include <__algorithm/ranges_fill_n.h> -#include <__algorithm/ranges_find.h> -#include <__algorithm/ranges_find_end.h> -#include <__algorithm/ranges_find_first_of.h> -#include <__algorithm/ranges_find_if.h> -#include <__algorithm/ranges_find_if_not.h> -#include <__algorithm/ranges_for_each.h> -#include <__algorithm/ranges_for_each_n.h> -#include <__algorithm/ranges_generate.h> -#include <__algorithm/ranges_generate_n.h> -#include <__algorithm/ranges_includes.h> -#include <__algorithm/ranges_inplace_merge.h> -#include <__algorithm/ranges_is_heap.h> -#include <__algorithm/ranges_is_heap_until.h> -#include <__algorithm/ranges_is_partitioned.h> -#include <__algorithm/ranges_is_permutation.h> -#include <__algorithm/ranges_is_sorted.h> -#include <__algorithm/ranges_is_sorted_until.h> -#include <__algorithm/ranges_lexicographical_compare.h> -#include <__algorithm/ranges_lower_bound.h> -#include <__algorithm/ranges_make_heap.h> -#include <__algorithm/ranges_max.h> -#include <__algorithm/ranges_max_element.h> -#include <__algorithm/ranges_merge.h> -#include <__algorithm/ranges_min.h> -#include <__algorithm/ranges_min_element.h> -#include <__algorithm/ranges_minmax.h> -#include <__algorithm/ranges_minmax_element.h> -#include <__algorithm/ranges_mismatch.h> -#include <__algorithm/ranges_move.h> -#include <__algorithm/ranges_move_backward.h> -#include <__algorithm/ranges_next_permutation.h> -#include <__algorithm/ranges_none_of.h> -#include <__algorithm/ranges_nth_element.h> -#include <__algorithm/ranges_partial_sort.h> -#include <__algorithm/ranges_partial_sort_copy.h> -#include <__algorithm/ranges_partition.h> -#include <__algorithm/ranges_partition_copy.h> -#include <__algorithm/ranges_partition_point.h> -#include <__algorithm/ranges_pop_heap.h> -#include <__algorithm/ranges_prev_permutation.h> -#include <__algorithm/ranges_push_heap.h> -#include <__algorithm/ranges_remove.h> -#include <__algorithm/ranges_remove_copy.h> -#include <__algorithm/ranges_remove_copy_if.h> -#include <__algorithm/ranges_remove_if.h> -#include <__algorithm/ranges_replace.h> -#include <__algorithm/ranges_replace_copy.h> -#include <__algorithm/ranges_replace_copy_if.h> -#include <__algorithm/ranges_replace_if.h> -#include <__algorithm/ranges_reverse.h> -#include <__algorithm/ranges_reverse_copy.h> -#include <__algorithm/ranges_rotate.h> -#include <__algorithm/ranges_rotate_copy.h> -#include <__algorithm/ranges_sample.h> -#include <__algorithm/ranges_search.h> -#include <__algorithm/ranges_search_n.h> -#include <__algorithm/ranges_set_difference.h> -#include <__algorithm/ranges_set_intersection.h> -#include <__algorithm/ranges_set_symmetric_difference.h> -#include <__algorithm/ranges_set_union.h> -#include <__algorithm/ranges_shuffle.h> -#include <__algorithm/ranges_sort.h> -#include <__algorithm/ranges_sort_heap.h> -#include <__algorithm/ranges_stable_partition.h> -#include <__algorithm/ranges_stable_sort.h> -#include <__algorithm/ranges_starts_with.h> -#include <__algorithm/ranges_swap_ranges.h> -#include <__algorithm/ranges_transform.h> -#include <__algorithm/ranges_unique.h> -#include <__algorithm/ranges_unique_copy.h> -#include <__algorithm/ranges_upper_bound.h> #include <__algorithm/remove.h> #include <__algorithm/remove_copy.h> #include <__algorithm/remove_copy_if.h> @@ -1969,17 +1887,13 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/reverse_copy.h> #include <__algorithm/rotate.h> #include <__algorithm/rotate_copy.h> -#include <__algorithm/sample.h> #include <__algorithm/search.h> #include <__algorithm/search_n.h> #include <__algorithm/set_difference.h> #include <__algorithm/set_intersection.h> #include <__algorithm/set_symmetric_difference.h> #include <__algorithm/set_union.h> -#include <__algorithm/shift_left.h> -#include <__algorithm/shift_right.h> #include <__algorithm/shuffle.h> -#include <__algorithm/sift_down.h> #include <__algorithm/sort.h> #include <__algorithm/sort_heap.h> #include <__algorithm/stable_partition.h> @@ -1988,9 +1902,124 @@ template <class BidirectionalIterator, class Compare> #include <__algorithm/transform.h> #include <__algorithm/unique.h> #include <__algorithm/unique_copy.h> -#include <__algorithm/unwrap_iter.h> #include <__algorithm/upper_bound.h> +#if _LIBCPP_STD_VER >= 17 +# include <__algorithm/clamp.h> +# include <__algorithm/for_each_n.h> +# include <__algorithm/pstl.h> +# include <__algorithm/sample.h> +#endif // _LIBCPP_STD_VER >= 17 + +#if _LIBCPP_STD_VER >= 20 +# include <__algorithm/in_found_result.h> +# include <__algorithm/in_fun_result.h> +# include <__algorithm/in_in_out_result.h> +# include <__algorithm/in_in_result.h> +# include <__algorithm/in_out_out_result.h> +# include <__algorithm/in_out_result.h> +# include <__algorithm/lexicographical_compare_three_way.h> +# include <__algorithm/min_max_result.h> +# include <__algorithm/ranges_adjacent_find.h> +# include <__algorithm/ranges_all_of.h> +# include <__algorithm/ranges_any_of.h> +# include <__algorithm/ranges_binary_search.h> +# include <__algorithm/ranges_clamp.h> +# include <__algorithm/ranges_contains.h> +# include <__algorithm/ranges_copy.h> +# include <__algorithm/ranges_copy_backward.h> +# include <__algorithm/ranges_copy_if.h> +# include <__algorithm/ranges_copy_n.h> +# include <__algorithm/ranges_count.h> +# include <__algorithm/ranges_count_if.h> +# include <__algorithm/ranges_equal.h> +# include <__algorithm/ranges_equal_range.h> +# include <__algorithm/ranges_fill.h> +# include <__algorithm/ranges_fill_n.h> +# include <__algorithm/ranges_find.h> +# include <__algorithm/ranges_find_end.h> +# include <__algorithm/ranges_find_first_of.h> +# include <__algorithm/ranges_find_if.h> +# include <__algorithm/ranges_find_if_not.h> +# include <__algorithm/ranges_for_each.h> +# include <__algorithm/ranges_for_each_n.h> +# include <__algorithm/ranges_generate.h> +# include <__algorithm/ranges_generate_n.h> +# include <__algorithm/ranges_includes.h> +# include <__algorithm/ranges_inplace_merge.h> +# include <__algorithm/ranges_is_heap.h> +# include <__algorithm/ranges_is_heap_until.h> +# include <__algorithm/ranges_is_partitioned.h> +# include <__algorithm/ranges_is_permutation.h> +# include <__algorithm/ranges_is_sorted.h> +# include <__algorithm/ranges_is_sorted_until.h> +# include <__algorithm/ranges_lexicographical_compare.h> +# include <__algorithm/ranges_lower_bound.h> +# include <__algorithm/ranges_make_heap.h> +# include <__algorithm/ranges_max.h> +# include <__algorithm/ranges_max_element.h> +# include <__algorithm/ranges_merge.h> +# include <__algorithm/ranges_min.h> +# include <__algorithm/ranges_min_element.h> +# include <__algorithm/ranges_minmax.h> +# include <__algorithm/ranges_minmax_element.h> +# include <__algorithm/ranges_mismatch.h> +# include <__algorithm/ranges_move.h> +# include <__algorithm/ranges_move_backward.h> +# include <__algorithm/ranges_next_permutation.h> +# include <__algorithm/ranges_none_of.h> +# include <__algorithm/ranges_nth_element.h> +# include <__algorithm/ranges_partial_sort.h> +# include <__algorithm/ranges_partial_sort_copy.h> +# include <__algorithm/ranges_partition.h> +# include <__algorithm/ranges_partition_copy.h> +# include <__algorithm/ranges_partition_point.h> +# include <__algorithm/ranges_pop_heap.h> +# include <__algorithm/ranges_prev_permutation.h> +# include <__algorithm/ranges_push_heap.h> +# include <__algorithm/ranges_remove.h> +# include <__algorithm/ranges_remove_copy.h> +# include <__algorithm/ranges_remove_copy_if.h> +# include <__algorithm/ranges_remove_if.h> +# include <__algorithm/ranges_replace.h> +# include <__algorithm/ranges_replace_copy.h> +# include <__algorithm/ranges_replace_copy_if.h> +# include <__algorithm/ranges_replace_if.h> +# include <__algorithm/ranges_reverse.h> +# include <__algorithm/ranges_reverse_copy.h> +# include <__algorithm/ranges_rotate.h> +# include <__algorithm/ranges_rotate_copy.h> +# include <__algorithm/ranges_sample.h> +# include <__algorithm/ranges_search.h> +# include <__algorithm/ranges_search_n.h> +# include <__algorithm/ranges_set_difference.h> +# include <__algorithm/ranges_set_intersection.h> +# include <__algorithm/ranges_set_symmetric_difference.h> +# include <__algorithm/ranges_set_union.h> +# include <__algorithm/ranges_shuffle.h> +# include <__algorithm/ranges_sort.h> +# include <__algorithm/ranges_sort_heap.h> +# include <__algorithm/ranges_stable_partition.h> +# include <__algorithm/ranges_stable_sort.h> +# include <__algorithm/ranges_swap_ranges.h> +# include <__algorithm/ranges_transform.h> +# include <__algorithm/ranges_unique.h> +# include <__algorithm/ranges_unique_copy.h> +# include <__algorithm/ranges_upper_bound.h> +# include <__algorithm/shift_left.h> +# include <__algorithm/shift_right.h> +#endif + +#if _LIBCPP_STD_VER >= 23 +# include <__algorithm/fold.h> +# include <__algorithm/ranges_contains_subrange.h> +# include <__algorithm/ranges_ends_with.h> +# include <__algorithm/ranges_find_last.h> +# include <__algorithm/ranges_starts_with.h> +#endif // _LIBCPP_STD_VER >= 23 + +#include <version> + // standard-mandated includes // [algorithm.syn] @@ -2000,6 +2029,10 @@ template <class BidirectionalIterator, class Compare> # pragma GCC system_header #endif +#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 14 +# include <execution> +#endif + #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 # include <atomic> # include <bit> |
