From 8cace3f05003c6cb4d38c36890055f03151c2ad4 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Fri, 16 Oct 2026 02:39:56 +0800 Subject: Remove old code Signed-off-by: Richard Qin --- .../include/c++/v1/__algorithm/adjacent_find.h | 60 - .../libcxx/include/c++/v1/__algorithm/all_of.h | 48 - .../libcxx/include/c++/v1/__algorithm/any_of.h | 42 - .../include/c++/v1/__algorithm/binary_search.h | 38 - .../libcxx/include/c++/v1/__algorithm/clamp.h | 44 - .../libcxx/include/c++/v1/__algorithm/comp.h | 57 - .../include/c++/v1/__algorithm/comp_ref_type.h | 67 - .../libcxx/include/c++/v1/__algorithm/copy.h | 135 - .../include/c++/v1/__algorithm/copy_backward.h | 255 - .../libcxx/include/c++/v1/__algorithm/copy_if.h | 50 - .../include/c++/v1/__algorithm/copy_move_common.h | 113 - .../libcxx/include/c++/v1/__algorithm/copy_n.h | 94 - .../libcxx/include/c++/v1/__algorithm/count.h | 95 - .../libcxx/include/c++/v1/__algorithm/count_if.h | 46 - .../libcxx/include/c++/v1/__algorithm/equal.h | 325 -- .../include/c++/v1/__algorithm/equal_range.h | 81 - .../libcxx/include/c++/v1/__algorithm/fill.h | 63 - .../libcxx/include/c++/v1/__algorithm/fill_n.h | 75 - .../libcxx/include/c++/v1/__algorithm/find.h | 240 - .../libcxx/include/c++/v1/__algorithm/find_end.h | 223 - .../include/c++/v1/__algorithm/find_first_of.h | 54 - .../libcxx/include/c++/v1/__algorithm/find_if.h | 43 - .../include/c++/v1/__algorithm/find_if_not.h | 48 - .../include/c++/v1/__algorithm/find_segment_if.h | 61 - .../libcxx/include/c++/v1/__algorithm/for_each.h | 59 - .../libcxx/include/c++/v1/__algorithm/for_each_n.h | 76 - .../c++/v1/__algorithm/for_each_n_segment.h | 63 - .../include/c++/v1/__algorithm/for_each_segment.h | 79 - .../libcxx/include/c++/v1/__algorithm/generate.h | 31 - .../libcxx/include/c++/v1/__algorithm/generate_n.h | 49 - .../include/c++/v1/__algorithm/half_positive.h | 37 - .../include/c++/v1/__algorithm/in_found_result.h | 54 - .../include/c++/v1/__algorithm/in_fun_result.h | 54 - .../include/c++/v1/__algorithm/in_in_out_result.h | 59 - .../include/c++/v1/__algorithm/in_in_result.h | 56 - .../include/c++/v1/__algorithm/in_out_out_result.h | 57 - .../include/c++/v1/__algorithm/in_out_result.h | 56 - .../libcxx/include/c++/v1/__algorithm/includes.h | 78 - .../include/c++/v1/__algorithm/inplace_merge.h | 243 - .../libcxx/include/c++/v1/__algorithm/is_heap.h | 37 - .../include/c++/v1/__algorithm/is_heap_until.h | 62 - .../include/c++/v1/__algorithm/is_partitioned.h | 37 - .../include/c++/v1/__algorithm/is_permutation.h | 309 -- .../libcxx/include/c++/v1/__algorithm/is_sorted.h | 37 - .../include/c++/v1/__algorithm/is_sorted_until.h | 50 - .../libcxx/include/c++/v1/__algorithm/iter_swap.h | 31 - .../c++/v1/__algorithm/iterator_operations.h | 229 - .../c++/v1/__algorithm/lexicographical_compare.h | 129 - .../lexicographical_compare_three_way.h | 125 - .../include/c++/v1/__algorithm/lower_bound.h | 108 - .../libcxx/include/c++/v1/__algorithm/make_heap.h | 72 - .../include/c++/v1/__algorithm/make_projected.h | 104 - .../libcxx/include/c++/v1/__algorithm/max.h | 58 - .../include/c++/v1/__algorithm/max_element.h | 54 - .../libcxx/include/c++/v1/__algorithm/merge.h | 68 - .../libcxx/include/c++/v1/__algorithm/min.h | 58 - .../include/c++/v1/__algorithm/min_element.h | 71 - .../include/c++/v1/__algorithm/min_max_result.h | 56 - .../libcxx/include/c++/v1/__algorithm/minmax.h | 59 - .../include/c++/v1/__algorithm/minmax_element.h | 100 - .../libcxx/include/c++/v1/__algorithm/mismatch.h | 218 - .../libcxx/include/c++/v1/__algorithm/move.h | 128 - .../include/c++/v1/__algorithm/move_backward.h | 134 - .../include/c++/v1/__algorithm/next_permutation.h | 75 - .../libcxx/include/c++/v1/__algorithm/none_of.h | 32 - .../include/c++/v1/__algorithm/nth_element.h | 261 - .../include/c++/v1/__algorithm/out_value_result.h | 56 - .../include/c++/v1/__algorithm/partial_sort.h | 91 - .../include/c++/v1/__algorithm/partial_sort_copy.h | 106 - .../libcxx/include/c++/v1/__algorithm/partition.h | 91 - .../include/c++/v1/__algorithm/partition_copy.h | 43 - .../include/c++/v1/__algorithm/partition_point.h | 44 - .../libcxx/include/c++/v1/__algorithm/pop_heap.h | 81 - .../include/c++/v1/__algorithm/prev_permutation.h | 75 - .../libcxx/include/c++/v1/__algorithm/pstl.h | 688 --- .../libcxx/include/c++/v1/__algorithm/push_heap.h | 84 - .../libcxx/include/c++/v1/__algorithm/radix_sort.h | 431 -- .../c++/v1/__algorithm/ranges_adjacent_find.h | 66 - .../include/c++/v1/__algorithm/ranges_all_of.h | 64 - .../include/c++/v1/__algorithm/ranges_any_of.h | 63 - .../c++/v1/__algorithm/ranges_binary_search.h | 71 - .../include/c++/v1/__algorithm/ranges_clamp.h | 64 - .../include/c++/v1/__algorithm/ranges_contains.h | 64 - .../c++/v1/__algorithm/ranges_contains_subrange.h | 95 - .../include/c++/v1/__algorithm/ranges_copy.h | 68 - .../c++/v1/__algorithm/ranges_copy_backward.h | 67 - .../include/c++/v1/__algorithm/ranges_copy_if.h | 76 - .../include/c++/v1/__algorithm/ranges_copy_n.h | 57 - .../include/c++/v1/__algorithm/ranges_count.h | 64 - .../include/c++/v1/__algorithm/ranges_count_if.h | 67 - .../include/c++/v1/__algorithm/ranges_ends_with.h | 200 - .../include/c++/v1/__algorithm/ranges_equal.h | 98 - .../c++/v1/__algorithm/ranges_equal_range.h | 76 - .../include/c++/v1/__algorithm/ranges_fill.h | 61 - .../include/c++/v1/__algorithm/ranges_fill_n.h | 49 - .../include/c++/v1/__algorithm/ranges_find.h | 78 - .../include/c++/v1/__algorithm/ranges_find_end.h | 101 - .../c++/v1/__algorithm/ranges_find_first_of.h | 104 - .../include/c++/v1/__algorithm/ranges_find_if.h | 64 - .../c++/v1/__algorithm/ranges_find_if_not.h | 62 - .../include/c++/v1/__algorithm/ranges_find_last.h | 170 - .../include/c++/v1/__algorithm/ranges_fold.h | 137 - .../include/c++/v1/__algorithm/ranges_for_each.h | 97 - .../include/c++/v1/__algorithm/ranges_for_each_n.h | 59 - .../include/c++/v1/__algorithm/ranges_generate.h | 69 - .../include/c++/v1/__algorithm/ranges_generate_n.h | 57 - .../include/c++/v1/__algorithm/ranges_includes.h | 94 - .../c++/v1/__algorithm/ranges_inplace_merge.h | 80 - .../include/c++/v1/__algorithm/ranges_is_heap.h | 77 - .../c++/v1/__algorithm/ranges_is_heap_until.h | 77 - .../c++/v1/__algorithm/ranges_is_partitioned.h | 84 - .../c++/v1/__algorithm/ranges_is_permutation.h | 105 - .../include/c++/v1/__algorithm/ranges_is_sorted.h | 65 - .../c++/v1/__algorithm/ranges_is_sorted_until.h | 80 - .../c++/v1/__algorithm/ranges_iterator_concept.h | 56 - .../__algorithm/ranges_lexicographical_compare.h | 107 - .../c++/v1/__algorithm/ranges_lower_bound.h | 71 - .../include/c++/v1/__algorithm/ranges_make_heap.h | 81 - .../libcxx/include/c++/v1/__algorithm/ranges_max.h | 101 - .../c++/v1/__algorithm/ranges_max_element.h | 67 - .../include/c++/v1/__algorithm/ranges_merge.h | 134 - .../libcxx/include/c++/v1/__algorithm/ranges_min.h | 93 - .../c++/v1/__algorithm/ranges_min_element.h | 66 - .../include/c++/v1/__algorithm/ranges_minmax.h | 174 - .../c++/v1/__algorithm/ranges_minmax_element.h | 76 - .../include/c++/v1/__algorithm/ranges_mismatch.h | 98 - .../include/c++/v1/__algorithm/ranges_move.h | 72 - .../c++/v1/__algorithm/ranges_move_backward.h | 74 - .../c++/v1/__algorithm/ranges_next_permutation.h | 74 - .../include/c++/v1/__algorithm/ranges_none_of.h | 73 - .../c++/v1/__algorithm/ranges_nth_element.h | 80 - .../c++/v1/__algorithm/ranges_partial_sort.h | 78 - .../c++/v1/__algorithm/ranges_partial_sort_copy.h | 110 - .../include/c++/v1/__algorithm/ranges_partition.h | 85 - .../c++/v1/__algorithm/ranges_partition_copy.h | 106 - .../c++/v1/__algorithm/ranges_partition_point.h | 89 - .../include/c++/v1/__algorithm/ranges_pop_heap.h | 82 - .../c++/v1/__algorithm/ranges_prev_permutation.h | 74 - .../include/c++/v1/__algorithm/ranges_push_heap.h | 81 - .../include/c++/v1/__algorithm/ranges_remove.h | 66 - .../c++/v1/__algorithm/ranges_remove_copy.h | 77 - .../c++/v1/__algorithm/ranges_remove_copy_if.h | 91 - .../include/c++/v1/__algorithm/ranges_remove_if.h | 86 - .../include/c++/v1/__algorithm/ranges_replace.h | 66 - .../c++/v1/__algorithm/ranges_replace_copy.h | 89 - .../c++/v1/__algorithm/ranges_replace_copy_if.h | 94 - .../include/c++/v1/__algorithm/ranges_replace_if.h | 79 - .../include/c++/v1/__algorithm/ranges_reverse.h | 77 - .../c++/v1/__algorithm/ranges_reverse_copy.h | 69 - .../include/c++/v1/__algorithm/ranges_rotate.h | 67 - .../c++/v1/__algorithm/ranges_rotate_copy.h | 66 - .../include/c++/v1/__algorithm/ranges_sample.h | 70 - .../include/c++/v1/__algorithm/ranges_search.h | 132 - .../include/c++/v1/__algorithm/ranges_search_n.h | 114 - .../c++/v1/__algorithm/ranges_set_difference.h | 104 - .../c++/v1/__algorithm/ranges_set_intersection.h | 110 - .../__algorithm/ranges_set_symmetric_difference.h | 109 - .../include/c++/v1/__algorithm/ranges_set_union.h | 110 - .../include/c++/v1/__algorithm/ranges_shift_left.h | 73 - .../c++/v1/__algorithm/ranges_shift_right.h | 76 - .../include/c++/v1/__algorithm/ranges_shuffle.h | 68 - .../include/c++/v1/__algorithm/ranges_sort.h | 80 - .../include/c++/v1/__algorithm/ranges_sort_heap.h | 81 - .../c++/v1/__algorithm/ranges_stable_partition.h | 89 - .../c++/v1/__algorithm/ranges_stable_sort.h | 80 - .../c++/v1/__algorithm/ranges_starts_with.h | 93 - .../c++/v1/__algorithm/ranges_swap_ranges.h | 95 - .../include/c++/v1/__algorithm/ranges_transform.h | 175 - .../include/c++/v1/__algorithm/ranges_unique.h | 78 - .../c++/v1/__algorithm/ranges_unique_copy.h | 116 - .../c++/v1/__algorithm/ranges_upper_bound.h | 72 - .../libcxx/include/c++/v1/__algorithm/remove.h | 46 - .../include/c++/v1/__algorithm/remove_copy.h | 34 - .../include/c++/v1/__algorithm/remove_copy_if.h | 34 - .../libcxx/include/c++/v1/__algorithm/remove_if.h | 45 - .../libcxx/include/c++/v1/__algorithm/replace.h | 30 - .../include/c++/v1/__algorithm/replace_copy.h | 37 - .../include/c++/v1/__algorithm/replace_copy_if.h | 37 - .../libcxx/include/c++/v1/__algorithm/replace_if.h | 30 - .../libcxx/include/c++/v1/__algorithm/reverse.h | 62 - .../include/c++/v1/__algorithm/reverse_copy.h | 30 - .../libcxx/include/c++/v1/__algorithm/rotate.h | 226 - .../include/c++/v1/__algorithm/rotate_copy.h | 29 - .../libcxx/include/c++/v1/__algorithm/sample.h | 123 - .../libcxx/include/c++/v1/__algorithm/search.h | 192 - .../libcxx/include/c++/v1/__algorithm/search_n.h | 168 - .../include/c++/v1/__algorithm/set_difference.h | 76 - .../include/c++/v1/__algorithm/set_intersection.h | 218 - .../c++/v1/__algorithm/set_symmetric_difference.h | 108 - .../libcxx/include/c++/v1/__algorithm/set_union.h | 104 - .../libcxx/include/c++/v1/__algorithm/shift_left.h | 76 - .../include/c++/v1/__algorithm/shift_right.h | 131 - .../libcxx/include/c++/v1/__algorithm/shuffle.h | 167 - .../libcxx/include/c++/v1/__algorithm/sift_down.h | 119 - .../libcxx/include/c++/v1/__algorithm/simd_utils.h | 193 - .../libcxx/include/c++/v1/__algorithm/sort.h | 958 ---- .../libcxx/include/c++/v1/__algorithm/sort_heap.h | 63 - .../c++/v1/__algorithm/specialized_algorithms.h | 55 - .../include/c++/v1/__algorithm/stable_partition.h | 305 - .../include/c++/v1/__algorithm/stable_sort.h | 323 -- .../include/c++/v1/__algorithm/swap_ranges.h | 70 - .../c++/v1/__algorithm/three_way_comp_ref_type.h | 74 - .../libcxx/include/c++/v1/__algorithm/transform.h | 42 - .../uniform_random_bit_generator_adaptor.h | 58 - .../libcxx/include/c++/v1/__algorithm/unique.h | 66 - .../include/c++/v1/__algorithm/unique_copy.h | 127 - .../include/c++/v1/__algorithm/unwrap_iter.h | 83 - .../include/c++/v1/__algorithm/unwrap_range.h | 70 - .../include/c++/v1/__algorithm/upper_bound.h | 71 - third_party/libcxx/include/c++/v1/__assert | 118 - .../libcxx/include/c++/v1/__assertion_handler | 64 - .../libcxx/include/c++/v1/__atomic/aliases.h | 111 - .../libcxx/include/c++/v1/__atomic/atomic.h | 804 --- .../libcxx/include/c++/v1/__atomic/atomic_flag.h | 165 - .../libcxx/include/c++/v1/__atomic/atomic_init.h | 25 - .../include/c++/v1/__atomic/atomic_lock_free.h | 48 - .../libcxx/include/c++/v1/__atomic/atomic_ref.h | 398 -- .../libcxx/include/c++/v1/__atomic/atomic_sync.h | 261 - .../include/c++/v1/__atomic/atomic_sync_timed.h | 136 - .../c++/v1/__atomic/atomic_waitable_traits.h | 101 - .../include/c++/v1/__atomic/check_memory_order.h | 34 - .../libcxx/include/c++/v1/__atomic/contention_t.h | 56 - third_party/libcxx/include/c++/v1/__atomic/fence.h | 28 - .../c++/v1/__atomic/floating_point_helper.h | 55 - .../include/c++/v1/__atomic/is_always_lock_free.h | 28 - .../include/c++/v1/__atomic/kill_dependency.h | 27 - .../libcxx/include/c++/v1/__atomic/memory_order.h | 65 - .../libcxx/include/c++/v1/__atomic/support.h | 121 - .../libcxx/include/c++/v1/__atomic/support/c11.h | 264 - .../libcxx/include/c++/v1/__atomic/support/gcc.h | 265 - .../libcxx/include/c++/v1/__atomic/to_gcc_order.h | 54 - third_party/libcxx/include/c++/v1/__bit/bit_cast.h | 44 - third_party/libcxx/include/c++/v1/__bit/bit_ceil.h | 54 - .../libcxx/include/c++/v1/__bit/bit_floor.h | 33 - third_party/libcxx/include/c++/v1/__bit/bit_log2.h | 33 - .../libcxx/include/c++/v1/__bit/bit_width.h | 33 - third_party/libcxx/include/c++/v1/__bit/blsr.h | 34 - third_party/libcxx/include/c++/v1/__bit/byteswap.h | 53 - third_party/libcxx/include/c++/v1/__bit/countl.h | 48 - third_party/libcxx/include/c++/v1/__bit/countr.h | 48 - third_party/libcxx/include/c++/v1/__bit/endian.h | 38 - .../libcxx/include/c++/v1/__bit/has_single_bit.h | 37 - .../libcxx/include/c++/v1/__bit/invert_if.h | 30 - third_party/libcxx/include/c++/v1/__bit/popcount.h | 42 - third_party/libcxx/include/c++/v1/__bit/rotate.h | 60 - third_party/libcxx/include/c++/v1/__bit_reference | 873 --- .../include/c++/v1/__charconv/chars_format.h | 61 - .../c++/v1/__charconv/from_chars_floating_point.h | 73 - .../c++/v1/__charconv/from_chars_integral.h | 237 - .../include/c++/v1/__charconv/from_chars_result.h | 39 - .../libcxx/include/c++/v1/__charconv/tables.h | 159 - .../libcxx/include/c++/v1/__charconv/to_chars.h | 25 - .../include/c++/v1/__charconv/to_chars_base_10.h | 184 - .../c++/v1/__charconv/to_chars_floating_point.h | 55 - .../include/c++/v1/__charconv/to_chars_integral.h | 344 -- .../include/c++/v1/__charconv/to_chars_result.h | 48 - .../libcxx/include/c++/v1/__charconv/traits.h | 167 - .../libcxx/include/c++/v1/__chrono/calendar.h | 44 - .../libcxx/include/c++/v1/__chrono/concepts.h | 36 - .../include/c++/v1/__chrono/convert_to_timespec.h | 51 - .../libcxx/include/c++/v1/__chrono/convert_to_tm.h | 241 - third_party/libcxx/include/c++/v1/__chrono/day.h | 112 - .../libcxx/include/c++/v1/__chrono/duration.h | 570 -- .../libcxx/include/c++/v1/__chrono/exception.h | 135 - .../libcxx/include/c++/v1/__chrono/file_clock.h | 82 - .../libcxx/include/c++/v1/__chrono/formatter.h | 1035 ---- .../libcxx/include/c++/v1/__chrono/gps_clock.h | 90 - .../libcxx/include/c++/v1/__chrono/hh_mm_ss.h | 112 - .../c++/v1/__chrono/high_resolution_clock.h | 35 - .../libcxx/include/c++/v1/__chrono/is_clock.h | 72 - .../libcxx/include/c++/v1/__chrono/leap_second.h | 144 - .../libcxx/include/c++/v1/__chrono/literals.h | 45 - .../libcxx/include/c++/v1/__chrono/local_info.h | 50 - third_party/libcxx/include/c++/v1/__chrono/month.h | 128 - .../libcxx/include/c++/v1/__chrono/month_weekday.h | 135 - .../libcxx/include/c++/v1/__chrono/monthday.h | 155 - .../libcxx/include/c++/v1/__chrono/ostream.h | 354 -- .../c++/v1/__chrono/parser_std_format_spec.h | 421 -- .../include/c++/v1/__chrono/statically_widen.h | 52 - .../libcxx/include/c++/v1/__chrono/steady_clock.h | 42 - .../libcxx/include/c++/v1/__chrono/sys_info.h | 51 - .../libcxx/include/c++/v1/__chrono/system_clock.h | 52 - .../libcxx/include/c++/v1/__chrono/tai_clock.h | 108 - .../libcxx/include/c++/v1/__chrono/time_point.h | 255 - .../libcxx/include/c++/v1/__chrono/time_zone.h | 185 - .../include/c++/v1/__chrono/time_zone_link.h | 79 - third_party/libcxx/include/c++/v1/__chrono/tzdb.h | 96 - .../libcxx/include/c++/v1/__chrono/tzdb_list.h | 108 - .../libcxx/include/c++/v1/__chrono/utc_clock.h | 163 - .../libcxx/include/c++/v1/__chrono/weekday.h | 202 - third_party/libcxx/include/c++/v1/__chrono/year.h | 131 - .../libcxx/include/c++/v1/__chrono/year_month.h | 143 - .../include/c++/v1/__chrono/year_month_day.h | 371 -- .../include/c++/v1/__chrono/year_month_weekday.h | 325 -- .../libcxx/include/c++/v1/__chrono/zoned_time.h | 244 - .../c++/v1/__compare/common_comparison_category.h | 86 - .../v1/__compare/compare_partial_order_fallback.h | 75 - .../v1/__compare/compare_strong_order_fallback.h | 72 - .../include/c++/v1/__compare/compare_three_way.h | 40 - .../c++/v1/__compare/compare_three_way_result.h | 46 - .../c++/v1/__compare/compare_weak_order_fallback.h | 73 - .../libcxx/include/c++/v1/__compare/is_eq.h | 34 - .../libcxx/include/c++/v1/__compare/ordering.h | 282 - .../include/c++/v1/__compare/partial_order.h | 77 - .../libcxx/include/c++/v1/__compare/strong_order.h | 125 - .../include/c++/v1/__compare/synth_three_way.h | 53 - .../c++/v1/__compare/three_way_comparable.h | 55 - .../libcxx/include/c++/v1/__compare/weak_order.h | 105 - .../libcxx/include/c++/v1/__concepts/arithmetic.h | 43 - .../libcxx/include/c++/v1/__concepts/assignable.h | 41 - .../include/c++/v1/__concepts/boolean_testable.h | 38 - .../include/c++/v1/__concepts/class_or_enum.h | 34 - .../c++/v1/__concepts/common_reference_with.h | 36 - .../libcxx/include/c++/v1/__concepts/common_with.h | 52 - .../c++/v1/__concepts/comparison_common_type.h | 40 - .../include/c++/v1/__concepts/constructible.h | 55 - .../include/c++/v1/__concepts/convertible_to.h | 33 - .../libcxx/include/c++/v1/__concepts/copyable.h | 41 - .../include/c++/v1/__concepts/derived_from.h | 33 - .../include/c++/v1/__concepts/destructible.h | 32 - .../include/c++/v1/__concepts/different_from.h | 31 - .../c++/v1/__concepts/equality_comparable.h | 57 - .../libcxx/include/c++/v1/__concepts/invocable.h | 40 - .../libcxx/include/c++/v1/__concepts/movable.h | 35 - .../libcxx/include/c++/v1/__concepts/predicate.h | 34 - .../libcxx/include/c++/v1/__concepts/regular.h | 33 - .../libcxx/include/c++/v1/__concepts/relation.h | 43 - .../libcxx/include/c++/v1/__concepts/same_as.h | 35 - .../libcxx/include/c++/v1/__concepts/semiregular.h | 33 - .../libcxx/include/c++/v1/__concepts/swappable.h | 122 - .../include/c++/v1/__concepts/totally_ordered.h | 59 - .../v1/__condition_variable/condition_variable.h | 232 - third_party/libcxx/include/c++/v1/__config | 612 -- .../libcxx/include/c++/v1/__configuration/abi.h | 142 - .../include/c++/v1/__configuration/attributes.h | 466 -- .../include/c++/v1/__configuration/availability.h | 299 - .../include/c++/v1/__configuration/compiler.h | 51 - .../include/c++/v1/__configuration/experimental.h | 38 - .../include/c++/v1/__configuration/hardening.h | 215 - .../include/c++/v1/__configuration/language.h | 59 - .../include/c++/v1/__configuration/platform.h | 56 - .../include/c++/v1/__coroutine/coroutine_handle.h | 177 - .../include/c++/v1/__coroutine/coroutine_traits.h | 48 - .../c++/v1/__coroutine/noop_coroutine_handle.h | 97 - .../c++/v1/__coroutine/trivial_awaitables.h | 40 - third_party/libcxx/include/c++/v1/__cstddef/byte.h | 85 - .../libcxx/include/c++/v1/__cstddef/max_align_t.h | 27 - .../libcxx/include/c++/v1/__cstddef/nullptr_t.h | 24 - .../libcxx/include/c++/v1/__cstddef/ptrdiff_t.h | 24 - .../libcxx/include/c++/v1/__cstddef/size_t.h | 24 - .../c++/v1/__cxx03/__algorithm/adjacent_find.h | 57 - .../include/c++/v1/__cxx03/__algorithm/all_of.h | 32 - .../include/c++/v1/__cxx03/__algorithm/any_of.h | 32 - .../c++/v1/__cxx03/__algorithm/binary_search.h | 39 - .../include/c++/v1/__cxx03/__algorithm/comp.h | 49 - .../c++/v1/__cxx03/__algorithm/comp_ref_type.h | 66 - .../include/c++/v1/__cxx03/__algorithm/copy.h | 117 - .../c++/v1/__cxx03/__algorithm/copy_backward.h | 132 - .../include/c++/v1/__cxx03/__algorithm/copy_if.h | 34 - .../c++/v1/__cxx03/__algorithm/copy_move_common.h | 112 - .../include/c++/v1/__cxx03/__algorithm/copy_n.h | 58 - .../include/c++/v1/__cxx03/__algorithm/count.h | 92 - .../include/c++/v1/__cxx03/__algorithm/count_if.h | 34 - .../include/c++/v1/__cxx03/__algorithm/equal.h | 73 - .../c++/v1/__cxx03/__algorithm/equal_range.h | 85 - .../include/c++/v1/__cxx03/__algorithm/fill.h | 44 - .../include/c++/v1/__cxx03/__algorithm/fill_n.h | 94 - .../include/c++/v1/__cxx03/__algorithm/find.h | 177 - .../include/c++/v1/__cxx03/__algorithm/find_end.h | 225 - .../c++/v1/__cxx03/__algorithm/find_first_of.h | 55 - .../include/c++/v1/__cxx03/__algorithm/find_if.h | 32 - .../c++/v1/__cxx03/__algorithm/find_if_not.h | 32 - .../c++/v1/__cxx03/__algorithm/find_segment_if.h | 62 - .../include/c++/v1/__cxx03/__algorithm/for_each.h | 33 - .../c++/v1/__cxx03/__algorithm/for_each_segment.h | 52 - .../include/c++/v1/__cxx03/__algorithm/generate.h | 28 - .../c++/v1/__cxx03/__algorithm/generate_n.h | 32 - .../c++/v1/__cxx03/__algorithm/half_positive.h | 37 - .../include/c++/v1/__cxx03/__algorithm/includes.h | 79 - .../c++/v1/__cxx03/__algorithm/inplace_merge.h | 240 - .../include/c++/v1/__cxx03/__algorithm/is_heap.h | 38 - .../c++/v1/__cxx03/__algorithm/is_heap_until.h | 62 - .../c++/v1/__cxx03/__algorithm/is_partitioned.h | 37 - .../c++/v1/__cxx03/__algorithm/is_permutation.h | 254 - .../include/c++/v1/__cxx03/__algorithm/is_sorted.h | 37 - .../c++/v1/__cxx03/__algorithm/is_sorted_until.h | 51 - .../include/c++/v1/__cxx03/__algorithm/iter_swap.h | 29 - .../v1/__cxx03/__algorithm/iterator_operations.h | 192 - .../__cxx03/__algorithm/lexicographical_compare.h | 57 - .../c++/v1/__cxx03/__algorithm/lower_bound.h | 109 - .../include/c++/v1/__cxx03/__algorithm/make_heap.h | 59 - .../c++/v1/__cxx03/__algorithm/make_projected.h | 74 - .../include/c++/v1/__cxx03/__algorithm/max.h | 42 - .../c++/v1/__cxx03/__algorithm/max_element.h | 51 - .../include/c++/v1/__cxx03/__algorithm/merge.h | 69 - .../include/c++/v1/__cxx03/__algorithm/min.h | 42 - .../c++/v1/__cxx03/__algorithm/min_element.h | 70 - .../include/c++/v1/__cxx03/__algorithm/minmax.h | 39 - .../c++/v1/__cxx03/__algorithm/minmax_element.h | 99 - .../include/c++/v1/__cxx03/__algorithm/mismatch.h | 171 - .../include/c++/v1/__cxx03/__algorithm/move.h | 120 - .../c++/v1/__cxx03/__algorithm/move_backward.h | 133 - .../c++/v1/__cxx03/__algorithm/next_permutation.h | 74 - .../include/c++/v1/__cxx03/__algorithm/none_of.h | 32 - .../c++/v1/__cxx03/__algorithm/nth_element.h | 261 - .../c++/v1/__cxx03/__algorithm/partial_sort.h | 91 - .../c++/v1/__cxx03/__algorithm/partial_sort_copy.h | 106 - .../include/c++/v1/__cxx03/__algorithm/partition.h | 90 - .../c++/v1/__cxx03/__algorithm/partition_copy.h | 43 - .../c++/v1/__cxx03/__algorithm/partition_point.h | 44 - .../include/c++/v1/__cxx03/__algorithm/pop_heap.h | 80 - .../c++/v1/__cxx03/__algorithm/prev_permutation.h | 74 - .../include/c++/v1/__cxx03/__algorithm/push_heap.h | 83 - .../include/c++/v1/__cxx03/__algorithm/remove.h | 46 - .../c++/v1/__cxx03/__algorithm/remove_copy.h | 34 - .../c++/v1/__cxx03/__algorithm/remove_copy_if.h | 34 - .../include/c++/v1/__cxx03/__algorithm/remove_if.h | 45 - .../include/c++/v1/__cxx03/__algorithm/replace.h | 30 - .../c++/v1/__cxx03/__algorithm/replace_copy.h | 37 - .../c++/v1/__cxx03/__algorithm/replace_copy_if.h | 37 - .../c++/v1/__cxx03/__algorithm/replace_if.h | 30 - .../include/c++/v1/__cxx03/__algorithm/reverse.h | 61 - .../c++/v1/__cxx03/__algorithm/reverse_copy.h | 30 - .../include/c++/v1/__cxx03/__algorithm/rotate.h | 196 - .../c++/v1/__cxx03/__algorithm/rotate_copy.h | 29 - .../include/c++/v1/__cxx03/__algorithm/search.h | 182 - .../include/c++/v1/__cxx03/__algorithm/search_n.h | 153 - .../c++/v1/__cxx03/__algorithm/set_difference.h | 77 - .../c++/v1/__cxx03/__algorithm/set_intersection.h | 211 - .../__cxx03/__algorithm/set_symmetric_difference.h | 108 - .../include/c++/v1/__cxx03/__algorithm/set_union.h | 104 - .../include/c++/v1/__cxx03/__algorithm/shuffle.h | 157 - .../include/c++/v1/__cxx03/__algorithm/sift_down.h | 118 - .../c++/v1/__cxx03/__algorithm/simd_utils.h | 159 - .../include/c++/v1/__cxx03/__algorithm/sort.h | 989 ---- .../include/c++/v1/__cxx03/__algorithm/sort_heap.h | 62 - .../c++/v1/__cxx03/__algorithm/stable_partition.h | 307 - .../c++/v1/__cxx03/__algorithm/stable_sort.h | 273 - .../c++/v1/__cxx03/__algorithm/swap_ranges.h | 62 - .../__cxx03/__algorithm/three_way_comp_ref_type.h | 26 - .../include/c++/v1/__cxx03/__algorithm/transform.h | 42 - .../uniform_random_bit_generator_adaptor.h | 20 - .../include/c++/v1/__cxx03/__algorithm/unique.h | 64 - .../c++/v1/__cxx03/__algorithm/unique_copy.h | 127 - .../c++/v1/__cxx03/__algorithm/unwrap_iter.h | 74 - .../c++/v1/__cxx03/__algorithm/unwrap_range.h | 46 - .../c++/v1/__cxx03/__algorithm/upper_bound.h | 68 - third_party/libcxx/include/c++/v1/__cxx03/__assert | 118 - .../include/c++/v1/__cxx03/__atomic/aliases.h | 85 - .../include/c++/v1/__cxx03/__atomic/atomic.h | 484 -- .../include/c++/v1/__cxx03/__atomic/atomic_base.h | 217 - .../include/c++/v1/__cxx03/__atomic/atomic_flag.h | 184 - .../include/c++/v1/__cxx03/__atomic/atomic_init.h | 21 - .../c++/v1/__cxx03/__atomic/atomic_lock_free.h | 48 - .../include/c++/v1/__cxx03/__atomic/atomic_sync.h | 205 - .../c++/v1/__cxx03/__atomic/check_memory_order.h | 34 - .../include/c++/v1/__cxx03/__atomic/contention_t.h | 32 - .../c++/v1/__cxx03/__atomic/cxx_atomic_impl.h | 498 -- .../libcxx/include/c++/v1/__cxx03/__atomic/fence.h | 28 - .../c++/v1/__cxx03/__atomic/is_always_lock_free.h | 28 - .../c++/v1/__cxx03/__atomic/kill_dependency.h | 27 - .../include/c++/v1/__cxx03/__atomic/memory_order.h | 40 - .../include/c++/v1/__cxx03/__atomic/to_gcc_order.h | 54 - .../libcxx/include/c++/v1/__cxx03/__bit/blsr.h | 30 - .../libcxx/include/c++/v1/__cxx03/__bit/countl.h | 96 - .../libcxx/include/c++/v1/__cxx03/__bit/countr.h | 67 - .../include/c++/v1/__cxx03/__bit/invert_if.h | 29 - .../libcxx/include/c++/v1/__cxx03/__bit/popcount.h | 34 - .../libcxx/include/c++/v1/__cxx03/__bit/rotate.h | 57 - .../libcxx/include/c++/v1/__cxx03/__bit_reference | 965 ---- .../c++/v1/__cxx03/__chrono/convert_to_timespec.h | 51 - .../include/c++/v1/__cxx03/__chrono/duration.h | 418 -- .../v1/__cxx03/__chrono/high_resolution_clock.h | 35 - .../include/c++/v1/__cxx03/__chrono/steady_clock.h | 42 - .../include/c++/v1/__cxx03/__chrono/system_clock.h | 43 - .../include/c++/v1/__cxx03/__chrono/time_point.h | 177 - .../__condition_variable/condition_variable.h | 244 - third_party/libcxx/include/c++/v1/__cxx03/__config | 1077 ---- .../include/c++/v1/__cxx03/__configuration/abi.h | 172 - .../c++/v1/__cxx03/__configuration/availability.h | 400 -- .../c++/v1/__cxx03/__configuration/compiler.h | 51 - .../v1/__cxx03/__configuration/config_site_shim.h | 80 - .../c++/v1/__cxx03/__configuration/language.h | 27 - .../c++/v1/__cxx03/__configuration/platform.h | 54 - .../c++/v1/__cxx03/__debug_utils/randomize_range.h | 40 - .../c++/v1/__cxx03/__debug_utils/sanitizers.h | 104 - .../__debug_utils/strict_weak_ordering_check.h | 77 - .../include/c++/v1/__cxx03/__exception/exception.h | 94 - .../c++/v1/__cxx03/__exception/exception_ptr.h | 177 - .../c++/v1/__cxx03/__exception/nested_exception.h | 99 - .../c++/v1/__cxx03/__exception/operations.h | 38 - .../include/c++/v1/__cxx03/__exception/terminate.h | 22 - .../c++/v1/__cxx03/__functional/binary_function.h | 43 - .../c++/v1/__cxx03/__functional/binary_negate.h | 45 - .../include/c++/v1/__cxx03/__functional/bind.h | 70 - .../c++/v1/__cxx03/__functional/binder1st.h | 49 - .../c++/v1/__cxx03/__functional/binder2nd.h | 49 - .../include/c++/v1/__cxx03/__functional/hash.h | 509 -- .../include/c++/v1/__cxx03/__functional/identity.h | 45 - .../include/c++/v1/__cxx03/__functional/mem_fn.h | 51 - .../c++/v1/__cxx03/__functional/mem_fun_ref.h | 137 - .../c++/v1/__cxx03/__functional/operations.h | 181 - .../__functional/pointer_to_binary_function.h | 38 - .../__functional/pointer_to_unary_function.h | 38 - .../v1/__cxx03/__functional/reference_wrapper.h | 89 - .../c++/v1/__cxx03/__functional/unary_function.h | 40 - .../c++/v1/__cxx03/__functional/unary_negate.h | 38 - .../c++/v1/__cxx03/__functional/weak_result_type.h | 209 - .../libcxx/include/c++/v1/__cxx03/__fwd/array.h | 38 - .../include/c++/v1/__cxx03/__fwd/bit_reference.h | 25 - .../libcxx/include/c++/v1/__cxx03/__fwd/complex.h | 26 - .../libcxx/include/c++/v1/__cxx03/__fwd/deque.h | 26 - .../libcxx/include/c++/v1/__cxx03/__fwd/fstream.h | 53 - .../include/c++/v1/__cxx03/__fwd/functional.h | 28 - .../libcxx/include/c++/v1/__cxx03/__fwd/ios.h | 43 - .../libcxx/include/c++/v1/__cxx03/__fwd/istream.h | 43 - .../libcxx/include/c++/v1/__cxx03/__fwd/memory.h | 25 - .../libcxx/include/c++/v1/__cxx03/__fwd/ostream.h | 35 - .../libcxx/include/c++/v1/__cxx03/__fwd/pair.h | 33 - .../libcxx/include/c++/v1/__cxx03/__fwd/queue.h | 31 - .../libcxx/include/c++/v1/__cxx03/__fwd/sstream.h | 58 - .../libcxx/include/c++/v1/__cxx03/__fwd/stack.h | 26 - .../include/c++/v1/__cxx03/__fwd/streambuf.h | 35 - .../libcxx/include/c++/v1/__cxx03/__fwd/string.h | 73 - .../include/c++/v1/__cxx03/__fwd/string_view.h | 50 - .../libcxx/include/c++/v1/__cxx03/__fwd/tuple.h | 26 - .../libcxx/include/c++/v1/__cxx03/__fwd/vector.h | 26 - .../libcxx/include/c++/v1/__cxx03/__hash_table | 1842 ------ .../libcxx/include/c++/v1/__cxx03/__ios/fpos.h | 76 - .../include/c++/v1/__cxx03/__iterator/access.h | 54 - .../include/c++/v1/__cxx03/__iterator/advance.h | 74 - .../c++/v1/__cxx03/__iterator/aliasing_iterator.h | 127 - .../v1/__cxx03/__iterator/back_insert_iterator.h | 67 - .../c++/v1/__cxx03/__iterator/bounded_iter.h | 247 - .../include/c++/v1/__cxx03/__iterator/distance.h | 47 - .../c++/v1/__cxx03/__iterator/erase_if_container.h | 43 - .../v1/__cxx03/__iterator/front_insert_iterator.h | 65 - .../c++/v1/__cxx03/__iterator/insert_iterator.h | 71 - .../c++/v1/__cxx03/__iterator/istream_iterator.h | 86 - .../v1/__cxx03/__iterator/istreambuf_iterator.h | 94 - .../include/c++/v1/__cxx03/__iterator/iterator.h | 33 - .../c++/v1/__cxx03/__iterator/iterator_traits.h | 246 - .../c++/v1/__cxx03/__iterator/move_iterator.h | 166 - .../include/c++/v1/__cxx03/__iterator/next.h | 39 - .../c++/v1/__cxx03/__iterator/ostream_iterator.h | 67 - .../v1/__cxx03/__iterator/ostreambuf_iterator.h | 64 - .../include/c++/v1/__cxx03/__iterator/prev.h | 54 - .../c++/v1/__cxx03/__iterator/reverse_iterator.h | 203 - .../c++/v1/__cxx03/__iterator/segmented_iterator.h | 79 - .../include/c++/v1/__cxx03/__iterator/wrap_iter.h | 188 - third_party/libcxx/include/c++/v1/__cxx03/__locale | 1495 ----- .../c++/v1/__cxx03/__locale_dir/locale_base_api.h | 98 - .../__cxx03/__locale_dir/locale_base_api/android.h | 45 - .../locale_base_api/bsd_locale_defaults.h | 36 - .../locale_base_api/bsd_locale_fallbacks.h | 126 - .../__cxx03/__locale_dir/locale_base_api/fuchsia.h | 18 - .../v1/__cxx03/__locale_dir/locale_base_api/ibm.h | 108 - .../__locale_dir/locale_base_api/locale_guard.h | 78 - .../v1/__cxx03/__locale_dir/locale_base_api/musl.h | 31 - .../__cxx03/__locale_dir/locale_base_api/newlib.h | 12 - .../__cxx03/__locale_dir/locale_base_api/openbsd.h | 19 - .../__cxx03/__locale_dir/locale_base_api/win32.h | 235 - .../libcxx/include/c++/v1/__cxx03/__math/abs.h | 46 - .../include/c++/v1/__cxx03/__math/copysign.h | 45 - .../c++/v1/__cxx03/__math/error_functions.h | 60 - .../c++/v1/__cxx03/__math/exponential_functions.h | 171 - .../libcxx/include/c++/v1/__cxx03/__math/fdim.h | 48 - .../libcxx/include/c++/v1/__cxx03/__math/fma.h | 55 - .../libcxx/include/c++/v1/__cxx03/__math/gamma.h | 62 - .../c++/v1/__cxx03/__math/hyperbolic_functions.h | 76 - .../libcxx/include/c++/v1/__cxx03/__math/hypot.h | 58 - .../__cxx03/__math/inverse_hyperbolic_functions.h | 76 - .../__math/inverse_trigonometric_functions.h | 99 - .../include/c++/v1/__cxx03/__math/logarithms.h | 124 - .../libcxx/include/c++/v1/__cxx03/__math/min_max.h | 74 - .../libcxx/include/c++/v1/__cxx03/__math/modulo.h | 63 - .../include/c++/v1/__cxx03/__math/remainder.h | 73 - .../libcxx/include/c++/v1/__cxx03/__math/roots.h | 62 - .../c++/v1/__cxx03/__math/rounding_functions.h | 245 - .../libcxx/include/c++/v1/__cxx03/__math/traits.h | 189 - .../v1/__cxx03/__math/trigonometric_functions.h | 76 - .../libcxx/include/c++/v1/__cxx03/__mbstate_t.h | 54 - .../include/c++/v1/__cxx03/__memory/addressof.h | 56 - .../libcxx/include/c++/v1/__cxx03/__memory/align.h | 25 - .../c++/v1/__cxx03/__memory/aligned_alloc.h | 53 - .../c++/v1/__cxx03/__memory/allocate_at_least.h | 36 - .../c++/v1/__cxx03/__memory/allocation_guard.h | 108 - .../include/c++/v1/__cxx03/__memory/allocator.h | 162 - .../c++/v1/__cxx03/__memory/allocator_arg_t.h | 32 - .../c++/v1/__cxx03/__memory/allocator_destructor.h | 40 - .../c++/v1/__cxx03/__memory/allocator_traits.h | 371 -- .../c++/v1/__cxx03/__memory/assume_aligned.h | 41 - .../include/c++/v1/__cxx03/__memory/auto_ptr.h | 88 - .../v1/__cxx03/__memory/builtin_new_allocator.h | 67 - .../c++/v1/__cxx03/__memory/compressed_pair.h | 139 - .../include/c++/v1/__cxx03/__memory/construct_at.h | 77 - .../include/c++/v1/__cxx03/__memory/destruct_n.h | 63 - .../c++/v1/__cxx03/__memory/pointer_traits.h | 217 - .../c++/v1/__cxx03/__memory/raw_storage_iterator.h | 66 - .../include/c++/v1/__cxx03/__memory/shared_ptr.h | 1217 ---- .../c++/v1/__cxx03/__memory/swap_allocator.h | 41 - .../include/c++/v1/__cxx03/__memory/temp_value.h | 45 - .../c++/v1/__cxx03/__memory/temporary_buffer.h | 75 - .../v1/__cxx03/__memory/uninitialized_algorithms.h | 310 -- .../include/c++/v1/__cxx03/__memory/unique_ptr.h | 553 -- .../c++/v1/__cxx03/__memory/uses_allocator.h | 47 - .../include/c++/v1/__cxx03/__memory/voidify.h | 30 - .../include/c++/v1/__cxx03/__mutex/lock_guard.h | 48 - .../libcxx/include/c++/v1/__cxx03/__mutex/mutex.h | 53 - .../include/c++/v1/__cxx03/__mutex/once_flag.h | 102 - .../include/c++/v1/__cxx03/__mutex/tag_types.h | 34 - .../include/c++/v1/__cxx03/__mutex/unique_lock.h | 177 - .../include/c++/v1/__cxx03/__numeric/accumulate.h | 44 - .../c++/v1/__cxx03/__numeric/adjacent_difference.h | 60 - .../c++/v1/__cxx03/__numeric/inner_product.h | 50 - .../libcxx/include/c++/v1/__cxx03/__numeric/iota.h | 29 - .../include/c++/v1/__cxx03/__numeric/partial_sum.h | 58 - .../c++/v1/__cxx03/__ostream/basic_ostream.h | 797 --- .../v1/__cxx03/__random/bernoulli_distribution.h | 118 - .../v1/__cxx03/__random/binomial_distribution.h | 192 - .../c++/v1/__cxx03/__random/cauchy_distribution.h | 133 - .../v1/__cxx03/__random/chi_squared_distribution.h | 120 - .../c++/v1/__cxx03/__random/clamp_to_integral.h | 59 - .../v1/__cxx03/__random/default_random_engine.h | 25 - .../c++/v1/__cxx03/__random/discard_block_engine.h | 161 - .../v1/__cxx03/__random/discrete_distribution.h | 206 - .../v1/__cxx03/__random/exponential_distribution.h | 127 - .../__cxx03/__random/extreme_value_distribution.h | 133 - .../v1/__cxx03/__random/fisher_f_distribution.h | 132 - .../c++/v1/__cxx03/__random/gamma_distribution.h | 175 - .../c++/v1/__cxx03/__random/generate_canonical.h | 46 - .../v1/__cxx03/__random/geometric_distribution.h | 115 - .../v1/__cxx03/__random/independent_bits_engine.h | 197 - .../c++/v1/__cxx03/__random/is_seed_sequence.h | 31 - .../include/c++/v1/__cxx03/__random/is_valid.h | 94 - .../include/c++/v1/__cxx03/__random/knuth_b.h | 26 - .../__cxx03/__random/linear_congruential_engine.h | 378 -- .../libcxx/include/c++/v1/__cxx03/__random/log2.h | 66 - .../v1/__cxx03/__random/lognormal_distribution.h | 121 - .../v1/__cxx03/__random/mersenne_twister_engine.h | 829 --- .../__random/negative_binomial_distribution.h | 152 - .../c++/v1/__cxx03/__random/normal_distribution.h | 170 - .../__random/piecewise_constant_distribution.h | 269 - .../__random/piecewise_linear_distribution.h | 282 - .../c++/v1/__cxx03/__random/poisson_distribution.h | 236 - .../c++/v1/__cxx03/__random/random_device.h | 76 - .../include/c++/v1/__cxx03/__random/ranlux.h | 31 - .../include/c++/v1/__cxx03/__random/seed_seq.h | 159 - .../c++/v1/__cxx03/__random/shuffle_order_engine.h | 222 - .../v1/__cxx03/__random/student_t_distribution.h | 127 - .../__cxx03/__random/subtract_with_carry_engine.h | 270 - .../v1/__cxx03/__random/uniform_int_distribution.h | 253 - .../__cxx03/__random/uniform_real_distribution.h | 132 - .../c++/v1/__cxx03/__random/weibull_distribution.h | 126 - .../libcxx/include/c++/v1/__cxx03/__split_buffer | 544 -- .../include/c++/v1/__cxx03/__std_clang_module | 215 - .../include/c++/v1/__cxx03/__std_mbstate_t.h | 29 - .../include/c++/v1/__cxx03/__string/char_traits.h | 496 -- .../v1/__cxx03/__string/constexpr_c_functions.h | 223 - .../v1/__cxx03/__string/extern_template_lists.h | 133 - .../c++/v1/__cxx03/__support/ibm/gettod_zos.h | 52 - .../c++/v1/__cxx03/__support/ibm/locale_mgmt_zos.h | 53 - .../c++/v1/__cxx03/__support/ibm/nanosleep.h | 55 - .../__cxx03/__support/xlocale/__nop_locale_mgmt.h | 35 - .../__cxx03/__support/xlocale/__posix_l_fallback.h | 107 - .../__support/xlocale/__strtonum_fallback.h | 45 - .../include/c++/v1/__cxx03/__system_error/errc.h | 266 - .../c++/v1/__cxx03/__system_error/error_category.h | 64 - .../c++/v1/__cxx03/__system_error/error_code.h | 123 - .../v1/__cxx03/__system_error/error_condition.h | 109 - .../c++/v1/__cxx03/__system_error/system_error.h | 54 - .../libcxx/include/c++/v1/__cxx03/__thread/id.h | 102 - .../c++/v1/__cxx03/__thread/poll_with_backoff.h | 67 - .../include/c++/v1/__cxx03/__thread/support.h | 123 - .../include/c++/v1/__cxx03/__thread/support/c11.h | 191 - .../c++/v1/__cxx03/__thread/support/external.h | 21 - .../c++/v1/__cxx03/__thread/support/pthread.h | 221 - .../c++/v1/__cxx03/__thread/support/windows.h | 131 - .../include/c++/v1/__cxx03/__thread/this_thread.h | 74 - .../include/c++/v1/__cxx03/__thread/thread.h | 218 - .../c++/v1/__cxx03/__thread/timed_backoff_policy.h | 44 - third_party/libcxx/include/c++/v1/__cxx03/__tree | 2106 ------- .../include/c++/v1/__cxx03/__tuple/find_index.h | 20 - .../c++/v1/__cxx03/__tuple/make_tuple_types.h | 28 - .../c++/v1/__cxx03/__tuple/sfinae_helpers.h | 36 - .../include/c++/v1/__cxx03/__tuple/tuple_element.h | 43 - .../include/c++/v1/__cxx03/__tuple/tuple_indices.h | 20 - .../include/c++/v1/__cxx03/__tuple/tuple_like.h | 26 - .../c++/v1/__cxx03/__tuple/tuple_like_ext.h | 47 - .../v1/__cxx03/__tuple/tuple_like_no_subrange.h | 29 - .../include/c++/v1/__cxx03/__tuple/tuple_size.h | 37 - .../include/c++/v1/__cxx03/__tuple/tuple_types.h | 25 - .../c++/v1/__cxx03/__type_traits/add_const.h | 27 - .../include/c++/v1/__cxx03/__type_traits/add_cv.h | 27 - .../__cxx03/__type_traits/add_lvalue_reference.h | 49 - .../c++/v1/__cxx03/__type_traits/add_pointer.h | 50 - .../__cxx03/__type_traits/add_rvalue_reference.h | 49 - .../c++/v1/__cxx03/__type_traits/add_volatile.h | 27 - .../c++/v1/__cxx03/__type_traits/aligned_storage.h | 129 - .../c++/v1/__cxx03/__type_traits/aligned_union.h | 46 - .../c++/v1/__cxx03/__type_traits/alignment_of.h | 27 - .../c++/v1/__cxx03/__type_traits/can_extract_key.h | 53 - .../c++/v1/__cxx03/__type_traits/common_type.h | 79 - .../c++/v1/__cxx03/__type_traits/conditional.h | 53 - .../c++/v1/__cxx03/__type_traits/conjunction.h | 49 - .../include/c++/v1/__cxx03/__type_traits/copy_cv.h | 51 - .../c++/v1/__cxx03/__type_traits/copy_cvref.h | 43 - .../c++/v1/__cxx03/__type_traits/datasizeof.h | 65 - .../include/c++/v1/__cxx03/__type_traits/decay.h | 68 - .../c++/v1/__cxx03/__type_traits/dependent_type.h | 25 - .../c++/v1/__cxx03/__type_traits/desugars_to.h | 40 - .../c++/v1/__cxx03/__type_traits/disjunction.h | 48 - .../c++/v1/__cxx03/__type_traits/enable_if.h | 32 - .../include/c++/v1/__cxx03/__type_traits/extent.h | 44 - .../__cxx03/__type_traits/has_virtual_destructor.h | 26 - .../v1/__cxx03/__type_traits/integral_constant.h | 39 - .../include/c++/v1/__cxx03/__type_traits/invoke.h | 214 - .../c++/v1/__cxx03/__type_traits/is_abstract.h | 26 - .../c++/v1/__cxx03/__type_traits/is_allocator.h | 34 - .../__cxx03/__type_traits/is_always_bitcastable.h | 85 - .../c++/v1/__cxx03/__type_traits/is_arithmetic.h | 29 - .../c++/v1/__cxx03/__type_traits/is_array.h | 41 - .../c++/v1/__cxx03/__type_traits/is_assignable.h | 37 - .../c++/v1/__cxx03/__type_traits/is_base_of.h | 26 - .../v1/__cxx03/__type_traits/is_bounded_array.h | 29 - .../c++/v1/__cxx03/__type_traits/is_callable.h | 32 - .../v1/__cxx03/__type_traits/is_char_like_type.h | 28 - .../c++/v1/__cxx03/__type_traits/is_class.h | 26 - .../c++/v1/__cxx03/__type_traits/is_compound.h | 36 - .../c++/v1/__cxx03/__type_traits/is_const.h | 37 - .../__cxx03/__type_traits/is_constant_evaluated.h | 26 - .../v1/__cxx03/__type_traits/is_constructible.h | 39 - .../c++/v1/__cxx03/__type_traits/is_convertible.h | 26 - .../v1/__cxx03/__type_traits/is_core_convertible.h | 35 - .../c++/v1/__cxx03/__type_traits/is_destructible.h | 87 - .../c++/v1/__cxx03/__type_traits/is_empty.h | 26 - .../include/c++/v1/__cxx03/__type_traits/is_enum.h | 26 - .../__cxx03/__type_traits/is_equality_comparable.h | 88 - .../v1/__cxx03/__type_traits/is_execution_policy.h | 19 - .../c++/v1/__cxx03/__type_traits/is_final.h | 26 - .../v1/__cxx03/__type_traits/is_floating_point.h | 34 - .../c++/v1/__cxx03/__type_traits/is_function.h | 26 - .../c++/v1/__cxx03/__type_traits/is_fundamental.h | 38 - .../is_implicitly_default_constructible.h | 24 - .../c++/v1/__cxx03/__type_traits/is_integral.h | 64 - .../c++/v1/__cxx03/__type_traits/is_literal_type.h | 26 - .../v1/__cxx03/__type_traits/is_member_pointer.h | 32 - .../__cxx03/__type_traits/is_nothrow_assignable.h | 41 - .../__type_traits/is_nothrow_constructible.h | 41 - .../__type_traits/is_nothrow_destructible.h | 58 - .../c++/v1/__cxx03/__type_traits/is_null_pointer.h | 27 - .../c++/v1/__cxx03/__type_traits/is_object.h | 26 - .../include/c++/v1/__cxx03/__type_traits/is_pod.h | 26 - .../c++/v1/__cxx03/__type_traits/is_pointer.h | 55 - .../c++/v1/__cxx03/__type_traits/is_polymorphic.h | 26 - .../v1/__cxx03/__type_traits/is_primary_template.h | 31 - .../c++/v1/__cxx03/__type_traits/is_reference.h | 48 - .../__cxx03/__type_traits/is_reference_wrapper.h | 32 - .../v1/__cxx03/__type_traits/is_referenceable.h | 41 - .../include/c++/v1/__cxx03/__type_traits/is_same.h | 39 - .../c++/v1/__cxx03/__type_traits/is_scalar.h | 59 - .../c++/v1/__cxx03/__type_traits/is_signed.h | 49 - .../v1/__cxx03/__type_traits/is_signed_integer.h | 35 - .../v1/__cxx03/__type_traits/is_specialization.h | 35 - .../v1/__cxx03/__type_traits/is_standard_layout.h | 26 - .../c++/v1/__cxx03/__type_traits/is_swappable.h | 60 - .../c++/v1/__cxx03/__type_traits/is_trivial.h | 26 - .../__type_traits/is_trivially_assignable.h | 41 - .../__type_traits/is_trivially_constructible.h | 41 - .../__cxx03/__type_traits/is_trivially_copyable.h | 27 - .../__type_traits/is_trivially_destructible.h | 42 - .../is_trivially_lexicographically_comparable.h | 53 - .../__type_traits/is_trivially_relocatable.h | 42 - .../v1/__cxx03/__type_traits/is_unbounded_array.h | 28 - .../c++/v1/__cxx03/__type_traits/is_union.h | 26 - .../c++/v1/__cxx03/__type_traits/is_unsigned.h | 49 - .../v1/__cxx03/__type_traits/is_unsigned_integer.h | 35 - .../v1/__cxx03/__type_traits/is_valid_expansion.h | 31 - .../include/c++/v1/__cxx03/__type_traits/is_void.h | 26 - .../c++/v1/__cxx03/__type_traits/is_volatile.h | 37 - .../include/c++/v1/__cxx03/__type_traits/lazy.h | 25 - .../__cxx03/__type_traits/make_32_64_or_128_bit.h | 46 - .../__cxx03/__type_traits/make_const_lvalue_ref.h | 26 - .../c++/v1/__cxx03/__type_traits/make_signed.h | 84 - .../c++/v1/__cxx03/__type_traits/make_unsigned.h | 89 - .../c++/v1/__cxx03/__type_traits/maybe_const.h | 26 - .../include/c++/v1/__cxx03/__type_traits/nat.h | 24 - .../c++/v1/__cxx03/__type_traits/negation.h | 26 - .../__type_traits/noexcept_move_assign_container.h | 31 - .../include/c++/v1/__cxx03/__type_traits/promote.h | 128 - .../include/c++/v1/__cxx03/__type_traits/rank.h | 41 - .../v1/__cxx03/__type_traits/remove_all_extents.h | 49 - .../c++/v1/__cxx03/__type_traits/remove_const.h | 44 - .../v1/__cxx03/__type_traits/remove_const_ref.h | 27 - .../c++/v1/__cxx03/__type_traits/remove_cv.h | 42 - .../c++/v1/__cxx03/__type_traits/remove_cvref.h | 36 - .../c++/v1/__cxx03/__type_traits/remove_extent.h | 49 - .../c++/v1/__cxx03/__type_traits/remove_pointer.h | 48 - .../v1/__cxx03/__type_traits/remove_reference.h | 42 - .../c++/v1/__cxx03/__type_traits/remove_volatile.h | 44 - .../c++/v1/__cxx03/__type_traits/result_of.h | 31 - .../c++/v1/__cxx03/__type_traits/strip_signature.h | 18 - .../c++/v1/__cxx03/__type_traits/type_identity.h | 30 - .../c++/v1/__cxx03/__type_traits/type_list.h | 42 - .../c++/v1/__cxx03/__type_traits/underlying_type.h | 37 - .../c++/v1/__cxx03/__type_traits/unwrap_ref.h | 37 - .../include/c++/v1/__cxx03/__type_traits/void_t.h | 25 - .../libcxx/include/c++/v1/__cxx03/__undef_macros | 28 - .../include/c++/v1/__cxx03/__utility/as_lvalue.h | 28 - .../include/c++/v1/__cxx03/__utility/auto_cast.h | 22 - .../c++/v1/__cxx03/__utility/convert_to_integral.h | 63 - .../include/c++/v1/__cxx03/__utility/declval.h | 38 - .../include/c++/v1/__cxx03/__utility/empty.h | 24 - .../c++/v1/__cxx03/__utility/exception_guard.h | 136 - .../include/c++/v1/__cxx03/__utility/forward.h | 38 - .../c++/v1/__cxx03/__utility/integer_sequence.h | 48 - .../c++/v1/__cxx03/__utility/is_pointer_in_range.h | 62 - .../c++/v1/__cxx03/__utility/is_valid_range.h | 36 - .../libcxx/include/c++/v1/__cxx03/__utility/move.h | 49 - .../include/c++/v1/__cxx03/__utility/no_destroy.h | 54 - .../libcxx/include/c++/v1/__cxx03/__utility/pair.h | 274 - .../c++/v1/__cxx03/__utility/piecewise_construct.h | 26 - .../c++/v1/__cxx03/__utility/priority_tag.h | 28 - .../v1/__cxx03/__utility/private_constructor_tag.h | 28 - .../include/c++/v1/__cxx03/__utility/rel_ops.h | 46 - .../c++/v1/__cxx03/__utility/small_buffer.h | 26 - .../libcxx/include/c++/v1/__cxx03/__utility/swap.h | 52 - .../include/c++/v1/__cxx03/__utility/unreachable.h | 28 - .../include/c++/v1/__cxx03/__variant/monostate.h | 26 - .../libcxx/include/c++/v1/__cxx03/__verbose_abort | 52 - .../libcxx/include/c++/v1/__cxx03/__verbose_trap | 36 - .../libcxx/include/c++/v1/__cxx03/algorithm | 1924 ------- third_party/libcxx/include/c++/v1/__cxx03/array | 419 -- third_party/libcxx/include/c++/v1/__cxx03/atomic | 627 --- third_party/libcxx/include/c++/v1/__cxx03/bitset | 886 --- third_party/libcxx/include/c++/v1/__cxx03/cassert | 31 - third_party/libcxx/include/c++/v1/__cxx03/ccomplex | 26 - third_party/libcxx/include/c++/v1/__cxx03/cctype | 127 - third_party/libcxx/include/c++/v1/__cxx03/cerrno | 48 - third_party/libcxx/include/c++/v1/__cxx03/cfenv | 90 - third_party/libcxx/include/c++/v1/__cxx03/cfloat | 86 - third_party/libcxx/include/c++/v1/__cxx03/chrono | 969 ---- .../libcxx/include/c++/v1/__cxx03/cinttypes | 270 - third_party/libcxx/include/c++/v1/__cxx03/ciso646 | 24 - third_party/libcxx/include/c++/v1/__cxx03/climits | 48 - third_party/libcxx/include/c++/v1/__cxx03/clocale | 61 - third_party/libcxx/include/c++/v1/__cxx03/cmath | 606 -- third_party/libcxx/include/c++/v1/__cxx03/codecvt | 591 -- third_party/libcxx/include/c++/v1/__cxx03/complex | 1298 ----- .../include/c++/v1/__cxx03/condition_variable | 267 - third_party/libcxx/include/c++/v1/__cxx03/csetjmp | 54 - third_party/libcxx/include/c++/v1/__cxx03/csignal | 64 - third_party/libcxx/include/c++/v1/__cxx03/cstdarg | 54 - third_party/libcxx/include/c++/v1/__cxx03/cstdbool | 31 - third_party/libcxx/include/c++/v1/__cxx03/cstddef | 64 - third_party/libcxx/include/c++/v1/__cxx03/cstdint | 199 - third_party/libcxx/include/c++/v1/__cxx03/cstdio | 172 - third_party/libcxx/include/c++/v1/__cxx03/cstdlib | 147 - third_party/libcxx/include/c++/v1/__cxx03/cstring | 104 - third_party/libcxx/include/c++/v1/__cxx03/ctgmath | 28 - third_party/libcxx/include/c++/v1/__cxx03/ctime | 80 - third_party/libcxx/include/c++/v1/__cxx03/cuchar | 59 - third_party/libcxx/include/c++/v1/__cxx03/cwchar | 256 - third_party/libcxx/include/c++/v1/__cxx03/cwctype | 97 - third_party/libcxx/include/c++/v1/__cxx03/deque | 2134 ------- .../libcxx/include/c++/v1/__cxx03/exception | 96 - .../include/c++/v1/__cxx03/experimental/__config | 45 - .../include/c++/v1/__cxx03/experimental/utility | 40 - .../libcxx/include/c++/v1/__cxx03/ext/__hash | 85 - .../libcxx/include/c++/v1/__cxx03/ext/hash_map | 864 --- .../libcxx/include/c++/v1/__cxx03/ext/hash_set | 583 -- .../libcxx/include/c++/v1/__cxx03/forward_list | 1245 ----- third_party/libcxx/include/c++/v1/__cxx03/fstream | 1464 ----- .../libcxx/include/c++/v1/__cxx03/functional | 576 -- third_party/libcxx/include/c++/v1/__cxx03/future | 1946 ------- third_party/libcxx/include/c++/v1/__cxx03/iomanip | 510 -- third_party/libcxx/include/c++/v1/__cxx03/ios | 877 --- third_party/libcxx/include/c++/v1/__cxx03/iosfwd | 166 - third_party/libcxx/include/c++/v1/__cxx03/iostream | 67 - third_party/libcxx/include/c++/v1/__cxx03/istream | 1345 ----- third_party/libcxx/include/c++/v1/__cxx03/iterator | 718 --- third_party/libcxx/include/c++/v1/__cxx03/limits | 544 -- third_party/libcxx/include/c++/v1/__cxx03/list | 1368 ----- third_party/libcxx/include/c++/v1/__cxx03/locale | 3724 ------------- third_party/libcxx/include/c++/v1/__cxx03/locale.h | 46 - third_party/libcxx/include/c++/v1/__cxx03/map | 1332 ----- third_party/libcxx/include/c++/v1/__cxx03/math.h | 520 -- third_party/libcxx/include/c++/v1/__cxx03/memory | 973 ---- .../libcxx/include/c++/v1/__cxx03/module.modulemap | 2132 ------- third_party/libcxx/include/c++/v1/__cxx03/mutex | 375 -- third_party/libcxx/include/c++/v1/__cxx03/new | 326 -- third_party/libcxx/include/c++/v1/__cxx03/numeric | 187 - third_party/libcxx/include/c++/v1/__cxx03/ostream | 195 - third_party/libcxx/include/c++/v1/__cxx03/queue | 588 -- third_party/libcxx/include/c++/v1/__cxx03/random | 1735 ------ third_party/libcxx/include/c++/v1/__cxx03/ratio | 461 -- third_party/libcxx/include/c++/v1/__cxx03/regex | 5638 ------------------- third_party/libcxx/include/c++/v1/__cxx03/set | 914 --- third_party/libcxx/include/c++/v1/__cxx03/sstream | 906 --- third_party/libcxx/include/c++/v1/__cxx03/stack | 250 - .../libcxx/include/c++/v1/__cxx03/stdatomic.h | 136 - .../libcxx/include/c++/v1/__cxx03/stdexcept | 286 - third_party/libcxx/include/c++/v1/__cxx03/stdint.h | 127 - third_party/libcxx/include/c++/v1/__cxx03/stdlib.h | 151 - .../libcxx/include/c++/v1/__cxx03/streambuf | 445 -- third_party/libcxx/include/c++/v1/__cxx03/string | 3570 ------------ third_party/libcxx/include/c++/v1/__cxx03/string.h | 110 - .../libcxx/include/c++/v1/__cxx03/string_view | 733 --- .../libcxx/include/c++/v1/__cxx03/strstream | 267 - .../libcxx/include/c++/v1/__cxx03/system_error | 166 - third_party/libcxx/include/c++/v1/__cxx03/thread | 123 - .../libcxx/include/c++/v1/__cxx03/type_traits | 497 -- .../libcxx/include/c++/v1/__cxx03/typeindex | 92 - third_party/libcxx/include/c++/v1/__cxx03/typeinfo | 383 -- third_party/libcxx/include/c++/v1/__cxx03/uchar.h | 41 - .../libcxx/include/c++/v1/__cxx03/unordered_map | 1456 ----- .../libcxx/include/c++/v1/__cxx03/unordered_set | 1045 ---- third_party/libcxx/include/c++/v1/__cxx03/utility | 281 - third_party/libcxx/include/c++/v1/__cxx03/valarray | 3197 ----------- third_party/libcxx/include/c++/v1/__cxx03/vector | 2454 -------- third_party/libcxx/include/c++/v1/__cxx03/version | 273 - third_party/libcxx/include/c++/v1/__cxx03/wchar.h | 211 - .../libcxx/include/c++/v1/__cxxabi_config.h | 137 - .../include/c++/v1/__debug_utils/randomize_range.h | 42 - .../include/c++/v1/__debug_utils/sanitizers.h | 129 - .../v1/__debug_utils/strict_weak_ordering_check.h | 77 - .../libcxx/include/c++/v1/__exception/exception.h | 96 - .../include/c++/v1/__exception/exception_ptr.h | 226 - .../include/c++/v1/__exception/nested_exception.h | 100 - .../libcxx/include/c++/v1/__exception/operations.h | 42 - .../libcxx/include/c++/v1/__exception/terminate.h | 22 - .../c++/v1/__expected/bad_expected_access.h | 75 - .../libcxx/include/c++/v1/__expected/expected.h | 1907 ------- .../libcxx/include/c++/v1/__expected/unexpect.h | 32 - .../libcxx/include/c++/v1/__expected/unexpected.h | 127 - .../include/c++/v1/__filesystem/copy_options.h | 69 - .../include/c++/v1/__filesystem/directory_entry.h | 474 -- .../c++/v1/__filesystem/directory_iterator.h | 148 - .../c++/v1/__filesystem/directory_options.h | 60 - .../include/c++/v1/__filesystem/file_status.h | 67 - .../include/c++/v1/__filesystem/file_time_type.h | 31 - .../libcxx/include/c++/v1/__filesystem/file_type.h | 42 - .../include/c++/v1/__filesystem/filesystem_error.h | 87 - .../include/c++/v1/__filesystem/operations.h | 341 -- .../libcxx/include/c++/v1/__filesystem/path.h | 919 --- .../include/c++/v1/__filesystem/path_iterator.h | 110 - .../include/c++/v1/__filesystem/perm_options.h | 57 - .../libcxx/include/c++/v1/__filesystem/perms.h | 80 - .../v1/__filesystem/recursive_directory_iterator.h | 158 - .../include/c++/v1/__filesystem/space_info.h | 38 - .../libcxx/include/c++/v1/__filesystem/u8path.h | 93 - .../libcxx/include/c++/v1/__flat_map/flat_map.h | 1289 ----- .../include/c++/v1/__flat_map/flat_multimap.h | 1081 ---- .../include/c++/v1/__flat_map/key_value_iterator.h | 217 - .../include/c++/v1/__flat_map/sorted_equivalent.h | 31 - .../include/c++/v1/__flat_map/sorted_unique.h | 31 - .../libcxx/include/c++/v1/__flat_map/utils.h | 122 - .../include/c++/v1/__flat_set/flat_multiset.h | 851 --- .../libcxx/include/c++/v1/__flat_set/flat_set.h | 892 --- .../libcxx/include/c++/v1/__flat_set/ra_iterator.h | 157 - .../libcxx/include/c++/v1/__flat_set/utils.h | 82 - .../libcxx/include/c++/v1/__format/buffer.h | 708 --- .../libcxx/include/c++/v1/__format/concepts.h | 69 - .../include/c++/v1/__format/container_adaptor.h | 73 - .../include/c++/v1/__format/enable_insertable.h | 35 - .../include/c++/v1/__format/escaped_output_table.h | 887 --- .../v1/__format/extended_grapheme_cluster_table.h | 1669 ------ .../libcxx/include/c++/v1/__format/fmt_pair_like.h | 42 - .../libcxx/include/c++/v1/__format/format_arg.h | 399 -- .../include/c++/v1/__format/format_arg_store.h | 282 - .../libcxx/include/c++/v1/__format/format_args.h | 78 - .../include/c++/v1/__format/format_context.h | 212 - .../libcxx/include/c++/v1/__format/format_error.h | 50 - .../include/c++/v1/__format/format_functions.h | 722 --- .../include/c++/v1/__format/format_parse_context.h | 105 - .../libcxx/include/c++/v1/__format/format_string.h | 160 - .../include/c++/v1/__format/format_to_n_result.h | 35 - .../libcxx/include/c++/v1/__format/formatter.h | 58 - .../include/c++/v1/__format/formatter_bool.h | 55 - .../include/c++/v1/__format/formatter_bool_impl.h | 60 - .../include/c++/v1/__format/formatter_char.h | 101 - .../c++/v1/__format/formatter_floating_point.h | 792 --- .../include/c++/v1/__format/formatter_integer.h | 126 - .../include/c++/v1/__format/formatter_integral.h | 446 -- .../include/c++/v1/__format/formatter_output.h | 313 -- .../include/c++/v1/__format/formatter_pointer.h | 80 - .../include/c++/v1/__format/formatter_string.h | 173 - .../include/c++/v1/__format/formatter_tuple.h | 148 - .../c++/v1/__format/indic_conjunct_break_table.h | 553 -- .../c++/v1/__format/parser_std_format_spec.h | 1172 ---- .../c++/v1/__format/range_default_formatter.h | 176 - .../libcxx/include/c++/v1/__format/range_format.h | 57 - .../include/c++/v1/__format/range_formatter.h | 265 - .../libcxx/include/c++/v1/__format/unicode.h | 602 -- .../c++/v1/__format/width_estimation_table.h | 275 - .../libcxx/include/c++/v1/__format/write_escaped.h | 242 - .../include/c++/v1/__functional/binary_function.h | 53 - .../include/c++/v1/__functional/binary_negate.h | 51 - .../libcxx/include/c++/v1/__functional/bind.h | 288 - .../libcxx/include/c++/v1/__functional/bind_back.h | 83 - .../include/c++/v1/__functional/bind_front.h | 103 - .../libcxx/include/c++/v1/__functional/binder1st.h | 54 - .../libcxx/include/c++/v1/__functional/binder2nd.h | 54 - .../c++/v1/__functional/boyer_moore_searcher.h | 305 - .../libcxx/include/c++/v1/__functional/compose.h | 53 - .../include/c++/v1/__functional/default_searcher.h | 54 - .../libcxx/include/c++/v1/__functional/function.h | 813 --- .../libcxx/include/c++/v1/__functional/hash.h | 464 -- .../libcxx/include/c++/v1/__functional/identity.h | 65 - .../libcxx/include/c++/v1/__functional/invoke.h | 55 - .../include/c++/v1/__functional/is_transparent.h | 42 - .../libcxx/include/c++/v1/__functional/mem_fn.h | 53 - .../include/c++/v1/__functional/mem_fun_ref.h | 145 - .../libcxx/include/c++/v1/__functional/not_fn.h | 76 - .../include/c++/v1/__functional/operations.h | 569 -- .../include/c++/v1/__functional/perfect_forward.h | 105 - .../v1/__functional/pointer_to_binary_function.h | 43 - .../v1/__functional/pointer_to_unary_function.h | 43 - .../c++/v1/__functional/ranges_operations.h | 122 - .../c++/v1/__functional/reference_wrapper.h | 192 - .../include/c++/v1/__functional/unary_function.h | 50 - .../include/c++/v1/__functional/unary_negate.h | 47 - .../include/c++/v1/__functional/weak_result_type.h | 214 - third_party/libcxx/include/c++/v1/__fwd/array.h | 47 - .../libcxx/include/c++/v1/__fwd/bit_reference.h | 44 - third_party/libcxx/include/c++/v1/__fwd/byte.h | 26 - third_party/libcxx/include/c++/v1/__fwd/complex.h | 42 - third_party/libcxx/include/c++/v1/__fwd/deque.h | 26 - third_party/libcxx/include/c++/v1/__fwd/format.h | 55 - third_party/libcxx/include/c++/v1/__fwd/fstream.h | 53 - .../libcxx/include/c++/v1/__fwd/functional.h | 35 - third_party/libcxx/include/c++/v1/__fwd/get.h | 24 - third_party/libcxx/include/c++/v1/__fwd/ios.h | 43 - third_party/libcxx/include/c++/v1/__fwd/istream.h | 43 - third_party/libcxx/include/c++/v1/__fwd/mdspan.h | 57 - third_party/libcxx/include/c++/v1/__fwd/memory.h | 28 - .../libcxx/include/c++/v1/__fwd/memory_resource.h | 31 - third_party/libcxx/include/c++/v1/__fwd/ostream.h | 35 - third_party/libcxx/include/c++/v1/__fwd/pair.h | 51 - third_party/libcxx/include/c++/v1/__fwd/queue.h | 31 - third_party/libcxx/include/c++/v1/__fwd/span.h | 38 - third_party/libcxx/include/c++/v1/__fwd/sstream.h | 58 - third_party/libcxx/include/c++/v1/__fwd/stack.h | 26 - .../libcxx/include/c++/v1/__fwd/streambuf.h | 35 - third_party/libcxx/include/c++/v1/__fwd/string.h | 107 - .../libcxx/include/c++/v1/__fwd/string_view.h | 50 - third_party/libcxx/include/c++/v1/__fwd/subrange.h | 49 - third_party/libcxx/include/c++/v1/__fwd/tuple.h | 66 - third_party/libcxx/include/c++/v1/__fwd/variant.h | 68 - third_party/libcxx/include/c++/v1/__fwd/vector.h | 29 - third_party/libcxx/include/c++/v1/__hash_table | 2124 ------- third_party/libcxx/include/c++/v1/__ios/fpos.h | 76 - .../libcxx/include/c++/v1/__iterator/access.h | 95 - .../libcxx/include/c++/v1/__iterator/advance.h | 199 - .../include/c++/v1/__iterator/aliasing_iterator.h | 130 - .../c++/v1/__iterator/back_insert_iterator.h | 79 - .../include/c++/v1/__iterator/bounded_iter.h | 289 - .../c++/v1/__iterator/capacity_aware_iterator.h | 186 - .../include/c++/v1/__iterator/common_iterator.h | 301 - .../libcxx/include/c++/v1/__iterator/concepts.h | 324 -- .../include/c++/v1/__iterator/counted_iterator.h | 289 - .../c++/v1/__iterator/cpp17_iterator_concepts.h | 191 - .../libcxx/include/c++/v1/__iterator/data.h | 48 - .../include/c++/v1/__iterator/default_sentinel.h | 30 - .../libcxx/include/c++/v1/__iterator/distance.h | 117 - .../libcxx/include/c++/v1/__iterator/empty.h | 44 - .../include/c++/v1/__iterator/erase_if_container.h | 43 - .../c++/v1/__iterator/front_insert_iterator.h | 77 - .../c++/v1/__iterator/incrementable_traits.h | 79 - .../c++/v1/__iterator/indirectly_comparable.h | 33 - .../include/c++/v1/__iterator/insert_iterator.h | 89 - .../include/c++/v1/__iterator/istream_iterator.h | 103 - .../c++/v1/__iterator/istreambuf_iterator.h | 110 - .../libcxx/include/c++/v1/__iterator/iter_move.h | 104 - .../libcxx/include/c++/v1/__iterator/iter_swap.h | 108 - .../libcxx/include/c++/v1/__iterator/iterator.h | 46 - .../include/c++/v1/__iterator/iterator_traits.h | 479 -- .../include/c++/v1/__iterator/iterator_with_data.h | 105 - .../libcxx/include/c++/v1/__iterator/mergeable.h | 42 - .../include/c++/v1/__iterator/move_iterator.h | 347 -- .../include/c++/v1/__iterator/move_sentinel.h | 61 - .../libcxx/include/c++/v1/__iterator/next.h | 74 - .../include/c++/v1/__iterator/ostream_iterator.h | 69 - .../c++/v1/__iterator/ostreambuf_iterator.h | 94 - .../libcxx/include/c++/v1/__iterator/permutable.h | 34 - .../libcxx/include/c++/v1/__iterator/prev.h | 84 - .../include/c++/v1/__iterator/product_iterator.h | 76 - .../libcxx/include/c++/v1/__iterator/projected.h | 61 - .../c++/v1/__iterator/ranges_iterator_traits.h | 40 - .../include/c++/v1/__iterator/readable_traits.h | 81 - .../include/c++/v1/__iterator/reverse_access.h | 79 - .../include/c++/v1/__iterator/reverse_iterator.h | 324 -- .../include/c++/v1/__iterator/segmented_iterator.h | 80 - .../libcxx/include/c++/v1/__iterator/size.h | 60 - .../libcxx/include/c++/v1/__iterator/sortable.h | 35 - .../c++/v1/__iterator/static_bounded_iter.h | 318 -- .../c++/v1/__iterator/unreachable_sentinel.h | 37 - .../libcxx/include/c++/v1/__iterator/wrap_iter.h | 243 - third_party/libcxx/include/c++/v1/__locale | 1501 ----- .../include/c++/v1/__locale_dir/check_grouping.h | 31 - .../include/c++/v1/__locale_dir/get_c_locale.h | 40 - .../include/c++/v1/__locale_dir/locale_base_api.h | 302 - .../locale_base_api/bsd_locale_fallbacks.h | 130 - .../c++/v1/__locale_dir/locale_base_api/ibm.h | 97 - .../c++/v1/__locale_dir/locale_base_api/openbsd.h | 19 - .../libcxx/include/c++/v1/__locale_dir/messages.h | 143 - .../libcxx/include/c++/v1/__locale_dir/money.h | 873 --- .../libcxx/include/c++/v1/__locale_dir/num.h | 1019 ---- .../include/c++/v1/__locale_dir/pad_and_output.h | 75 - .../include/c++/v1/__locale_dir/scan_keyword.h | 143 - .../include/c++/v1/__locale_dir/support/aix.h | 296 - .../include/c++/v1/__locale_dir/support/apple.h | 20 - .../include/c++/v1/__locale_dir/support/bsd_like.h | 211 - .../include/c++/v1/__locale_dir/support/freebsd.h | 20 - .../include/c++/v1/__locale_dir/support/fuchsia.h | 153 - .../include/c++/v1/__locale_dir/support/linux.h | 244 - .../include/c++/v1/__locale_dir/support/netbsd.h | 20 - .../include/c++/v1/__locale_dir/support/newlib.h | 243 - .../v1/__locale_dir/support/no_locale/characters.h | 92 - .../v1/__locale_dir/support/no_locale/strtonum.h | 40 - .../include/c++/v1/__locale_dir/support/windows.h | 309 -- .../libcxx/include/c++/v1/__locale_dir/time.h | 762 --- .../include/c++/v1/__locale_dir/wbuffer_convert.h | 430 -- .../include/c++/v1/__locale_dir/wstring_convert.h | 254 - .../libcxx/include/c++/v1/__log_hardening_failure | 42 - third_party/libcxx/include/c++/v1/__math/abs.h | 70 - .../libcxx/include/c++/v1/__math/copysign.h | 44 - .../libcxx/include/c++/v1/__math/error_functions.h | 60 - .../include/c++/v1/__math/exponential_functions.h | 171 - third_party/libcxx/include/c++/v1/__math/fdim.h | 48 - third_party/libcxx/include/c++/v1/__math/fma.h | 55 - third_party/libcxx/include/c++/v1/__math/gamma.h | 88 - .../include/c++/v1/__math/hyperbolic_functions.h | 76 - third_party/libcxx/include/c++/v1/__math/hypot.h | 108 - .../c++/v1/__math/inverse_hyperbolic_functions.h | 76 - .../v1/__math/inverse_trigonometric_functions.h | 99 - .../libcxx/include/c++/v1/__math/logarithms.h | 124 - third_party/libcxx/include/c++/v1/__math/min_max.h | 74 - third_party/libcxx/include/c++/v1/__math/modulo.h | 63 - .../libcxx/include/c++/v1/__math/remainder.h | 72 - third_party/libcxx/include/c++/v1/__math/roots.h | 62 - .../include/c++/v1/__math/rounding_functions.h | 245 - .../include/c++/v1/__math/special_functions.h | 84 - third_party/libcxx/include/c++/v1/__math/traits.h | 265 - .../c++/v1/__math/trigonometric_functions.h | 76 - third_party/libcxx/include/c++/v1/__mbstate_t.h | 54 - .../include/c++/v1/__mdspan/aligned_accessor.h | 87 - .../include/c++/v1/__mdspan/default_accessor.h | 65 - .../libcxx/include/c++/v1/__mdspan/extents.h | 536 -- .../libcxx/include/c++/v1/__mdspan/layout_left.h | 203 - .../libcxx/include/c++/v1/__mdspan/layout_right.h | 201 - .../libcxx/include/c++/v1/__mdspan/layout_stride.h | 370 -- .../libcxx/include/c++/v1/__mdspan/mdspan.h | 328 -- .../libcxx/include/c++/v1/__memory/addressof.h | 61 - third_party/libcxx/include/c++/v1/__memory/align.h | 42 - .../include/c++/v1/__memory/allocate_at_least.h | 53 - .../include/c++/v1/__memory/allocation_guard.h | 109 - .../libcxx/include/c++/v1/__memory/allocator.h | 165 - .../include/c++/v1/__memory/allocator_arg_t.h | 75 - .../include/c++/v1/__memory/allocator_destructor.h | 40 - .../include/c++/v1/__memory/allocator_traits.h | 443 -- .../libcxx/include/c++/v1/__memory/array_cookie.h | 123 - .../include/c++/v1/__memory/assume_aligned.h | 50 - .../libcxx/include/c++/v1/__memory/auto_ptr.h | 92 - .../include/c++/v1/__memory/compressed_pair.h | 142 - .../libcxx/include/c++/v1/__memory/concepts.h | 63 - .../libcxx/include/c++/v1/__memory/construct_at.h | 82 - .../libcxx/include/c++/v1/__memory/destroy.h | 71 - .../libcxx/include/c++/v1/__memory/destruct_n.h | 63 - .../libcxx/include/c++/v1/__memory/inout_ptr.h | 109 - .../c++/v1/__memory/is_sufficiently_aligned.h | 39 - .../v1/__memory/noexcept_move_assign_container.h | 37 - .../libcxx/include/c++/v1/__memory/out_ptr.h | 101 - .../include/c++/v1/__memory/pointer_traits.h | 271 - .../include/c++/v1/__memory/ranges_construct_at.h | 72 - .../include/c++/v1/__memory/ranges_destroy.h | 79 - .../v1/__memory/ranges_uninitialized_algorithms.h | 284 - .../include/c++/v1/__memory/raw_storage_iterator.h | 80 - .../libcxx/include/c++/v1/__memory/shared_count.h | 116 - .../libcxx/include/c++/v1/__memory/shared_ptr.h | 1543 ------ .../include/c++/v1/__memory/swap_allocator.h | 54 - .../libcxx/include/c++/v1/__memory/temp_value.h | 57 - .../include/c++/v1/__memory/temporary_buffer.h | 45 - .../c++/v1/__memory/uninitialized_algorithms.h | 577 -- .../libcxx/include/c++/v1/__memory/unique_ptr.h | 813 --- .../c++/v1/__memory/unique_temporary_buffer.h | 93 - .../include/c++/v1/__memory/uses_allocator.h | 52 - .../c++/v1/__memory/uses_allocator_construction.h | 234 - .../libcxx/include/c++/v1/__memory/valid_range.h | 74 - .../c++/v1/__memory_resource/memory_resource.h | 91 - .../__memory_resource/monotonic_buffer_resource.h | 119 - .../v1/__memory_resource/polymorphic_allocator.h | 251 - .../c++/v1/__memory_resource/pool_options.h | 38 - .../__memory_resource/synchronized_pool_resource.h | 95 - .../unsynchronized_pool_resource.h | 106 - .../libcxx/include/c++/v1/__mutex/lock_guard.h | 46 - third_party/libcxx/include/c++/v1/__mutex/mutex.h | 53 - .../libcxx/include/c++/v1/__mutex/once_flag.h | 163 - .../libcxx/include/c++/v1/__mutex/tag_types.h | 44 - .../libcxx/include/c++/v1/__mutex/unique_lock.h | 174 - .../libcxx/include/c++/v1/__new/align_val_t.h | 35 - third_party/libcxx/include/c++/v1/__new/allocate.h | 78 - .../include/c++/v1/__new/destroying_delete_t.h | 29 - .../libcxx/include/c++/v1/__new/exceptions.h | 79 - .../include/c++/v1/__new/global_new_delete.h | 70 - .../include/c++/v1/__new/interference_size.h | 30 - third_party/libcxx/include/c++/v1/__new/launder.h | 34 - .../libcxx/include/c++/v1/__new/new_handler.h | 28 - .../libcxx/include/c++/v1/__new/nothrow_t.h | 29 - .../include/c++/v1/__new/placement_new_delete.h | 34 - third_party/libcxx/include/c++/v1/__node_handle | 210 - .../libcxx/include/c++/v1/__numeric/accumulate.h | 53 - .../include/c++/v1/__numeric/adjacent_difference.h | 68 - .../include/c++/v1/__numeric/exclusive_scan.h | 58 - .../libcxx/include/c++/v1/__numeric/gcd_lcm.h | 120 - .../include/c++/v1/__numeric/inclusive_scan.h | 59 - .../include/c++/v1/__numeric/inner_product.h | 58 - third_party/libcxx/include/c++/v1/__numeric/iota.h | 30 - .../libcxx/include/c++/v1/__numeric/midpoint.h | 83 - .../libcxx/include/c++/v1/__numeric/partial_sum.h | 66 - third_party/libcxx/include/c++/v1/__numeric/pstl.h | 174 - .../libcxx/include/c++/v1/__numeric/ranges_iota.h | 65 - .../libcxx/include/c++/v1/__numeric/reduce.h | 53 - .../c++/v1/__numeric/saturation_arithmetic.h | 154 - .../c++/v1/__numeric/transform_exclusive_scan.h | 42 - .../c++/v1/__numeric/transform_inclusive_scan.h | 52 - .../include/c++/v1/__numeric/transform_reduce.h | 59 - .../include/c++/v1/__ostream/basic_ostream.h | 681 --- .../libcxx/include/c++/v1/__ostream/print.h | 172 - .../c++/v1/__ostream/put_character_sequence.h | 59 - third_party/libcxx/include/c++/v1/__pstl/backend.h | 39 - .../libcxx/include/c++/v1/__pstl/backend_fwd.h | 313 -- .../include/c++/v1/__pstl/backends/default.h | 539 -- .../include/c++/v1/__pstl/backends/libdispatch.h | 402 -- .../libcxx/include/c++/v1/__pstl/backends/serial.h | 185 - .../include/c++/v1/__pstl/backends/std_thread.h | 139 - .../include/c++/v1/__pstl/cpu_algos/any_of.h | 103 - .../include/c++/v1/__pstl/cpu_algos/cpu_traits.h | 89 - .../libcxx/include/c++/v1/__pstl/cpu_algos/fill.h | 70 - .../include/c++/v1/__pstl/cpu_algos/find_if.h | 140 - .../include/c++/v1/__pstl/cpu_algos/for_each.h | 70 - .../libcxx/include/c++/v1/__pstl/cpu_algos/merge.h | 89 - .../include/c++/v1/__pstl/cpu_algos/stable_sort.h | 51 - .../include/c++/v1/__pstl/cpu_algos/transform.h | 156 - .../c++/v1/__pstl/cpu_algos/transform_reduce.h | 219 - .../libcxx/include/c++/v1/__pstl/dispatch.h | 71 - .../include/c++/v1/__pstl/handle_exception.h | 61 - .../c++/v1/__random/bernoulli_distribution.h | 123 - .../c++/v1/__random/binomial_distribution.h | 186 - .../include/c++/v1/__random/cauchy_distribution.h | 139 - .../c++/v1/__random/chi_squared_distribution.h | 125 - .../include/c++/v1/__random/clamp_to_integral.h | 59 - .../c++/v1/__random/default_random_engine.h | 25 - .../include/c++/v1/__random/discard_block_engine.h | 166 - .../c++/v1/__random/discrete_distribution.h | 212 - .../c++/v1/__random/exponential_distribution.h | 132 - .../c++/v1/__random/extreme_value_distribution.h | 139 - .../c++/v1/__random/fisher_f_distribution.h | 138 - .../include/c++/v1/__random/gamma_distribution.h | 181 - .../include/c++/v1/__random/generate_canonical.h | 51 - .../c++/v1/__random/geometric_distribution.h | 120 - .../c++/v1/__random/independent_bits_engine.h | 205 - .../include/c++/v1/__random/is_seed_sequence.h | 31 - .../libcxx/include/c++/v1/__random/is_valid.h | 94 - .../libcxx/include/c++/v1/__random/knuth_b.h | 26 - .../c++/v1/__random/linear_congruential_engine.h | 371 -- third_party/libcxx/include/c++/v1/__random/log2.h | 66 - .../c++/v1/__random/lognormal_distribution.h | 126 - .../c++/v1/__random/mersenne_twister_engine.h | 488 -- .../v1/__random/negative_binomial_distribution.h | 157 - .../include/c++/v1/__random/normal_distribution.h | 176 - .../v1/__random/piecewise_constant_distribution.h | 305 - .../v1/__random/piecewise_linear_distribution.h | 319 -- .../include/c++/v1/__random/poisson_distribution.h | 241 - .../libcxx/include/c++/v1/__random/random_device.h | 81 - .../libcxx/include/c++/v1/__random/ranlux.h | 31 - .../libcxx/include/c++/v1/__random/seed_seq.h | 168 - .../include/c++/v1/__random/shuffle_order_engine.h | 227 - .../c++/v1/__random/student_t_distribution.h | 132 - .../c++/v1/__random/subtract_with_carry_engine.h | 264 - .../c++/v1/__random/uniform_int_distribution.h | 264 - .../c++/v1/__random/uniform_random_bit_generator.h | 44 - .../c++/v1/__random/uniform_real_distribution.h | 138 - .../include/c++/v1/__random/weibull_distribution.h | 132 - .../libcxx/include/c++/v1/__ranges/access.h | 210 - .../c++/v1/__ranges/adjacent_transform_view.h | 406 -- .../libcxx/include/c++/v1/__ranges/adjacent_view.h | 419 -- third_party/libcxx/include/c++/v1/__ranges/all.h | 78 - .../include/c++/v1/__ranges/as_rvalue_view.h | 142 - .../libcxx/include/c++/v1/__ranges/chunk_by_view.h | 235 - .../libcxx/include/c++/v1/__ranges/common_view.h | 142 - .../libcxx/include/c++/v1/__ranges/concepts.h | 182 - .../c++/v1/__ranges/container_compatible_range.h | 33 - .../libcxx/include/c++/v1/__ranges/counted.h | 89 - .../libcxx/include/c++/v1/__ranges/dangling.h | 42 - third_party/libcxx/include/c++/v1/__ranges/data.h | 102 - .../libcxx/include/c++/v1/__ranges/drop_view.h | 329 -- .../include/c++/v1/__ranges/drop_while_view.h | 136 - .../libcxx/include/c++/v1/__ranges/elements_of.h | 49 - .../libcxx/include/c++/v1/__ranges/elements_view.h | 418 -- third_party/libcxx/include/c++/v1/__ranges/empty.h | 71 - .../libcxx/include/c++/v1/__ranges/empty_view.h | 54 - .../c++/v1/__ranges/enable_borrowed_range.h | 40 - .../libcxx/include/c++/v1/__ranges/enable_view.h | 50 - .../libcxx/include/c++/v1/__ranges/filter_view.h | 260 - .../libcxx/include/c++/v1/__ranges/from_range.h | 33 - .../libcxx/include/c++/v1/__ranges/iota_view.h | 423 -- .../libcxx/include/c++/v1/__ranges/istream_view.h | 141 - .../libcxx/include/c++/v1/__ranges/join_view.h | 429 -- .../include/c++/v1/__ranges/join_with_view.h | 459 -- .../include/c++/v1/__ranges/lazy_split_view.h | 442 -- .../libcxx/include/c++/v1/__ranges/movable_box.h | 247 - .../c++/v1/__ranges/non_propagating_cache.h | 103 - .../libcxx/include/c++/v1/__ranges/owning_view.h | 116 - .../libcxx/include/c++/v1/__ranges/range_adaptor.h | 99 - .../libcxx/include/c++/v1/__ranges/rbegin.h | 120 - .../libcxx/include/c++/v1/__ranges/ref_view.h | 89 - third_party/libcxx/include/c++/v1/__ranges/rend.h | 123 - .../libcxx/include/c++/v1/__ranges/repeat_view.h | 274 - .../libcxx/include/c++/v1/__ranges/reverse_view.h | 204 - .../libcxx/include/c++/v1/__ranges/single_view.h | 112 - third_party/libcxx/include/c++/v1/__ranges/size.h | 138 - .../libcxx/include/c++/v1/__ranges/split_view.h | 232 - .../libcxx/include/c++/v1/__ranges/subrange.h | 275 - .../libcxx/include/c++/v1/__ranges/take_view.h | 368 -- .../include/c++/v1/__ranges/take_while_view.h | 170 - third_party/libcxx/include/c++/v1/__ranges/to.h | 248 - .../include/c++/v1/__ranges/transform_view.h | 419 -- .../include/c++/v1/__ranges/view_interface.h | 170 - third_party/libcxx/include/c++/v1/__ranges/views.h | 35 - .../include/c++/v1/__ranges/zip_transform_view.h | 357 -- .../libcxx/include/c++/v1/__ranges/zip_view.h | 499 -- third_party/libcxx/include/c++/v1/__split_buffer | 866 --- .../libcxx/include/c++/v1/__std_mbstate_t.h | 29 - .../c++/v1/__stop_token/atomic_unique_lock.h | 140 - .../c++/v1/__stop_token/intrusive_list_view.h | 85 - .../c++/v1/__stop_token/intrusive_shared_ptr.h | 135 - .../include/c++/v1/__stop_token/stop_callback.h | 102 - .../include/c++/v1/__stop_token/stop_source.h | 91 - .../include/c++/v1/__stop_token/stop_state.h | 236 - .../include/c++/v1/__stop_token/stop_token.h | 63 - .../libcxx/include/c++/v1/__string/char_traits.h | 557 -- .../c++/v1/__string/constexpr_c_functions.h | 236 - .../c++/v1/__string/extern_template_lists.h | 94 - .../include/c++/v1/__support/ibm/gettod_zos.h | 52 - .../include/c++/v1/__support/ibm/locale_mgmt_zos.h | 53 - .../include/c++/v1/__support/ibm/nanosleep.h | 55 - .../c++/v1/__support/xlocale/__nop_locale_mgmt.h | 33 - .../c++/v1/__support/xlocale/__posix_l_fallback.h | 91 - .../c++/v1/__support/xlocale/__strtonum_fallback.h | 37 - .../libcxx/include/c++/v1/__system_error/errc.h | 266 - .../include/c++/v1/__system_error/error_category.h | 75 - .../include/c++/v1/__system_error/error_code.h | 142 - .../c++/v1/__system_error/error_condition.h | 129 - .../include/c++/v1/__system_error/system_error.h | 57 - .../c++/v1/__system_error/throw_system_error.h | 25 - .../libcxx/include/c++/v1/__thread/formatter.h | 80 - third_party/libcxx/include/c++/v1/__thread/id.h | 121 - .../libcxx/include/c++/v1/__thread/jthread.h | 136 - .../include/c++/v1/__thread/poll_with_backoff.h | 86 - .../libcxx/include/c++/v1/__thread/support.h | 123 - .../libcxx/include/c++/v1/__thread/support/c11.h | 191 - .../include/c++/v1/__thread/support/external.h | 21 - .../include/c++/v1/__thread/support/pthread.h | 221 - .../include/c++/v1/__thread/support/windows.h | 131 - .../libcxx/include/c++/v1/__thread/this_thread.h | 79 - .../libcxx/include/c++/v1/__thread/thread.h | 268 - .../include/c++/v1/__thread/timed_backoff_policy.h | 45 - third_party/libcxx/include/c++/v1/__tree | 2386 -------- .../libcxx/include/c++/v1/__tuple/find_index.h | 62 - third_party/libcxx/include/c++/v1/__tuple/ignore.h | 39 - .../libcxx/include/c++/v1/__tuple/sfinae_helpers.h | 99 - .../libcxx/include/c++/v1/__tuple/tuple_element.h | 46 - .../libcxx/include/c++/v1/__tuple/tuple_like.h | 42 - .../c++/v1/__tuple/tuple_like_no_subrange.h | 61 - .../libcxx/include/c++/v1/__tuple/tuple_size.h | 70 - .../include/c++/v1/__tuple/tuple_transform.h | 45 - .../include/c++/v1/__type_traits/add_cv_quals.h | 52 - .../include/c++/v1/__type_traits/add_pointer.h | 65 - .../include/c++/v1/__type_traits/add_reference.h | 58 - .../include/c++/v1/__type_traits/aligned_storage.h | 61 - .../include/c++/v1/__type_traits/aligned_union.h | 50 - .../include/c++/v1/__type_traits/alignment_of.h | 32 - .../c++/v1/__type_traits/common_reference.h | 202 - .../include/c++/v1/__type_traits/common_type.h | 117 - .../include/c++/v1/__type_traits/conditional.h | 64 - .../include/c++/v1/__type_traits/conjunction.h | 70 - .../c++/v1/__type_traits/container_traits.h | 46 - .../libcxx/include/c++/v1/__type_traits/copy_cv.h | 51 - .../include/c++/v1/__type_traits/copy_cvref.h | 45 - .../include/c++/v1/__type_traits/datasizeof.h | 50 - .../libcxx/include/c++/v1/__type_traits/decay.h | 40 - .../include/c++/v1/__type_traits/dependent_type.h | 25 - .../include/c++/v1/__type_traits/desugars_to.h | 73 - .../include/c++/v1/__type_traits/detected_or.h | 36 - .../include/c++/v1/__type_traits/disjunction.h | 58 - .../include/c++/v1/__type_traits/enable_if.h | 43 - .../libcxx/include/c++/v1/__type_traits/extent.h | 54 - .../has_unique_object_representation.h | 35 - .../c++/v1/__type_traits/has_virtual_destructor.h | 32 - .../include/c++/v1/__type_traits/integer_traits.h | 73 - .../c++/v1/__type_traits/integral_constant.h | 44 - .../libcxx/include/c++/v1/__type_traits/invoke.h | 401 -- .../include/c++/v1/__type_traits/is_abstract.h | 31 - .../include/c++/v1/__type_traits/is_aggregate.h | 33 - .../include/c++/v1/__type_traits/is_allocator.h | 33 - .../c++/v1/__type_traits/is_always_bitcastable.h | 83 - .../include/c++/v1/__type_traits/is_arithmetic.h | 34 - .../libcxx/include/c++/v1/__type_traits/is_array.h | 57 - .../include/c++/v1/__type_traits/is_assignable.h | 50 - .../include/c++/v1/__type_traits/is_base_of.h | 43 - .../include/c++/v1/__type_traits/is_callable.h | 32 - .../c++/v1/__type_traits/is_char_like_type.h | 30 - .../libcxx/include/c++/v1/__type_traits/is_class.h | 31 - .../include/c++/v1/__type_traits/is_compound.h | 46 - .../libcxx/include/c++/v1/__type_traits/is_const.h | 31 - .../c++/v1/__type_traits/is_constant_evaluated.h | 32 - .../c++/v1/__type_traits/is_constructible.h | 58 - .../include/c++/v1/__type_traits/is_convertible.h | 41 - .../c++/v1/__type_traits/is_core_convertible.h | 54 - .../include/c++/v1/__type_traits/is_destructible.h | 97 - .../libcxx/include/c++/v1/__type_traits/is_empty.h | 31 - .../libcxx/include/c++/v1/__type_traits/is_enum.h | 41 - .../c++/v1/__type_traits/is_equality_comparable.h | 83 - .../c++/v1/__type_traits/is_execution_policy.h | 59 - .../libcxx/include/c++/v1/__type_traits/is_final.h | 36 - .../c++/v1/__type_traits/is_floating_point.h | 40 - .../include/c++/v1/__type_traits/is_function.h | 31 - .../include/c++/v1/__type_traits/is_fundamental.h | 48 - .../is_generic_transparent_comparator.h | 30 - .../c++/v1/__type_traits/is_implicit_lifetime.h | 35 - .../is_implicitly_default_constructible.h | 46 - .../include/c++/v1/__type_traits/is_integral.h | 74 - .../include/c++/v1/__type_traits/is_literal_type.h | 34 - .../c++/v1/__type_traits/is_member_pointer.h | 43 - .../c++/v1/__type_traits/is_nothrow_assignable.h | 52 - .../v1/__type_traits/is_nothrow_constructible.h | 63 - .../c++/v1/__type_traits/is_nothrow_destructible.h | 61 - .../include/c++/v1/__type_traits/is_null_pointer.h | 37 - .../include/c++/v1/__type_traits/is_object.h | 31 - .../libcxx/include/c++/v1/__type_traits/is_pod.h | 31 - .../include/c++/v1/__type_traits/is_pointer.h | 31 - .../include/c++/v1/__type_traits/is_polymorphic.h | 31 - .../c++/v1/__type_traits/is_primary_template.h | 32 - .../include/c++/v1/__type_traits/is_reference.h | 68 - .../c++/v1/__type_traits/is_reference_wrapper.h | 32 - .../c++/v1/__type_traits/is_referenceable.h | 34 - .../libcxx/include/c++/v1/__type_traits/is_same.h | 44 - .../include/c++/v1/__type_traits/is_scalar.h | 69 - .../include/c++/v1/__type_traits/is_signed.h | 52 - .../c++/v1/__type_traits/is_specialization.h | 41 - .../c++/v1/__type_traits/is_standard_layout.h | 31 - .../include/c++/v1/__type_traits/is_swappable.h | 106 - .../include/c++/v1/__type_traits/is_trivial.h | 35 - .../c++/v1/__type_traits/is_trivially_assignable.h | 56 - .../v1/__type_traits/is_trivially_constructible.h | 64 - .../c++/v1/__type_traits/is_trivially_copyable.h | 35 - .../v1/__type_traits/is_trivially_destructible.h | 47 - .../is_trivially_lexicographically_comparable.h | 63 - .../v1/__type_traits/is_trivially_relocatable.h | 48 - .../libcxx/include/c++/v1/__type_traits/is_union.h | 31 - .../include/c++/v1/__type_traits/is_unqualified.h | 25 - .../include/c++/v1/__type_traits/is_unsigned.h | 52 - .../c++/v1/__type_traits/is_valid_expansion.h | 31 - .../libcxx/include/c++/v1/__type_traits/is_void.h | 31 - .../include/c++/v1/__type_traits/is_volatile.h | 31 - .../c++/v1/__type_traits/is_within_lifetime.h | 29 - .../libcxx/include/c++/v1/__type_traits/lazy.h | 25 - .../c++/v1/__type_traits/make_32_64_or_128_bit.h | 49 - .../c++/v1/__type_traits/make_const_lvalue_ref.h | 26 - .../include/c++/v1/__type_traits/make_signed.h | 84 - .../c++/v1/__type_traits/make_transparent.h | 53 - .../include/c++/v1/__type_traits/make_unsigned.h | 94 - .../include/c++/v1/__type_traits/maybe_const.h | 26 - .../libcxx/include/c++/v1/__type_traits/nat.h | 31 - .../libcxx/include/c++/v1/__type_traits/negation.h | 33 - .../libcxx/include/c++/v1/__type_traits/promote.h | 43 - .../libcxx/include/c++/v1/__type_traits/rank.h | 52 - .../reference_constructs_from_temporary.h | 38 - .../reference_converts_from_temporary.h | 35 - .../c++/v1/__type_traits/remove_all_extents.h | 40 - .../include/c++/v1/__type_traits/remove_const.h | 49 - .../c++/v1/__type_traits/remove_const_ref.h | 27 - .../include/c++/v1/__type_traits/remove_cv.h | 40 - .../include/c++/v1/__type_traits/remove_cvref.h | 45 - .../include/c++/v1/__type_traits/remove_extent.h | 40 - .../include/c++/v1/__type_traits/remove_pointer.h | 53 - .../c++/v1/__type_traits/remove_reference.h | 47 - .../include/c++/v1/__type_traits/remove_volatile.h | 49 - .../include/c++/v1/__type_traits/result_of.h | 43 - .../include/c++/v1/__type_traits/strip_signature.h | 84 - .../include/c++/v1/__type_traits/type_identity.h | 39 - .../include/c++/v1/__type_traits/type_list.h | 47 - .../include/c++/v1/__type_traits/underlying_type.h | 51 - .../include/c++/v1/__type_traits/unwrap_ref.h | 51 - .../libcxx/include/c++/v1/__type_traits/void_t.h | 30 - third_party/libcxx/include/c++/v1/__undef_macros | 28 - .../libcxx/include/c++/v1/__utility/as_const.h | 32 - .../libcxx/include/c++/v1/__utility/as_lvalue.h | 37 - .../libcxx/include/c++/v1/__utility/auto_cast.h | 22 - third_party/libcxx/include/c++/v1/__utility/cmp.h | 93 - .../include/c++/v1/__utility/convert_to_integral.h | 68 - .../libcxx/include/c++/v1/__utility/declval.h | 38 - .../v1/__utility/default_three_way_comparator.h | 70 - .../include/c++/v1/__utility/element_count.h | 27 - .../libcxx/include/c++/v1/__utility/empty.h | 24 - .../include/c++/v1/__utility/exception_guard.h | 143 - .../libcxx/include/c++/v1/__utility/exchange.h | 41 - .../libcxx/include/c++/v1/__utility/forward.h | 38 - .../libcxx/include/c++/v1/__utility/forward_like.h | 63 - .../libcxx/include/c++/v1/__utility/in_place.h | 64 - .../include/c++/v1/__utility/integer_sequence.h | 105 - .../include/c++/v1/__utility/is_pointer_in_range.h | 70 - .../v1/__utility/lazy_synth_three_way_comparator.h | 120 - third_party/libcxx/include/c++/v1/__utility/move.h | 49 - .../libcxx/include/c++/v1/__utility/no_destroy.h | 53 - third_party/libcxx/include/c++/v1/__utility/pair.h | 689 --- .../include/c++/v1/__utility/piecewise_construct.h | 32 - .../libcxx/include/c++/v1/__utility/priority_tag.h | 28 - .../c++/v1/__utility/private_constructor_tag.h | 28 - .../libcxx/include/c++/v1/__utility/rel_ops.h | 46 - .../libcxx/include/c++/v1/__utility/scope_guard.h | 57 - .../libcxx/include/c++/v1/__utility/small_buffer.h | 101 - third_party/libcxx/include/c++/v1/__utility/swap.h | 60 - .../include/c++/v1/__utility/to_underlying.h | 38 - .../include/c++/v1/__utility/try_key_extraction.h | 114 - .../libcxx/include/c++/v1/__utility/unreachable.h | 34 - .../libcxx/include/c++/v1/__variant/monostate.h | 66 - .../libcxx/include/c++/v1/__vector/comparison.h | 71 - .../include/c++/v1/__vector/container_traits.h | 41 - third_party/libcxx/include/c++/v1/__vector/erase.h | 50 - third_party/libcxx/include/c++/v1/__vector/pmr.h | 33 - third_party/libcxx/include/c++/v1/__vector/swap.h | 29 - .../libcxx/include/c++/v1/__vector/vector.h | 1425 ----- .../libcxx/include/c++/v1/__vector/vector_bool.h | 1115 ---- .../c++/v1/__vector/vector_bool_formatter.h | 49 - third_party/libcxx/include/c++/v1/__verbose_abort | 52 - third_party/libcxx/include/c++/v1/__verbose_trap | 36 - third_party/libcxx/include/c++/v1/algorithm | 2087 ------- third_party/libcxx/include/c++/v1/any | 581 -- third_party/libcxx/include/c++/v1/array | 609 -- third_party/libcxx/include/c++/v1/atomic | 643 --- third_party/libcxx/include/c++/v1/barrier | 203 - third_party/libcxx/include/c++/v1/bit | 101 - third_party/libcxx/include/c++/v1/bitset | 982 ---- third_party/libcxx/include/c++/v1/cassert | 35 - third_party/libcxx/include/c++/v1/ccomplex | 35 - third_party/libcxx/include/c++/v1/cctype | 131 - third_party/libcxx/include/c++/v1/cerrno | 52 - third_party/libcxx/include/c++/v1/cfenv | 95 - third_party/libcxx/include/c++/v1/cfloat | 90 - third_party/libcxx/include/c++/v1/charconv | 121 - third_party/libcxx/include/c++/v1/chrono | 1176 ---- third_party/libcxx/include/c++/v1/cinttypes | 275 - third_party/libcxx/include/c++/v1/ciso646 | 33 - third_party/libcxx/include/c++/v1/climits | 53 - third_party/libcxx/include/c++/v1/clocale | 60 - third_party/libcxx/include/c++/v1/cmath | 620 --- third_party/libcxx/include/c++/v1/codecvt | 606 -- third_party/libcxx/include/c++/v1/compare | 177 - third_party/libcxx/include/c++/v1/complex | 1494 ----- third_party/libcxx/include/c++/v1/complex.h | 36 - third_party/libcxx/include/c++/v1/concepts | 174 - .../libcxx/include/c++/v1/condition_variable | 368 -- third_party/libcxx/include/c++/v1/coroutine | 72 - third_party/libcxx/include/c++/v1/csetjmp | 59 - third_party/libcxx/include/c++/v1/csignal | 69 - third_party/libcxx/include/c++/v1/cstdalign | 52 - third_party/libcxx/include/c++/v1/cstdarg | 59 - third_party/libcxx/include/c++/v1/cstdbool | 40 - third_party/libcxx/include/c++/v1/cstddef | 63 - third_party/libcxx/include/c++/v1/cstdint | 198 - third_party/libcxx/include/c++/v1/cstdio | 179 - third_party/libcxx/include/c++/v1/cstdlib | 159 - third_party/libcxx/include/c++/v1/cstring | 109 - third_party/libcxx/include/c++/v1/ctgmath | 37 - third_party/libcxx/include/c++/v1/ctime | 91 - third_party/libcxx/include/c++/v1/ctype.h | 65 - third_party/libcxx/include/c++/v1/cuchar | 80 - third_party/libcxx/include/c++/v1/cwchar | 266 - third_party/libcxx/include/c++/v1/cwctype | 102 - third_party/libcxx/include/c++/v1/cxxabi.h | 197 - third_party/libcxx/include/c++/v1/deque | 2559 --------- third_party/libcxx/include/c++/v1/errno.h | 403 -- third_party/libcxx/include/c++/v1/exception | 105 - third_party/libcxx/include/c++/v1/execution | 163 - third_party/libcxx/include/c++/v1/expected | 60 - .../c++/v1/experimental/__simd/aligned_tag.h | 75 - .../c++/v1/experimental/__simd/declaration.h | 88 - .../include/c++/v1/experimental/__simd/reference.h | 192 - .../include/c++/v1/experimental/__simd/scalar.h | 102 - .../include/c++/v1/experimental/__simd/simd.h | 155 - .../include/c++/v1/experimental/__simd/simd_mask.h | 97 - .../include/c++/v1/experimental/__simd/traits.h | 75 - .../include/c++/v1/experimental/__simd/utility.h | 103 - .../include/c++/v1/experimental/__simd/vec_ext.h | 130 - .../libcxx/include/c++/v1/experimental/iterator | 140 - .../libcxx/include/c++/v1/experimental/memory | 205 - .../include/c++/v1/experimental/propagate_const | 497 -- .../libcxx/include/c++/v1/experimental/simd | 96 - .../libcxx/include/c++/v1/experimental/type_traits | 161 - .../libcxx/include/c++/v1/experimental/utility | 54 - third_party/libcxx/include/c++/v1/ext/__hash | 85 - third_party/libcxx/include/c++/v1/ext/hash_map | 835 --- third_party/libcxx/include/c++/v1/ext/hash_set | 582 -- third_party/libcxx/include/c++/v1/fenv.h | 118 - third_party/libcxx/include/c++/v1/filesystem | 581 -- third_party/libcxx/include/c++/v1/flat_map | 744 --- third_party/libcxx/include/c++/v1/flat_set | 620 --- third_party/libcxx/include/c++/v1/format | 267 - third_party/libcxx/include/c++/v1/forward_list | 1622 ------ third_party/libcxx/include/c++/v1/fstream | 1642 ------ third_party/libcxx/include/c++/v1/functional | 611 -- third_party/libcxx/include/c++/v1/future | 2080 ------- third_party/libcxx/include/c++/v1/initializer_list | 113 - third_party/libcxx/include/c++/v1/inttypes.h | 268 - third_party/libcxx/include/c++/v1/iomanip | 562 -- third_party/libcxx/include/c++/v1/ios | 898 --- third_party/libcxx/include/c++/v1/iosfwd | 191 - third_party/libcxx/include/c++/v1/iostream | 72 - third_party/libcxx/include/c++/v1/istream | 1427 ----- third_party/libcxx/include/c++/v1/iterator | 769 --- third_party/libcxx/include/c++/v1/latch | 137 - third_party/libcxx/include/c++/v1/libcxx.imp | 954 ---- third_party/libcxx/include/c++/v1/limits | 528 -- third_party/libcxx/include/c++/v1/list | 1833 ------ third_party/libcxx/include/c++/v1/locale | 226 - third_party/libcxx/include/c++/v1/map | 2183 -------- third_party/libcxx/include/c++/v1/math.h | 534 -- third_party/libcxx/include/c++/v1/mdspan | 467 -- third_party/libcxx/include/c++/v1/memory | 1008 ---- third_party/libcxx/include/c++/v1/memory_resource | 81 - third_party/libcxx/include/c++/v1/module.modulemap | 2498 --------- third_party/libcxx/include/c++/v1/mutex | 524 -- third_party/libcxx/include/c++/v1/new | 124 - third_party/libcxx/include/c++/v1/numbers | 169 - third_party/libcxx/include/c++/v1/numeric | 212 - third_party/libcxx/include/c++/v1/optional | 1771 ------ third_party/libcxx/include/c++/v1/ostream | 215 - third_party/libcxx/include/c++/v1/print | 396 -- third_party/libcxx/include/c++/v1/queue | 981 ---- third_party/libcxx/include/c++/v1/random | 1746 ------ third_party/libcxx/include/c++/v1/ranges | 517 -- third_party/libcxx/include/c++/v1/ratio | 499 -- third_party/libcxx/include/c++/v1/regex | 5849 -------------------- third_party/libcxx/include/c++/v1/scoped_allocator | 582 -- third_party/libcxx/include/c++/v1/semaphore | 189 - third_party/libcxx/include/c++/v1/set | 1554 ------ third_party/libcxx/include/c++/v1/shared_mutex | 448 -- third_party/libcxx/include/c++/v1/source_location | 90 - third_party/libcxx/include/c++/v1/span | 662 --- third_party/libcxx/include/c++/v1/sstream | 1303 ----- third_party/libcxx/include/c++/v1/stack | 387 -- third_party/libcxx/include/c++/v1/stdatomic.h | 247 - third_party/libcxx/include/c++/v1/stddef.h | 48 - third_party/libcxx/include/c++/v1/stdexcept | 292 - third_party/libcxx/include/c++/v1/stdio.h | 121 - third_party/libcxx/include/c++/v1/stdlib.h | 135 - third_party/libcxx/include/c++/v1/stop_token | 61 - third_party/libcxx/include/c++/v1/streambuf | 445 -- third_party/libcxx/include/c++/v1/string | 4041 -------------- third_party/libcxx/include/c++/v1/string.h | 115 - third_party/libcxx/include/c++/v1/string_view | 984 ---- third_party/libcxx/include/c++/v1/strstream | 363 -- third_party/libcxx/include/c++/v1/syncstream | 523 -- third_party/libcxx/include/c++/v1/system_error | 176 - third_party/libcxx/include/c++/v1/tgmath.h | 39 - third_party/libcxx/include/c++/v1/thread | 133 - third_party/libcxx/include/c++/v1/tuple | 1477 ----- third_party/libcxx/include/c++/v1/type_traits | 575 -- third_party/libcxx/include/c++/v1/typeindex | 113 - third_party/libcxx/include/c++/v1/typeinfo | 399 -- third_party/libcxx/include/c++/v1/uchar.h | 60 - third_party/libcxx/include/c++/v1/unordered_map | 2395 -------- third_party/libcxx/include/c++/v1/unordered_set | 1862 ------- third_party/libcxx/include/c++/v1/utility | 330 -- third_party/libcxx/include/c++/v1/valarray | 3318 ----------- third_party/libcxx/include/c++/v1/variant | 1655 ------ third_party/libcxx/include/c++/v1/vector | 379 -- third_party/libcxx/include/c++/v1/version | 639 --- third_party/libcxx/include/c++/v1/wchar.h | 207 - third_party/libcxx/include/c++/v1/wctype.h | 94 - 1682 files changed, 326209 deletions(-) delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/adjacent_find.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/all_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/any_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/binary_search.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/clamp.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/comp.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/comp_ref_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/copy_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/copy_move_common.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/copy_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/count.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/count_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/equal.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/equal_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/fill.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/fill_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find_end.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find_first_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find_if_not.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/find_segment_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/for_each.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/for_each_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/for_each_n_segment.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/for_each_segment.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/generate.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/generate_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/half_positive.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_found_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_fun_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_in_out_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_in_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_out_out_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/in_out_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/includes.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/inplace_merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_heap_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_partitioned.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_sorted.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/is_sorted_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/iter_swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/iterator_operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare_three_way.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/lower_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/make_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/make_projected.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/max.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/max_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/min.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/min_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/min_max_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/minmax.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/minmax_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/mismatch.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/move.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/move_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/next_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/none_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/nth_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/out_value_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/partial_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/partial_sort_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/partition_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/partition_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/pop_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/prev_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/pstl.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/push_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/radix_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_adjacent_find.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_all_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_any_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_binary_search.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_clamp.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_contains.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_contains_subrange.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_count.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_count_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_ends_with.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_equal.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_equal_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_fill.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_fill_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find_end.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find_first_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if_not.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_find_last.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_fold.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_generate.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_generate_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_includes.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_inplace_merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_partitioned.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_iterator_concept.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_lexicographical_compare.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_lower_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_make_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_max.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_max_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_min.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_min_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_mismatch.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_move.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_move_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_next_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_none_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_nth_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_pop_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_prev_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_push_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_remove.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_replace.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_sample.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_search.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_search_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_set_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_set_intersection.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_set_symmetric_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_set_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_left.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_right.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_shuffle.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_sort_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_starts_with.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_swap_ranges.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_transform.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_unique.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_unique_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/ranges_upper_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/remove.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/remove_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/remove_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/remove_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/replace.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/replace_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/replace_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/replace_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/reverse.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/reverse_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/rotate.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/rotate_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/sample.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/search.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/search_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/set_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/set_intersection.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/set_symmetric_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/set_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/shift_left.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/shift_right.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/shuffle.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/sift_down.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/simd_utils.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/sort_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/specialized_algorithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/stable_partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/stable_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/swap_ranges.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/three_way_comp_ref_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/transform.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/uniform_random_bit_generator_adaptor.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/unique.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/unique_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/unwrap_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/unwrap_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__algorithm/upper_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__assert delete mode 100644 third_party/libcxx/include/c++/v1/__assertion_handler delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/aliases.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_flag.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_init.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_lock_free.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_sync.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_sync_timed.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/atomic_waitable_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/check_memory_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/contention_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/fence.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/floating_point_helper.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/is_always_lock_free.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/kill_dependency.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/memory_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/support.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/support/c11.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/support/gcc.h delete mode 100644 third_party/libcxx/include/c++/v1/__atomic/to_gcc_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/bit_cast.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/bit_ceil.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/bit_floor.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/bit_log2.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/bit_width.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/blsr.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/byteswap.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/countl.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/countr.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/endian.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/has_single_bit.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/invert_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/popcount.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit/rotate.h delete mode 100644 third_party/libcxx/include/c++/v1/__bit_reference delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/chars_format.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/from_chars_floating_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/from_chars_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/from_chars_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/tables.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/to_chars.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/to_chars_base_10.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/to_chars_floating_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/to_chars_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/to_chars_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__charconv/traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/calendar.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/convert_to_timespec.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/convert_to_tm.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/day.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/duration.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/file_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/gps_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/hh_mm_ss.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/high_resolution_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/is_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/leap_second.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/literals.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/local_info.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/month.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/month_weekday.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/monthday.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/ostream.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/parser_std_format_spec.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/statically_widen.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/steady_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/sys_info.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/system_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/tai_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/time_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/time_zone.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/time_zone_link.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/tzdb.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/tzdb_list.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/utc_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/weekday.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/year.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/year_month.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/year_month_day.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/year_month_weekday.h delete mode 100644 third_party/libcxx/include/c++/v1/__chrono/zoned_time.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/common_comparison_category.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/compare_partial_order_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/compare_strong_order_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/compare_three_way.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/compare_three_way_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/compare_weak_order_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/is_eq.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/ordering.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/partial_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/strong_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/synth_three_way.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/three_way_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__compare/weak_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/arithmetic.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/boolean_testable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/class_or_enum.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/common_reference_with.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/common_with.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/comparison_common_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/convertible_to.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/copyable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/derived_from.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/different_from.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/equality_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/invocable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/movable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/predicate.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/regular.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/relation.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/same_as.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/semiregular.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/swappable.h delete mode 100644 third_party/libcxx/include/c++/v1/__concepts/totally_ordered.h delete mode 100644 third_party/libcxx/include/c++/v1/__condition_variable/condition_variable.h delete mode 100644 third_party/libcxx/include/c++/v1/__config delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/abi.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/attributes.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/availability.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/compiler.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/experimental.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/hardening.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/language.h delete mode 100644 third_party/libcxx/include/c++/v1/__configuration/platform.h delete mode 100644 third_party/libcxx/include/c++/v1/__coroutine/coroutine_handle.h delete mode 100644 third_party/libcxx/include/c++/v1/__coroutine/coroutine_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__coroutine/noop_coroutine_handle.h delete mode 100644 third_party/libcxx/include/c++/v1/__coroutine/trivial_awaitables.h delete mode 100644 third_party/libcxx/include/c++/v1/__cstddef/byte.h delete mode 100644 third_party/libcxx/include/c++/v1/__cstddef/max_align_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cstddef/nullptr_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cstddef/ptrdiff_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cstddef/size_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/adjacent_find.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/all_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/any_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/binary_search.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp_ref_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_move_common.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_end.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_first_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if_not.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_segment_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each_segment.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/half_positive.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/includes.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/inplace_merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_partitioned.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted_until.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iter_swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iterator_operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lexicographical_compare.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lower_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_projected.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/mismatch.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move_backward.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/next_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/none_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/nth_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/pop_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/prev_permutation.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/push_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_intersection.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_symmetric_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/shuffle.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sift_down.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/simd_utils.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort_heap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_partition.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/swap_ranges.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/three_way_comp_ref_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/transform.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/uniform_random_bit_generator_adaptor.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique_copy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__algorithm/upper_bound.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__assert delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/aliases.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_base.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_flag.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_init.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_lock_free.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_sync.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/check_memory_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/contention_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/cxx_atomic_impl.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/fence.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/is_always_lock_free.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/kill_dependency.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/memory_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__atomic/to_gcc_order.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/blsr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/countl.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/countr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/invert_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/popcount.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit/rotate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__bit_reference delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/convert_to_timespec.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/duration.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/high_resolution_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/steady_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/system_clock.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__chrono/time_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__condition_variable/condition_variable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__config delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/abi.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/availability.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/compiler.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/config_site_shim.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/language.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__configuration/platform.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/randomize_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/sanitizers.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/strict_weak_ordering_check.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__exception/exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__exception/exception_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__exception/nested_exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__exception/operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__exception/terminate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_negate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/bind.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/binder1st.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/binder2nd.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/hash.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/identity.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fn.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fun_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_binary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_unary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/reference_wrapper.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_negate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__functional/weak_result_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/array.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/bit_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/complex.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/deque.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/fstream.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/functional.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/ios.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/istream.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/memory.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/ostream.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/queue.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/sstream.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/stack.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/streambuf.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/string.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/string_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/tuple.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__fwd/vector.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__hash_table delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__ios/fpos.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/access.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/advance.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/aliasing_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/back_insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/bounded_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/distance.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/erase_if_container.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/front_insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/istream_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/istreambuf_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/move_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/next.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostream_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostreambuf_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/prev.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/reverse_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/segmented_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__iterator/wrap_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/android.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_defaults.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_fallbacks.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/fuchsia.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/ibm.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/locale_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/musl.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/newlib.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/openbsd.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/win32.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/abs.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/copysign.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/error_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/exponential_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/fdim.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/fma.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/gamma.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/hyperbolic_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/hypot.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_hyperbolic_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_trigonometric_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/logarithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/min_max.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/modulo.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/remainder.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/roots.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/rounding_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__math/trigonometric_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mbstate_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/addressof.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/align.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/aligned_alloc.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocate_at_least.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocation_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_arg_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_destructor.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/assume_aligned.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/auto_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/builtin_new_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/compressed_pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/construct_at.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/destruct_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/pointer_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/raw_storage_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/shared_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/swap_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/temp_value.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/temporary_buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/uninitialized_algorithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/unique_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/uses_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__memory/voidify.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mutex/lock_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mutex/mutex.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mutex/once_flag.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mutex/tag_types.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__mutex/unique_lock.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__numeric/accumulate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__numeric/adjacent_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__numeric/inner_product.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__numeric/iota.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__numeric/partial_sum.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__ostream/basic_ostream.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/bernoulli_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/binomial_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/cauchy_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/chi_squared_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/clamp_to_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/default_random_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/discard_block_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/discrete_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/exponential_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/extreme_value_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/fisher_f_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/gamma_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/generate_canonical.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/geometric_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/independent_bits_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/is_seed_sequence.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/is_valid.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/knuth_b.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/linear_congruential_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/log2.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/lognormal_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/mersenne_twister_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/negative_binomial_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/normal_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/piecewise_constant_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/piecewise_linear_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/poisson_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/random_device.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/ranlux.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/seed_seq.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/shuffle_order_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/student_t_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/subtract_with_carry_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/uniform_int_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/uniform_real_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__random/weibull_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__split_buffer delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__std_clang_module delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__std_mbstate_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__string/char_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__string/constexpr_c_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__string/extern_template_lists.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/ibm/gettod_zos.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/ibm/locale_mgmt_zos.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/ibm/nanosleep.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/xlocale/__nop_locale_mgmt.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/xlocale/__posix_l_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__support/xlocale/__strtonum_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__system_error/errc.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__system_error/error_category.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__system_error/error_code.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__system_error/error_condition.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__system_error/system_error.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/id.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/poll_with_backoff.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/support.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/support/c11.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/support/external.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/support/pthread.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/support/windows.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/this_thread.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/thread.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__thread/timed_backoff_policy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tree delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/find_index.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/make_tuple_types.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/sfinae_helpers.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_indices.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_like.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_like_ext.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_like_no_subrange.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_size.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__tuple/tuple_types.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_cv.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_lvalue_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_rvalue_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/add_volatile.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/aligned_storage.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/aligned_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/alignment_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/can_extract_key.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/common_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/conditional.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/conjunction.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/copy_cv.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/copy_cvref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/datasizeof.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/decay.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/dependent_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/desugars_to.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/disjunction.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/enable_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/extent.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/has_virtual_destructor.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/integral_constant.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/invoke.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_abstract.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_always_bitcastable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_arithmetic.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_array.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_base_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_bounded_array.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_callable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_char_like_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_class.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_compound.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_constant_evaluated.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_convertible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_core_convertible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_enum.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_equality_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_execution_policy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_final.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_floating_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_fundamental.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_implicitly_default_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_literal_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_member_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_nothrow_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_nothrow_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_nothrow_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_null_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_object.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_pod.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_polymorphic.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_primary_template.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_reference_wrapper.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_referenceable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_same.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_scalar.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_signed.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_signed_integer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_specialization.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_standard_layout.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_swappable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivial.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_copyable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_lexicographically_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_trivially_relocatable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_unbounded_array.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_unsigned.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_unsigned_integer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_valid_expansion.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_void.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/is_volatile.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/lazy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/make_32_64_or_128_bit.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/make_const_lvalue_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/make_signed.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/make_unsigned.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/maybe_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/nat.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/negation.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/noexcept_move_assign_container.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/promote.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/rank.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_all_extents.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_const_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_cv.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_cvref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_extent.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/remove_volatile.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/result_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/strip_signature.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/type_identity.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/type_list.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/underlying_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/unwrap_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__type_traits/void_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__undef_macros delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/as_lvalue.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/auto_cast.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/convert_to_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/declval.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/exception_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/forward.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/integer_sequence.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/is_pointer_in_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/is_valid_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/move.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/no_destroy.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/piecewise_construct.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/priority_tag.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/private_constructor_tag.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/rel_ops.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/small_buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__utility/unreachable.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__variant/monostate.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__verbose_abort delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/__verbose_trap delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/algorithm delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/array delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/atomic delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/bitset delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cassert delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ccomplex delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cctype delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cerrno delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cfenv delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cfloat delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/chrono delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cinttypes delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ciso646 delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/climits delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/clocale delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cmath delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/codecvt delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/complex delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/condition_variable delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/csetjmp delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/csignal delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstdarg delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstdbool delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstddef delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstdint delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstdio delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstdlib delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cstring delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ctgmath delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ctime delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cuchar delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cwchar delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/cwctype delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/deque delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/exception delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/experimental/__config delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/experimental/utility delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ext/__hash delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ext/hash_map delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ext/hash_set delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/forward_list delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/fstream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/functional delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/future delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/iomanip delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ios delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/iosfwd delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/iostream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/istream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/iterator delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/limits delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/list delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/locale delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/locale.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/map delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/math.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/memory delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/module.modulemap delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/mutex delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/new delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/numeric delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ostream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/queue delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/random delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/ratio delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/regex delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/set delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/sstream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/stack delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/stdatomic.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/stdexcept delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/stdint.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/stdlib.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/streambuf delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/string delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/string.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/string_view delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/strstream delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/system_error delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/thread delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/type_traits delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/typeindex delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/typeinfo delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/uchar.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/unordered_map delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/unordered_set delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/utility delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/valarray delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/vector delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/version delete mode 100644 third_party/libcxx/include/c++/v1/__cxx03/wchar.h delete mode 100644 third_party/libcxx/include/c++/v1/__cxxabi_config.h delete mode 100644 third_party/libcxx/include/c++/v1/__debug_utils/randomize_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__debug_utils/sanitizers.h delete mode 100644 third_party/libcxx/include/c++/v1/__debug_utils/strict_weak_ordering_check.h delete mode 100644 third_party/libcxx/include/c++/v1/__exception/exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__exception/exception_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__exception/nested_exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__exception/operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__exception/terminate.h delete mode 100644 third_party/libcxx/include/c++/v1/__expected/bad_expected_access.h delete mode 100644 third_party/libcxx/include/c++/v1/__expected/expected.h delete mode 100644 third_party/libcxx/include/c++/v1/__expected/unexpect.h delete mode 100644 third_party/libcxx/include/c++/v1/__expected/unexpected.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/copy_options.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/directory_entry.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/directory_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/directory_options.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/file_status.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/file_time_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/file_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/filesystem_error.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/path.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/path_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/perm_options.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/perms.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/recursive_directory_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/space_info.h delete mode 100644 third_party/libcxx/include/c++/v1/__filesystem/u8path.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/flat_map.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/flat_multimap.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/key_value_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/sorted_equivalent.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/sorted_unique.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_map/utils.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_set/flat_multiset.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_set/flat_set.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_set/ra_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__flat_set/utils.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/container_adaptor.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/enable_insertable.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/escaped_output_table.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/extended_grapheme_cluster_table.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/fmt_pair_like.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_arg.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_arg_store.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_args.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_context.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_error.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_parse_context.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_string.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/format_to_n_result.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_bool.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_bool_impl.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_char.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_floating_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_integer.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_output.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_string.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/formatter_tuple.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/indic_conjunct_break_table.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/parser_std_format_spec.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/range_default_formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/range_format.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/range_formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/unicode.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/width_estimation_table.h delete mode 100644 third_party/libcxx/include/c++/v1/__format/write_escaped.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/binary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/binary_negate.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/bind.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/bind_back.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/bind_front.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/binder1st.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/binder2nd.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/boyer_moore_searcher.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/compose.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/default_searcher.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/function.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/hash.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/identity.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/invoke.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/is_transparent.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/mem_fn.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/mem_fun_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/not_fn.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/perfect_forward.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/pointer_to_binary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/pointer_to_unary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/ranges_operations.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/reference_wrapper.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/unary_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/unary_negate.h delete mode 100644 third_party/libcxx/include/c++/v1/__functional/weak_result_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/array.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/bit_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/byte.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/complex.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/deque.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/format.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/fstream.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/functional.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/get.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/ios.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/istream.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/mdspan.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/memory.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/memory_resource.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/ostream.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/queue.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/span.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/sstream.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/stack.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/streambuf.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/string.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/string_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/subrange.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/tuple.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/variant.h delete mode 100644 third_party/libcxx/include/c++/v1/__fwd/vector.h delete mode 100644 third_party/libcxx/include/c++/v1/__hash_table delete mode 100644 third_party/libcxx/include/c++/v1/__ios/fpos.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/access.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/advance.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/aliasing_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/back_insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/bounded_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/capacity_aware_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/common_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/counted_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/cpp17_iterator_concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/data.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/default_sentinel.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/distance.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/erase_if_container.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/front_insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/incrementable_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/indirectly_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/insert_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/istream_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/istreambuf_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/iter_move.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/iter_swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/iterator_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/iterator_with_data.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/mergeable.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/move_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/move_sentinel.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/next.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/ostream_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/ostreambuf_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/permutable.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/prev.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/product_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/projected.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/ranges_iterator_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/readable_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/reverse_access.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/reverse_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/segmented_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/size.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/sortable.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/static_bounded_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/unreachable_sentinel.h delete mode 100644 third_party/libcxx/include/c++/v1/__iterator/wrap_iter.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/check_grouping.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/get_c_locale.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/locale_base_api.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/locale_base_api/bsd_locale_fallbacks.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/locale_base_api/ibm.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/locale_base_api/openbsd.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/messages.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/money.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/num.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/pad_and_output.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/scan_keyword.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/aix.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/apple.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/bsd_like.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/freebsd.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/fuchsia.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/linux.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/netbsd.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/newlib.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/no_locale/characters.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/no_locale/strtonum.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/support/windows.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/time.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/wbuffer_convert.h delete mode 100644 third_party/libcxx/include/c++/v1/__locale_dir/wstring_convert.h delete mode 100644 third_party/libcxx/include/c++/v1/__log_hardening_failure delete mode 100644 third_party/libcxx/include/c++/v1/__math/abs.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/copysign.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/error_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/exponential_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/fdim.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/fma.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/gamma.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/hyperbolic_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/hypot.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/inverse_hyperbolic_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/inverse_trigonometric_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/logarithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/min_max.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/modulo.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/remainder.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/roots.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/rounding_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/special_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__math/trigonometric_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__mbstate_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/aligned_accessor.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/default_accessor.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/extents.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/layout_left.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/layout_right.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/layout_stride.h delete mode 100644 third_party/libcxx/include/c++/v1/__mdspan/mdspan.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/addressof.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/align.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocate_at_least.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocation_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocator_arg_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocator_destructor.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/allocator_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/array_cookie.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/assume_aligned.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/auto_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/compressed_pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/construct_at.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/destroy.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/destruct_n.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/inout_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/is_sufficiently_aligned.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/noexcept_move_assign_container.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/out_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/pointer_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/ranges_construct_at.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/ranges_destroy.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/ranges_uninitialized_algorithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/raw_storage_iterator.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/shared_count.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/shared_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/swap_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/temp_value.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/temporary_buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/uninitialized_algorithms.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/unique_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/unique_temporary_buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/uses_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/uses_allocator_construction.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory/valid_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/memory_resource.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/monotonic_buffer_resource.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/polymorphic_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/pool_options.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/synchronized_pool_resource.h delete mode 100644 third_party/libcxx/include/c++/v1/__memory_resource/unsynchronized_pool_resource.h delete mode 100644 third_party/libcxx/include/c++/v1/__mutex/lock_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__mutex/mutex.h delete mode 100644 third_party/libcxx/include/c++/v1/__mutex/once_flag.h delete mode 100644 third_party/libcxx/include/c++/v1/__mutex/tag_types.h delete mode 100644 third_party/libcxx/include/c++/v1/__mutex/unique_lock.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/align_val_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/allocate.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/destroying_delete_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/exceptions.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/global_new_delete.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/interference_size.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/launder.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/new_handler.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/nothrow_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__new/placement_new_delete.h delete mode 100644 third_party/libcxx/include/c++/v1/__node_handle delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/accumulate.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/adjacent_difference.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/exclusive_scan.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/gcd_lcm.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/inclusive_scan.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/inner_product.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/iota.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/midpoint.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/partial_sum.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/pstl.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/ranges_iota.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/reduce.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/saturation_arithmetic.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/transform_exclusive_scan.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/transform_inclusive_scan.h delete mode 100644 third_party/libcxx/include/c++/v1/__numeric/transform_reduce.h delete mode 100644 third_party/libcxx/include/c++/v1/__ostream/basic_ostream.h delete mode 100644 third_party/libcxx/include/c++/v1/__ostream/print.h delete mode 100644 third_party/libcxx/include/c++/v1/__ostream/put_character_sequence.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backend.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backend_fwd.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backends/default.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backends/libdispatch.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backends/serial.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/backends/std_thread.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/any_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/cpu_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/fill.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/find_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/for_each.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/merge.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/stable_sort.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/transform.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/cpu_algos/transform_reduce.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/dispatch.h delete mode 100644 third_party/libcxx/include/c++/v1/__pstl/handle_exception.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/bernoulli_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/binomial_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/cauchy_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/chi_squared_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/clamp_to_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/default_random_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/discard_block_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/discrete_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/exponential_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/extreme_value_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/fisher_f_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/gamma_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/generate_canonical.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/geometric_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/independent_bits_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/is_seed_sequence.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/is_valid.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/knuth_b.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/linear_congruential_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/log2.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/lognormal_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/mersenne_twister_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/negative_binomial_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/normal_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/piecewise_constant_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/piecewise_linear_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/poisson_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/random_device.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/ranlux.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/seed_seq.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/shuffle_order_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/student_t_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/subtract_with_carry_engine.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/uniform_int_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/uniform_random_bit_generator.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/uniform_real_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__random/weibull_distribution.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/access.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/adjacent_transform_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/adjacent_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/all.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/as_rvalue_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/chunk_by_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/common_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/concepts.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/container_compatible_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/counted.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/dangling.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/data.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/drop_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/drop_while_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/elements_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/elements_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/empty_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/enable_borrowed_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/enable_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/filter_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/from_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/iota_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/istream_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/join_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/join_with_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/lazy_split_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/movable_box.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/non_propagating_cache.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/owning_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/range_adaptor.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/rbegin.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/ref_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/rend.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/repeat_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/reverse_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/single_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/size.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/split_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/subrange.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/take_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/take_while_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/to.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/transform_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/view_interface.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/views.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/zip_transform_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__ranges/zip_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__split_buffer delete mode 100644 third_party/libcxx/include/c++/v1/__std_mbstate_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/atomic_unique_lock.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/intrusive_list_view.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/intrusive_shared_ptr.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/stop_callback.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/stop_source.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/stop_state.h delete mode 100644 third_party/libcxx/include/c++/v1/__stop_token/stop_token.h delete mode 100644 third_party/libcxx/include/c++/v1/__string/char_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__string/constexpr_c_functions.h delete mode 100644 third_party/libcxx/include/c++/v1/__string/extern_template_lists.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/ibm/gettod_zos.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/ibm/locale_mgmt_zos.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/ibm/nanosleep.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/xlocale/__nop_locale_mgmt.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/xlocale/__posix_l_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__support/xlocale/__strtonum_fallback.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/errc.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/error_category.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/error_code.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/error_condition.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/system_error.h delete mode 100644 third_party/libcxx/include/c++/v1/__system_error/throw_system_error.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/id.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/jthread.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/poll_with_backoff.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/support.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/support/c11.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/support/external.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/support/pthread.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/support/windows.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/this_thread.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/thread.h delete mode 100644 third_party/libcxx/include/c++/v1/__thread/timed_backoff_policy.h delete mode 100644 third_party/libcxx/include/c++/v1/__tree delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/find_index.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/ignore.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/sfinae_helpers.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/tuple_element.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/tuple_like.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/tuple_like_no_subrange.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/tuple_size.h delete mode 100644 third_party/libcxx/include/c++/v1/__tuple/tuple_transform.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/add_cv_quals.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/add_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/add_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/aligned_storage.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/aligned_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/alignment_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/common_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/common_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/conditional.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/conjunction.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/container_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/copy_cv.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/copy_cvref.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/datasizeof.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/decay.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/dependent_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/desugars_to.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/detected_or.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/disjunction.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/enable_if.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/extent.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/has_unique_object_representation.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/has_virtual_destructor.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/integer_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/integral_constant.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/invoke.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_abstract.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_aggregate.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_allocator.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_always_bitcastable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_arithmetic.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_array.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_base_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_callable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_char_like_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_class.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_compound.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_constant_evaluated.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_convertible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_core_convertible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_enum.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_equality_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_execution_policy.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_final.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_floating_point.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_function.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_fundamental.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_generic_transparent_comparator.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_implicit_lifetime.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_implicitly_default_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_literal_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_member_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_nothrow_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_nothrow_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_nothrow_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_null_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_object.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_pod.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_polymorphic.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_primary_template.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_reference_wrapper.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_referenceable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_same.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_scalar.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_signed.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_specialization.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_standard_layout.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_swappable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivial.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_assignable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_constructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_copyable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_destructible.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_lexicographically_comparable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_trivially_relocatable.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_union.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_unqualified.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_unsigned.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_valid_expansion.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_void.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_volatile.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/is_within_lifetime.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/lazy.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/make_32_64_or_128_bit.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/make_const_lvalue_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/make_signed.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/make_transparent.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/make_unsigned.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/maybe_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/nat.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/negation.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/promote.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/rank.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/reference_constructs_from_temporary.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/reference_converts_from_temporary.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_all_extents.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_const_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_cv.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_cvref.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_extent.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_pointer.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_reference.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/remove_volatile.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/result_of.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/strip_signature.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/type_identity.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/type_list.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/underlying_type.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/unwrap_ref.h delete mode 100644 third_party/libcxx/include/c++/v1/__type_traits/void_t.h delete mode 100644 third_party/libcxx/include/c++/v1/__undef_macros delete mode 100644 third_party/libcxx/include/c++/v1/__utility/as_const.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/as_lvalue.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/auto_cast.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/cmp.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/convert_to_integral.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/declval.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/default_three_way_comparator.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/element_count.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/empty.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/exception_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/exchange.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/forward.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/forward_like.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/in_place.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/integer_sequence.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/is_pointer_in_range.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/lazy_synth_three_way_comparator.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/move.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/no_destroy.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/pair.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/piecewise_construct.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/priority_tag.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/private_constructor_tag.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/rel_ops.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/scope_guard.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/small_buffer.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/to_underlying.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/try_key_extraction.h delete mode 100644 third_party/libcxx/include/c++/v1/__utility/unreachable.h delete mode 100644 third_party/libcxx/include/c++/v1/__variant/monostate.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/comparison.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/container_traits.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/erase.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/pmr.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/swap.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/vector.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/vector_bool.h delete mode 100644 third_party/libcxx/include/c++/v1/__vector/vector_bool_formatter.h delete mode 100644 third_party/libcxx/include/c++/v1/__verbose_abort delete mode 100644 third_party/libcxx/include/c++/v1/__verbose_trap delete mode 100644 third_party/libcxx/include/c++/v1/algorithm delete mode 100644 third_party/libcxx/include/c++/v1/any delete mode 100644 third_party/libcxx/include/c++/v1/array delete mode 100644 third_party/libcxx/include/c++/v1/atomic delete mode 100644 third_party/libcxx/include/c++/v1/barrier delete mode 100644 third_party/libcxx/include/c++/v1/bit delete mode 100644 third_party/libcxx/include/c++/v1/bitset delete mode 100644 third_party/libcxx/include/c++/v1/cassert delete mode 100644 third_party/libcxx/include/c++/v1/ccomplex delete mode 100644 third_party/libcxx/include/c++/v1/cctype delete mode 100644 third_party/libcxx/include/c++/v1/cerrno delete mode 100644 third_party/libcxx/include/c++/v1/cfenv delete mode 100644 third_party/libcxx/include/c++/v1/cfloat delete mode 100644 third_party/libcxx/include/c++/v1/charconv delete mode 100644 third_party/libcxx/include/c++/v1/chrono delete mode 100644 third_party/libcxx/include/c++/v1/cinttypes delete mode 100644 third_party/libcxx/include/c++/v1/ciso646 delete mode 100644 third_party/libcxx/include/c++/v1/climits delete mode 100644 third_party/libcxx/include/c++/v1/clocale delete mode 100644 third_party/libcxx/include/c++/v1/cmath delete mode 100644 third_party/libcxx/include/c++/v1/codecvt delete mode 100644 third_party/libcxx/include/c++/v1/compare delete mode 100644 third_party/libcxx/include/c++/v1/complex delete mode 100644 third_party/libcxx/include/c++/v1/complex.h delete mode 100644 third_party/libcxx/include/c++/v1/concepts delete mode 100644 third_party/libcxx/include/c++/v1/condition_variable delete mode 100644 third_party/libcxx/include/c++/v1/coroutine delete mode 100644 third_party/libcxx/include/c++/v1/csetjmp delete mode 100644 third_party/libcxx/include/c++/v1/csignal delete mode 100644 third_party/libcxx/include/c++/v1/cstdalign delete mode 100644 third_party/libcxx/include/c++/v1/cstdarg delete mode 100644 third_party/libcxx/include/c++/v1/cstdbool delete mode 100644 third_party/libcxx/include/c++/v1/cstddef delete mode 100644 third_party/libcxx/include/c++/v1/cstdint delete mode 100644 third_party/libcxx/include/c++/v1/cstdio delete mode 100644 third_party/libcxx/include/c++/v1/cstdlib delete mode 100644 third_party/libcxx/include/c++/v1/cstring delete mode 100644 third_party/libcxx/include/c++/v1/ctgmath delete mode 100644 third_party/libcxx/include/c++/v1/ctime delete mode 100644 third_party/libcxx/include/c++/v1/ctype.h delete mode 100644 third_party/libcxx/include/c++/v1/cuchar delete mode 100644 third_party/libcxx/include/c++/v1/cwchar delete mode 100644 third_party/libcxx/include/c++/v1/cwctype delete mode 100644 third_party/libcxx/include/c++/v1/cxxabi.h delete mode 100644 third_party/libcxx/include/c++/v1/deque delete mode 100644 third_party/libcxx/include/c++/v1/errno.h delete mode 100644 third_party/libcxx/include/c++/v1/exception delete mode 100644 third_party/libcxx/include/c++/v1/execution delete mode 100644 third_party/libcxx/include/c++/v1/expected delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/aligned_tag.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/declaration.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/reference.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/scalar.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/simd.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/simd_mask.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/traits.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/utility.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/__simd/vec_ext.h delete mode 100644 third_party/libcxx/include/c++/v1/experimental/iterator delete mode 100644 third_party/libcxx/include/c++/v1/experimental/memory delete mode 100644 third_party/libcxx/include/c++/v1/experimental/propagate_const delete mode 100644 third_party/libcxx/include/c++/v1/experimental/simd delete mode 100644 third_party/libcxx/include/c++/v1/experimental/type_traits delete mode 100644 third_party/libcxx/include/c++/v1/experimental/utility delete mode 100644 third_party/libcxx/include/c++/v1/ext/__hash delete mode 100644 third_party/libcxx/include/c++/v1/ext/hash_map delete mode 100644 third_party/libcxx/include/c++/v1/ext/hash_set delete mode 100644 third_party/libcxx/include/c++/v1/fenv.h delete mode 100644 third_party/libcxx/include/c++/v1/filesystem delete mode 100644 third_party/libcxx/include/c++/v1/flat_map delete mode 100644 third_party/libcxx/include/c++/v1/flat_set delete mode 100644 third_party/libcxx/include/c++/v1/format delete mode 100644 third_party/libcxx/include/c++/v1/forward_list delete mode 100644 third_party/libcxx/include/c++/v1/fstream delete mode 100644 third_party/libcxx/include/c++/v1/functional delete mode 100644 third_party/libcxx/include/c++/v1/future delete mode 100644 third_party/libcxx/include/c++/v1/initializer_list delete mode 100644 third_party/libcxx/include/c++/v1/inttypes.h delete mode 100644 third_party/libcxx/include/c++/v1/iomanip delete mode 100644 third_party/libcxx/include/c++/v1/ios delete mode 100644 third_party/libcxx/include/c++/v1/iosfwd delete mode 100644 third_party/libcxx/include/c++/v1/iostream delete mode 100644 third_party/libcxx/include/c++/v1/istream delete mode 100644 third_party/libcxx/include/c++/v1/iterator delete mode 100644 third_party/libcxx/include/c++/v1/latch delete mode 100644 third_party/libcxx/include/c++/v1/libcxx.imp delete mode 100644 third_party/libcxx/include/c++/v1/limits delete mode 100644 third_party/libcxx/include/c++/v1/list delete mode 100644 third_party/libcxx/include/c++/v1/locale delete mode 100644 third_party/libcxx/include/c++/v1/map delete mode 100644 third_party/libcxx/include/c++/v1/math.h delete mode 100644 third_party/libcxx/include/c++/v1/mdspan delete mode 100644 third_party/libcxx/include/c++/v1/memory delete mode 100644 third_party/libcxx/include/c++/v1/memory_resource delete mode 100644 third_party/libcxx/include/c++/v1/module.modulemap delete mode 100644 third_party/libcxx/include/c++/v1/mutex delete mode 100644 third_party/libcxx/include/c++/v1/new delete mode 100644 third_party/libcxx/include/c++/v1/numbers delete mode 100644 third_party/libcxx/include/c++/v1/numeric delete mode 100644 third_party/libcxx/include/c++/v1/optional delete mode 100644 third_party/libcxx/include/c++/v1/ostream delete mode 100644 third_party/libcxx/include/c++/v1/print delete mode 100644 third_party/libcxx/include/c++/v1/queue delete mode 100644 third_party/libcxx/include/c++/v1/random delete mode 100644 third_party/libcxx/include/c++/v1/ranges delete mode 100644 third_party/libcxx/include/c++/v1/ratio delete mode 100644 third_party/libcxx/include/c++/v1/regex delete mode 100644 third_party/libcxx/include/c++/v1/scoped_allocator delete mode 100644 third_party/libcxx/include/c++/v1/semaphore delete mode 100644 third_party/libcxx/include/c++/v1/set delete mode 100644 third_party/libcxx/include/c++/v1/shared_mutex delete mode 100644 third_party/libcxx/include/c++/v1/source_location delete mode 100644 third_party/libcxx/include/c++/v1/span delete mode 100644 third_party/libcxx/include/c++/v1/sstream delete mode 100644 third_party/libcxx/include/c++/v1/stack delete mode 100644 third_party/libcxx/include/c++/v1/stdatomic.h delete mode 100644 third_party/libcxx/include/c++/v1/stddef.h delete mode 100644 third_party/libcxx/include/c++/v1/stdexcept delete mode 100644 third_party/libcxx/include/c++/v1/stdio.h delete mode 100644 third_party/libcxx/include/c++/v1/stdlib.h delete mode 100644 third_party/libcxx/include/c++/v1/stop_token delete mode 100644 third_party/libcxx/include/c++/v1/streambuf delete mode 100644 third_party/libcxx/include/c++/v1/string delete mode 100644 third_party/libcxx/include/c++/v1/string.h delete mode 100644 third_party/libcxx/include/c++/v1/string_view delete mode 100644 third_party/libcxx/include/c++/v1/strstream delete mode 100644 third_party/libcxx/include/c++/v1/syncstream delete mode 100644 third_party/libcxx/include/c++/v1/system_error delete mode 100644 third_party/libcxx/include/c++/v1/tgmath.h delete mode 100644 third_party/libcxx/include/c++/v1/thread delete mode 100644 third_party/libcxx/include/c++/v1/tuple delete mode 100644 third_party/libcxx/include/c++/v1/type_traits delete mode 100644 third_party/libcxx/include/c++/v1/typeindex delete mode 100644 third_party/libcxx/include/c++/v1/typeinfo delete mode 100644 third_party/libcxx/include/c++/v1/uchar.h delete mode 100644 third_party/libcxx/include/c++/v1/unordered_map delete mode 100644 third_party/libcxx/include/c++/v1/unordered_set delete mode 100644 third_party/libcxx/include/c++/v1/utility delete mode 100644 third_party/libcxx/include/c++/v1/valarray delete mode 100644 third_party/libcxx/include/c++/v1/variant delete mode 100644 third_party/libcxx/include/c++/v1/vector delete mode 100644 third_party/libcxx/include/c++/v1/version delete mode 100644 third_party/libcxx/include/c++/v1/wchar.h delete mode 100644 third_party/libcxx/include/c++/v1/wctype.h (limited to 'third_party/libcxx/include') diff --git a/third_party/libcxx/include/c++/v1/__algorithm/adjacent_find.h b/third_party/libcxx/include/c++/v1/__algorithm/adjacent_find.h deleted file mode 100644 index 2508250..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/adjacent_find.h +++ /dev/null @@ -1,60 +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___ALGORITHM_ADJACENT_FIND_H -#define _LIBCPP___ALGORITHM_ADJACENT_FIND_H - -#include <__algorithm/comp.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.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 - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter -__adjacent_find(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - if (__first == __last) - return __first; - - _Iter __i = __first; - while (++__i != __last) { - if (std::__invoke(__pred, std::__invoke(__proj, *__first), std::__invoke(__proj, *__i))) - return __first; - __first = __i; - } - return __i; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { - __identity __proj; - return std::__adjacent_find(std::move(__first), std::move(__last), __pred, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -adjacent_find(_ForwardIterator __first, _ForwardIterator __last) { - return std::adjacent_find(std::move(__first), std::move(__last), __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_ADJACENT_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/all_of.h b/third_party/libcxx/include/c++/v1/__algorithm/all_of.h deleted file mode 100644 index 9bdb20a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/all_of.h +++ /dev/null @@ -1,48 +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___ALGORITHM_ALL_OF_H -#define _LIBCPP___ALGORITHM_ALL_OF_H - -#include <__algorithm/any_of.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__all_of(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - using _Ref = decltype(std::__invoke(__proj, *__first)); - auto __negated_pred = [&__pred](_Ref __arg) -> bool { return !std::__invoke(__pred, std::forward<_Ref>(__arg)); }; - return !std::__any_of(std::move(__first), std::move(__last), __negated_pred, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - __identity __proj; - return std::__all_of(__first, __last, __pred, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_ALL_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/any_of.h b/third_party/libcxx/include/c++/v1/__algorithm/any_of.h deleted file mode 100644 index 4b6eb94..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/any_of.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___ALGORITHM_ANY_OF_H -#define _LIBCPP___ALGORITHM_ANY_OF_H - -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__any_of(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (std::__invoke(__pred, std::__invoke(__proj, *__first))) - return true; - } - return false; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - __identity __proj; - return std::__any_of(__first, __last, __pred, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_ANY_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/binary_search.h b/third_party/libcxx/include/c++/v1/__algorithm/binary_search.h deleted file mode 100644 index 4940059..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/binary_search.h +++ /dev/null @@ -1,38 +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___ALGORITHM_BINARY_SEARCH_H -#define _LIBCPP___ALGORITHM_BINARY_SEARCH_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/lower_bound.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - __first = std::lower_bound<_ForwardIterator, _Tp, __comp_ref_type<_Compare> >(__first, __last, __value, __comp); - return __first != __last && !__comp(__value, *__first); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::binary_search(__first, __last, __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_BINARY_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/clamp.h b/third_party/libcxx/include/c++/v1/__algorithm/clamp.h deleted file mode 100644 index 1a5a3d0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/clamp.h +++ /dev/null @@ -1,44 +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___ALGORITHM_CLAMP_H -#define _LIBCPP___ALGORITHM_CLAMP_H - -#include <__algorithm/comp.h> -#include <__assert> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 -template -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& -clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v, - _LIBCPP_LIFETIMEBOUND const _Tp& __lo, - _LIBCPP_LIFETIMEBOUND const _Tp& __hi, - _Compare __comp) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(!__comp(__hi, __lo), "Bad bounds passed to std::clamp"); - return __comp(__v, __lo) ? __lo : __comp(__hi, __v) ? __hi : __v; -} - -template -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& -clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v, - _LIBCPP_LIFETIMEBOUND const _Tp& __lo, - _LIBCPP_LIFETIMEBOUND const _Tp& __hi) { - return std::clamp(__v, __lo, __hi, __less<>()); -} -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_CLAMP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/comp.h b/third_party/libcxx/include/c++/v1/__algorithm/comp.h deleted file mode 100644 index 38e2fb9..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/comp.h +++ /dev/null @@ -1,57 +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___ALGORITHM_COMP_H -#define _LIBCPP___ALGORITHM_COMP_H - -#include <__config> -#include <__type_traits/desugars_to.h> -#include <__type_traits/is_generic_transparent_comparator.h> -#include <__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -struct __equal_to { - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _T1& __x, const _T2& __y) const { - return __x == __y; - } -}; - -template -inline const bool __desugars_to_v<__equal_tag, __equal_to, _Tp, _Up> = true; - -// The definition is required because __less is part of the ABI, but it's empty -// because all comparisons should be transparent. -template -struct __less {}; - -template <> -struct __less { - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(const _Tp& __lhs, const _Up& __rhs) const { - return __lhs < __rhs; - } -}; - -template -inline const bool __desugars_to_v<__less_tag, __less<>, _Tp, _Tp> = true; - -template -inline const bool __desugars_to_v<__totally_ordered_less_tag, __less<>, _Tp, _Tp> = is_integral<_Tp>::value; - -template <> -inline const bool __is_generic_transparent_comparator_v<__less<> > = true; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_COMP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/comp_ref_type.h b/third_party/libcxx/include/c++/v1/__algorithm/comp_ref_type.h deleted file mode 100644 index 6a9d5ce..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/comp_ref_type.h +++ /dev/null @@ -1,67 +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___ALGORITHM_COMP_REF_TYPE_H -#define _LIBCPP___ALGORITHM_COMP_REF_TYPE_H - -#include <__assert> -#include <__config> -#include <__utility/declval.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __debug_less { - _Compare& __comp_; - _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI __debug_less(_Compare& __c) : __comp_(__c) {} - - template - _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Up& __y) { - bool __r = __comp_(__x, __y); - if (__r) - __do_compare_assert(0, __y, __x); - return __r; - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX14 _LIBCPP_HIDE_FROM_ABI bool operator()(_Tp& __x, _Up& __y) { - bool __r = __comp_(__x, __y); - if (__r) - __do_compare_assert(0, __y, __x); - return __r; - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX14 inline - _LIBCPP_HIDE_FROM_ABI decltype((void)std::declval<_Compare&>()(std::declval<_LHS&>(), std::declval<_RHS&>())) - __do_compare_assert(int, _LHS& __l, _RHS& __r) { - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(!__comp_(__l, __r), "Comparator does not induce a strict weak ordering"); - (void)__l; - (void)__r; - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX14 inline _LIBCPP_HIDE_FROM_ABI void __do_compare_assert(long, _LHS&, _RHS&) {} -}; - -// Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -template -using __comp_ref_type _LIBCPP_NODEBUG = __debug_less<_Comp>; -#else -template -using __comp_ref_type _LIBCPP_NODEBUG = _Comp&; -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_COMP_REF_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/copy.h b/third_party/libcxx/include/c++/v1/__algorithm/copy.h deleted file mode 100644 index 344a53e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/copy.h +++ /dev/null @@ -1,135 +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___ALGORITHM_COPY_H -#define _LIBCPP___ALGORITHM_COPY_H - -#include <__algorithm/copy_move_common.h> -#include <__algorithm/for_each_segment.h> -#include <__algorithm/min.h> -#include <__algorithm/specialized_algorithms.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result); - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> __copy(_InIter, _Sent, _OutIter); - -struct __copy_impl { - template , - __single_iterator<_OutIter> >::__has_algorithm, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - while (__first != __last) { - *__result = *__first; - ++__first; - ++__result; - } - - return std::make_pair(std::move(__first), std::move(__result)); - } - - template , - __single_iterator<_OutIter> >::__has_algorithm, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static pair<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) { - return __specialized_algorithm<_Algorithm::__copy, __iterator_pair<_InIter, _Sent>, __single_iterator<_OutIter> >()( - std::move(__first), std::move(__last), std::move(__result)); - } - - template , int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using __local_iterator = typename __segmented_iterator_traits<_InIter>::__local_iterator; - std::__for_each_segment(__first, __last, [&__result](__local_iterator __lfirst, __local_iterator __llast) { - __result = std::__copy(std::move(__lfirst), std::move(__llast), std::move(__result)).second; - }); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator_v<_InIter> && __is_segmented_iterator_v<_OutIter>, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = - typename common_type<__iterator_difference_type<_InIter>, __iterator_difference_type<_OutIter> >::type; - - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__result)); - - auto __local_first = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_last = _Traits::__end(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iters = std::__copy(__first, __first + __size, __local_first); - __first = std::move(__iters.first); - - if (__first == __last) - return std::make_pair(std::move(__first), _Traits::__compose(__segment_iterator, std::move(__iters.second))); - - __local_first = _Traits::__begin(++__segment_iterator); - } - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> - operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_trivial_impl(__first, __last, __result); - } -}; - -template -pair<_InIter, _OutIter> inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 -__copy(_InIter __first, _Sent __last, _OutIter __result) { - return std::__copy_move_unwrap_iters<__copy_impl>(std::move(__first), std::move(__last), std::move(__result)); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - return std::__copy(__first, __last, __result).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/copy_backward.h b/third_party/libcxx/include/c++/v1/__algorithm/copy_backward.h deleted file mode 100644 index 8758d2c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/copy_backward.h +++ /dev/null @@ -1,255 +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___ALGORITHM_COPY_BACKWARD_H -#define _LIBCPP___ALGORITHM_COPY_BACKWARD_H - -#include <__algorithm/copy_move_common.h> -#include <__algorithm/copy_n.h> -#include <__algorithm/for_each_segment.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__config> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__memory/pointer_traits.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constructible.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InIter, _OutIter> -__copy_backward(_InIter __first, _Sent __last, _OutIter __result); - -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_backward_aligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__last.__ctz_ != 0) { - difference_type __dn = std::min(static_cast(__last.__ctz_), __n); - __n -= __dn; - unsigned __clz = __bits_per_word - __last.__ctz_; - __storage_type __m = std::__middle_mask<__storage_type>(__clz, __last.__ctz_ - __dn); - __storage_type __b = *__last.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(((-__dn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - // __last.__ctz_ = 0 - } - // __last.__ctz_ == 0 || __n == 0 - // __result.__ctz_ == 0 || __n == 0 - // do middle words - __storage_type __nw = __n / __bits_per_word; - __result.__seg_ -= __nw; - __last.__seg_ -= __nw; - std::copy_n(std::__to_address(__last.__seg_), __nw, std::__to_address(__result.__seg_)); - __n -= __nw * __bits_per_word; - // do last word - if (__n > 0) { - __storage_type __m = std::__leading_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = *--__last.__seg_ & __m; - *--__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(-__n & (__bits_per_word - 1)); - } - } - return __result; -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_backward_unaligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__last.__ctz_ != 0) { - difference_type __dn = std::min(static_cast(__last.__ctz_), __n); - __n -= __dn; - unsigned __clz_l = __bits_per_word - __last.__ctz_; - __storage_type __m = std::__middle_mask<__storage_type>(__clz_l, __last.__ctz_ - __dn); - __storage_type __b = *__last.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min(__dn, static_cast(__result.__ctz_)); - if (__ddn > 0) { - __m = std::__middle_mask<__storage_type>(__clz_r, __result.__ctz_ - __ddn); - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __last.__ctz_) - *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_); - else - *__result.__seg_ |= __b >> (__last.__ctz_ - __result.__ctz_); - __result.__ctz_ = static_cast(((-__ddn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - } - if (__dn > 0) { - // __result.__ctz_ == 0 - --__result.__seg_; - __result.__ctz_ = static_cast(-__dn & (__bits_per_word - 1)); - __m = std::__leading_mask<__storage_type>(__result.__ctz_); - *__result.__seg_ &= ~__m; - __last.__ctz_ -= __dn + __ddn; - *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_); - } - // __last.__ctz_ = 0 - } - // __last.__ctz_ == 0 || __n == 0 - // __result.__ctz_ != 0 || __n == 0 - // do middle words - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __m = std::__trailing_mask<__storage_type>(__clz_r); - for (; __n >= __bits_per_word; __n -= __bits_per_word) { - __storage_type __b = *--__last.__seg_; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> __clz_r; - *--__result.__seg_ &= __m; - *__result.__seg_ |= __b << __result.__ctz_; - } - // do last word - if (__n > 0) { - __m = std::__leading_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = *--__last.__seg_ & __m; - __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __dn = std::min(__n, static_cast(__result.__ctz_)); - __m = std::__middle_mask<__storage_type>(__clz_r, __result.__ctz_ - __dn); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> (__bits_per_word - __result.__ctz_); - __result.__ctz_ = static_cast(((-__dn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - // __result.__ctz_ == 0 - --__result.__seg_; - __result.__ctz_ = static_cast(-__n & (__bits_per_word - 1)); - __m = std::__leading_mask<__storage_type>(__result.__ctz_); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << (__result.__ctz_ - (__bits_per_word - __n - __dn)); - } - } - } - return __result; -} - -template -struct __copy_backward_impl { - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - auto __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - auto __original_last_iter = __last_iter; - - while (__first != __last_iter) { - *--__result = *--__last_iter; - } - - return std::make_pair(std::move(__original_last_iter), std::move(__result)); - } - - template , int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using __local_iterator = typename __segmented_iterator_traits<_InIter>::__local_iterator; - std::__for_each_segment_backward(__first, __last, [&__result](__local_iterator __lfirst, __local_iterator __llast) { - __result = std::__copy_backward<_AlgPolicy>(std::move(__lfirst), std::move(__llast), std::move(__result)).second; - }); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator_v<_InIter> && __is_segmented_iterator_v<_OutIter>, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - auto __orig_last = __last; - auto __segment_iterator = _Traits::__segment(__result); - - // When the range contains no elements, __result might not be a valid iterator - if (__first == __last) - return std::make_pair(__first, __result); - - auto __local_last = _Traits::__local(__result); - while (true) { - using _DiffT = - typename common_type<__iterator_difference_type<_InIter>, __iterator_difference_type<_OutIter> >::type; - - auto __local_first = _Traits::__begin(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iter = std::__copy_backward<_AlgPolicy>(__last - __size, __last, __local_last).second; - __last -= __size; - - if (__first == __last) - return std::make_pair(std::move(__orig_last), _Traits::__compose(__segment_iterator, std::move(__iter))); - --__segment_iterator; - __local_last = _Traits::__end(__segment_iterator); - } - } - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__bit_iterator<_Cp, _IsConst>, __bit_iterator<_Cp, false> > - operator()(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - if (__last.__ctz_ == __result.__ctz_) - return std::make_pair(__last, std::__copy_backward_aligned(__first, __last, __result)); - return std::make_pair(__last, std::__copy_backward_unaligned(__first, __last, __result)); - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> - operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_backward_trivial_impl(__first, __last, __result); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator1, _BidirectionalIterator2> -__copy_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result) { - return std::__copy_move_unwrap_iters<__copy_backward_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _BidirectionalIterator2 -copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) { - static_assert(std::is_copy_constructible<_BidirectionalIterator1>::value && - std::is_copy_constructible<_BidirectionalIterator1>::value, - "Iterators must be copy constructible."); - - return std::__copy_backward<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COPY_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/copy_if.h deleted file mode 100644 index ffea621..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/copy_if.h +++ /dev/null @@ -1,50 +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___ALGORITHM_COPY_IF_H -#define _LIBCPP___ALGORITHM_COPY_IF_H - -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> -__copy_if(_InIter __first, _Sent __last, _OutIter __result, _Pred& __pred, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (std::__invoke(__pred, std::__invoke(__proj, *__first))) { - *__result = *__first; - ++__result; - } - } - return std::make_pair(std::move(__first), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) { - __identity __proj; - return std::__copy_if(__first, __last, __result, __pred, __proj).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/copy_move_common.h b/third_party/libcxx/include/c++/v1/__algorithm/copy_move_common.h deleted file mode 100644 index 7471012..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/copy_move_common.h +++ /dev/null @@ -1,113 +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___ALGORITHM_COPY_MOVE_COMMON_H -#define _LIBCPP___ALGORITHM_COPY_MOVE_COMMON_H - -#include <__algorithm/unwrap_iter.h> -#include <__algorithm/unwrap_range.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__iterator/iterator_traits.h> -#include <__memory/pointer_traits.h> -#include <__string/constexpr_c_functions.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_always_bitcastable.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_constructible.h> -#include <__type_traits/is_trivially_assignable.h> -#include <__type_traits/is_volatile.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Type traits. - -template -struct __can_lower_copy_assignment_to_memmove { - static const bool value = - // If the types are always bitcastable, it's valid to do a bitwise copy between them. - __is_always_bitcastable<_From, _To>::value && - // Reject conversions that wouldn't be performed by the regular built-in assignment (e.g. between arrays). - is_trivially_assignable<_To&, const _From&>::value && - // `memmove` doesn't accept `volatile` pointers, make sure the optimization SFINAEs away in that case. - !is_volatile<_From>::value && !is_volatile<_To>::value; -}; - -template -struct __can_lower_move_assignment_to_memmove { - static const bool value = - __is_always_bitcastable<_From, _To>::value && is_trivially_assignable<_To&, _From&&>::value && - !is_volatile<_From>::value && !is_volatile<_To>::value; -}; - -// `memmove` algorithms implementation. - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> -__copy_trivial_impl(_In* __first, _In* __last, _Out* __result) { - const size_t __n = static_cast(__last - __first); - - std::__constexpr_memmove(__result, __first, __element_count(__n)); - - return std::make_pair(__last, __result + __n); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> -__copy_backward_trivial_impl(_In* __first, _In* __last, _Out* __result) { - const size_t __n = static_cast(__last - __first); - __result -= __n; - - std::__constexpr_memmove(__result, __first, __element_count(__n)); - - return std::make_pair(__last, __result); -} - -// Iterator unwrapping and dispatching to the correct overload. - -template -struct __can_rewrap - : integral_constant::value && is_copy_constructible<_OutIter>::value> {}; - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 pair<_InIter, _OutIter> -__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) { - auto __range = std::__unwrap_range(__first, std::move(__last)); - auto __result = _Algorithm()(std::move(__range.first), std::move(__range.second), std::__unwrap_iter(__out_first)); - return std::make_pair(std::__rewrap_range<_Sent>(std::move(__first), std::move(__result.first)), - std::__rewrap_iter(std::move(__out_first), std::move(__result.second))); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 pair<_InIter, _OutIter> -__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) { - return _Algorithm()(std::move(__first), std::move(__last), std::move(__out_first)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COPY_MOVE_COMMON_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/copy_n.h b/third_party/libcxx/include/c++/v1/__algorithm/copy_n.h deleted file mode 100644 index 56fb448..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/copy_n.h +++ /dev/null @@ -1,94 +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___ALGORITHM_COPY_N_H -#define _LIBCPP___ALGORITHM_COPY_N_H - -#include <__algorithm/copy.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/enable_if.h> -#include <__utility/convert_to_integral.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InIter, _OutIter> -__copy_n(_InIter __first, typename _IterOps<_AlgPolicy>::template __difference_type<_InIter> __n, _OutIter __result) { - return std::__copy(__first, __first + __n, std::move(__result)); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InIter, _OutIter> -__copy_n(_InIter __first, typename _IterOps<_AlgPolicy>::template __difference_type<_InIter> __n, _OutIter __result) { - while (__n != 0) { - *__result = *__first; - ++__first; - ++__result; - --__n; - } - return std::make_pair(std::move(__first), std::move(__result)); -} - -// The InputIterator case is handled specially here because it's been written in a way to avoid incrementing __first -// if not absolutely required. This was done to allow its use with istream_iterator and we want to avoid breaking -// people, at least currently. -// See https://github.com/llvm/llvm-project/commit/99847d2bf132854fffa019bab19818768102ccad -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) { - using _IntegralSize = decltype(std::__convert_to_integral(__n)); - _IntegralSize __converted = __n; - if (__converted > 0) { - *__result = *__first; - ++__result; - for (--__converted; __converted > 0; --__converted) { - ++__first; - *__result = *__first; - ++__result; - } - } - return __result; -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -copy_n(_InputIterator __first, _Size __n, _OutputIterator __result) { - using _IntegralSize = decltype(std::__convert_to_integral(__n)); - _IntegralSize __converted = __n; - return std::__copy_n<_ClassicAlgPolicy>(__first, __iterator_difference_type<_InputIterator>(__converted), __result) - .second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COPY_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/count.h b/third_party/libcxx/include/c++/v1/__algorithm/count.h deleted file mode 100644 index 8529d11..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/count.h +++ /dev/null @@ -1,95 +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___ALGORITHM_COUNT_H -#define _LIBCPP___ALGORITHM_COUNT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__bit/invert_if.h> -#include <__bit/popcount.h> -#include <__config> -#include <__functional/identity.h> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// generic implementation -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> -__count(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> __r(0); - for (; __first != __last; ++__first) - if (std::__invoke(__proj, *__first) == __value) - ++__r; - return __r; -} - -// __bit_iterator implementation -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 typename __bit_iterator<_Cp, _IsConst>::difference_type -__count_bool(__bit_iterator<_Cp, _IsConst> __first, typename __size_difference_type_traits<_Cp>::size_type __n) { - using _It = __bit_iterator<_Cp, _IsConst>; - using __storage_type = typename _It::__storage_type; - using difference_type = typename _It::difference_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __r = 0; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - __storage_type __m = std::__middle_mask<__storage_type>(__clz_f - __dn, __first.__ctz_); - __r = std::__popcount(__storage_type(std::__invert_if(*__first.__seg_) & __m)); - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word) - __r += std::__popcount(std::__invert_if(*__first.__seg_)); - // do last partial word - if (__n > 0) { - __storage_type __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - __r += std::__popcount(__storage_type(std::__invert_if(*__first.__seg_) & __m)); - } - return __r; -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __iterator_difference_type<__bit_iterator<_Cp, _IsConst> > -__count(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value, _Proj&) { - if (__value) - return std::__count_bool( - __first, static_cast::size_type>(__last - __first)); - return std::__count_bool( - __first, static_cast::size_type>(__last - __first)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __iterator_difference_type<_InputIterator> -count(_InputIterator __first, _InputIterator __last, const _Tp& __value) { - __identity __proj; - return std::__count<_ClassicAlgPolicy>(__first, __last, __value, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_COUNT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/count_if.h b/third_party/libcxx/include/c++/v1/__algorithm/count_if.h deleted file mode 100644 index 26f945e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/count_if.h +++ /dev/null @@ -1,46 +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___ALGORITHM_COUNT_IF_H -#define _LIBCPP___ALGORITHM_COUNT_IF_H - -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 __policy_iter_diff_t<_AlgPolicy, _Iter> -__count_if(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - __policy_iter_diff_t<_AlgPolicy, _Iter> __counter(0); - for (; __first != __last; ++__first) { - if (std::__invoke(__pred, std::__invoke(__proj, *__first))) - ++__counter; - } - return __counter; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 -typename iterator_traits<_InputIterator>::difference_type -count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - __identity __proj; - return std::__count_if<_ClassicAlgPolicy>(__first, __last, __pred, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_COUNT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/equal.h b/third_party/libcxx/include/c++/v1/__algorithm/equal.h deleted file mode 100644 index b6247c1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/equal.h +++ /dev/null @@ -1,325 +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___ALGORITHM_EQUAL_H -#define _LIBCPP___ALGORITHM_EQUAL_H - -#include <__algorithm/comp.h> -#include <__algorithm/find_segment_if.h> -#include <__algorithm/min.h> -#include <__algorithm/unwrap_iter.h> -#include <__config> -#include <__functional/identity.h> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__string/constexpr_c_functions.h> -#include <__type_traits/common_type.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_equality_comparable.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_volatile.h> -#include <__utility/move.h> -#include <__utility/unreachable.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI bool -__equal_unaligned(__bit_iterator<_Cp, _IsConst1> __first1, - __bit_iterator<_Cp, _IsConst1> __last1, - __bit_iterator<_Cp, _IsConst2> __first2) { - using _It = __bit_iterator<_Cp, _IsConst1>; - using difference_type = typename _It::difference_type; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __n = __last1 - __first1; - if (__n > 0) { - // do first word - if (__first1.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first1.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = std::__middle_mask<__storage_type>(__clz_f - __dn, __first1.__ctz_); - __storage_type __b = *__first1.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __first2.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = std::__middle_mask<__storage_type>(__clz_r - __ddn, __first2.__ctz_); - if (__first2.__ctz_ > __first1.__ctz_) { - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != - static_cast<__storage_type>(__b << (__first2.__ctz_ - __first1.__ctz_))) - return false; - } else { - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != - static_cast<__storage_type>(__b >> (__first1.__ctz_ - __first2.__ctz_))) - return false; - } - __first2.__seg_ += (__ddn + __first2.__ctz_) / __bits_per_word; - __first2.__ctz_ = static_cast((__ddn + __first2.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != - static_cast<__storage_type>(__b >> (__first1.__ctz_ + __ddn))) - return false; - __first2.__ctz_ = static_cast(__dn); - } - ++__first1.__seg_; - // __first1.__ctz_ = 0; - } - // __first1.__ctz_ == 0; - // do middle words - unsigned __clz_r = __bits_per_word - __first2.__ctz_; - __storage_type __m = std::__leading_mask<__storage_type>(__first2.__ctz_); - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_) { - __storage_type __b = *__first1.__seg_; - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != static_cast<__storage_type>(__b << __first2.__ctz_)) - return false; - ++__first2.__seg_; - if (static_cast<__storage_type>(*__first2.__seg_ & static_cast<__storage_type>(~__m)) != - static_cast<__storage_type>(__b >> __clz_r)) - return false; - } - // do last word - if (__n > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = *__first1.__seg_ & __m; - __storage_type __dn = std::min(__n, static_cast(__clz_r)); - __m = std::__middle_mask<__storage_type>(__clz_r - __dn, __first2.__ctz_); - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != static_cast<__storage_type>(__b << __first2.__ctz_)) - return false; - __first2.__seg_ += (__dn + __first2.__ctz_) / __bits_per_word; - __first2.__ctz_ = static_cast((__dn + __first2.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - if (static_cast<__storage_type>(*__first2.__seg_ & __m) != static_cast<__storage_type>(__b >> __dn)) - return false; - } - } - } - return true; -} - -template -[[__nodiscard__]] _LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI bool -__equal_aligned(__bit_iterator<_Cp, _IsConst1> __first1, - __bit_iterator<_Cp, _IsConst1> __last1, - __bit_iterator<_Cp, _IsConst2> __first2) { - using _It = __bit_iterator<_Cp, _IsConst1>; - using difference_type = typename _It::difference_type; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __n = __last1 - __first1; - if (__n > 0) { - // do first word - if (__first1.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first1.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = std::__middle_mask<__storage_type>(__clz - __dn, __first1.__ctz_); - if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m)) - return false; - ++__first2.__seg_; - ++__first1.__seg_; - // __first1.__ctz_ = 0; - // __first2.__ctz_ = 0; - } - // __first1.__ctz_ == 0; - // __first2.__ctz_ == 0; - // do middle words - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_, ++__first2.__seg_) - if (*__first2.__seg_ != *__first1.__seg_) - return false; - // do last word - if (__n > 0) { - __storage_type __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m)) - return false; - } - } - return true; -} - -template ::value && __is_identity<_Proj2>::value && - __desugars_to_v<__equal_tag, _BinaryPredicate, bool, bool>, - int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __equal_iter_impl( - __bit_iterator<_Cp, _IsConst1> __first1, - __bit_iterator<_Cp, _IsConst1> __last1, - __bit_iterator<_Cp, _IsConst2> __first2, - _BinaryPredicate, - _Proj1&, - _Proj2&) { - if (__first1.__ctz_ == __first2.__ctz_) - return std::__equal_aligned(__first1, __last1, __first2); - return std::__equal_unaligned(__first1, __last1, __first2); -} - -template ::value && __is_identity<_Proj2>::value && - __desugars_to_v<__equal_tag, _BinaryPredicate, _Tp, _Up> && !is_volatile<_Tp>::value && - !is_volatile<_Up>::value && __is_trivially_equality_comparable_v<_Tp, _Up>, - int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -__equal_iter_impl(_Tp* __first1, _Tp* __last1, _Up* __first2, _BinaryPredicate&, _Proj1&, _Proj2&) { - return std::__constexpr_memcmp_equal(__first1, __first2, __element_count(__last1 - __first1)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __equal_iter_impl( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { -#ifndef _LIBCPP_CXX03_LANG - if constexpr (__has_random_access_iterator_category<_InIter1>::value && - __has_random_access_iterator_category<_InIter2>::value) { - if constexpr (is_same<_InIter1, _Sent1>::value && __is_segmented_iterator_v<_InIter1>) { - using __local_iterator_t = typename __segmented_iterator_traits<_InIter1>::__local_iterator; - bool __is_equal = true; - std::__find_segment_if(__first1, __last1, [&](__local_iterator_t __lfirst, __local_iterator_t __llast) { - if (std::__equal_iter_impl( - std::__unwrap_iter(__lfirst), std::__unwrap_iter(__llast), __first2, __pred, __proj1, __proj2)) { - __first2 += __llast - __lfirst; - return __llast; - } - __is_equal = false; - return __lfirst; - }); - return __is_equal; - } else if constexpr (__is_segmented_iterator_v<_InIter2>) { - using _Traits = __segmented_iterator_traits<_InIter2>; - using _DiffT = - typename common_type<__iterator_difference_type<_InIter1>, __iterator_difference_type<_InIter2> >::type; - - if (__first1 == __last1) - return true; - - auto __local_first = _Traits::__local(__first2); - auto __segment_iterator = _Traits::__segment(__first2); - - while (true) { - auto __local_last = _Traits::__end(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last1 - __first1); - if (!std::__equal_iter_impl( - __first1, __first1 + __size, std::__unwrap_iter(__local_first), __pred, __proj1, __proj2)) - return false; - - __first1 += __size; - if (__first1 == __last1) - return true; - - __local_first = _Traits::__begin(++__segment_iterator); - } - } - } -#endif - for (; __first1 != __last1; ++__first1, (void)++__first2) - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - return false; - return true; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) { - __identity __proj; - return std::__equal_iter_impl( - std::__unwrap_iter(__first1), std::__unwrap_iter(__last1), std::__unwrap_iter(__first2), __pred, __proj, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) { - return std::equal(__first1, __last1, __first2, __equal_to()); -} - -#if _LIBCPP_STD_VER >= 14 - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __equal_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __comp, _Proj1& __proj1, _Proj2& __proj2) { - if constexpr (__known_equal_length) { - return std::__equal_iter_impl( - std::move(__first1), std::move(__last1), std::move(__first2), __comp, __proj1, __proj2); - } else { - while (__first1 != __last1 && __first2 != __last2) { - if (!std::__invoke(__comp, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - return false; - ++__first1; - ++__first2; - } - return __first1 == __last1 && __first2 == __last2; - } -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -equal(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _BinaryPredicate __pred) { - constexpr bool __both_random_access = - __has_random_access_iterator_category<_InputIterator1>::value && - __has_random_access_iterator_category<_InputIterator2>::value; - if constexpr (__both_random_access) { - if (__last1 - __first1 != __last2 - __first2) - return false; - } - __identity __proj; - return std::__equal_impl<__both_random_access>( - std::__unwrap_iter(__first1), - std::__unwrap_iter(__last1), - std::__unwrap_iter(__first2), - std::__unwrap_iter(__last2), - __pred, - __proj, - __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::equal(__first1, __last1, __first2, __last2, __equal_to()); -} - -#endif // _LIBCPP_STD_VER >= 14 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_EQUAL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/equal_range.h b/third_party/libcxx/include/c++/v1/__algorithm/equal_range.h deleted file mode 100644 index ff6f4f2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/equal_range.h +++ /dev/null @@ -1,81 +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___ALGORITHM_EQUAL_RANGE_H -#define _LIBCPP___ALGORITHM_EQUAL_RANGE_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/half_positive.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__algorithm/upper_bound.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__type_traits/is_constructible.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter, _Iter> -__equal_range(_Iter __first, _Sent __last, const _Tp& __value, _Compare&& __comp, _Proj&& __proj) { - auto __len = _IterOps<_AlgPolicy>::distance(__first, __last); - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - while (__len != 0) { - auto __half_len = std::__half_positive(__len); - _Iter __mid = _IterOps<_AlgPolicy>::next(__first, __half_len); - if (std::__invoke(__comp, std::__invoke(__proj, *__mid), __value)) { - __first = ++__mid; - __len -= __half_len + 1; - } else if (std::__invoke(__comp, __value, std::__invoke(__proj, *__mid))) { - __end = __mid; - __len = __half_len; - } else { - _Iter __mp1 = __mid; - return pair<_Iter, _Iter>(std::__lower_bound<_AlgPolicy>(__first, __mid, __value, __comp, __proj), - std::__upper_bound<_AlgPolicy>(++__mp1, __end, __value, __comp, __proj)); - } - } - return pair<_Iter, _Iter>(__first, __first); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_ForwardIterator, _ForwardIterator> -equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(__is_callable<_Compare&, decltype(*__first), const _Tp&>::value, "The comparator has to be callable"); - static_assert(is_copy_constructible<_ForwardIterator>::value, "Iterator has to be copy constructible"); - return std::__equal_range<_ClassicAlgPolicy>( - std::move(__first), - std::move(__last), - __value, - static_cast<__comp_ref_type<_Compare> >(__comp), - std::__identity()); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_ForwardIterator, _ForwardIterator> -equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::equal_range(std::move(__first), std::move(__last), __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_EQUAL_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/fill.h b/third_party/libcxx/include/c++/v1/__algorithm/fill.h deleted file mode 100644 index 37732cc..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/fill.h +++ /dev/null @@ -1,63 +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___ALGORITHM_FILL_H -#define _LIBCPP___ALGORITHM_FILL_H - -#include <__algorithm/fill_n.h> -#include <__algorithm/for_each_segment.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// fill isn't specialized for std::memset, because the compiler already optimizes the loop to a call to std::memset. - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -__fill(_ForwardIterator __first, _Sentinel __last, const _Tp& __value) { -#ifndef _LIBCPP_CXX03_LANG - if constexpr (is_same<_ForwardIterator, _Sentinel>::value && __is_segmented_iterator_v<_ForwardIterator>) { - using __local_iterator_t = typename __segmented_iterator_traits<_ForwardIterator>::__local_iterator; - std::__for_each_segment(__first, __last, [&](__local_iterator_t __lfirst, __local_iterator_t __llast) { - std::__fill(__lfirst, __llast, __value); - }); - return __last; - } -#endif - for (; __first != __last; ++__first) - *__first = __value; - return __first; -} - -template ::value && - !__is_segmented_iterator_v<_RandomAccessIterator>, - int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator -__fill(_RandomAccessIterator __first, _RandomAccessIterator __last, const _Tp& __value) { - return std::__fill_n(__first, __last - __first, __value); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - std::__fill(__first, __last, __value); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FILL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/fill_n.h b/third_party/libcxx/include/c++/v1/__algorithm/fill_n.h deleted file mode 100644 index 3d06ea4..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/fill_n.h +++ /dev/null @@ -1,75 +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___ALGORITHM_FILL_N_H -#define _LIBCPP___ALGORITHM_FILL_N_H - -#include <__algorithm/for_each_n_segment.h> -#include <__algorithm/specialized_algorithms.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/enable_if.h> -#include <__utility/convert_to_integral.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 - -// fill_n isn't specialized for std::memset, because the compiler already optimizes the loop to a call to std::memset. - -template < - class _OutputIterator, - class _Size, - class _Tp, - __enable_if_t >::__has_algorithm, - int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -__fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) { -#ifndef _LIBCPP_CXX03_LANG - if constexpr (__is_segmented_iterator_v<_OutputIterator>) { - using __local_iterator = typename __segmented_iterator_traits<_OutputIterator>::__local_iterator; - if constexpr (__has_random_access_iterator_category<__local_iterator>::value) { - return std::__for_each_n_segment(__first, __n, [&](__local_iterator __lfirst, __local_iterator __llast) { - std::__fill_n(__lfirst, __llast - __lfirst, __value); - }); - } - } -#endif - for (; __n > 0; ++__first, (void)--__n) - *__first = __value; - return __first; -} - -template >::__has_algorithm, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutIter __fill_n(_OutIter __first, _Size __n, const _Tp& __value) { - return __specialized_algorithm<_Algorithm::__fill_n, __single_iterator<_OutIter> >()( - std::move(__first), __n, __value); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) { - return std::__fill_n(__first, std::__convert_to_integral(__n), __value); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_FILL_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find.h b/third_party/libcxx/include/c++/v1/__algorithm/find.h deleted file mode 100644 index f677fb2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find.h +++ /dev/null @@ -1,240 +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___ALGORITHM_FIND_H -#define _LIBCPP___ALGORITHM_FIND_H - -#include <__algorithm/find_if.h> -#include <__algorithm/find_segment_if.h> -#include <__algorithm/min.h> -#include <__algorithm/simd_utils.h> -#include <__algorithm/unwrap_iter.h> -#include <__bit/countr.h> -#include <__bit/invert_if.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/identity.h> -#include <__fwd/bit_reference.h> -#include <__iterator/segmented_iterator.h> -#include <__string/constexpr_c_functions.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_equality_comparable.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_signed.h> -#include <__utility/move.h> -#include - -#if _LIBCPP_HAS_WIDE_CHARACTERS -# include -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// generic implementation -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iter -__find_generic(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - return std::__find_if( - std::move(__first), - std::move(__last), - [&](_ValT&& __val) -> bool { return __val == __value; }, - __proj); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iter -__find(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - return std::__find_generic(std::move(__first), std::move(__last), __value, __proj); -} - -#if _LIBCPP_VECTORIZE_ALGORITHMS -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp* __find_vectorized(_Tp* __first, _Tp* __last, _Up __value) { - if (!__libcpp_is_constant_evaluated()) { - constexpr size_t __unroll_count = 4; - constexpr size_t __vec_size = __native_vector_size<_Tp>; - using __vec = __simd_vector<_Tp, __vec_size>; - - auto __orig_first = __first; - - auto __values = static_cast<__simd_vector<_Tp, __vec_size>>(__value); // broadcast the value - while (static_cast(__last - __first) >= __unroll_count * __vec_size) [[__unlikely__]] { - __vec __lhs[__unroll_count]; - - for (size_t __i = 0; __i != __unroll_count; ++__i) - __lhs[__i] = std::__load_vector<__vec>(__first + __i * __vec_size); - - for (size_t __i = 0; __i != __unroll_count; ++__i) { - if (auto __cmp_res = __lhs[__i] == __values; std::__any_of(__cmp_res)) { - auto __offset = __i * __vec_size + std::__find_first_set(__cmp_res); - return __first + __offset; - } - } - - __first += __unroll_count * __vec_size; - } - - // check the remaining 0-3 vectors - while (static_cast(__last - __first) >= __vec_size) { - if (auto __cmp_res = std::__load_vector<__vec>(__first) == __values; std::__any_of(__cmp_res)) { - return __first + std::__find_first_set(__cmp_res); - } - __first += __vec_size; - } - - if (__last - __first == 0) - return __first; - - // Check if we can load elements in front of the current pointer. If that's the case load a vector at - // (last - vector_size) to check the remaining elements - if (static_cast(__first - __orig_first) >= __vec_size) { - __first = __last - __vec_size; - return __first + std::__find_first_set(std::__load_vector<__vec>(__first) == __values); - } - } - - __identity __proj; - return std::__find_generic(__first, __last, __value, __proj); -} -#endif - -#ifndef _LIBCPP_CXX03_LANG -// trivially equality comparable implementations -template ::value && __is_trivially_equality_comparable_v<_Tp, _Up>, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp* __find(_Tp* __first, _Tp* __last, const _Up& __value, _Proj&) { - if constexpr (sizeof(_Tp) == 1) { - if (auto __ret = std::__constexpr_memchr(__first, __value, __last - __first)) - return __ret; - return __last; - } -# if _LIBCPP_HAS_WIDE_CHARACTERS - else if constexpr (sizeof(_Tp) == sizeof(wchar_t) && _LIBCPP_ALIGNOF(_Tp) >= _LIBCPP_ALIGNOF(wchar_t)) { - if (auto __ret = std::__constexpr_wmemchr(__first, __value, __last - __first)) - return __ret; - return __last; - } -# endif -# if _LIBCPP_VECTORIZE_ALGORITHMS - else if constexpr (is_integral<_Tp>::value) { - return std::__find_vectorized(__first, __last, __value); - } -# endif - else { - __identity __proj; - return std::__find_generic(__first, __last, __value, __proj); - } -} -#endif - -// TODO: This should also be possible to get right with different signedness -// cast integral types to allow vectorization -template ::value && !__is_trivially_equality_comparable_v<_Tp, _Up> && - is_integral<_Tp>::value && is_integral<_Up>::value && - is_signed<_Tp>::value == is_signed<_Up>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp* -__find(_Tp* __first, _Tp* __last, const _Up& __value, _Proj& __proj) { - if (__value < numeric_limits<_Tp>::min() || __value > numeric_limits<_Tp>::max()) - return __last; - return std::__find(__first, __last, _Tp(__value), __proj); -} - -// __bit_iterator implementation -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, _IsConst> -__find_bool(__bit_iterator<_Cp, _IsConst> __first, typename __size_difference_type_traits<_Cp>::size_type __n) { - using _It = __bit_iterator<_Cp, _IsConst>; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - __storage_type __m = std::__middle_mask<__storage_type>(__clz_f - __dn, __first.__ctz_); - __storage_type __b = std::__invert_if(*__first.__seg_) & __m; - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - if (__n == __dn) - return __first + __n; - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word) { - __storage_type __b = std::__invert_if(*__first.__seg_); - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - } - // do last partial word - if (__n > 0) { - __storage_type __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = std::__invert_if(*__first.__seg_) & __m; - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - } - return _It(__first.__seg_, static_cast(__n)); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator<_Cp, _IsConst> -__find(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value, _Proj&) { - if (static_cast(__value)) - return std::__find_bool( - __first, static_cast::size_type>(__last - __first)); - return std::__find_bool( - __first, static_cast::size_type>(__last - __first)); -} - -// segmented iterator implementation - -template , int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _SegmentedIterator -__find(_SegmentedIterator __first, _SegmentedIterator __last, const _Tp& __value, _Proj& __proj) { - using __local_iterator = typename __segmented_iterator_traits<_SegmentedIterator>::__local_iterator; - return std::__find_segment_if( - std::move(__first), std::move(__last), [&__value, &__proj](__local_iterator __lfirst, __local_iterator __llast) { - return std::__rewrap_iter( - __lfirst, std::__find(std::__unwrap_iter(__lfirst), std::__unwrap_iter(__llast), __value, __proj)); - }); -} - -// public API -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -find(_InputIterator __first, _InputIterator __last, const _Tp& __value) { - __identity __proj; - return std::__rewrap_iter( - __first, std::__find(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __value, __proj)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find_end.h b/third_party/libcxx/include/c++/v1/__algorithm/find_end.h deleted file mode 100644 index 84b43e3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find_end.h +++ /dev/null @@ -1,223 +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___ALGORITHM_FIND_END_OF_H -#define _LIBCPP___ALGORITHM_FIND_END_OF_H - -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template < class _AlgPolicy, - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Pred, - class _Proj1, - class _Proj2> -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __find_end_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - forward_iterator_tag, - forward_iterator_tag) { - // modeled after search algorithm - _Iter1 __match_first = _IterOps<_AlgPolicy>::next(__first1, __last1); // __last1 is the "default" answer - _Iter1 __match_last = __match_first; - if (__first2 == __last2) - return pair<_Iter1, _Iter1>(__match_last, __match_last); - while (true) { - while (true) { - if (__first1 == __last1) // if source exhausted return last correct answer (or __last1 if never found) - return pair<_Iter1, _Iter1>(__match_first, __match_last); - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - // *__first1 matches *__first2, now match elements after here - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) { // Pattern exhaused, record answer and search for another one - __match_first = __first1; - __match_last = ++__m1; - ++__first1; - break; - } - if (++__m1 == __last1) // Source exhausted, return last answer - return pair<_Iter1, _Iter1>(__match_first, __match_last); - // mismatch, restart with a new __first - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } // else there is a match, check next elements - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter1> __find_end_impl( - _Iter1 __first1, - _Sent1 __sent1, - _Iter2 __first2, - _Sent2 __sent2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - bidirectional_iterator_tag, - bidirectional_iterator_tag) { - auto __last1 = _IterOps<_AlgPolicy>::next(__first1, __sent1); - auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __sent2); - // modeled after search algorithm (in reverse) - if (__first2 == __last2) - return std::make_pair(__last1, __last1); // Everything matches an empty sequence - _Iter1 __l1 = __last1; - _Iter2 __l2 = __last2; - --__l2; - while (true) { - // Find last element in sequence 1 that matches *(__last2-1), with a mininum of loop checks - while (true) { - if (__first1 == __l1) // return __last1 if no element matches *__first2 - return std::make_pair(__last1, __last1); - if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2))) - break; - } - // *__l1 matches *__l2, now match elements before here - _Iter1 __match_last = __l1; - _Iter1 __m1 = __l1; - _Iter2 __m2 = __l2; - while (true) { - if (__m2 == __first2) // If pattern exhausted, __m1 is the answer (works for 1 element pattern) - return std::make_pair(__m1, ++__match_last); - if (__m1 == __first1) // Otherwise if source exhaused, pattern not found - return std::make_pair(__last1, __last1); - - // if there is a mismatch, restart with a new __l1 - if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(__proj2, *--__m2))) { - break; - } // else there is a match, check next elements - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __find_end_impl( - _Iter1 __first1, - _Sent1 __sent1, - _Iter2 __first2, - _Sent2 __sent2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - random_access_iterator_tag, - random_access_iterator_tag) { - typedef typename iterator_traits<_Iter1>::difference_type _D1; - auto __last1 = _IterOps<_AlgPolicy>::next(__first1, __sent1); - auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __sent2); - // Take advantage of knowing source and pattern lengths. Stop short when source is smaller than pattern - auto __len2 = __last2 - __first2; - if (__len2 == 0) - return std::make_pair(__last1, __last1); - auto __len1 = __last1 - __first1; - if (__len1 < __len2) - return std::make_pair(__last1, __last1); - const _Iter1 __s = __first1 + _D1(__len2 - 1); // End of pattern match can't go before here - _Iter1 __l1 = __last1; - _Iter2 __l2 = __last2; - --__l2; - while (true) { - while (true) { - if (__s == __l1) - return std::make_pair(__last1, __last1); - if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2))) - break; - } - _Iter1 __last_match = __l1; - _Iter1 __m1 = __l1; - _Iter2 __m2 = __l2; - while (true) { - if (__m2 == __first2) - return std::make_pair(__m1, ++__last_match); - // no need to check range on __m1 because __s guarantees we have enough source - if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(__proj2, *--__m2))) { - break; - } - } - } -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator1 __find_end_classic( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate& __pred) { - auto __proj = __identity(); - return std::__find_end_impl<_ClassicAlgPolicy>( - __first1, - __last1, - __first2, - __last2, - __pred, - __proj, - __proj, - typename iterator_traits<_ForwardIterator1>::iterator_category(), - typename iterator_traits<_ForwardIterator2>::iterator_category()) - .first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 find_end( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - return std::__find_end_classic(__first1, __last1, __first2, __last2, __pred); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 -find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::find_end(__first1, __last1, __first2, __last2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FIND_END_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find_first_of.h b/third_party/libcxx/include/c++/v1/__algorithm/find_first_of.h deleted file mode 100644 index 45ec133..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find_first_of.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___ALGORITHM_FIND_FIRST_OF_H -#define _LIBCPP___ALGORITHM_FIND_FIRST_OF_H - -#include <__algorithm/comp.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator1 __find_first_of_ce( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate&& __pred) { - for (; __first1 != __last1; ++__first1) - for (_ForwardIterator2 __j = __first2; __j != __last2; ++__j) - if (__pred(*__first1, *__j)) - return __first1; - return __last1; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 find_first_of( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __pred); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 find_first_of( - _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FIND_FIRST_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find_if.h b/third_party/libcxx/include/c++/v1/__algorithm/find_if.h deleted file mode 100644 index 2a96e13..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find_if.h +++ /dev/null @@ -1,43 +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___ALGORITHM_FIND_IF_H -#define _LIBCPP___ALGORITHM_FIND_IF_H - -#include <__config> -#include <__functional/identity.h> -#include <__memory/valid_range.h> -#include <__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 _Iter -__find_if(_Iter __first, _Sent __last, _Pred&& __pred, _Proj&& __proj) { - std::__assume_valid_range(__first, __last); - - for (; __first != __last; ++__first) - if (std::__invoke(__pred, std::__invoke(__proj, *__first))) - break; - return __first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - return std::__find_if(__first, __last, __pred, __identity()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FIND_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find_if_not.h b/third_party/libcxx/include/c++/v1/__algorithm/find_if_not.h deleted file mode 100644 index d37da4c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find_if_not.h +++ /dev/null @@ -1,48 +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___ALGORITHM_FIND_IF_NOT_H -#define _LIBCPP___ALGORITHM_FIND_IF_NOT_H - -#include <__algorithm/find_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter -__find_if_not(_Iter __first, _Sent __last, _Pred&& __pred, _Proj&& __proj) { - return std::__find_if( - std::move(__first), - std::move(__last), - [&](_ValT&& __val) -> bool { return !std::__invoke(__pred, __val); }, - __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - return std::__find_if_not(__first, __last, __pred, __identity()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_FIND_IF_NOT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/find_segment_if.h b/third_party/libcxx/include/c++/v1/__algorithm/find_segment_if.h deleted file mode 100644 index 558f8a1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/find_segment_if.h +++ /dev/null @@ -1,61 +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___ALGORITHM_FIND_SEGMENT_IF_H -#define _LIBCPP___ALGORITHM_FIND_SEGMENT_IF_H - -#include <__config> -#include <__iterator/segmented_iterator.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __find_segment_if is a utility function for optimizing iteration over segmented iterators linearly. -// [__first, __last) has to be a segmented range. __pred is expected to take a range of local iterators. -// It returns an iterator to the first element that satisfies the predicate, or a one-past-the-end iterator if there was -// no match. - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _SegmentedIterator -__find_segment_if(_SegmentedIterator __first, _SegmentedIterator __last, _Pred __pred) { - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - - // We are in a single segment, so we might not be at the beginning or end - if (__sfirst == __slast) - return _Traits::__compose(__sfirst, __pred(_Traits::__local(__first), _Traits::__local(__last))); - - { // We have more than one segment. Iterate over the first segment, since we might not start at the beginning - auto __llast = _Traits::__end(__sfirst); - auto __liter = __pred(_Traits::__local(__first), __llast); - if (__liter != __llast) - return _Traits::__compose(__sfirst, __liter); - } - ++__sfirst; - - // Iterate over the segments which are guaranteed to be completely in the range - while (__sfirst != __slast) { - auto __llast = _Traits::__end(__sfirst); - auto __liter = __pred(_Traits::__begin(__sfirst), _Traits::__end(__sfirst)); - if (__liter != __llast) - return _Traits::__compose(__sfirst, __liter); - ++__sfirst; - } - - // Iterate over the last segment - return _Traits::__compose(__sfirst, __pred(_Traits::__begin(__sfirst), _Traits::__local(__last))); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FIND_SEGMENT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/for_each.h b/third_party/libcxx/include/c++/v1/__algorithm/for_each.h deleted file mode 100644 index bb656a2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/for_each.h +++ /dev/null @@ -1,59 +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___ALGORITHM_FOR_EACH_H -#define _LIBCPP___ALGORITHM_FOR_EACH_H - -#include <__algorithm/for_each_segment.h> -#include <__algorithm/specialized_algorithms.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -__for_each(_InputIterator __first, _Sent __last, _Func&& __func, _Proj& __proj) { -#ifndef _LIBCPP_CXX03_LANG - if constexpr (using _SpecialAlg = - __specialized_algorithm<_Algorithm::__for_each, __iterator_pair<_InputIterator, _Sent>>; - _SpecialAlg::__has_algorithm) { - _SpecialAlg()(__first, __last, __func, __proj); - return __last; - } else if constexpr (is_same<_InputIterator, _Sent>::value && __is_segmented_iterator_v<_InputIterator>) { - using __local_iterator_t = typename __segmented_iterator_traits<_InputIterator>::__local_iterator; - std::__for_each_segment(__first, __last, [&](__local_iterator_t __lfirst, __local_iterator_t __llast) { - std::__for_each(__lfirst, __llast, __func, __proj); - }); - return __last; - } -#endif - for (; __first != __last; ++__first) - std::__invoke(__func, std::__invoke(__proj, *__first)); - return __first; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Func -for_each(_InputIterator __first, _InputIterator __last, _Func __f) { - __identity __proj; - std::__for_each(__first, __last, __f, __proj); - return __f; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FOR_EACH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/for_each_n.h b/third_party/libcxx/include/c++/v1/__algorithm/for_each_n.h deleted file mode 100644 index 7ff3f9b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/for_each_n.h +++ /dev/null @@ -1,76 +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___ALGORITHM_FOR_EACH_N_H -#define _LIBCPP___ALGORITHM_FOR_EACH_N_H - -#include <__algorithm/for_each.h> -#include <__algorithm/for_each_n_segment.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/invoke.h> -#include <__utility/convert_to_integral.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -__for_each_n(_InputIterator __first, _Size __orig_n, _Func&& __f, _Proj& __proj) { - typedef decltype(std::__convert_to_integral(__orig_n)) _IntegralSize; - _IntegralSize __n = __orig_n; - -#ifndef _LIBCPP_CXX03_LANG - if constexpr (__is_segmented_iterator_v<_InputIterator>) { - using __local_iterator = typename __segmented_iterator_traits<_InputIterator>::__local_iterator; - if constexpr (__has_random_access_iterator_category<__local_iterator>::value) { - return std::__for_each_n_segment(__first, __orig_n, [&](__local_iterator __lfirst, __local_iterator __llast) { - std::__for_each(__lfirst, __llast, __f, __proj); - }); - } else { - return std::__for_each(__first, __first + __n, std::forward<_Func>(__f), __proj); - } - } else -#endif - { - while (__n > 0) { - std::__invoke(__f, std::__invoke(__proj, *__first)); - ++__first; - --__n; - } - return std::move(__first); - } -} - -#if _LIBCPP_STD_VER >= 17 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _InputIterator -for_each_n(_InputIterator __first, _Size __orig_n, _Func __f) { - __identity __proj; - return std::__for_each_n(__first, __orig_n, __f, __proj); -} - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_FOR_EACH_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/for_each_n_segment.h b/third_party/libcxx/include/c++/v1/__algorithm/for_each_n_segment.h deleted file mode 100644 index a433df5..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/for_each_n_segment.h +++ /dev/null @@ -1,63 +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___ALGORITHM_FOR_EACH_N_SEGMENT_H -#define _LIBCPP___ALGORITHM_FOR_EACH_N_SEGMENT_H - -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __for_each_n_segment optimizes linear iteration over segmented iterators. It processes a segmented -// input range [__first, __first + __n) by applying the functor __func to each element within the segment. -// The return value of __func is ignored, and the function returns an iterator pointing to one past the -// last processed element in the input range. - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _SegmentedIterator -__for_each_n_segment(_SegmentedIterator __first, _Size __orig_n, _Functor __func) { - static_assert(__is_segmented_iterator_v<_SegmentedIterator> && - __has_random_access_iterator_category< - typename __segmented_iterator_traits<_SegmentedIterator>::__local_iterator>::value, - "__for_each_n_segment only works with segmented iterators with random-access local iterators"); - if (__orig_n <= 0) - return __first; - - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - using __local_iter_t = typename _Traits::__local_iterator; - using __difference_t = typename std::iterator_traits<__local_iter_t>::difference_type; - __difference_t __n = __orig_n; - auto __seg = _Traits::__segment(__first); - auto __local_first = _Traits::__local(__first); - __local_iter_t __local_last; - - while (__n > 0) { - __local_last = _Traits::__end(__seg); - auto __seg_size = __local_last - __local_first; - if (__n <= __seg_size) { - __local_last = __local_first + __n; - __func(__local_first, __local_last); - break; - } - __func(__local_first, __local_last); - __n -= __seg_size; - __local_first = _Traits::__begin(++__seg); - } - - return _Traits::__compose(__seg, __local_last); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FOR_EACH_N_SEGMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/for_each_segment.h b/third_party/libcxx/include/c++/v1/__algorithm/for_each_segment.h deleted file mode 100644 index c02436c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/for_each_segment.h +++ /dev/null @@ -1,79 +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___ALGORITHM_FOR_EACH_SEGMENT_H -#define _LIBCPP___ALGORITHM_FOR_EACH_SEGMENT_H - -#include <__config> -#include <__iterator/segmented_iterator.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __for_each_segment is a utility function for optimizing iterating over segmented iterators linearly. -// __first and __last are expected to be a segmented range. __func is expected to take a range of local iterators. -// Anything that is returned from __func is ignored. - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__for_each_segment(_SegmentedIterator __first, _SegmentedIterator __last, _Functor __func) { - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - - // We are in a single segment, so we might not be at the beginning or end - if (__sfirst == __slast) { - __func(_Traits::__local(__first), _Traits::__local(__last)); - return; - } - - // We have more than one segment. Iterate over the first segment, since we might not start at the beginning - __func(_Traits::__local(__first), _Traits::__end(__sfirst)); - ++__sfirst; - // iterate over the segments which are guaranteed to be completely in the range - while (__sfirst != __slast) { - __func(_Traits::__begin(__sfirst), _Traits::__end(__sfirst)); - ++__sfirst; - } - // iterate over the last segment - __func(_Traits::__begin(__sfirst), _Traits::__local(__last)); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__for_each_segment_backward(_SegmentedIterator __first, _SegmentedIterator __last, _Functor __func) { - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - - // We are in a single segment, so we might not be at the beginning or end - if (__sfirst == __slast) { - __func(_Traits::__local(__first), _Traits::__local(__last)); - return; - } - - // We have more than one segment. Iterate over the last segment, since we might not start at the end - __func(_Traits::__begin(__slast), _Traits::__local(__last)); - --__slast; - // iterate over the segments which are guaranteed to be completely in the range - while (__sfirst != __slast) { - __func(_Traits::__begin(__slast), _Traits::__end(__slast)); - --__slast; - } - // iterate over the first segment - __func(_Traits::__local(__first), _Traits::__end(__slast)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_FOR_EACH_SEGMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/generate.h b/third_party/libcxx/include/c++/v1/__algorithm/generate.h deleted file mode 100644 index c4cd75c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/generate.h +++ /dev/null @@ -1,31 +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___ALGORITHM_GENERATE_H -#define _LIBCPP___ALGORITHM_GENERATE_H - -#include <__algorithm/for_each.h> -#include <__config> -#include <__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen) { - using __iter_ref = decltype(*__first); - std::for_each(__first, __last, [&](__iter_ref __element) { std::forward<__iter_ref>(__element) = __gen(); }); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_GENERATE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/generate_n.h b/third_party/libcxx/include/c++/v1/__algorithm/generate_n.h deleted file mode 100644 index ba04eb6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/generate_n.h +++ /dev/null @@ -1,49 +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___ALGORITHM_GENERATE_N_H -#define _LIBCPP___ALGORITHM_GENERATE_N_H - -#include <__algorithm/for_each_n.h> -#include <__config> -#include <__functional/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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -__generate_n(_OutputIterator __first, _Size __orig_n, _Generator& __gen) { - using __iter_ref = decltype(*__first); - __identity __proj; - return std::__for_each_n( - std::move(__first), - __orig_n, - [&](__iter_ref __element) { std::forward<__iter_ref>(__element) = __gen(); }, - __proj); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -generate_n(_OutputIterator __first, _Size __orig_n, _Generator __gen) { - return std::__generate_n(std::move(__first), __orig_n, __gen); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_GENERATE_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/half_positive.h b/third_party/libcxx/include/c++/v1/__algorithm/half_positive.h deleted file mode 100644 index ebda0da..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/half_positive.h +++ /dev/null @@ -1,37 +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___ALGORITHM_HALF_POSITIVE_H -#define _LIBCPP___ALGORITHM_HALF_POSITIVE_H - -#include <__config> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/make_unsigned.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Perform division by two quickly for positive integers (llvm.org/PR39129) - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Integral __half_positive(_Integral __value) { - return static_cast<_Integral>(static_cast<__make_unsigned_t<_Integral> >(__value) / 2); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Tp __half_positive(_Tp __value) { - return __value / 2; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_HALF_POSITIVE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_found_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_found_result.h deleted file mode 100644 index a67ae38..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_found_result.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___ALGORITHM_IN_FOUND_RESULT_H -#define _LIBCPP___ALGORITHM_IN_FOUND_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -template -struct in_found_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in; - bool found; - - template - requires convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_found_result<_InIter2>() const& { - return {in, found}; - } - - template - requires convertible_to<_InIter1, _InIter2> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_found_result<_InIter2>() && { - return {std::move(in), found}; - } -}; -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_FOUND_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_fun_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_fun_result.h deleted file mode 100644 index a22069a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_fun_result.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___ALGORITHM_IN_FUN_RESULT_H -#define _LIBCPP___ALGORITHM_IN_FUN_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct in_fun_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in; - _LIBCPP_NO_UNIQUE_ADDRESS _Func1 fun; - - template - requires convertible_to && convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_fun_result<_InIter2, _Func2>() const& { - return {in, fun}; - } - - template - requires convertible_to<_InIter1, _InIter2> && convertible_to<_Func1, _Func2> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_fun_result<_InIter2, _Func2>() && { - return {std::move(in), std::move(fun)}; - } -}; -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_FUN_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_in_out_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_in_out_result.h deleted file mode 100644 index ba0380b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_in_out_result.h +++ /dev/null @@ -1,59 +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___ALGORITHM_IN_IN_OUT_RESULT_H -#define _LIBCPP___ALGORITHM_IN_IN_OUT_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct in_in_out_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in1; - _LIBCPP_NO_UNIQUE_ADDRESS _InIter2 in2; - _LIBCPP_NO_UNIQUE_ADDRESS _OutIter1 out; - - template - requires convertible_to && convertible_to && - convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_out_result<_InIter3, _InIter4, _OutIter2>() const& { - return {in1, in2, out}; - } - - template - requires convertible_to<_InIter1, _InIter3> && convertible_to<_InIter2, _InIter4> && - convertible_to<_OutIter1, _OutIter2> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_out_result<_InIter3, _InIter4, _OutIter2>() && { - return {std::move(in1), std::move(in2), std::move(out)}; - } -}; - -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_IN_OUT_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_in_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_in_result.h deleted file mode 100644 index 994573f..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_in_result.h +++ /dev/null @@ -1,56 +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___ALGORITHM_IN_IN_RESULT_H -#define _LIBCPP___ALGORITHM_IN_IN_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct in_in_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in1; - _LIBCPP_NO_UNIQUE_ADDRESS _InIter2 in2; - - template - requires convertible_to && convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_result<_InIter3, _InIter4>() const& { - return {in1, in2}; - } - - template - requires convertible_to<_InIter1, _InIter3> && convertible_to<_InIter2, _InIter4> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_in_result<_InIter3, _InIter4>() && { - return {std::move(in1), std::move(in2)}; - } -}; - -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_IN_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_out_out_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_out_out_result.h deleted file mode 100644 index 8ceb452..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_out_out_result.h +++ /dev/null @@ -1,57 +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___ALGORITHM_IN_OUT_OUT_RESULT_H -#define _LIBCPP___ALGORITHM_IN_OUT_OUT_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct in_out_out_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in; - _LIBCPP_NO_UNIQUE_ADDRESS _OutIter1 out1; - _LIBCPP_NO_UNIQUE_ADDRESS _OutIter2 out2; - - template - requires convertible_to && convertible_to && - convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_out_out_result<_InIter2, _OutIter3, _OutIter4>() const& { - return {in, out1, out2}; - } - - template - requires convertible_to<_InIter1, _InIter2> && convertible_to<_OutIter1, _OutIter3> && - convertible_to<_OutIter2, _OutIter4> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_out_out_result<_InIter2, _OutIter3, _OutIter4>() && { - return {std::move(in), std::move(out1), std::move(out2)}; - } -}; -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_OUT_OUT_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/in_out_result.h b/third_party/libcxx/include/c++/v1/__algorithm/in_out_result.h deleted file mode 100644 index a7a986c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/in_out_result.h +++ /dev/null @@ -1,56 +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___ALGORITHM_IN_OUT_RESULT_H -#define _LIBCPP___ALGORITHM_IN_OUT_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct in_out_result { - _LIBCPP_NO_UNIQUE_ADDRESS _InIter1 in; - _LIBCPP_NO_UNIQUE_ADDRESS _OutIter1 out; - - template - requires convertible_to && convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_out_result<_InIter2, _OutIter2>() const& { - return {in, out}; - } - - template - requires convertible_to<_InIter1, _InIter2> && convertible_to<_OutIter1, _OutIter2> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_out_result<_InIter2, _OutIter2>() && { - return {std::move(in), std::move(out)}; - } -}; - -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IN_OUT_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/includes.h b/third_party/libcxx/include/c++/v1/__algorithm/includes.h deleted file mode 100644 index bc6c657..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/includes.h +++ /dev/null @@ -1,78 +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___ALGORITHM_INCLUDES_H -#define _LIBCPP___ALGORITHM_INCLUDES_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __includes( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Comp&& __comp, - _Proj1&& __proj1, - _Proj2&& __proj2) { - for (; __first2 != __last2; ++__first1) { - if (__first1 == __last1 || - std::__invoke(__comp, std::__invoke(__proj2, *__first2), std::__invoke(__proj1, *__first1))) - return false; - if (!std::__invoke(__comp, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - ++__first2; - } - return true; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -includes(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _Compare __comp) { - static_assert( - __is_callable<_Compare&, decltype(*__first1), decltype(*__first2)>::value, "The comparator has to be callable"); - - return std::__includes( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - static_cast<__comp_ref_type<_Compare> >(__comp), - __identity(), - __identity()); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::includes(std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_INCLUDES_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/inplace_merge.h b/third_party/libcxx/include/c++/v1/__algorithm/inplace_merge.h deleted file mode 100644 index fbfe899..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/inplace_merge.h +++ /dev/null @@ -1,243 +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___ALGORITHM_INPLACE_MERGE_H -#define _LIBCPP___ALGORITHM_INPLACE_MERGE_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__algorithm/min.h> -#include <__algorithm/move.h> -#include <__algorithm/rotate.h> -#include <__algorithm/upper_bound.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/reverse_iterator.h> -#include <__memory/construct_at.h> -#include <__memory/destruct_n.h> -#include <__memory/unique_ptr.h> -#include <__memory/unique_temporary_buffer.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __invert // invert the sense of a comparison -{ -private: - _Predicate __p_; - -public: - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 __invert() {} - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 explicit __invert(_Predicate __p) : __p_(__p) {} - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 bool operator()(const _T1& __x) { - return !__p_(__x); - } - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 bool operator()(const _T1& __x, const _T2& __y) { - return __p_(__y, __x); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __half_inplace_merge( - _InputIterator1 __first1, - _Sent1 __last1, - _InputIterator2 __first2, - _Sent2 __last2, - _OutputIterator __result, - _Compare&& __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - std::__move<_AlgPolicy>(__first1, __last1, __result); - return; - } - - if (__comp(*__first2, *__first1)) { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first2); - ++__first2; - } else { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first1); - ++__first1; - } - } - // __first2 through __last2 are already in the right spot. -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __buffered_inplace_merge( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - _Compare&& __comp, - typename iterator_traits<_BidirectionalIterator>::difference_type __len1, - typename iterator_traits<_BidirectionalIterator>::difference_type __len2, - typename iterator_traits<_BidirectionalIterator>::value_type* __buff) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h2(__buff, __d); - if (__len1 <= __len2) { - value_type* __p = __buff; - for (_BidirectionalIterator __i = __first; __i != __middle; - __d.template __incr(), (void)++__i, (void)++__p) - std::__construct_at(__p, _IterOps<_AlgPolicy>::__iter_move(__i)); - std::__half_inplace_merge<_AlgPolicy>(__buff, __p, __middle, __last, __first, __comp); - } else { - value_type* __p = __buff; - for (_BidirectionalIterator __i = __middle; __i != __last; - __d.template __incr(), (void)++__i, (void)++__p) - std::__construct_at(__p, _IterOps<_AlgPolicy>::__iter_move(__i)); - typedef reverse_iterator<_BidirectionalIterator> _RBi; - typedef reverse_iterator _Rv; - typedef __invert<_Compare> _Inverted; - std::__half_inplace_merge<_AlgPolicy>( - _Rv(__p), _Rv(__buff), _RBi(__middle), _RBi(__first), _RBi(__last), _Inverted(__comp)); - } -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX26 void __inplace_merge( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - _Compare&& __comp, - typename iterator_traits<_BidirectionalIterator>::difference_type __len1, - typename iterator_traits<_BidirectionalIterator>::difference_type __len2, - typename iterator_traits<_BidirectionalIterator>::value_type* __buff, - ptrdiff_t __buff_size) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - while (true) { - // if __middle == __last, we're done - if (__len2 == 0) - return; - if (__len1 <= __buff_size || __len2 <= __buff_size) - return std::__buffered_inplace_merge<_AlgPolicy>(__first, __middle, __last, __comp, __len1, __len2, __buff); - // shrink [__first, __middle) as much as possible (with no moves), returning if it shrinks to 0 - for (; true; ++__first, (void)--__len1) { - if (__len1 == 0) - return; - if (__comp(*__middle, *__first)) - break; - } - // __first < __middle < __last - // *__first > *__middle - // partition [__first, __m1) [__m1, __middle) [__middle, __m2) [__m2, __last) such that - // all elements in: - // [__first, __m1) <= [__middle, __m2) - // [__middle, __m2) < [__m1, __middle) - // [__m1, __middle) <= [__m2, __last) - // and __m1 or __m2 is in the middle of its range - _BidirectionalIterator __m1; // "median" of [__first, __middle) - _BidirectionalIterator __m2; // "median" of [__middle, __last) - difference_type __len11; // distance(__first, __m1) - difference_type __len21; // distance(__middle, __m2) - // binary search smaller range - if (__len1 < __len2) { // __len >= 1, __len2 >= 2 - __len21 = __len2 / 2; - __m2 = __middle; - _Ops::advance(__m2, __len21); - __m1 = std::__upper_bound<_AlgPolicy>(__first, __middle, *__m2, __comp, std::__identity()); - __len11 = _Ops::distance(__first, __m1); - } else { - if (__len1 == 1) { // __len1 >= __len2 && __len2 > 0, therefore __len2 == 1 - // It is known *__first > *__middle - _Ops::iter_swap(__first, __middle); - return; - } - // __len1 >= 2, __len2 >= 1 - __len11 = __len1 / 2; - __m1 = __first; - _Ops::advance(__m1, __len11); - __m2 = std::lower_bound(__middle, __last, *__m1, __comp); - __len21 = _Ops::distance(__middle, __m2); - } - difference_type __len12 = __len1 - __len11; // distance(__m1, __middle) - difference_type __len22 = __len2 - __len21; // distance(__m2, __last) - // [__first, __m1) [__m1, __middle) [__middle, __m2) [__m2, __last) - // swap middle two partitions - __middle = std::__rotate<_AlgPolicy>(__m1, __middle, __m2).first; - // __len12 and __len21 now have swapped meanings - // merge smaller range with recursive call and larger with tail recursion elimination - if (__len11 + __len21 < __len12 + __len22) { - std::__inplace_merge<_AlgPolicy>(__first, __m1, __middle, __comp, __len11, __len21, __buff, __buff_size); - __first = __middle; - __middle = __m2; - __len1 = __len12; - __len2 = __len22; - } else { - std::__inplace_merge<_AlgPolicy>(__middle, __m2, __last, __comp, __len12, __len22, __buff, __buff_size); - __last = __middle; - __middle = __m1; - __len1 = __len11; - __len2 = __len21; - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __inplace_merge( - _BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last, _Compare&& __comp) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - difference_type __len1 = _IterOps<_AlgPolicy>::distance(__first, __middle); - difference_type __len2 = _IterOps<_AlgPolicy>::distance(__middle, __last); - difference_type __buf_size = std::min(__len1, __len2); - __unique_temporary_buffer __unique_buf = std::__allocate_unique_temporary_buffer(__buf_size); - return std::__inplace_merge<_AlgPolicy>( - std::move(__first), - std::move(__middle), - std::move(__last), - __comp, - __len1, - __len2, - __unique_buf.get(), - __unique_buf.get_deleter().__count_); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void inplace_merge( - _BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last, _Compare __comp) { - std::__inplace_merge<_ClassicAlgPolicy>( - std::move(__first), std::move(__middle), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void -inplace_merge(_BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last) { - std::inplace_merge(std::move(__first), std::move(__middle), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_INPLACE_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/is_heap.h deleted file mode 100644 index dfe0620..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_heap.h +++ /dev/null @@ -1,37 +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___ALGORITHM_IS_HEAP_H -#define _LIBCPP___ALGORITHM_IS_HEAP_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/is_heap_until.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - return std::__is_heap_until(__first, __last, static_cast<__comp_ref_type<_Compare> >(__comp)) == __last; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - return std::is_heap(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_IS_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_heap_until.h b/third_party/libcxx/include/c++/v1/__algorithm/is_heap_until.h deleted file mode 100644 index 7444d97..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_heap_until.h +++ /dev/null @@ -1,62 +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___ALGORITHM_IS_HEAP_UNTIL_H -#define _LIBCPP___ALGORITHM_IS_HEAP_UNTIL_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__config> -#include <__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator -__is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __len = __last - __first; - difference_type __p = 0; - difference_type __c = 1; - _RandomAccessIterator __pp = __first; - while (__c < __len) { - _RandomAccessIterator __cp = __first + __c; - if (__comp(*__pp, *__cp)) - return __cp; - ++__c; - ++__cp; - if (__c == __len) - return __last; - if (__comp(*__pp, *__cp)) - return __cp; - ++__p; - ++__pp; - __c = 2 * __p + 1; - } - return __last; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator -is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - return std::__is_heap_until(__first, __last, static_cast<__comp_ref_type<_Compare> >(__comp)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator -is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) { - return std::__is_heap_until(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_IS_HEAP_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_partitioned.h b/third_party/libcxx/include/c++/v1/__algorithm/is_partitioned.h deleted file mode 100644 index 700e452..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_partitioned.h +++ /dev/null @@ -1,37 +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___ALGORITHM_IS_PARTITIONED_H -#define _LIBCPP___ALGORITHM_IS_PARTITIONED_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_partitioned(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (!__pred(*__first)) - break; - if (__first == __last) - return true; - ++__first; - for (; __first != __last; ++__first) - if (__pred(*__first)) - return false; - return true; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_IS_PARTITIONED_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/is_permutation.h deleted file mode 100644 index 86f469c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_permutation.h +++ /dev/null @@ -1,309 +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___ALGORITHM_IS_PERMUTATION_H -#define _LIBCPP___ALGORITHM_IS_PERMUTATION_H - -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__type_traits/is_same.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 - -template -struct _ConstTimeDistance : false_type {}; - -#if _LIBCPP_STD_VER >= 20 - -template -struct _ConstTimeDistance<_Iter1, - _Sent1, - _Iter2, - _Sent2, - __enable_if_t< sized_sentinel_for<_Sent1, _Iter1> && sized_sentinel_for<_Sent2, _Iter2> >> - : true_type {}; - -#else - -template -struct _ConstTimeDistance< - _Iter1, - _Iter1, - _Iter2, - _Iter2, - __enable_if_t< is_same::iterator_category, random_access_iterator_tag>::value && - is_same::iterator_category, random_access_iterator_tag>::value > > - : true_type {}; - -#endif // _LIBCPP_STD_VER >= 20 - -// Internal functions - -// For each element in [f1, l1) see if there are the same number of equal elements in [f2, l2) -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_permutation_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2) { - using _D1 = __iterator_difference_type<_Iter1>; - - for (auto __i = __first1; __i != __last1; ++__i) { - // Have we already counted the number of *__i in [f1, l1)? - auto __match = __first1; - for (; __match != __i; ++__match) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__match), std::__invoke(__proj1, *__i))) - break; - } - - if (__match == __i) { - // Count number of *__i in [f2, l2) - _D1 __c2 = 0; - for (auto __j = __first2; __j != __last2; ++__j) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__i), std::__invoke(__proj2, *__j))) - ++__c2; - } - if (__c2 == 0) - return false; - - // Count number of *__i in [__i, l1) (we can start with 1) - _D1 __c1 = 1; - for (auto __j = _IterOps<_AlgPolicy>::next(__i); __j != __last1; ++__j) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__i), std::__invoke(__proj1, *__j))) - ++__c1; - } - if (__c1 != __c2) - return false; - } - } - - return true; -} - -// 2+1 iterators, predicate. Not used by range algorithms. -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_permutation( - _ForwardIterator1 __first1, _Sentinel1 __last1, _ForwardIterator2 __first2, _BinaryPredicate&& __pred) { - // Shorten sequences as much as possible by lopping of any equal prefix. - for (; __first1 != __last1; ++__first1, (void)++__first2) { - if (!__pred(*__first1, *__first2)) - break; - } - - if (__first1 == __last1) - return true; - - // __first1 != __last1 && *__first1 != *__first2 - using _D1 = __iterator_difference_type<_ForwardIterator1>; - _D1 __l1 = _IterOps<_AlgPolicy>::distance(__first1, __last1); - if (__l1 == _D1(1)) - return false; - auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __l1); - - return std::__is_permutation_impl<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __identity(), - __identity()); -} - -// 2+2 iterators, predicate, non-constant time `distance`. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2, - /*_ConstTimeDistance=*/false_type) { - // Shorten sequences as much as possible by lopping of any equal prefix. - while (__first1 != __last1 && __first2 != __last2) { - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - ++__first2; - } - - if (__first1 == __last1) - return __first2 == __last2; - if (__first2 == __last2) // Second range is shorter - return false; - - using _D1 = __iterator_difference_type<_Iter1>; - _D1 __l1 = _IterOps<_AlgPolicy>::distance(__first1, __last1); - - using _D2 = __iterator_difference_type<_Iter2>; - _D2 __l2 = _IterOps<_AlgPolicy>::distance(__first2, __last2); - if (__l1 != __l2) - return false; - - return std::__is_permutation_impl<_AlgPolicy>( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); -} - -// 2+2 iterators, predicate, specialization for constant-time `distance` call. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2, - /*_ConstTimeDistance=*/true_type) { - if (std::distance(__first1, __last1) != std::distance(__first2, __last2)) - return false; - return std::__is_permutation<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2, - /*_ConstTimeDistance=*/false_type()); -} - -// 2+2 iterators, predicate -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2) { - return std::__is_permutation<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2, - _ConstTimeDistance<_Iter1, _Sent1, _Iter2, _Sent2>()); -} - -// Public interface - -// 2+1 iterators, predicate -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool is_permutation( - _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _BinaryPredicate __pred) { - static_assert(__is_callable<_BinaryPredicate&, decltype(*__first1), decltype(*__first2)>::value, - "The comparator has to be callable"); - - return std::__is_permutation<_ClassicAlgPolicy>(std::move(__first1), std::move(__last1), std::move(__first2), __pred); -} - -// 2+1 iterators -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { - return std::is_permutation(__first1, __last1, __first2, __equal_to()); -} - -#if _LIBCPP_STD_VER >= 14 - -// 2+2 iterators -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool is_permutation( - _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::__is_permutation<_ClassicAlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __equal_to(), - __identity(), - __identity()); -} - -// 2+2 iterators, predicate -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool is_permutation( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - static_assert(__is_callable<_BinaryPredicate&, decltype(*__first1), decltype(*__first2)>::value, - "The comparator has to be callable"); - - return std::__is_permutation<_ClassicAlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __identity(), - __identity()); -} - -#endif // _LIBCPP_STD_VER >= 14 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_IS_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_sorted.h b/third_party/libcxx/include/c++/v1/__algorithm/is_sorted.h deleted file mode 100644 index 196ae0b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_sorted.h +++ /dev/null @@ -1,37 +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___ALGORITHM_IS_SORTED_H -#define _LIBCPP___ALGORITHM_IS_SORTED_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/is_sorted_until.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_sorted(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - return std::__is_sorted_until<__comp_ref_type<_Compare> >(__first, __last, __comp) == __last; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -is_sorted(_ForwardIterator __first, _ForwardIterator __last) { - return std::is_sorted(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_IS_SORTED_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/is_sorted_until.h b/third_party/libcxx/include/c++/v1/__algorithm/is_sorted_until.h deleted file mode 100644 index 6066419..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/is_sorted_until.h +++ /dev/null @@ -1,50 +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___ALGORITHM_IS_SORTED_UNTIL_H -#define _LIBCPP___ALGORITHM_IS_SORTED_UNTIL_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -__is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (__comp(*__i, *__first)) - return __i; - __first = __i; - } - } - return __last; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - return std::__is_sorted_until<__comp_ref_type<_Compare> >(__first, __last, __comp); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) { - return std::is_sorted_until(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_IS_SORTED_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/iter_swap.h b/third_party/libcxx/include/c++/v1/__algorithm/iter_swap.h deleted file mode 100644 index a1412e5..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/iter_swap.h +++ /dev/null @@ -1,31 +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___ALGORITHM_ITER_SWAP_H -#define _LIBCPP___ALGORITHM_ITER_SWAP_H - -#include <__config> -#include <__utility/declval.h> -#include <__utility/swap.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) - // _NOEXCEPT_(_NOEXCEPT_(swap(*__a, *__b))) - _NOEXCEPT_(_NOEXCEPT_(swap(*std::declval<_ForwardIterator1>(), *std::declval<_ForwardIterator2>()))) { - swap(*__a, *__b); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_ITER_SWAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/iterator_operations.h b/third_party/libcxx/include/c++/v1/__algorithm/iterator_operations.h deleted file mode 100644 index 1aa2f8d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/iterator_operations.h +++ /dev/null @@ -1,229 +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___ALGORITHM_ITERATOR_OPERATIONS_H -#define _LIBCPP___ALGORITHM_ITERATOR_OPERATIONS_H - -#include <__algorithm/iter_swap.h> -#include <__algorithm/ranges_iterator_concept.h> -#include <__assert> -#include <__config> -#include <__iterator/advance.h> -#include <__iterator/distance.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 <__iterator/readable_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_reference.h> -#include <__type_traits/is_same.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/declval.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 - -template -struct _IterOps; - -#if _LIBCPP_STD_VER >= 20 -struct _RangeAlgPolicy {}; - -template <> -struct _IterOps<_RangeAlgPolicy> { - template - using __value_type _LIBCPP_NODEBUG = iter_value_t<_Iter>; - - template - using __iterator_category _LIBCPP_NODEBUG = ranges::__iterator_concept<_Iter>; - - template - using __difference_type _LIBCPP_NODEBUG = iter_difference_t<_Iter>; - - static constexpr auto advance = ranges::advance; - static constexpr auto distance = ranges::distance; - static constexpr auto __iter_move = ranges::iter_move; - static constexpr auto iter_swap = ranges::iter_swap; - static constexpr auto next = ranges::next; - static constexpr auto prev = ranges::prev; - static constexpr auto __advance_to = ranges::advance; -}; - -#endif - -struct _ClassicAlgPolicy {}; - -template <> -struct _IterOps<_ClassicAlgPolicy> { - template - using __value_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::value_type; - - template - using __iterator_category _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::iterator_category; - - template - using __difference_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::difference_type; - - // advance - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static void advance(_Iter& __iter, _Distance __count) { - std::advance(__iter, __count); - } - - // distance - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static typename iterator_traits<_Iter>::difference_type - distance(_Iter __first, _Iter __last) { - return std::distance(__first, __last); - } - - template - using __deref_t _LIBCPP_NODEBUG = decltype(*std::declval<_Iter&>()); - - template - using __move_t _LIBCPP_NODEBUG = decltype(std::move(*std::declval<_Iter&>())); - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static void __validate_iter_reference() { - static_assert( - is_same<__deref_t<_Iter>, typename iterator_traits<__remove_cvref_t<_Iter> >::reference>::value, - "It looks like your iterator's `iterator_traits::reference` does not match the return type of " - "dereferencing the iterator, i.e., calling `*it`. This is undefined behavior according to [input.iterators] " - "and can lead to dangling reference issues at runtime, so we are flagging this."); - } - - // iter_move - template >::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static - // If the result of dereferencing `_Iter` is a reference type, deduce the result of calling `std::move` on it. - // Note that the C++03 mode doesn't support `decltype(auto)` as the return type. - __move_t<_Iter> - __iter_move(_Iter&& __i) { - __validate_iter_reference<_Iter>(); - - return std::move(*std::forward<_Iter>(__i)); - } - - template >::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static - // If the result of dereferencing `_Iter` is a value type, deduce the return value of this function to also be a - // value -- otherwise, after `operator*` returns a temporary, this function would return a dangling reference to - // that temporary. Note that the C++03 mode doesn't support `auto` as the return type. - __deref_t<_Iter> - __iter_move(_Iter&& __i) { - __validate_iter_reference<_Iter>(); - - return *std::forward<_Iter>(__i); - } - - // iter_swap - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static void iter_swap(_Iter1&& __a, _Iter2&& __b) { - std::iter_swap(std::forward<_Iter1>(__a), std::forward<_Iter2>(__b)); - } - - // next - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iterator next(_Iterator, _Iterator __last) { - return __last; - } - - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 __remove_cvref_t<_Iter> - next(_Iter&& __it, typename iterator_traits<__remove_cvref_t<_Iter> >::difference_type __n = 1) { - return std::next(std::forward<_Iter>(__it), __n); - } - - // prev - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 __remove_cvref_t<_Iter> - prev(_Iter&& __iter, typename iterator_traits<__remove_cvref_t<_Iter> >::difference_type __n = 1) { - return std::prev(std::forward<_Iter>(__iter), __n); - } - - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 void __advance_to(_Iter& __first, _Iter __last) { - __first = __last; - } - - // advance with sentinel, a la std::ranges::advance - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static __difference_type<_Iter> - __advance_to(_Iter& __iter, __difference_type<_Iter> __count, const _Iter& __sentinel) { - return _IterOps::__advance_to(__iter, __count, __sentinel, typename iterator_traits<_Iter>::iterator_category()); - } - -private: - // advance with sentinel, a la std::ranges::advance -- InputIterator specialization - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static __difference_type<_InputIter> __advance_to( - _InputIter& __iter, __difference_type<_InputIter> __count, const _InputIter& __sentinel, input_iterator_tag) { - __difference_type<_InputIter> __dist = 0; - for (; __dist < __count && __iter != __sentinel; ++__dist) - ++__iter; - return __count - __dist; - } - - // advance with sentinel, a la std::ranges::advance -- BidirectionalIterator specialization - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static __difference_type<_BiDirIter> - __advance_to(_BiDirIter& __iter, - __difference_type<_BiDirIter> __count, - const _BiDirIter& __sentinel, - bidirectional_iterator_tag) { - __difference_type<_BiDirIter> __dist = 0; - if (__count >= 0) - for (; __dist < __count && __iter != __sentinel; ++__dist) - ++__iter; - else - for (__count = -__count; __dist < __count && __iter != __sentinel; ++__dist) - --__iter; - return __count - __dist; - } - - // advance with sentinel, a la std::ranges::advance -- RandomIterator specialization - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static __difference_type<_RandIter> - __advance_to(_RandIter& __iter, - __difference_type<_RandIter> __count, - const _RandIter& __sentinel, - random_access_iterator_tag) { - auto __dist = _IterOps::distance(__iter, __sentinel); - _LIBCPP_ASSERT_VALID_INPUT_RANGE( - __count == 0 || (__dist < 0) == (__count < 0), "__sentinel must precede __iter when __count < 0"); - if (__count < 0) - __dist = __dist > __count ? __dist : __count; - else - __dist = __dist < __count ? __dist : __count; - __iter += __dist; - return __count - __dist; - } -}; - -template -using __policy_iter_diff_t _LIBCPP_NODEBUG = typename _IterOps<_AlgPolicy>::template __difference_type<_Iter>; - -template -using __policy_value_type _LIBCPP_NODEBUG = typename _IterOps<_AlgPolicy>::template __value_type<_Iter>; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_ITERATOR_OPERATIONS_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare.h b/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare.h deleted file mode 100644 index a12add6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare.h +++ /dev/null @@ -1,129 +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___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H -#define _LIBCPP___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H - -#include <__algorithm/comp.h> -#include <__algorithm/min.h> -#include <__algorithm/mismatch.h> -#include <__algorithm/simd_utils.h> -#include <__algorithm/unwrap_iter.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__string/constexpr_c_functions.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_equality_comparable.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_trivially_lexicographically_comparable.h> -#include <__type_traits/is_volatile.h> - -#if _LIBCPP_HAS_WIDE_CHARACTERS -# include -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __lexicographical_compare( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Comp& __comp, _Proj1& __proj1, _Proj2& __proj2) { - while (__first2 != __last2) { - if (__first1 == __last1 || - std::__invoke(__comp, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - return true; - if (std::__invoke(__comp, std::__invoke(__proj2, *__first2), std::__invoke(__proj1, *__first1))) - return false; - ++__first1; - ++__first2; - } - return false; -} - -#if _LIBCPP_STD_VER >= 14 - -// If the comparison operation is equivalent to < and that is a total order, we know that we can use equality comparison -// on that type instead to extract some information. Furthermore, if equality comparison on that type is trivial, the -// user can't observe that we're calling it. So instead of using the user-provided total order, we use std::mismatch, -// which uses equality comparison (and is vertorized). Additionally, if the type is trivially lexicographically -// comparable, we can go one step further and use std::memcmp directly instead of calling std::mismatch. -template && !is_volatile<_Tp>::value && - __is_trivially_equality_comparable_v<_Tp, _Tp> && __is_identity<_Proj1>::value && - __is_identity<_Proj2>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -__lexicographical_compare(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Tp* __last2, _Comp&, _Proj1&, _Proj2&) { - if constexpr (__is_trivially_lexicographically_comparable_v<_Tp, _Tp>) { - auto __res = - std::__constexpr_memcmp(__first1, __first2, __element_count(std::min(__last1 - __first1, __last2 - __first2))); - if (__res == 0) - return __last1 - __first1 < __last2 - __first2; - return __res < 0; - } -# if _LIBCPP_HAS_WIDE_CHARACTERS - else if constexpr (is_same<__remove_cv_t<_Tp>, wchar_t>::value) { - auto __res = std::__constexpr_wmemcmp(__first1, __first2, std::min(__last1 - __first1, __last2 - __first2)); - if (__res == 0) - return __last1 - __first1 < __last2 - __first2; - return __res < 0; - } -# endif // _LIBCPP_HAS_WIDE_CHARACTERS - else { - auto __res = std::mismatch(__first1, __last1, __first2, __last2); - if (__res.second == __last2) - return false; - if (__res.first == __last1) - return true; - return *__res.first < *__res.second; - } -} - -#endif // _LIBCPP_STD_VER >= 14 - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool lexicographical_compare( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _Compare __comp) { - __identity __proj; - return std::__lexicographical_compare( - std::__unwrap_iter(__first1), - std::__unwrap_iter(__last1), - std::__unwrap_iter(__first2), - std::__unwrap_iter(__last2), - __comp, - __proj, - __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool lexicographical_compare( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::lexicographical_compare(__first1, __last1, __first2, __last2, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare_three_way.h b/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare_three_way.h deleted file mode 100644 index 442223e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/lexicographical_compare_three_way.h +++ /dev/null @@ -1,125 +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___ALGORITHM_LEXICOGRAPHICAL_COMPARE_THREE_WAY_H -#define _LIBCPP___ALGORITHM_LEXICOGRAPHICAL_COMPARE_THREE_WAY_H - -#include <__algorithm/min.h> -#include <__algorithm/three_way_comp_ref_type.h> -#include <__compare/compare_three_way.h> -#include <__compare/ordering.h> -#include <__concepts/arithmetic.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/common_type.h> -#include <__type_traits/is_constructible.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 - -// Fast path for random access iterators which computes the number of loop iterations up-front and -// then skips the iterator comparisons inside the loop. -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __lexicographical_compare_three_way_fast_path( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _Cmp& __comp) - -> decltype(__comp(*__first1, *__first2)) { - static_assert(signed_integral<__iterator_difference_type<_InputIterator1>>, - "Using a non-integral difference_type is undefined behavior."); - static_assert(signed_integral<__iterator_difference_type<_InputIterator2>>, - "Using a non-integral difference_type is undefined behavior."); - - using _Len1 = __iterator_difference_type<_InputIterator1>; - using _Len2 = __iterator_difference_type<_InputIterator2>; - using _Common = common_type_t<_Len1, _Len2>; - - _Len1 __len1 = __last1 - __first1; - _Len2 __len2 = __last2 - __first2; - _Common __min_len = std::min<_Common>(__len1, __len2); - - for (_Common __i = 0; __i < __min_len; ++__i) { - auto __c = __comp(*__first1, *__first2); - if (__c != 0) { - return __c; - } - ++__first1; - ++__first2; - } - - return __len1 <=> __len2; -} - -// Unoptimized implementation which compares the iterators against the end in every loop iteration -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __lexicographical_compare_three_way_slow_path( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _Cmp& __comp) - -> decltype(__comp(*__first1, *__first2)) { - while (true) { - bool __exhausted1 = __first1 == __last1; - bool __exhausted2 = __first2 == __last2; - - if (__exhausted1 || __exhausted2) { - if (!__exhausted1) - return strong_ordering::greater; - if (!__exhausted2) - return strong_ordering::less; - return strong_ordering::equal; - } - - auto __c = __comp(*__first1, *__first2); - if (__c != 0) { - return __c; - } - - ++__first1; - ++__first2; - } -} - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto lexicographical_compare_three_way( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, _Cmp __comp) - -> decltype(__comp(*__first1, *__first2)) { - static_assert(__comparison_category, - "The comparator passed to lexicographical_compare_three_way must return a comparison category type."); - static_assert(std::is_copy_constructible_v<_InputIterator1>, "Iterators must be copy constructible."); - static_assert(std::is_copy_constructible_v<_InputIterator2>, "Iterators must be copy constructible."); - __three_way_comp_ref_type<_Cmp> __wrapped_comp_ref(__comp); - if constexpr (__has_random_access_iterator_category<_InputIterator1>::value && - __has_random_access_iterator_category<_InputIterator2>::value) { - return std::__lexicographical_compare_three_way_fast_path( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __wrapped_comp_ref); - } else { - // Unoptimized implementation which compares the iterators against the end in every loop iteration - return std::__lexicographical_compare_three_way_slow_path( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __wrapped_comp_ref); - } -} - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto lexicographical_compare_three_way( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::lexicographical_compare_three_way( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), std::compare_three_way()); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_LEXICOGRAPHICAL_COMPARE_THREE_WAY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/lower_bound.h b/third_party/libcxx/include/c++/v1/__algorithm/lower_bound.h deleted file mode 100644 index 4fba674..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/lower_bound.h +++ /dev/null @@ -1,108 +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___ALGORITHM_LOWER_BOUND_H -#define _LIBCPP___ALGORITHM_LOWER_BOUND_H - -#include <__algorithm/comp.h> -#include <__algorithm/half_positive.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/advance.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter __lower_bound_bisecting( - _Iter __first, - const _Type& __value, - typename iterator_traits<_Iter>::difference_type __len, - _Comp& __comp, - _Proj& __proj) { - while (__len != 0) { - auto __l2 = std::__half_positive(__len); - _Iter __m = __first; - _IterOps<_AlgPolicy>::advance(__m, __l2); - if (std::__invoke(__comp, std::__invoke(__proj, *__m), __value)) { - __first = ++__m; - __len -= __l2 + 1; - } else { - __len = __l2; - } - } - return __first; -} - -// One-sided binary search, aka meta binary search, has been in the public domain for decades, and has the general -// advantage of being \Omega(1) rather than the classic algorithm's \Omega(log(n)), with the downside of executing at -// most 2*log(n) comparisons vs the classic algorithm's exact log(n). There are two scenarios in which it really shines: -// the first one is when operating over non-random-access iterators, because the classic algorithm requires knowing the -// container's size upfront, which adds \Omega(n) iterator increments to the complexity. The second one is when you're -// traversing the container in order, trying to fast-forward to the next value: in that case, the classic algorithm -// would yield \Omega(n*log(n)) comparisons and, for non-random-access iterators, \Omega(n^2) iterator increments, -// whereas the one-sided version will yield O(n) operations on both counts, with a \Omega(log(n)) bound on the number of -// comparisons. -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -__lower_bound_onesided(_ForwardIterator __first, _Sent __last, const _Type& __value, _Comp& __comp, _Proj& __proj) { - // step = 0, ensuring we can always short-circuit when distance is 1 later on - if (__first == __last || !std::__invoke(__comp, std::__invoke(__proj, *__first), __value)) - return __first; - - using _Distance = typename iterator_traits<_ForwardIterator>::difference_type; - for (_Distance __step = 1; __first != __last; __step <<= 1) { - auto __it = __first; - auto __dist = __step - _IterOps<_AlgPolicy>::__advance_to(__it, __step, __last); - // once we reach the last range where needle can be we must start - // looking inwards, bisecting that range - if (__it == __last || !std::__invoke(__comp, std::__invoke(__proj, *__it), __value)) { - // we've already checked the previous value and it was less, we can save - // one comparison by skipping bisection - if (__dist == 1) - return __it; - return std::__lower_bound_bisecting<_AlgPolicy>(__first, __value, __dist, __comp, __proj); - } - // range not found, move forward! - __first = __it; - } - return __first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -__lower_bound(_ForwardIterator __first, _Sent __last, const _Type& __value, _Comp& __comp, _Proj& __proj) { - const auto __dist = _IterOps<_AlgPolicy>::distance(__first, __last); - return std::__lower_bound_bisecting<_AlgPolicy>(__first, __value, __dist, __comp, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(__is_callable<_Compare&, decltype(*__first), const _Tp&>::value, "The comparator has to be callable"); - auto __proj = std::__identity(); - return std::__lower_bound<_ClassicAlgPolicy>(__first, __last, __value, __comp, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::lower_bound(__first, __last, __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_LOWER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/make_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/make_heap.h deleted file mode 100644 index f98a0d2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/make_heap.h +++ /dev/null @@ -1,72 +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___ALGORITHM_MAKE_HEAP_H -#define _LIBCPP___ALGORITHM_MAKE_HEAP_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/push_heap.h> -#include <__algorithm/sift_down.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_arithmetic.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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - __comp_ref_type<_Compare> __comp_ref = __comp; - - using __diff_t = __iterator_difference_type<_RandomAccessIterator>; - const __diff_t __n = __last - __first; - - const bool __assume_both_children = is_arithmetic<__iterator_value_type<_RandomAccessIterator> >::value; - - // While it would be correct to always assume we have both children, in practice we observed this to be a performance - // improvement only for arithmetic types. - const __diff_t __sift_down_n = __assume_both_children ? ((__n & 1) ? __n : __n - 1) : __n; - - if (__n > 1) { - // start from the first parent, there is no need to consider children - - for (__diff_t __start = (__sift_down_n - 2) / 2; __start >= 0; --__start) { - std::__sift_down<_AlgPolicy, __assume_both_children>(__first, __comp_ref, __sift_down_n, __start); - } - if _LIBCPP_CONSTEXPR (__assume_both_children) - std::__sift_up<_AlgPolicy>(__first, __last, __comp, __n); - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - std::__make_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::make_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MAKE_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/make_projected.h b/third_party/libcxx/include/c++/v1/__algorithm/make_projected.h deleted file mode 100644 index 4a25822..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/make_projected.h +++ /dev/null @@ -1,104 +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___ALGORITHM_MAKE_PROJECTED_H -#define _LIBCPP___ALGORITHM_MAKE_PROJECTED_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__type_traits/decay.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_member_pointer.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 - -template -struct _ProjectedPred { - _Pred& __pred; // Can be a unary or a binary predicate. - _Proj& __proj; - - _LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI _ProjectedPred(_Pred& __pred_arg, _Proj& __proj_arg) - : __pred(__pred_arg), __proj(__proj_arg) {} - - template - __invoke_result_t<_Pred&, decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_Tp>()))> _LIBCPP_CONSTEXPR - _LIBCPP_HIDE_FROM_ABI - operator()(_Tp&& __v) const { - return std::__invoke(__pred, std::__invoke(__proj, std::forward<_Tp>(__v))); - } - - template - __invoke_result_t<_Pred&, - decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_T1>())), - decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_T2>()))> _LIBCPP_CONSTEXPR - _LIBCPP_HIDE_FROM_ABI - operator()(_T1&& __lhs, _T2&& __rhs) const { - return std::__invoke( - __pred, std::__invoke(__proj, std::forward<_T1>(__lhs)), std::__invoke(__proj, std::forward<_T2>(__rhs))); - } -}; - -template < - class _Pred, - class _Proj, - __enable_if_t >::value && __is_identity<__decay_t<_Proj> >::value), int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ProjectedPred<_Pred, _Proj> __make_projected(_Pred& __pred, _Proj& __proj) { - return _ProjectedPred<_Pred, _Proj>(__pred, __proj); -} - -// Avoid creating the functor and just use the pristine comparator -- for certain algorithms, this would enable -// optimizations that rely on the type of the comparator. Additionally, this results in less layers of indirection in -// the call stack when the comparator is invoked, even in an unoptimized build. -template < - class _Pred, - class _Proj, - __enable_if_t >::value && __is_identity<__decay_t<_Proj> >::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Pred& __make_projected(_Pred& __pred, _Proj&) { - return __pred; -} - -_LIBCPP_END_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -_LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) __make_projected_comp(_Comp& __comp, _Proj1& __proj1, _Proj2& __proj2) { - if constexpr (__is_identity>::value && __is_identity>::value && - !is_member_pointer_v>) { - // Avoid creating the lambda and just use the pristine comparator -- for certain algorithms, this would enable - // optimizations that rely on the type of the comparator. - return __comp; - - } else { - return [&](auto&& __lhs, auto&& __rhs) -> bool { - return std::invoke(__comp, - std::invoke(__proj1, std::forward(__lhs)), - std::invoke(__proj2, std::forward(__rhs))); - }; - } -} - -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_MAKE_PROJECTED_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/max.h b/third_party/libcxx/include/c++/v1/__algorithm/max.h deleted file mode 100644 index 1673e6b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/max.h +++ /dev/null @@ -1,58 +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___ALGORITHM_MAX_H -#define _LIBCPP___ALGORITHM_MAX_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/max_element.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Tp& -max(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__a, __b) ? __b : __a; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Tp& -max(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::max(__a, __b, __less<>()); -} - -#ifndef _LIBCPP_CXX03_LANG - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp -max(initializer_list<_Tp> __t, _Compare __comp) { - return *std::__max_element<__comp_ref_type<_Compare> >(__t.begin(), __t.end(), __comp); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp max(initializer_list<_Tp> __t) { - return *std::max_element(__t.begin(), __t.end(), __less<>()); -} - -#endif // _LIBCPP_CXX03_LANG - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MAX_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/max_element.h b/third_party/libcxx/include/c++/v1/__algorithm/max_element.h deleted file mode 100644 index 929f337..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/max_element.h +++ /dev/null @@ -1,54 +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___ALGORITHM_MAX_ELEMENT_H -#define _LIBCPP___ALGORITHM_MAX_ELEMENT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_callable.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -__max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::max_element requires a ForwardIterator"); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) - if (__comp(*__first, *__i)) - __first = __i; - } - return __first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __is_callable<_Compare&, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); - return std::__max_element<__comp_ref_type<_Compare> >(__first, __last, __comp); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -max_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::max_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_MAX_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/merge.h b/third_party/libcxx/include/c++/v1/__algorithm/merge.h deleted file mode 100644 index ae859b7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/merge.h +++ /dev/null @@ -1,68 +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___ALGORITHM_MERGE_H -#define _LIBCPP___ALGORITHM_MERGE_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/copy.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator __merge( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) - return std::copy(__first1, __last1, __result); - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } else { - *__result = *__first1; - ++__first1; - } - } - return std::copy(__first2, __last2, __result); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -merge(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__merge<__comp_ref_type<_Compare> >(__first1, __last1, __first2, __last2, __result, __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -merge(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::merge(__first1, __last1, __first2, __last2, __result, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/min.h b/third_party/libcxx/include/c++/v1/__algorithm/min.h deleted file mode 100644 index 660e0b2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/min.h +++ /dev/null @@ -1,58 +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___ALGORITHM_MIN_H -#define _LIBCPP___ALGORITHM_MIN_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/min_element.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Tp& -min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__b, __a) ? __b : __a; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Tp& -min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::min(__a, __b, __less<>()); -} - -#ifndef _LIBCPP_CXX03_LANG - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp -min(initializer_list<_Tp> __t, _Compare __comp) { - return *std::__min_element<__comp_ref_type<_Compare> >(__t.begin(), __t.end(), __comp); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp min(initializer_list<_Tp> __t) { - return *std::min_element(__t.begin(), __t.end(), __less<>()); -} - -#endif // _LIBCPP_CXX03_LANG - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MIN_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/min_element.h b/third_party/libcxx/include/c++/v1/__algorithm/min_element.h deleted file mode 100644 index fdab63a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/min_element.h +++ /dev/null @@ -1,71 +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___ALGORITHM_MIN_ELEMENT_H -#define _LIBCPP___ALGORITHM_MIN_ELEMENT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iter -__min_element(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - if (__first == __last) - return __first; - - _Iter __i = __first; - while (++__i != __last) - if (std::__invoke(__comp, std::__invoke(__proj, *__i), std::__invoke(__proj, *__first))) - __first = __i; - - return __first; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Iter __min_element(_Iter __first, _Sent __last, _Comp __comp) { - auto __proj = __identity(); - return std::__min_element<_Comp>(std::move(__first), std::move(__last), __comp, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -min_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::min_element requires a ForwardIterator"); - static_assert( - __is_callable<_Compare&, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); - - return std::__min_element<__comp_ref_type<_Compare> >(std::move(__first), std::move(__last), __comp); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -min_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::min_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MIN_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/min_max_result.h b/third_party/libcxx/include/c++/v1/__algorithm/min_max_result.h deleted file mode 100644 index e988df7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/min_max_result.h +++ /dev/null @@ -1,56 +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___ALGORITHM_MIN_MAX_RESULT_H -#define _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct min_max_result { - _LIBCPP_NO_UNIQUE_ADDRESS _T1 min; - _LIBCPP_NO_UNIQUE_ADDRESS _T1 max; - - template - requires convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator min_max_result<_T2>() const& { - return {min, max}; - } - - template - requires convertible_to<_T1, _T2> - _LIBCPP_HIDE_FROM_ABI constexpr operator min_max_result<_T2>() && { - return {std::move(min), std::move(max)}; - } -}; - -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MIN_MAX_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/minmax.h b/third_party/libcxx/include/c++/v1/__algorithm/minmax.h deleted file mode 100644 index de0bec0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/minmax.h +++ /dev/null @@ -1,59 +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___ALGORITHM_MINMAX_H -#define _LIBCPP___ALGORITHM_MINMAX_H - -#include <__algorithm/comp.h> -#include <__algorithm/minmax_element.h> -#include <__config> -#include <__functional/identity.h> -#include <__type_traits/is_callable.h> -#include <__utility/pair.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair -minmax(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__b, __a) ? pair(__b, __a) : pair(__a, __b); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair -minmax(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::minmax(__a, __b, __less<>()); -} - -#ifndef _LIBCPP_CXX03_LANG - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Tp, _Tp> -minmax(initializer_list<_Tp> __t, _Compare __comp) { - static_assert(__is_callable<_Compare&, _Tp, _Tp>::value, "The comparator has to be callable"); - __identity __proj; - auto __ret = std::__minmax_element_impl(__t.begin(), __t.end(), __comp, __proj); - return pair<_Tp, _Tp>(*__ret.first, *__ret.second); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Tp, _Tp> -minmax(initializer_list<_Tp> __t) { - return std::minmax(__t, __less<>()); -} - -#endif // _LIBCPP_CXX03_LANG - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_MINMAX_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/minmax_element.h b/third_party/libcxx/include/c++/v1/__algorithm/minmax_element.h deleted file mode 100644 index dc0c3a8..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/minmax_element.h +++ /dev/null @@ -1,100 +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___ALGORITHM_MINMAX_ELEMENT_H -#define _LIBCPP___ALGORITHM_MINMAX_ELEMENT_H - -#include <__algorithm/comp.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _MinmaxElementLessFunc { - _Comp& __comp_; - _Proj& __proj_; - -public: - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _MinmaxElementLessFunc(_Comp& __comp, _Proj& __proj) - : __comp_(__comp), __proj_(__proj) {} - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool operator()(_Iter& __it1, _Iter& __it2) { - return std::__invoke(__comp_, std::__invoke(__proj_, *__it1), std::__invoke(__proj_, *__it2)); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter, _Iter> -__minmax_element_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __less = _MinmaxElementLessFunc<_Comp, _Proj>(__comp, __proj); - - pair<_Iter, _Iter> __result(__first, __first); - if (__first == __last || ++__first == __last) - return __result; - - if (__less(__first, __result.first)) - __result.first = __first; - else - __result.second = __first; - - while (++__first != __last) { - _Iter __i = __first; - if (++__first == __last) { - if (__less(__i, __result.first)) - __result.first = __i; - else if (!__less(__i, __result.second)) - __result.second = __i; - return __result; - } - - if (__less(__first, __i)) { - if (__less(__first, __result.first)) - __result.first = __first; - if (!__less(__i, __result.second)) - __result.second = __i; - } else { - if (__less(__i, __result.first)) - __result.first = __i; - if (!__less(__first, __result.second)) - __result.second = __first; - } - } - - return __result; -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_ForwardIterator, _ForwardIterator> -minmax_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::minmax_element requires a ForwardIterator"); - static_assert( - __is_callable<_Compare&, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); - auto __proj = __identity(); - return std::__minmax_element_impl(__first, __last, __comp, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_ForwardIterator, _ForwardIterator> -minmax_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::minmax_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_MINMAX_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/mismatch.h b/third_party/libcxx/include/c++/v1/__algorithm/mismatch.h deleted file mode 100644 index 7111cd9..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/mismatch.h +++ /dev/null @@ -1,218 +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___ALGORITHM_MISMATCH_H -#define _LIBCPP___ALGORITHM_MISMATCH_H - -#include <__algorithm/comp.h> -#include <__algorithm/min.h> -#include <__algorithm/simd_utils.h> -#include <__algorithm/unwrap_iter.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/identity.h> -#include <__iterator/aliasing_iterator.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_equality_comparable.h> -#include <__type_traits/is_integral.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> -__mismatch_loop(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - while (__first1 != __last1) { - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - ++__first2; - } - return std::make_pair(std::move(__first1), std::move(__first2)); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> -__mismatch(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2); -} - -#if _LIBCPP_VECTORIZE_ALGORITHMS - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter, _Iter> -__mismatch_vectorized(_Iter __first1, _Iter __last1, _Iter __first2) { - using __value_type = __iterator_value_type<_Iter>; - constexpr size_t __unroll_count = 4; - constexpr size_t __vec_size = __native_vector_size<__value_type>; - using __vec = __simd_vector<__value_type, __vec_size>; - - if (!__libcpp_is_constant_evaluated()) { - auto __orig_first1 = __first1; - auto __last2 = __first2 + (__last1 - __first1); - while (static_cast(__last1 - __first1) >= __unroll_count * __vec_size) [[__unlikely__]] { - __vec __lhs[__unroll_count]; - __vec __rhs[__unroll_count]; - - for (size_t __i = 0; __i != __unroll_count; ++__i) { - __lhs[__i] = std::__load_vector<__vec>(__first1 + __i * __vec_size); - __rhs[__i] = std::__load_vector<__vec>(__first2 + __i * __vec_size); - } - - for (size_t __i = 0; __i != __unroll_count; ++__i) { - if (auto __cmp_res = __lhs[__i] == __rhs[__i]; !std::__all_of(__cmp_res)) { - auto __offset = __i * __vec_size + std::__find_first_not_set(__cmp_res); - return {__first1 + __offset, __first2 + __offset}; - } - } - - __first1 += __unroll_count * __vec_size; - __first2 += __unroll_count * __vec_size; - } - - // check the remaining 0-3 vectors - while (static_cast(__last1 - __first1) >= __vec_size) { - if (auto __cmp_res = std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2); - !std::__all_of(__cmp_res)) { - auto __offset = std::__find_first_not_set(__cmp_res); - return {__first1 + __offset, __first2 + __offset}; - } - __first1 += __vec_size; - __first2 += __vec_size; - } - - if (__last1 - __first1 == 0) - return {__first1, __first2}; - - // Check if we can load elements in front of the current pointer. If that's the case load a vector at - // (last - vector_size) to check the remaining elements - if (static_cast(__first1 - __orig_first1) >= __vec_size) { - __first1 = __last1 - __vec_size; - __first2 = __last2 - __vec_size; - auto __offset = - std::__find_first_not_set(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2)); - return {__first1 + __offset, __first2 + __offset}; - } // else loop over the elements individually - } - - __equal_to __pred; - __identity __proj; - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj, __proj); -} - -template ::value && __desugars_to_v<__equal_tag, _Pred, _Tp, _Tp> && - __is_identity<_Proj1>::value && __is_identity<_Proj2>::value, - int> = 0> -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Tp*, _Tp*> -__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Pred&, _Proj1&, _Proj2&) { - return std::__mismatch_vectorized(__first1, __last1, __first2); -} - -template ::value && __desugars_to_v<__equal_tag, _Pred, _Tp, _Tp> && - __is_identity<_Proj1>::value && __is_identity<_Proj2>::value && - __can_map_to_integer_v<_Tp> && __is_trivially_equality_comparable_v<_Tp, _Tp>, - int> = 0> -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Tp*, _Tp*> -__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - if (__libcpp_is_constant_evaluated()) { - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2); - } else { - using _Iter = __aliasing_iterator<_Tp*, __get_as_integer_type_t<_Tp>>; - auto __ret = std::__mismatch_vectorized(_Iter(__first1), _Iter(__last1), _Iter(__first2)); - return {__ret.first.__base(), __ret.second.__base()}; - } -} -#endif // _LIBCPP_VECTORIZE_ALGORITHMS - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) { - __identity __proj; - auto __res = std::__mismatch( - std::__unwrap_iter(__first1), std::__unwrap_iter(__last1), std::__unwrap_iter(__first2), __pred, __proj, __proj); - return std::make_pair(std::__rewrap_iter(__first1, __res.first), std::__rewrap_iter(__first2, __res.second)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) { - return std::mismatch(__first1, __last1, __first2, __equal_to()); -} - -#if _LIBCPP_STD_VER >= 14 -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> __mismatch( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - while (__first1 != __last1 && __first2 != __last2) { - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - ++__first2; - } - return {std::move(__first1), std::move(__first2)}; -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Tp*, _Tp*> -__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Tp* __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - auto __len = std::min(__last1 - __first1, __last2 - __first2); - return std::__mismatch(__first1, __first1 + __len, __first2, __pred, __proj1, __proj2); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _BinaryPredicate __pred) { - __identity __proj; - auto __res = std::__mismatch( - std::__unwrap_iter(__first1), - std::__unwrap_iter(__last1), - std::__unwrap_iter(__first2), - std::__unwrap_iter(__last2), - __pred, - __proj, - __proj); - return {std::__rewrap_iter(__first1, __res.first), std::__rewrap_iter(__first2, __res.second)}; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::mismatch(__first1, __last1, __first2, __last2, __equal_to()); -} -#endif - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MISMATCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/move.h b/third_party/libcxx/include/c++/v1/__algorithm/move.h deleted file mode 100644 index ddadfa7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/move.h +++ /dev/null @@ -1,128 +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___ALGORITHM_MOVE_H -#define _LIBCPP___ALGORITHM_MOVE_H - -#include <__algorithm/copy.h> -#include <__algorithm/copy_move_common.h> -#include <__algorithm/for_each_segment.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__config> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constructible.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> -__move(_InIter __first, _Sent __last, _OutIter __result); - -template -struct __move_impl { - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - while (__first != __last) { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first); - ++__first; - ++__result; - } - return std::make_pair(std::move(__first), std::move(__result)); - } - - template , int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using __local_iterator = typename __segmented_iterator_traits<_InIter>::__local_iterator; - std::__for_each_segment(__first, __last, [&__result](__local_iterator __lfirst, __local_iterator __llast) { - __result = std::__move<_AlgPolicy>(__lfirst, __llast, std::move(__result)).second; - }); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator_v<_InIter> && __is_segmented_iterator_v<_OutIter>, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = - typename common_type<__iterator_difference_type<_InIter>, __iterator_difference_type<_OutIter> >::type; - - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__result)); - - auto __local_first = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_last = _Traits::__end(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iters = std::__move<_AlgPolicy>(__first, __first + __size, __local_first); - __first = std::move(__iters.first); - - if (__first == __last) - return std::make_pair(std::move(__first), _Traits::__compose(__segment_iterator, std::move(__iters.second))); - - __local_first = _Traits::__begin(++__segment_iterator); - } - } - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__bit_iterator<_Cp, _IsConst>, __bit_iterator<_Cp, false> > - operator()(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - return std::__copy(__first, __last, __result); - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> - operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_trivial_impl(__first, __last, __result); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> -__move(_InIter __first, _Sent __last, _OutIter __result) { - return std::__copy_move_unwrap_iters<__move_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -move(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - static_assert(is_copy_constructible<_InputIterator>::value, "Iterators has to be copy constructible."); - static_assert(is_copy_constructible<_OutputIterator>::value, "The output iterator has to be copy constructible."); - - return std::__move<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MOVE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/move_backward.h b/third_party/libcxx/include/c++/v1/__algorithm/move_backward.h deleted file mode 100644 index 43b7205..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/move_backward.h +++ /dev/null @@ -1,134 +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___ALGORITHM_MOVE_BACKWARD_H -#define _LIBCPP___ALGORITHM_MOVE_BACKWARD_H - -#include <__algorithm/copy_backward.h> -#include <__algorithm/copy_move_common.h> -#include <__algorithm/for_each_segment.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__config> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/segmented_iterator.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constructible.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator1, _BidirectionalIterator2> -__move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result); - -template -struct __move_backward_impl { - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - auto __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - auto __original_last_iter = __last_iter; - - while (__first != __last_iter) { - *--__result = _IterOps<_AlgPolicy>::__iter_move(--__last_iter); - } - - return std::make_pair(std::move(__original_last_iter), std::move(__result)); - } - - template , int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using __local_iterator = typename __segmented_iterator_traits<_InIter>::__local_iterator; - std::__for_each_segment_backward(__first, __last, [&__result](__local_iterator __lfirst, __local_iterator __llast) { - __result = std::__move_backward<_AlgPolicy>(std::move(__lfirst), std::move(__llast), std::move(__result)).second; - }); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator_v<_InIter> && __is_segmented_iterator_v<_OutIter>, - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> - operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = - typename common_type<__iterator_difference_type<_InIter>, __iterator_difference_type<_OutIter> >::type; - - // When the range contains no elements, __result might not be a valid iterator - if (__first == __last) - return std::make_pair(__first, __result); - - auto __orig_last = __last; - - auto __local_last = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_first = _Traits::__begin(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iter = std::__move_backward<_AlgPolicy>(__last - __size, __last, __local_last).second; - __last -= __size; - - if (__first == __last) - return std::make_pair(std::move(__orig_last), _Traits::__compose(__segment_iterator, std::move(__iter))); - - __local_last = _Traits::__end(--__segment_iterator); - } - } - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__bit_iterator<_Cp, _IsConst>, __bit_iterator<_Cp, false> > - operator()(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - return std::__copy_backward<_ClassicAlgPolicy>(__first, __last, __result); - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*> - operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_backward_trivial_impl(__first, __last, __result); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator1, _BidirectionalIterator2> -__move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result) { - static_assert(std::is_copy_constructible<_BidirectionalIterator1>::value && - std::is_copy_constructible<_BidirectionalIterator1>::value, - "Iterators must be copy constructible."); - - return std::__copy_move_unwrap_iters<__move_backward_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _BidirectionalIterator2 -move_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) { - return std::__move_backward<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_MOVE_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/next_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/next_permutation.h deleted file mode 100644 index 011ee02..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/next_permutation.h +++ /dev/null @@ -1,75 +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___ALGORITHM_NEXT_PERMUTATION_H -#define _LIBCPP___ALGORITHM_NEXT_PERMUTATION_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/reverse.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator, bool> -__next_permutation(_BidirectionalIterator __first, _Sentinel __last, _Compare&& __comp) { - using _Result = pair<_BidirectionalIterator, bool>; - - _BidirectionalIterator __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - _BidirectionalIterator __i = __last_iter; - if (__first == __last || __first == --__i) - return _Result(std::move(__last_iter), false); - - while (true) { - _BidirectionalIterator __ip1 = __i; - if (__comp(*--__i, *__ip1)) { - _BidirectionalIterator __j = __last_iter; - while (!__comp(*__i, *--__j)) - ; - _IterOps<_AlgPolicy>::iter_swap(__i, __j); - std::__reverse<_AlgPolicy>(__ip1, __last_iter); - return _Result(std::move(__last_iter), true); - } - if (__i == __first) { - std::__reverse<_AlgPolicy>(__first, __last_iter); - return _Result(std::move(__last_iter), false); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - return std::__next_permutation<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) { - return std::next_permutation(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_NEXT_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/none_of.h b/third_party/libcxx/include/c++/v1/__algorithm/none_of.h deleted file mode 100644 index 1e1c8d1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/none_of.h +++ /dev/null @@ -1,32 +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___ALGORITHM_NONE_OF_H -#define _LIBCPP___ALGORITHM_NONE_OF_H - -#include <__algorithm/any_of.h> -#include <__config> -#include <__functional/identity.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - __identity __proj; - return !std::__any_of(__first, __last, __pred, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_NONE_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/nth_element.h b/third_party/libcxx/include/c++/v1/__algorithm/nth_element.h deleted file mode 100644 index da748d7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/nth_element.h +++ /dev/null @@ -1,261 +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___ALGORITHM_NTH_ELEMENT_H -#define _LIBCPP___ALGORITHM_NTH_ELEMENT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/sort.h> -#include <__assert> -#include <__config> -#include <__debug_utils/randomize_range.h> -#include <__iterator/iterator_traits.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool __nth_element_find_guard( - _RandomAccessIterator& __i, _RandomAccessIterator& __j, _RandomAccessIterator __m, _Compare __comp) { - // manually guard downward moving __j against __i - while (true) { - if (__i == --__j) { - return false; - } - if (__comp(*__j, *__m)) { - return true; // found guard for downward moving __j, now use unguarded partition - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -// NOLINTNEXTLINE(readability-function-cognitive-complexity) -__nth_element( - _RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - // _Compare is known to be a reference type - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - const difference_type __limit = 7; - while (true) { - if (__nth == __last) - return; - difference_type __len = __last - __first; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return; - case 3: { - _RandomAccessIterator __m = __first; - std::__sort3<_AlgPolicy, _Compare>(__first, ++__m, --__last, __comp); - return; - } - } - if (__len <= __limit) { - std::__selection_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - return; - } - // __len > __limit >= 3 - _RandomAccessIterator __m = __first + __len / 2; - _RandomAccessIterator __lm1 = __last; - unsigned __n_swaps = std::__sort3<_AlgPolicy, _Compare>(__first, __m, --__lm1, __comp); - // *__m is median - // partition [__first, __m) < *__m and *__m <= [__m, __last) - // (this inhibits tossing elements equivalent to __m around unnecessarily) - _RandomAccessIterator __i = __first; - _RandomAccessIterator __j = __lm1; - // j points beyond range to be tested, *__lm1 is known to be <= *__m - // The search going up is known to be guarded but the search coming down isn't. - // Prime the downward search with a guard. - if (!__comp(*__i, *__m)) // if *__first == *__m - { - // *__first == *__m, *__first doesn't go in first part - if (std::__nth_element_find_guard<_Compare>(__i, __j, __m, __comp)) { - _Ops::iter_swap(__i, __j); - ++__n_swaps; - } else { - // *__first == *__m, *__m <= all other elements - // Partition instead into [__first, __i) == *__first and *__first < [__i, __last) - ++__i; // __first + 1 - __j = __last; - if (!__comp(*__first, *--__j)) { // we need a guard if *__first == *(__last-1) - while (true) { - if (__i == __j) { - return; // [__first, __last) all equivalent elements - } else if (__comp(*__first, *__i)) { - _Ops::iter_swap(__i, __j); - ++__n_swaps; - ++__i; - break; - } - ++__i; - } - } - // [__first, __i) == *__first and *__first < [__j, __last) and __j == __last - 1 - if (__i == __j) { - return; - } - while (true) { - while (!__comp(*__first, *__i)) { - ++__i; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __i != __last, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __j != __first, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__j; - } while (__comp(*__first, *__j)); - if (__i >= __j) - break; - _Ops::iter_swap(__i, __j); - ++__n_swaps; - ++__i; - } - // [__first, __i) == *__first and *__first < [__i, __last) - // The first part is sorted, - if (__nth < __i) { - return; - } - // __nth_element the second part - // std::__nth_element<_Compare>(__i, __nth, __last, __comp); - __first = __i; - continue; - } - } - ++__i; - // j points beyond range to be tested, *__lm1 is known to be <= *__m - // if not yet partitioned... - if (__i < __j) { - // known that *(__i - 1) < *__m - while (true) { - // __m still guards upward moving __i - while (__comp(*__i, *__m)) { - ++__i; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __i != __last, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } - // It is now known that a guard exists for downward moving __j - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __j != __first, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__j; - } while (!__comp(*__j, *__m)); - if (__i >= __j) - break; - _Ops::iter_swap(__i, __j); - ++__n_swaps; - // It is known that __m != __j - // If __m just moved, follow it - if (__m == __i) - __m = __j; - ++__i; - } - } - // [__first, __i) < *__m and *__m <= [__i, __last) - if (__i != __m && __comp(*__m, *__i)) { - _Ops::iter_swap(__i, __m); - ++__n_swaps; - } - // [__first, __i) < *__i and *__i <= [__i+1, __last) - if (__nth == __i) - return; - if (__n_swaps == 0) { - // We were given a perfectly partitioned sequence. Coincidence? - if (__nth < __i) { - // Check for [__first, __i) already sorted - __j = __m = __first; - while (true) { - if (++__j == __i) { - // [__first, __i) sorted - return; - } - if (__comp(*__j, *__m)) { - // not yet sorted, so sort - break; - } - __m = __j; - } - } else { - // Check for [__i, __last) already sorted - __j = __m = __i; - while (true) { - if (++__j == __last) { - // [__i, __last) sorted - return; - } - if (__comp(*__j, *__m)) { - // not yet sorted, so sort - break; - } - __m = __j; - } - } - } - // __nth_element on range containing __nth - if (__nth < __i) { - // std::__nth_element<_Compare>(__first, __nth, __i, __comp); - __last = __i; - } else { - // std::__nth_element<_Compare>(__i+1, __nth, __last, __comp); - __first = ++__i; - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __nth_element_impl( - _RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare& __comp) { - if (__nth == __last) - return; - - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - std::__nth_element<_AlgPolicy, __comp_ref_type<_Compare> >(__first, __nth, __last, __comp); - - std::__debug_randomize_range<_AlgPolicy>(__first, __nth); - if (__nth != __last) { - std::__debug_randomize_range<_AlgPolicy>(++__nth, __last); - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp) { - std::__nth_element_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__nth), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last) { - std::nth_element(std::move(__first), std::move(__nth), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_NTH_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/out_value_result.h b/third_party/libcxx/include/c++/v1/__algorithm/out_value_result.h deleted file mode 100644 index 9e1e0e0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/out_value_result.h +++ /dev/null @@ -1,56 +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___ALGORITHM_OUT_VALUE_RESULT_H -#define _LIBCPP___ALGORITHM_OUT_VALUE_RESULT_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 -struct out_value_result { - _LIBCPP_NO_UNIQUE_ADDRESS _OutIter1 out; - _LIBCPP_NO_UNIQUE_ADDRESS _ValType1 value; - - template - requires convertible_to && convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator out_value_result<_OutIter2, _ValType2>() const& { - return {out, value}; - } - - template - requires convertible_to<_OutIter1, _OutIter2> && convertible_to<_ValType1, _ValType2> - _LIBCPP_HIDE_FROM_ABI constexpr operator out_value_result<_OutIter2, _ValType2>() && { - return {std::move(out), std::move(value)}; - } -}; - -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_OUT_VALUE_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/partial_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/partial_sort.h deleted file mode 100644 index 4b39ae0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/partial_sort.h +++ /dev/null @@ -1,91 +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___ALGORITHM_PARTIAL_SORT_H -#define _LIBCPP___ALGORITHM_PARTIAL_SORT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_heap.h> -#include <__algorithm/sift_down.h> -#include <__algorithm/sort_heap.h> -#include <__config> -#include <__debug_utils/randomize_range.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_constructible.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator __partial_sort_impl( - _RandomAccessIterator __first, _RandomAccessIterator __middle, _Sentinel __last, _Compare&& __comp) { - if (__first == __middle) { - return _IterOps<_AlgPolicy>::next(__middle, __last); - } - - std::__make_heap<_AlgPolicy>(__first, __middle, __comp); - - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __middle - __first; - _RandomAccessIterator __i = __middle; - for (; __i != __last; ++__i) { - if (__comp(*__i, *__first)) { - _IterOps<_AlgPolicy>::iter_swap(__i, __first); - std::__sift_down<_AlgPolicy, false>(__first, __comp, __len, 0); - } - } - std::__sort_heap<_AlgPolicy>(std::move(__first), std::move(__middle), __comp); - - return __i; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator -__partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _Sentinel __last, _Compare& __comp) { - if (__first == __middle) - return _IterOps<_AlgPolicy>::next(__middle, __last); - - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - auto __last_iter = - std::__partial_sort_impl<_AlgPolicy>(__first, __middle, __last, static_cast<__comp_ref_type<_Compare> >(__comp)); - - std::__debug_randomize_range<_AlgPolicy>(__middle, __last); - - return __last_iter; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void partial_sort( - _RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - (void)std::__partial_sort<_ClassicAlgPolicy>(std::move(__first), std::move(__middle), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last) { - std::partial_sort(__first, __middle, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PARTIAL_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/partial_sort_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/partial_sort_copy.h deleted file mode 100644 index 2230dfc..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/partial_sort_copy.h +++ /dev/null @@ -1,106 +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___ALGORITHM_PARTIAL_SORT_COPY_H -#define _LIBCPP___ALGORITHM_PARTIAL_SORT_COPY_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_heap.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/sift_down.h> -#include <__algorithm/sort_heap.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator, _RandomAccessIterator> __partial_sort_copy( - _InputIterator __first, - _Sentinel1 __last, - _RandomAccessIterator __result_first, - _Sentinel2 __result_last, - _Compare&& __comp, - _Proj1&& __proj1, - _Proj2&& __proj2) { - _RandomAccessIterator __r = __result_first; - auto&& __projected_comp = std::__make_projected(__comp, __proj2); - - if (__r != __result_last) { - for (; __first != __last && __r != __result_last; ++__first, (void)++__r) - *__r = *__first; - std::__make_heap<_AlgPolicy>(__result_first, __r, __projected_comp); - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __r - __result_first; - for (; __first != __last; ++__first) - if (std::__invoke(__comp, std::__invoke(__proj1, *__first), std::__invoke(__proj2, *__result_first))) { - *__result_first = *__first; - std::__sift_down<_AlgPolicy, false>(__result_first, __projected_comp, __len, 0); - } - std::__sort_heap<_AlgPolicy>(__result_first, __r, __projected_comp); - } - - return pair<_InputIterator, _RandomAccessIterator>( - _IterOps<_AlgPolicy>::next(std::move(__first), std::move(__last)), std::move(__r)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator partial_sort_copy( - _InputIterator __first, - _InputIterator __last, - _RandomAccessIterator __result_first, - _RandomAccessIterator __result_last, - _Compare __comp) { - static_assert(__is_callable<_Compare&, decltype(*__first), decltype(*__result_first)>::value, - "The comparator has to be callable"); - - auto __result = std::__partial_sort_copy<_ClassicAlgPolicy>( - __first, - __last, - __result_first, - __result_last, - static_cast<__comp_ref_type<_Compare> >(__comp), - __identity(), - __identity()); - return __result.second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _RandomAccessIterator partial_sort_copy( - _InputIterator __first, - _InputIterator __last, - _RandomAccessIterator __result_first, - _RandomAccessIterator __result_last) { - return std::partial_sort_copy(__first, __last, __result_first, __result_last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PARTIAL_SORT_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/partition.h b/third_party/libcxx/include/c++/v1/__algorithm/partition.h deleted file mode 100644 index 669aac3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/partition.h +++ /dev/null @@ -1,91 +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___ALGORITHM_PARTITION_H -#define _LIBCPP___ALGORITHM_PARTITION_H - -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_ForwardIterator, _ForwardIterator> -__partition_impl(_ForwardIterator __first, _Sentinel __last, _Predicate __pred, forward_iterator_tag) { - while (true) { - if (__first == __last) - return std::make_pair(__first, __first); - if (!__pred(*__first)) - break; - ++__first; - } - - _ForwardIterator __p = __first; - while (++__p != __last) { - if (__pred(*__p)) { - _IterOps<_AlgPolicy>::iter_swap(__first, __p); - ++__first; - } - } - return std::make_pair(std::move(__first), std::move(__p)); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator, _BidirectionalIterator> -__partition_impl(_BidirectionalIterator __first, _Sentinel __sentinel, _Predicate __pred, bidirectional_iterator_tag) { - _BidirectionalIterator __original_last = _IterOps<_AlgPolicy>::next(__first, __sentinel); - _BidirectionalIterator __last = __original_last; - - while (true) { - while (true) { - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__original_last)); - if (!__pred(*__first)) - break; - ++__first; - } - do { - if (__first == --__last) - return std::make_pair(std::move(__first), std::move(__original_last)); - } while (!__pred(*__last)); - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - ++__first; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_ForwardIterator, _ForwardIterator> -__partition(_ForwardIterator __first, _Sentinel __last, _Predicate&& __pred, _IterCategory __iter_category) { - return std::__partition_impl<__remove_cvref_t<_Predicate>&, _AlgPolicy>( - std::move(__first), std::move(__last), __pred, __iter_category); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - using _IterCategory = typename iterator_traits<_ForwardIterator>::iterator_category; - auto __result = std::__partition<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __pred, _IterCategory()); - return __result.first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/partition_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/partition_copy.h deleted file mode 100644 index 147b45c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/partition_copy.h +++ /dev/null @@ -1,43 +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___ALGORITHM_PARTITION_COPY_H -#define _LIBCPP___ALGORITHM_PARTITION_COPY_H - -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_OutputIterator1, _OutputIterator2> partition_copy( - _InputIterator __first, - _InputIterator __last, - _OutputIterator1 __out_true, - _OutputIterator2 __out_false, - _Predicate __pred) { - for (; __first != __last; ++__first) { - if (__pred(*__first)) { - *__out_true = *__first; - ++__out_true; - } else { - *__out_false = *__first; - ++__out_false; - } - } - return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_PARTITION_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/partition_point.h b/third_party/libcxx/include/c++/v1/__algorithm/partition_point.h deleted file mode 100644 index 504dbf1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/partition_point.h +++ /dev/null @@ -1,44 +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___ALGORITHM_PARTITION_POINT_H -#define _LIBCPP___ALGORITHM_PARTITION_POINT_H - -#include <__algorithm/half_positive.h> -#include <__config> -#include <__iterator/advance.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -partition_point(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type; - difference_type __len = std::distance(__first, __last); - while (__len != 0) { - difference_type __l2 = std::__half_positive(__len); - _ForwardIterator __m = __first; - std::advance(__m, __l2); - if (__pred(*__m)) { - __first = ++__m; - __len -= __l2 + 1; - } else - __len = __l2; - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_PARTITION_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/pop_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/pop_heap.h deleted file mode 100644 index 6d23830..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/pop_heap.h +++ /dev/null @@ -1,81 +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___ALGORITHM_POP_HEAP_H -#define _LIBCPP___ALGORITHM_POP_HEAP_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/push_heap.h> -#include <__algorithm/sift_down.h> -#include <__assert> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_constructible.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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__pop_heap(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - // Calling `pop_heap` on an empty range is undefined behavior, but in practice it will be a no-op. - _LIBCPP_ASSERT_PEDANTIC(__len > 0, "The heap given to pop_heap must be non-empty"); - - __comp_ref_type<_Compare> __comp_ref = __comp; - - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - if (__len > 1) { - value_type __top = _IterOps<_AlgPolicy>::__iter_move(__first); // create a hole at __first - _RandomAccessIterator __hole = std::__floyd_sift_down<_AlgPolicy>(__first, __comp_ref, __len); - --__last; - - if (__hole == __last) { - *__hole = std::move(__top); - } else { - *__hole = _IterOps<_AlgPolicy>::__iter_move(__last); - ++__hole; - *__last = std::move(__top); - std::__sift_up<_AlgPolicy>(__first, __hole, __comp_ref, __hole - __first); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __last - __first; - std::__pop_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp, __len); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::pop_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_POP_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/prev_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/prev_permutation.h deleted file mode 100644 index 8d15b68..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/prev_permutation.h +++ /dev/null @@ -1,75 +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___ALGORITHM_PREV_PERMUTATION_H -#define _LIBCPP___ALGORITHM_PREV_PERMUTATION_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/reverse.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator, bool> -__prev_permutation(_BidirectionalIterator __first, _Sentinel __last, _Compare&& __comp) { - using _Result = pair<_BidirectionalIterator, bool>; - - _BidirectionalIterator __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - _BidirectionalIterator __i = __last_iter; - if (__first == __last || __first == --__i) - return _Result(std::move(__last_iter), false); - - while (true) { - _BidirectionalIterator __ip1 = __i; - if (__comp(*__ip1, *--__i)) { - _BidirectionalIterator __j = __last_iter; - while (!__comp(*--__j, *__i)) - ; - _IterOps<_AlgPolicy>::iter_swap(__i, __j); - std::__reverse<_AlgPolicy>(__ip1, __last_iter); - return _Result(std::move(__last_iter), true); - } - if (__i == __first) { - std::__reverse<_AlgPolicy>(__first, __last_iter); - return _Result(std::move(__last_iter), false); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - return std::__prev_permutation<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool -prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) { - return std::prev_permutation(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PREV_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/pstl.h b/third_party/libcxx/include/c++/v1/__algorithm/pstl.h deleted file mode 100644 index 10625ea..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/pstl.h +++ /dev/null @@ -1,688 +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___ALGORITHM_PSTL_H -#define _LIBCPP___ALGORITHM_PSTL_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_HAS_EXPERIMENTAL_PSTL && _LIBCPP_STD_VER >= 17 - -# include <__functional/operations.h> -# include <__iterator/cpp17_iterator_concepts.h> -# include <__iterator/iterator_traits.h> -# include <__pstl/backend.h> -# include <__pstl/dispatch.h> -# include <__pstl/handle_exception.h> -# include <__type_traits/enable_if.h> -# include <__type_traits/is_execution_policy.h> -# include <__type_traits/remove_cvref.h> -# include <__utility/forward.h> -# include <__utility/move.h> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -any_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "any_of requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__any_of, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -all_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "all_of requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__all_of, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -none_of(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Pred __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "none_of requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__none_of, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator -copy(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardIterator, "copy(first, last, result) requires [first, last) to be ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardOutIterator, "copy(first, last, result) requires result to be a ForwardIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(*__first), "copy(first, last, result) requires result to be an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__copy, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator -copy_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _ForwardOutIterator __result) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardIterator, "copy_n(first, n, result) requires first to be a ForwardIterator"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardOutIterator, "copy_n(first, n, result) requires result to be a ForwardIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(*__first), "copy_n(first, n, result) requires result to be an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__copy_n, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__result)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI __iterator_difference_type<_ForwardIterator> -count_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardIterator, "count_if(first, last, pred) requires [first, last) to be ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__count_if, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI __iterator_difference_type<_ForwardIterator> -count(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR( - _ForwardIterator, "count(first, last, val) requires [first, last) to be ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__count, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -equal(_ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _Pred __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -equal(_ExecutionPolicy&& __policy, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__equal_3leg, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - equal_to{}); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -equal(_ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _Pred __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -equal(_ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "equal requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "equal requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__equal, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - equal_to{}); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -fill(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__fill, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -fill_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, const _Tp& __value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "fill_n requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__fill_n, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), __value); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI _ForwardIterator -find_if(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__find_if, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI _ForwardIterator -find_if_not(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find_if_not requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__find_if_not, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI _ForwardIterator -find(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "find requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__find, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -for_each(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Function __func) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__for_each, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__func)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -for_each_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __size, _Function __func) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "for_each_n requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__for_each_n, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__size), std::move(__func)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -generate(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Generator __gen) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__generate, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__gen)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -generate_n(_ExecutionPolicy&& __policy, _ForwardIterator __first, _Size __n, _Generator __gen) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "generate_n requires a ForwardIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__generate_n, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__n), std::move(__gen)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -is_partitioned(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "is_partitioned requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__is_partitioned, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator -merge(_ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _ForwardOutIterator __result, - _Comp __comp) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - std::move(__comp)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator -merge(_ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _ForwardOutIterator __result) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "merge requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "merge requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first1), "merge requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, decltype(*__first2), "merge requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__merge, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - less{}); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator -move(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _ForwardOutIterator __result) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "move requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "move requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(std::move(*__first)), "move requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__move, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__result)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -replace_if(_ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __last, - _Pred __pred, - const _Tp& __new_value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_if requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__replace_if, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__pred), __new_value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -replace(_ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __last, - const _Tp& __old_value, - const _Tp& __new_value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__replace, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), __old_value, __new_value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void replace_copy_if( - _ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __last, - _ForwardOutIterator __result, - _Pred __pred, - const _Tp& __new_value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy_if requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy_if requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(*__first), "replace_copy_if requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__replace_copy_if, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first), - std::move(__last), - std::move(__result), - std::move(__pred), - __new_value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void replace_copy( - _ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __last, - _ForwardOutIterator __result, - const _Tp& __old_value, - const _Tp& __new_value) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "replace_copy requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "replace_copy requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(*__first), "replace_copy requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR(_ForwardOutIterator, const _Tp&, "replace_copy requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__replace_copy, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first), - std::move(__last), - std::move(__result), - __old_value, - __new_value); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator rotate_copy( - _ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __middle, - _ForwardIterator __last, - _ForwardOutIterator __result) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "rotate_copy requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "rotate_copy requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(*__first), "rotate_copy requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__rotate_copy, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first), - std::move(__middle), - std::move(__last), - std::move(__result)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { - _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "sort requires RandomAccessIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__sort, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI void -stable_sort(_ExecutionPolicy&& __policy, _RandomAccessIterator __first, _RandomAccessIterator __last) { - _LIBCPP_REQUIRE_CPP17_RANDOM_ACCESS_ITERATOR(_RandomAccessIterator, "stable_sort requires RandomAccessIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__stable_sort, __pstl::__current_configuration, _RawPolicy>; - __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( - _ExecutionPolicy&& __policy, - _ForwardIterator __first, - _ForwardIterator __last, - _ForwardOutIterator __result, - _UnaryOperation __op) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "transform requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(__op(*__first)), "transform requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__transform, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first), - std::move(__last), - std::move(__result), - std::move(__op)); -} - -template , - enable_if_t, int> = 0> -_LIBCPP_HIDE_FROM_ABI _ForwardOutIterator transform( - _ExecutionPolicy&& __policy, - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardOutIterator __result, - _BinaryOperation __op) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator1, "transform requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator2, "transform requires ForwardIterators"); - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardOutIterator, "transform requires an OutputIterator"); - _LIBCPP_REQUIRE_CPP17_OUTPUT_ITERATOR( - _ForwardOutIterator, decltype(__op(*__first1, *__first2)), "transform requires an OutputIterator"); - using _Implementation = __pstl::__dispatch<__pstl::__transform_binary, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__result), - std::move(__op)); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -is_sorted(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "is_sorted requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__is_sorted, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), less{}); -} - -template , - enable_if_t, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool -is_sorted(_ExecutionPolicy&& __policy, _ForwardIterator __first, _ForwardIterator __last, _Comp __comp) { - _LIBCPP_REQUIRE_CPP17_FORWARD_ITERATOR(_ForwardIterator, "is_sorted requires ForwardIterators"); - using _Implementation = __pstl::__dispatch<__pstl::__is_sorted, __pstl::__current_configuration, _RawPolicy>; - return __pstl::__handle_exception<_Implementation>( - std::forward<_ExecutionPolicy>(__policy), std::move(__first), std::move(__last), std::move(__comp)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_PSTL && _LIBCPP_STD_VER >= 17 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PSTL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/push_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/push_heap.h deleted file mode 100644 index ec0b445..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/push_heap.h +++ /dev/null @@ -1,84 +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___ALGORITHM_PUSH_HEAP_H -#define _LIBCPP___ALGORITHM_PUSH_HEAP_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_constructible.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__sift_up(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare&& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - - if (__len > 1) { - __len = (__len - 2) / 2; - _RandomAccessIterator __ptr = __first + __len; - - if (__comp(*__ptr, *--__last)) { - value_type __t(_IterOps<_AlgPolicy>::__iter_move(__last)); - do { - *__last = _IterOps<_AlgPolicy>::__iter_move(__ptr); - __last = __ptr; - if (__len == 0) - break; - __len = (__len - 1) / 2; - __ptr = __first + __len; - } while (__comp(*__ptr, __t)); - - *__last = std::move(__t); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) { - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __last - __first; - std::__sift_up<_AlgPolicy, __comp_ref_type<_Compare> >(std::move(__first), std::move(__last), __comp, __len); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - std::__push_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::push_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_PUSH_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/radix_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/radix_sort.h deleted file mode 100644 index 5549a69..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/radix_sort.h +++ /dev/null @@ -1,431 +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___ALGORITHM_RADIX_SORT_H -#define _LIBCPP___ALGORITHM_RADIX_SORT_H - -// This is an implementation of classic LSD radix sort algorithm, running in linear time and using `O(max(N, M))` -// additional memory, where `N` is size of an input range, `M` - maximum value of -// a radix of the sorted integer type. Type of the radix and its maximum value are determined at compile time -// based on type returned by function `__radix`. The default radix is uint8. - -// The algorithm is equivalent to several consecutive calls of counting sort for each -// radix of the sorted numbers from low to high byte. -// The algorithm uses a temporary buffer of size equal to size of the input range. Each `i`-th pass -// of the algorithm sorts values by `i`-th radix and moves values to the temporary buffer (for each even `i`, counted -// from zero), or moves them back to the initial range (for each odd `i`). If there is only one radix in sorted integers -// (e.g. int8), the sorted values are placed to the buffer, and then moved back to the initial range. - -// The implementation also has several optimizations: -// - the counters for the counting sort are calculated in one pass for all radices; -// - if all values of a radix are the same, we do not sort that radix, and just move items to the buffer; -// - if two consecutive radices satisfies condition above, we do nothing for these two radices. - -#include <__algorithm/for_each.h> -#include <__algorithm/move.h> -#include <__bit/bit_cast.h> -#include <__bit/bit_log2.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/identity.h> -#include <__iterator/access.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/move_iterator.h> -#include <__iterator/next.h> -#include <__iterator/reverse_iterator.h> -#include <__numeric/partial_sum.h> -#include <__type_traits/decay.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_enum.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_unsigned.h> -#include <__type_traits/make_unsigned.h> -#include <__type_traits/void_t.h> -#include <__utility/declval.h> -#include <__utility/forward.h> -#include <__utility/integer_sequence.h> -#include <__utility/move.h> -#include <__utility/pair.h> -#include -#include -#include -#include - -#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 >= 14 - -template -_LIBCPP_HIDE_FROM_ABI constexpr pair<_OutputIterator, __iterator_value_type<_InputIterator>> -__partial_sum_max(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - if (__first == __last) - return {__result, 0}; - - auto __max = *__first; - __iterator_value_type<_InputIterator> __sum = *__first; - *__result = __sum; - - while (++__first != __last) { - if (__max < *__first) { - __max = *__first; - } - __sum = std::move(__sum) + *__first; - *++__result = __sum; - } - return {++__result, __max}; -} - -template -struct __radix_sort_traits { - using __image_type _LIBCPP_NODEBUG = decay_t<__invoke_result_t<_Map, _Value>>; - static_assert(is_unsigned<__image_type>::value); - - using __radix_type _LIBCPP_NODEBUG = decay_t<__invoke_result_t<_Radix, __image_type>>; - static_assert(is_integral<__radix_type>::value); - - static constexpr auto __radix_value_range = numeric_limits<__radix_type>::max() + 1; - static constexpr auto __radix_size = std::__bit_log2(__radix_value_range); - static constexpr auto __radix_count = sizeof(__image_type) * CHAR_BIT / __radix_size; -}; - -template -struct __counting_sort_traits { - using __image_type _LIBCPP_NODEBUG = decay_t<__invoke_result_t<_Map, _Value>>; - static_assert(is_unsigned<__image_type>::value); - - static constexpr const auto __value_range = numeric_limits<__image_type>::max() + 1; - static constexpr auto __radix_size = std::__bit_log2(__value_range); -}; - -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __nth_radix(size_t __radix_number, _Radix __radix, _Integer __n) { - static_assert(is_unsigned<_Integer>::value); - using __traits = __counting_sort_traits<_Integer, _Radix>; - - return __radix(static_cast<_Integer>(__n >> __traits::__radix_size * __radix_number)); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr void -__collect(_ForwardIterator __first, _ForwardIterator __last, _Map __map, _RandomAccessIterator __counters) { - using __value_type = __iterator_value_type<_ForwardIterator>; - using __traits = __counting_sort_traits<__value_type, _Map>; - - std::for_each(__first, __last, [&__counters, &__map](const auto& __preimage) { ++__counters[__map(__preimage)]; }); - - const auto __counters_end = __counters + __traits::__value_range; - std::partial_sum(__counters, __counters_end, __counters); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr void -__dispose(_ForwardIterator __first, - _ForwardIterator __last, - _RandomAccessIterator1 __result, - _Map __map, - _RandomAccessIterator2 __counters) { - std::for_each(__first, __last, [&__result, &__counters, &__map](auto&& __preimage) { - auto __index = __counters[__map(__preimage)]++; - __result[__index] = std::move(__preimage); - }); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __collect_impl( - _ForwardIterator __first, - _ForwardIterator __last, - _Map __map, - _Radix __radix, - _RandomAccessIterator1 __counters, - _RandomAccessIterator2 __maximums, - index_sequence<_Radices...>) { - using __value_type = __iterator_value_type<_ForwardIterator>; - constexpr auto __radix_value_range = __radix_sort_traits<__value_type, _Map, _Radix>::__radix_value_range; - - auto __previous = numeric_limits<__invoke_result_t<_Map, __value_type>>::min(); - auto __is_sorted = true; - std::for_each(__first, __last, [&__counters, &__map, &__radix, &__previous, &__is_sorted](const auto& __value) { - auto __current = __map(__value); - __is_sorted &= (__current >= __previous); - __previous = __current; - - (++__counters[_Radices][std::__nth_radix(_Radices, __radix, __current)], ...); - }); - - ((__maximums[_Radices] = - std::__partial_sum_max(__counters[_Radices], __counters[_Radices] + __radix_value_range, __counters[_Radices]) - .second), - ...); - - return __is_sorted; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool -__collect(_ForwardIterator __first, - _ForwardIterator __last, - _Map __map, - _Radix __radix, - _RandomAccessIterator1 __counters, - _RandomAccessIterator2 __maximums) { - using __value_type = __iterator_value_type<_ForwardIterator>; - constexpr auto __radix_count = __radix_sort_traits<__value_type, _Map, _Radix>::__radix_count; - return std::__collect_impl( - __first, __last, __map, __radix, __counters, __maximums, make_index_sequence<__radix_count>()); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr void __dispose_backward( - _BidirectionalIterator __first, - _BidirectionalIterator __last, - _RandomAccessIterator1 __result, - _Map __map, - _RandomAccessIterator2 __counters) { - std::for_each(std::make_reverse_iterator(__last), - std::make_reverse_iterator(__first), - [&__result, &__counters, &__map](auto&& __preimage) { - auto __index = --__counters[__map(__preimage)]; - __result[__index] = std::move(__preimage); - }); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr _RandomAccessIterator -__counting_sort_impl(_ForwardIterator __first, _ForwardIterator __last, _RandomAccessIterator __result, _Map __map) { - using __value_type = __iterator_value_type<_ForwardIterator>; - using __traits = __counting_sort_traits<__value_type, _Map>; - - __iterator_difference_type<_RandomAccessIterator> __counters[__traits::__value_range + 1] = {0}; - - std::__collect(__first, __last, __map, std::next(std::begin(__counters))); - std::__dispose(__first, __last, __result, __map, std::begin(__counters)); - - return __result + __counters[__traits::__value_range]; -} - -template < - class _RandomAccessIterator1, - class _RandomAccessIterator2, - class _Map, - class _Radix, - enable_if_t<__radix_sort_traits<__iterator_value_type<_RandomAccessIterator1>, _Map, _Radix>::__radix_count == 1, - int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr void __radix_sort_impl( - _RandomAccessIterator1 __first, - _RandomAccessIterator1 __last, - _RandomAccessIterator2 __buffer, - _Map __map, - _Radix __radix) { - auto __buffer_end = std::__counting_sort_impl(__first, __last, __buffer, [&__map, &__radix](const auto& __value) { - return __radix(__map(__value)); - }); - - std::move(__buffer, __buffer_end, __first); -} - -template , _Map, _Radix>::__radix_count % 2 == 0, - int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr void __radix_sort_impl( - _RandomAccessIterator1 __first, - _RandomAccessIterator1 __last, - _RandomAccessIterator2 __buffer_begin, - _Map __map, - _Radix __radix) { - using __value_type = __iterator_value_type<_RandomAccessIterator1>; - using __traits = __radix_sort_traits<__value_type, _Map, _Radix>; - - __iterator_difference_type<_RandomAccessIterator1> - __counters[__traits::__radix_count][__traits::__radix_value_range] = {{0}}; - __iterator_difference_type<_RandomAccessIterator1> __maximums[__traits::__radix_count] = {0}; - const auto __is_sorted = std::__collect(__first, __last, __map, __radix, __counters, __maximums); - if (!__is_sorted) { - const auto __range_size = std::distance(__first, __last); - auto __buffer_end = __buffer_begin + __range_size; - for (size_t __radix_number = 0; __radix_number < __traits::__radix_count; __radix_number += 2) { - const auto __n0th_is_single = __maximums[__radix_number] == __range_size; - const auto __n1th_is_single = __maximums[__radix_number + 1] == __range_size; - - if (__n0th_is_single && __n1th_is_single) { - continue; - } - - if (__n0th_is_single) { - std::move(__first, __last, __buffer_begin); - } else { - auto __n0th = [__radix_number, &__map, &__radix](const auto& __v) { - return std::__nth_radix(__radix_number, __radix, __map(__v)); - }; - std::__dispose_backward(__first, __last, __buffer_begin, __n0th, __counters[__radix_number]); - } - - if (__n1th_is_single) { - std::move(__buffer_begin, __buffer_end, __first); - } else { - auto __n1th = [__radix_number, &__map, &__radix](const auto& __v) { - return std::__nth_radix(__radix_number + 1, __radix, __map(__v)); - }; - std::__dispose_backward(__buffer_begin, __buffer_end, __first, __n1th, __counters[__radix_number + 1]); - } - } - } -} - -_LIBCPP_HIDE_FROM_ABI constexpr auto __shift_to_unsigned(bool __b) { return __b; } - -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __shift_to_unsigned(_Ip __n) { - constexpr const auto __min_value = numeric_limits<_Ip>::min(); - return static_cast >(__n ^ __min_value); -} - -template -struct __unsigned_integer_of_size; - -template <> -struct __unsigned_integer_of_size<1> { - using type _LIBCPP_NODEBUG = uint8_t; -}; - -template <> -struct __unsigned_integer_of_size<2> { - using type _LIBCPP_NODEBUG = uint16_t; -}; - -template <> -struct __unsigned_integer_of_size<4> { - using type _LIBCPP_NODEBUG = uint32_t; -}; - -template <> -struct __unsigned_integer_of_size<8> { - using type _LIBCPP_NODEBUG = uint64_t; -}; - -# if _LIBCPP_HAS_INT128 -template <> -struct __unsigned_integer_of_size<16> { - using type _LIBCPP_NODEBUG = unsigned __int128; -}; -# endif - -template -using __unsigned_integer_of_size_t _LIBCPP_NODEBUG = typename __unsigned_integer_of_size<_Size>::type; - -template -using __unsigned_representation_for_t _LIBCPP_NODEBUG = __unsigned_integer_of_size_t; - -// The function `__to_ordered_integral` is defined for integers and IEEE 754 floating-point numbers. -// Returns an integer representation such that for any `x` and `y` such that `x < y`, the expression -// `__to_ordered_integral(x) < __to_ordered_integral(y)` is true, where `x`, `y` are integers or IEEE 754 floats. -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr auto __to_ordered_integral(_Integral __n) { - return __n; -} - -// An overload for IEEE 754 floating-point numbers - -// For the floats conforming to IEEE 754 (IEC 559) standard, we know that: -// 1. The bit representation of positive floats directly reflects their order: -// When comparing floats by magnitude, the number with the larger exponent is greater, and if the exponents are -// equal, the one with the larger mantissa is greater. -// 2. The bit representation of negative floats reflects their reverse order (for the same reasons). -// 3. The most significant bit (sign bit) is zero for positive floats and one for negative floats. Therefore, in the raw -// bit representation, any negative number will be greater than any positive number. - -// The only exception from this rule is `NaN`, which is unordered by definition. - -// Based on the above, to obtain correctly ordered integral representation of floating-point numbers, we need to: -// 1. Invert the bit representation (including the sign bit) of negative floats to switch from reverse order to direct -// order; -// 2. Invert the sign bit for positive floats. - -// Thus, in final integral representation, we have reversed the order for negative floats and made all negative floats -// smaller than all positive numbers (by inverting the sign bit). -template ::is_iec559, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr auto __to_ordered_integral(_Floating __f) { - using __integral_type = __unsigned_representation_for_t<_Floating>; - constexpr auto __bit_count = std::numeric_limits<__integral_type>::digits; - constexpr auto __sign_bit_mask = static_cast<__integral_type>(__integral_type{1} << (__bit_count - 1)); - - const auto __u = std::__bit_cast<__integral_type>(__f); - - return static_cast<__integral_type>(__u & __sign_bit_mask ? ~__u : __u ^ __sign_bit_mask); -} - -// There may exist user-defined comparison for enum, so we cannot compare enums just like integers. -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr auto __to_ordered_integral(_Enum __e) = delete; - -// `long double` varies significantly across platforms and compilers, making it practically -// impossible to determine its actual bit width for conversion to an ordered integer. -inline _LIBCPP_HIDE_FROM_ABI constexpr auto __to_ordered_integral(long double) = delete; - -template -inline const bool __is_ordered_integer_representable_v = false; - -template -inline const bool - __is_ordered_integer_representable_v<_Tp, __void_t()))>> = - true; - -struct __low_byte_fn { - template - _LIBCPP_HIDE_FROM_ABI constexpr uint8_t operator()(_Ip __integer) const { - static_assert(is_unsigned<_Ip>::value); - - return static_cast(__integer & 0xff); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI constexpr void -__radix_sort(_RandomAccessIterator1 __first, - _RandomAccessIterator1 __last, - _RandomAccessIterator2 __buffer, - _Map __map, - _Radix __radix) { - auto __map_to_unsigned = [__map = std::move(__map)](const auto& __x) { - return std::__shift_to_unsigned(__map(std::__to_ordered_integral(__x))); - }; - std::__radix_sort_impl(__first, __last, __buffer, __map_to_unsigned, __radix); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr void -__radix_sort(_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, _RandomAccessIterator2 __buffer) { - std::__radix_sort(__first, __last, __buffer, __identity{}, __low_byte_fn{}); -} - -#endif // _LIBCPP_STD_VER >= 14 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RADIX_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_adjacent_find.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_adjacent_find.h deleted file mode 100644 index 731142b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_adjacent_find.h +++ /dev/null @@ -1,66 +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___ALGORITHM_RANGES_ADJACENT_FIND_H -#define _LIBCPP___ALGORITHM_RANGES_ADJACENT_FIND_H - -#include <__algorithm/adjacent_find.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __adjacent_find { - template _Sent, - class _Proj = identity, - indirect_binary_predicate, projected<_Iter, _Proj>> _Pred = ranges::equal_to> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Pred __pred = {}, _Proj __proj = {}) const { - return std::__adjacent_find(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>, projected, _Proj>> - _Pred = ranges::equal_to> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, _Pred __pred = {}, _Proj __proj = {}) const { - return std::__adjacent_find(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto adjacent_find = __adjacent_find{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ADJACENT_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_all_of.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_all_of.h deleted file mode 100644 index c3d6dc0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_all_of.h +++ /dev/null @@ -1,64 +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___ALGORITHM_RANGES_ALL_OF_H -#define _LIBCPP___ALGORITHM_RANGES_ALL_OF_H - -#include <__algorithm/all_of.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __all_of { - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return std::__all_of(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return std::__all_of(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto all_of = __all_of{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ALL_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_any_of.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_any_of.h deleted file mode 100644 index 7f0fd29..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_any_of.h +++ /dev/null @@ -1,63 +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___ALGORITHM_RANGES_ANY_OF_H -#define _LIBCPP___ALGORITHM_RANGES_ANY_OF_H - -#include <__algorithm/any_of.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __any_of { - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Pred __pred = {}, _Proj __proj = {}) const { - return std::__any_of(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return std::__any_of(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto any_of = __any_of{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ANY_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_binary_search.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_binary_search.h deleted file mode 100644 index 47bd099..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_binary_search.h +++ /dev/null @@ -1,71 +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___ALGORITHM_RANGES_BINARY_SEARCH_H -#define _LIBCPP___ALGORITHM_RANGES_BINARY_SEARCH_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __binary_search { - template _Sent, - class _Type, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__lower_bound<_RangeAlgPolicy>(__first, __last, __value, __comp, __proj); - return __ret != __last && !std::invoke(__comp, __value, std::invoke(__proj, *__ret)); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __r, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __first = ranges::begin(__r); - auto __last = ranges::end(__r); - auto __ret = std::__lower_bound<_RangeAlgPolicy>(__first, __last, __value, __comp, __proj); - return __ret != __last && !std::invoke(__comp, __value, std::invoke(__proj, *__ret)); - } -}; - -inline namespace __cpo { -inline constexpr auto binary_search = __binary_search{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_BINARY_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_clamp.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_clamp.h deleted file mode 100644 index 4bb3e46..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_clamp.h +++ /dev/null @@ -1,64 +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___ALGORITHM_RANGES_CLAMP_H -#define _LIBCPP___ALGORITHM_RANGES_CLAMP_H - -#include <__assert> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __clamp { - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Type& operator()( - const _Type& __value, const _Type& __low, const _Type& __high, _Comp __comp = {}, _Proj __proj = {}) const { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - !bool(std::invoke(__comp, std::invoke(__proj, __high), std::invoke(__proj, __low))), - "Bad bounds passed to std::ranges::clamp"); - - auto&& __projected = std::invoke(__proj, __value); - if (std::invoke(__comp, std::forward(__projected), std::invoke(__proj, __low))) - return __low; - else if (std::invoke(__comp, std::invoke(__proj, __high), std::forward(__projected))) - return __high; - else - return __value; - } -}; - -inline namespace __cpo { -inline constexpr auto clamp = __clamp{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_CLAMP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains.h deleted file mode 100644 index 88de215..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains.h +++ /dev/null @@ -1,64 +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___ALGORITHM_RANGES_CONTAINS_H -#define _LIBCPP___ALGORITHM_RANGES_CONTAINS_H - -#include <__algorithm/ranges_find.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__functional/reference_wrapper.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 { -struct __contains { - template _Sent, class _Type, class _Proj = identity> - requires indirect_binary_predicate, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool static - operator()(_Iter __first, _Sent __last, const _Type& __value, _Proj __proj = {}) { - return ranges::find(std::move(__first), __last, __value, std::ref(__proj)) != __last; - } - - template - requires indirect_binary_predicate, _Proj>, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool static - operator()(_Range&& __range, const _Type& __value, _Proj __proj = {}) { - return ranges::find(ranges::begin(__range), ranges::end(__range), __value, std::ref(__proj)) != - ranges::end(__range); - } -}; - -inline namespace __cpo { -inline constexpr auto contains = __contains{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_CONTAINS_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains_subrange.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains_subrange.h deleted file mode 100644 index e8740d6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_contains_subrange.h +++ /dev/null @@ -1,95 +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___ALGORITHM_RANGES_CONTAINS_SUBRANGE_H -#define _LIBCPP___ALGORITHM_RANGES_CONTAINS_SUBRANGE_H - -#include <__algorithm/ranges_search.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__functional/reference_wrapper.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/size.h> -#include <__ranges/subrange.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 { -struct __contains_subrange { - template _Sent1, - forward_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool static operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) { - if (__first2 == __last2) - return true; - - auto __ret = ranges::search( - std::move(__first1), __last1, std::move(__first2), __last2, __pred, std::ref(__proj1), std::ref(__proj2)); - return __ret.empty() == false; - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool static - operator()(_Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) { - if constexpr (sized_range<_Range2>) { - if (ranges::size(__range2) == 0) - return true; - } else { - if (ranges::begin(__range2) == ranges::end(__range2)) - return true; - } - - auto __ret = ranges::search(__range1, __range2, __pred, std::ref(__proj1), std::ref(__proj2)); - return __ret.empty() == false; - } -}; - -inline namespace __cpo { -inline constexpr auto contains_subrange = __contains_subrange{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_CONTAINS_SUBRANGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy.h deleted file mode 100644 index a69af9b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy.h +++ /dev/null @@ -1,68 +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___ALGORITHM_RANGES_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_COPY_H - -#include <__algorithm/copy.h> -#include <__algorithm/in_out_result.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using copy_result = in_out_result<_InIter, _OutIter>; - -struct __copy { - template _Sent, weakly_incrementable _OutIter> - requires indirectly_copyable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr copy_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - auto __ret = std::__copy(std::move(__first), std::move(__last), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr copy_result, _OutIter> - operator()(_Range&& __r, _OutIter __result) const { - auto __ret = std::__copy(ranges::begin(__r), ranges::end(__r), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto copy = __copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_backward.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_backward.h deleted file mode 100644 index 81d14e4..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_backward.h +++ /dev/null @@ -1,67 +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___ALGORITHM_RANGES_COPY_BACKWARD_H -#define _LIBCPP___ALGORITHM_RANGES_COPY_BACKWARD_H - -#include <__algorithm/copy_backward.h> -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using copy_backward_result = in_out_result<_Ip, _Op>; - -struct __copy_backward { - template _Sent1, bidirectional_iterator _InIter2> - requires indirectly_copyable<_InIter1, _InIter2> - _LIBCPP_HIDE_FROM_ABI constexpr copy_backward_result<_InIter1, _InIter2> - operator()(_InIter1 __first, _Sent1 __last, _InIter2 __result) const { - auto __ret = std::__copy_backward<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template - requires indirectly_copyable, _Iter> - _LIBCPP_HIDE_FROM_ABI constexpr copy_backward_result, _Iter> - operator()(_Range&& __r, _Iter __result) const { - auto __ret = std::__copy_backward<_RangeAlgPolicy>(ranges::begin(__r), ranges::end(__r), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto copy_backward = __copy_backward{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COPY_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_if.h deleted file mode 100644 index acf74b6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_if.h +++ /dev/null @@ -1,76 +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___ALGORITHM_RANGES_COPY_IF_H -#define _LIBCPP___ALGORITHM_RANGES_COPY_IF_H - -#include <__algorithm/copy_if.h> -#include <__algorithm/in_out_result.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using copy_if_result = in_out_result<_Ip, _Op>; - -struct __copy_if { - template _Sent, - weakly_incrementable _OutIter, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires indirectly_copyable<_Iter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr copy_if_result<_Iter, _OutIter> - operator()(_Iter __first, _Sent __last, _OutIter __result, _Pred __pred, _Proj __proj = {}) const { - auto __res = std::__copy_if(std::move(__first), std::move(__last), std::move(__result), __pred, __proj); - return {std::move(__res.first), std::move(__res.second)}; - } - - template , _Proj>> _Pred> - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr copy_if_result, _OutIter> - operator()(_Range&& __r, _OutIter __result, _Pred __pred, _Proj __proj = {}) const { - auto __res = std::__copy_if(ranges::begin(__r), ranges::end(__r), std::move(__result), __pred, __proj); - return {std::move(__res.first), std::move(__res.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto copy_if = __copy_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_n.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_n.h deleted file mode 100644 index 6bee4c3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_copy_n.h +++ /dev/null @@ -1,57 +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___ALGORITHM_RANGES_COPY_N_H -#define _LIBCPP___ALGORITHM_RANGES_COPY_N_H - -#include <__algorithm/copy_n.h> -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.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 -using copy_n_result = in_out_result<_Ip, _Op>; - -struct __copy_n { - template - requires indirectly_copyable<_Ip, _Op> - _LIBCPP_HIDE_FROM_ABI constexpr copy_n_result<_Ip, _Op> - operator()(_Ip __first, iter_difference_t<_Ip> __n, _Op __result) const { - auto __res = std::__copy_n<_RangeAlgPolicy>(std::move(__first), __n, std::move(__result)); - return {std::move(__res.first), std::move(__res.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto copy_n = __copy_n{}; -} // namespace __cpo -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COPY_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_count.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_count.h deleted file mode 100644 index 2b3969e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_count.h +++ /dev/null @@ -1,64 +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___ALGORITHM_RANGES_COUNT_H -#define _LIBCPP___ALGORITHM_RANGES_COUNT_H - -#include <__algorithm/count.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __count { - template _Sent, class _Type, class _Proj = identity> - requires indirect_binary_predicate, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Iter> - operator()(_Iter __first, _Sent __last, const _Type& __value, _Proj __proj = {}) const { - return std::__count<_RangeAlgPolicy>(std::move(__first), std::move(__last), __value, __proj); - } - - template - requires indirect_binary_predicate, _Proj>, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_difference_t<_Range> - operator()(_Range&& __r, const _Type& __value, _Proj __proj = {}) const { - return std::__count<_RangeAlgPolicy>(ranges::begin(__r), ranges::end(__r), __value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto count = __count{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COUNT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_count_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_count_if.h deleted file mode 100644 index 6adeb78..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_count_if.h +++ /dev/null @@ -1,67 +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___ALGORITHM_RANGES_COUNT_IF_H -#define _LIBCPP___ALGORITHM_RANGES_COUNT_IF_H - -#include <__algorithm/count_if.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __count_if { - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Predicate> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iter_difference_t<_Iter> - operator()(_Iter __first, _Sent __last, _Predicate __pred, _Proj __proj = {}) const { - return std::__count_if<_RangeAlgPolicy>(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Predicate> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_difference_t<_Range> - operator()(_Range&& __r, _Predicate __pred, _Proj __proj = {}) const { - return std::__count_if<_RangeAlgPolicy>(ranges::begin(__r), ranges::end(__r), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto count_if = __count_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_COUNT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_ends_with.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_ends_with.h deleted file mode 100644 index 3621bda..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_ends_with.h +++ /dev/null @@ -1,200 +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___ALGORITHM_RANGES_ENDS_WITH_H -#define _LIBCPP___ALGORITHM_RANGES_ENDS_WITH_H - -#include <__algorithm/ranges_equal.h> -#include <__algorithm/ranges_starts_with.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__functional/reference_wrapper.h> -#include <__iterator/advance.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/reverse_iterator.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/size.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 { -struct __ends_with { - template - _LIBCPP_HIDE_FROM_ABI static constexpr bool __ends_with_fn_impl_bidirectional( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2) { - auto __rbegin1 = std::make_reverse_iterator(__last1); - auto __rend1 = std::make_reverse_iterator(__first1); - auto __rbegin2 = std::make_reverse_iterator(__last2); - auto __rend2 = std::make_reverse_iterator(__first2); - return ranges::starts_with( - __rbegin1, __rend1, __rbegin2, __rend2, std::ref(__pred), std::ref(__proj1), std::ref(__proj2)); - } - - template - _LIBCPP_HIDE_FROM_ABI static constexpr bool __ends_with_fn_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2) { - if constexpr (std::bidirectional_iterator<_Sent1> && std::bidirectional_iterator<_Sent2> && - (!std::random_access_iterator<_Sent1>) && (!std::random_access_iterator<_Sent2>)) { - return __ends_with_fn_impl_bidirectional(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2); - - } else { - auto __n1 = ranges::distance(__first1, __last1); - auto __n2 = ranges::distance(__first2, __last2); - if (__n2 == 0) - return true; - if (__n2 > __n1) - return false; - - return __ends_with_fn_impl_with_offset( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2, - __n1 - __n2); - } - } - - template - static _LIBCPP_HIDE_FROM_ABI constexpr bool __ends_with_fn_impl_with_offset( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - _Offset __offset) { - if constexpr (std::bidirectional_iterator<_Sent1> && std::bidirectional_iterator<_Sent2> && - !std::random_access_iterator<_Sent1> && !std::random_access_iterator<_Sent2>) { - return __ends_with_fn_impl_bidirectional( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - - } else { - ranges::advance(__first1, __offset); - return ranges::equal( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::ref(__pred), - std::ref(__proj1), - std::ref(__proj2)); - } - } - - template _Sent1, - input_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires(forward_iterator<_Iter1> || sized_sentinel_for<_Sent1, _Iter1>) && - (forward_iterator<_Iter2> || sized_sentinel_for<_Sent2, _Iter2>) && - indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __ends_with_fn_impl( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - } - - template - requires(forward_range<_Range1> || sized_range<_Range1>) && (forward_range<_Range2> || sized_range<_Range2>) && - indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - if constexpr (sized_range<_Range1> && sized_range<_Range2>) { - auto __n1 = ranges::size(__range1); - auto __n2 = ranges::size(__range2); - if (__n2 == 0) - return true; - if (__n2 > __n1) - return false; - auto __offset = __n1 - __n2; - - return __ends_with_fn_impl_with_offset( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2, - __offset); - - } else { - return __ends_with_fn_impl( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2); - } - } -}; - -inline namespace __cpo { -inline constexpr auto ends_with = __ends_with{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ENDS_WITH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal.h deleted file mode 100644 index 98f0baa..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal.h +++ /dev/null @@ -1,98 +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___ALGORITHM_RANGES_EQUAL_H -#define _LIBCPP___ALGORITHM_RANGES_EQUAL_H - -#include <__algorithm/equal.h> -#include <__algorithm/unwrap_range.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/size.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __equal { - template _Sent1, - input_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - constexpr bool __both_sized = sized_sentinel_for<_Sent1, _Iter1> && sized_sentinel_for<_Sent2, _Iter2>; - if constexpr (__both_sized) { - if (__last1 - __first1 != __last2 - __first2) - return false; - } - - auto [__ufirst1, __ulast1] = std::__unwrap_range(std::move(__first1), std::move(__last1)); - auto [__ufirst2, __ulast2] = std::__unwrap_range(std::move(__first2), std::move(__last2)); - - return std::__equal_impl<__both_sized>( - std::move(__ufirst1), std::move(__ulast1), std::move(__ufirst2), std::move(__ulast2), __pred, __proj1, __proj2); - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - constexpr bool __both_sized = sized_range<_Range1> && sized_range<_Range2>; - if constexpr (__both_sized) { - if (ranges::size(__range1) != ranges::size(__range2)) - return false; - } - - auto [__ufirst1, __ulast1] = std::__unwrap_range(ranges::begin(__range1), ranges::end(__range1)); - auto [__ufirst2, __ulast2] = std::__unwrap_range(ranges::begin(__range2), ranges::end(__range2)); - return std::__equal_impl<__both_sized>( - std::move(__ufirst1), std::move(__ulast1), std::move(__ufirst2), std::move(__ulast2), __pred, __proj1, __proj2); - } -}; - -inline namespace __cpo { -inline constexpr auto equal = __equal{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_EQUAL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal_range.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal_range.h deleted file mode 100644 index cc765f1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_equal_range.h +++ /dev/null @@ -1,76 +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___ALGORITHM_RANGES_EQUAL_RANGE_H -#define _LIBCPP___ALGORITHM_RANGES_EQUAL_RANGE_H - -#include <__algorithm/equal_range.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__ranges/subrange.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __equal_range { - template _Sent, - class _Tp, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__equal_range<_RangeAlgPolicy>(std::move(__first), std::move(__last), __value, __comp, __proj); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, const _Tp& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = - std::__equal_range<_RangeAlgPolicy>(ranges::begin(__range), ranges::end(__range), __value, __comp, __proj); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto equal_range = __equal_range{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_EQUAL_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill.h deleted file mode 100644 index 814ae63..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill.h +++ /dev/null @@ -1,61 +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___ALGORITHM_RANGES_FILL_H -#define _LIBCPP___ALGORITHM_RANGES_FILL_H - -#include <__algorithm/fill.h> -#include <__algorithm/fill_n.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __fill { - template _Iter, sentinel_for<_Iter> _Sent> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter operator()(_Iter __first, _Sent __last, const _Type& __value) const { - if constexpr (sized_sentinel_for<_Sent, _Iter>) { - auto __n = __last - __first; - return std::__fill_n(std::move(__first), __n, __value); - } else { - return std::__fill(std::move(__first), std::move(__last), __value); - } - } - - template _Range> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> operator()(_Range&& __range, const _Type& __value) const { - return (*this)(ranges::begin(__range), ranges::end(__range), __value); - } -}; - -inline namespace __cpo { -inline constexpr auto fill = __fill{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FILL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill_n.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill_n.h deleted file mode 100644 index 1276f13..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fill_n.h +++ /dev/null @@ -1,49 +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___ALGORITHM_RANGES_FILL_N_H -#define _LIBCPP___ALGORITHM_RANGES_FILL_N_H - -#include <__algorithm/fill_n.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __fill_n { - template _Iter> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, iter_difference_t<_Iter> __n, const _Type& __value) const { - return std::__fill_n(std::move(__first), __n, __value); - } -}; - -inline namespace __cpo { -inline constexpr auto fill_n = __fill_n{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FILL_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find.h deleted file mode 100644 index 1eac4cf..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find.h +++ /dev/null @@ -1,78 +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___ALGORITHM_RANGES_FIND_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_H - -#include <__algorithm/find.h> -#include <__algorithm/ranges_find_if.h> -#include <__algorithm/unwrap_range.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __find { - template - _LIBCPP_HIDE_FROM_ABI static constexpr _Iter - __find_unwrap(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - if constexpr (forward_iterator<_Iter>) { - auto [__first_un, __last_un] = std::__unwrap_range(__first, std::move(__last)); - return std::__rewrap_range<_Sent>( - std::move(__first), std::__find(std::move(__first_un), std::move(__last_un), __value, __proj)); - } else { - return std::__find(std::move(__first), std::move(__last), __value, __proj); - } - } - - template _Sp, class _Tp, class _Proj = identity> - requires indirect_binary_predicate, const _Tp*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Ip - operator()(_Ip __first, _Sp __last, const _Tp& __value, _Proj __proj = {}) const { - return __find_unwrap(std::move(__first), std::move(__last), __value, __proj); - } - - template - requires indirect_binary_predicate, _Proj>, const _Tp*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Rp> - operator()(_Rp&& __r, const _Tp& __value, _Proj __proj = {}) const { - return __find_unwrap(ranges::begin(__r), ranges::end(__r), __value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto find = __find{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_end.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_end.h deleted file mode 100644 index 682724a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_end.h +++ /dev/null @@ -1,101 +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___ALGORITHM_RANGES_FIND_END_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_END_H - -#include <__algorithm/find_end.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/ranges_iterator_concept.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/iterator_traits.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __find_end { - template _Sent1, - forward_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter1> operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__find_end_impl<_RangeAlgPolicy>( - __first1, - __last1, - __first2, - __last2, - __pred, - __proj1, - __proj2, - __iterator_concept<_Iter1>(), - __iterator_concept<_Iter2>()); - return {__ret.first, __ret.second}; - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range1> operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - auto __ret = std::__find_end_impl<_RangeAlgPolicy>( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2, - __iterator_concept>(), - __iterator_concept>()); - return {__ret.first, __ret.second}; - } -}; - -inline namespace __cpo { -inline constexpr auto find_end = __find_end{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_END_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_first_of.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_first_of.h deleted file mode 100644 index 102e16d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_first_of.h +++ /dev/null @@ -1,104 +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___ALGORITHM_RANGES_FIND_FIRST_OF_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_FIRST_OF_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __find_first_of { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter1 __find_first_of_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2) { - for (; __first1 != __last1; ++__first1) { - for (auto __j = __first2; __j != __last2; ++__j) { - if (std::invoke(__pred, std::invoke(__proj1, *__first1), std::invoke(__proj2, *__j))) - return __first1; - } - } - return __first1; - } - - template _Sent1, - forward_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter1 operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __find_first_of_impl( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range1> operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - return __find_first_of_impl( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2); - } -}; - -inline namespace __cpo { -inline constexpr auto find_first_of = __find_first_of{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_FIRST_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if.h deleted file mode 100644 index c72ade0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if.h +++ /dev/null @@ -1,64 +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___ALGORITHM_RANGES_FIND_IF_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_IF_H - -#include <__algorithm/find_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -struct __find_if { - template _Sp, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Ip - operator()(_Ip __first, _Sp __last, _Pred __pred, _Proj __proj = {}) const { - return std::__find_if(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Rp> - operator()(_Rp&& __r, _Pred __pred, _Proj __proj = {}) const { - return std::__find_if(ranges::begin(__r), ranges::end(__r), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto find_if = __find_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if_not.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if_not.h deleted file mode 100644 index ae0d64f..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_if_not.h +++ /dev/null @@ -1,62 +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___ALGORITHM_RANGES_FIND_IF_NOT_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_IF_NOT_H - -#include <__algorithm/find_if_not.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __find_if_not { - template _Sp, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Ip - operator()(_Ip __first, _Sp __last, _Pred __pred, _Proj __proj = {}) const { - return std::__find_if_not(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Rp> - operator()(_Rp&& __r, _Pred __pred, _Proj __proj = {}) const { - return std::__find_if_not(ranges::begin(__r), ranges::end(__r), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto find_if_not = __find_if_not{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_IF_NOT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_last.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_last.h deleted file mode 100644 index e7dae17..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_find_last.h +++ /dev/null @@ -1,170 +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___ALGORITHM_RANGES_FIND_LAST_H -#define _LIBCPP___ALGORITHM_RANGES_FIND_LAST_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/next.h> -#include <__iterator/prev.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 -_LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> -__find_last_impl(_Iter __first, _Sent __last, _Pred __pred, _Proj& __proj) { - if (__first == __last) { - return subrange<_Iter>(__first, __first); - } - - if constexpr (bidirectional_iterator<_Iter>) { - auto __last_it = ranges::next(__first, __last); - for (auto __it = ranges::prev(__last_it); __it != __first; --__it) { - if (__pred(std::invoke(__proj, *__it))) { - return subrange<_Iter>(std::move(__it), std::move(__last_it)); - } - } - if (__pred(std::invoke(__proj, *__first))) { - return subrange<_Iter>(std::move(__first), std::move(__last_it)); - } - return subrange<_Iter>(__last_it, __last_it); - } else { - bool __found = false; - _Iter __found_it; - for (; __first != __last; ++__first) { - if (__pred(std::invoke(__proj, *__first))) { - __found = true; - __found_it = __first; - } - } - - if (__found) { - return subrange<_Iter>(std::move(__found_it), std::move(__first)); - } else { - return subrange<_Iter>(__first, __first); - } - } -} - -struct __find_last { - template - struct __op { - const _Type& __value; - template - _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Elem&& __elem) const { - return std::forward<_Elem>(__elem) == __value; - } - }; - - template _Sent, class _Type, class _Proj = identity> - requires indirect_binary_predicate, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static subrange<_Iter> - operator()(_Iter __first, _Sent __last, const _Type& __value, _Proj __proj = {}) { - return ranges::__find_last_impl(std::move(__first), std::move(__last), __op<_Type>{__value}, __proj); - } - - template - requires indirect_binary_predicate, _Proj>, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static borrowed_subrange_t<_Range> - operator()(_Range&& __range, const _Type& __value, _Proj __proj = {}) { - return ranges::__find_last_impl(ranges::begin(__range), ranges::end(__range), __op<_Type>{__value}, __proj); - } -}; - -struct __find_last_if { - template - struct __op { - _Pred& __pred; - template - _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Elem&& __elem) const { - return std::invoke(__pred, std::forward<_Elem>(__elem)); - } - }; - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) { - return ranges::__find_last_impl(std::move(__first), std::move(__last), __op<_Pred>{__pred}, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) { - return ranges::__find_last_impl(ranges::begin(__range), ranges::end(__range), __op<_Pred>{__pred}, __proj); - } -}; - -struct __find_last_if_not { - template - struct __op { - _Pred& __pred; - template - _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Elem&& __elem) const { - return !std::invoke(__pred, std::forward<_Elem>(__elem)); - } - }; - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) { - return ranges::__find_last_impl(std::move(__first), std::move(__last), __op<_Pred>{__pred}, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr static borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) { - return ranges::__find_last_impl(ranges::begin(__range), ranges::end(__range), __op<_Pred>{__pred}, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto find_last = __find_last{}; -inline constexpr auto find_last_if = __find_last_if{}; -inline constexpr auto find_last_if_not = __find_last_if_not{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FIND_LAST_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fold.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_fold.h deleted file mode 100644 index c2d150a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_fold.h +++ /dev/null @@ -1,137 +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___ALGORITHM_RANGES_FOLD_H -#define _LIBCPP___ALGORITHM_RANGES_FOLD_H - -#include <__algorithm/for_each.h> -#include <__concepts/assignable.h> -#include <__concepts/constructible.h> -#include <__concepts/convertible_to.h> -#include <__concepts/invocable.h> -#include <__concepts/movable.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/reference_wrapper.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__type_traits/decay.h> -#include <__type_traits/invoke.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 >= 23 - -namespace ranges { -template -struct in_value_result { - _LIBCPP_NO_UNIQUE_ADDRESS _Ip in; - _LIBCPP_NO_UNIQUE_ADDRESS _Tp value; - - template - requires convertible_to && convertible_to - _LIBCPP_HIDE_FROM_ABI constexpr operator in_value_result<_I2, _T2>() const& { - return {in, value}; - } - - template - requires convertible_to<_Ip, _I2> && convertible_to<_Tp, _T2> - _LIBCPP_HIDE_FROM_ABI constexpr operator in_value_result<_I2, _T2>() && { - return {std::move(in), std::move(value)}; - } -}; - -template -using fold_left_with_iter_result = in_value_result<_Ip, _Tp>; - -template > -concept __indirectly_binary_left_foldable_impl = - convertible_to<_Rp, _Up> && // - movable<_Tp> && // - movable<_Up> && // - convertible_to<_Tp, _Up> && // - invocable<_Fp&, _Up, iter_reference_t<_Ip>> && // - assignable_from<_Up&, invoke_result_t<_Fp&, _Up, iter_reference_t<_Ip>>>; - -template -concept __indirectly_binary_left_foldable = - copy_constructible<_Fp> && // - invocable<_Fp&, _Tp, iter_reference_t<_Ip>> && // - __indirectly_binary_left_foldable_impl<_Fp, _Tp, _Ip, invoke_result_t<_Fp&, _Tp, iter_reference_t<_Ip>>>; - -struct __fold_left_with_iter { - template _Sp, class _Tp, __indirectly_binary_left_foldable<_Tp, _Ip> _Fp> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Ip __first, _Sp __last, _Tp __init, _Fp __f) { - using _Up = decay_t>>; - - if (__first == __last) { - return fold_left_with_iter_result<_Ip, _Up>{std::move(__first), _Up(std::move(__init))}; - } - - _Up __result = std::invoke(__f, std::move(__init), *__first); - ++__first; - __identity __proj; - auto __end = std::__for_each( - std::move(__first), - std::move(__last), - [&](auto&& __element) { - __result = std::invoke(__f, std::move(__result), std::forward(__element)); - }, - __proj); - - return fold_left_with_iter_result<_Ip, _Up>{std::move(__end), std::move(__result)}; - } - - template > _Fp> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Rp&& __r, _Tp __init, _Fp __f) { - auto __result = operator()(ranges::begin(__r), ranges::end(__r), std::move(__init), std::ref(__f)); - - using _Up = decay_t>>; - return fold_left_with_iter_result, _Up>{std::move(__result.in), std::move(__result.value)}; - } -}; - -inline constexpr auto fold_left_with_iter = __fold_left_with_iter(); - -struct __fold_left { - template _Sp, class _Tp, __indirectly_binary_left_foldable<_Tp, _Ip> _Fp> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Ip __first, _Sp __last, _Tp __init, _Fp __f) { - return fold_left_with_iter(std::move(__first), std::move(__last), std::move(__init), std::ref(__f)).value; - } - - template > _Fp> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Rp&& __r, _Tp __init, _Fp __f) { - return fold_left_with_iter(ranges::begin(__r), ranges::end(__r), std::move(__init), std::ref(__f)).value; - } -}; - -inline constexpr auto fold_left = __fold_left(); -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FOLD_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each.h deleted file mode 100644 index 7a547fb..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each.h +++ /dev/null @@ -1,97 +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___ALGORITHM_RANGES_FOR_EACH_H -#define _LIBCPP___ALGORITHM_RANGES_FOR_EACH_H - -#include <__algorithm/for_each.h> -#include <__algorithm/for_each_n.h> -#include <__algorithm/in_fun_result.h> -#include <__algorithm/specialized_algorithms.h> -#include <__concepts/assignable.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using for_each_result = in_fun_result<_Iter, _Func>; - -struct __for_each { -private: - template - _LIBCPP_HIDE_FROM_ABI constexpr static for_each_result<_Iter, _Func> - __for_each_impl(_Iter __first, _Sent __last, _Func& __func, _Proj& __proj) { - // In the case where we have different iterator and sentinel types, the segmented iterator optimization - // in std::for_each will not kick in. Therefore, we prefer std::for_each_n in that case (whenever we can - // obtain the `n`). - if constexpr (!std::assignable_from<_Iter&, _Sent> && std::sized_sentinel_for<_Sent, _Iter>) { - auto __n = __last - __first; - auto __end = std::__for_each_n(std::move(__first), __n, __func, __proj); - return {std::move(__end), std::move(__func)}; - } else { - auto __end = std::__for_each(std::move(__first), std::move(__last), __func, __proj); - return {std::move(__end), std::move(__func)}; - } - } - -public: - template _Sent, - class _Proj = identity, - indirectly_unary_invocable> _Func> - _LIBCPP_HIDE_FROM_ABI constexpr for_each_result<_Iter, _Func> - operator()(_Iter __first, _Sent __last, _Func __func, _Proj __proj = {}) const { - return __for_each_impl(std::move(__first), std::move(__last), __func, __proj); - } - - template , _Proj>> _Func> - _LIBCPP_HIDE_FROM_ABI constexpr for_each_result, _Func> - operator()(_Range&& __range, _Func __func, _Proj __proj = {}) const { - using _SpecialAlg = __specialized_algorithm<_Algorithm::__for_each, __single_range>>; - if constexpr (_SpecialAlg::__has_algorithm) { - auto [__iter, __func2] = _SpecialAlg()(__range, std::move(__func), std::move(__proj)); - return {std::move(__iter), std::move(__func)}; - } else { - return __for_each_impl(ranges::begin(__range), ranges::end(__range), __func, __proj); - } - } -}; - -inline namespace __cpo { -inline constexpr auto for_each = __for_each{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FOR_EACH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each_n.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each_n.h deleted file mode 100644 index 3aab1b7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_for_each_n.h +++ /dev/null @@ -1,59 +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___ALGORITHM_RANGES_FOR_EACH_N_H -#define _LIBCPP___ALGORITHM_RANGES_FOR_EACH_N_H - -#include <__algorithm/for_each_n.h> -#include <__algorithm/in_fun_result.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using for_each_n_result = in_fun_result<_Iter, _Func>; - -struct __for_each_n { - template > _Func> - _LIBCPP_HIDE_FROM_ABI constexpr for_each_n_result<_Iter, _Func> - operator()(_Iter __first, iter_difference_t<_Iter> __count, _Func __func, _Proj __proj = {}) const { - auto __last = std::__for_each_n(std::move(__first), __count, __func, __proj); - return {std::move(__last), std::move(__func)}; - } -}; - -inline namespace __cpo { -inline constexpr auto for_each_n = __for_each_n{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_FOR_EACH_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate.h deleted file mode 100644 index 04333b3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate.h +++ /dev/null @@ -1,69 +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___ALGORITHM_RANGES_GENERATE_H -#define _LIBCPP___ALGORITHM_RANGES_GENERATE_H - -#include <__concepts/constructible.h> -#include <__concepts/invocable.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__type_traits/invoke.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __generate { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _OutIter __generate_fn_impl(_OutIter __first, _Sent __last, _Func& __gen) { - for (; __first != __last; ++__first) { - *__first = __gen(); - } - - return __first; - } - - template _Sent, copy_constructible _Func> - requires invocable<_Func&> && indirectly_writable<_OutIter, invoke_result_t<_Func&>> - _LIBCPP_HIDE_FROM_ABI constexpr _OutIter operator()(_OutIter __first, _Sent __last, _Func __gen) const { - return __generate_fn_impl(std::move(__first), std::move(__last), __gen); - } - - template - requires invocable<_Func&> && output_range<_Range, invoke_result_t<_Func&>> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> operator()(_Range&& __range, _Func __gen) const { - return __generate_fn_impl(ranges::begin(__range), ranges::end(__range), __gen); - } -}; - -inline namespace __cpo { -inline constexpr auto generate = __generate{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_GENERATE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate_n.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate_n.h deleted file mode 100644 index 0cc9ce7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_generate_n.h +++ /dev/null @@ -1,57 +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___ALGORITHM_RANGES_GENERATE_N_H -#define _LIBCPP___ALGORITHM_RANGES_GENERATE_N_H - -#include <__algorithm/generate_n.h> -#include <__concepts/constructible.h> -#include <__concepts/invocable.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/iterator_traits.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__type_traits/invoke.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __generate_n { - template - requires invocable<_Func&> && indirectly_writable<_OutIter, invoke_result_t<_Func&>> - _LIBCPP_HIDE_FROM_ABI constexpr _OutIter - operator()(_OutIter __first, iter_difference_t<_OutIter> __n, _Func __gen) const { - return std::__generate_n(std::move(__first), __n, __gen); - } -}; - -inline namespace __cpo { -inline constexpr auto generate_n = __generate_n{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_GENERATE_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_includes.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_includes.h deleted file mode 100644 index 9145f3b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_includes.h +++ /dev/null @@ -1,94 +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___ALGORITHM_RANGES_INCLUDES_H -#define _LIBCPP___ALGORITHM_RANGES_INCLUDES_H - -#include <__algorithm/includes.h> -#include <__algorithm/make_projected.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __includes { - template _Sent1, - input_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Proj1 = identity, - class _Proj2 = identity, - indirect_strict_weak_order, projected<_Iter2, _Proj2>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return std::__includes( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__comp), - std::move(__proj1), - std::move(__proj2)); - } - - template , _Proj1>, projected, _Proj2>> - _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Range1&& __range1, _Range2&& __range2, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - return std::__includes( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - std::move(__comp), - std::move(__proj1), - std::move(__proj2)); - } -}; - -inline namespace __cpo { -inline constexpr auto includes = __includes{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_INCLUDES_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_inplace_merge.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_inplace_merge.h deleted file mode 100644 index 54581af..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_inplace_merge.h +++ /dev/null @@ -1,80 +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___ALGORITHM_RANGES_INPLACE_MERGE_H -#define _LIBCPP___ALGORITHM_RANGES_INPLACE_MERGE_H - -#include <__algorithm/inplace_merge.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __inplace_merge { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX26 auto - __inplace_merge_impl(_Iter __first, _Iter __middle, _Sent __last, _Comp&& __comp, _Proj&& __proj) { - auto __last_iter = ranges::next(__middle, __last); - std::__inplace_merge<_RangeAlgPolicy>( - std::move(__first), std::move(__middle), __last_iter, std::__make_projected(__comp, __proj)); - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _Iter - operator()(_Iter __first, _Iter __middle, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __inplace_merge_impl( - std::move(__first), std::move(__middle), std::move(__last), std::move(__comp), std::move(__proj)); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 borrowed_iterator_t<_Range> - operator()(_Range&& __range, iterator_t<_Range> __middle, _Comp __comp = {}, _Proj __proj = {}) const { - return __inplace_merge_impl( - ranges::begin(__range), std::move(__middle), ranges::end(__range), std::move(__comp), std::move(__proj)); - } -}; - -inline namespace __cpo { -inline constexpr auto inplace_merge = __inplace_merge{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_INPLACE_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap.h deleted file mode 100644 index b4724ab..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap.h +++ /dev/null @@ -1,77 +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___ALGORITHM_RANGES_IS_HEAP_H -#define _LIBCPP___ALGORITHM_RANGES_IS_HEAP_H - -#include <__algorithm/is_heap_until.h> -#include <__algorithm/make_projected.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __is_heap { - template - _LIBCPP_HIDE_FROM_ABI constexpr static bool - __is_heap_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - auto&& __projected_comp = std::__make_projected(__comp, __proj); - - auto __result = std::__is_heap_until(std::move(__first), std::move(__last_iter), __projected_comp); - return __result == __last; - } - - template _Sent, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __is_heap_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - return __is_heap_fn_impl(ranges::begin(__range), ranges::end(__range), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto is_heap = __is_heap{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_IS_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap_until.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap_until.h deleted file mode 100644 index 25f3b48..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_heap_until.h +++ /dev/null @@ -1,77 +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___ALGORITHM_RANGES_IS_HEAP_UNTIL_H -#define _LIBCPP___ALGORITHM_RANGES_IS_HEAP_UNTIL_H - -#include <__algorithm/is_heap_until.h> -#include <__algorithm/make_projected.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __is_heap_until { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __is_heap_until_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - auto&& __projected_comp = std::__make_projected(__comp, __proj); - - return std::__is_heap_until(std::move(__first), std::move(__last_iter), __projected_comp); - } - - template _Sent, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __is_heap_until_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - return __is_heap_until_fn_impl(ranges::begin(__range), ranges::end(__range), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto is_heap_until = __is_heap_until{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_IS_HEAP_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_partitioned.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_partitioned.h deleted file mode 100644 index 8092abf..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_partitioned.h +++ /dev/null @@ -1,84 +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___ALGORITHM_RANGES_IS_PARTITIONED_H -#define _LIBCPP___ALGORITHM_RANGES_IS_PARTITIONED_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __is_partitioned { - template - _LIBCPP_HIDE_FROM_ABI constexpr static bool - __is_partitioned_impl(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (!std::invoke(__pred, std::invoke(__proj, *__first))) - break; - } - - if (__first == __last) - return true; - ++__first; - - for (; __first != __last; ++__first) { - if (std::invoke(__pred, std::invoke(__proj, *__first))) - return false; - } - - return true; - } - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return __is_partitioned_impl(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return __is_partitioned_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto is_partitioned = __is_partitioned{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_IS_PARTITIONED_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_permutation.h deleted file mode 100644 index 53a431d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_permutation.h +++ /dev/null @@ -1,105 +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___ALGORITHM_RANGES_IS_PERMUTATION_H -#define _LIBCPP___ALGORITHM_RANGES_IS_PERMUTATION_H - -#include <__algorithm/is_permutation.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __is_permutation { - template - _LIBCPP_HIDE_FROM_ABI constexpr static bool __is_permutation_func_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2) { - return std::__is_permutation<_RangeAlgPolicy>( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - } - - template < - forward_iterator _Iter1, - sentinel_for<_Iter1> _Sent1, - forward_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Proj1 = identity, - class _Proj2 = identity, - indirect_equivalence_relation, projected<_Iter2, _Proj2>> _Pred = ranges::equal_to> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __is_permutation_func_impl( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - } - - template , _Proj1>, - projected, _Proj2>> _Pred = ranges::equal_to> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - if constexpr (sized_range<_Range1> && sized_range<_Range2>) { - if (ranges::distance(__range1) != ranges::distance(__range2)) - return false; - } - - return __is_permutation_func_impl( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2); - } -}; - -inline namespace __cpo { -inline constexpr auto is_permutation = __is_permutation{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_IS_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted.h deleted file mode 100644 index ab06706..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted.h +++ /dev/null @@ -1,65 +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__ALGORITHM_RANGES_IS_SORTED_H -#define _LIBCPP__ALGORITHM_RANGES_IS_SORTED_H - -#include <__algorithm/ranges_is_sorted_until.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __is_sorted { - template _Sent, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return ranges::__is_sorted_until_impl(std::move(__first), __last, __comp, __proj) == __last; - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - auto __last = ranges::end(__range); - return ranges::__is_sorted_until_impl(ranges::begin(__range), __last, __comp, __proj) == __last; - } -}; - -inline namespace __cpo { -inline constexpr auto is_sorted = __is_sorted{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP__ALGORITHM_RANGES_IS_SORTED_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted_until.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted_until.h deleted file mode 100644 index f2e51c2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_is_sorted_until.h +++ /dev/null @@ -1,80 +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__ALGORITHM_RANGES_IS_SORTED_UNTIL_H -#define _LIBCPP__ALGORITHM_RANGES_IS_SORTED_UNTIL_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -_LIBCPP_HIDE_FROM_ABI constexpr _Iter -__is_sorted_until_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - if (__first == __last) - return __first; - auto __i = __first; - while (++__i != __last) { - if (std::invoke(__comp, std::invoke(__proj, *__i), std::invoke(__proj, *__first))) - return __i; - __first = __i; - } - return __i; -} - -struct __is_sorted_until { - template _Sent, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return ranges::__is_sorted_until_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - return ranges::__is_sorted_until_impl(ranges::begin(__range), ranges::end(__range), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto is_sorted_until = __is_sorted_until{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP__ALGORITHM_RANGES_IS_SORTED_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_iterator_concept.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_iterator_concept.h deleted file mode 100644 index 947dfa4..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_iterator_concept.h +++ /dev/null @@ -1,56 +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___ALGORITHM_RANGES_ITERATOR_CONCEPT_H -#define _LIBCPP___ALGORITHM_RANGES_ITERATOR_CONCEPT_H - -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -consteval auto __get_iterator_concept() { - using _Iter = __remove_cvref_t<_IterMaybeQualified>; - - if constexpr (contiguous_iterator<_Iter>) - return contiguous_iterator_tag(); - else if constexpr (random_access_iterator<_Iter>) - return random_access_iterator_tag(); - else if constexpr (bidirectional_iterator<_Iter>) - return bidirectional_iterator_tag(); - else if constexpr (forward_iterator<_Iter>) - return forward_iterator_tag(); - else if constexpr (input_iterator<_Iter>) - return input_iterator_tag(); -} - -template -using __iterator_concept _LIBCPP_NODEBUG = decltype(ranges::__get_iterator_concept<_Iter>()); - -} // namespace ranges -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ITERATOR_CONCEPT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_lexicographical_compare.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_lexicographical_compare.h deleted file mode 100644 index ec12b0c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_lexicographical_compare.h +++ /dev/null @@ -1,107 +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___ALGORITHM_RANGES_LEXICOGRAPHICAL_COMPARE_H -#define _LIBCPP___ALGORITHM_RANGES_LEXICOGRAPHICAL_COMPARE_H - -#include <__algorithm/lexicographical_compare.h> -#include <__algorithm/unwrap_range.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __lexicographical_compare { - template - static _LIBCPP_HIDE_FROM_ABI constexpr bool __lexicographical_compare_unwrap( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Comp& __comp, - _Proj1& __proj1, - _Proj2& __proj2) { - auto [__first1_un, __last1_un] = std::__unwrap_range(std::move(__first1), std::move(__last1)); - auto [__first2_un, __last2_un] = std::__unwrap_range(std::move(__first2), std::move(__last2)); - return std::__lexicographical_compare( - std::move(__first1_un), - std::move(__last1_un), - std::move(__first2_un), - std::move(__last2_un), - __comp, - __proj1, - __proj2); - } - - template _Sent1, - input_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Proj1 = identity, - class _Proj2 = identity, - indirect_strict_weak_order, projected<_Iter2, _Proj2>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __lexicographical_compare_unwrap( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __comp, __proj1, __proj2); - } - - template , _Proj1>, projected, _Proj2>> - _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool operator()( - _Range1&& __range1, _Range2&& __range2, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - return __lexicographical_compare_unwrap( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __comp, - __proj1, - __proj2); - } -}; - -inline namespace __cpo { -inline constexpr auto lexicographical_compare = __lexicographical_compare{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_LEXICOGRAPHICAL_COMPARE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_lower_bound.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_lower_bound.h deleted file mode 100644 index d1b3328..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_lower_bound.h +++ /dev/null @@ -1,71 +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___ALGORITHM_RANGES_LOWER_BOUND_H -#define _LIBCPP___ALGORITHM_RANGES_LOWER_BOUND_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/advance.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -struct __lower_bound { - template _Sent, - class _Type, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - return std::__lower_bound<_RangeAlgPolicy>(__first, __last, __value, __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - return std::__lower_bound<_RangeAlgPolicy>(ranges::begin(__r), ranges::end(__r), __value, __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto lower_bound = __lower_bound{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_LOWER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_make_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_make_heap.h deleted file mode 100644 index 97148f7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_make_heap.h +++ /dev/null @@ -1,81 +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___ALGORITHM_RANGES_MAKE_HEAP_H -#define _LIBCPP___ALGORITHM_RANGES_MAKE_HEAP_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_heap.h> -#include <__algorithm/make_projected.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __make_heap { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __make_heap_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__make_heap<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __make_heap_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __make_heap_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto make_heap = __make_heap{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MAKE_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_max.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_max.h deleted file mode 100644 index a8fe13a..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_max.h +++ /dev/null @@ -1,101 +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___ALGORITHM_RANGES_MAX_H -#define _LIBCPP___ALGORITHM_RANGES_MAX_H - -#include <__algorithm/min_element.h> -#include <__assert> -#include <__concepts/copyable.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__type_traits/is_trivially_copyable.h> -#include <__utility/move.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __max { - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& - operator()(_LIBCPP_LIFETIMEBOUND const _Tp& __a, - _LIBCPP_LIFETIMEBOUND const _Tp& __b, - _Comp __comp = {}, - _Proj __proj = {}) const { - return std::invoke(__comp, std::invoke(__proj, __a), std::invoke(__proj, __b)) ? __b : __a; - } - - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp - operator()(initializer_list<_Tp> __il, _Comp __comp = {}, _Proj __proj = {}) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __il.begin() != __il.end(), "initializer_list must contain at least one element"); - - auto __comp_lhs_rhs_swapped = [&](auto&& __lhs, auto&& __rhs) -> bool { return std::invoke(__comp, __rhs, __lhs); }; - return *std::__min_element(__il.begin(), __il.end(), __comp_lhs_rhs_swapped, __proj); - } - - template , _Proj>> _Comp = ranges::less> - requires indirectly_copyable_storable, range_value_t<_Rp>*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_value_t<_Rp> - operator()(_Rp&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - auto __first = ranges::begin(__r); - auto __last = ranges::end(__r); - - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__first != __last, "range must contain at least one element"); - - if constexpr (forward_range<_Rp> && !__is_cheap_to_copy>) { - auto __comp_lhs_rhs_swapped = [&](auto&& __lhs, auto&& __rhs) -> bool { - return std::invoke(__comp, __rhs, __lhs); - }; - return *std::__min_element(std::move(__first), std::move(__last), __comp_lhs_rhs_swapped, __proj); - } else { - range_value_t<_Rp> __result = *__first; - while (++__first != __last) { - if (std::invoke(__comp, std::invoke(__proj, __result), std::invoke(__proj, *__first))) - __result = *__first; - } - return __result; - } - } -}; - -inline namespace __cpo { -inline constexpr auto max = __max{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_MAX_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_max_element.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_max_element.h deleted file mode 100644 index db6d5f6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_max_element.h +++ /dev/null @@ -1,67 +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___ALGORITHM_RANGES_MAX_ELEMENT_H -#define _LIBCPP___ALGORITHM_RANGES_MAX_ELEMENT_H - -#include <__algorithm/min_element.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __max_element { - template _Sp, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Ip - operator()(_Ip __first, _Sp __last, _Comp __comp = {}, _Proj __proj = {}) const { - auto __comp_lhs_rhs_swapped = [&](auto&& __lhs, auto&& __rhs) -> bool { return std::invoke(__comp, __rhs, __lhs); }; - return std::__min_element(__first, __last, __comp_lhs_rhs_swapped, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Rp> - operator()(_Rp&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - auto __comp_lhs_rhs_swapped = [&](auto&& __lhs, auto&& __rhs) -> bool { return std::invoke(__comp, __rhs, __lhs); }; - return std::__min_element(ranges::begin(__r), ranges::end(__r), __comp_lhs_rhs_swapped, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto max_element = __max_element{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MAX_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_merge.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_merge.h deleted file mode 100644 index f3e0486..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_merge.h +++ /dev/null @@ -1,134 +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___ALGORITHM_RANGES_MERGE_H -#define _LIBCPP___ALGORITHM_RANGES_MERGE_H - -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/ranges_copy.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/mergeable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using merge_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; - -struct __merge { - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - class _Comp = less, - class _Proj1 = identity, - class _Proj2 = identity> - requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr merge_result<_InIter1, _InIter2, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __merge::__merge_impl(__first1, __last1, __first2, __last2, __result, __comp, __proj1, __proj2); - } - - template - requires mergeable, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr merge_result, borrowed_iterator_t<_Range2>, _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __merge::__merge_impl( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __result, - __comp, - __proj1, - __proj2); - } - - template < class _InIter1, - class _Sent1, - class _InIter2, - class _Sent2, - class _OutIter, - class _Comp, - class _Proj1, - class _Proj2> - _LIBCPP_HIDE_FROM_ABI static constexpr merge_result<__remove_cvref_t<_InIter1>, - __remove_cvref_t<_InIter2>, - __remove_cvref_t<_OutIter>> - __merge_impl(_InIter1&& __first1, - _Sent1&& __last1, - _InIter2&& __first2, - _Sent2&& __last2, - _OutIter&& __result, - _Comp&& __comp, - _Proj1&& __proj1, - _Proj2&& __proj2) { - for (; __first1 != __last1 && __first2 != __last2; ++__result) { - if (std::invoke(__comp, std::invoke(__proj2, *__first2), std::invoke(__proj1, *__first1))) { - *__result = *__first2; - ++__first2; - } else { - *__result = *__first1; - ++__first1; - } - } - auto __ret1 = ranges::copy(std::move(__first1), std::move(__last1), std::move(__result)); - auto __ret2 = ranges::copy(std::move(__first2), std::move(__last2), std::move(__ret1.out)); - return {std::move(__ret1.in), std::move(__ret2.in), std::move(__ret2.out)}; - } -}; - -inline namespace __cpo { -inline constexpr auto merge = __merge{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_min.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_min.h deleted file mode 100644 index 9f1c78e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_min.h +++ /dev/null @@ -1,93 +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___ALGORITHM_RANGES_MIN_H -#define _LIBCPP___ALGORITHM_RANGES_MIN_H - -#include <__algorithm/min_element.h> -#include <__assert> -#include <__concepts/copyable.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__type_traits/is_trivially_copyable.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __min { - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& - operator()(_LIBCPP_LIFETIMEBOUND const _Tp& __a, - _LIBCPP_LIFETIMEBOUND const _Tp& __b, - _Comp __comp = {}, - _Proj __proj = {}) const { - return std::invoke(__comp, std::invoke(__proj, __b), std::invoke(__proj, __a)) ? __b : __a; - } - - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp - operator()(initializer_list<_Tp> __il, _Comp __comp = {}, _Proj __proj = {}) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __il.begin() != __il.end(), "initializer_list must contain at least one element"); - return *std::__min_element(__il.begin(), __il.end(), __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - requires indirectly_copyable_storable, range_value_t<_Rp>*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr range_value_t<_Rp> - operator()(_Rp&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - auto __first = ranges::begin(__r); - auto __last = ranges::end(__r); - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__first != __last, "range must contain at least one element"); - if constexpr (forward_range<_Rp> && !__is_cheap_to_copy>) { - return *std::__min_element(__first, __last, __comp, __proj); - } else { - range_value_t<_Rp> __result = *__first; - while (++__first != __last) { - if (std::invoke(__comp, std::invoke(__proj, *__first), std::invoke(__proj, __result))) - __result = *__first; - } - return __result; - } - } -}; - -inline namespace __cpo { -inline constexpr auto min = __min{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_MIN_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_min_element.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_min_element.h deleted file mode 100644 index 5deb409..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_min_element.h +++ /dev/null @@ -1,66 +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___ALGORITHM_RANGES_MIN_ELEMENT_H -#define _LIBCPP___ALGORITHM_RANGES_MIN_ELEMENT_H - -#include <__algorithm/min_element.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __min_element { - template _Sp, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Ip - operator()(_Ip __first, _Sp __last, _Comp __comp = {}, _Proj __proj = {}) const { - return std::__min_element(__first, __last, __comp, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Rp> - operator()(_Rp&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return std::__min_element(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto min_element = __min_element{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MIN_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax.h deleted file mode 100644 index 5f2e5cb..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax.h +++ /dev/null @@ -1,174 +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___ALGORITHM_RANGES_MINMAX_H -#define _LIBCPP___ALGORITHM_RANGES_MINMAX_H - -#include <__algorithm/min_max_result.h> -#include <__algorithm/minmax_element.h> -#include <__assert> -#include <__concepts/copyable.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_reference.h> -#include <__type_traits/is_trivially_copyable.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -template -using minmax_result = min_max_result<_T1>; - -struct __minmax { - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ranges::minmax_result - operator()(_LIBCPP_LIFETIMEBOUND const _Type& __a, - _LIBCPP_LIFETIMEBOUND const _Type& __b, - _Comp __comp = {}, - _Proj __proj = {}) const { - if (std::invoke(__comp, std::invoke(__proj, __b), std::invoke(__proj, __a))) - return {__b, __a}; - return {__a, __b}; - } - - template > _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ranges::minmax_result<_Type> - operator()(initializer_list<_Type> __il, _Comp __comp = {}, _Proj __proj = {}) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __il.begin() != __il.end(), "initializer_list has to contain at least one element"); - auto __iters = std::__minmax_element_impl(__il.begin(), __il.end(), __comp, __proj); - return ranges::minmax_result<_Type>{*__iters.first, *__iters.second}; - } - - template , _Proj>> _Comp = ranges::less> - requires indirectly_copyable_storable, range_value_t<_Range>*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ranges::minmax_result> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - auto __first = ranges::begin(__r); - auto __last = ranges::end(__r); - using _ValueT = range_value_t<_Range>; - - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__first != __last, "range has to contain at least one element"); - - // This optimiation is not in minmax_element because clang doesn't see through the pointers and as a result doesn't - // vectorize the code. - if constexpr (contiguous_range<_Range> && is_integral_v<_ValueT> && - __is_cheap_to_copy<_ValueT> & __is_identity<_Proj>::value && - __desugars_to_v<__less_tag, _Comp, _ValueT, _ValueT>) { - minmax_result<_ValueT> __result = {__r[0], __r[0]}; - for (auto __e : __r) { - if (__e < __result.min) - __result.min = __e; - if (__result.max < __e) - __result.max = __e; - } - return __result; - } else if constexpr (forward_range<_Range>) { - // Special-case the one element case. Avoid repeatedly initializing objects from the result of an iterator - // dereference when doing so might not be idempotent. The `if constexpr` avoids the extra branch in cases where - // it's not needed. - if constexpr (!same_as>, _ValueT> || - is_rvalue_reference_v>) { - if (ranges::next(__first) == __last) { - // During initialization, members are allowed to refer to already initialized members - // (see http://eel.is/c++draft/dcl.init.aggr#6) - minmax_result<_ValueT> __result = {*__first, __result.min}; - return __result; - } - } - auto __result = std::__minmax_element_impl(__first, __last, __comp, __proj); - return {*__result.first, *__result.second}; - } else { - // input_iterators can't be copied, so the implementation for input_iterators has to store - // the values instead of a pointer to the correct values - auto __less = [&](auto&& __a, auto&& __b) -> bool { - return std::invoke(__comp, - std::invoke(__proj, std::forward(__a)), - std::invoke(__proj, std::forward(__b))); - }; - - // During initialization, members are allowed to refer to already initialized members - // (see http://eel.is/c++draft/dcl.init.aggr#6) - ranges::minmax_result<_ValueT> __result = {*__first, __result.min}; - if (__first == __last || ++__first == __last) - return __result; - - if (__less(*__first, __result.min)) - __result.min = *__first; - else - __result.max = *__first; - - while (++__first != __last) { - _ValueT __i = *__first; - if (++__first == __last) { - if (__less(__i, __result.min)) - __result.min = __i; - else if (!__less(__i, __result.max)) - __result.max = __i; - return __result; - } - - if (__less(*__first, __i)) { - if (__less(*__first, __result.min)) - __result.min = *__first; - if (!__less(__i, __result.max)) - __result.max = std::move(__i); - } else { - if (__less(__i, __result.min)) - __result.min = std::move(__i); - if (!__less(*__first, __result.max)) - __result.max = *__first; - } - } - return __result; - } - } -}; - -inline namespace __cpo { -inline constexpr auto minmax = __minmax{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_MINMAX_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax_element.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax_element.h deleted file mode 100644 index e1a22dd..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_minmax_element.h +++ /dev/null @@ -1,76 +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___ALGORITHM_RANGES_MINMAX_ELEMENT_H -#define _LIBCPP___ALGORITHM_RANGES_MINMAX_ELEMENT_H - -#include <__algorithm/min_max_result.h> -#include <__algorithm/minmax_element.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using minmax_element_result = min_max_result<_T1>; - -struct __minmax_element { - template _Sp, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ranges::minmax_element_result<_Ip> - operator()(_Ip __first, _Sp __last, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__minmax_element_impl(std::move(__first), std::move(__last), __comp, __proj); - return {__ret.first, __ret.second}; - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr ranges::minmax_element_result> - operator()(_Rp&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__minmax_element_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - return {__ret.first, __ret.second}; - } -}; - -inline namespace __cpo { -inline constexpr auto minmax_element = __minmax_element{}; -} // namespace __cpo - -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MINMAX_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_mismatch.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_mismatch.h deleted file mode 100644 index b35747d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_mismatch.h +++ /dev/null @@ -1,98 +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___ALGORITHM_RANGES_MISMATCH_H -#define _LIBCPP___ALGORITHM_RANGES_MISMATCH_H - -#include <__algorithm/in_in_result.h> -#include <__algorithm/mismatch.h> -#include <__algorithm/unwrap_range.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 -using mismatch_result = in_in_result<_I1, _I2>; - -struct __mismatch { - template - static _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result<_I1, _I2> - __go(_I1 __first1, _S1 __last1, _I2 __first2, _S2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - if constexpr (forward_iterator<_I1> && forward_iterator<_I2>) { - auto __range1 = std::__unwrap_range(__first1, __last1); - auto __range2 = std::__unwrap_range(__first2, __last2); - auto __res = - std::__mismatch(__range1.first, __range1.second, __range2.first, __range2.second, __pred, __proj1, __proj2); - return {std::__rewrap_range<_S1>(__first1, __res.first), std::__rewrap_range<_S2>(__first2, __res.second)}; - } else { - auto __res = std::__mismatch( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); - return {std::move(__res.first), std::move(__res.second)}; - } - } - - template _S1, - input_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> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result<_I1, _I2> operator()( - _I1 __first1, _S1 __last1, _I2 __first2, _S2 __last2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) - const { - return __go(std::move(__first1), __last1, std::move(__first2), __last2, __pred, __proj1, __proj2); - } - - template - requires indirectly_comparable, iterator_t<_R2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] - _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result, borrowed_iterator_t<_R2>> - operator()(_R1&& __r1, _R2&& __r2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - return __go( - ranges::begin(__r1), ranges::end(__r1), ranges::begin(__r2), ranges::end(__r2), __pred, __proj1, __proj2); - } -}; - -inline namespace __cpo { -constexpr inline auto mismatch = __mismatch{}; -} // namespace __cpo -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MISMATCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_move.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_move.h deleted file mode 100644 index 02bf7fd..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_move.h +++ /dev/null @@ -1,72 +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___ALGORITHM_RANGES_MOVE_H -#define _LIBCPP___ALGORITHM_RANGES_MOVE_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/move.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using move_result = in_out_result<_InIter, _OutIter>; - -struct __move { - template - _LIBCPP_HIDE_FROM_ABI constexpr static move_result<_InIter, _OutIter> - __move_impl(_InIter __first, _Sent __last, _OutIter __result) { - auto __ret = std::__move<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template _Sent, weakly_incrementable _OutIter> - requires indirectly_movable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr move_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - return __move_impl(std::move(__first), std::move(__last), std::move(__result)); - } - - template - requires indirectly_movable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr move_result, _OutIter> - operator()(_Range&& __range, _OutIter __result) const { - return __move_impl(ranges::begin(__range), ranges::end(__range), std::move(__result)); - } -}; - -inline namespace __cpo { -inline constexpr auto move = __move{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MOVE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_move_backward.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_move_backward.h deleted file mode 100644 index 4737e6c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_move_backward.h +++ /dev/null @@ -1,74 +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___ALGORITHM_RANGES_MOVE_BACKWARD_H -#define _LIBCPP___ALGORITHM_RANGES_MOVE_BACKWARD_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/move_backward.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iter_move.h> -#include <__iterator/next.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using move_backward_result = in_out_result<_InIter, _OutIter>; - -struct __move_backward { - template - _LIBCPP_HIDE_FROM_ABI constexpr static move_backward_result<_InIter, _OutIter> - __move_backward_impl(_InIter __first, _Sent __last, _OutIter __result) { - auto __ret = std::__move_backward<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template _Sent, bidirectional_iterator _OutIter> - requires indirectly_movable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr move_backward_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - return __move_backward_impl(std::move(__first), std::move(__last), std::move(__result)); - } - - template - requires indirectly_movable, _Iter> - _LIBCPP_HIDE_FROM_ABI constexpr move_backward_result, _Iter> - operator()(_Range&& __range, _Iter __result) const { - return __move_backward_impl(ranges::begin(__range), ranges::end(__range), std::move(__result)); - } -}; - -inline namespace __cpo { -inline constexpr auto move_backward = __move_backward{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_MOVE_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_next_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_next_permutation.h deleted file mode 100644 index 1b48542..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_next_permutation.h +++ /dev/null @@ -1,74 +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___ALGORITHM_RANGES_NEXT_PERMUTATION_H -#define _LIBCPP___ALGORITHM_RANGES_NEXT_PERMUTATION_H - -#include <__algorithm/in_found_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/next_permutation.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using next_permutation_result = in_found_result<_InIter>; - -struct __next_permutation { - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr next_permutation_result<_Iter> - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - auto __result = std::__next_permutation<_RangeAlgPolicy>( - std::move(__first), std::move(__last), std::__make_projected(__comp, __proj)); - return {std::move(__result.first), std::move(__result.second)}; - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr next_permutation_result> - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - auto __result = std::__next_permutation<_RangeAlgPolicy>( - ranges::begin(__range), ranges::end(__range), std::__make_projected(__comp, __proj)); - return {std::move(__result.first), std::move(__result.second)}; - } -}; - -inline namespace __cpo { -constexpr inline auto next_permutation = __next_permutation{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_NEXT_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_none_of.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_none_of.h deleted file mode 100644 index a161282..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_none_of.h +++ /dev/null @@ -1,73 +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___ALGORITHM_RANGES_NONE_OF_H -#define _LIBCPP___ALGORITHM_RANGES_NONE_OF_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __none_of { - template - _LIBCPP_HIDE_FROM_ABI constexpr static bool - __none_of_impl(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (std::invoke(__pred, std::invoke(__proj, *__first))) - return false; - } - return true; - } - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Iter __first, _Sent __last, _Pred __pred = {}, _Proj __proj = {}) const { - return __none_of_impl(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return __none_of_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto none_of = __none_of{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_NONE_OF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_nth_element.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_nth_element.h deleted file mode 100644 index e92c51e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_nth_element.h +++ /dev/null @@ -1,80 +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___ALGORITHM_RANGES_NTH_ELEMENT_H -#define _LIBCPP___ALGORITHM_RANGES_NTH_ELEMENT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/nth_element.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __nth_element { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __nth_element_fn_impl(_Iter __first, _Iter __nth, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__nth_element_impl<_RangeAlgPolicy>(std::move(__first), std::move(__nth), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Iter __nth, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __nth_element_fn_impl(std::move(__first), std::move(__nth), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, iterator_t<_Range> __nth, _Comp __comp = {}, _Proj __proj = {}) const { - return __nth_element_fn_impl(ranges::begin(__r), std::move(__nth), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto nth_element = __nth_element{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_NTH_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort.h deleted file mode 100644 index fc8a1f7..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort.h +++ /dev/null @@ -1,78 +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___ALGORITHM_RANGES_PARTIAL_SORT_H -#define _LIBCPP___ALGORITHM_RANGES_PARTIAL_SORT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/partial_sort.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __partial_sort { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __partial_sort_fn_impl(_Iter __first, _Iter __middle, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto&& __projected_comp = std::__make_projected(__comp, __proj); - return std::__partial_sort<_RangeAlgPolicy>(std::move(__first), std::move(__middle), __last, __projected_comp); - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Iter __middle, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __partial_sort_fn_impl(std::move(__first), std::move(__middle), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, iterator_t<_Range> __middle, _Comp __comp = {}, _Proj __proj = {}) const { - return __partial_sort_fn_impl(ranges::begin(__r), std::move(__middle), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto partial_sort = __partial_sort{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PARTIAL_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort_copy.h deleted file mode 100644 index f221504..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partial_sort_copy.h +++ /dev/null @@ -1,110 +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___ALGORITHM_RANGES_PARTIAL_SORT_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_PARTIAL_SORT_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/partial_sort_copy.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using partial_sort_copy_result = in_out_result<_InIter, _OutIter>; - -struct __partial_sort_copy { - template _Sent1, - random_access_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Comp = ranges::less, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_copyable<_Iter1, _Iter2> && sortable<_Iter2, _Comp, _Proj2> && - indirect_strict_weak_order<_Comp, projected<_Iter1, _Proj1>, projected<_Iter2, _Proj2>> - _LIBCPP_HIDE_FROM_ABI constexpr partial_sort_copy_result<_Iter1, _Iter2> operator()( - _Iter1 __first, - _Sent1 __last, - _Iter2 __result_first, - _Sent2 __result_last, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __result = std::__partial_sort_copy<_RangeAlgPolicy>( - std::move(__first), - std::move(__last), - std::move(__result_first), - std::move(__result_last), - __comp, - __proj1, - __proj2); - return {std::move(__result.first), std::move(__result.second)}; - } - - template - requires indirectly_copyable, iterator_t<_Range2>> && - sortable, _Comp, _Proj2> && - indirect_strict_weak_order<_Comp, - projected, _Proj1>, - projected, _Proj2>> - _LIBCPP_HIDE_FROM_ABI constexpr partial_sort_copy_result, borrowed_iterator_t<_Range2>> - operator()( - _Range1&& __range, _Range2&& __result_range, _Comp __comp = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - auto __result = std::__partial_sort_copy<_RangeAlgPolicy>( - ranges::begin(__range), - ranges::end(__range), - ranges::begin(__result_range), - ranges::end(__result_range), - __comp, - __proj1, - __proj2); - return {std::move(__result.first), std::move(__result.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto partial_sort_copy = __partial_sort_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PARTIAL_SORT_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition.h deleted file mode 100644 index b9cc3c1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition.h +++ /dev/null @@ -1,85 +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___ALGORITHM_RANGES_PARTITION_H -#define _LIBCPP___ALGORITHM_RANGES_PARTITION_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/partition.h> -#include <__algorithm/ranges_iterator_concept.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/permutable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __partition { - template - _LIBCPP_HIDE_FROM_ABI static constexpr subrange<__remove_cvref_t<_Iter>> - __partition_fn_impl(_Iter&& __first, _Sent&& __last, _Pred&& __pred, _Proj&& __proj) { - auto&& __projected_pred = std::__make_projected(__pred, __proj); - auto __result = std::__partition<_RangeAlgPolicy>( - std::move(__first), std::move(__last), __projected_pred, __iterator_concept<_Iter>()); - - return {std::move(__result.first), std::move(__result.second)}; - } - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return __partition_fn_impl(__first, __last, __pred, __proj); - } - - template , _Proj>> _Pred> - requires permutable> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return __partition_fn_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto partition = __partition{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_copy.h deleted file mode 100644 index 47878a4..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_copy.h +++ /dev/null @@ -1,106 +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___ALGORITHM_RANGES_PARTITION_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_PARTITION_COPY_H - -#include <__algorithm/in_out_out_result.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using partition_copy_result = in_out_out_result<_InIter, _OutIter1, _OutIter2>; - -struct __partition_copy { - // TODO(ranges): delegate to the classic algorithm. - template - _LIBCPP_HIDE_FROM_ABI constexpr static partition_copy_result<__remove_cvref_t<_InIter>, - __remove_cvref_t<_OutIter1>, - __remove_cvref_t<_OutIter2> > - __partition_copy_fn_impl( - _InIter&& __first, - _Sent&& __last, - _OutIter1&& __out_true, - _OutIter2&& __out_false, - _Pred& __pred, - _Proj& __proj) { - for (; __first != __last; ++__first) { - if (std::invoke(__pred, std::invoke(__proj, *__first))) { - *__out_true = *__first; - ++__out_true; - - } else { - *__out_false = *__first; - ++__out_false; - } - } - - return {std::move(__first), std::move(__out_true), std::move(__out_false)}; - } - - template _Sent, - weakly_incrementable _OutIter1, - weakly_incrementable _OutIter2, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires indirectly_copyable<_InIter, _OutIter1> && indirectly_copyable<_InIter, _OutIter2> - _LIBCPP_HIDE_FROM_ABI constexpr partition_copy_result<_InIter, _OutIter1, _OutIter2> operator()( - _InIter __first, _Sent __last, _OutIter1 __out_true, _OutIter2 __out_false, _Pred __pred, _Proj __proj = {}) - const { - return __partition_copy_fn_impl( - std::move(__first), std::move(__last), std::move(__out_true), std::move(__out_false), __pred, __proj); - } - - template , _Proj>> _Pred> - requires indirectly_copyable, _OutIter1> && indirectly_copyable, _OutIter2> - _LIBCPP_HIDE_FROM_ABI constexpr partition_copy_result, _OutIter1, _OutIter2> - operator()(_Range&& __range, _OutIter1 __out_true, _OutIter2 __out_false, _Pred __pred, _Proj __proj = {}) const { - return __partition_copy_fn_impl( - ranges::begin(__range), ranges::end(__range), std::move(__out_true), std::move(__out_false), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto partition_copy = __partition_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PARTITION_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_point.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_point.h deleted file mode 100644 index 324efbb..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_partition_point.h +++ /dev/null @@ -1,89 +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___ALGORITHM_RANGES_PARTITION_POINT_H -#define _LIBCPP___ALGORITHM_RANGES_PARTITION_POINT_H - -#include <__algorithm/half_positive.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __partition_point { - // TODO(ranges): delegate to the classic algorithm. - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __partition_point_fn_impl(_Iter&& __first, _Sent&& __last, _Pred& __pred, _Proj& __proj) { - auto __len = ranges::distance(__first, __last); - - while (__len != 0) { - auto __half_len = std::__half_positive(__len); - auto __mid = ranges::next(__first, __half_len); - - if (std::invoke(__pred, std::invoke(__proj, *__mid))) { - __first = ++__mid; - __len -= __half_len + 1; - - } else { - __len = __half_len; - } - } - - return __first; - } - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return __partition_point_fn_impl(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return __partition_point_fn_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto partition_point = __partition_point{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PARTITION_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_pop_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_pop_heap.h deleted file mode 100644 index eccf54c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_pop_heap.h +++ /dev/null @@ -1,82 +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___ALGORITHM_RANGES_POP_HEAP_H -#define _LIBCPP___ALGORITHM_RANGES_POP_HEAP_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/pop_heap.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __pop_heap { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __pop_heap_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - auto __len = __last_iter - __first; - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__pop_heap<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp, __len); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __pop_heap_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __pop_heap_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto pop_heap = __pop_heap{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_POP_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_prev_permutation.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_prev_permutation.h deleted file mode 100644 index f2294b1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_prev_permutation.h +++ /dev/null @@ -1,74 +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___ALGORITHM_RANGES_PREV_PERMUTATION_H -#define _LIBCPP___ALGORITHM_RANGES_PREV_PERMUTATION_H - -#include <__algorithm/in_found_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/prev_permutation.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using prev_permutation_result = in_found_result<_InIter>; - -struct __prev_permutation { - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr prev_permutation_result<_Iter> - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - auto __result = std::__prev_permutation<_RangeAlgPolicy>( - std::move(__first), std::move(__last), std::__make_projected(__comp, __proj)); - return {std::move(__result.first), std::move(__result.second)}; - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr prev_permutation_result> - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - auto __result = std::__prev_permutation<_RangeAlgPolicy>( - ranges::begin(__range), ranges::end(__range), std::__make_projected(__comp, __proj)); - return {std::move(__result.first), std::move(__result.second)}; - } -}; - -inline namespace __cpo { -constexpr inline auto prev_permutation = __prev_permutation{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PREV_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_push_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_push_heap.h deleted file mode 100644 index c5e0465..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_push_heap.h +++ /dev/null @@ -1,81 +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___ALGORITHM_RANGES_PUSH_HEAP_H -#define _LIBCPP___ALGORITHM_RANGES_PUSH_HEAP_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/push_heap.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __push_heap { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __push_heap_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__push_heap<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __push_heap_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __push_heap_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto push_heap = __push_heap{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_PUSH_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove.h deleted file mode 100644 index 6fbc49e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove.h +++ /dev/null @@ -1,66 +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___ALGORITHM_RANGES_REMOVE_H -#define _LIBCPP___ALGORITHM_RANGES_REMOVE_H -#include <__config> - -#include <__algorithm/ranges_remove_if.h> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/permutable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __remove { - template _Sent, class _Type, class _Proj = identity> - requires indirect_binary_predicate, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, const _Type& __value, _Proj __proj = {}) const { - auto __pred = [&](auto&& __other) -> bool { return __value == __other; }; - return ranges::__remove_if_impl(std::move(__first), std::move(__last), __pred, __proj); - } - - template - requires permutable> && - indirect_binary_predicate, _Proj>, const _Type*> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, const _Type& __value, _Proj __proj = {}) const { - auto __pred = [&](auto&& __other) -> bool { return __value == __other; }; - return ranges::__remove_if_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto remove = __remove{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REMOVE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy.h deleted file mode 100644 index 764c52e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy.h +++ /dev/null @@ -1,77 +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___ALGORITHM_RANGES_REMOVE_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_REMOVE_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/ranges_remove_copy_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using remove_copy_result = in_out_result<_InIter, _OutIter>; - -struct __remove_copy { - template _Sent, - weakly_incrementable _OutIter, - class _Type, - class _Proj = identity> - requires indirectly_copyable<_InIter, _OutIter> && - indirect_binary_predicate, const _Type*> - _LIBCPP_HIDE_FROM_ABI constexpr remove_copy_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result, const _Type& __value, _Proj __proj = {}) const { - auto __pred = [&](auto&& __val) -> bool { return __value == __val; }; - return ranges::__remove_copy_if_impl(std::move(__first), std::move(__last), std::move(__result), __pred, __proj); - } - - template - requires indirectly_copyable, _OutIter> && - indirect_binary_predicate, _Proj>, const _Type*> - _LIBCPP_HIDE_FROM_ABI constexpr remove_copy_result, _OutIter> - operator()(_Range&& __range, _OutIter __result, const _Type& __value, _Proj __proj = {}) const { - auto __pred = [&](auto&& __val) -> bool { return __value == __val; }; - return ranges::__remove_copy_if_impl( - ranges::begin(__range), ranges::end(__range), std::move(__result), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto remove_copy = __remove_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REMOVE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy_if.h deleted file mode 100644 index 87136ae..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_copy_if.h +++ /dev/null @@ -1,91 +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___ALGORITHM_RANGES_REMOVE_COPY_IF_H -#define _LIBCPP___ALGORITHM_RANGES_REMOVE_COPY_IF_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/remove_copy_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using remove_copy_if_result = in_out_result<_InIter, _OutIter>; - -template -_LIBCPP_HIDE_FROM_ABI constexpr in_out_result<_InIter, _OutIter> -__remove_copy_if_impl(_InIter __first, _Sent __last, _OutIter __result, _Pred& __pred, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (!std::invoke(__pred, std::invoke(__proj, *__first))) { - *__result = *__first; - ++__result; - } - } - return {std::move(__first), std::move(__result)}; -} - -struct __remove_copy_if { - template _Sent, - weakly_incrementable _OutIter, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires indirectly_copyable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr remove_copy_if_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result, _Pred __pred, _Proj __proj = {}) const { - return ranges::__remove_copy_if_impl(std::move(__first), std::move(__last), std::move(__result), __pred, __proj); - } - - template , _Proj>> _Pred> - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr remove_copy_if_result, _OutIter> - operator()(_Range&& __range, _OutIter __result, _Pred __pred, _Proj __proj = {}) const { - return ranges::__remove_copy_if_impl( - ranges::begin(__range), ranges::end(__range), std::move(__result), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto remove_copy_if = __remove_copy_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REMOVE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_if.h deleted file mode 100644 index 397959b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_remove_if.h +++ /dev/null @@ -1,86 +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___ALGORITHM_RANGES_REMOVE_IF_H -#define _LIBCPP___ALGORITHM_RANGES_REMOVE_IF_H -#include <__config> - -#include <__algorithm/find_if.h> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/iter_move.h> -#include <__iterator/permutable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -_LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> -__remove_if_impl(_Iter __first, _Sent __last, _Pred& __pred, _Proj& __proj) { - auto __new_end = std::__find_if(__first, __last, __pred, __proj); - if (__new_end == __last) - return {__new_end, __new_end}; - - _Iter __i = __new_end; - while (++__i != __last) { - if (!std::invoke(__pred, std::invoke(__proj, *__i))) { - *__new_end = ranges::iter_move(__i); - ++__new_end; - } - } - return {__new_end, __i}; -} - -struct __remove_if { - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return ranges::__remove_if_impl(std::move(__first), std::move(__last), __pred, __proj); - } - - template , _Proj>> _Pred> - requires permutable> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return ranges::__remove_if_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto remove_if = __remove_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REMOVE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace.h deleted file mode 100644 index 15b1f38..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace.h +++ /dev/null @@ -1,66 +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___ALGORITHM_RANGES_REPLACE_H -#define _LIBCPP___ALGORITHM_RANGES_REPLACE_H - -#include <__algorithm/ranges_replace_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __replace { - template _Sent, class _Type1, class _Type2, class _Proj = identity> - requires indirectly_writable<_Iter, const _Type2&> && - indirect_binary_predicate, const _Type1*> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter operator()( - _Iter __first, _Sent __last, const _Type1& __old_value, const _Type2& __new_value, _Proj __proj = {}) const { - auto __pred = [&](const auto& __val) -> bool { return __val == __old_value; }; - return ranges::__replace_if_impl(std::move(__first), std::move(__last), __pred, __new_value, __proj); - } - - template - requires indirectly_writable, const _Type2&> && - indirect_binary_predicate, _Proj>, const _Type1*> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, const _Type1& __old_value, const _Type2& __new_value, _Proj __proj = {}) const { - auto __pred = [&](auto&& __val) -> bool { return __val == __old_value; }; - return ranges::__replace_if_impl(ranges::begin(__range), ranges::end(__range), __pred, __new_value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto replace = __replace{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REPLACE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy.h deleted file mode 100644 index 7ab1c71..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy.h +++ /dev/null @@ -1,89 +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___ALGORITHM_RANGES_REPLACE_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_REPLACE_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/ranges_replace_copy_if.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using replace_copy_result = in_out_result<_InIter, _OutIter>; - -struct __replace_copy { - template _Sent, - class _OldType, - class _NewType, - output_iterator _OutIter, - class _Proj = identity> - requires indirectly_copyable<_InIter, _OutIter> && - indirect_binary_predicate, const _OldType*> - _LIBCPP_HIDE_FROM_ABI constexpr replace_copy_result<_InIter, _OutIter> - operator()(_InIter __first, - _Sent __last, - _OutIter __result, - const _OldType& __old_value, - const _NewType& __new_value, - _Proj __proj = {}) const { - auto __pred = [&](const auto& __value) -> bool { return __value == __old_value; }; - return ranges::__replace_copy_if_impl( - std::move(__first), std::move(__last), std::move(__result), __pred, __new_value, __proj); - } - - template _OutIter, - class _Proj = identity> - requires indirectly_copyable, _OutIter> && - indirect_binary_predicate, _Proj>, const _OldType*> - _LIBCPP_HIDE_FROM_ABI constexpr replace_copy_result, _OutIter> operator()( - _Range&& __range, _OutIter __result, const _OldType& __old_value, const _NewType& __new_value, _Proj __proj = {}) - const { - auto __pred = [&](const auto& __value) -> bool { return __value == __old_value; }; - return ranges::__replace_copy_if_impl( - ranges::begin(__range), ranges::end(__range), std::move(__result), __pred, __new_value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto replace_copy = __replace_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REPLACE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy_if.h deleted file mode 100644 index 852ec45..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_copy_if.h +++ /dev/null @@ -1,94 +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___ALGORITHM_RANGES_REPLACE_COPY_IF_H -#define _LIBCPP___ALGORITHM_RANGES_REPLACE_COPY_IF_H - -#include <__algorithm/in_out_result.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using replace_copy_if_result = in_out_result<_InIter, _OutIter>; - -template -_LIBCPP_HIDE_FROM_ABI constexpr replace_copy_if_result<_InIter, _OutIter> __replace_copy_if_impl( - _InIter __first, _Sent __last, _OutIter __result, _Pred& __pred, const _Type& __new_value, _Proj& __proj) { - while (__first != __last) { - if (std::invoke(__pred, std::invoke(__proj, *__first))) - *__result = __new_value; - else - *__result = *__first; - - ++__first; - ++__result; - } - - return {std::move(__first), std::move(__result)}; -} - -struct __replace_copy_if { - template _Sent, - class _Type, - output_iterator _OutIter, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires indirectly_copyable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr replace_copy_if_result<_InIter, _OutIter> operator()( - _InIter __first, _Sent __last, _OutIter __result, _Pred __pred, const _Type& __new_value, _Proj __proj = {}) - const { - return ranges::__replace_copy_if_impl( - std::move(__first), std::move(__last), std::move(__result), __pred, __new_value, __proj); - } - - template _OutIter, - class _Proj = identity, - indirect_unary_predicate, _Proj>> _Pred> - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr replace_copy_if_result, _OutIter> - operator()(_Range&& __range, _OutIter __result, _Pred __pred, const _Type& __new_value, _Proj __proj = {}) const { - return ranges::__replace_copy_if_impl( - ranges::begin(__range), ranges::end(__range), std::move(__result), __pred, __new_value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto replace_copy_if = __replace_copy_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REPLACE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_if.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_if.h deleted file mode 100644 index baa5668..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_replace_if.h +++ /dev/null @@ -1,79 +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___ALGORITHM_RANGES_REPLACE_IF_H -#define _LIBCPP___ALGORITHM_RANGES_REPLACE_IF_H - -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -_LIBCPP_HIDE_FROM_ABI constexpr _Iter -__replace_if_impl(_Iter __first, _Sent __last, _Pred& __pred, const _Type& __new_value, _Proj& __proj) { - for (; __first != __last; ++__first) { - if (std::invoke(__pred, std::invoke(__proj, *__first))) - *__first = __new_value; - } - return __first; -} - -struct __replace_if { - template _Sent, - class _Type, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires indirectly_writable<_Iter, const _Type&> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Pred __pred, const _Type& __new_value, _Proj __proj = {}) const { - return ranges::__replace_if_impl(std::move(__first), std::move(__last), __pred, __new_value, __proj); - } - - template , _Proj>> _Pred> - requires indirectly_writable, const _Type&> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __range, _Pred __pred, const _Type& __new_value, _Proj __proj = {}) const { - return ranges::__replace_if_impl(ranges::begin(__range), ranges::end(__range), __pred, __new_value, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto replace_if = __replace_if{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REPLACE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse.h deleted file mode 100644 index 4e82118..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse.h +++ /dev/null @@ -1,77 +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___ALGORITHM_RANGES_REVERSE_H -#define _LIBCPP___ALGORITHM_RANGES_REVERSE_H - -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iter_swap.h> -#include <__iterator/next.h> -#include <__iterator/permutable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 { -struct __reverse { - template _Sent> - requires permutable<_Iter> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter operator()(_Iter __first, _Sent __last) const { - if constexpr (random_access_iterator<_Iter>) { - if (__first == __last) - return __first; - - auto __end = ranges::next(__first, __last); - auto __ret = __end; - - while (__first < --__end) { - ranges::iter_swap(__first, __end); - ++__first; - } - return __ret; - } else { - auto __end = ranges::next(__first, __last); - auto __ret = __end; - - while (__first != __end) { - if (__first == --__end) - break; - - ranges::iter_swap(__first, __end); - ++__first; - } - return __ret; - } - } - - template - requires permutable> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> operator()(_Range&& __range) const { - return (*this)(ranges::begin(__range), ranges::end(__range)); - } -}; - -inline namespace __cpo { -inline constexpr auto reverse = __reverse{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_REVERSE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse_copy.h deleted file mode 100644 index 9fedab5..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_reverse_copy.h +++ /dev/null @@ -1,69 +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___ALGORITHM_RANGES_REVERSE_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_REVERSE_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/ranges_copy.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/next.h> -#include <__iterator/reverse_iterator.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__ranges/reverse_view.h> -#include <__ranges/subrange.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using reverse_copy_result = in_out_result<_InIter, _OutIter>; - -struct __reverse_copy { - template _Sent, weakly_incrementable _OutIter> - requires indirectly_copyable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr reverse_copy_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result) const { - return (*this)(subrange(std::move(__first), std::move(__last)), std::move(__result)); - } - - template - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr reverse_copy_result, _OutIter> - operator()(_Range&& __range, _OutIter __result) const { - auto __ret = ranges::copy(__range | views::reverse, std::move(__result)); - return {ranges::next(ranges::begin(__range), ranges::end(__range)), std::move(__ret.out)}; - } -}; - -inline namespace __cpo { -inline constexpr auto reverse_copy = __reverse_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_REVERSE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate.h deleted file mode 100644 index c1affc6..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate.h +++ /dev/null @@ -1,67 +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___ALGORITHM_RANGES_ROTATE_H -#define _LIBCPP___ALGORITHM_RANGES_ROTATE_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/ranges_iterator_concept.h> -#include <__algorithm/rotate.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/permutable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __rotate { - template - _LIBCPP_HIDE_FROM_ABI constexpr static subrange<_Iter> __rotate_fn_impl(_Iter __first, _Iter __middle, _Sent __last) { - auto __ret = std::__rotate<_RangeAlgPolicy>(std::move(__first), std::move(__middle), std::move(__last)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template _Sent> - _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> operator()(_Iter __first, _Iter __middle, _Sent __last) const { - return __rotate_fn_impl(std::move(__first), std::move(__middle), std::move(__last)); - } - - template - requires permutable> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, iterator_t<_Range> __middle) const { - return __rotate_fn_impl(ranges::begin(__range), std::move(__middle), ranges::end(__range)); - } -}; - -inline namespace __cpo { -inline constexpr auto rotate = __rotate{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ROTATE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate_copy.h deleted file mode 100644 index c0b4264..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_rotate_copy.h +++ /dev/null @@ -1,66 +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___ALGORITHM_RANGES_ROTATE_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_ROTATE_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/ranges_copy.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using rotate_copy_result = in_out_result<_InIter, _OutIter>; - -struct __rotate_copy { - template _Sent, weakly_incrementable _OutIter> - requires indirectly_copyable<_InIter, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr rotate_copy_result<_InIter, _OutIter> - operator()(_InIter __first, _InIter __middle, _Sent __last, _OutIter __result) const { - auto __res1 = ranges::copy(__middle, __last, std::move(__result)); - auto __res2 = ranges::copy(__first, __middle, std::move(__res1.out)); - return {std::move(__res1.in), std::move(__res2.out)}; - } - - template - requires indirectly_copyable, _OutIter> - _LIBCPP_HIDE_FROM_ABI constexpr rotate_copy_result, _OutIter> - operator()(_Range&& __range, iterator_t<_Range> __middle, _OutIter __result) const { - return (*this)(ranges::begin(__range), std::move(__middle), ranges::end(__range), std::move(__result)); - } -}; - -inline namespace __cpo { -inline constexpr auto rotate_copy = __rotate_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_ROTATE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sample.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_sample.h deleted file mode 100644 index a3b2960..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sample.h +++ /dev/null @@ -1,70 +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___ALGORITHM_RANGES_SAMPLE_H -#define _LIBCPP___ALGORITHM_RANGES_SAMPLE_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/sample.h> -#include <__algorithm/uniform_random_bit_generator_adaptor.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/iterator_traits.h> -#include <__random/uniform_random_bit_generator.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __sample { - template _Sent, weakly_incrementable _OutIter, class _Gen> - requires(forward_iterator<_Iter> || random_access_iterator<_OutIter>) && indirectly_copyable<_Iter, _OutIter> && - uniform_random_bit_generator> - _LIBCPP_HIDE_FROM_ABI _OutIter - operator()(_Iter __first, _Sent __last, _OutIter __out_first, iter_difference_t<_Iter> __n, _Gen&& __gen) const { - _ClassicGenAdaptor<_Gen> __adapted_gen(__gen); - return std::__sample<_RangeAlgPolicy>( - std::move(__first), std::move(__last), std::move(__out_first), __n, __adapted_gen); - } - - template - requires(forward_range<_Range> || random_access_iterator<_OutIter>) && - indirectly_copyable, _OutIter> && uniform_random_bit_generator> - _LIBCPP_HIDE_FROM_ABI _OutIter - operator()(_Range&& __range, _OutIter __out_first, range_difference_t<_Range> __n, _Gen&& __gen) const { - return (*this)( - ranges::begin(__range), ranges::end(__range), std::move(__out_first), __n, std::forward<_Gen>(__gen)); - } -}; - -inline namespace __cpo { -inline constexpr auto sample = __sample{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SAMPLE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_search.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_search.h deleted file mode 100644 index b711512..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_search.h +++ /dev/null @@ -1,132 +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___ALGORITHM_RANGES_SEARCH_H -#define _LIBCPP___ALGORITHM_RANGES_SEARCH_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/search.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/advance.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/indirectly_comparable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/size.h> -#include <__ranges/subrange.h> -#include <__utility/pair.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 { -struct __search { - template - _LIBCPP_HIDE_FROM_ABI static constexpr subrange<_Iter1> __ranges_search_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2) { - if constexpr (sized_sentinel_for<_Sent2, _Iter2>) { - auto __size2 = ranges::distance(__first2, __last2); - if (__size2 == 0) - return {__first1, __first1}; - - if constexpr (sized_sentinel_for<_Sent1, _Iter1>) { - auto __size1 = ranges::distance(__first1, __last1); - if (__size1 < __size2) { - ranges::advance(__first1, __last1); - return {__first1, __first1}; - } - - if constexpr (random_access_iterator<_Iter1> && random_access_iterator<_Iter2>) { - auto __ret = std::__search_random_access_impl<_RangeAlgPolicy>( - __first1, __last1, __first2, __last2, __pred, __proj1, __proj2, __size1, __size2); - return {__ret.first, __ret.second}; - } - } - } - - auto __ret = - std::__search_forward_impl<_RangeAlgPolicy>(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2); - return {__ret.first, __ret.second}; - } - - template _Sent1, - forward_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter1> operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - return __ranges_search_impl(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2); - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range1> operator()( - _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const { - auto __first1 = ranges::begin(__range1); - if constexpr (sized_range<_Range2>) { - auto __size2 = ranges::size(__range2); - if (__size2 == 0) - return {__first1, __first1}; - if constexpr (sized_range<_Range1>) { - auto __size1 = ranges::size(__range1); - if (__size1 < __size2) { - ranges::advance(__first1, ranges::end(__range1)); - return {__first1, __first1}; - } - } - } - - return __ranges_search_impl( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2); - } -}; - -inline namespace __cpo { -inline constexpr auto search = __search{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_search_n.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_search_n.h deleted file mode 100644 index 746bfcc..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_search_n.h +++ /dev/null @@ -1,114 +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___ALGORITHM_RANGES_SEARCH_N_H -#define _LIBCPP___ALGORITHM_RANGES_SEARCH_N_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/search_n.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/advance.h> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/indirectly_comparable.h> -#include <__iterator/iterator_traits.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/size.h> -#include <__ranges/subrange.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __search_n { - template - _LIBCPP_HIDE_FROM_ABI static constexpr subrange<_Iter1> __ranges_search_n_impl( - _Iter1 __first, _Sent1 __last, _SizeT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - if (__count == 0) - return {__first, __first}; - - if constexpr (sized_sentinel_for<_Sent1, _Iter1>) { - auto __size = ranges::distance(__first, __last); - if (__size < __count) { - ranges::advance(__first, __last); - return {__first, __first}; - } - - if constexpr (random_access_iterator<_Iter1>) { - auto __ret = - std::__search_n_random_access_impl<_RangeAlgPolicy>(__first, __count, __value, __pred, __proj, __size); - return {std::move(__ret.first), std::move(__ret.second)}; - } - } - - auto __ret = std::__search_n_forward_impl<_RangeAlgPolicy>(__first, __last, __count, __value, __pred, __proj); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template _Sent, - class _Type, - class _Pred = ranges::equal_to, - class _Proj = identity> - requires indirectly_comparable<_Iter, const _Type*, _Pred, _Proj> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, - _Sent __last, - iter_difference_t<_Iter> __count, - const _Type& __value, - _Pred __pred = {}, - _Proj __proj = _Proj{}) const { - return __ranges_search_n_impl(__first, __last, __count, __value, __pred, __proj); - } - - template - requires indirectly_comparable, const _Type*, _Pred, _Proj> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> operator()( - _Range&& __range, range_difference_t<_Range> __count, const _Type& __value, _Pred __pred = {}, _Proj __proj = {}) - const { - auto __first = ranges::begin(__range); - if (__count <= 0) - return {__first, __first}; - if constexpr (sized_range<_Range>) { - auto __size1 = ranges::size(__range); - if (__size1 < static_cast>(__count)) { - ranges::advance(__first, ranges::end(__range)); - return {__first, __first}; - } - } - - return __ranges_search_n_impl(ranges::begin(__range), ranges::end(__range), __count, __value, __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto search_n = __search_n{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SEARCH_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_difference.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_difference.h deleted file mode 100644 index 1c83c7b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_difference.h +++ /dev/null @@ -1,104 +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___ALGORITHM_RANGES_SET_DIFFERENCE_H -#define _LIBCPP___ALGORITHM_RANGES_SET_DIFFERENCE_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/set_difference.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/mergeable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__type_traits/decay.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using set_difference_result = in_out_result<_InIter, _OutIter>; - -struct __set_difference { - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - class _Comp = less, - class _Proj1 = identity, - class _Proj2 = identity> - requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_difference_result<_InIter1, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_difference( - __first1, __last1, __first2, __last2, __result, ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template - requires mergeable, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_difference_result, _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_difference( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __result, - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto set_difference = __set_difference{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SET_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_intersection.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_intersection.h deleted file mode 100644 index 068794c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_intersection.h +++ /dev/null @@ -1,110 +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___ALGORITHM_RANGES_SET_INTERSECTION_H -#define _LIBCPP___ALGORITHM_RANGES_SET_INTERSECTION_H - -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/set_intersection.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/mergeable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using set_intersection_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; - -struct __set_intersection { - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - class _Comp = less, - class _Proj1 = identity, - class _Proj2 = identity> - requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_intersection_result<_InIter1, _InIter2, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_intersection<_RangeAlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } - - template - requires mergeable, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_intersection_result, - borrowed_iterator_t<_Range2>, - _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_intersection<_RangeAlgPolicy>( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } -}; - -inline namespace __cpo { -inline constexpr auto set_intersection = __set_intersection{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SET_INTERSECTION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_symmetric_difference.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_symmetric_difference.h deleted file mode 100644 index c0a8140..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_symmetric_difference.h +++ /dev/null @@ -1,109 +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___ALGORITHM_RANGES_SET_SYMMETRIC_DIFFERENCE_H -#define _LIBCPP___ALGORITHM_RANGES_SET_SYMMETRIC_DIFFERENCE_H - -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/set_symmetric_difference.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/mergeable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using set_symmetric_difference_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; - -struct __set_symmetric_difference { - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - class _Comp = ranges::less, - class _Proj1 = identity, - class _Proj2 = identity> - requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_symmetric_difference_result<_InIter1, _InIter2, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_symmetric_difference( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } - - template - requires mergeable, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_symmetric_difference_result, - borrowed_iterator_t<_Range2>, - _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_symmetric_difference( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } -}; - -inline namespace __cpo { -inline constexpr auto set_symmetric_difference = __set_symmetric_difference{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SET_SYMMETRIC_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_union.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_union.h deleted file mode 100644 index 039ffb5..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_set_union.h +++ /dev/null @@ -1,110 +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___ALGORITHM_RANGES_SET_UNION_H -#define _LIBCPP___ALGORITHM_RANGES_SET_UNION_H - -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/set_union.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/mergeable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using set_union_result = in_in_out_result<_InIter1, _InIter2, _OutIter>; - -struct __set_union { - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - class _Comp = ranges::less, - class _Proj1 = identity, - class _Proj2 = identity> - requires mergeable<_InIter1, _InIter2, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_union_result<_InIter1, _InIter2, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_union( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } - - template - requires mergeable, iterator_t<_Range2>, _OutIter, _Comp, _Proj1, _Proj2> - _LIBCPP_HIDE_FROM_ABI constexpr set_union_result, borrowed_iterator_t<_Range2>, _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Comp __comp = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) const { - auto __ret = std::__set_union( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - std::move(__result), - ranges::__make_projected_comp(__comp, __proj1, __proj2)); - return {std::move(__ret.__in1_), std::move(__ret.__in2_), std::move(__ret.__out_)}; - } -}; - -inline namespace __cpo { -inline constexpr auto set_union = __set_union{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SET_UNION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_left.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_left.h deleted file mode 100644 index 7d49482..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_left.h +++ /dev/null @@ -1,73 +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___ALGORITHM_RANGES_SHIFT_LEFT_H -#define _LIBCPP___ALGORITHM_RANGES_SHIFT_LEFT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/shift_left.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/permutable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 { -namespace __shift_left { - -struct __fn { - template _Sent> - _LIBCPP_HIDE_FROM_ABI static constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, iter_difference_t<_Iter> __n) { - auto __ret = std::__shift_left<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::move(__n)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template - requires permutable> - _LIBCPP_HIDE_FROM_ABI static constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, range_difference_t<_Range> __n) { - if constexpr (sized_range<_Range>) { - if (__n >= ranges::distance(__range)) { - return {ranges::begin(__range), ranges::begin(__range)}; - } - } - - auto __ret = std::__shift_left<_RangeAlgPolicy>(ranges::begin(__range), ranges::end(__range), std::move(__n)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; -} // namespace __shift_left - -inline namespace __cpo { -inline constexpr auto shift_left = __shift_left::__fn{}; -} // namespace __cpo -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SHIFT_LEFT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_right.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_right.h deleted file mode 100644 index d3521b9..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shift_right.h +++ /dev/null @@ -1,76 +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___ALGORITHM_RANGES_SHIFT_RIGHT_H -#define _LIBCPP___ALGORITHM_RANGES_SHIFT_RIGHT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/shift_right.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/distance.h> -#include <__iterator/incrementable_traits.h> -#include <__iterator/permutable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/subrange.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 { -namespace __shift_right { - -struct __fn { - template _Sent> - _LIBCPP_HIDE_FROM_ABI static constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, iter_difference_t<_Iter> __n) { - auto __ret = std::__shift_right<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::move(__n)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template - requires permutable> - _LIBCPP_HIDE_FROM_ABI static constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, range_difference_t<_Range> __n) { - if constexpr (sized_range<_Range>) { - if (__n >= ranges::distance(__range)) { - auto __iter = ranges::begin(__range); - auto __end = ranges::end(__range); - ranges::advance(__iter, __end); - return {__iter, std::move(__iter)}; - } - } - - auto __ret = std::__shift_right<_RangeAlgPolicy>(ranges::begin(__range), ranges::end(__range), std::move(__n)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; -} // namespace __shift_right - -inline namespace __cpo { -inline constexpr auto shift_right = __shift_right::__fn{}; -} // namespace __cpo -} // namespace ranges - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SHIFT_RIGHT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shuffle.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_shuffle.h deleted file mode 100644 index 87cb368..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_shuffle.h +++ /dev/null @@ -1,68 +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___ALGORITHM_RANGES_SHUFFLE_H -#define _LIBCPP___ALGORITHM_RANGES_SHUFFLE_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/shuffle.h> -#include <__algorithm/uniform_random_bit_generator_adaptor.h> -#include <__config> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/permutable.h> -#include <__random/uniform_random_bit_generator.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __shuffle { - template _Sent, class _Gen> - requires permutable<_Iter> && uniform_random_bit_generator> - _LIBCPP_HIDE_FROM_ABI _Iter operator()(_Iter __first, _Sent __last, _Gen&& __gen) const { - _ClassicGenAdaptor<_Gen> __adapted_gen(__gen); - return std::__shuffle<_RangeAlgPolicy>(std::move(__first), std::move(__last), __adapted_gen); - } - - template - requires permutable> && uniform_random_bit_generator> - _LIBCPP_HIDE_FROM_ABI borrowed_iterator_t<_Range> operator()(_Range&& __range, _Gen&& __gen) const { - return (*this)(ranges::begin(__range), ranges::end(__range), std::forward<_Gen>(__gen)); - } -}; - -inline namespace __cpo { -inline constexpr auto shuffle = __shuffle{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SHUFFLE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort.h deleted file mode 100644 index 2afad4c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort.h +++ /dev/null @@ -1,80 +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___ALGORITHM_RANGES_SORT_H -#define _LIBCPP___ALGORITHM_RANGES_SORT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/sort.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __sort { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __sort_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__sort_impl<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __sort_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __sort_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto sort = __sort{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort_heap.h deleted file mode 100644 index d3e2087..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_sort_heap.h +++ /dev/null @@ -1,81 +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___ALGORITHM_RANGES_SORT_HEAP_H -#define _LIBCPP___ALGORITHM_RANGES_SORT_HEAP_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/sort_heap.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __sort_heap { - template - _LIBCPP_HIDE_FROM_ABI constexpr static _Iter - __sort_heap_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__sort_heap<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __sort_heap_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __sort_heap_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto sort_heap = __sort_heap{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SORT_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_partition.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_partition.h deleted file mode 100644 index d8cfc8d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_partition.h +++ /dev/null @@ -1,89 +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___ALGORITHM_RANGES_STABLE_PARTITION_H -#define _LIBCPP___ALGORITHM_RANGES_STABLE_PARTITION_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/ranges_iterator_concept.h> -#include <__algorithm/stable_partition.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/permutable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__ranges/subrange.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> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __stable_partition { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX26 subrange<__remove_cvref_t<_Iter>> - __stable_partition_fn_impl(_Iter&& __first, _Sent&& __last, _Pred&& __pred, _Proj&& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_pred = std::__make_projected(__pred, __proj); - auto __result = std::__stable_partition<_RangeAlgPolicy>( - std::move(__first), __last_iter, __projected_pred, __iterator_concept<_Iter>()); - - return {std::move(__result), std::move(__last_iter)}; - } - - template _Sent, - class _Proj = identity, - indirect_unary_predicate> _Pred> - requires permutable<_Iter> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Pred __pred, _Proj __proj = {}) const { - return __stable_partition_fn_impl(__first, __last, __pred, __proj); - } - - template , _Proj>> _Pred> - requires permutable> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Pred __pred, _Proj __proj = {}) const { - return __stable_partition_fn_impl(ranges::begin(__range), ranges::end(__range), __pred, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto stable_partition = __stable_partition{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_STABLE_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_sort.h deleted file mode 100644 index 6e17d0d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_stable_sort.h +++ /dev/null @@ -1,80 +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___ALGORITHM_RANGES_STABLE_SORT_H -#define _LIBCPP___ALGORITHM_RANGES_STABLE_SORT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/stable_sort.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__iterator/projected.h> -#include <__iterator/sortable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __stable_sort { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX26 _Iter - __stable_sort_fn_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __last_iter = ranges::next(__first, __last); - - auto&& __projected_comp = std::__make_projected(__comp, __proj); - std::__stable_sort_impl<_RangeAlgPolicy>(std::move(__first), __last_iter, __projected_comp); - - return __last_iter; - } - - template _Sent, class _Comp = ranges::less, class _Proj = identity> - requires sortable<_Iter, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _Iter - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - return __stable_sort_fn_impl(std::move(__first), std::move(__last), __comp, __proj); - } - - template - requires sortable, _Comp, _Proj> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 borrowed_iterator_t<_Range> - operator()(_Range&& __r, _Comp __comp = {}, _Proj __proj = {}) const { - return __stable_sort_fn_impl(ranges::begin(__r), ranges::end(__r), __comp, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto stable_sort = __stable_sort{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_STABLE_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_starts_with.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_starts_with.h deleted file mode 100644 index ae145d5..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_starts_with.h +++ /dev/null @@ -1,93 +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___ALGORITHM_RANGES_STARTS_WITH_H -#define _LIBCPP___ALGORITHM_RANGES_STARTS_WITH_H - -#include <__algorithm/in_in_result.h> -#include <__algorithm/ranges_mismatch.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/indirectly_comparable.h> -#include <__ranges/access.h> -#include <__ranges/concepts.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 { -struct __starts_with { - template _Sent1, - input_iterator _Iter2, - sentinel_for<_Iter2> _Sent2, - class _Pred = ranges::equal_to, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr bool operator()( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred __pred = {}, - _Proj1 __proj1 = {}, - _Proj2 __proj2 = {}) { - return __mismatch::__go( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2) - .in2 == __last2; - } - - template - requires indirectly_comparable, iterator_t<_Range2>, _Pred, _Proj1, _Proj2> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr bool - operator()(_Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) { - return __mismatch::__go( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - __pred, - __proj1, - __proj2) - .in2 == ranges::end(__range2); - } -}; -inline namespace __cpo { -inline constexpr auto starts_with = __starts_with{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_STARTS_WITH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_swap_ranges.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_swap_ranges.h deleted file mode 100644 index d24636b..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_swap_ranges.h +++ /dev/null @@ -1,95 +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___ALGORITHM_RANGES_SWAP_RANGES_H -#define _LIBCPP___ALGORITHM_RANGES_SWAP_RANGES_H - -#include <__algorithm/in_in_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__algorithm/swap_ranges.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iter_swap.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__type_traits/is_same.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using swap_ranges_result = in_in_result<_I1, _I2>; - -struct __swap_ranges { - template _S1, input_iterator _I2, sentinel_for<_I2> _S2> - requires indirectly_swappable<_I1, _I2> - _LIBCPP_HIDE_FROM_ABI constexpr swap_ranges_result<_I1, _I2> - operator()(_I1 __first1, _S1 __last1, _I2 __first2, _S2 __last2) const { - if constexpr (sized_sentinel_for<_I1, _S1> && sized_sentinel_for<_I2, _S2> && - (random_access_iterator<_I1> || random_access_iterator<_I2> || - (is_same_v<_I1, _S1> && is_same_v<_I2, _S2>))) { - auto __offset = std::min(__last1 - __first1, __last2 - __first2); - - auto __ret = [&] { - if constexpr (random_access_iterator<_I1>) - return std::__swap_ranges<_RangeAlgPolicy>(__first1, __first1 + __offset, std::move(__first2)); - else if constexpr (random_access_iterator<_I2>) - return std::__swap_ranges<_RangeAlgPolicy>(__first2, __first2 + __offset, std::move(__first1)); - else if (__last2 - __first2 < __last1 - __first1) { - auto __reversed = - std::__swap_ranges<_RangeAlgPolicy>(std::move(__first2), std::move(__last2), std::move(__first1)); - return std::pair<_I1, _I2>(std::move(__reversed.second), std::move(__reversed.first)); - } else - return std::__swap_ranges<_RangeAlgPolicy>(std::move(__first1), std::move(__last1), std::move(__first2)); - }(); - return {std::move(__ret.first), std::move(__ret.second)}; - } else { - while (__first1 != __last1 && __first2 != __last2) { - ranges::iter_swap(__first1, __first2); - ++__first1; - ++__first2; - } - - return {std::move(__first1), std::move(__first2)}; - } - } - - template - requires indirectly_swappable, iterator_t<_R2>> - _LIBCPP_HIDE_FROM_ABI constexpr swap_ranges_result, borrowed_iterator_t<_R2>> - operator()(_R1&& __r1, _R2&& __r2) const { - return operator()(ranges::begin(__r1), ranges::end(__r1), ranges::begin(__r2), ranges::end(__r2)); - } -}; - -inline namespace __cpo { -inline constexpr auto swap_ranges = __swap_ranges{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_SWAP_RANGES_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_transform.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_transform.h deleted file mode 100644 index 0913118..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_transform.h +++ /dev/null @@ -1,175 +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___ALGORITHM_RANGES_TRANSFORM_H -#define _LIBCPP___ALGORITHM_RANGES_TRANSFORM_H - -#include <__algorithm/in_in_out_result.h> -#include <__algorithm/in_out_result.h> -#include <__concepts/constructible.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using unary_transform_result = in_out_result<_Ip, _Op>; - -template -using binary_transform_result = in_in_out_result<_I1, _I2, _O1>; - -struct __transform { -private: - template - _LIBCPP_HIDE_FROM_ABI static constexpr unary_transform_result<_InIter, _OutIter> - __unary(_InIter __first, _Sent __last, _OutIter __result, _Func& __operation, _Proj& __projection) { - while (__first != __last) { - *__result = std::invoke(__operation, std::invoke(__projection, *__first)); - ++__first; - ++__result; - } - - return {std::move(__first), std::move(__result)}; - } - - template - _LIBCPP_HIDE_FROM_ABI static constexpr binary_transform_result<_InIter1, _InIter2, _OutIter> - __binary(_InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Func& __binary_operation, - _Proj1& __projection1, - _Proj2& __projection2) { - while (__first1 != __last1 && __first2 != __last2) { - *__result = - std::invoke(__binary_operation, std::invoke(__projection1, *__first1), std::invoke(__projection2, *__first2)); - ++__first1; - ++__first2; - ++__result; - } - return {std::move(__first1), std::move(__first2), std::move(__result)}; - } - -public: - template _Sent, - weakly_incrementable _OutIter, - copy_constructible _Func, - class _Proj = identity> - requires indirectly_writable<_OutIter, indirect_result_t<_Func&, projected<_InIter, _Proj>>> - _LIBCPP_HIDE_FROM_ABI constexpr unary_transform_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result, _Func __operation, _Proj __proj = {}) const { - return __unary(std::move(__first), std::move(__last), std::move(__result), __operation, __proj); - } - - template - requires indirectly_writable<_OutIter, indirect_result_t<_Func, projected, _Proj>>> - _LIBCPP_HIDE_FROM_ABI constexpr unary_transform_result, _OutIter> - operator()(_Range&& __range, _OutIter __result, _Func __operation, _Proj __projection = {}) const { - return __unary(ranges::begin(__range), ranges::end(__range), std::move(__result), __operation, __projection); - } - - template _Sent1, - input_iterator _InIter2, - sentinel_for<_InIter2> _Sent2, - weakly_incrementable _OutIter, - copy_constructible _Func, - class _Proj1 = identity, - class _Proj2 = identity> - requires indirectly_writable<_OutIter, - indirect_result_t<_Func&, projected<_InIter1, _Proj1>, projected<_InIter2, _Proj2>>> - _LIBCPP_HIDE_FROM_ABI constexpr binary_transform_result<_InIter1, _InIter2, _OutIter> operator()( - _InIter1 __first1, - _Sent1 __last1, - _InIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Func __binary_operation, - _Proj1 __projection1 = {}, - _Proj2 __projection2 = {}) const { - return __binary( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __binary_operation, - __projection1, - __projection2); - } - - template - requires indirectly_writable< - _OutIter, - indirect_result_t<_Func&, projected, _Proj1>, projected, _Proj2>>> - _LIBCPP_HIDE_FROM_ABI constexpr binary_transform_result, - borrowed_iterator_t<_Range2>, - _OutIter> - operator()(_Range1&& __range1, - _Range2&& __range2, - _OutIter __result, - _Func __binary_operation, - _Proj1 __projection1 = {}, - _Proj2 __projection2 = {}) const { - return __binary( - ranges::begin(__range1), - ranges::end(__range1), - ranges::begin(__range2), - ranges::end(__range2), - std::move(__result), - __binary_operation, - __projection1, - __projection2); - } -}; - -inline namespace __cpo { -inline constexpr auto transform = __transform{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_TRANSFORM_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique.h deleted file mode 100644 index a817359..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique.h +++ /dev/null @@ -1,78 +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___ALGORITHM_RANGES_UNIQUE_H -#define _LIBCPP___ALGORITHM_RANGES_UNIQUE_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/unique.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/permutable.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__ranges/subrange.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { -struct __unique { - template _Sent, - class _Proj = identity, - indirect_equivalence_relation> _Comp = ranges::equal_to> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr subrange<_Iter> - operator()(_Iter __first, _Sent __last, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = - std::__unique<_RangeAlgPolicy>(std::move(__first), std::move(__last), std::__make_projected(__comp, __proj)); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template , _Proj>> _Comp = ranges::equal_to> - requires permutable> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_subrange_t<_Range> - operator()(_Range&& __range, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__unique<_RangeAlgPolicy>( - ranges::begin(__range), ranges::end(__range), std::__make_projected(__comp, __proj)); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto unique = __unique{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_UNIQUE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique_copy.h deleted file mode 100644 index ee7f0a0..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_unique_copy.h +++ /dev/null @@ -1,116 +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___ALGORITHM_RANGES_UNIQUE_COPY_H -#define _LIBCPP___ALGORITHM_RANGES_UNIQUE_COPY_H - -#include <__algorithm/in_out_result.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/make_projected.h> -#include <__algorithm/unique_copy.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace ranges { - -template -using unique_copy_result = in_out_result<_InIter, _OutIter>; - -template -concept __can_reread_from_output = (input_iterator<_OutIter> && same_as, iter_value_t<_OutIter>>); - -struct __unique_copy { - template - static consteval auto __get_algo_tag() { - if constexpr (forward_iterator<_InIter>) { - return __unique_copy_tags::__reread_from_input_tag{}; - } else if constexpr (__can_reread_from_output<_InIter, _OutIter>) { - return __unique_copy_tags::__reread_from_output_tag{}; - } else if constexpr (indirectly_copyable_storable<_InIter, _OutIter>) { - return __unique_copy_tags::__read_from_tmp_value_tag{}; - } - } - - template - using __algo_tag_t _LIBCPP_NODEBUG = decltype(__get_algo_tag<_InIter, _OutIter>()); - - template _Sent, - weakly_incrementable _OutIter, - class _Proj = identity, - indirect_equivalence_relation> _Comp = ranges::equal_to> - requires indirectly_copyable<_InIter, _OutIter> && - (forward_iterator<_InIter> || - (input_iterator<_OutIter> && same_as, iter_value_t<_OutIter>>) || - indirectly_copyable_storable<_InIter, _OutIter>) - _LIBCPP_HIDE_FROM_ABI constexpr unique_copy_result<_InIter, _OutIter> - operator()(_InIter __first, _Sent __last, _OutIter __result, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__unique_copy<_RangeAlgPolicy>( - std::move(__first), - std::move(__last), - std::move(__result), - std::__make_projected(__comp, __proj), - __algo_tag_t<_InIter, _OutIter>()); - return {std::move(__ret.first), std::move(__ret.second)}; - } - - template , _Proj>> _Comp = ranges::equal_to> - requires indirectly_copyable, _OutIter> && - (forward_iterator> || - (input_iterator<_OutIter> && same_as, iter_value_t<_OutIter>>) || - indirectly_copyable_storable, _OutIter>) - _LIBCPP_HIDE_FROM_ABI constexpr unique_copy_result, _OutIter> - operator()(_Range&& __range, _OutIter __result, _Comp __comp = {}, _Proj __proj = {}) const { - auto __ret = std::__unique_copy<_RangeAlgPolicy>( - ranges::begin(__range), - ranges::end(__range), - std::move(__result), - std::__make_projected(__comp, __proj), - __algo_tag_t, _OutIter>()); - return {std::move(__ret.first), std::move(__ret.second)}; - } -}; - -inline namespace __cpo { -inline constexpr auto unique_copy = __unique_copy{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_RANGES_UNIQUE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/ranges_upper_bound.h b/third_party/libcxx/include/c++/v1/__algorithm/ranges_upper_bound.h deleted file mode 100644 index 4b2835d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/ranges_upper_bound.h +++ /dev/null @@ -1,72 +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___ALGORITHM_RANGES_UPPER_BOUND_H -#define _LIBCPP___ALGORITHM_RANGES_UPPER_BOUND_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__functional/ranges_operations.h> -#include <__iterator/concepts.h> -#include <__iterator/projected.h> -#include <__ranges/access.h> -#include <__ranges/concepts.h> -#include <__ranges/dangling.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 { -struct __upper_bound { - template _Sent, - class _Type, - class _Proj = identity, - indirect_strict_weak_order> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Iter - operator()(_Iter __first, _Sent __last, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __comp_lhs_rhs_swapped = [&](const auto& __lhs, const auto& __rhs) -> bool { - return !std::invoke(__comp, __rhs, __lhs); - }; - - return std::__lower_bound<_RangeAlgPolicy>(__first, __last, __value, __comp_lhs_rhs_swapped, __proj); - } - - template , _Proj>> _Comp = ranges::less> - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr borrowed_iterator_t<_Range> - operator()(_Range&& __r, const _Type& __value, _Comp __comp = {}, _Proj __proj = {}) const { - auto __comp_lhs_rhs_swapped = [&](const auto& __lhs, const auto& __rhs) -> bool { - return !std::invoke(__comp, __rhs, __lhs); - }; - - return std::__lower_bound<_RangeAlgPolicy>( - ranges::begin(__r), ranges::end(__r), __value, __comp_lhs_rhs_swapped, __proj); - } -}; - -inline namespace __cpo { -inline constexpr auto upper_bound = __upper_bound{}; -} // namespace __cpo -} // namespace ranges - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_UPPER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/remove.h b/third_party/libcxx/include/c++/v1/__algorithm/remove.h deleted file mode 100644 index b2d7023..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/remove.h +++ /dev/null @@ -1,46 +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___ALGORITHM_REMOVE_H -#define _LIBCPP___ALGORITHM_REMOVE_H - -#include <__algorithm/find.h> -#include <__algorithm/find_if.h> -#include <__config> -#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 - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - __first = std::find(__first, __last, __value); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (!(*__i == __value)) { - *__first = std::move(*__i); - ++__first; - } - } - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_REMOVE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/remove_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/remove_copy.h deleted file mode 100644 index 7be4c16..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/remove_copy.h +++ /dev/null @@ -1,34 +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___ALGORITHM_REMOVE_COPY_H -#define _LIBCPP___ALGORITHM_REMOVE_COPY_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -remove_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, const _Tp& __value) { - for (; __first != __last; ++__first) { - if (!(*__first == __value)) { - *__result = *__first; - ++__result; - } - } - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REMOVE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/remove_copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/remove_copy_if.h deleted file mode 100644 index dcafed1..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/remove_copy_if.h +++ /dev/null @@ -1,34 +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___ALGORITHM_REMOVE_COPY_IF_H -#define _LIBCPP___ALGORITHM_REMOVE_COPY_IF_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -remove_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) { - for (; __first != __last; ++__first) { - if (!__pred(*__first)) { - *__result = *__first; - ++__result; - } - } - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REMOVE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/remove_if.h b/third_party/libcxx/include/c++/v1/__algorithm/remove_if.h deleted file mode 100644 index 56fd745..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/remove_if.h +++ /dev/null @@ -1,45 +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___ALGORITHM_REMOVE_IF_H -#define _LIBCPP___ALGORITHM_REMOVE_IF_H - -#include <__algorithm/find_if.h> -#include <__config> -#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 - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - __first = std::find_if<_ForwardIterator, _Predicate&>(__first, __last, __pred); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (!__pred(*__i)) { - *__first = std::move(*__i); - ++__first; - } - } - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_REMOVE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/replace.h b/third_party/libcxx/include/c++/v1/__algorithm/replace.h deleted file mode 100644 index 8057c78..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/replace.h +++ /dev/null @@ -1,30 +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___ALGORITHM_REPLACE_H -#define _LIBCPP___ALGORITHM_REPLACE_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -replace(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value, const _Tp& __new_value) { - for (; __first != __last; ++__first) - if (*__first == __old_value) - *__first = __new_value; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REPLACE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/replace_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/replace_copy.h deleted file mode 100644 index 9a2258d..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/replace_copy.h +++ /dev/null @@ -1,37 +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___ALGORITHM_REPLACE_COPY_H -#define _LIBCPP___ALGORITHM_REPLACE_COPY_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator replace_copy( - _InputIterator __first, - _InputIterator __last, - _OutputIterator __result, - const _Tp& __old_value, - const _Tp& __new_value) { - for (; __first != __last; ++__first, (void)++__result) - if (*__first == __old_value) - *__result = __new_value; - else - *__result = *__first; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REPLACE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/replace_copy_if.h b/third_party/libcxx/include/c++/v1/__algorithm/replace_copy_if.h deleted file mode 100644 index c2ed30f..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/replace_copy_if.h +++ /dev/null @@ -1,37 +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___ALGORITHM_REPLACE_COPY_IF_H -#define _LIBCPP___ALGORITHM_REPLACE_COPY_IF_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator replace_copy_if( - _InputIterator __first, - _InputIterator __last, - _OutputIterator __result, - _Predicate __pred, - const _Tp& __new_value) { - for (; __first != __last; ++__first, (void)++__result) - if (__pred(*__first)) - *__result = __new_value; - else - *__result = *__first; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REPLACE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/replace_if.h b/third_party/libcxx/include/c++/v1/__algorithm/replace_if.h deleted file mode 100644 index 78487e3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/replace_if.h +++ /dev/null @@ -1,30 +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___ALGORITHM_REPLACE_IF_H -#define _LIBCPP___ALGORITHM_REPLACE_IF_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -replace_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred, const _Tp& __new_value) { - for (; __first != __last; ++__first) - if (__pred(*__first)) - *__first = __new_value; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REPLACE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/reverse.h b/third_party/libcxx/include/c++/v1/__algorithm/reverse.h deleted file mode 100644 index 4167c91..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/reverse.h +++ /dev/null @@ -1,62 +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___ALGORITHM_REVERSE_H -#define _LIBCPP___ALGORITHM_REVERSE_H - -#include <__algorithm/iter_swap.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/iterator_traits.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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -__reverse_impl(_BidirectionalIterator __first, _BidirectionalIterator __last, bidirectional_iterator_tag) { - while (__first != __last) { - if (__first == --__last) - break; - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - ++__first; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -__reverse_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag) { - if (__first != __last) - for (; __first < --__last; ++__first) - _IterOps<_AlgPolicy>::iter_swap(__first, __last); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __reverse(_BidirectionalIterator __first, _Sentinel __last) { - using _IterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_BidirectionalIterator>; - std::__reverse_impl<_AlgPolicy>(std::move(__first), std::move(__last), _IterCategory()); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) { - std::__reverse<_ClassicAlgPolicy>(std::move(__first), std::move(__last)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_REVERSE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/reverse_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/reverse_copy.h deleted file mode 100644 index 0fcecc3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/reverse_copy.h +++ /dev/null @@ -1,30 +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___ALGORITHM_REVERSE_COPY_H -#define _LIBCPP___ALGORITHM_REVERSE_COPY_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, _OutputIterator __result) { - for (; __first != __last; ++__result) - *__result = *--__last; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_REVERSE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/rotate.h b/third_party/libcxx/include/c++/v1/__algorithm/rotate.h deleted file mode 100644 index b6d9eb3..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/rotate.h +++ /dev/null @@ -1,226 +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___ALGORITHM_ROTATE_H -#define _LIBCPP___ALGORITHM_ROTATE_H - -#include <__algorithm/copy.h> -#include <__algorithm/copy_backward.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__algorithm/move.h> -#include <__algorithm/move_backward.h> -#include <__algorithm/swap_ranges.h> -#include <__config> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_trivially_assignable.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -__rotate_left(_ForwardIterator __first, _ForwardIterator __last) { - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - using _Ops = _IterOps<_AlgPolicy>; - - value_type __tmp = _Ops::__iter_move(__first); - _ForwardIterator __lm1 = std::__move<_AlgPolicy>(_Ops::next(__first), __last, __first).second; - *__lm1 = std::move(__tmp); - return __lm1; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _BidirectionalIterator -__rotate_right(_BidirectionalIterator __first, _BidirectionalIterator __last) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - using _Ops = _IterOps<_AlgPolicy>; - - _BidirectionalIterator __lm1 = _Ops::prev(__last); - value_type __tmp = _Ops::__iter_move(__lm1); - _BidirectionalIterator __fp1 = std::__move_backward<_AlgPolicy>(__first, __lm1, std::move(__last)).second; - *__first = std::move(__tmp); - return __fp1; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 _ForwardIterator -__rotate_forward(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) { - _ForwardIterator __i = __middle; - while (true) { - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - ++__first; - if (++__i == __last) - break; - if (__first == __middle) - __middle = __i; - } - _ForwardIterator __r = __first; - if (__first != __middle) { - __i = __middle; - while (true) { - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - ++__first; - if (++__i == __last) { - if (__first == __middle) - break; - __i = __middle; - } else if (__first == __middle) - __middle = __i; - } - } - return __r; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 _Iter -__rotate_random_access(_Iter __first, _Iter __middle, _Sent __sent) { - auto __left = _IterOps<_AlgPolicy>::distance(__first, __middle); - auto __right = _IterOps<_AlgPolicy>::distance(__middle, __sent); - auto __last = __first + __right; - - auto __min_len = std::min(__left, __right); - - while (__min_len > 0) { - if (__left <= __right) { - do { - std::__swap_ranges<_AlgPolicy>(__first, __first + __left, __first + __left); - __first += __left; - __right -= __left; - } while (__left <= __right); - __min_len = __right; - } else { - do { - std::__swap_ranges<_AlgPolicy>(__first + (__left - __right), __first + __left, __first + __left); - __left -= __right; - } while (__left > __right); - __min_len = __left; - } - } - return __last; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _ForwardIterator -__rotate_impl(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last, std::forward_iterator_tag) { - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _BidirectionalIterator __rotate_impl( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - bidirectional_iterator_tag) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - if (_IterOps<_AlgPolicy>::next(__middle) == __last) - return std::__rotate_right<_AlgPolicy>(__first, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _RandomAccessIterator __rotate_impl( - _RandomAccessIterator __first, - _RandomAccessIterator __middle, - _RandomAccessIterator __last, - random_access_iterator_tag) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - if (_IterOps<_AlgPolicy>::next(__middle) == __last) - return std::__rotate_right<_AlgPolicy>(__first, __last); - return std::__rotate_random_access<_AlgPolicy>(__first, __middle, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iterator, _Iterator> -__rotate(_Iterator __first, _Iterator __middle, _Sentinel __last) { - using _Ret = pair<_Iterator, _Iterator>; - _Iterator __last_iter = _IterOps<_AlgPolicy>::next(__middle, __last); - - if (__first == __middle) - return _Ret(__last_iter, __last_iter); - if (__middle == __last) - return _Ret(std::move(__first), std::move(__last_iter)); - - using _IterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_Iterator>; - auto __result = std::__rotate_impl<_AlgPolicy>(std::move(__first), std::move(__middle), __last_iter, _IterCategory()); - - return _Ret(std::move(__result), std::move(__last_iter)); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__bit_iterator<_Cp, false>, __bit_iterator<_Cp, false> > -__rotate(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __middle, __bit_iterator<_Cp, false> __last) { - using _I1 = __bit_iterator<_Cp, false>; - using difference_type = typename _I1::difference_type; - difference_type __d1 = __middle - __first; - difference_type __d2 = __last - __middle; - _I1 __r = __first + __d2; - while (__d1 != 0 && __d2 != 0) { - if (__d1 <= __d2) { - if (__d1 <= __bit_array<_Cp>::capacity()) { - __bit_array<_Cp> __b(__d1); - std::copy(__first, __middle, __b.begin()); - std::copy(__b.begin(), __b.end(), std::copy(__middle, __last, __first)); - break; - } else { - __bit_iterator<_Cp, false> __mp = std::swap_ranges(__first, __middle, __middle); - __first = __middle; - __middle = __mp; - __d2 -= __d1; - } - } else { - if (__d2 <= __bit_array<_Cp>::capacity()) { - __bit_array<_Cp> __b(__d2); - std::copy(__middle, __last, __b.begin()); - std::copy_backward(__b.begin(), __b.end(), std::copy_backward(__first, __middle, __last)); - break; - } else { - __bit_iterator<_Cp, false> __mp = __first + __d2; - std::swap_ranges(__first, __mp, __middle); - __first = __mp; - __d1 -= __d2; - } - } - } - return std::make_pair(__r, __last); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -rotate(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) { - return std::__rotate<_ClassicAlgPolicy>(std::move(__first), std::move(__middle), std::move(__last)).first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_ROTATE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/rotate_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/rotate_copy.h deleted file mode 100644 index cddcadd..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/rotate_copy.h +++ /dev/null @@ -1,29 +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___ALGORITHM_ROTATE_COPY_H -#define _LIBCPP___ALGORITHM_ROTATE_COPY_H - -#include <__algorithm/copy.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last, _OutputIterator __result) { - return std::copy(__first, __middle, std::copy(__middle, __last, __result)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_ROTATE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/sample.h b/third_party/libcxx/include/c++/v1/__algorithm/sample.h deleted file mode 100644 index ebe5180..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/sample.h +++ /dev/null @@ -1,123 +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___ALGORITHM_SAMPLE_H -#define _LIBCPP___ALGORITHM_SAMPLE_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min.h> -#include <__assert> -#include <__config> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__random/uniform_int_distribution.h> -#include <__type_traits/common_type.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 - -template -_LIBCPP_HIDE_FROM_ABI _SampleIterator __sample( - _PopulationIterator __first, - _PopulationSentinel __last, - _SampleIterator __output_iter, - _Distance __n, - _UniformRandomNumberGenerator& __g, - input_iterator_tag) { - _Distance __k = 0; - for (; __first != __last && __k < __n; ++__first, (void)++__k) - __output_iter[__k] = *__first; - _Distance __sz = __k; - for (; __first != __last; ++__first, (void)++__k) { - _Distance __r = uniform_int_distribution<_Distance>(0, __k)(__g); - if (__r < __sz) - __output_iter[__r] = *__first; - } - return __output_iter + std::min(__n, __k); -} - -template -_LIBCPP_HIDE_FROM_ABI _SampleIterator __sample( - _PopulationIterator __first, - _PopulationSentinel __last, - _SampleIterator __output_iter, - _Distance __n, - _UniformRandomNumberGenerator& __g, - forward_iterator_tag) { - _Distance __unsampled_sz = _IterOps<_AlgPolicy>::distance(__first, __last); - for (__n = std::min(__n, __unsampled_sz); __n != 0; ++__first) { - _Distance __r = uniform_int_distribution<_Distance>(0, --__unsampled_sz)(__g); - if (__r < __n) { - *__output_iter++ = *__first; - --__n; - } - } - return __output_iter; -} - -template -_LIBCPP_HIDE_FROM_ABI _SampleIterator __sample( - _PopulationIterator __first, - _PopulationSentinel __last, - _SampleIterator __output_iter, - _Distance __n, - _UniformRandomNumberGenerator& __g) { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__n >= 0, "N must be a positive number."); - - using _PopIterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_PopulationIterator>; - using _Difference = typename _IterOps<_AlgPolicy>::template __difference_type<_PopulationIterator>; - using _CommonType = typename common_type<_Distance, _Difference>::type; - - return std::__sample<_AlgPolicy>( - std::move(__first), std::move(__last), std::move(__output_iter), _CommonType(__n), __g, _PopIterCategory()); -} - -#if _LIBCPP_STD_VER >= 17 -template -inline _LIBCPP_HIDE_FROM_ABI _SampleIterator -sample(_PopulationIterator __first, - _PopulationIterator __last, - _SampleIterator __output_iter, - _Distance __n, - _UniformRandomNumberGenerator&& __g) { - static_assert(__has_forward_iterator_category<_PopulationIterator>::value || - __has_random_access_iterator_category<_SampleIterator>::value, - "SampleIterator must meet the requirements of RandomAccessIterator"); - - return std::__sample<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__output_iter), __n, __g); -} - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SAMPLE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/search.h b/third_party/libcxx/include/c++/v1/__algorithm/search.h deleted file mode 100644 index 161fd39..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/search.h +++ /dev/null @@ -1,192 +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___ALGORITHM_SEARCH_H -#define _LIBCPP___ALGORITHM_SEARCH_H - -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/advance.h> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __search_forward_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - if (__first2 == __last2) - return std::make_pair(__first1, __first1); // Everything matches an empty sequence - while (true) { - // Find first element in sequence 1 that matchs *__first2, with a mininum of loop checks - while (true) { - if (__first1 == __last1) { // return __last1 if no element matches *__first2 - _IterOps<_AlgPolicy>::__advance_to(__first1, __last1); - return std::make_pair(__first1, __first1); - } - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - // *__first1 matches *__first2, now match elements after here - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) // If pattern exhausted, __first1 is the answer (works for 1 element pattern) - return std::make_pair(__first1, ++__m1); - if (++__m1 == __last1) { // Otherwise if source exhaused, pattern not found - return std::make_pair(__m1, __m1); - } - - // if there is a mismatch, restart with a new __first1 - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } // else there is a match, check next elements - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __search_random_access_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - _DiffT1 __size1, - _DiffT2 __size2) { - const _Iter1 __s = __first1 + __size1 - _DiffT1(__size2 - 1); // Start of pattern match can't go beyond here - - while (true) { - while (true) { - if (__first1 == __s) { - _IterOps<_AlgPolicy>::__advance_to(__first1, __last1); - return std::make_pair(__first1, __first1); - } - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) - return std::make_pair(__first1, __first1 + _DiffT1(__size2)); - ++__m1; // no need to check range on __m1 because __s guarantees we have enough source - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } - } - } -} - -template ::value && - __has_random_access_iterator_category<_Iter2>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __search_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - auto __size2 = __last2 - __first2; - if (__size2 == 0) - return std::make_pair(__first1, __first1); - - auto __size1 = __last1 - __first1; - if (__size1 < __size2) { - return std::make_pair(__last1, __last1); - } - - return std::__search_random_access_impl<_ClassicAlgPolicy>( - __first1, __last1, __first2, __last2, __pred, __proj1, __proj2, __size1, __size2); -} - -template < - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Pred, - class _Proj1, - class _Proj2, - __enable_if_t<__has_forward_iterator_category<_Iter1>::value && __has_forward_iterator_category<_Iter2>::value && - !(__has_random_access_iterator_category<_Iter1>::value && - __has_random_access_iterator_category<_Iter2>::value), - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> __search_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - return std::__search_forward_impl<_ClassicAlgPolicy>(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 -search(_ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - static_assert(__is_callable<_BinaryPredicate&, decltype(*__first1), decltype(*__first2)>::value, - "The comparator has to be callable"); - auto __proj = __identity(); - return std::__search_impl(__first1, __last1, __first2, __last2, __pred, __proj, __proj).first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator1 -search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::search(__first1, __last1, __first2, __last2, __equal_to()); -} - -#if _LIBCPP_STD_VER >= 17 -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -search(_ForwardIterator __f, _ForwardIterator __l, const _Searcher& __s) { - return __s(__f, __l).first; -} - -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/search_n.h b/third_party/libcxx/include/c++/v1/__algorithm/search_n.h deleted file mode 100644 index 0962542..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/search_n.h +++ /dev/null @@ -1,168 +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___ALGORITHM_SEARCH_N_H -#define _LIBCPP___ALGORITHM_SEARCH_N_H - -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__utility/convert_to_integral.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter, _Iter> __search_n_forward_impl( - _Iter __first, _Sent __last, _SizeT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - if (__count <= 0) - return std::make_pair(__first, __first); - while (true) { - // Find first element in sequence that matchs __value, with a mininum of loop checks - while (true) { - if (__first == __last) { // return __last if no element matches __value - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - if (std::__invoke(__pred, std::__invoke(__proj, *__first), __value)) - break; - ++__first; - } - // *__first matches __value, now match elements after here - _Iter __m = __first; - _SizeT __c(0); - while (true) { - if (++__c == __count) // If pattern exhausted, __first is the answer (works for 1 element pattern) - return std::make_pair(__first, ++__m); - if (++__m == __last) { // Otherwise if source exhaused, pattern not found - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - - // if there is a mismatch, restart with a new __first - if (!std::__invoke(__pred, std::__invoke(__proj, *__m), __value)) { - __first = __m; - ++__first; - break; - } // else there is a match, check next elements - } - } -} - -// Finds the longest suffix in [__first, __last) where each element satisfies __pred. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _RAIter -__find_longest_suffix(_RAIter __first, _RAIter __last, const _ValueT& __value, _Pred& __pred, _Proj& __proj) { - while (__first != __last) { - if (!std::__invoke(__pred, std::__invoke(__proj, *--__last), __value)) { - return ++__last; - } - } - return __first; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 std::pair<_Iter, _Iter> __search_n_random_access_impl( - _Iter __first, _SizeT __count_in, const _Type& __value, _Pred& __pred, _Proj& __proj, _DiffT __size) { - auto __last = __first + __size; - auto __count = static_cast<_DiffT>(__count_in); - - if (__count == 0) - return std::make_pair(__first, __first); - if (__size < __count) - return std::make_pair(__last, __last); - - // [__match_start, __match_start + __count) is the subrange which we currently check whether it only contains matching - // elements. This subrange is returned in case all the elements match. - // [__match_start, __matched_until) is the longest subrange where all elements are known to match at any given point - // in time. - // [__matched_until, __match_start + __count) is the subrange where we don't know whether the elements match. - - // This algorithm tries to expand the subrange [__match_start, __matched_until) into a range of sufficient length. - // When we fail to do that because we find a mismatching element, we move it forward to the beginning of the next - // consecutive sequence that is not known not to match. - - const _Iter __try_match_until = __last - __count; - _Iter __match_start = __first; - _Iter __matched_until = __first; - - while (true) { - // There's no chance of expanding the subrange into a sequence of sufficient length, since we don't have enough - // elements in the haystack anymore. - if (__match_start > __try_match_until) - return std::make_pair(__last, __last); - - auto __mismatch = std::__find_longest_suffix(__matched_until, __match_start + __count, __value, __pred, __proj); - - // If all elements in [__matched_until, __match_start + __count) match, we know that - // [__match_start, __match_start + __count) is a full sequence of matching elements, so we're done. - if (__mismatch == __matched_until) - return std::make_pair(__match_start, __match_start + __count); - - // Otherwise, we have to move the [__match_start, __matched_until) subrange forward past the point where we know for - // sure a match is impossible. - __matched_until = __match_start + __count; - __match_start = __mismatch; - } -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter, _Iter> -__search_n_impl(_Iter __first, _Sent __last, _DiffT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - return std::__search_n_random_access_impl<_ClassicAlgPolicy>( - __first, __count, __value, __pred, __proj, __last - __first); -} - -template ::value && - !__has_random_access_iterator_category<_Iter1>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_Iter1, _Iter1> -__search_n_impl(_Iter1 __first, _Sent1 __last, _DiffT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - return std::__search_n_forward_impl<_ClassicAlgPolicy>(__first, __last, __count, __value, __pred, __proj); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator search_n( - _ForwardIterator __first, _ForwardIterator __last, _Size __count, const _Tp& __value, _BinaryPredicate __pred) { - static_assert( - __is_callable<_BinaryPredicate&, decltype(*__first), const _Tp&>::value, "The comparator has to be callable"); - auto __proj = __identity(); - return std::__search_n_impl(__first, __last, std::__convert_to_integral(__count), __value, __pred, __proj).first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -search_n(_ForwardIterator __first, _ForwardIterator __last, _Size __count, const _Tp& __value) { - return std::search_n(__first, __last, std::__convert_to_integral(__count), __value, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_SEARCH_N_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/set_difference.h b/third_party/libcxx/include/c++/v1/__algorithm/set_difference.h deleted file mode 100644 index 0cd1bc4..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/set_difference.h +++ /dev/null @@ -1,76 +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___ALGORITHM_SET_DIFFERENCE_H -#define _LIBCPP___ALGORITHM_SET_DIFFERENCE_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/copy.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__remove_cvref_t<_InIter1>, __remove_cvref_t<_OutIter> > -__set_difference( - _InIter1&& __first1, _Sent1&& __last1, _InIter2&& __first2, _Sent2&& __last2, _OutIter&& __result, _Comp&& __comp) { - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__first1; - ++__result; - } else if (__comp(*__first2, *__first1)) { - ++__first2; - } else { - ++__first1; - ++__first2; - } - } - return std::__copy(std::move(__first1), std::move(__last1), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_difference<__comp_ref_type<_Compare> >(__first1, __last1, __first2, __last2, __result, __comp) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::__set_difference(__first1, __last1, __first2, __last2, __result, __less<>()).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SET_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/set_intersection.h b/third_party/libcxx/include/c++/v1/__algorithm/set_intersection.h deleted file mode 100644 index 6246e24..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/set_intersection.h +++ /dev/null @@ -1,218 +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___ALGORITHM_SET_INTERSECTION_H -#define _LIBCPP___ALGORITHM_SET_INTERSECTION_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/lower_bound.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__iterator/next.h> -#include <__type_traits/is_same.h> -#include <__utility/exchange.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/swap.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_intersection_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 - __set_intersection_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -// Helper for __set_intersection() with one-sided binary search: populate result and advance input iterators if they -// are found to potentially contain the same value in two consecutive calls. This function is very intimately related to -// the way it is used and doesn't attempt to abstract that, it's not appropriate for general usage outside of its -// context. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __set_intersection_add_output_if_equal( - bool __may_be_equal, - _InForwardIter1& __first1, - _InForwardIter2& __first2, - _OutIter& __result, - bool& __prev_may_be_equal) { - if (__may_be_equal && __prev_may_be_equal) { - *__result = *__first1; - ++__result; - ++__first1; - ++__first2; - __prev_may_be_equal = false; - } else { - __prev_may_be_equal = __may_be_equal; - } -} - -// With forward iterators we can make multiple passes over the data, allowing the use of one-sided binary search to -// reduce best-case complexity to log(N). Understanding how we can use binary search and still respect complexity -// guarantees is _not_ straightforward: the guarantee is "at most 2*(N+M)-1 comparisons", and one-sided binary search -// will necessarily overshoot depending on the position of the needle in the haystack -- for instance, if we're -// searching for 3 in (1, 2, 3, 4), we'll check if 3<1, then 3<2, then 3<4, and, finally, 3<3, for a total of 4 -// comparisons, when linear search would have yielded 3. However, because we won't need to perform the intervening -// reciprocal comparisons (ie 1<3, 2<3, 4<3), that extra comparison doesn't run afoul of the guarantee. Additionally, -// this type of scenario can only happen for match distances of up to 5 elements, because 2*log2(8) is 6, and we'll -// still be worse-off at position 5 of an 8-element set. From then onwards these scenarios can't happen. TL;DR: we'll be -// 1 comparison worse-off compared to the classic linear-searching algorithm if matching position 3 of a set with 4 -// elements, or position 5 if the set has 7 or 8 elements, but we'll never exceed the complexity guarantees from the -// standard. -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX20 __set_intersection_result<_InForwardIter1, _InForwardIter2, _OutIter> -__set_intersection( - _InForwardIter1 __first1, - _Sent1 __last1, - _InForwardIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Compare&& __comp, - std::forward_iterator_tag, - std::forward_iterator_tag) { - _LIBCPP_CONSTEXPR std::__identity __proj; - bool __prev_may_be_equal = false; - - while (__first2 != __last2) { - _InForwardIter1 __first1_next = - std::__lower_bound_onesided<_AlgPolicy>(__first1, __last1, *__first2, __comp, __proj); - std::swap(__first1_next, __first1); - // keeping in mind that a==b iff !(a(__first2, __last2, *__first1, __comp, __proj); - std::swap(__first2_next, __first2); - std::__set_intersection_add_output_if_equal( - __first2 == __first2_next, __first1, __first2, __result, __prev_may_be_equal); - } - return __set_intersection_result<_InForwardIter1, _InForwardIter2, _OutIter>( - _IterOps<_AlgPolicy>::next(std::move(__first1), std::move(__last1)), - _IterOps<_AlgPolicy>::next(std::move(__first2), std::move(__last2)), - std::move(__result)); -} - -// input iterators are not suitable for multipass algorithms, so we stick to the classic single-pass version -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX20 __set_intersection_result<_InInputIter1, _InInputIter2, _OutIter> -__set_intersection( - _InInputIter1 __first1, - _Sent1 __last1, - _InInputIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Compare&& __comp, - std::input_iterator_tag, - std::input_iterator_tag) { - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first1, *__first2)) - ++__first1; - else { - if (!__comp(*__first2, *__first1)) { - *__result = *__first1; - ++__result; - ++__first1; - } - ++__first2; - } - } - - return __set_intersection_result<_InInputIter1, _InInputIter2, _OutIter>( - _IterOps<_AlgPolicy>::next(std::move(__first1), std::move(__last1)), - _IterOps<_AlgPolicy>::next(std::move(__first2), std::move(__last2)), - std::move(__result)); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX20 __set_intersection_result<_InIter1, _InIter2, _OutIter> -__set_intersection( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - return std::__set_intersection<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - std::forward<_Compare>(__comp), - typename std::_IterOps<_AlgPolicy>::template __iterator_category<_InIter1>(), - typename std::_IterOps<_AlgPolicy>::template __iterator_category<_InIter2>()); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_intersection( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_intersection<_ClassicAlgPolicy, __comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_intersection( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::__set_intersection<_ClassicAlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()) - .__out_; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SET_INTERSECTION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/set_symmetric_difference.h b/third_party/libcxx/include/c++/v1/__algorithm/set_symmetric_difference.h deleted file mode 100644 index 91ea406..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/set_symmetric_difference.h +++ /dev/null @@ -1,108 +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___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H -#define _LIBCPP___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/copy.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_symmetric_difference_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 - __set_symmetric_difference_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter> -__set_symmetric_difference( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - while (__first1 != __last1) { - if (__first2 == __last2) { - auto __ret1 = std::__copy(std::move(__first1), std::move(__last1), std::move(__result)); - return __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( - std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); - } - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__result; - ++__first1; - } else { - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__result; - } else { - ++__first1; - } - ++__first2; - } - } - auto __ret2 = std::__copy(std::move(__first2), std::move(__last2), std::move(__result)); - return __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( - std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_symmetric_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_symmetric_difference<__comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_symmetric_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::set_symmetric_difference( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/set_union.h b/third_party/libcxx/include/c++/v1/__algorithm/set_union.h deleted file mode 100644 index 393dddc..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/set_union.h +++ /dev/null @@ -1,104 +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___ALGORITHM_SET_UNION_H -#define _LIBCPP___ALGORITHM_SET_UNION_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/copy.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_union_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 - __set_union_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __set_union_result<_InIter1, _InIter2, _OutIter> __set_union( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - auto __ret1 = std::__copy(std::move(__first1), std::move(__last1), std::move(__result)); - return __set_union_result<_InIter1, _InIter2, _OutIter>( - std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); - } - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } else { - if (!__comp(*__first1, *__first2)) { - ++__first2; - } - *__result = *__first1; - ++__first1; - } - } - auto __ret2 = std::__copy(std::move(__first2), std::move(__last2), std::move(__result)); - return __set_union_result<_InIter1, _InIter2, _OutIter>( - std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_union( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_union<__comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator set_union( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::set_union( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SET_UNION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/shift_left.h b/third_party/libcxx/include/c++/v1/__algorithm/shift_left.h deleted file mode 100644 index 42d6c23..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/shift_left.h +++ /dev/null @@ -1,76 +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___ALGORITHM_SHIFT_LEFT_H -#define _LIBCPP___ALGORITHM_SHIFT_LEFT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/move.h> -#include <__assert> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.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 - -template -_LIBCPP_HIDE_FROM_ABI constexpr pair<_Iter, _Iter> -__shift_left(_Iter __first, _Sent __last, typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> __n) { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__n >= 0, "n must be greater than or equal to 0"); - - if (__n == 0) { - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - return {std::move(__first), std::move(__end)}; - } - - _Iter __m = __first; - if constexpr (sized_sentinel_for<_Sent, _Iter>) { - auto __size = _IterOps<_AlgPolicy>::distance(__first, __last); - if (__n >= __size) { - return {__first, std::move(__first)}; - } - _IterOps<_AlgPolicy>::advance(__m, __n); - } else { - for (; __n > 0; --__n) { - if (__m == __last) { - return {__first, std::move(__first)}; - } - ++__m; - } - } - - _Iter __result = std::__move<_AlgPolicy>(__m, __last, __first).second; - return {std::move(__first), std::move(__result)}; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr _ForwardIterator -shift_left(_ForwardIterator __first, - _ForwardIterator __last, - typename iterator_traits<_ForwardIterator>::difference_type __n) { - return std::__shift_left<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __n).second; -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SHIFT_LEFT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/shift_right.h b/third_party/libcxx/include/c++/v1/__algorithm/shift_right.h deleted file mode 100644 index 917e255..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/shift_right.h +++ /dev/null @@ -1,131 +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___ALGORITHM_SHIFT_RIGHT_H -#define _LIBCPP___ALGORITHM_SHIFT_RIGHT_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/move.h> -#include <__algorithm/move_backward.h> -#include <__algorithm/swap_ranges.h> -#include <__assert> -#include <__concepts/derived_from.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> -#include <__utility/swap.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 - -template -_LIBCPP_HIDE_FROM_ABI constexpr pair<_Iter, _Iter> -__shift_right(_Iter __first, _Sent __last, typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> __n) { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(__n >= 0, "Providing a negative shift amount to shift_right is UB"); - if (__n == 0) { - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - return pair<_Iter, _Iter>(std::move(__first), std::move(__end)); - } - - using _IterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_Iter>; - - if constexpr (derived_from<_IterCategory, random_access_iterator_tag>) { - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - auto __size = __end - __first; - if (__n >= __size) { - return pair<_Iter, _Iter>(__end, std::move(__end)); - } - _Iter __m = __first; - _IterOps<_AlgPolicy>::advance(__m, (__size - __n)); - auto __ret = std::__move_backward<_AlgPolicy>(std::move(__first), std::move(__m), __end); - return pair<_Iter, _Iter>(std::move(__ret.second), std::move(__end)); - } else if constexpr (derived_from<_IterCategory, bidirectional_iterator_tag>) { - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - if constexpr (sized_sentinel_for<_Sent, _Iter>) { - if (__n >= ranges::distance(__first, __last)) { - return pair<_Iter, _Iter>(__end, std::move(__end)); - } - } - _Iter __m = __end; - for (; __n > 0; --__n) { - if (__m == __first) { - return pair<_Iter, _Iter>(__end, std::move(__end)); - } - --__m; - } - auto __ret = std::__move_backward<_AlgPolicy>(std::move(__first), std::move(__m), __end); - return pair<_Iter, _Iter>(std::move(__ret.second), std::move(__end)); - } else { - _Iter __ret = __first; - for (; __n > 0; --__n) { - if (__ret == __last) { - return pair<_Iter, _Iter>(__ret, std::move(__ret)); - } - ++__ret; - } - - // We have an __n-element scratch space from __first to __ret. - // Slide an __n-element window [__trail, __lead) from left to right. - // We're essentially doing swap_ranges(__first, __ret, __trail, __lead) - // over and over; but once __lead reaches __end we needn't bother - // to save the values of elements [__trail, __end). - - auto __trail = __first; - auto __lead = __ret; - while (__trail != __ret) { - if (__lead == __last) { - std::__move<_AlgPolicy>(std::move(__first), std::move(__trail), __ret); - return pair<_Iter, _Iter>(__ret, std::move(__lead)); - } - ++__trail; - ++__lead; - } - - _Iter __mid = __first; - while (true) { - if (__lead == __last) { - __trail = std::__move<_AlgPolicy>(__mid, __ret, __trail).second; - std::__move<_AlgPolicy>(std::move(__first), std::move(__mid), std::move(__trail)); - return pair<_Iter, _Iter>(__ret, std::move(__lead)); - } - _IterOps<_AlgPolicy>::iter_swap(__mid, __trail); - ++__mid; - ++__trail; - ++__lead; - if (__mid == __ret) { - __mid = __first; - } - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr _ForwardIterator -shift_right(_ForwardIterator __first, - _ForwardIterator __last, - typename iterator_traits<_ForwardIterator>::difference_type __n) { - return std::__shift_right<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __n).first; -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SHIFT_RIGHT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/shuffle.h b/third_party/libcxx/include/c++/v1/__algorithm/shuffle.h deleted file mode 100644 index 7177fbb..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/shuffle.h +++ /dev/null @@ -1,167 +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___ALGORITHM_SHUFFLE_H -#define _LIBCPP___ALGORITHM_SHUFFLE_H - -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__iterator/iterator_traits.h> -#include <__random/uniform_int_distribution.h> -#include <__utility/forward.h> -#include <__utility/move.h> -#include <__utility/swap.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -class _LIBCPP_EXPORTED_FROM_ABI __libcpp_debug_randomizer { -public: - _LIBCPP_HIDE_FROM_ABI __libcpp_debug_randomizer() { - __state_ = __seed(); - __inc_ = __state_ + 0xda3e39cb94b95bdbULL; - __inc_ = (__inc_ << 1) | 1; - } - typedef uint_fast32_t result_type; - - static const result_type _Min = 0; - static const result_type _Max = 0xFFFFFFFF; - - _LIBCPP_HIDE_FROM_ABI result_type operator()() { - uint_fast64_t __oldstate = __state_; - __state_ = __oldstate * 6364136223846793005ULL + __inc_; - return __oldstate >> 32; - } - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type min() { return _Min; } - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type max() { return _Max; } - -private: - uint_fast64_t __state_; - uint_fast64_t __inc_; - _LIBCPP_HIDE_FROM_ABI static uint_fast64_t __seed() { -#ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED - return _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED; -#else - static char __x; - return reinterpret_cast(&__x); -#endif - } -}; - -#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE) || defined(_LIBCPP_BUILDING_LIBRARY) -class _LIBCPP_EXPORTED_FROM_ABI __rs_default; - -_LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); - -class _LIBCPP_EXPORTED_FROM_ABI __rs_default { - static unsigned __c_; - - __rs_default(); - -public: - typedef uint_fast32_t result_type; - - static const result_type _Min = 0; - static const result_type _Max = 0xFFFFFFFF; - - __rs_default(const __rs_default&); - ~__rs_default(); - - result_type operator()(); - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type min() { return _Min; } - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR result_type max() { return _Max; } - - friend _LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); -}; - -_LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_IN_CXX14 void -random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef uniform_int_distribution _Dp; - typedef typename _Dp::param_type _Pp; - difference_type __d = __last - __first; - if (__d > 1) { - _Dp __uid; - __rs_default __g = __rs_get(); - for (--__last, (void)--__d; __first < __last; ++__first, (void)--__d) { - difference_type __i = __uid(__g, _Pp(0, __d)); - if (__i != difference_type(0)) - swap(*__first, *(__first + __i)); - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_DEPRECATED_IN_CXX14 void -random_shuffle(_RandomAccessIterator __first, - _RandomAccessIterator __last, -# ifndef _LIBCPP_CXX03_LANG - _RandomNumberGenerator&& __rand) -# else - _RandomNumberGenerator& __rand) -# endif -{ - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __d = __last - __first; - if (__d > 1) { - for (--__last; __first < __last; ++__first, (void)--__d) { - difference_type __i = __rand(__d); - if (__i != difference_type(0)) - swap(*__first, *(__first + __i)); - } - } -} -#endif - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__shuffle(_RandomAccessIterator __first, _Sentinel __last_sentinel, _UniformRandomNumberGenerator&& __g) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef uniform_int_distribution _Dp; - typedef typename _Dp::param_type _Pp; - - auto __original_last = _IterOps<_AlgPolicy>::next(__first, __last_sentinel); - auto __last = __original_last; - difference_type __d = __last - __first; - if (__d > 1) { - _Dp __uid; - for (--__last, (void)--__d; __first < __last; ++__first, (void)--__d) { - difference_type __i = __uid(__g, _Pp(0, __d)); - if (__i != difference_type(0)) - _IterOps<_AlgPolicy>::iter_swap(__first, __first + __i); - } - } - - return __original_last; -} - -template -_LIBCPP_HIDE_FROM_ABI void -shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, _UniformRandomNumberGenerator&& __g) { - (void)std::__shuffle<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), std::forward<_UniformRandomNumberGenerator>(__g)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SHUFFLE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/sift_down.h b/third_party/libcxx/include/c++/v1/__algorithm/sift_down.h deleted file mode 100644 index f827754..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/sift_down.h +++ /dev/null @@ -1,119 +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___ALGORITHM_SIFT_DOWN_H -#define _LIBCPP___ALGORITHM_SIFT_DOWN_H - -#include <__algorithm/iterator_operations.h> -#include <__assert> -#include <__config> -#include <__iterator/iterator_traits.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__sift_down(_RandomAccessIterator __first, - _Compare&& __comp, - __iterator_difference_type<_RandomAccessIterator> __len, - __iterator_difference_type<_RandomAccessIterator> __start) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - // left-child of __start is at 2 * __start + 1 - // right-child of __start is at 2 * __start + 2 - difference_type __child = __start; - - if (__len < 2 || (__len - 2) / 2 < __child) - return; - - __child = 2 * __child + 1; - - if _LIBCPP_CONSTEXPR (__assume_both_children) { - // right-child exists and is greater than left-child - __child += __comp(__first[__child], __first[__child + 1]); - } else if ((__child + 1) < __len && __comp(__first[__child], __first[__child + 1])) { - // right-child exists and is greater than left-child - ++__child; - } - - // check if we are in heap-order - if (__comp(__first[__child], __first[__start])) - // we are, __start is larger than its largest child - return; - - value_type __top(_Ops::__iter_move(__first + __start)); - do { - // we are not in heap-order, swap the parent with its largest child - __first[__start] = _Ops::__iter_move(__first + __child); - __start = __child; - - if ((__len - 2) / 2 < __child) - break; - - // recompute the child based off of the updated parent - __child = 2 * __child + 1; - - if _LIBCPP_CONSTEXPR (__assume_both_children) { - __child += __comp(__first[__child], __first[__child + 1]); - } else if ((__child + 1) < __len && __comp(__first[__child], __first[__child + 1])) { - // right-child exists and is greater than left-child - ++__child; - } - - // check if we are in heap-order - } while (!__comp(__first[__child], __top)); - __first[__start] = std::move(__top); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _RandomAccessIterator __floyd_sift_down( - _RandomAccessIterator __first, - _Compare&& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - _LIBCPP_ASSERT_INTERNAL(__len >= 2, "shouldn't be called unless __len >= 2"); - - _RandomAccessIterator __hole = __first; - _RandomAccessIterator __child_i = __first; - difference_type __child = 0; - - while (true) { - __child_i += difference_type(__child + 1); - __child = 2 * __child + 1; - - if ((__child + 1) < __len && __comp(*__child_i, *(__child_i + difference_type(1)))) { - // right-child exists and is greater than left-child - ++__child_i; - ++__child; - } - - // swap __hole with its largest child - *__hole = _IterOps<_AlgPolicy>::__iter_move(__child_i); - __hole = __child_i; - - // if __hole is now a leaf, we're done - if (__child > (__len - 2) / 2) - return __hole; - } -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SIFT_DOWN_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/simd_utils.h b/third_party/libcxx/include/c++/v1/__algorithm/simd_utils.h deleted file mode 100644 index f73c9ea..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/simd_utils.h +++ /dev/null @@ -1,193 +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___ALGORITHM_SIMD_UTILS_H -#define _LIBCPP___ALGORITHM_SIMD_UTILS_H - -#include <__algorithm/min.h> -#include <__bit/bit_cast.h> -#include <__bit/countl.h> -#include <__bit/countr.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__utility/integer_sequence.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -// TODO: Find out how altivec changes things and allow vectorizations there too. -#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_COMPILER_CLANG_BASED) && !defined(__ALTIVEC__) -# define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 1 -#else -# define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0 -#endif - -#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS && !defined(__OPTIMIZE_SIZE__) -# define _LIBCPP_VECTORIZE_ALGORITHMS 1 -#else -# define _LIBCPP_VECTORIZE_ALGORITHMS 0 -#endif - -#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline constexpr bool __can_map_to_integer_v = - sizeof(_Tp) == alignof(_Tp) && (sizeof(_Tp) == 1 || sizeof(_Tp) == 2 || sizeof(_Tp) == 4 || sizeof(_Tp) == 8); - -template -struct __get_as_integer_type_impl; - -template <> -struct __get_as_integer_type_impl<1> { - using type _LIBCPP_NODEBUG = uint8_t; -}; - -template <> -struct __get_as_integer_type_impl<2> { - using type _LIBCPP_NODEBUG = uint16_t; -}; -template <> -struct __get_as_integer_type_impl<4> { - using type _LIBCPP_NODEBUG = uint32_t; -}; -template <> -struct __get_as_integer_type_impl<8> { - using type _LIBCPP_NODEBUG = uint64_t; -}; - -template -using __get_as_integer_type_t _LIBCPP_NODEBUG = typename __get_as_integer_type_impl::type; - -// This isn't specialized for 64 byte vectors on purpose. They have the potential to significantly reduce performance -// in mixed simd/non-simd workloads and don't provide any performance improvement for currently vectorized algorithms -// as far as benchmarks are concerned. -# if defined(__AVX__) || defined(__MVS__) -template -inline constexpr size_t __native_vector_size = 32 / sizeof(_Tp); -# elif defined(__SSE__) || defined(__ARM_NEON) -template -inline constexpr size_t __native_vector_size = 16 / sizeof(_Tp); -# elif defined(__MMX__) -template -inline constexpr size_t __native_vector_size = 8 / sizeof(_Tp); -# else -template -inline constexpr size_t __native_vector_size = 1; -# endif - -template -using __simd_vector __attribute__((__ext_vector_type__(_Np))) _LIBCPP_NODEBUG = _ArithmeticT; - -template -inline constexpr size_t __simd_vector_size_v = []() -> size_t { - static_assert(_False, "Not a vector!"); -}(); - -template -inline constexpr size_t __simd_vector_size_v<__simd_vector<_Tp, _Np>> = _Np; - -template -_LIBCPP_HIDE_FROM_ABI _Tp __simd_vector_underlying_type_impl(__simd_vector<_Tp, _Np>) { - return _Tp{}; -} - -template -using __simd_vector_underlying_type_t _LIBCPP_NODEBUG = decltype(std::__simd_vector_underlying_type_impl(_VecT{})); - -// This isn't inlined without always_inline when loading chars. -template -[[__nodiscard__]] _LIBCPP_ALWAYS_INLINE _LIBCPP_HIDE_FROM_ABI _VecT __load_vector(_Iter __iter) noexcept { - return [=](index_sequence<_Indices...>) _LIBCPP_ALWAYS_INLINE noexcept { - return _VecT{__iter[_Indices]...}; - }(make_index_sequence<__simd_vector_size_v<_VecT>>{}); -} - -// Load the first _Np elements, zero the rest -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wpsabi") -template -[[__nodiscard__]] _LIBCPP_ALWAYS_INLINE _LIBCPP_HIDE_FROM_ABI _VecT __partial_load(_Iter __iter) noexcept { - return [=]( - index_sequence<_LoadIndices...>, index_sequence<_ZeroIndices...>) _LIBCPP_ALWAYS_INLINE noexcept { - return _VecT{__iter[_LoadIndices]..., ((void)_ZeroIndices, 0)...}; - }(make_index_sequence<_Np>{}, make_index_sequence<__simd_vector_size_v<_VecT> - _Np>{}); -} - -// Create a vector where every elements is __val -template -[[__nodiscard__]] _LIBCPP_ALWAYS_INLINE _LIBCPP_HIDE_FROM_ABI _VecT -__broadcast(__simd_vector_underlying_type_t<_VecT> __val) { - return [&](index_sequence<_Indices...>) { - return _VecT{((void)_Indices, __val)...}; - }(make_index_sequence<__simd_vector_size_v<_VecT>>()); -} -_LIBCPP_DIAGNOSTIC_POP - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool __any_of(__simd_vector<_Tp, _Np> __vec) noexcept { - return __builtin_reduce_or(__builtin_convertvector(__vec, __simd_vector)); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool __all_of(__simd_vector<_Tp, _Np> __vec) noexcept { - return __builtin_reduce_and(__builtin_convertvector(__vec, __simd_vector)); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool __none_of(__simd_vector<_Tp, _Np> __vec) noexcept { - return !__builtin_reduce_or(__builtin_convertvector(__vec, __simd_vector)); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_Tp, _Np> __vec) noexcept { - using __mask_vec = __simd_vector; - - // This has MSan disabled du to https://llvm.org/PR85876 - auto __impl = [&](_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept { -# if defined(_LIBCPP_BIG_ENDIAN) - return std::min( - _Np, std::__countl_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); -# else - return std::min( - _Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); -# endif - }; - - if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) { - return __impl(uint8_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint16_t)) { - return __impl(uint16_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint32_t)) { - return __impl(uint32_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint64_t)) { - return __impl(uint64_t{}); - } else { - static_assert(sizeof(__mask_vec) == 0, "unexpected required size for mask integer type"); - return 0; - } -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_not_set(__simd_vector<_Tp, _Np> __vec) noexcept { - return std::__find_first_set(~__vec); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SIMD_UTILS_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/sort.h b/third_party/libcxx/include/c++/v1/__algorithm/sort.h deleted file mode 100644 index 8aa894e..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/sort.h +++ /dev/null @@ -1,958 +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___ALGORITHM_SORT_H -#define _LIBCPP___ALGORITHM_SORT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iter_swap.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/min_element.h> -#include <__algorithm/partial_sort.h> -#include <__algorithm/unwrap_iter.h> -#include <__assert> -#include <__bit/bit_log2.h> -#include <__bit/blsr.h> -#include <__bit/countl.h> -#include <__bit/countr.h> -#include <__config> -#include <__debug_utils/randomize_range.h> -#include <__debug_utils/strict_weak_ordering_check.h> -#include <__functional/operations.h> -#include <__functional/ranges_operations.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/conditional.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/disjunction.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_arithmetic.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_trivially_copyable.h> -#include <__type_traits/make_unsigned.h> -#include <__utility/move.h> -#include <__utility/pair.h> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value_type> -inline const bool __use_branchless_sort = - __libcpp_is_contiguous_iterator<_Iter>::value && __is_cheap_to_copy<_Tp> && is_arithmetic<_Tp>::value && - (__desugars_to_v<__less_tag, _Compare, _Tp, _Tp> || __desugars_to_v<__greater_tag, _Compare, _Tp, _Tp>); - -namespace __detail { - -// Size in bits for the bitset in use. -enum { __block_size = sizeof(uint64_t) * 8 }; - -} // namespace __detail - -// Ensures that __c(*__x, *__y) is true by swapping *__x and *__y if necessary. -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__cond_swap(_RandomAccessIterator __x, _RandomAccessIterator __y, _Compare __c) { - // Note: this function behaves correctly even with proxy iterators (because it relies on `value_type`). - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - bool __r = __c(*__x, *__y); - value_type __tmp = __r ? *__x : *__y; - *__y = __r ? *__y : *__x; - *__x = __tmp; - return !__r; -} - -// Ensures that *__x, *__y and *__z are ordered according to the comparator __c, -// under the assumption that *__y and *__z are already ordered. -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__partially_sorted_swap(_RandomAccessIterator __x, _RandomAccessIterator __y, _RandomAccessIterator __z, _Compare __c) { - // Note: this function behaves correctly even with proxy iterators (because it relies on `value_type`). - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - bool __r1 = __c(*__z, *__x); - value_type __tmp = __r1 ? *__z : *__x; - *__z = __r1 ? *__x : *__z; - bool __r2 = __c(__tmp, *__y); - *__x = __r2 ? *__x : *__y; - *__y = __r2 ? *__y : __tmp; - return !__r1 || !__r2; -} - -// stable, 2-3 compares, 0-2 swaps - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__sort3(_RandomAccessIterator __x1, _RandomAccessIterator __x2, _RandomAccessIterator __x3, _Compare __c) { - bool __swapped1 = std::__cond_swap<_Compare>(__x2, __x3, __c); - bool __swapped2 = std::__partially_sorted_swap<_Compare>(__x1, __x2, __x3, __c); - return __swapped1 || __swapped2; -} - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -__sort3(_RandomAccessIterator __x, _RandomAccessIterator __y, _RandomAccessIterator __z, _Compare __c) { - using _Ops = _IterOps<_AlgPolicy>; - - if (!__c(*__y, *__x)) // if x <= y - { - if (!__c(*__z, *__y)) // if y <= z - return false; // x <= y && y <= z - // x <= y && y > z - _Ops::iter_swap(__y, __z); // x <= z && y < z - if (__c(*__y, *__x)) // if x > y - _Ops::iter_swap(__x, __y); // x < y && y <= z - return true; // x <= y && y < z - } - if (__c(*__z, *__y)) // x > y, if y > z - { - _Ops::iter_swap(__x, __z); // x < y && y < z - return true; - } - _Ops::iter_swap(__x, __y); // x > y && y <= z - // x < y && x <= z - if (__c(*__z, *__y)) // if y > z - _Ops::iter_swap(__y, __z); // x <= y && y < z - return true; -} // x <= y && y <= z - -// stable, 3-6 compares, 0-5 swaps - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void -__sort4(_RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _Compare __c) { - std::__cond_swap<_Compare>(__x1, __x3, __c); - std::__cond_swap<_Compare>(__x2, __x4, __c); - std::__cond_swap<_Compare>(__x1, __x2, __c); - std::__cond_swap<_Compare>(__x3, __x4, __c); - std::__cond_swap<_Compare>(__x2, __x3, __c); -} - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void -__sort4(_RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _Compare __c) { - using _Ops = _IterOps<_AlgPolicy>; - std::__sort3<_AlgPolicy, _Compare>(__x1, __x2, __x3, __c); - if (__c(*__x4, *__x3)) { - _Ops::iter_swap(__x3, __x4); - if (__c(*__x3, *__x2)) { - _Ops::iter_swap(__x2, __x3); - if (__c(*__x2, *__x1)) { - _Ops::iter_swap(__x1, __x2); - } - } - } -} - -// stable, 4-10 compares, 0-9 swaps - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void -__sort5(_RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _RandomAccessIterator __x5, - _Compare __c) { - std::__cond_swap<_Compare>(__x1, __x2, __c); - std::__cond_swap<_Compare>(__x4, __x5, __c); - std::__partially_sorted_swap<_Compare>(__x3, __x4, __x5, __c); - std::__cond_swap<_Compare>(__x2, __x5, __c); - std::__partially_sorted_swap<_Compare>(__x1, __x3, __x4, __c); - std::__partially_sorted_swap<_Compare>(__x2, __x3, __x4, __c); -} - -template , int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void -__sort5(_RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _RandomAccessIterator __x5, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - std::__sort4<_AlgPolicy, _Compare>(__x1, __x2, __x3, __x4, __comp); - if (__comp(*__x5, *__x4)) { - _Ops::iter_swap(__x4, __x5); - if (__comp(*__x4, *__x3)) { - _Ops::iter_swap(__x3, __x4); - if (__comp(*__x3, *__x2)) { - _Ops::iter_swap(__x2, __x3); - if (__comp(*__x2, *__x1)) { - _Ops::iter_swap(__x1, __x2); - } - } - } - } -} - -// Assumes size > 0 -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__selection_sort(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - _BidirectionalIterator __lm1 = __last; - for (--__lm1; __first != __lm1; ++__first) { - _BidirectionalIterator __i = std::__min_element<_Compare>(__first, __last, __comp); - if (__i != __first) - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - } -} - -// Sort the iterator range [__first, __last) using the comparator __comp using -// the insertion sort algorithm. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void -__insertion_sort(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (__first == __last) - return; - _BidirectionalIterator __i = __first; - for (++__i; __i != __last; ++__i) { - _BidirectionalIterator __j = __i; - --__j; - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _BidirectionalIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - } while (__j != __first && __comp(__t, *--__k)); - *__j = std::move(__t); - } - } -} - -// Sort the iterator range [__first, __last) using the comparator __comp using -// the insertion sort algorithm. Insertion sort has two loops, outer and inner. -// The implementation below has no bounds check (unguarded) for the inner loop. -// Assumes that there is an element in the position (__first - 1) and that each -// element in the input range is greater or equal to the element at __first - 1. -template -_LIBCPP_HIDE_FROM_ABI void -__insertion_sort_unguarded(_RandomAccessIterator const __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - if (__first == __last) - return; - const _RandomAccessIterator __leftmost = __first - difference_type(1); - (void)__leftmost; // can be unused when assertions are disabled - for (_RandomAccessIterator __i = __first + difference_type(1); __i != __last; ++__i) { - _RandomAccessIterator __j = __i - difference_type(1); - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _RandomAccessIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __k != __leftmost, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(__t, *--__k)); // No need for bounds check due to the assumption stated above. - *__j = std::move(__t); - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI bool -__insertion_sort_incomplete(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - switch (__last - __first) { - case 0: - case 1: - return true; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return true; - case 3: - std::__sort3<_AlgPolicy, _Comp>(__first, __first + difference_type(1), --__last, __comp); - return true; - case 4: - std::__sort4<_AlgPolicy, _Comp>( - __first, __first + difference_type(1), __first + difference_type(2), --__last, __comp); - return true; - case 5: - std::__sort5<_AlgPolicy, _Comp>( - __first, - __first + difference_type(1), - __first + difference_type(2), - __first + difference_type(3), - --__last, - __comp); - return true; - } - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - _RandomAccessIterator __j = __first + difference_type(2); - std::__sort3<_AlgPolicy, _Comp>(__first, __first + difference_type(1), __j, __comp); - const unsigned __limit = 8; - unsigned __count = 0; - for (_RandomAccessIterator __i = __j + difference_type(1); __i != __last; ++__i) { - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _RandomAccessIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - } while (__j != __first && __comp(__t, *--__k)); - *__j = std::move(__t); - if (++__count == __limit) - return ++__i == __last; - } - __j = __i; - } - return true; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos( - _RandomAccessIterator __first, _RandomAccessIterator __last, uint64_t& __left_bitset, uint64_t& __right_bitset) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - // Swap one pair on each iteration as long as both bitsets have at least one - // element for swapping. - while (__left_bitset != 0 && __right_bitset != 0) { - difference_type __tz_left = std::__countr_zero(__left_bitset); - __left_bitset = std::__libcpp_blsr(__left_bitset); - difference_type __tz_right = std::__countr_zero(__right_bitset); - __right_bitset = std::__libcpp_blsr(__right_bitset); - _Ops::iter_swap(__first + __tz_left, __last - __tz_right); - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void -__populate_left_bitset(_RandomAccessIterator __first, _Compare __comp, _ValueType& __pivot, uint64_t& __left_bitset) { - // Possible vectorization. With a proper "-march" flag, the following loop - // will be compiled into a set of SIMD instructions. - _RandomAccessIterator __iter = __first; - for (int __j = 0; __j < __detail::__block_size;) { - bool __comp_result = !__comp(*__iter, __pivot); - __left_bitset |= (static_cast(__comp_result) << __j); - __j++; - ++__iter; - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void -__populate_right_bitset(_RandomAccessIterator __lm1, _Compare __comp, _ValueType& __pivot, uint64_t& __right_bitset) { - // Possible vectorization. With a proper "-march" flag, the following loop - // will be compiled into a set of SIMD instructions. - _RandomAccessIterator __iter = __lm1; - for (int __j = 0; __j < __detail::__block_size;) { - bool __comp_result = __comp(*__iter, __pivot); - __right_bitset |= (static_cast(__comp_result) << __j); - __j++; - --__iter; - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void __bitset_partition_partial_blocks( - _RandomAccessIterator& __first, - _RandomAccessIterator& __lm1, - _Compare __comp, - _ValueType& __pivot, - uint64_t& __left_bitset, - uint64_t& __right_bitset) { - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __remaining_len = __lm1 - __first + 1; - difference_type __l_size; - difference_type __r_size; - if (__left_bitset == 0 && __right_bitset == 0) { - __l_size = __remaining_len / 2; - __r_size = __remaining_len - __l_size; - } else if (__left_bitset == 0) { - // We know at least one side is a full block. - __l_size = __remaining_len - __detail::__block_size; - __r_size = __detail::__block_size; - } else { // if (__right_bitset == 0) - __l_size = __detail::__block_size; - __r_size = __remaining_len - __detail::__block_size; - } - // Record the comparison outcomes for the elements currently on the left side. - if (__left_bitset == 0) { - _RandomAccessIterator __iter = __first; - for (int __j = 0; __j < __l_size; __j++) { - bool __comp_result = !__comp(*__iter, __pivot); - __left_bitset |= (static_cast(__comp_result) << __j); - ++__iter; - } - } - // Record the comparison outcomes for the elements currently on the right - // side. - if (__right_bitset == 0) { - _RandomAccessIterator __iter = __lm1; - for (int __j = 0; __j < __r_size; __j++) { - bool __comp_result = __comp(*__iter, __pivot); - __right_bitset |= (static_cast(__comp_result) << __j); - --__iter; - } - } - std::__swap_bitmap_pos<_AlgPolicy, _RandomAccessIterator>(__first, __lm1, __left_bitset, __right_bitset); - __first += (__left_bitset == 0) ? __l_size : 0; - __lm1 -= (__right_bitset == 0) ? __r_size : 0; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos_within( - _RandomAccessIterator& __first, _RandomAccessIterator& __lm1, uint64_t& __left_bitset, uint64_t& __right_bitset) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - if (__left_bitset) { - // Swap within the left side. Need to find set positions in the reverse - // order. - while (__left_bitset != 0) { - difference_type __tz_left = __detail::__block_size - 1 - std::__countl_zero(__left_bitset); - __left_bitset &= (static_cast(1) << __tz_left) - 1; - _RandomAccessIterator __it = __first + __tz_left; - if (__it != __lm1) { - _Ops::iter_swap(__it, __lm1); - } - --__lm1; - } - __first = __lm1 + difference_type(1); - } else if (__right_bitset) { - // Swap within the right side. Need to find set positions in the reverse - // order. - while (__right_bitset != 0) { - difference_type __tz_right = __detail::__block_size - 1 - std::__countl_zero(__right_bitset); - __right_bitset &= (static_cast(1) << __tz_right) - 1; - _RandomAccessIterator __it = __lm1 - __tz_right; - if (__it != __first) { - _Ops::iter_swap(__it, __first); - } - ++__first; - } - } -} - -// Partition [__first, __last) using the comparator __comp. *__first has the -// chosen pivot. Elements that are equivalent are kept to the left of the -// pivot. Returns the iterator for the pivot and a bool value which is true if -// the provided range is already sorted, false otherwise. We assume that the -// length of the range is at least three elements. -// -// __bitset_partition uses bitsets for storing outcomes of the comparisons -// between the pivot and other elements. -template -_LIBCPP_HIDE_FROM_ABI std::pair<_RandomAccessIterator, bool> -__bitset_partition(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - _LIBCPP_ASSERT_INTERNAL(__last - __first >= difference_type(3), ""); - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - - value_type __pivot(_Ops::__iter_move(__first)); - // Find the first element greater than the pivot. - if (__comp(__pivot, *(__last - difference_type(1)))) { - // Not guarded since we know the last element is greater than the pivot. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - } else { - while (++__first < __last && !__comp(__pivot, *__first)) { - } - } - // Find the last element less than or equal to the pivot. - if (__first < __last) { - // It will be always guarded because __introsort will do the median-of-three - // before calling this. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - // If the first element greater than the pivot is at or after the - // last element less than or equal to the pivot, then we have covered the - // entire range without swapping elements. This implies the range is already - // partitioned. - bool __already_partitioned = __first >= __last; - if (!__already_partitioned) { - _Ops::iter_swap(__first, __last); - ++__first; - } - - // In [__first, __last) __last is not inclusive. From now on, it uses last - // minus one to be inclusive on both sides. - _RandomAccessIterator __lm1 = __last - difference_type(1); - uint64_t __left_bitset = 0; - uint64_t __right_bitset = 0; - - // Reminder: length = __lm1 - __first + 1. - while (__lm1 - __first >= 2 * __detail::__block_size - 1) { - // Record the comparison outcomes for the elements currently on the left - // side. - if (__left_bitset == 0) - std::__populate_left_bitset<_Compare>(__first, __comp, __pivot, __left_bitset); - // Record the comparison outcomes for the elements currently on the right - // side. - if (__right_bitset == 0) - std::__populate_right_bitset<_Compare>(__lm1, __comp, __pivot, __right_bitset); - // Swap the elements recorded to be the candidates for swapping in the - // bitsets. - std::__swap_bitmap_pos<_AlgPolicy, _RandomAccessIterator>(__first, __lm1, __left_bitset, __right_bitset); - // Only advance the iterator if all the elements that need to be moved to - // other side were moved. - __first += (__left_bitset == 0) ? difference_type(__detail::__block_size) : difference_type(0); - __lm1 -= (__right_bitset == 0) ? difference_type(__detail::__block_size) : difference_type(0); - } - // Now, we have a less-than a block worth of elements on at least one of the - // sides. - std::__bitset_partition_partial_blocks<_AlgPolicy, _Compare>( - __first, __lm1, __comp, __pivot, __left_bitset, __right_bitset); - // At least one the bitsets would be empty. For the non-empty one, we need to - // properly partition the elements that appear within that bitset. - std::__swap_bitmap_pos_within<_AlgPolicy>(__first, __lm1, __left_bitset, __right_bitset); - - // Move the pivot to its correct position. - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return std::make_pair(__pivot_pos, __already_partitioned); -} - -// Partition [__first, __last) using the comparator __comp. *__first has the -// chosen pivot. Elements that are equivalent are kept to the right of the -// pivot. Returns the iterator for the pivot and a bool value which is true if -// the provided range is already sorted, false otherwise. We assume that the -// length of the range is at least three elements. -template -_LIBCPP_HIDE_FROM_ABI std::pair<_RandomAccessIterator, bool> -__partition_with_equals_on_right(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - _LIBCPP_ASSERT_INTERNAL(__last - __first >= difference_type(3), ""); - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - value_type __pivot(_Ops::__iter_move(__first)); - // Find the first element greater or equal to the pivot. It will be always - // guarded because __introsort will do the median-of-three before calling - // this. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(*__first, __pivot)); - - // Find the last element less than the pivot. - if (__begin == __first - difference_type(1)) { - while (__first < __last && !__comp(*--__last, __pivot)) - ; - } else { - // Guarded. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (!__comp(*__last, __pivot)); - } - - // If the first element greater than or equal to the pivot is at or after the - // last element less than the pivot, then we have covered the entire range - // without swapping elements. This implies the range is already partitioned. - bool __already_partitioned = __first >= __last; - // Go through the remaining elements. Swap pairs of elements (one to the - // right of the pivot and the other to left of the pivot) that are not on the - // correct side of the pivot. - while (__first < __last) { - _Ops::iter_swap(__first, __last); - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(*__first, __pivot)); - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (!__comp(*__last, __pivot)); - } - // Move the pivot to its correct position. - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return std::make_pair(__pivot_pos, __already_partitioned); -} - -// Similar to the above function. Elements equivalent to the pivot are put to -// the left of the pivot. Returns the iterator to the pivot element. -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__partition_with_equals_on_left(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - value_type __pivot(_Ops::__iter_move(__first)); - if (__comp(__pivot, *(__last - difference_type(1)))) { - // Guarded. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - } else { - while (++__first < __last && !__comp(__pivot, *__first)) { - } - } - - if (__first < __last) { - // It will be always guarded because __introsort will do the - // median-of-three before calling this. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - while (__first < __last) { - _Ops::iter_swap(__first, __last); - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return __first; -} - -// The main sorting function. Implements introsort combined with other ideas: -// - option of using block quick sort for partitioning, -// - guarded and unguarded insertion sort for small lengths, -// - Tuckey's ninther technique for computing the pivot, -// - check on whether partition was not required. -// The implementation is partly based on Orson Peters' pattern-defeating -// quicksort, published at: . -template -void __introsort(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __depth, - bool __leftmost = true) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - using _Comp_ref = __comp_ref_type<_Compare>; - // Upper bound for using insertion sort for sorting. - _LIBCPP_CONSTEXPR difference_type __limit = 24; - // Lower bound for using Tuckey's ninther technique for median computation. - _LIBCPP_CONSTEXPR difference_type __ninther_threshold = 128; - while (true) { - difference_type __len = __last - __first; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return; - case 3: - std::__sort3<_AlgPolicy, _Compare>(__first, __first + difference_type(1), --__last, __comp); - return; - case 4: - std::__sort4<_AlgPolicy, _Compare>( - __first, __first + difference_type(1), __first + difference_type(2), --__last, __comp); - return; - case 5: - std::__sort5<_AlgPolicy, _Compare>( - __first, - __first + difference_type(1), - __first + difference_type(2), - __first + difference_type(3), - --__last, - __comp); - return; - } - // Use insertion sort if the length of the range is below the specified limit. - if (__len < __limit) { - if (__leftmost) { - std::__insertion_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - } else { - std::__insertion_sort_unguarded<_AlgPolicy, _Compare>(__first, __last, __comp); - } - return; - } - if (__depth == 0) { - // Fallback to heap sort as Introsort suggests. - std::__partial_sort<_AlgPolicy, _Compare>(__first, __last, __last, __comp); - return; - } - --__depth; - { - difference_type __half_len = __len / 2; - // Use Tuckey's ninther technique or median of 3 for pivot selection - // depending on the length of the range being sorted. - if (__len > __ninther_threshold) { - std::__sort3<_AlgPolicy, _Compare>(__first, __first + __half_len, __last - difference_type(1), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + difference_type(1), __first + (__half_len - 1), __last - difference_type(2), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + difference_type(2), __first + (__half_len + 1), __last - difference_type(3), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + (__half_len - 1), __first + __half_len, __first + (__half_len + 1), __comp); - _Ops::iter_swap(__first, __first + __half_len); - } else { - std::__sort3<_AlgPolicy, _Compare>(__first + __half_len, __first, __last - difference_type(1), __comp); - } - } - // The elements to the left of the current iterator range are already - // sorted. If the current iterator range to be sorted is not the - // leftmost part of the entire iterator range and the pivot is same as - // the highest element in the range to the left, then we know that all - // the elements in the range [first, pivot] would be equal to the pivot, - // assuming the equal elements are put on the left side when - // partitioned. This also means that we do not need to sort the left - // side of the partition. - if (!__leftmost && !__comp(*(__first - difference_type(1)), *__first)) { - __first = std::__partition_with_equals_on_left<_AlgPolicy, _RandomAccessIterator, _Comp_ref>( - __first, __last, _Comp_ref(__comp)); - continue; - } - // Use bitset partition only if asked for. - auto __ret = _UseBitSetPartition - ? std::__bitset_partition<_AlgPolicy, _RandomAccessIterator, _Compare>(__first, __last, __comp) - : std::__partition_with_equals_on_right<_AlgPolicy, _RandomAccessIterator, _Compare>( - __first, __last, __comp); - _RandomAccessIterator __i = __ret.first; - // [__first, __i) < *__i and *__i <= [__i+1, __last) - // If we were given a perfect partition, see if insertion sort is quick... - if (__ret.second) { - bool __fs = std::__insertion_sort_incomplete<_AlgPolicy, _Compare>(__first, __i, __comp); - if (std::__insertion_sort_incomplete<_AlgPolicy, _Compare>(__i + difference_type(1), __last, __comp)) { - if (__fs) - return; - __last = __i; - continue; - } else { - if (__fs) { - __first = ++__i; - continue; - } - } - } - // Sort the left partiton recursively and the right partition with tail recursion elimination. - std::__introsort<_AlgPolicy, _Compare, _RandomAccessIterator, _UseBitSetPartition>( - __first, __i, __comp, __depth, __leftmost); - __leftmost = false; - __first = ++__i; - } -} - -template -void __sort(_RandomAccessIterator, _RandomAccessIterator, _Comp); - -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, char*>(char*, char*, __less&); -#if _LIBCPP_HAS_WIDE_CHARACTERS -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, wchar_t*>(wchar_t*, wchar_t*, __less&); -#endif -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, signed char*>(signed char*, signed char*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned char*>(unsigned char*, unsigned char*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, short*>(short*, short*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned short*>(unsigned short*, unsigned short*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, int*>(int*, int*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned*>(unsigned*, unsigned*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, long*>(long*, long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned long*>(unsigned long*, unsigned long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, long long*>(long long*, long long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, unsigned long long*>( - unsigned long long*, unsigned long long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, float*>(float*, float*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, double*>(double*, double*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, long double*>(long double*, long double*, __less&); - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -__sort_dispatch(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp& __comp) { - if (__first == __last) // log(0) is undefined, so don't try computing the depth - return; - - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __depth_limit = 2 * std::__bit_log2(std::__to_unsigned_like(__last - __first)); - - // Only use bitset partitioning for arithmetic types. We should also check - // that the default comparator is in use so that we are sure that there are no - // branches in the comparator. - std::__introsort<_AlgPolicy, _Comp&, _RandomAccessIterator, __use_branchless_sort<_Comp, _RandomAccessIterator> >( - __first, __last, __comp, __depth_limit); -} - -template -using __is_any_of _LIBCPP_NODEBUG = _Or...>; - -template -using __sort_is_specialized_in_library _LIBCPP_NODEBUG = __is_any_of< - _Type, - char, -#if _LIBCPP_HAS_WIDE_CHARACTERS - wchar_t, -#endif - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - unsigned long long, - float, - double, - long double>; - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, __less<>&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, less<_Type>&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} - -#if _LIBCPP_STD_VER >= 14 -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, less<>&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} -#endif - -#if _LIBCPP_STD_VER >= 20 -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, ranges::less&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} -#endif - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -__sort_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp& __comp) { - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - if (__libcpp_is_constant_evaluated()) { - std::__partial_sort<_AlgPolicy>( - std::__unwrap_iter(__first), std::__unwrap_iter(__last), std::__unwrap_iter(__last), __comp); - } else { - std::__sort_dispatch<_AlgPolicy>(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __comp); - } - std::__check_strict_weak_ordering_sorted(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - std::__sort_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::sort(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/sort_heap.h b/third_party/libcxx/include/c++/v1/__algorithm/sort_heap.h deleted file mode 100644 index f20b110..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/sort_heap.h +++ /dev/null @@ -1,63 +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___ALGORITHM_SORT_HEAP_H -#define _LIBCPP___ALGORITHM_SORT_HEAP_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/pop_heap.h> -#include <__config> -#include <__debug_utils/strict_weak_ordering_check.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/is_constructible.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 - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - _RandomAccessIterator __saved_last = __last; - __comp_ref_type<_Compare> __comp_ref = __comp; - - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - for (difference_type __n = __last - __first; __n > 1; --__last, (void)--__n) - std::__pop_heap<_AlgPolicy>(__first, __last, __comp_ref, __n); - std::__check_strict_weak_ordering_sorted(__first, __saved_last, __comp_ref); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - std::__sort_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::sort_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SORT_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/specialized_algorithms.h b/third_party/libcxx/include/c++/v1/__algorithm/specialized_algorithms.h deleted file mode 100644 index 58b4d93..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/specialized_algorithms.h +++ /dev/null @@ -1,55 +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___ALGORITHM_SPECIALIZED_ALGORITHMS_H -#define _LIBCPP___ALGORITHM_SPECIALIZED_ALGORITHMS_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace _Algorithm { -struct __copy {}; -struct __fill_n {}; -struct __for_each {}; -struct __swap_ranges {}; -} // namespace _Algorithm - -template -struct __single_iterator; - -template -struct __iterator_pair; - -template -struct __single_range; - -// This struct allows specializing algorithms for specific arguments. This is useful when we know a more efficient -// algorithm implementation for e.g. library-defined iterators. _Alg is one of tags defined inside the _Algorithm -// namespace above. _Ranges is an essentially arbitrary subset of the arguments to the algorithm that are used for -// dispatching. This set is specific to the algorithm: look at each algorithm to see which arguments they use for -// dispatching to specialized algorithms. -// -// A specialization of `__specialized_algorithm` has to define `__has_algorithm` to true for the specialized algorithm -// to be used. This is intended for cases where iterators can do generic unwrapping and forward to a different -// specialization of `__specialized_algorithm`. -// -// If __has_algorithm is true, there has to be an operator() which will get called with the actual arguments to the -// algorithm. -template -struct __specialized_algorithm { - static const bool __has_algorithm = false; -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_SPECIALIZED_ALGORITHMS_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/stable_partition.h b/third_party/libcxx/include/c++/v1/__algorithm/stable_partition.h deleted file mode 100644 index b389ae2..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/stable_partition.h +++ /dev/null @@ -1,305 +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___ALGORITHM_STABLE_PARTITION_H -#define _LIBCPP___ALGORITHM_STABLE_PARTITION_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/rotate.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__iterator/advance.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__memory/construct_at.h> -#include <__memory/destruct_n.h> -#include <__memory/unique_ptr.h> -#include <__memory/unique_temporary_buffer.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _ForwardIterator __stable_partition_impl( - _ForwardIterator __first, - _ForwardIterator __last, - _Predicate __pred, - _Distance __len, - _Pair __p, - forward_iterator_tag __fit) { - using _Ops = _IterOps<_AlgPolicy>; - - // *__first is known to be false - // __len >= 1 - if (__len == 1) - return __first; - if (__len == 2) { - _ForwardIterator __m = __first; - if (__pred(*++__m)) { - _Ops::iter_swap(__first, __m); - return __m; - } - return __first; - } - if (__len <= __p.second) { // The buffer is big enough to use - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__p.first, __d); - // Move the falses into the temporary buffer, and the trues to the front of the line - // Update __first to always point to the end of the trues - value_type* __t = __p.first; - std::__construct_at(__t, _Ops::__iter_move(__first)); - __d.template __incr(); - ++__t; - _ForwardIterator __i = __first; - while (++__i != __last) { - if (__pred(*__i)) { - *__first = _Ops::__iter_move(__i); - ++__first; - } else { - std::__construct_at(__t, _Ops::__iter_move(__i)); - __d.template __incr(); - ++__t; - } - } - // All trues now at start of range, all falses in buffer - // Move falses back into range, but don't mess up __first which points to first false - __i = __first; - for (value_type* __t2 = __p.first; __t2 < __t; ++__t2, (void)++__i) - *__i = _Ops::__iter_move(__t2); - // __h destructs moved-from values out of the temp buffer, but doesn't deallocate buffer - return __first; - } - // Else not enough buffer, do in place - // __len >= 3 - _ForwardIterator __m = __first; - _Distance __len2 = __len / 2; // __len2 >= 2 - _Ops::advance(__m, __len2); - // recurse on [__first, __m), *__first know to be false - // F????????????????? - // f m l - _ForwardIterator __first_false = - std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__first, __m, __pred, __len2, __p, __fit); - // TTTFFFFF?????????? - // f ff m l - // recurse on [__m, __last], except increase __m until *(__m) is false, *__last know to be true - _ForwardIterator __m1 = __m; - _ForwardIterator __second_false = __last; - _Distance __len_half = __len - __len2; - while (__pred(*__m1)) { - if (++__m1 == __last) - goto __second_half_done; - --__len_half; - } - // TTTFFFFFTTTF?????? - // f ff m m1 l - __second_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__m1, __last, __pred, __len_half, __p, __fit); -__second_half_done: - // TTTFFFFFTTTTTFFFFF - // f ff m sf l - return std::__rotate<_AlgPolicy>(__first_false, __m, __second_false).first; - // TTTTTTTTFFFFFFFFFF - // | -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _ForwardIterator -__stable_partition_impl(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred, forward_iterator_tag) { - typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type; - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - - const difference_type __alloc_limit = 3; // might want to make this a function of trivial assignment - // Either prove all true and return __first or point to first false - while (true) { - if (__first == __last) - return __first; - if (!__pred(*__first)) - break; - ++__first; - } - // We now have a reduced range [__first, __last) - // *__first is known to be false - difference_type __len = _IterOps<_AlgPolicy>::distance(__first, __last); - __unique_temporary_buffer __unique_buf; - pair __p(0, 0); - if (__len >= __alloc_limit) { - __unique_buf = std::__allocate_unique_temporary_buffer(__len); - __p.first = __unique_buf.get(); - __p.second = __unique_buf.get_deleter().__count_; - } - return std::__stable_partition_impl<_AlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, __len, __p, forward_iterator_tag()); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX26 _BidirectionalIterator __stable_partition_impl( - _BidirectionalIterator __first, - _BidirectionalIterator __last, - _Predicate __pred, - _Distance __len, - _Pair __p, - bidirectional_iterator_tag __bit) { - using _Ops = _IterOps<_AlgPolicy>; - - // *__first is known to be false - // *__last is known to be true - // __len >= 2 - if (__len == 2) { - _Ops::iter_swap(__first, __last); - return __last; - } - if (__len == 3) { - _BidirectionalIterator __m = __first; - if (__pred(*++__m)) { - _Ops::iter_swap(__first, __m); - _Ops::iter_swap(__m, __last); - return __last; - } - _Ops::iter_swap(__m, __last); - _Ops::iter_swap(__first, __m); - return __m; - } - if (__len <= __p.second) { // The buffer is big enough to use - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__p.first, __d); - // Move the falses into the temporary buffer, and the trues to the front of the line - // Update __first to always point to the end of the trues - value_type* __t = __p.first; - std::__construct_at(__t, _Ops::__iter_move(__first)); - __d.template __incr(); - ++__t; - _BidirectionalIterator __i = __first; - while (++__i != __last) { - if (__pred(*__i)) { - *__first = _Ops::__iter_move(__i); - ++__first; - } else { - std::__construct_at(__t, _Ops::__iter_move(__i)); - __d.template __incr(); - ++__t; - } - } - // move *__last, known to be true - *__first = _Ops::__iter_move(__i); - __i = ++__first; - // All trues now at start of range, all falses in buffer - // Move falses back into range, but don't mess up __first which points to first false - for (value_type* __t2 = __p.first; __t2 < __t; ++__t2, (void)++__i) - *__i = _Ops::__iter_move(__t2); - // __h destructs moved-from values out of the temp buffer, but doesn't deallocate buffer - return __first; - } - // Else not enough buffer, do in place - // __len >= 4 - _BidirectionalIterator __m = __first; - _Distance __len2 = __len / 2; // __len2 >= 2 - _Ops::advance(__m, __len2); - // recurse on [__first, __m-1], except reduce __m-1 until *(__m-1) is true, *__first know to be false - // F????????????????T - // f m l - _BidirectionalIterator __m1 = __m; - _BidirectionalIterator __first_false = __first; - _Distance __len_half = __len2; - while (!__pred(*--__m1)) { - if (__m1 == __first) - goto __first_half_done; - --__len_half; - } - // F???TFFF?????????T - // f m1 m l - __first_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__first, __m1, __pred, __len_half, __p, __bit); -__first_half_done: - // TTTFFFFF?????????T - // f ff m l - // recurse on [__m, __last], except increase __m until *(__m) is false, *__last know to be true - __m1 = __m; - _BidirectionalIterator __second_false = __last; - ++__second_false; - __len_half = __len - __len2; - while (__pred(*__m1)) { - if (++__m1 == __last) - goto __second_half_done; - --__len_half; - } - // TTTFFFFFTTTF?????T - // f ff m m1 l - __second_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__m1, __last, __pred, __len_half, __p, __bit); -__second_half_done: - // TTTFFFFFTTTTTFFFFF - // f ff m sf l - return std::__rotate<_AlgPolicy>(__first_false, __m, __second_false).first; - // TTTTTTTTFFFFFFFFFF - // | -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _BidirectionalIterator __stable_partition_impl( - _BidirectionalIterator __first, _BidirectionalIterator __last, _Predicate __pred, bidirectional_iterator_tag) { - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - const difference_type __alloc_limit = 4; // might want to make this a function of trivial assignment - // Either prove all true and return __first or point to first false - while (true) { - if (__first == __last) - return __first; - if (!__pred(*__first)) - break; - ++__first; - } - // __first points to first false, everything prior to __first is already set. - // Either prove [__first, __last) is all false and return __first, or point __last to last true - do { - if (__first == --__last) - return __first; - } while (!__pred(*__last)); - // We now have a reduced range [__first, __last] - // *__first is known to be false - // *__last is known to be true - // __len >= 2 - difference_type __len = _IterOps<_AlgPolicy>::distance(__first, __last) + 1; - __unique_temporary_buffer __unique_buf; - pair __p(0, 0); - if (__len >= __alloc_limit) { - __unique_buf = std::__allocate_unique_temporary_buffer(__len); - __p.first = __unique_buf.get(); - __p.second = __unique_buf.get_deleter().__count_; - } - return std::__stable_partition_impl<_AlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, __len, __p, bidirectional_iterator_tag()); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _ForwardIterator __stable_partition( - _ForwardIterator __first, _ForwardIterator __last, _Predicate&& __pred, _IterCategory __iter_category) { - return std::__stable_partition_impl<_AlgPolicy, __remove_cvref_t<_Predicate>&>( - std::move(__first), std::move(__last), __pred, __iter_category); -} - -template -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR_SINCE_CXX26 _ForwardIterator -stable_partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - using _IterCategory = typename iterator_traits<_ForwardIterator>::iterator_category; - return std::__stable_partition<_ClassicAlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, _IterCategory()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_STABLE_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/stable_sort.h b/third_party/libcxx/include/c++/v1/__algorithm/stable_sort.h deleted file mode 100644 index 64c8080..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/stable_sort.h +++ /dev/null @@ -1,323 +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___ALGORITHM_STABLE_SORT_H -#define _LIBCPP___ALGORITHM_STABLE_SORT_H - -#include <__algorithm/comp.h> -#include <__algorithm/comp_ref_type.h> -#include <__algorithm/inplace_merge.h> -#include <__algorithm/iterator_operations.h> -#include <__algorithm/radix_sort.h> -#include <__algorithm/sort.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__debug_utils/strict_weak_ordering_check.h> -#include <__iterator/iterator_traits.h> -#include <__memory/construct_at.h> -#include <__memory/destruct_n.h> -#include <__memory/unique_ptr.h> -#include <__memory/unique_temporary_buffer.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_trivially_assignable.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __insertion_sort_move( - _BidirectionalIterator __first1, - _BidirectionalIterator __last1, - typename iterator_traits<_BidirectionalIterator>::value_type* __first2, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (__first1 != __last1) { - __destruct_n __d(0); - unique_ptr __h(__first2, __d); - value_type* __last2 = __first2; - std::__construct_at(__last2, _Ops::__iter_move(__first1)); - __d.template __incr(); - for (++__last2; ++__first1 != __last1; ++__last2) { - value_type* __j2 = __last2; - value_type* __i2 = __j2; - if (__comp(*__first1, *--__i2)) { - std::__construct_at(__j2, std::move(*__i2)); - __d.template __incr(); - for (--__j2; __i2 != __first2 && __comp(*__first1, *--__i2); --__j2) - *__j2 = std::move(*__i2); - *__j2 = _Ops::__iter_move(__first1); - } else { - std::__construct_at(__j2, _Ops::__iter_move(__first1)); - __d.template __incr(); - } - } - __h.release(); - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __merge_move_construct( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - typename iterator_traits<_InputIterator1>::value_type* __result, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_InputIterator1>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__result, __d); - for (; true; ++__result) { - if (__first1 == __last1) { - for (; __first2 != __last2; ++__first2, (void)++__result, __d.template __incr()) - std::__construct_at(__result, _Ops::__iter_move(__first2)); - __h.release(); - return; - } - if (__first2 == __last2) { - for (; __first1 != __last1; ++__first1, (void)++__result, __d.template __incr()) - std::__construct_at(__result, _Ops::__iter_move(__first1)); - __h.release(); - return; - } - if (__comp(*__first2, *__first1)) { - std::__construct_at(__result, _Ops::__iter_move(__first2)); - __d.template __incr(); - ++__first2; - } else { - std::__construct_at(__result, _Ops::__iter_move(__first1)); - __d.template __incr(); - ++__first1; - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void __merge_move_assign( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - for (; __first1 != __last1; ++__first1, (void)++__result) - *__result = _Ops::__iter_move(__first1); - return; - } - if (__comp(*__first2, *__first1)) { - *__result = _Ops::__iter_move(__first2); - ++__first2; - } else { - *__result = _Ops::__iter_move(__first1); - ++__first1; - } - } - for (; __first2 != __last2; ++__first2, (void)++__result) - *__result = _Ops::__iter_move(__first2); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX26 void __stable_sort( - _RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __buff, - ptrdiff_t __buff_size); - -template -_LIBCPP_CONSTEXPR_SINCE_CXX26 void __stable_sort_move( - _RandomAccessIterator __first1, - _RandomAccessIterator __last1, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __first2) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - switch (__len) { - case 0: - return; - case 1: - std::__construct_at(__first2, _Ops::__iter_move(__first1)); - return; - case 2: - __destruct_n __d(0); - unique_ptr __h2(__first2, __d); - if (__comp(*--__last1, *__first1)) { - std::__construct_at(__first2, _Ops::__iter_move(__last1)); - __d.template __incr(); - ++__first2; - std::__construct_at(__first2, _Ops::__iter_move(__first1)); - } else { - std::__construct_at(__first2, _Ops::__iter_move(__first1)); - __d.template __incr(); - ++__first2; - std::__construct_at(__first2, _Ops::__iter_move(__last1)); - } - __h2.release(); - return; - } - if (__len <= 8) { - std::__insertion_sort_move<_AlgPolicy, _Compare>(__first1, __last1, __first2, __comp); - return; - } - typename iterator_traits<_RandomAccessIterator>::difference_type __l2 = __len / 2; - _RandomAccessIterator __m = __first1 + __l2; - std::__stable_sort<_AlgPolicy, _Compare>(__first1, __m, __comp, __l2, __first2, __l2); - std::__stable_sort<_AlgPolicy, _Compare>(__m, __last1, __comp, __len - __l2, __first2 + __l2, __len - __l2); - std::__merge_move_construct<_AlgPolicy, _Compare>(__first1, __m, __m, __last1, __first2, __comp); -} - -template -struct __stable_sort_switch { - static const unsigned value = 128 * is_trivially_copy_assignable<_Tp>::value; -}; - -#if _LIBCPP_STD_VER >= 17 -template -_LIBCPP_HIDE_FROM_ABI constexpr unsigned __radix_sort_min_bound() { - static_assert(__is_ordered_integer_representable_v<_Tp>); - if constexpr (sizeof(_Tp) == 1) { - return 1 << 8; - } - - return 1 << 10; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr unsigned __radix_sort_max_bound() { - static_assert(__is_ordered_integer_representable_v<_Tp>); - if constexpr (sizeof(_Tp) >= 8) { - return 1 << 15; - } - - return 1 << 16; -} -#endif // _LIBCPP_STD_VER >= 17 - -template -_LIBCPP_CONSTEXPR_SINCE_CXX26 void __stable_sort( - _RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __buff, - ptrdiff_t __buff_size) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - return; - } - if (__len <= static_cast(__stable_sort_switch::value)) { - std::__insertion_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - return; - } - -#if _LIBCPP_STD_VER >= 17 - constexpr auto __default_comp = __desugars_to_v<__less_tag, _Compare, value_type, value_type >; - constexpr auto __radix_sortable = - __is_ordered_integer_representable_v && - is_same_v< value_type&, __iterator_reference<_RandomAccessIterator>>; - if constexpr (__default_comp && __radix_sortable) { - if (__len <= __buff_size && __len >= static_cast(std::__radix_sort_min_bound()) && - __len <= static_cast(std::__radix_sort_max_bound())) { - if (__libcpp_is_constant_evaluated()) { - for (auto* __p = __buff; __p < __buff + __buff_size; ++__p) { - std::__construct_at(__p); - } - } - - std::__radix_sort(__first, __last, __buff); - return; - } - } -#endif // _LIBCPP_STD_VER >= 17 - - typename iterator_traits<_RandomAccessIterator>::difference_type __l2 = __len / 2; - _RandomAccessIterator __m = __first + __l2; - if (__len <= __buff_size) { - __destruct_n __d(0); - unique_ptr __h2(__buff, __d); - std::__stable_sort_move<_AlgPolicy, _Compare>(__first, __m, __comp, __l2, __buff); - __d.__set(__l2, (value_type*)nullptr); - std::__stable_sort_move<_AlgPolicy, _Compare>(__m, __last, __comp, __len - __l2, __buff + __l2); - __d.__set(__len, (value_type*)nullptr); - std::__merge_move_assign<_AlgPolicy, _Compare>( - __buff, __buff + __l2, __buff + __l2, __buff + __len, __first, __comp); - // std::__merge<_Compare>(move_iterator(__buff), - // move_iterator(__buff + __l2), - // move_iterator<_RandomAccessIterator>(__buff + __l2), - // move_iterator<_RandomAccessIterator>(__buff + __len), - // __first, __comp); - return; - } - std::__stable_sort<_AlgPolicy, _Compare>(__first, __m, __comp, __l2, __buff, __buff_size); - std::__stable_sort<_AlgPolicy, _Compare>(__m, __last, __comp, __len - __l2, __buff, __buff_size); - std::__inplace_merge<_AlgPolicy>(__first, __m, __last, __comp, __l2, __len - __l2, __buff, __buff_size); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void -__stable_sort_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) { - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - - difference_type __len = __last - __first; - __unique_temporary_buffer __unique_buf; - pair __buf(0, 0); - if (__len > static_cast(__stable_sort_switch::value)) { - __unique_buf = std::__allocate_unique_temporary_buffer(__len); - __buf.first = __unique_buf.get(); - __buf.second = __unique_buf.get_deleter().__count_; - } - - std::__stable_sort<_AlgPolicy, __comp_ref_type<_Compare> >(__first, __last, __comp, __len, __buf.first, __buf.second); - std::__check_strict_weak_ordering_sorted(__first, __last, __comp); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void -stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - std::__stable_sort_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 void -stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::stable_sort(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_STABLE_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/swap_ranges.h b/third_party/libcxx/include/c++/v1/__algorithm/swap_ranges.h deleted file mode 100644 index 3a9e841..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/swap_ranges.h +++ /dev/null @@ -1,70 +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___ALGORITHM_SWAP_RANGES_H -#define _LIBCPP___ALGORITHM_SWAP_RANGES_H - -#include <__algorithm/iterator_operations.h> -#include <__algorithm/specialized_algorithms.h> -#include <__config> -#include <__type_traits/enable_if.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template < - class _AlgPolicy, - class _Iter1, - class _Sent1, - class _Iter2, - class _SpecialAlg = - __specialized_algorithm<_Algorithm::__swap_ranges, __iterator_pair<_Iter1, _Sent1>, __single_iterator<_Iter2> >, - __enable_if_t<_SpecialAlg::__has_algorithm, int> = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> -__swap_ranges(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2) { - return _SpecialAlg()(std::move(__first1), std::move(__last1), std::move(__first2)); -} - -template < - class _AlgPolicy, - class _Iter1, - class _Sent1, - class _Iter2, - class _SpecialAlg = - __specialized_algorithm<_Algorithm::__swap_ranges, __iterator_pair<_Iter1, _Sent1>, __single_iterator<_Iter2> >, - __enable_if_t = 0> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> -__swap_ranges(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2) { - while (__first1 != __last1) { - _IterOps<_AlgPolicy>::iter_swap(__first1, __first2); - ++__first1; - ++__first2; - } - - return pair<_Iter1, _Iter2>(std::move(__first1), std::move(__first2)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator2 -swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { - return std::__swap_ranges<_ClassicAlgPolicy>(std::move(__first1), std::move(__last1), std::move(__first2)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_SWAP_RANGES_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/three_way_comp_ref_type.h b/third_party/libcxx/include/c++/v1/__algorithm/three_way_comp_ref_type.h deleted file mode 100644 index f6f7645..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/three_way_comp_ref_type.h +++ /dev/null @@ -1,74 +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___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H -#define _LIBCPP___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H - -#include <__assert> -#include <__compare/ordering.h> -#include <__config> -#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 - -template -struct __debug_three_way_comp { - _Comp& __comp_; - _LIBCPP_HIDE_FROM_ABI constexpr __debug_three_way_comp(_Comp& __c) : __comp_(__c) {} - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(const _Tp& __x, const _Up& __y) { - auto __r = __comp_(__x, __y); - if constexpr (__comparison_category) - __do_compare_assert(__y, __x, __r); - return __r; - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp& __x, _Up& __y) { - auto __r = __comp_(__x, __y); - if constexpr (__comparison_category) - __do_compare_assert(__y, __x, __r); - return __r; - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr void __do_compare_assert(_LHS& __l, _RHS& __r, _Order __o) { - _Order __expected = __o; - if (__o == _Order::less) - __expected = _Order::greater; - if (__o == _Order::greater) - __expected = _Order::less; - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - __comp_(__l, __r) == __expected, "Comparator does not induce a strict weak ordering"); - (void)__l; - (void)__r; - } -}; - -// Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. -# if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -template -using __three_way_comp_ref_type _LIBCPP_NODEBUG = __debug_three_way_comp<_Comp>; -# else -template -using __three_way_comp_ref_type _LIBCPP_NODEBUG = _Comp&; -# endif - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/transform.h b/third_party/libcxx/include/c++/v1/__algorithm/transform.h deleted file mode 100644 index 1b42440..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/transform.h +++ /dev/null @@ -1,42 +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___ALGORITHM_TRANSFORM_H -#define _LIBCPP___ALGORITHM_TRANSFORM_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __op) { - for (; __first != __last; ++__first, (void)++__result) - *__result = __op(*__first); - return __result; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator transform( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _OutputIterator __result, - _BinaryOperation __binary_op) { - for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) - *__result = __binary_op(*__first1, *__first2); - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ALGORITHM_TRANSFORM_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/uniform_random_bit_generator_adaptor.h b/third_party/libcxx/include/c++/v1/__algorithm/uniform_random_bit_generator_adaptor.h deleted file mode 100644 index bc7a892..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/uniform_random_bit_generator_adaptor.h +++ /dev/null @@ -1,58 +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___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H -#define _LIBCPP___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H - -#include <__config> -#include <__type_traits/invoke.h> -#include <__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_PUSH_MACROS -# include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Range versions of random algorithms (e.g. `std::shuffle`) are less constrained than their classic counterparts. -// Range algorithms only require the given generator to satisfy the `std::uniform_random_bit_generator` concept. -// Classic algorithms require the given generator to meet the uniform random bit generator requirements; these -// requirements include satisfying `std::uniform_random_bit_generator` and add a requirement for the generator to -// provide a nested `result_type` typedef (see `[rand.req.urng]`). -// -// To be able to reuse classic implementations, make the given generator meet the classic requirements by wrapping -// it into an adaptor type that forwards all of its interface and adds the required typedef. -template -class _ClassicGenAdaptor { -private: - // The generator is not required to be copyable or movable, so it has to be stored as a reference. - _Gen& __gen_; - -public: - using result_type = invoke_result_t<_Gen&>; - - _LIBCPP_HIDE_FROM_ABI static constexpr auto min() { return __remove_cvref_t<_Gen>::min(); } - _LIBCPP_HIDE_FROM_ABI static constexpr auto max() { return __remove_cvref_t<_Gen>::max(); } - - _LIBCPP_HIDE_FROM_ABI constexpr explicit _ClassicGenAdaptor(_Gen& __g) : __gen_(__g) {} - - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()() const { return __gen_(); } -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/unique.h b/third_party/libcxx/include/c++/v1/__algorithm/unique.h deleted file mode 100644 index 307c424..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/unique.h +++ /dev/null @@ -1,66 +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___ALGORITHM_UNIQUE_H -#define _LIBCPP___ALGORITHM_UNIQUE_H - -#include <__algorithm/adjacent_find.h> -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__iterator/iterator_traits.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// unique - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 std::pair<_Iter, _Iter> -__unique(_Iter __first, _Sent __last, _BinaryPredicate&& __pred) { - __identity __proj; - __first = std::__adjacent_find(__first, __last, __pred, __proj); - if (__first != __last) { - // ... a a ? ... - // f i - _Iter __i = __first; - for (++__i; ++__i != __last;) - if (!__pred(*__first, *__i)) - *++__first = _IterOps<_AlgPolicy>::__iter_move(__i); - ++__first; - return std::pair<_Iter, _Iter>(std::move(__first), std::move(__i)); - } - return std::pair<_Iter, _Iter>(__first, __first); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -unique(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { - return std::__unique<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __pred).first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -unique(_ForwardIterator __first, _ForwardIterator __last) { - return std::unique(__first, __last, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_UNIQUE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/unique_copy.h b/third_party/libcxx/include/c++/v1/__algorithm/unique_copy.h deleted file mode 100644 index 16ce80c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/unique_copy.h +++ /dev/null @@ -1,127 +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___ALGORITHM_UNIQUE_COPY_H -#define _LIBCPP___ALGORITHM_UNIQUE_COPY_H - -#include <__algorithm/comp.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__type_traits/conditional.h> -#include <__type_traits/is_base_of.h> -#include <__type_traits/is_same.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __unique_copy_tags { - -struct __reread_from_input_tag {}; -struct __reread_from_output_tag {}; -struct __read_from_tmp_value_tag {}; - -} // namespace __unique_copy_tags - -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI pair<_InputIterator, _OutputIterator> -__unique_copy(_InputIterator __first, - _Sent __last, - _OutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__read_from_tmp_value_tag) { - if (__first != __last) { - typename _IterOps<_AlgPolicy>::template __value_type<_InputIterator> __t(*__first); - *__result = __t; - ++__result; - while (++__first != __last) { - if (!__pred(__t, *__first)) { - __t = *__first; - *__result = __t; - ++__result; - } - } - } - return pair<_InputIterator, _OutputIterator>(std::move(__first), std::move(__result)); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _OutputIterator> -__unique_copy(_ForwardIterator __first, - _Sent __last, - _OutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__reread_from_input_tag) { - if (__first != __last) { - _ForwardIterator __i = __first; - *__result = *__i; - ++__result; - while (++__first != __last) { - if (!__pred(*__i, *__first)) { - *__result = *__first; - ++__result; - __i = __first; - } - } - } - return pair<_ForwardIterator, _OutputIterator>(std::move(__first), std::move(__result)); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI pair<_InputIterator, _InputAndOutputIterator> -__unique_copy(_InputIterator __first, - _Sent __last, - _InputAndOutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__reread_from_output_tag) { - if (__first != __last) { - *__result = *__first; - while (++__first != __last) - if (!__pred(*__result, *__first)) - *++__result = *__first; - ++__result; - } - return pair<_InputIterator, _InputAndOutputIterator>(std::move(__first), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _BinaryPredicate __pred) { - using __algo_tag = __conditional_t< - is_base_of::iterator_category>::value, - __unique_copy_tags::__reread_from_input_tag, - __conditional_t< - is_base_of::iterator_category>::value && - is_same< typename iterator_traits<_InputIterator>::value_type, - typename iterator_traits<_OutputIterator>::value_type>::value, - __unique_copy_tags::__reread_from_output_tag, - __unique_copy_tags::__read_from_tmp_value_tag> >; - return std::__unique_copy<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), std::move(__result), __pred, __algo_tag()) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator -unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - return std::unique_copy(std::move(__first), std::move(__last), std::move(__result), __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_UNIQUE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/unwrap_iter.h b/third_party/libcxx/include/c++/v1/__algorithm/unwrap_iter.h deleted file mode 100644 index ea862cd..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/unwrap_iter.h +++ /dev/null @@ -1,83 +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___ALGORITHM_UNWRAP_ITER_H -#define _LIBCPP___ALGORITHM_UNWRAP_ITER_H - -#include <__config> -#include <__iterator/iterator_traits.h> -#include <__memory/pointer_traits.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constructible.h> -#include <__utility/declval.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 - -// TODO: Change the name of __unwrap_iter_impl to something more appropriate -// The job of __unwrap_iter is to remove iterator wrappers (like reverse_iterator or __wrap_iter), -// to reduce the number of template instantiations and to enable pointer-based optimizations e.g. in std::copy. -// -// Some algorithms (e.g. std::copy, but not std::sort) need to convert an -// "unwrapped" result back into the original iterator type. Doing that is the job of __rewrap_iter. - -// Default case - we can't unwrap anything -template ::value> -struct __unwrap_iter_impl { - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __rewrap(_Iter, _Iter __iter) { return __iter; } - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __unwrap(_Iter __i) _NOEXCEPT { return __i; } -}; - -// TODO(hardening): make sure that the following unwrapping doesn't unexpectedly turn hardened iterators into raw -// pointers. - -// It's a contiguous iterator, so we can use a raw pointer instead -template -struct __unwrap_iter_impl<_Iter, true> { - using _ToAddressT _LIBCPP_NODEBUG = decltype(std::__to_address(std::declval<_Iter>())); - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __rewrap(_Iter __orig_iter, _ToAddressT __unwrapped_iter) { - return __orig_iter + (__unwrapped_iter - std::__to_address(__orig_iter)); - } - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToAddressT __unwrap(_Iter __i) _NOEXCEPT { - return std::__to_address(__i); - } -}; - -template > -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 decltype(_Impl::__unwrap(std::declval<_Iter>())) -__unwrap_iter(_Iter __i) _NOEXCEPT { -// Allow input_iterators to be passed to __unwrap_iter (but not __rewrap_iter) -#if _LIBCPP_STD_VER >= 20 - if constexpr (!is_copy_constructible_v<_Iter>) { - return __i; - } else -#endif - { - return _Impl::__unwrap(__i); - } -} - -template > -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _OrigIter __rewrap_iter(_OrigIter __orig_iter, _Iter __iter) _NOEXCEPT { - return _Impl::__rewrap(std::move(__orig_iter), std::move(__iter)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_UNWRAP_ITER_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/unwrap_range.h b/third_party/libcxx/include/c++/v1/__algorithm/unwrap_range.h deleted file mode 100644 index c46094f..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/unwrap_range.h +++ /dev/null @@ -1,70 +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___ALGORITHM_UNWRAP_RANGE_H -#define _LIBCPP___ALGORITHM_UNWRAP_RANGE_H - -#include <__algorithm/unwrap_iter.h> -#include <__config> -#include <__iterator/concepts.h> -#include <__type_traits/is_same.h> -#include <__utility/declval.h> -#include <__utility/move.h> -#include <__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __unwrap_range and __rewrap_range are used to unwrap ranges which may have different iterator and sentinel types. -// __unwrap_iter and __rewrap_iter don't work for this, because they assume that the iterator and sentinel have -// the same type. __unwrap_range tries to get two iterators and then forward to __unwrap_iter. - -#if _LIBCPP_STD_VER >= 20 -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __unwrap_range(_Iter __first, _Sent __last) { - if constexpr (is_same_v<_Iter, _Sent>) - return pair{std::__unwrap_iter(std::move(__first)), std::__unwrap_iter(std::move(__last))}; - else if constexpr (random_access_iterator<_Iter> && sized_sentinel_for<_Sent, _Iter>) { - auto __iter_last = __first + (__last - __first); - return pair{std::__unwrap_iter(std::move(__first)), std::__unwrap_iter(std::move(__iter_last))}; - } else - return pair{std::move(__first), std::move(__last)}; -} - -template < class _Sent, class _Iter, class _Unwrapped> -_LIBCPP_HIDE_FROM_ABI constexpr _Iter __rewrap_range(_Iter __orig_iter, _Unwrapped __iter) { - if constexpr (is_same_v<_Iter, _Sent>) - return std::__rewrap_iter(std::move(__orig_iter), std::move(__iter)); - else if constexpr (random_access_iterator<_Iter> && sized_sentinel_for<_Sent, _Iter>) - return std::__rewrap_iter(std::move(__orig_iter), std::move(__iter)); - else - return __iter; -} -#else // _LIBCPP_STD_VER >= 20 -template ()))> -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR pair<_Unwrapped, _Unwrapped> __unwrap_range(_Iter __first, _Iter __last) { - return std::make_pair(std::__unwrap_iter(std::move(__first)), std::__unwrap_iter(std::move(__last))); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __rewrap_range(_Iter __orig_iter, _Unwrapped __iter) { - return std::__rewrap_iter(std::move(__orig_iter), std::move(__iter)); -} -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_UNWRAP_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__algorithm/upper_bound.h b/third_party/libcxx/include/c++/v1/__algorithm/upper_bound.h deleted file mode 100644 index d77286c..0000000 --- a/third_party/libcxx/include/c++/v1/__algorithm/upper_bound.h +++ /dev/null @@ -1,71 +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___ALGORITHM_UPPER_BOUND_H -#define _LIBCPP___ALGORITHM_UPPER_BOUND_H - -#include <__algorithm/comp.h> -#include <__algorithm/half_positive.h> -#include <__algorithm/iterator_operations.h> -#include <__config> -#include <__functional/identity.h> -#include <__functional/invoke.h> -#include <__iterator/advance.h> -#include <__iterator/distance.h> -#include <__iterator/iterator_traits.h> -#include <__type_traits/invoke.h> -#include <__type_traits/is_callable.h> -#include <__type_traits/is_constructible.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 - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Iter -__upper_bound(_Iter __first, _Sent __last, const _Tp& __value, _Compare&& __comp, _Proj&& __proj) { - auto __len = _IterOps<_AlgPolicy>::distance(__first, __last); - while (__len != 0) { - auto __half_len = std::__half_positive(__len); - auto __mid = _IterOps<_AlgPolicy>::next(__first, __half_len); - if (std::__invoke(__comp, __value, std::__invoke(__proj, *__mid))) - __len = __half_len; - else { - __first = ++__mid; - __len -= __half_len + 1; - } - } - return __first; -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(__is_callable<_Compare&, const _Tp&, decltype(*__first)>::value, "The comparator has to be callable"); - static_assert(is_copy_constructible<_ForwardIterator>::value, "Iterator has to be copy constructible"); - return std::__upper_bound<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), __value, std::move(__comp), std::__identity()); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _ForwardIterator -upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::upper_bound(std::move(__first), std::move(__last), __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___ALGORITHM_UPPER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__assert b/third_party/libcxx/include/c++/v1/__assert deleted file mode 100644 index a9451da..0000000 --- a/third_party/libcxx/include/c++/v1/__assert +++ /dev/null @@ -1,118 +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___ASSERT -#define _LIBCPP___ASSERT - -#include <__assertion_handler> // Note: this include is generated by CMake and is potentially vendor-provided. -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define _LIBCPP_ASSERT(expression, message) \ - (__builtin_expect(static_cast(expression), 1) \ - ? (void)0 \ - : _LIBCPP_ASSERTION_HANDLER(__FILE__ ":" _LIBCPP_TOSTRING( \ - __LINE__) ": libc++ Hardening assertion " _LIBCPP_TOSTRING(expression) " failed: " message "\n")) - -// WARNING: __builtin_assume can currently inhibit optimizations. Only add assumptions with a clear -// optimization intent. See https://discourse.llvm.org/t/llvm-assume-blocks-optimization/71609 for a -// discussion. -#if __has_builtin(__builtin_assume) -# define _LIBCPP_ASSUME(expression) \ - (_LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wassume") \ - __builtin_assume(static_cast(expression)) _LIBCPP_DIAGNOSTIC_POP) -#else -# define _LIBCPP_ASSUME(expression) ((void)0) -#endif - -// clang-format off -// Fast hardening mode checks. - -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST - -// Enabled checks. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -// Disabled checks. -// On most modern platforms, dereferencing a null pointer does not lead to an actual memory access. -# define _LIBCPP_ASSERT_NON_NULL(expression, message) ((void)0) -// Overlapping ranges will make algorithms produce incorrect results but don't directly lead to a security -// vulnerability. -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) ((void)0) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) ((void)0) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) ((void)0) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) ((void)0) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) ((void)0) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) ((void)0) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) ((void)0) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) ((void)0) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) ((void)0) - -// Extensive hardening mode checks. - -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_EXTENSIVE - -// Enabled checks. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message) -// Disabled checks. -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) ((void)0) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) ((void)0) - -// Debug hardening mode checks. - -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG - -// All checks enabled. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message) - -// Disable all checks if hardening is not enabled. - -#else - -// All checks disabled. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) ((void)0) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) ((void)0) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) ((void)0) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) ((void)0) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) ((void)0) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) ((void)0) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) ((void)0) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) ((void)0) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) ((void)0) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) ((void)0) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) ((void)0) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) ((void)0) - -#endif // _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST -// clang-format on - -#endif // _LIBCPP___ASSERT diff --git a/third_party/libcxx/include/c++/v1/__assertion_handler b/third_party/libcxx/include/c++/v1/__assertion_handler deleted file mode 100644 index d352405..0000000 --- a/third_party/libcxx/include/c++/v1/__assertion_handler +++ /dev/null @@ -1,64 +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___ASSERTION_HANDLER -#define _LIBCPP___ASSERTION_HANDLER - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) -# include <__cxx03/__config> -# include <__cxx03/__verbose_abort> -# include <__cxx03/__verbose_trap> -#else -# include <__config> -# include <__log_hardening_failure> -# include <__verbose_abort> -# include <__verbose_trap> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -// Keep the old implementation that doesn't support assertion semantics for backward compatibility with the frozen C++03 -// mode. -# if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -# define _LIBCPP_ASSERTION_HANDLER(message) _LIBCPP_VERBOSE_ABORT("%s", message) -# else -# define _LIBCPP_ASSERTION_HANDLER(message) _LIBCPP_VERBOSE_TRAP(message) -# endif // _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG - -#else - -# if _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_IGNORE -# define _LIBCPP_ASSERTION_HANDLER(message) ((void)0) - -# elif _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_OBSERVE -# define _LIBCPP_ASSERTION_HANDLER(message) _LIBCPP_LOG_HARDENING_FAILURE(message) - -# elif _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE -# define _LIBCPP_ASSERTION_HANDLER(message) _LIBCPP_VERBOSE_TRAP(message) - -# elif _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_ENFORCE -# define _LIBCPP_ASSERTION_HANDLER(message) _LIBCPP_VERBOSE_ABORT("%s", message) - -# else - -# error _LIBCPP_ASSERTION_SEMANTIC must be set to one of the following values: \ -_LIBCPP_ASSERTION_SEMANTIC_IGNORE, \ -_LIBCPP_ASSERTION_SEMANTIC_OBSERVE, \ -_LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE, \ -_LIBCPP_ASSERTION_SEMANTIC_ENFORCE - -# endif // _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_IGNORE - -#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) - -#endif // _LIBCPP___ASSERTION_HANDLER diff --git a/third_party/libcxx/include/c++/v1/__atomic/aliases.h b/third_party/libcxx/include/c++/v1/__atomic/aliases.h deleted file mode 100644 index 4fcceba..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/aliases.h +++ /dev/null @@ -1,111 +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___ATOMIC_ALIASES_H -#define _LIBCPP___ATOMIC_ALIASES_H - -#include <__atomic/atomic.h> -#include <__atomic/atomic_lock_free.h> -#include <__atomic/contention_t.h> -#include <__atomic/is_always_lock_free.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__cstddef/size_t.h> -#include <__type_traits/conditional.h> -#include <__type_traits/make_unsigned.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -using atomic_bool = atomic; -using atomic_char = atomic; -using atomic_schar = atomic; -using atomic_uchar = atomic; -using atomic_short = atomic; -using atomic_ushort = atomic; -using atomic_int = atomic; -using atomic_uint = atomic; -using atomic_long = atomic; -using atomic_ulong = atomic; -using atomic_llong = atomic; -using atomic_ullong = atomic; -#if _LIBCPP_HAS_CHAR8_T -using atomic_char8_t = atomic; -#endif -using atomic_char16_t = atomic; -using atomic_char32_t = atomic; -#if _LIBCPP_HAS_WIDE_CHARACTERS -using atomic_wchar_t = atomic; -#endif - -using atomic_int_least8_t = atomic; -using atomic_uint_least8_t = atomic; -using atomic_int_least16_t = atomic; -using atomic_uint_least16_t = atomic; -using atomic_int_least32_t = atomic; -using atomic_uint_least32_t = atomic; -using atomic_int_least64_t = atomic; -using atomic_uint_least64_t = atomic; - -using atomic_int_fast8_t = atomic; -using atomic_uint_fast8_t = atomic; -using atomic_int_fast16_t = atomic; -using atomic_uint_fast16_t = atomic; -using atomic_int_fast32_t = atomic; -using atomic_uint_fast32_t = atomic; -using atomic_int_fast64_t = atomic; -using atomic_uint_fast64_t = atomic; - -using atomic_int8_t = atomic< int8_t>; -using atomic_uint8_t = atomic; -using atomic_int16_t = atomic< int16_t>; -using atomic_uint16_t = atomic; -using atomic_int32_t = atomic< int32_t>; -using atomic_uint32_t = atomic; -using atomic_int64_t = atomic< int64_t>; -using atomic_uint64_t = atomic; - -using atomic_intptr_t = atomic; -using atomic_uintptr_t = atomic; -using atomic_size_t = atomic; -using atomic_ptrdiff_t = atomic; -using atomic_intmax_t = atomic; -using atomic_uintmax_t = atomic; - -// C++20 atomic_{signed,unsigned}_lock_free: prefer the contention type most highly, then the largest lock-free type -#if _LIBCPP_STD_VER >= 20 -# if ATOMIC_LLONG_LOCK_FREE == 2 -using __largest_lock_free_type _LIBCPP_NODEBUG = long long; -# elif ATOMIC_INT_LOCK_FREE == 2 -using __largest_lock_free_type _LIBCPP_NODEBUG = int; -# elif ATOMIC_SHORT_LOCK_FREE == 2 -using __largest_lock_free_type _LIBCPP_NODEBUG = short; -# elif ATOMIC_CHAR_LOCK_FREE == 2 -using __largest_lock_free_type _LIBCPP_NODEBUG = char; -# else -# define _LIBCPP_NO_LOCK_FREE_TYPES // There are no lockfree types (this can happen on unusual platforms) -# endif - -# ifndef _LIBCPP_NO_LOCK_FREE_TYPES -using __contention_t_or_largest _LIBCPP_NODEBUG = - __conditional_t<__libcpp_is_always_lock_free<__cxx_contention_t>::__value, - __cxx_contention_t, - __largest_lock_free_type>; - -using atomic_signed_lock_free = atomic<__contention_t_or_largest>; -using atomic_unsigned_lock_free = atomic>; -# endif // !_LIBCPP_NO_LOCK_FREE_TYPES -#endif // C++20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ALIASES_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic.h b/third_party/libcxx/include/c++/v1/__atomic/atomic.h deleted file mode 100644 index 3d0ed9c..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic.h +++ /dev/null @@ -1,804 +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___ATOMIC_ATOMIC_H -#define _LIBCPP___ATOMIC_ATOMIC_H - -#include <__atomic/atomic_sync.h> -#include <__atomic/atomic_waitable_traits.h> -#include <__atomic/check_memory_order.h> -#include <__atomic/floating_point_helper.h> -#include <__atomic/is_always_lock_free.h> -#include <__atomic/memory_order.h> -#include <__atomic/support.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__memory/addressof.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_floating_point.h> -#include <__type_traits/is_function.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_nothrow_constructible.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_trivially_copyable.h> -#include <__type_traits/remove_pointer.h> -#include <__utility/forward.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value && !is_same<_Tp, bool>::value> -struct __atomic_base // false -{ - mutable __cxx_atomic_impl<_Tp> __a_; - - using value_type = _Tp; - -#if _LIBCPP_STD_VER >= 17 - static constexpr bool is_always_lock_free = __libcpp_is_always_lock_free<__cxx_atomic_impl<_Tp> >::__value; -#endif - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool is_lock_free() const volatile _NOEXCEPT { - return __cxx_atomic_is_lock_free(sizeof(__cxx_atomic_impl<_Tp>)); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool is_lock_free() const _NOEXCEPT { - return static_cast<__atomic_base const volatile*>(this)->is_lock_free(); - } - _LIBCPP_HIDE_FROM_ABI void store(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - std::__cxx_atomic_store(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI void store(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - std::__cxx_atomic_store(std::addressof(__a_), __d, __m); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp load(memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return std::__cxx_atomic_load(std::addressof(__a_), __m); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp load(memory_order __m = memory_order_seq_cst) const _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return std::__cxx_atomic_load(std::addressof(__a_), __m); - } - _LIBCPP_HIDE_FROM_ABI operator _Tp() const volatile _NOEXCEPT { return load(); } - _LIBCPP_HIDE_FROM_ABI operator _Tp() const _NOEXCEPT { return load(); } - _LIBCPP_HIDE_FROM_ABI _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_exchange(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_exchange(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) volatile _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) volatile _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI void wait(_Tp __v, memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT { - std::__atomic_wait(*this, __v, __m); - } - _LIBCPP_HIDE_FROM_ABI void wait(_Tp __v, memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - std::__atomic_wait(*this, __v, __m); - } - _LIBCPP_HIDE_FROM_ABI void notify_one() volatile _NOEXCEPT { std::__atomic_notify_one(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_one() _NOEXCEPT { std::__atomic_notify_one(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_all() volatile _NOEXCEPT { std::__atomic_notify_all(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_all() _NOEXCEPT { std::__atomic_notify_all(*this); } -#endif // _LIBCPP_STD_VER >= 20 - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI constexpr __atomic_base() noexcept(is_nothrow_default_constructible_v<_Tp>) : __a_(_Tp()) {} -#else - _LIBCPP_HIDE_FROM_ABI __atomic_base() _NOEXCEPT = default; -#endif - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {} - - __atomic_base(const __atomic_base&) = delete; -}; - -// atomic - -template -struct __atomic_base<_Tp, true> : public __atomic_base<_Tp, false> { - using __base _LIBCPP_NODEBUG = __atomic_base<_Tp, false>; - - using difference_type = typename __base::value_type; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __atomic_base() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR __atomic_base(_Tp __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_and(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_and(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_or(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_or(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_xor(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_xor(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator++(int) volatile _NOEXCEPT { return fetch_add(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++(int) _NOEXCEPT { return fetch_add(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--(int) volatile _NOEXCEPT { return fetch_sub(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--(int) _NOEXCEPT { return fetch_sub(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++() volatile _NOEXCEPT { return fetch_add(_Tp(1)) + _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++() _NOEXCEPT { return fetch_add(_Tp(1)) + _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--() volatile _NOEXCEPT { return fetch_sub(_Tp(1)) - _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--() _NOEXCEPT { return fetch_sub(_Tp(1)) - _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) volatile _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) volatile _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator&=(_Tp __op) volatile _NOEXCEPT { return fetch_and(__op) & __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator&=(_Tp __op) _NOEXCEPT { return fetch_and(__op) & __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator|=(_Tp __op) volatile _NOEXCEPT { return fetch_or(__op) | __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator|=(_Tp __op) _NOEXCEPT { return fetch_or(__op) | __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator^=(_Tp __op) volatile _NOEXCEPT { return fetch_xor(__op) ^ __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator^=(_Tp __op) _NOEXCEPT { return fetch_xor(__op) ^ __op; } -}; - -#if _LIBCPP_STD_VER >= 20 -// Here we need _IsIntegral because the default template argument is not enough -// e.g __atomic_base is __atomic_base, which inherits from -// __atomic_base and the caller of the wait function is -// __atomic_base. So specializing __atomic_base<_Tp> does not work -template -struct __atomic_waitable_traits<__atomic_base<_Tp, _IsIntegral> > { - using __value_type _LIBCPP_NODEBUG = _Tp; - - static _LIBCPP_HIDE_FROM_ABI _Tp __atomic_load(const __atomic_base<_Tp, _IsIntegral>& __a, memory_order __order) { - return __a.load(__order); - } - - static _LIBCPP_HIDE_FROM_ABI _Tp - __atomic_load(const volatile __atomic_base<_Tp, _IsIntegral>& __this, memory_order __order) { - return __this.load(__order); - } - - static _LIBCPP_HIDE_FROM_ABI const __cxx_atomic_impl<_Tp>* - __atomic_contention_address(const __atomic_base<_Tp, _IsIntegral>& __a) { - return std::addressof(__a.__a_); - } - - static _LIBCPP_HIDE_FROM_ABI const volatile __cxx_atomic_impl<_Tp>* - __atomic_contention_address(const volatile __atomic_base<_Tp, _IsIntegral>& __this) { - return std::addressof(__this.__a_); - } -}; - -#endif // _LIBCPP_STD_VER >= 20 - -template -struct __check_atomic_mandates { - using type _LIBCPP_NODEBUG = _Tp; - static_assert(is_trivially_copyable<_Tp>::value, "std::atomic requires that 'T' be a trivially copyable type"); -}; - -template -struct atomic : public __atomic_base::type> { - using __base _LIBCPP_NODEBUG = __atomic_base<_Tp>; - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI atomic() = default; -#else - _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default; -#endif - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR atomic(_Tp __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) volatile _NOEXCEPT { - __base::store(__d); - return __d; - } - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) _NOEXCEPT { - __base::store(__d); - return __d; - } - - atomic& operator=(const atomic&) = delete; - atomic& operator=(const atomic&) volatile = delete; -}; - -// atomic - -template -struct atomic<_Tp*> : public __atomic_base<_Tp*> { - using __base _LIBCPP_NODEBUG = __atomic_base<_Tp*>; - - using difference_type = ptrdiff_t; - - _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR atomic(_Tp* __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp* operator=(_Tp* __d) volatile _NOEXCEPT { - __base::store(__d); - return __d; - } - _LIBCPP_HIDE_FROM_ABI _Tp* operator=(_Tp* __d) _NOEXCEPT { - __base::store(__d); - return __d; - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - // __atomic_fetch_sub accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - // __atomic_fetch_sub accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* operator++(int) volatile _NOEXCEPT { return fetch_add(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++(int) _NOEXCEPT { return fetch_add(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--(int) volatile _NOEXCEPT { return fetch_sub(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--(int) _NOEXCEPT { return fetch_sub(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++() volatile _NOEXCEPT { return fetch_add(1) + 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++() _NOEXCEPT { return fetch_add(1) + 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--() volatile _NOEXCEPT { return fetch_sub(1) - 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--() _NOEXCEPT { return fetch_sub(1) - 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator+=(ptrdiff_t __op) volatile _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator+=(ptrdiff_t __op) _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator-=(ptrdiff_t __op) volatile _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator-=(ptrdiff_t __op) _NOEXCEPT { return fetch_sub(__op) - __op; } - - atomic& operator=(const atomic&) = delete; - atomic& operator=(const atomic&) volatile = delete; -}; - -#if _LIBCPP_STD_VER >= 20 -template -struct __atomic_waitable_traits > : __atomic_waitable_traits<__atomic_base<_Tp> > {}; - -template - requires is_floating_point_v<_Tp> -struct atomic<_Tp> : __atomic_base<_Tp> { -private: - template - _LIBCPP_HIDE_FROM_ABI static _Tp - __rmw_op(_This&& __self, _Tp __operand, memory_order __m, _Operation __operation, _BuiltinOp __builtin_op) { - if constexpr (std::__has_rmw_builtin<_Tp>()) { - return __builtin_op(std::addressof(std::forward<_This>(__self).__a_), __operand, __m); - } else { - _Tp __old = __self.load(memory_order_relaxed); - _Tp __new = __operation(__old, __operand); - while (!__self.compare_exchange_weak(__old, __new, __m, memory_order_relaxed)) { -# ifdef _LIBCPP_COMPILER_CLANG_BASED - if constexpr (std::__is_fp80_long_double<_Tp>()) { - // https://llvm.org/PR47978 - // clang bug: __old is not updated on failure for atomic::compare_exchange_weak - // Note __old = __self.load(memory_order_relaxed) will not work - std::__cxx_atomic_load_inplace(std::addressof(__self.__a_), std::addressof(__old), memory_order_relaxed); - } -# endif - __new = __operation(__old, __operand); - } - return __old; - } - } - - template - _LIBCPP_HIDE_FROM_ABI static _Tp __fetch_add(_This&& __self, _Tp __operand, memory_order __m) { - auto __builtin_op = [](auto __a, auto __builtin_operand, auto __order) { - return std::__cxx_atomic_fetch_add(__a, __builtin_operand, __order); - }; - auto __plus = [](auto __a, auto __b) { return __a + __b; }; - return __rmw_op(std::forward<_This>(__self), __operand, __m, __plus, __builtin_op); - } - - template - _LIBCPP_HIDE_FROM_ABI static _Tp __fetch_sub(_This&& __self, _Tp __operand, memory_order __m) { - auto __builtin_op = [](auto __a, auto __builtin_operand, auto __order) { - return std::__cxx_atomic_fetch_sub(__a, __builtin_operand, __order); - }; - auto __minus = [](auto __a, auto __b) { return __a - __b; }; - return __rmw_op(std::forward<_This>(__self), __operand, __m, __minus, __builtin_op); - } - -public: - using __base _LIBCPP_NODEBUG = __atomic_base<_Tp>; - using value_type = _Tp; - using difference_type = value_type; - - _LIBCPP_HIDE_FROM_ABI constexpr atomic() noexcept = default; - _LIBCPP_HIDE_FROM_ABI constexpr atomic(_Tp __d) noexcept : __base(__d) {} - - atomic(const atomic&) = delete; - atomic& operator=(const atomic&) = delete; - atomic& operator=(const atomic&) volatile = delete; - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) volatile noexcept - requires __base::is_always_lock_free - { - __base::store(__d); - return __d; - } - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) noexcept { - __base::store(__d); - return __d; - } - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) volatile noexcept - requires __base::is_always_lock_free - { - return __fetch_add(*this, __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) noexcept { - return __fetch_add(*this, __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) volatile noexcept - requires __base::is_always_lock_free - { - return __fetch_sub(*this, __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) noexcept { - return __fetch_sub(*this, __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) volatile noexcept - requires __base::is_always_lock_free - { - return fetch_add(__op) + __op; - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) noexcept { return fetch_add(__op) + __op; } - - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) volatile noexcept - requires __base::is_always_lock_free - { - return fetch_sub(__op) - __op; - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) noexcept { return fetch_sub(__op) - __op; } -}; - -#endif // _LIBCPP_STD_VER >= 20 - -// atomic_is_lock_free - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool atomic_is_lock_free(const volatile atomic<_Tp>* __o) _NOEXCEPT { - return __o->is_lock_free(); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool atomic_is_lock_free(const atomic<_Tp>* __o) _NOEXCEPT { - return __o->is_lock_free(); -} - -// atomic_init - -template -_LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI void -atomic_init(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - std::__cxx_atomic_init(std::addressof(__o->__a_), __d); -} - -template -_LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI void -atomic_init(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - std::__cxx_atomic_init(std::addressof(__o->__a_), __d); -} - -// atomic_store - -template -_LIBCPP_HIDE_FROM_ABI void atomic_store(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - __o->store(__d); -} - -template -_LIBCPP_HIDE_FROM_ABI void atomic_store(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - __o->store(__d); -} - -// atomic_store_explicit - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_store_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - __o->store(__d, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_store_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - __o->store(__d, __m); -} - -// atomic_load - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp atomic_load(const volatile atomic<_Tp>* __o) _NOEXCEPT { - return __o->load(); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp atomic_load(const atomic<_Tp>* __o) _NOEXCEPT { - return __o->load(); -} - -// atomic_load_explicit - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp -atomic_load_explicit(const volatile atomic<_Tp>* __o, memory_order __m) _NOEXCEPT _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->load(__m); -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _Tp atomic_load_explicit(const atomic<_Tp>* __o, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->load(__m); -} - -// atomic_exchange - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_exchange(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->exchange(__d); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_exchange(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->exchange(__d); -} - -// atomic_exchange_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_exchange_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT { - return __o->exchange(__d, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_exchange_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT { - return __o->exchange(__d, __m); -} - -// atomic_compare_exchange_weak - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_weak(*__e, __d); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak( - atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_weak(*__e, __d); -} - -// atomic_compare_exchange_strong - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_strong(*__e, __d); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong( - atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_strong(*__e, __d); -} - -// atomic_compare_exchange_weak_explicit - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak_explicit( - volatile atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_weak(*__e, __d, __s, __f); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak_explicit( - atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_weak(*__e, __d, __s, __f); -} - -// atomic_compare_exchange_strong_explicit - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong_explicit( - volatile atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_strong(*__e, __d, __s, __f); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong_explicit( - atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_strong(*__e, __d, __s, __f); -} - -#if _LIBCPP_STD_VER >= 20 - -// atomic_wait - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_wait(const volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v) _NOEXCEPT { - return __o->wait(__v); -} - -template -_LIBCPP_HIDE_FROM_ABI void atomic_wait(const atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v) _NOEXCEPT { - return __o->wait(__v); -} - -// atomic_wait_explicit - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_wait_explicit(const volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->wait(__v, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_wait_explicit(const atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->wait(__v, __m); -} - -// atomic_notify_one - -template -_LIBCPP_HIDE_FROM_ABI void atomic_notify_one(volatile atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_one(); -} -template -_LIBCPP_HIDE_FROM_ABI void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_one(); -} - -// atomic_notify_all - -template -_LIBCPP_HIDE_FROM_ABI void atomic_notify_all(volatile atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_all(); -} -template -_LIBCPP_HIDE_FROM_ABI void atomic_notify_all(atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_all(); -} - -#endif // _LIBCPP_STD_VER >= 20 - -// atomic_fetch_add - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_add(volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_add(__op); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_add(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_add(__op); -} - -// atomic_fetch_add_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_add_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_add(__op, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_add_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_add(__op, __m); -} - -// atomic_fetch_sub - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_sub(volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_sub(__op); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_sub(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_sub(__op); -} - -// atomic_fetch_sub_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_sub_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_sub(__op, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_sub_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_sub(__op, __m); -} - -// atomic_fetch_and - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_and(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_and(__op); -} - -// atomic_fetch_and_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_and(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_and_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_and(__op, __m); -} - -// atomic_fetch_or - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_or(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_or(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_or(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_or(__op); -} - -// atomic_fetch_or_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_or_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_or(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_or_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_or(__op, __m); -} - -// atomic_fetch_xor - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_xor(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_xor(__op); -} - -// atomic_fetch_xor_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_xor(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_xor_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_xor(__op, __m); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ATOMIC_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_flag.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_flag.h deleted file mode 100644 index 7c09870..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_flag.h +++ /dev/null @@ -1,165 +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___ATOMIC_ATOMIC_FLAG_H -#define _LIBCPP___ATOMIC_ATOMIC_FLAG_H - -#include <__atomic/atomic_sync.h> -#include <__atomic/atomic_waitable_traits.h> -#include <__atomic/memory_order.h> -#include <__atomic/support.h> -#include <__config> -#include <__memory/addressof.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -struct atomic_flag { - __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE> __a_; - - _LIBCPP_HIDE_FROM_ABI bool test(memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT { - return _LIBCPP_ATOMIC_FLAG_TYPE(true) == __cxx_atomic_load(&__a_, __m); - } - _LIBCPP_HIDE_FROM_ABI bool test(memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - return _LIBCPP_ATOMIC_FLAG_TYPE(true) == __cxx_atomic_load(&__a_, __m); - } - - _LIBCPP_HIDE_FROM_ABI bool test_and_set(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m); - } - _LIBCPP_HIDE_FROM_ABI bool test_and_set(memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m); - } - _LIBCPP_HIDE_FROM_ABI void clear(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - __cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m); - } - _LIBCPP_HIDE_FROM_ABI void clear(memory_order __m = memory_order_seq_cst) _NOEXCEPT { - __cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m); - } - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI void wait(bool __v, memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT { - std::__atomic_wait(*this, _LIBCPP_ATOMIC_FLAG_TYPE(__v), __m); - } - _LIBCPP_HIDE_FROM_ABI void wait(bool __v, memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - std::__atomic_wait(*this, _LIBCPP_ATOMIC_FLAG_TYPE(__v), __m); - } - _LIBCPP_HIDE_FROM_ABI void notify_one() volatile _NOEXCEPT { std::__atomic_notify_one(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_one() _NOEXCEPT { std::__atomic_notify_one(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_all() volatile _NOEXCEPT { std::__atomic_notify_all(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_all() _NOEXCEPT { std::__atomic_notify_all(*this); } -#endif - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI constexpr atomic_flag() _NOEXCEPT : __a_(false) {} -#else - atomic_flag() _NOEXCEPT = default; -#endif - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION - - atomic_flag(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) volatile = delete; -}; - -#if _LIBCPP_STD_VER >= 20 -template <> -struct __atomic_waitable_traits { - using __value_type _LIBCPP_NODEBUG = _LIBCPP_ATOMIC_FLAG_TYPE; - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATOMIC_FLAG_TYPE __atomic_load(const atomic_flag& __a, memory_order __order) { - return std::__cxx_atomic_load(&__a.__a_, __order); - } - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATOMIC_FLAG_TYPE - __atomic_load(const volatile atomic_flag& __a, memory_order __order) { - return std::__cxx_atomic_load(&__a.__a_, __order); - } - - static _LIBCPP_HIDE_FROM_ABI const __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE>* - __atomic_contention_address(const atomic_flag& __a) { - return std::addressof(__a.__a_); - } - - static _LIBCPP_HIDE_FROM_ABI const volatile __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE>* - __atomic_contention_address(const volatile atomic_flag& __a) { - return std::addressof(__a.__a_); - } -}; -#endif // _LIBCPP_STD_VER >= 20 - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test(const volatile atomic_flag* __o) _NOEXCEPT { return __o->test(); } - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test(const atomic_flag* __o) _NOEXCEPT { return __o->test(); } - -inline _LIBCPP_HIDE_FROM_ABI bool -atomic_flag_test_explicit(const volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_explicit(const atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set(volatile atomic_flag* __o) _NOEXCEPT { - return __o->test_and_set(); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set(atomic_flag* __o) _NOEXCEPT { return __o->test_and_set(); } - -inline _LIBCPP_HIDE_FROM_ABI bool -atomic_flag_test_and_set_explicit(volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test_and_set(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set_explicit(atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test_and_set(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear(volatile atomic_flag* __o) _NOEXCEPT { __o->clear(); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear(atomic_flag* __o) _NOEXCEPT { __o->clear(); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear_explicit(volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - __o->clear(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear_explicit(atomic_flag* __o, memory_order __m) _NOEXCEPT { - __o->clear(__m); -} - -#if _LIBCPP_STD_VER >= 20 -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_wait(const volatile atomic_flag* __o, bool __v) _NOEXCEPT { - __o->wait(__v); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_wait(const atomic_flag* __o, bool __v) _NOEXCEPT { __o->wait(__v); } - -inline _LIBCPP_HIDE_FROM_ABI void -atomic_flag_wait_explicit(const volatile atomic_flag* __o, bool __v, memory_order __m) _NOEXCEPT { - __o->wait(__v, __m); -} - -inline _LIBCPP_HIDE_FROM_ABI void -atomic_flag_wait_explicit(const atomic_flag* __o, bool __v, memory_order __m) _NOEXCEPT { - __o->wait(__v, __m); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_notify_one(volatile atomic_flag* __o) _NOEXCEPT { __o->notify_one(); } -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_notify_one(atomic_flag* __o) _NOEXCEPT { __o->notify_one(); } -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_notify_all(volatile atomic_flag* __o) _NOEXCEPT { __o->notify_all(); } -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_notify_all(atomic_flag* __o) _NOEXCEPT { __o->notify_all(); } -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ATOMIC_FLAG_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_init.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_init.h deleted file mode 100644 index 8e86ba3..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_init.h +++ /dev/null @@ -1,25 +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___ATOMIC_ATOMIC_INIT_H -#define _LIBCPP___ATOMIC_ATOMIC_INIT_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define ATOMIC_FLAG_INIT {false} -#define ATOMIC_VAR_INIT(__v) {__v} - -#if _LIBCPP_STD_VER >= 20 && defined(_LIBCPP_COMPILER_CLANG_BASED) && !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) -# pragma clang deprecated(ATOMIC_VAR_INIT) -#endif - -#endif // _LIBCPP___ATOMIC_ATOMIC_INIT_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_lock_free.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_lock_free.h deleted file mode 100644 index 3ae9b88..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_lock_free.h +++ /dev/null @@ -1,48 +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___ATOMIC_ATOMIC_LOCK_FREE_H -#define _LIBCPP___ATOMIC_ATOMIC_LOCK_FREE_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if defined(__CLANG_ATOMIC_BOOL_LOCK_FREE) -# define ATOMIC_BOOL_LOCK_FREE __CLANG_ATOMIC_BOOL_LOCK_FREE -# define ATOMIC_CHAR_LOCK_FREE __CLANG_ATOMIC_CHAR_LOCK_FREE -# if _LIBCPP_HAS_CHAR8_T -# define ATOMIC_CHAR8_T_LOCK_FREE __CLANG_ATOMIC_CHAR8_T_LOCK_FREE -# endif -# define ATOMIC_CHAR16_T_LOCK_FREE __CLANG_ATOMIC_CHAR16_T_LOCK_FREE -# define ATOMIC_CHAR32_T_LOCK_FREE __CLANG_ATOMIC_CHAR32_T_LOCK_FREE -# define ATOMIC_WCHAR_T_LOCK_FREE __CLANG_ATOMIC_WCHAR_T_LOCK_FREE -# define ATOMIC_SHORT_LOCK_FREE __CLANG_ATOMIC_SHORT_LOCK_FREE -# define ATOMIC_INT_LOCK_FREE __CLANG_ATOMIC_INT_LOCK_FREE -# define ATOMIC_LONG_LOCK_FREE __CLANG_ATOMIC_LONG_LOCK_FREE -# define ATOMIC_LLONG_LOCK_FREE __CLANG_ATOMIC_LLONG_LOCK_FREE -# define ATOMIC_POINTER_LOCK_FREE __CLANG_ATOMIC_POINTER_LOCK_FREE -#elif defined(__GCC_ATOMIC_BOOL_LOCK_FREE) -# define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE -# define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE -# if _LIBCPP_HAS_CHAR8_T -# define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE -# endif -# define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE -# define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE -# define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE -# define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE -# define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE -# define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE -# define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE -# define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE -#endif - -#endif // _LIBCPP___ATOMIC_ATOMIC_LOCK_FREE_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_ref.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_ref.h deleted file mode 100644 index c551f99..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_ref.h +++ /dev/null @@ -1,398 +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 -// -// Kokkos v. 4.0 -// Copyright (2022) National Technology & Engineering -// Solutions of Sandia, LLC (NTESS). -// -// Under the terms of Contract DE-NA0003525 with NTESS, -// the U.S. Government retains certain rights in this software. -// -//===---------------------------------------------------------------------===// - -#ifndef _LIBCPP___ATOMIC_ATOMIC_REF_H -#define _LIBCPP___ATOMIC_ATOMIC_REF_H - -#include <__assert> -#include <__atomic/atomic_sync.h> -#include <__atomic/atomic_waitable_traits.h> -#include <__atomic/check_memory_order.h> -#include <__atomic/floating_point_helper.h> -#include <__atomic/memory_order.h> -#include <__atomic/to_gcc_order.h> -#include <__concepts/arithmetic.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__cstddef/byte.h> -#include <__cstddef/ptrdiff_t.h> -#include <__memory/addressof.h> -#include <__memory/is_sufficiently_aligned.h> -#include <__type_traits/copy_cv.h> -#include <__type_traits/has_unique_object_representation.h> -#include <__type_traits/is_trivially_copyable.h> -#include - -#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 - -// These types are required to make __atomic_is_always_lock_free work across GCC and Clang. -// The purpose of this trick is to make sure that we provide an object with the correct alignment -// to __atomic_is_always_lock_free, since that answer depends on the alignment. -template -struct __alignment_checker_type { - alignas(_Alignment) char __data; -}; - -template -struct __get_aligner_instance { - static constexpr __alignment_checker_type<_Alignment> __instance{}; -}; - -template -struct __atomic_ref_base { -private: - _LIBCPP_HIDE_FROM_ABI static _Tp* __clear_padding(_Tp& __val) noexcept { - _Tp* __ptr = std::addressof(__val); -# if __has_builtin(__builtin_clear_padding) - __builtin_clear_padding(__ptr); -# endif - return __ptr; - } - - _LIBCPP_HIDE_FROM_ABI static bool __compare_exchange( - _Tp* __ptr, _Tp* __expected, _Tp* __desired, bool __is_weak, int __success, int __failure) noexcept { - if constexpr ( -# if __has_builtin(__builtin_clear_padding) - has_unique_object_representations_v<_Tp> || floating_point<_Tp> -# else - true // NOLINT(readability-simplify-boolean-expr) -# endif - ) { - return __atomic_compare_exchange(__ptr, __expected, __desired, __is_weak, __success, __failure); - } else { // _Tp has padding bits and __builtin_clear_padding is available - __clear_padding(*__desired); - _Tp __copy = *__expected; - __clear_padding(__copy); - // The algorithm we use here is basically to perform `__atomic_compare_exchange` on the - // values until it has either succeeded, or failed because the value representation of the - // objects involved was different. This is why we loop around __atomic_compare_exchange: - // we basically loop until its failure is caused by the value representation of the objects - // being different, not only their object representation. - while (true) { - _Tp __prev = __copy; - if (__atomic_compare_exchange(__ptr, std::addressof(__copy), __desired, __is_weak, __success, __failure)) { - return true; - } - _Tp __curr = __copy; - if (std::memcmp(__clear_padding(__prev), __clear_padding(__curr), sizeof(_Tp)) != 0) { - // Value representation without padding bits do not compare equal -> - // write the current content of *ptr into *expected - std::memcpy(__expected, std::addressof(__copy), sizeof(_Tp)); - return false; - } - } - } - } - - friend struct __atomic_waitable_traits<__atomic_ref_base<_Tp>>; - - // require types that are 1, 2, 4, 8, or 16 bytes in length to be aligned to at least their size to be potentially - // used lock-free - static constexpr size_t __min_alignment = (sizeof(_Tp) & (sizeof(_Tp) - 1)) || (sizeof(_Tp) > 16) ? 0 : sizeof(_Tp); - -public: - using value_type = _Tp; - - static constexpr size_t required_alignment = alignof(_Tp) > __min_alignment ? alignof(_Tp) : __min_alignment; - - // The __atomic_always_lock_free builtin takes into account the alignment of the pointer if provided, - // so we create a fake pointer with a suitable alignment when querying it. Note that we are guaranteed - // that the pointer is going to be aligned properly at runtime because that is a (checked) precondition - // of atomic_ref's constructor. - static constexpr bool is_always_lock_free = - __atomic_always_lock_free(sizeof(_Tp), std::addressof(__get_aligner_instance::__instance)); - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool is_lock_free() const noexcept { - return __atomic_is_lock_free(sizeof(_Tp), __ptr_); - } - - _LIBCPP_HIDE_FROM_ABI void store(_Tp __desired, memory_order __order = memory_order::seq_cst) const noexcept - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__order) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __order == memory_order::relaxed || __order == memory_order::release || __order == memory_order::seq_cst, - "atomic_ref: memory order argument to atomic store operation is invalid"); - __atomic_store(__ptr_, __clear_padding(__desired), std::__to_gcc_order(__order)); - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __desired) const noexcept { - store(__desired); - return __desired; - } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI _Tp load(memory_order __order = memory_order::seq_cst) const noexcept - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__order) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __order == memory_order::relaxed || __order == memory_order::consume || __order == memory_order::acquire || - __order == memory_order::seq_cst, - "atomic_ref: memory order argument to atomic load operation is invalid"); - alignas(_Tp) byte __mem[sizeof(_Tp)]; - auto* __ret = reinterpret_cast<_Tp*>(__mem); - __atomic_load(__ptr_, __ret, std::__to_gcc_order(__order)); - return *__ret; - } - - _LIBCPP_HIDE_FROM_ABI operator _Tp() const noexcept { return load(); } - - _LIBCPP_HIDE_FROM_ABI _Tp exchange(_Tp __desired, memory_order __order = memory_order::seq_cst) const noexcept { - alignas(_Tp) byte __mem[sizeof(_Tp)]; - auto* __ret = reinterpret_cast<_Tp*>(__mem); - __atomic_exchange(__ptr_, __clear_padding(__desired), __ret, std::__to_gcc_order(__order)); - return *__ret; - } - - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, memory_order __success, memory_order __failure) const noexcept - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__success, __failure) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __failure == memory_order::relaxed || __failure == memory_order::consume || - __failure == memory_order::acquire || __failure == memory_order::seq_cst, - "atomic_ref: failure memory order argument to weak atomic compare-and-exchange operation is invalid"); - return __compare_exchange( - __ptr_, - std::addressof(__expected), - std::addressof(__desired), - true, - std::__to_gcc_order(__success), - std::__to_gcc_order(__failure)); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, memory_order __success, memory_order __failure) const noexcept - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__success, __failure) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __failure == memory_order::relaxed || __failure == memory_order::consume || - __failure == memory_order::acquire || __failure == memory_order::seq_cst, - "atomic_ref: failure memory order argument to strong atomic compare-and-exchange operation is invalid"); - return __compare_exchange( - __ptr_, - std::addressof(__expected), - std::addressof(__desired), - false, - std::__to_gcc_order(__success), - std::__to_gcc_order(__failure)); - } - - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __expected, _Tp __desired, memory_order __order = memory_order::seq_cst) const noexcept { - return __compare_exchange( - __ptr_, - std::addressof(__expected), - std::addressof(__desired), - true, - std::__to_gcc_order(__order), - std::__to_gcc_failure_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __expected, _Tp __desired, memory_order __order = memory_order::seq_cst) const noexcept { - return __compare_exchange( - __ptr_, - std::addressof(__expected), - std::addressof(__desired), - false, - std::__to_gcc_order(__order), - std::__to_gcc_failure_order(__order)); - } - - _LIBCPP_HIDE_FROM_ABI void wait(_Tp __old, memory_order __order = memory_order::seq_cst) const noexcept - _LIBCPP_CHECK_WAIT_MEMORY_ORDER(__order) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __order == memory_order::relaxed || __order == memory_order::consume || __order == memory_order::acquire || - __order == memory_order::seq_cst, - "atomic_ref: memory order argument to atomic wait operation is invalid"); - std::__atomic_wait(*this, __old, __order); - } - _LIBCPP_HIDE_FROM_ABI void notify_one() const noexcept { std::__atomic_notify_one(*this); } - _LIBCPP_HIDE_FROM_ABI void notify_all() const noexcept { std::__atomic_notify_all(*this); } -# if _LIBCPP_STD_VER >= 26 - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr __copy_cv_t<_Tp, void>* address() const noexcept { return __ptr_; } -# endif - -protected: - using _Aligned_Tp [[__gnu__::__aligned__(required_alignment), __gnu__::__nodebug__]] = _Tp; - _Aligned_Tp* __ptr_; - - _LIBCPP_HIDE_FROM_ABI __atomic_ref_base(_Tp& __obj) : __ptr_(std::addressof(__obj)) {} -}; - -template -struct __atomic_waitable_traits<__atomic_ref_base<_Tp>> { - using __value_type _LIBCPP_NODEBUG = _Tp; - - static _LIBCPP_HIDE_FROM_ABI _Tp __atomic_load(const __atomic_ref_base<_Tp>& __a, memory_order __order) { - return __a.load(__order); - } - static _LIBCPP_HIDE_FROM_ABI const _Tp* __atomic_contention_address(const __atomic_ref_base<_Tp>& __a) { - return __a.__ptr_; - } -}; - -template -struct atomic_ref : public __atomic_ref_base<_Tp> { - static_assert(is_trivially_copyable_v<_Tp>, "std::atomic_ref requires that 'T' be a trivially copyable type"); - - using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; - - _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp& __obj) : __base(__obj) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - std::__is_sufficiently_aligned<__base::required_alignment>(std::addressof(__obj)), - "atomic_ref ctor: referenced object must be aligned to required_alignment"); - } - - _LIBCPP_HIDE_FROM_ABI atomic_ref(const atomic_ref&) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __desired) const noexcept { return __base::operator=(__desired); } - - atomic_ref& operator=(const atomic_ref&) = delete; -}; - -template - requires(std::integral<_Tp> && !std::same_as) -struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { - using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; - - using difference_type = __base::value_type; - - _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp& __obj) : __base(__obj) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - std::__is_sufficiently_aligned<__base::required_alignment>(std::addressof(__obj)), - "atomic_ref ctor: referenced object must be aligned to required_alignment"); - } - - _LIBCPP_HIDE_FROM_ABI atomic_ref(const atomic_ref&) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __desired) const noexcept { return __base::operator=(__desired); } - - atomic_ref& operator=(const atomic_ref&) = delete; - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_add(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_sub(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_and(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_and(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_or(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_or(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_xor(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_xor(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator++(int) const noexcept { return fetch_add(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--(int) const noexcept { return fetch_sub(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++() const noexcept { return fetch_add(_Tp(1)) + _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--() const noexcept { return fetch_sub(_Tp(1)) - _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __arg) const noexcept { return fetch_add(__arg) + __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __arg) const noexcept { return fetch_sub(__arg) - __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp operator&=(_Tp __arg) const noexcept { return fetch_and(__arg) & __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp operator|=(_Tp __arg) const noexcept { return fetch_or(__arg) | __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp operator^=(_Tp __arg) const noexcept { return fetch_xor(__arg) ^ __arg; } -}; - -template - requires std::floating_point<_Tp> -struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { - using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; - - using difference_type = __base::value_type; - - _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp& __obj) : __base(__obj) { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - std::__is_sufficiently_aligned<__base::required_alignment>(std::addressof(__obj)), - "atomic_ref ctor: referenced object must be aligned to required_alignment"); - } - - _LIBCPP_HIDE_FROM_ABI atomic_ref(const atomic_ref&) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __desired) const noexcept { return __base::operator=(__desired); } - - atomic_ref& operator=(const atomic_ref&) = delete; - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - if constexpr (std::__has_rmw_builtin<_Tp>()) { - return __atomic_fetch_add(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } else { - _Tp __old = this->load(memory_order_relaxed); - _Tp __new = __old + __arg; - while (!this->compare_exchange_weak(__old, __new, __order, memory_order_relaxed)) { - __new = __old + __arg; - } - return __old; - } - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __arg, memory_order __order = memory_order_seq_cst) const noexcept { - if constexpr (std::__has_rmw_builtin<_Tp>()) { - return __atomic_fetch_sub(this->__ptr_, __arg, std::__to_gcc_order(__order)); - } else { - _Tp __old = this->load(memory_order_relaxed); - _Tp __new = __old - __arg; - while (!this->compare_exchange_weak(__old, __new, __order, memory_order_relaxed)) { - __new = __old - __arg; - } - return __old; - } - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __arg) const noexcept { return fetch_add(__arg) + __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __arg) const noexcept { return fetch_sub(__arg) - __arg; } -}; - -template -struct atomic_ref<_Tp*> : public __atomic_ref_base<_Tp*> { - using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp*>; - - using difference_type = ptrdiff_t; - - _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp*& __ptr) : __base(__ptr) {} - - _LIBCPP_HIDE_FROM_ABI _Tp* operator=(_Tp* __desired) const noexcept { return __base::operator=(__desired); } - - atomic_ref& operator=(const atomic_ref&) = delete; - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_add(ptrdiff_t __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_add(this->__ptr_, __arg * sizeof(_Tp), std::__to_gcc_order(__order)); - } - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_sub(ptrdiff_t __arg, memory_order __order = memory_order_seq_cst) const noexcept { - return __atomic_fetch_sub(this->__ptr_, __arg * sizeof(_Tp), std::__to_gcc_order(__order)); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* operator++(int) const noexcept { return fetch_add(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--(int) const noexcept { return fetch_sub(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++() const noexcept { return fetch_add(1) + 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--() const noexcept { return fetch_sub(1) - 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator+=(ptrdiff_t __arg) const noexcept { return fetch_add(__arg) + __arg; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator-=(ptrdiff_t __arg) const noexcept { return fetch_sub(__arg) - __arg; } -}; - -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(atomic_ref); - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP__ATOMIC_ATOMIC_REF_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_sync.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_sync.h deleted file mode 100644 index 12bd1b9..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_sync.h +++ /dev/null @@ -1,261 +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___ATOMIC_ATOMIC_SYNC_H -#define _LIBCPP___ATOMIC_ATOMIC_SYNC_H - -#include <__atomic/atomic_waitable_traits.h> -#include <__atomic/contention_t.h> -#include <__atomic/memory_order.h> -#include <__chrono/duration.h> -#include <__config> -#include <__memory/addressof.h> -#include <__thread/poll_with_backoff.h> -#include <__type_traits/decay.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 -# if _LIBCPP_HAS_THREADS - -# if !_LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -// old dylib interface kept for backwards compatibility -_LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(void const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(void const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t __libcpp_atomic_monitor(void const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI void __libcpp_atomic_wait(void const volatile*, __cxx_contention_t) _NOEXCEPT; - -_LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t -__libcpp_atomic_monitor(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI void -__libcpp_atomic_wait(__cxx_atomic_contention_t const volatile*, __cxx_contention_t) _NOEXCEPT; -# endif // !_LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -// new dylib interface - -// return the global contention state's current value for the address -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t -__atomic_monitor_global(void const* __address) _NOEXCEPT; - -// wait on the global contention state to be changed from the given value for the address -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__atomic_wait_global_table(void const* __address, __cxx_contention_t __monitor_value) _NOEXCEPT; - -// notify one waiter waiting on the global contention state for the address -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_one_global_table(void const*) _NOEXCEPT; - -// notify all waiters waiting on the global contention state for the address -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_all_global_table(void const*) _NOEXCEPT; - -// wait on the address directly with the native platform wait -template -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__atomic_wait_native(void const* __address, void const* __old_value) _NOEXCEPT; - -// notify one waiter waiting on the address directly with the native platform wait -template -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_one_native(const void*) _NOEXCEPT; - -// notify all waiters waiting on the address directly with the native platform wait -template -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_notify_all_native(const void*) _NOEXCEPT; - -# if _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -template -struct __atomic_wait_backoff_impl { - const _AtomicWaitable& __a_; - _Poll __poll_; - memory_order __order_; - - using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - using __value_type _LIBCPP_NODEBUG = typename __waitable_traits::__value_type; - - _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const { - if (__elapsed > chrono::microseconds(4)) { - auto __contention_address = const_cast( - static_cast(__waitable_traits::__atomic_contention_address(__a_))); - - if constexpr (__has_native_atomic_wait<__value_type>) { - auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_); - if (__poll_(__atomic_value)) - return __backoff_results::__poll_success; - std::__atomic_wait_native(__contention_address, std::addressof(__atomic_value)); - } else { - __cxx_contention_t __monitor_val = std::__atomic_monitor_global(__contention_address); - auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_); - if (__poll_(__atomic_value)) - return __backoff_results::__poll_success; - std::__atomic_wait_global_table(__contention_address, __monitor_val); - } - } else { - } // poll - return __backoff_results::__continue_poll; - } -}; - -# else // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -template -struct __atomic_wait_backoff_impl { - const _AtomicWaitable& __a_; - _Poll __poll_; - memory_order __order_; - - using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - - _LIBCPP_HIDE_FROM_ABI bool - __update_monitor_val_and_poll(__cxx_atomic_contention_t const volatile*, __cxx_contention_t& __monitor_val) const { - // In case the contention type happens to be __cxx_atomic_contention_t, i.e. __cxx_atomic_impl, - // the platform wait is directly monitoring the atomic value itself. - // `__poll_` takes the current value of the atomic as an in-out argument - // to potentially modify it. After it returns, `__monitor` has a value - // which can be safely waited on by `std::__libcpp_atomic_wait` without any - // ABA style issues. - __monitor_val = __waitable_traits::__atomic_load(__a_, __order_); - return __poll_(__monitor_val); - } - - _LIBCPP_HIDE_FROM_ABI bool - __update_monitor_val_and_poll(void const volatile* __contention_address, __cxx_contention_t& __monitor_val) const { - // In case the contention type is anything else, platform wait is monitoring a __cxx_atomic_contention_t - // from the global pool, the monitor comes from __libcpp_atomic_monitor - __monitor_val = std::__libcpp_atomic_monitor(__contention_address); - auto __current_val = __waitable_traits::__atomic_load(__a_, __order_); - return __poll_(__current_val); - } - - _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const { - if (__elapsed > chrono::microseconds(4)) { - auto __contention_address = __waitable_traits::__atomic_contention_address(__a_); - __cxx_contention_t __monitor_val; - if (__update_monitor_val_and_poll(__contention_address, __monitor_val)) - return __backoff_results::__poll_success; - std::__libcpp_atomic_wait(__contention_address, __monitor_val); - } else { - } // poll - return __backoff_results::__continue_poll; - } -}; - -# endif // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -// The semantics of this function are similar to `atomic`'s -// `.wait(T old, std::memory_order order)`, but instead of having a hardcoded -// predicate (is the loaded value unequal to `old`?), the predicate function is -// specified as an argument. The loaded value is given as an in-out argument to -// the predicate. If the predicate function returns `true`, -// `__atomic_wait_unless` will return. If the predicate function returns -// `false`, it must set the argument to its current understanding of the atomic -// value. The predicate function must not return `false` spuriously. -template -_LIBCPP_HIDE_FROM_ABI void __atomic_wait_unless(const _AtomicWaitable& __a, memory_order __order, _Poll&& __poll) { - static_assert(__atomic_waitable<_AtomicWaitable>); - __atomic_wait_backoff_impl<_AtomicWaitable, __decay_t<_Poll> > __backoff_fn = {__a, __poll, __order}; - std::__libcpp_thread_poll_with_backoff( - /* poll */ - [&]() { - auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order); - return __poll(__current_val); - }, - /* backoff */ __backoff_fn); -} - -# if _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>); - using __value_type _LIBCPP_NODEBUG = typename __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__value_type; - using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - auto __contention_address = - const_cast(static_cast(__waitable_traits::__atomic_contention_address(__a))); - if constexpr (__has_native_atomic_wait<__value_type>) { - std::__atomic_notify_one_native(__contention_address); - } else { - std::__atomic_notify_one_global_table(__contention_address); - } -} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>); - using __value_type _LIBCPP_NODEBUG = typename __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__value_type; - using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - auto __contention_address = - const_cast(static_cast(__waitable_traits::__atomic_contention_address(__a))); - if constexpr (__has_native_atomic_wait<__value_type>) { - std::__atomic_notify_all_native(__contention_address); - } else { - std::__atomic_notify_all_global_table(__contention_address); - } -} - -# else // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>); - std::__cxx_atomic_notify_one(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a)); -} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>); - std::__cxx_atomic_notify_all(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a)); -} - -# endif - -# else // _LIBCPP_HAS_THREADS - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_wait_unless(const _AtomicWaitable& __a, memory_order __order, _Poll&& __poll) { - std::__libcpp_thread_poll_with_backoff( - /* poll */ - [&]() { - auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order); - return __poll(__current_val); - }, - /* backoff */ __spinning_backoff_policy()); -} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable&) {} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable&) {} - -# endif // _LIBCPP_HAS_THREADS - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_nonatomic_compare_equal(_Tp const& __lhs, _Tp const& __rhs) { - return std::memcmp(std::addressof(__lhs), std::addressof(__rhs), sizeof(_Tp)) == 0; -} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_wait(_AtomicWaitable& __a, _Tp __val, memory_order __order) { - static_assert(__atomic_waitable<_AtomicWaitable>); - std::__atomic_wait_unless(__a, __order, [&](_Tp const& __current) { - return !std::__cxx_nonatomic_compare_equal(__current, __val); - }); -} - -#endif // C++20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ATOMIC_SYNC_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_sync_timed.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_sync_timed.h deleted file mode 100644 index f3bf780..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_sync_timed.h +++ /dev/null @@ -1,136 +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___ATOMIC_ATOMIC_SYNC_TIMED_H -#define _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H - -#include <__atomic/atomic_waitable_traits.h> -#include <__atomic/contention_t.h> -#include <__atomic/memory_order.h> -#include <__chrono/duration.h> -#include <__config> -#include <__memory/addressof.h> -#include <__thread/poll_with_backoff.h> -#include <__thread/timed_backoff_policy.h> -#include <__type_traits/decay.h> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 -# if _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -_LIBCPP_AVAILABILITY_NEW_SYNC -_LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t __atomic_monitor_global(void const* __address) _NOEXCEPT; - -// wait on the global contention state to be changed from the given value for the address -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void __atomic_wait_global_table_with_timeout( - void const* __address, __cxx_contention_t __monitor_value, uint64_t __timeout_ns) _NOEXCEPT; - -// wait on the address directly with the native platform wait -template -_LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__atomic_wait_native_with_timeout(void const* __address, void const* __old_value, uint64_t __timeout_ns) _NOEXCEPT; - -template -struct __atomic_wait_timed_backoff_impl { - const _AtomicWaitable& __a_; - _Poll __poll_; - memory_order __order_; - chrono::duration<_Rep, _Period> __rel_time_; - - using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - using __value_type _LIBCPP_NODEBUG = typename __waitable_traits::__value_type; - - _LIBCPP_HIDE_FROM_ABI __backoff_results operator()(chrono::nanoseconds __elapsed) const { - if (__elapsed > chrono::microseconds(4)) { - auto __contention_address = const_cast( - static_cast(__waitable_traits::__atomic_contention_address(__a_))); - - uint64_t __timeout_ns = - static_cast((chrono::duration_cast(__rel_time_) - __elapsed).count()); - - if constexpr (__has_native_atomic_wait<__value_type>) { - auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_); - if (__poll_(__atomic_value)) - return __backoff_results::__poll_success; - std::__atomic_wait_native_with_timeout( - __contention_address, std::addressof(__atomic_value), __timeout_ns); - } else { - __cxx_contention_t __monitor_val = std::__atomic_monitor_global(__contention_address); - auto __atomic_value = __waitable_traits::__atomic_load(__a_, __order_); - if (__poll_(__atomic_value)) - return __backoff_results::__poll_success; - std::__atomic_wait_global_table_with_timeout(__contention_address, __monitor_val, __timeout_ns); - } - } else { - } // poll - return __backoff_results::__continue_poll; - } -}; - -// The semantics of this function are similar to `atomic`'s -// `.wait(T old, std::memory_order order)` with a timeout, but instead of having a hardcoded -// predicate (is the loaded value unequal to `old`?), the predicate function is -// specified as an argument. The loaded value is given as an in-out argument to -// the predicate. If the predicate function returns `true`, -// `__atomic_wait_unless_with_timeout` will return. If the predicate function returns -// `false`, it must set the argument to its current understanding of the atomic -// value. The predicate function must not return `false` spuriously. -template -_LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout( - const _AtomicWaitable& __a, - memory_order __order, - _Poll&& __poll, - chrono::duration<_Rep, _Period> const& __rel_time) { - static_assert(__atomic_waitable<_AtomicWaitable>, ""); - __atomic_wait_timed_backoff_impl<_AtomicWaitable, __decay_t<_Poll>, _Rep, _Period> __backoff_fn = { - __a, __poll, __order, __rel_time}; - auto __poll_result = std::__libcpp_thread_poll_with_backoff( - /* poll */ - [&]() { - auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order); - return __poll(__current_val); - }, - /* backoff */ __backoff_fn, - __rel_time); - - return __poll_result == __poll_with_backoff_results::__poll_success; -} - -# elif _LIBCPP_HAS_THREADS // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -template -_LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout( - const _AtomicWaitable& __a, - memory_order __order, - _Poll&& __poll, - chrono::duration<_Rep, _Period> const& __rel_time) { - auto __res = std::__libcpp_thread_poll_with_backoff( - /* poll */ - [&]() { - auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a, __order); - return __poll(__current_val); - }, - /* backoff */ __libcpp_timed_backoff_policy(), - __rel_time); - return __res == __poll_with_backoff_results::__poll_success; -} - -# endif // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC - -#endif // C++20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/atomic_waitable_traits.h b/third_party/libcxx/include/c++/v1/__atomic/atomic_waitable_traits.h deleted file mode 100644 index 369cd2c..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/atomic_waitable_traits.h +++ /dev/null @@ -1,101 +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___ATOMIC_ATOMIC_WAITABLE_TRAITS_H -#define _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H - -#include <__atomic/contention_t.h> -#include <__atomic/memory_order.h> -#include <__config> -#include <__type_traits/decay.h> -#include <__type_traits/has_unique_object_representation.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_trivially_copyable.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// The customisation points to enable the following functions: -// - __atomic_wait -// - __atomic_wait_unless -// - __atomic_notify_one -// - __atomic_notify_all -template -struct __atomic_waitable_traits { - using __value_type _LIBCPP_NODEBUG = void; - - template - static void __atomic_load(_AtomicWaitable&&, memory_order) = delete; - - template - static void __atomic_contention_address(_AtomicWaitable&&) = delete; -}; - -template -concept __atomic_waitable = requires(const _Tp __t, memory_order __order) { - typename __atomic_waitable_traits<__decay_t<_Tp> >::__value_type; - { __atomic_waitable_traits<__decay_t<_Tp> >::__atomic_load(__t, __order) }; - { __atomic_waitable_traits<__decay_t<_Tp> >::__atomic_contention_address(__t) }; -}; - -# ifdef __linux__ -# define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(4) -# elif defined(__APPLE__) -# define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) \ - _APPLY(4) \ - _APPLY(8) -# elif defined(__FreeBSD__) && __SIZEOF_LONG__ == 8 -# define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(8) -# elif defined(_WIN32) -# define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(8) -# else -# define _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_APPLY) _APPLY(sizeof(__cxx_contention_t)) -# endif // __linux__ - -// concepts defines the types are supported natively by the platform's wait - -# if defined(_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE) - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __has_native_atomic_wait_impl() { - if (alignof(_Tp) % sizeof(_Tp) != 0) - return false; - switch (sizeof(_Tp)) { -# define _LIBCPP_MAKE_CASE(n) \ - case n: \ - return true; - _LIBCPP_NATIVE_PLATFORM_WAIT_SIZES(_LIBCPP_MAKE_CASE) - default: - return false; -# undef _LIBCPP_MAKE_CASE - }; -} - -template -concept __has_native_atomic_wait = - has_unique_object_representations_v<_Tp> && is_trivially_copyable_v<_Tp> && - std::__has_native_atomic_wait_impl<_Tp>(); - -# else // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE - -template -concept __has_native_atomic_wait = is_same_v<_Tp, __cxx_contention_t>; - -# endif // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE - -#endif // C++20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/check_memory_order.h b/third_party/libcxx/include/c++/v1/__atomic/check_memory_order.h deleted file mode 100644 index 536f764..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/check_memory_order.h +++ /dev/null @@ -1,34 +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___ATOMIC_CHECK_MEMORY_ORDER_H -#define _LIBCPP___ATOMIC_CHECK_MEMORY_ORDER_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_consume || __m == memory_order_acquire || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_release || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__m, __f) \ - _LIBCPP_DIAGNOSE_WARNING(__f == memory_order_release || __f == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_WAIT_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_release || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#endif // _LIBCPP___ATOMIC_CHECK_MEMORY_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/contention_t.h b/third_party/libcxx/include/c++/v1/__atomic/contention_t.h deleted file mode 100644 index c6d2570..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/contention_t.h +++ /dev/null @@ -1,56 +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___ATOMIC_CONTENTION_T_H -#define _LIBCPP___ATOMIC_CONTENTION_T_H - -#include <__atomic/support.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// The original definition of `__cxx_contention_t` seemed a bit arbitrary. -// When we enable the _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE ABI, -// use definitions that are based on what the underlying platform supports -// instead. -#if defined(_LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE) - -# if defined(__linux__) || defined(__Fuchsia__) -using __cxx_contention_t _LIBCPP_NODEBUG = int32_t; -# elif defined(__APPLE__) -using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; -# elif defined(__FreeBSD__) && __SIZEOF_LONG__ == 8 -using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; -# elif defined(_AIX) && !defined(__64BIT__) -using __cxx_contention_t _LIBCPP_NODEBUG = int32_t; -# elif defined(_WIN32) -using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; -# else -using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; -# endif // __linux__ || __Fuchsia__ - -#else // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE - -# if defined(__linux__) || defined(__Fuchsia__) || (defined(_AIX) && !defined(__64BIT__)) -using __cxx_contention_t _LIBCPP_NODEBUG = int32_t; -# else -using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; -# endif // __linux__ || __Fuchsia__ || (_AIX && !__64BIT__) - -#endif // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE - -using __cxx_atomic_contention_t _LIBCPP_NODEBUG = __cxx_atomic_impl<__cxx_contention_t>; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_CONTENTION_T_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/fence.h b/third_party/libcxx/include/c++/v1/__atomic/fence.h deleted file mode 100644 index 0a63ced..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/fence.h +++ /dev/null @@ -1,28 +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___ATOMIC_FENCE_H -#define _LIBCPP___ATOMIC_FENCE_H - -#include <__atomic/memory_order.h> -#include <__atomic/support.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI void atomic_thread_fence(memory_order __m) _NOEXCEPT { __cxx_atomic_thread_fence(__m); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_signal_fence(memory_order __m) _NOEXCEPT { __cxx_atomic_signal_fence(__m); } - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_FENCE_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/floating_point_helper.h b/third_party/libcxx/include/c++/v1/__atomic/floating_point_helper.h deleted file mode 100644 index 8762ec2..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/floating_point_helper.h +++ /dev/null @@ -1,55 +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___ATOMIC_FLOATING_POINT_HELPER_H -#define _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H - -#include <__config> -#include <__type_traits/is_floating_point.h> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __is_fp80_long_double() { - // Only x87-fp80 long double has 64-bit mantissa - return __LDBL_MANT_DIG__ == 64 && std::is_same_v<_Tp, long double>; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __has_rmw_builtin() { - static_assert(std::is_floating_point_v<_Tp>); -# ifndef _LIBCPP_COMPILER_CLANG_BASED - return false; -# else - // The builtin __cxx_atomic_fetch_add errors during compilation for - // long double on platforms with fp80 format. - // For more details, see - // lib/Sema/SemaChecking.cpp function IsAllowedValueType - // LLVM Parser does not allow atomicrmw with x86_fp80 type. - // if (ValType->isSpecificBuiltinType(BuiltinType::LongDouble) && - // &Context.getTargetInfo().getLongDoubleFormat() == - // &llvm::APFloat::x87DoubleExtended()) - // For more info - // https://llvm.org/PR68602 - // https://reviews.llvm.org/D53965 - return !std::__is_fp80_long_double<_Tp>(); -# endif -} - -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/is_always_lock_free.h b/third_party/libcxx/include/c++/v1/__atomic/is_always_lock_free.h deleted file mode 100644 index f928e79..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/is_always_lock_free.h +++ /dev/null @@ -1,28 +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___ATOMIC_IS_ALWAYS_LOCK_FREE_H -#define _LIBCPP___ATOMIC_IS_ALWAYS_LOCK_FREE_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __libcpp_is_always_lock_free { - // __atomic_always_lock_free is available in all Standard modes - static const bool __value = __atomic_always_lock_free(sizeof(_Tp), nullptr); -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_IS_ALWAYS_LOCK_FREE_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/kill_dependency.h b/third_party/libcxx/include/c++/v1/__atomic/kill_dependency.h deleted file mode 100644 index 103d52d..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/kill_dependency.h +++ /dev/null @@ -1,27 +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___ATOMIC_KILL_DEPENDENCY_H -#define _LIBCPP___ATOMIC_KILL_DEPENDENCY_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Tp kill_dependency(_Tp __y) _NOEXCEPT { - return __y; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_KILL_DEPENDENCY_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/memory_order.h b/third_party/libcxx/include/c++/v1/__atomic/memory_order.h deleted file mode 100644 index 3558043..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/memory_order.h +++ /dev/null @@ -1,65 +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___ATOMIC_MEMORY_ORDER_H -#define _LIBCPP___ATOMIC_MEMORY_ORDER_H - -#include <__config> -#include <__type_traits/is_same.h> -#include <__type_traits/underlying_type.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Figure out what the underlying type for `memory_order` would be if it were -// declared as an unscoped enum (accounting for -fshort-enums). Use this result -// to pin the underlying type in C++20. -enum __legacy_memory_order { __mo_relaxed, __mo_consume, __mo_acquire, __mo_release, __mo_acq_rel, __mo_seq_cst }; - -using __memory_order_underlying_t _LIBCPP_NODEBUG = __underlying_type_t<__legacy_memory_order>; - -#if _LIBCPP_STD_VER >= 20 - -enum class memory_order : __memory_order_underlying_t { - relaxed = __mo_relaxed, - consume = __mo_consume, - acquire = __mo_acquire, - release = __mo_release, - acq_rel = __mo_acq_rel, - seq_cst = __mo_seq_cst -}; - -static_assert(is_same<__underlying_type_t, __memory_order_underlying_t>::value, - "unexpected underlying type for std::memory_order"); - -inline constexpr auto memory_order_relaxed = memory_order::relaxed; -inline constexpr auto memory_order_consume = memory_order::consume; -inline constexpr auto memory_order_acquire = memory_order::acquire; -inline constexpr auto memory_order_release = memory_order::release; -inline constexpr auto memory_order_acq_rel = memory_order::acq_rel; -inline constexpr auto memory_order_seq_cst = memory_order::seq_cst; - -#else - -enum memory_order { - memory_order_relaxed = __mo_relaxed, - memory_order_consume = __mo_consume, - memory_order_acquire = __mo_acquire, - memory_order_release = __mo_release, - memory_order_acq_rel = __mo_acq_rel, - memory_order_seq_cst = __mo_seq_cst, -}; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_MEMORY_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/support.h b/third_party/libcxx/include/c++/v1/__atomic/support.h deleted file mode 100644 index 99d0f6a..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/support.h +++ /dev/null @@ -1,121 +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___ATOMIC_SUPPORT_H -#define _LIBCPP___ATOMIC_SUPPORT_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// -// This file implements base support for atomics on the platform. -// -// The following operations and types must be implemented (where _Atmc -// is __cxx_atomic_base_impl for readability): -// -// clang-format off -// -// template -// struct __cxx_atomic_base_impl; -// -// #define __cxx_atomic_is_lock_free(__size) -// -// void __cxx_atomic_thread_fence(memory_order __order) noexcept; -// void __cxx_atomic_signal_fence(memory_order __order) noexcept; -// -// template -// void __cxx_atomic_init(_Atmc<_Tp> volatile* __a, _Tp __val) noexcept; -// template -// void __cxx_atomic_init(_Atmc<_Tp>* __a, _Tp __val) noexcept; -// -// template -// void __cxx_atomic_store(_Atmc<_Tp> volatile* __a, _Tp __val, memory_order __order) noexcept; -// template -// void __cxx_atomic_store(_Atmc<_Tp>* __a, _Tp __val, memory_order __order) noexcept; -// -// template -// _Tp __cxx_atomic_load(_Atmc<_Tp> const volatile* __a, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_load(_Atmc<_Tp> const* __a, memory_order __order) noexcept; -// -// template -// void __cxx_atomic_load_inplace(_Atmc<_Tp> const volatile* __a, _Tp* __dst, memory_order __order) noexcept; -// template -// void __cxx_atomic_load_inplace(_Atmc<_Tp> const* __a, _Tp* __dst, memory_order __order) noexcept; -// -// template -// _Tp __cxx_atomic_exchange(_Atmc<_Tp> volatile* __a, _Tp __value, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_exchange(_Atmc<_Tp>* __a, _Tp __value, memory_order __order) noexcept; -// -// template -// bool __cxx_atomic_compare_exchange_strong(_Atmc<_Tp> volatile* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) noexcept; -// template -// bool __cxx_atomic_compare_exchange_strong(_Atmc<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) noexcept; -// -// template -// bool __cxx_atomic_compare_exchange_weak(_Atmc<_Tp> volatile* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) noexcept; -// template -// bool __cxx_atomic_compare_exchange_weak(_Atmc<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) noexcept; -// -// template -// _Tp __cxx_atomic_fetch_add(_Atmc<_Tp> volatile* __a, _Tp __delta, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_add(_Atmc<_Tp>* __a, _Tp __delta, memory_order __order) noexcept; -// -// template -// _Tp* __cxx_atomic_fetch_add(_Atmc<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) noexcept; -// template -// _Tp* __cxx_atomic_fetch_add(_Atmc<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) noexcept; -// -// template -// _Tp __cxx_atomic_fetch_sub(_Atmc<_Tp> volatile* __a, _Tp __delta, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_sub(_Atmc<_Tp>* __a, _Tp __delta, memory_order __order) noexcept; -// template -// _Tp* __cxx_atomic_fetch_sub(_Atmc<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) noexcept; -// template -// _Tp* __cxx_atomic_fetch_sub(_Atmc<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) noexcept; -// -// template -// _Tp __cxx_atomic_fetch_and(_Atmc<_Tp> volatile* __a, _Tp __pattern, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_and(_Atmc<_Tp>* __a, _Tp __pattern, memory_order __order) noexcept; -// -// template -// _Tp __cxx_atomic_fetch_or(_Atmc<_Tp> volatile* __a, _Tp __pattern, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_or(_Atmc<_Tp>* __a, _Tp __pattern, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_xor(_Atmc<_Tp> volatile* __a, _Tp __pattern, memory_order __order) noexcept; -// template -// _Tp __cxx_atomic_fetch_xor(_Atmc<_Tp>* __a, _Tp __pattern, memory_order __order) noexcept; -// -// clang-format on -// - -#if _LIBCPP_HAS_GCC_ATOMIC_IMP -# include <__atomic/support/gcc.h> -#elif _LIBCPP_HAS_C_ATOMIC_IMP -# include <__atomic/support/c11.h> -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -struct __cxx_atomic_impl : public _Base { - _LIBCPP_HIDE_FROM_ABI __cxx_atomic_impl() _NOEXCEPT = default; - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit __cxx_atomic_impl(_Tp __value) _NOEXCEPT : _Base(__value) {} -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_SUPPORT_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/support/c11.h b/third_party/libcxx/include/c++/v1/__atomic/support/c11.h deleted file mode 100644 index 1ad2998..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/support/c11.h +++ /dev/null @@ -1,264 +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___ATOMIC_SUPPORT_C11_H -#define _LIBCPP___ATOMIC_SUPPORT_C11_H - -#include <__atomic/memory_order.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__memory/addressof.h> -#include <__type_traits/remove_const.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// -// This file implements support for C11-style atomics -// - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __cxx_atomic_base_impl { - _LIBCPP_HIDE_FROM_ABI -#ifndef _LIBCPP_CXX03_LANG - __cxx_atomic_base_impl() _NOEXCEPT = default; -#else - __cxx_atomic_base_impl() _NOEXCEPT : __a_value() { - } -#endif // _LIBCPP_CXX03_LANG - _LIBCPP_CONSTEXPR explicit __cxx_atomic_base_impl(_Tp __value) _NOEXCEPT : __a_value(__value) {} - _Atomic(_Tp) __a_value; -}; - -#define __cxx_atomic_is_lock_free(__s) __c11_atomic_is_lock_free(__s) - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_thread_fence(memory_order __order) _NOEXCEPT { - __c11_atomic_thread_fence(static_cast<__memory_order_underlying_t>(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_signal_fence(memory_order __order) _NOEXCEPT { - __c11_atomic_signal_fence(static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val) _NOEXCEPT { - __c11_atomic_init(std::addressof(__a->__a_value), __val); -} -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val) _NOEXCEPT { - __c11_atomic_init(std::addressof(__a->__a_value), __val); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val, memory_order __order) _NOEXCEPT { - __c11_atomic_store(std::addressof(__a->__a_value), __val, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) _NOEXCEPT { - __c11_atomic_store(std::addressof(__a->__a_value), __val, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const volatile* __a, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - return __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const* __a, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - return __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(__cxx_atomic_base_impl<_Tp> const volatile* __a, _Tp* __dst, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - *__dst = __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(__cxx_atomic_base_impl<_Tp> const* __a, _Tp* __dst, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - *__dst = __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __value, memory_order __order) _NOEXCEPT { - return __c11_atomic_exchange( - std::addressof(__a->__a_value), __value, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) _NOEXCEPT { - return __c11_atomic_exchange( - std::addressof(__a->__a_value), __value, static_cast<__memory_order_underlying_t>(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR memory_order __to_failure_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_release - ? memory_order_relaxed - : (__order == memory_order_acq_rel ? memory_order_acquire : __order); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp> volatile* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) _NOEXCEPT { - return __c11_atomic_compare_exchange_strong( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) - _NOEXCEPT { - return __c11_atomic_compare_exchange_strong( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp> volatile* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) _NOEXCEPT { - return __c11_atomic_compare_exchange_weak( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) - _NOEXCEPT { - return __c11_atomic_compare_exchange_weak( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp>* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp>* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_and( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_and( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_or( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_or( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_xor( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_xor( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_SUPPORT_C11_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/support/gcc.h b/third_party/libcxx/include/c++/v1/__atomic/support/gcc.h deleted file mode 100644 index 73c1b1c..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/support/gcc.h +++ /dev/null @@ -1,265 +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___ATOMIC_SUPPORT_GCC_H -#define _LIBCPP___ATOMIC_SUPPORT_GCC_H - -#include <__atomic/memory_order.h> -#include <__atomic/to_gcc_order.h> -#include <__config> -#include <__memory/addressof.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_assignable.h> -#include <__type_traits/remove_const.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// -// This file implements support for GCC-style atomics -// - -_LIBCPP_BEGIN_NAMESPACE_STD - -// [atomics.types.generic]p1 guarantees _Tp is trivially copyable. Because -// the default operator= in an object is not volatile, a byte-by-byte copy -// is required. -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_assign_volatile(_Tp& __a_value, _Tv const& __val) { - __a_value = __val; -} -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_assign_volatile(_Tp volatile& __a_value, _Tv volatile const& __val) { - volatile char* __to = reinterpret_cast(std::addressof(__a_value)); - volatile char* __end = __to + sizeof(_Tp); - volatile const char* __from = reinterpret_cast(std::addressof(__val)); - while (__to != __end) - *__to++ = *__from++; -} - -template -struct __cxx_atomic_base_impl { - _LIBCPP_HIDE_FROM_ABI -#ifndef _LIBCPP_CXX03_LANG - __cxx_atomic_base_impl() _NOEXCEPT = default; -#else - __cxx_atomic_base_impl() _NOEXCEPT : __a_value() { - } -#endif // _LIBCPP_CXX03_LANG - _LIBCPP_CONSTEXPR explicit __cxx_atomic_base_impl(_Tp value) _NOEXCEPT : __a_value(value) {} - _Tp __a_value; -}; - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __val) { - __cxx_atomic_assign_volatile(__a->__a_value, __val); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val) { - __a->__a_value = __val; -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_thread_fence(memory_order __order) { - __atomic_thread_fence(__to_gcc_order(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_signal_fence(memory_order __order) { - __atomic_signal_fence(__to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) { - __atomic_store(std::addressof(__a->__a_value), std::addressof(__val), __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_store(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) { - __atomic_store(std::addressof(__a->__a_value), std::addressof(__val), __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(const volatile __cxx_atomic_base_impl<_Tp>* __a, memory_order __order) { - _Tp __ret; - __atomic_load(std::addressof(__a->__a_value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(const volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp* __dst, memory_order __order) { - __atomic_load(std::addressof(__a->__a_value), __dst, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(const __cxx_atomic_base_impl<_Tp>* __a, _Tp* __dst, memory_order __order) { - __atomic_load(std::addressof(__a->__a_value), __dst, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(const __cxx_atomic_base_impl<_Tp>* __a, memory_order __order) { - _Tp __ret; - __atomic_load(std::addressof(__a->__a_value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) { - _Tp __ret; - __atomic_exchange( - std::addressof(__a->__a_value), std::addressof(__value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) { - _Tp __ret; - __atomic_exchange( - std::addressof(__a->__a_value), std::addressof(__value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - volatile __cxx_atomic_base_impl<_Tp>* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - false, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - false, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - volatile __cxx_atomic_base_impl<_Tp>* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - true, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - true, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -struct __skip_amt { - enum { value = 1 }; -}; - -template -struct __skip_amt<_Tp*> { - enum { value = sizeof(_Tp) }; -}; - -// FIXME: Haven't figured out what the spec says about using arrays with -// atomic_fetch_add. Force a failure rather than creating bad behavior. -template -struct __skip_amt<_Tp[]> {}; -template -struct __skip_amt<_Tp[n]> {}; - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(volatile __cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_add(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_add(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(volatile __cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_sub(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_sub(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_and(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_and(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_or(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_or(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_xor(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_xor(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -#define __cxx_atomic_is_lock_free(__s) __atomic_is_lock_free(__s, 0) - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_SUPPORT_GCC_H diff --git a/third_party/libcxx/include/c++/v1/__atomic/to_gcc_order.h b/third_party/libcxx/include/c++/v1/__atomic/to_gcc_order.h deleted file mode 100644 index d04c111..0000000 --- a/third_party/libcxx/include/c++/v1/__atomic/to_gcc_order.h +++ /dev/null @@ -1,54 +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___ATOMIC_TO_GCC_ORDER_H -#define _LIBCPP___ATOMIC_TO_GCC_ORDER_H - -#include <__atomic/memory_order.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if defined(__ATOMIC_RELAXED) && defined(__ATOMIC_CONSUME) && defined(__ATOMIC_ACQUIRE) && \ - defined(__ATOMIC_RELEASE) && defined(__ATOMIC_ACQ_REL) && defined(__ATOMIC_SEQ_CST) - -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR int __to_gcc_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_relaxed - ? __ATOMIC_RELAXED - : (__order == memory_order_acquire - ? __ATOMIC_ACQUIRE - : (__order == memory_order_release - ? __ATOMIC_RELEASE - : (__order == memory_order_seq_cst - ? __ATOMIC_SEQ_CST - : (__order == memory_order_acq_rel ? __ATOMIC_ACQ_REL : __ATOMIC_CONSUME)))); -} - -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR int __to_gcc_failure_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_relaxed - ? __ATOMIC_RELAXED - : (__order == memory_order_acquire - ? __ATOMIC_ACQUIRE - : (__order == memory_order_release - ? __ATOMIC_RELAXED - : (__order == memory_order_seq_cst - ? __ATOMIC_SEQ_CST - : (__order == memory_order_acq_rel ? __ATOMIC_ACQUIRE : __ATOMIC_CONSUME)))); -} - -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___ATOMIC_TO_GCC_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__bit/bit_cast.h b/third_party/libcxx/include/c++/v1/__bit/bit_cast.h deleted file mode 100644 index 7350250..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/bit_cast.h +++ /dev/null @@ -1,44 +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___BIT_BIT_CAST_H -#define _LIBCPP___BIT_BIT_CAST_H - -#include <__config> -#include <__type_traits/is_trivially_copyable.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#ifndef _LIBCPP_CXX03_LANG - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr _ToType __bit_cast(const _FromType& __from) noexcept { - return __builtin_bit_cast(_ToType, __from); -} - -#endif // _LIBCPP_CXX03_LANG - -#if _LIBCPP_STD_VER >= 20 - -template - requires(sizeof(_ToType) == sizeof(_FromType) && is_trivially_copyable_v<_ToType> && - is_trivially_copyable_v<_FromType>) -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _ToType bit_cast(const _FromType& __from) noexcept { - return __builtin_bit_cast(_ToType, __from); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BIT_CAST_H diff --git a/third_party/libcxx/include/c++/v1/__bit/bit_ceil.h b/third_party/libcxx/include/c++/v1/__bit/bit_ceil.h deleted file mode 100644 index 99881a8..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/bit_ceil.h +++ /dev/null @@ -1,54 +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___BIT_BIT_CEIL_H -#define _LIBCPP___BIT_BIT_CEIL_H - -#include <__assert> -#include <__bit/countl.h> -#include <__config> -#include <__type_traits/integer_traits.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp __bit_ceil(_Tp __t) noexcept { - if (__t < 2) - return 1; - const unsigned __n = numeric_limits<_Tp>::digits - std::__countl_zero((_Tp)(__t - 1u)); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__n != numeric_limits<_Tp>::digits, "Bad input to bit_ceil"); - - if constexpr (sizeof(_Tp) >= sizeof(unsigned)) - return _Tp{1} << __n; - else { - const unsigned __extra = numeric_limits::digits - numeric_limits<_Tp>::digits; - const unsigned __ret_val = 1u << (__n + __extra); - return (_Tp)(__ret_val >> __extra); - } -} - -# if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp bit_ceil(_Tp __t) noexcept { - return std::__bit_ceil(__t); -} - -# endif // _LIBCPP_STD_VER >= 20 -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BIT_CEIL_H diff --git a/third_party/libcxx/include/c++/v1/__bit/bit_floor.h b/third_party/libcxx/include/c++/v1/__bit/bit_floor.h deleted file mode 100644 index 799a064..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/bit_floor.h +++ /dev/null @@ -1,33 +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___BIT_BIT_FLOOR_H -#define _LIBCPP___BIT_BIT_FLOOR_H - -#include <__bit/bit_log2.h> -#include <__config> -#include <__type_traits/integer_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp bit_floor(_Tp __t) noexcept { - return __t == 0 ? 0 : _Tp{1} << std::__bit_log2(__t); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BIT_FLOOR_H diff --git a/third_party/libcxx/include/c++/v1/__bit/bit_log2.h b/third_party/libcxx/include/c++/v1/__bit/bit_log2.h deleted file mode 100644 index 9ceeec1..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/bit_log2.h +++ /dev/null @@ -1,33 +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___BIT_BIT_LOG2_H -#define _LIBCPP___BIT_BIT_LOG2_H - -#include <__assert> -#include <__bit/countl.h> -#include <__config> -#include <__type_traits/integer_traits.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp __bit_log2(_Tp __t) _NOEXCEPT { - static_assert(__is_unsigned_integer_v<_Tp>, "__bit_log2 requires an unsigned integer type"); - _LIBCPP_ASSERT_INTERNAL(__t != 0, "logarithm of 0 is undefined"); - return numeric_limits<_Tp>::digits - 1 - std::__countl_zero(__t); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BIT_LOG2_H diff --git a/third_party/libcxx/include/c++/v1/__bit/bit_width.h b/third_party/libcxx/include/c++/v1/__bit/bit_width.h deleted file mode 100644 index 75050ac..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/bit_width.h +++ /dev/null @@ -1,33 +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___BIT_BIT_WIDTH_H -#define _LIBCPP___BIT_BIT_WIDTH_H - -#include <__bit/bit_log2.h> -#include <__config> -#include <__type_traits/integer_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int bit_width(_Tp __t) noexcept { - return __t == 0 ? 0 : std::__bit_log2(__t) + 1; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___BIT_BIT_WIDTH_H diff --git a/third_party/libcxx/include/c++/v1/__bit/blsr.h b/third_party/libcxx/include/c++/v1/__bit/blsr.h deleted file mode 100644 index 76bd521..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/blsr.h +++ /dev/null @@ -1,34 +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___BIT_BLSR_H -#define _LIBCPP___BIT_BLSR_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR unsigned __libcpp_blsr(unsigned __x) _NOEXCEPT { - return __x ^ (__x & -__x); -} - -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR unsigned long __libcpp_blsr(unsigned long __x) _NOEXCEPT { - return __x ^ (__x & -__x); -} - -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR unsigned long long __libcpp_blsr(unsigned long long __x) _NOEXCEPT { - return __x ^ (__x & -__x); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BLSR_H diff --git a/third_party/libcxx/include/c++/v1/__bit/byteswap.h b/third_party/libcxx/include/c++/v1/__bit/byteswap.h deleted file mode 100644 index 7ce7e06..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/byteswap.h +++ /dev/null @@ -1,53 +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___BIT_BYTESWAP_H -#define _LIBCPP___BIT_BYTESWAP_H - -#include <__concepts/arithmetic.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 23 - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp byteswap(_Tp __val) noexcept { - if constexpr (sizeof(_Tp) == 1) { - return __val; - } else if constexpr (sizeof(_Tp) == 2) { - return __builtin_bswap16(__val); - } else if constexpr (sizeof(_Tp) == 4) { - return __builtin_bswap32(__val); - } else if constexpr (sizeof(_Tp) == 8) { - return __builtin_bswap64(__val); -# if _LIBCPP_HAS_INT128 - } else if constexpr (sizeof(_Tp) == 16) { -# if __has_builtin(__builtin_bswap128) - return __builtin_bswap128(__val); -# else - return (static_cast<_Tp>(byteswap(static_cast(__val))) << 64) | - static_cast<_Tp>(byteswap(static_cast(__val >> 64))); -# endif // __has_builtin(__builtin_bswap128) -# endif // _LIBCPP_HAS_INT128 - } else { - static_assert(sizeof(_Tp) == 0, "byteswap is unimplemented for integral types of this size"); - } -} - -#endif // _LIBCPP_STD_VER >= 23 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_BYTESWAP_H diff --git a/third_party/libcxx/include/c++/v1/__bit/countl.h b/third_party/libcxx/include/c++/v1/__bit/countl.h deleted file mode 100644 index c95828f..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/countl.h +++ /dev/null @@ -1,48 +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___BIT_COUNTL_H -#define _LIBCPP___BIT_COUNTL_H - -#include <__config> -#include <__type_traits/integer_traits.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 int __countl_zero(_Tp __t) _NOEXCEPT { - return __builtin_clzg(__t, numeric_limits<_Tp>::digits); -} - -#if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countl_zero(_Tp __t) noexcept { - return std::__countl_zero(__t); -} - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countl_one(_Tp __t) noexcept { - return std::countl_zero(static_cast<_Tp>(~__t)); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___BIT_COUNTL_H diff --git a/third_party/libcxx/include/c++/v1/__bit/countr.h b/third_party/libcxx/include/c++/v1/__bit/countr.h deleted file mode 100644 index 16f689d..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/countr.h +++ /dev/null @@ -1,48 +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___BIT_COUNTR_H -#define _LIBCPP___BIT_COUNTR_H - -#include <__config> -#include <__type_traits/integer_traits.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR int __countr_zero(_Tp __t) _NOEXCEPT { - return __builtin_ctzg(__t, numeric_limits<_Tp>::digits); -} - -#if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countr_zero(_Tp __t) noexcept { - return std::__countr_zero(__t); -} - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int countr_one(_Tp __t) noexcept { - return std::countr_zero(static_cast<_Tp>(~__t)); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___BIT_COUNTR_H diff --git a/third_party/libcxx/include/c++/v1/__bit/endian.h b/third_party/libcxx/include/c++/v1/__bit/endian.h deleted file mode 100644 index 2d31e5d..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/endian.h +++ /dev/null @@ -1,38 +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___BIT_ENDIAN_H -#define _LIBCPP___BIT_ENDIAN_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -enum class endian { - little = 0xDEAD, - big = 0xFACE, -# if defined(_LIBCPP_LITTLE_ENDIAN) - native = little -# elif defined(_LIBCPP_BIG_ENDIAN) - native = big -# else - native = 0xCAFE -# endif -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___BIT_ENDIAN_H diff --git a/third_party/libcxx/include/c++/v1/__bit/has_single_bit.h b/third_party/libcxx/include/c++/v1/__bit/has_single_bit.h deleted file mode 100644 index c49c518..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/has_single_bit.h +++ /dev/null @@ -1,37 +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___BIT_HAS_SINGLE_BIT_H -#define _LIBCPP___BIT_HAS_SINGLE_BIT_H - -#include <__config> -#include <__type_traits/integer_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool has_single_bit(_Tp __t) noexcept { - return __builtin_popcountg(__t) == 1; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___BIT_HAS_SINGLE_BIT_H diff --git a/third_party/libcxx/include/c++/v1/__bit/invert_if.h b/third_party/libcxx/include/c++/v1/__bit/invert_if.h deleted file mode 100644 index f7606ed..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/invert_if.h +++ /dev/null @@ -1,30 +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___BIT_INVERT_IF_H -#define _LIBCPP___BIT_INVERT_IF_H - -#include <__concepts/arithmetic.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp __invert_if(_Tp __v) { - if (_Invert) - return ~__v; - return __v; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_INVERT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__bit/popcount.h b/third_party/libcxx/include/c++/v1/__bit/popcount.h deleted file mode 100644 index d104c8e..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/popcount.h +++ /dev/null @@ -1,42 +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___BIT_POPCOUNT_H -#define _LIBCPP___BIT_POPCOUNT_H - -#include <__config> -#include <__type_traits/integer_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR int __popcount(_Tp __t) _NOEXCEPT { - return __builtin_popcountg(__t); -} - -#if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr int popcount(_Tp __t) noexcept { - return std::__popcount(__t); -} - -#endif - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___BIT_POPCOUNT_H diff --git a/third_party/libcxx/include/c++/v1/__bit/rotate.h b/third_party/libcxx/include/c++/v1/__bit/rotate.h deleted file mode 100644 index fde9058..0000000 --- a/third_party/libcxx/include/c++/v1/__bit/rotate.h +++ /dev/null @@ -1,60 +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___BIT_ROTATE_H -#define _LIBCPP___BIT_ROTATE_H - -#include <__config> -#include <__type_traits/integer_traits.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Writing two full functions for rotl and rotr makes it easier for the compiler -// to optimize the code. On x86 this function becomes the ROL instruction and -// the rotr function becomes the ROR instruction. - -#if _LIBCPP_STD_VER >= 20 - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp rotl(_Tp __t, int __cnt) noexcept { - const int __n = numeric_limits<_Tp>::digits; - int __r = __cnt % __n; - - if (__r == 0) - return __t; - - if (__r > 0) - return (__t << __r) | (__t >> (__n - __r)); - - return (__t >> -__r) | (__t << (__n + __r)); -} - -template <__unsigned_integer _Tp> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp rotr(_Tp __t, int __cnt) noexcept { - const int __n = numeric_limits<_Tp>::digits; - int __r = __cnt % __n; - - if (__r == 0) - return __t; - - if (__r > 0) - return (__t >> __r) | (__t << (__n - __r)); - - return (__t << -__r) | (__t >> (__n + __r)); -} - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___BIT_ROTATE_H diff --git a/third_party/libcxx/include/c++/v1/__bit_reference b/third_party/libcxx/include/c++/v1/__bit_reference deleted file mode 100644 index 6bbe289..0000000 --- a/third_party/libcxx/include/c++/v1/__bit_reference +++ /dev/null @@ -1,873 +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___BIT_REFERENCE -#define _LIBCPP___BIT_REFERENCE - -#include <__algorithm/comp.h> -#include <__algorithm/copy.h> -#include <__algorithm/copy_backward.h> -#include <__algorithm/copy_n.h> -#include <__algorithm/equal.h> -#include <__algorithm/fill_n.h> -#include <__algorithm/min.h> -#include <__algorithm/rotate.h> -#include <__algorithm/specialized_algorithms.h> -#include <__assert> -#include <__bit/countr.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__cstddef/size_t.h> -#include <__functional/identity.h> -#include <__fwd/bit_reference.h> -#include <__iterator/iterator_traits.h> -#include <__memory/construct_at.h> -#include <__memory/pointer_traits.h> -#include <__type_traits/conditional.h> -#include <__type_traits/desugars_to.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_constant_evaluated.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_unsigned.h> -#include <__type_traits/void_t.h> -#include <__utility/pair.h> -#include <__utility/swap.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __bit_const_reference; - -template -struct __has_storage_type { - static const bool value = false; -}; - -template -struct __size_difference_type_traits { - using difference_type = ptrdiff_t; - using size_type = size_t; -}; - -template -struct __size_difference_type_traits<_Cp, __void_t > { - using difference_type = typename _Cp::difference_type; - using size_type = typename _Cp::size_type; -}; - -// The `__x_mask` functions are designed to work exclusively with any unsigned `_StorageType`s, including small -// integral types such as unsigned char/short, `uint8_t`, and `uint16_t`. To prevent undefined behavior or -// ambiguities due to integral promotions for the small integral types, all intermediate bitwise operations are -// explicitly cast back to the unsigned `_StorageType`. - -// Creates a mask of type `_StorageType` with a specified number of leading zeros (__clz) and sets all remaining -// bits to one. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _StorageType __trailing_mask(unsigned __clz) { - static_assert(is_unsigned<_StorageType>::value, "__trailing_mask only works with unsigned types"); - return static_cast<_StorageType>(~static_cast<_StorageType>(0)) >> __clz; -} - -// Creates a mask of type `_StorageType` with a specified number of trailing zeros (__ctz) and sets all remaining -// bits to one. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _StorageType __leading_mask(unsigned __ctz) { - static_assert(is_unsigned<_StorageType>::value, "__leading_mask only works with unsigned types"); - return static_cast<_StorageType>(~static_cast<_StorageType>(0)) << __ctz; -} - -// Creates a mask of type `_StorageType` with a specified number of leading zeros (__clz), a specified number of -// trailing zeros (__ctz), and sets all bits in between to one. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _StorageType __middle_mask(unsigned __clz, unsigned __ctz) { - static_assert(is_unsigned<_StorageType>::value, "__middle_mask only works with unsigned types"); - return std::__leading_mask<_StorageType>(__ctz) & std::__trailing_mask<_StorageType>(__clz); -} - -// This function is designed to operate correctly even for smaller integral types like `uint8_t`, `uint16_t`, -// or `unsigned short`. -// See https://github.com/llvm/llvm-project/pull/122410. -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 void -__fill_masked_range(_StoragePointer __word, unsigned __clz, unsigned __ctz, bool __fill_val) { - static_assert(is_unsigned::element_type>::value, - "__fill_masked_range must be called with unsigned type"); - using _StorageType = typename pointer_traits<_StoragePointer>::element_type; - _LIBCPP_ASSERT_VALID_INPUT_RANGE( - __ctz + __clz < sizeof(_StorageType) * CHAR_BIT, "__fill_masked_range called with invalid range"); - _StorageType __m = std::__middle_mask<_StorageType>(__clz, __ctz); - if (__fill_val) - *__word |= __m; - else - *__word &= ~__m; -} - -template ::value> -class __bit_reference { - using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; - using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__storage_pointer; - - __storage_pointer __seg_; - __storage_type __mask_; - - friend typename _Cp::__self; - - friend class __bit_const_reference<_Cp>; - friend class __bit_iterator<_Cp, false>; - -public: - using __container _LIBCPP_NODEBUG = typename _Cp::__self; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_reference(const __bit_reference&) = default; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 operator bool() const _NOEXCEPT { - return static_cast(*__seg_ & __mask_); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool operator~() const _NOEXCEPT { - return !static_cast(*this); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_reference& operator=(bool __x) _NOEXCEPT { - if (__x) - *__seg_ |= __mask_; - else - *__seg_ &= ~__mask_; - return *this; - } - -#if _LIBCPP_STD_VER >= 23 - _LIBCPP_HIDE_FROM_ABI constexpr const __bit_reference& operator=(bool __x) const noexcept { - if (__x) - *__seg_ |= __mask_; - else - *__seg_ &= ~__mask_; - return *this; - } -#endif - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_reference& operator=(const __bit_reference& __x) _NOEXCEPT { - return operator=(static_cast(__x)); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void flip() _NOEXCEPT { *__seg_ ^= __mask_; } - -private: - _LIBCPP_HIDE_FROM_ABI - _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit __bit_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT - : __seg_(__s), - __mask_(__m) {} -}; - -template -class __bit_reference<_Cp, false> {}; - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void -swap(__bit_reference<_Cp> __x, __bit_reference<_Dp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(__bit_reference<_Cp> __x, bool& __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(bool& __x, __bit_reference<_Cp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -class __bit_const_reference { - using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; - using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__const_storage_pointer; - - __storage_pointer __seg_; - __storage_type __mask_; - - friend typename _Cp::__self; - friend class __bit_iterator<_Cp, true>; - -public: - using __container _LIBCPP_NODEBUG = typename _Cp::__self; - - _LIBCPP_HIDE_FROM_ABI __bit_const_reference(const __bit_const_reference&) = default; - __bit_const_reference& operator=(const __bit_const_reference&) = delete; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_const_reference(const __bit_reference<_Cp>& __x) _NOEXCEPT - : __seg_(__x.__seg_), - __mask_(__x.__mask_) {} - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR operator bool() const _NOEXCEPT { - return static_cast(*__seg_ & __mask_); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator<_Cp, true> operator&() const _NOEXCEPT { - return __bit_iterator<_Cp, true>(__seg_, static_cast(std::__countr_zero(__mask_))); - } - -private: - _LIBCPP_HIDE_FROM_ABI - _LIBCPP_CONSTEXPR explicit __bit_const_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT - : __seg_(__s), - __mask_(__m) {} -}; - -template -struct __bit_array { - using difference_type _LIBCPP_NODEBUG = typename __size_difference_type_traits<_Cp>::difference_type; - using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; - using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__storage_pointer; - using iterator _LIBCPP_NODEBUG = typename _Cp::iterator; - - static const unsigned __bits_per_word = _Cp::__bits_per_word; - static const unsigned _Np = 4; - - difference_type __size_; - __storage_type __word_[_Np]; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static difference_type capacity() { - return static_cast(_Np * __bits_per_word); - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit __bit_array(difference_type __s) : __size_(__s) { - if (__libcpp_is_constant_evaluated()) { - for (size_t __i = 0; __i != __bit_array<_Cp>::_Np; ++__i) - std::__construct_at(__word_ + __i, 0); - } - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator begin() { - return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]), 0); - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 iterator end() { - return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]) + __size_ / __bits_per_word, - static_cast(__size_ % __bits_per_word)); - } -}; - -template -class __bit_iterator { -public: - using difference_type = typename __size_difference_type_traits<_Cp>::difference_type; - using value_type = bool; - using pointer = __bit_iterator; -#ifndef _LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL - using reference = __conditional_t<_IsConst, __bit_const_reference<_Cp>, __bit_reference<_Cp> >; -#else - using reference = __conditional_t<_IsConst, bool, __bit_reference<_Cp> >; -#endif - using iterator_category = random_access_iterator_tag; - -private: - using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; - using __storage_pointer _LIBCPP_NODEBUG = - __conditional_t<_IsConst, typename _Cp::__const_storage_pointer, typename _Cp::__storage_pointer>; - - static const unsigned __bits_per_word = _Cp::__bits_per_word; - - __storage_pointer __seg_; - unsigned __ctz_; - -public: - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator() _NOEXCEPT -#if _LIBCPP_STD_VER >= 14 - : __seg_(nullptr), - __ctz_(0) -#endif - { - } - -#ifdef _LIBCPP_ABI_TRIVIALLY_COPYABLE_BIT_ITERATOR - template = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT - : __seg_(__it.__seg_), - __ctz_(__it.__ctz_) {} - - _LIBCPP_HIDE_FROM_ABI __bit_iterator(const __bit_iterator&) = default; - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator=(const __bit_iterator&) = default; -#else - // When _IsConst=false, this is the copy constructor. - // It is non-trivial. Making it trivial would break ABI. - // When _IsConst=true, this is a converting constructor; - // the copy and move constructors are implicitly generated - // and trivial. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT - : __seg_(__it.__seg_), - __ctz_(__it.__ctz_) {} - - // When _IsConst=false, we have a user-provided copy constructor, - // so we must also provide a copy assignment operator because - // the implicit generation of a defaulted one is deprecated. - // When _IsConst=true, the assignment operators are - // implicitly generated and trivial. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator& - operator=(const _If<_IsConst, struct __private_nat, __bit_iterator>& __it) { - __seg_ = __it.__seg_; - __ctz_ = __it.__ctz_; - return *this; - } -#endif - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 reference operator*() const _NOEXCEPT { - _LIBCPP_ASSERT_INTERNAL(__ctz_ < __bits_per_word, "Dereferencing an invalid __bit_iterator."); - return __conditional_t<_IsConst, __bit_const_reference<_Cp>, __bit_reference<_Cp> >( - __seg_, __storage_type(1) << __ctz_); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator& operator++() { - if (__ctz_ != __bits_per_word - 1) - ++__ctz_; - else { - __ctz_ = 0; - ++__seg_; - } - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator operator++(int) { - __bit_iterator __tmp = *this; - ++(*this); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator& operator--() { - if (__ctz_ != 0) - --__ctz_; - else { - __ctz_ = __bits_per_word - 1; - --__seg_; - } - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator operator--(int) { - __bit_iterator __tmp = *this; - --(*this); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator& operator+=(difference_type __n) { - if (__n >= 0) - __seg_ += (__n + __ctz_) / __bits_per_word; - else - __seg_ += static_cast(__n - __bits_per_word + __ctz_ + 1) / - static_cast(__bits_per_word); - __n &= (__bits_per_word - 1); - __ctz_ = static_cast((__n + __ctz_) % __bits_per_word); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator& operator-=(difference_type __n) { - return *this += -__n; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator operator+(difference_type __n) const { - __bit_iterator __t(*this); - __t += __n; - return __t; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator operator-(difference_type __n) const { - __bit_iterator __t(*this); - __t -= __n; - return __t; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator - operator+(difference_type __n, const __bit_iterator& __it) { - return __it + __n; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend difference_type - operator-(const __bit_iterator& __x, const __bit_iterator& __y) { - return (__x.__seg_ - __y.__seg_) * __bits_per_word + __x.__ctz_ - __y.__ctz_; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 reference operator[](difference_type __n) const { - return *(*this + __n); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator==(const __bit_iterator& __x, const __bit_iterator& __y) { - return __x.__seg_ == __y.__seg_ && __x.__ctz_ == __y.__ctz_; - } - -#if _LIBCPP_STD_VER <= 17 - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator!=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__x == __y); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator<(const __bit_iterator& __x, const __bit_iterator& __y) { - return __x.__seg_ < __y.__seg_ || (__x.__seg_ == __y.__seg_ && __x.__ctz_ < __y.__ctz_); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator>(const __bit_iterator& __x, const __bit_iterator& __y) { - return __y < __x; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator<=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__y < __x); - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - operator>=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__x < __y); - } -#else // _LIBCPP_STD_VER <= 17 - _LIBCPP_HIDE_FROM_ABI constexpr friend strong_ordering - operator<=>(const __bit_iterator& __x, const __bit_iterator& __y) { - if (__x.__seg_ < __y.__seg_) - return strong_ordering::less; - - if (__x.__seg_ == __y.__seg_) - return __x.__ctz_ <=> __y.__ctz_; - - return strong_ordering::greater; - } -#endif // _LIBCPP_STD_VER <= 17 - -private: - _LIBCPP_HIDE_FROM_ABI - _LIBCPP_CONSTEXPR_SINCE_CXX20 explicit __bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT - : __seg_(__s), - __ctz_(__ctz) { - _LIBCPP_ASSERT_INTERNAL( - __ctz_ < __bits_per_word, "__bit_iterator initialized with an invalid number of trailing zeros."); - } - - friend typename _Cp::__self; - - friend class __bit_reference<_Cp>; - friend class __bit_const_reference<_Cp>; - friend class __bit_iterator<_Cp, true>; - template - friend struct __bit_array; - - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator<_Dp, false> __copy_backward_aligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator<_Dp, false> __copy_backward_unaligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend struct __copy_backward_impl; - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend pair<__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false> > - __rotate(__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>); - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - __equal_aligned(__bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst2>); - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool - __equal_unaligned(__bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst1>, __bit_iterator<_Dp, _IsConst2>); - template ::value && __is_identity<_Proj2>::value && - __desugars_to_v<__equal_tag, _BinaryPredicate, bool, bool>, - int> > - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool __equal_iter_impl( - __bit_iterator<_Dp, _IsConst1>, - __bit_iterator<_Dp, _IsConst1>, - __bit_iterator<_Dp, _IsConst2>, - _BinaryPredicate, - _Proj1&, - _Proj2&); - template && __is_identity<_Proj1>::value && - __is_identity<_Proj2>::value, - int> > - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 friend bool __equal_impl( - __bit_iterator<_Dp, _IsConst1> __first1, - __bit_iterator<_Dp, _IsConst1> __last1, - __bit_iterator<_Dp, _IsConst2> __first2, - __bit_iterator<_Dp, _IsConst2>, - _Pred&, - _Proj1&, - _Proj2&); - template - _LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator<_Dp, _IC> - __find_bool(__bit_iterator<_Dp, _IC>, typename __size_difference_type_traits<_Dp>::size_type); - template - friend typename __bit_iterator<_Dp, _IC>::difference_type _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 - __count_bool(__bit_iterator<_Dp, _IC>, typename __size_difference_type_traits<_Dp>::size_type); - - template - friend struct __specialized_algorithm; -}; - -template -struct __specialized_algorithm<_Algorithm::__fill_n, __single_iterator<__bit_iterator<_Cp, false> > > { - static const bool __has_algorithm = true; - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static void - __impl(__bit_iterator<_Cp, false> __first, typename __size_difference_type_traits<_Cp>::size_type __n) { - using _It = __bit_iterator<_Cp, false>; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - std::__fill_masked_range(std::__to_address(__first.__seg_), __clz_f - __dn, __first.__ctz_, _FillVal); - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - __storage_type __nw = __n / __bits_per_word; - std::__fill_n(std::__to_address(__first.__seg_), __nw, _FillVal ? static_cast<__storage_type>(-1) : 0); - __n -= __nw * __bits_per_word; - // do last partial word - if (__n > 0) { - __first.__seg_ += __nw; - std::__fill_masked_range(std::__to_address(__first.__seg_), __bits_per_word - __n, 0u, _FillVal); - } - } - - template - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static __bit_iterator<_Cp, false> - operator()(__bit_iterator<_Cp, false> __first, _Size __n, const _Tp& __value) { - if (__n > 0) { - if (__value) - __impl(__first, __n); - else - __impl(__first, __n); - } - return __first + __n; - } -}; - -template -struct __specialized_algorithm<_Algorithm::__copy, - __iterator_pair<__bit_iterator<_Cp, _IsConst>, __bit_iterator<_Cp, _IsConst> >, - __single_iterator<__bit_iterator<_Cp, false> > > { - static const bool __has_algorithm = true; - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static __bit_iterator<_Cp, false> - __aligned_impl(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = std::__middle_mask<__storage_type>(__clz - __dn, __first.__ctz_); - __storage_type __b = *__first.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - __storage_type __nw = __n / __bits_per_word; - std::copy(std::__to_address(__first.__seg_), - std::__to_address(__first.__seg_ + __nw), - std::__to_address(__result.__seg_)); - __n -= __nw * __bits_per_word; - __result.__seg_ += __nw; - // do last word - if (__n > 0) { - __first.__seg_ += __nw; - __storage_type __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = *__first.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(__n); - } - } - return __result; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static __bit_iterator<_Cp, false> - __unaligned_impl(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = std::__middle_mask<__storage_type>(__clz_f - __dn, __first.__ctz_); - __storage_type __b = *__first.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = std::__middle_mask<__storage_type>(__clz_r - __ddn, __result.__ctz_); - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __first.__ctz_) - *__result.__seg_ |= __b << (__result.__ctz_ - __first.__ctz_); - else - *__result.__seg_ |= __b >> (__first.__ctz_ - __result.__ctz_); - __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__ddn + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __dn); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> (__first.__ctz_ + __ddn); - __result.__ctz_ = static_cast(__dn); - } - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __m = std::__leading_mask<__storage_type>(__result.__ctz_); - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_) { - __storage_type __b = *__first.__seg_; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << __result.__ctz_; - ++__result.__seg_; - *__result.__seg_ &= __m; - *__result.__seg_ |= __b >> __clz_r; - } - // do last word - if (__n > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - __storage_type __b = *__first.__seg_ & __m; - __storage_type __dn = std::min(__n, static_cast(__clz_r)); - __m = std::__middle_mask<__storage_type>(__clz_r - __dn, __result.__ctz_); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << __result.__ctz_; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = std::__trailing_mask<__storage_type>(__bits_per_word - __n); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> __dn; - __result.__ctz_ = static_cast(__n); - } - } - } - return __result; - } - - _LIBCPP_HIDE_FROM_ABI - _LIBCPP_CONSTEXPR_SINCE_CXX20 static pair<__bit_iterator<_Cp, _IsConst>, __bit_iterator<_Cp, false> > - operator()(__bit_iterator<_Cp, _IsConst> __first, - __bit_iterator<_Cp, _IsConst> __last, - __bit_iterator<_Cp, false> __result) { - if (__first.__ctz_ == __result.__ctz_) - return std::make_pair(__last, __aligned_impl(__first, __last, __result)); - return std::make_pair(__last, __unaligned_impl(__first, __last, __result)); - } -}; - -template -struct __specialized_algorithm<_Algorithm::__swap_ranges, - __iterator_pair<__bit_iterator<_Cl, false>, __bit_iterator<_Cl, false> >, - __single_iterator<__bit_iterator<_Cr, false> > > { - static const bool __has_algorithm = true; - - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator<_Cr, false> __aligned_impl( - __bit_iterator<_Cl, false> __first, __bit_iterator<_Cl, false> __last, __bit_iterator<_Cr, false> __result) { - using _I1 = __bit_iterator<_Cl, false>; - using difference_type = typename _I1::difference_type; - using __storage_type = typename _I1::__storage_type; - - const int __bits_per_word = _I1::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz - __dn)); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1; - *__first.__seg_ |= __b2; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_, ++__result.__seg_) - swap(*__first.__seg_, *__result.__seg_); - // do last word - if (__n > 0) { - __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1; - *__first.__seg_ |= __b2; - __result.__ctz_ = static_cast(__n); - } - } - return __result; - } - - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator<_Cr, false> __unaligned_impl( - __bit_iterator<_Cl, false> __first, __bit_iterator<_Cl, false> __last, __bit_iterator<_Cr, false> __result) { - using _I1 = __bit_iterator<_Cl, false>; - using difference_type = typename _I1::difference_type; - using __storage_type = typename _I1::__storage_type; - - const int __bits_per_word = _I1::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn)); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn)); - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __first.__ctz_) { - unsigned __s = __result.__ctz_ - __first.__ctz_; - *__result.__seg_ |= __b1 << __s; - *__first.__seg_ |= __b2 >> __s; - } else { - unsigned __s = __first.__ctz_ - __result.__ctz_; - *__result.__seg_ |= __b1 >> __s; - *__first.__seg_ |= __b2 << __s; - } - __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__ddn + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __dn); - __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - unsigned __s = __first.__ctz_ + __ddn; - *__result.__seg_ |= __b1 >> __s; - *__first.__seg_ |= __b2 << __s; - __result.__ctz_ = static_cast(__dn); - } - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - __storage_type __m = ~__storage_type(0) << __result.__ctz_; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_) { - __storage_type __b1 = *__first.__seg_; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 << __result.__ctz_; - *__first.__seg_ = __b2 >> __result.__ctz_; - ++__result.__seg_; - __b2 = *__result.__seg_ & ~__m; - *__result.__seg_ &= __m; - *__result.__seg_ |= __b1 >> __clz_r; - *__first.__seg_ |= __b2 << __clz_r; - } - // do last word - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __dn = std::min<__storage_type>(__n, __clz_r); - __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn)); - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 << __result.__ctz_; - *__first.__seg_ |= __b2 >> __result.__ctz_; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 >> __dn; - *__first.__seg_ |= __b2 << __dn; - __result.__ctz_ = static_cast(__n); - } - } - } - return __result; - } - - _LIBCPP_HIDE_FROM_ABI static - _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<__bit_iterator<_Cl, false>, __bit_iterator<_Cr, false> > - operator()(__bit_iterator<_Cl, false> __first1, - __bit_iterator<_Cl, false> __last1, - __bit_iterator<_Cr, false> __first2) { - if (__first1.__ctz_ == __first2.__ctz_) - return std::make_pair(__last1, __aligned_impl(__first1, __last1, __first2)); - return std::make_pair(__last1, __unaligned_impl(__first1, __last1, __first2)); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___BIT_REFERENCE diff --git a/third_party/libcxx/include/c++/v1/__charconv/chars_format.h b/third_party/libcxx/include/c++/v1/__charconv/chars_format.h deleted file mode 100644 index c76cebd..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/chars_format.h +++ /dev/null @@ -1,61 +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___CHARCONV_CHARS_FORMAT_H -#define _LIBCPP___CHARCONV_CHARS_FORMAT_H - -#include <__config> -#include <__utility/to_underlying.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 - -enum class chars_format { scientific = 0x1, fixed = 0x2, hex = 0x4, general = fixed | scientific }; - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator~(chars_format __x) { - return chars_format(~std::__to_underlying(__x)); -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator&(chars_format __x, chars_format __y) { - return chars_format(std::__to_underlying(__x) & std::__to_underlying(__y)); -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator|(chars_format __x, chars_format __y) { - return chars_format(std::__to_underlying(__x) | std::__to_underlying(__y)); -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format operator^(chars_format __x, chars_format __y) { - return chars_format(std::__to_underlying(__x) ^ std::__to_underlying(__y)); -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator&=(chars_format& __x, chars_format __y) { - __x = __x & __y; - return __x; -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator|=(chars_format& __x, chars_format __y) { - __x = __x | __y; - return __x; -} - -inline _LIBCPP_HIDE_FROM_ABI constexpr chars_format& operator^=(chars_format& __x, chars_format __y) { - __x = __x ^ __y; - return __x; -} - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_CHARS_FORMAT_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/from_chars_floating_point.h b/third_party/libcxx/include/c++/v1/__charconv/from_chars_floating_point.h deleted file mode 100644 index 811e518..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/from_chars_floating_point.h +++ /dev/null @@ -1,73 +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___CHARCONV_FROM_CHARS_FLOATING_POINT_H -#define _LIBCPP___CHARCONV_FROM_CHARS_FLOATING_POINT_H - -#include <__assert> -#include <__charconv/chars_format.h> -#include <__charconv/from_chars_result.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__system_error/errc.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 >= 17 - -template -struct __from_chars_result { - _Fp __value; - ptrdiff_t __n; - errc __ec; -}; - -template -_LIBCPP_EXPORTED_FROM_ABI __from_chars_result<_Fp> __from_chars_floating_point( - _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt); - -extern template __from_chars_result __from_chars_floating_point( - _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt); - -extern template __from_chars_result __from_chars_floating_point( - _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt); - -template -_LIBCPP_HIDE_FROM_ABI from_chars_result -__from_chars(const char* __first, const char* __last, _Fp& __value, chars_format __fmt) { - __from_chars_result<_Fp> __r = std::__from_chars_floating_point<_Fp>(__first, __last, __fmt); - if (__r.__ec != errc::invalid_argument) - __value = __r.__value; - return {__first + __r.__n, __r.__ec}; -} - -_LIBCPP_AVAILABILITY_FROM_CHARS_FLOATING_POINT _LIBCPP_HIDE_FROM_ABI inline from_chars_result -from_chars(const char* __first, const char* __last, float& __value, chars_format __fmt = chars_format::general) { - return std::__from_chars(__first, __last, __value, __fmt); -} - -_LIBCPP_AVAILABILITY_FROM_CHARS_FLOATING_POINT _LIBCPP_HIDE_FROM_ABI inline from_chars_result -from_chars(const char* __first, const char* __last, double& __value, chars_format __fmt = chars_format::general) { - return std::__from_chars(__first, __last, __value, __fmt); -} - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHARCONV_FROM_CHARS_FLOATING_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/from_chars_integral.h b/third_party/libcxx/include/c++/v1/__charconv/from_chars_integral.h deleted file mode 100644 index 3063c09..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/from_chars_integral.h +++ /dev/null @@ -1,237 +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___CHARCONV_FROM_CHARS_INTEGRAL_H -#define _LIBCPP___CHARCONV_FROM_CHARS_INTEGRAL_H - -#include <__assert> -#include <__charconv/from_chars_result.h> -#include <__charconv/traits.h> -#include <__config> -#include <__system_error/errc.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_signed.h> -#include <__type_traits/is_unsigned.h> -#include <__type_traits/make_unsigned.h> -#include - -#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 >= 17 - -from_chars_result from_chars(const char*, const char*, bool, int = 10) = delete; - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__sign_combinator(_It __first, _It __last, _Tp& __value, _Fn __f, _Ts... __args) { - using __tl = numeric_limits<_Tp>; - decltype(std::__to_unsigned_like(__value)) __x; - - bool __neg = (__first != __last && *__first == '-'); - auto __r = __f(__neg ? __first + 1 : __first, __last, __x, __args...); - switch (__r.ec) { - case errc::invalid_argument: - return {__first, __r.ec}; - case errc::result_out_of_range: - return __r; - default: - break; - } - - if (__neg) { - if (__x <= std::__complement(std::__to_unsigned_like(__tl::min()))) { - __value = std::__complement(__x); - return __r; - } - } else { - if (__x <= std::__to_unsigned_like(__tl::max())) { - __value = __x; - return __r; - } - } - - return {__r.ptr, errc::result_out_of_range}; -} - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool __in_pattern(_Tp __c) { - return '0' <= __c && __c <= '9'; -} - -struct _LIBCPP_HIDDEN __in_pattern_result { - bool __ok; - int __val; - - explicit _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI operator bool() const { return __ok; } -}; - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __in_pattern_result __in_pattern(_Tp __c, int __base) { - if (__base <= 10) - return {'0' <= __c && __c < '0' + __base, __c - '0'}; - else if (std::__in_pattern(__c)) - return {true, __c - '0'}; - else if ('a' <= __c && __c < 'a' + __base - 10) - return {true, __c - 'a' + 10}; - else - return {'A' <= __c && __c < 'A' + __base - 10, __c - 'A' + 10}; -} - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__subject_seq_combinator(_It __first, _It __last, _Tp& __value, _Fn __f, _Ts... __args) { - auto __find_non_zero = [](_It __firstit, _It __lastit) { - for (; __firstit != __lastit; ++__firstit) - if (*__firstit != '0') - break; - return __firstit; - }; - - auto __p = __find_non_zero(__first, __last); - if (__p == __last || !std::__in_pattern(*__p, __args...)) { - if (__p == __first) - return {__first, errc::invalid_argument}; - else { - __value = 0; - return {__p, {}}; - } - } - - auto __r = __f(__p, __last, __value, __args...); - if (__r.ec == errc::result_out_of_range) { - for (; __r.ptr != __last; ++__r.ptr) { - if (!std::__in_pattern(*__r.ptr, __args...)) - break; - } - } - - return __r; -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__from_chars_atoi(const char* __first, const char* __last, _Tp& __value) { - using __tx = __itoa::__traits<_Tp>; - using __output_type = typename __tx::type; - - return std::__subject_seq_combinator( - __first, __last, __value, [](const char* __f, const char* __l, _Tp& __val) -> from_chars_result { - __output_type __a, __b; - auto __p = __tx::__read(__f, __l, __a, __b); - if (__p == __l || !std::__in_pattern(*__p)) { - __output_type __m = numeric_limits<_Tp>::max(); - if (__m >= __a && __m - __a >= __b) { - __val = __a + __b; - return {__p, {}}; - } - } - return {__p, errc::result_out_of_range}; - }); -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__from_chars_atoi(const char* __first, const char* __last, _Tp& __value) { - using __t = decltype(std::__to_unsigned_like(__value)); - return std::__sign_combinator(__first, __last, __value, __from_chars_atoi<__t>); -} - -/* -// Code used to generate __from_chars_log2f_lut. -#include -#include -#include - -int main() { - for (int i = 2; i <= 36; ++i) - std::cout << std::format("{},\n", log2f(i)); -} -*/ -/// log2f table for bases [2, 36]. -inline constexpr float __from_chars_log2f_lut[35] = { - 1, 1.5849625, 2, 2.321928, 2.5849626, 2.807355, 3, 3.169925, 3.321928, - 3.4594316, 3.5849626, 3.7004397, 3.807355, 3.9068906, 4, 4.087463, 4.169925, 4.2479277, - 4.321928, 4.3923173, 4.4594316, 4.523562, 4.5849624, 4.643856, 4.70044, 4.7548876, 4.807355, - 4.857981, 4.9068904, 4.9541965, 5, 5.044394, 5.087463, 5.129283, 5.169925}; - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__from_chars_integral(const char* __first, const char* __last, _Tp& __value, int __base) { - if (__base == 10) - return std::__from_chars_atoi(__first, __last, __value); - - return std::__subject_seq_combinator( - __first, - __last, - __value, - [](const char* __p, const char* __lastp, _Tp& __val, int __b) -> from_chars_result { - using __tl = numeric_limits<_Tp>; - // __base is always between 2 and 36 inclusive. - auto __digits = __tl::digits / __from_chars_log2f_lut[__b - 2]; - _Tp __x = __in_pattern(*__p++, __b).__val, __y = 0; - - for (int __i = 1; __p != __lastp; ++__i, ++__p) { - if (auto __c = __in_pattern(*__p, __b)) { - if (__i < __digits - 1) - __x = __x * __b + __c.__val; - else { - if (!__itoa::__mul_overflowed(__x, __b, __x)) - ++__p; - __y = __c.__val; - break; - } - } else - break; - } - - if (__p == __lastp || !__in_pattern(*__p, __b)) { - if (__tl::max() - __x >= __y) { - __val = __x + __y; - return {__p, {}}; - } - } - return {__p, errc::result_out_of_range}; - }, - __base); -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -__from_chars_integral(const char* __first, const char* __last, _Tp& __value, int __base) { - using __t = decltype(std::__to_unsigned_like(__value)); - return std::__sign_combinator(__first, __last, __value, __from_chars_integral<__t>, __base); -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -from_chars(const char* __first, const char* __last, _Tp& __value) { - return std::__from_chars_atoi(__first, __last, __value); -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI from_chars_result -from_chars(const char* __first, const char* __last, _Tp& __value, int __base) { - _LIBCPP_ASSERT_UNCATEGORIZED(2 <= __base && __base <= 36, "base not in [2, 36]"); - return std::__from_chars_integral(__first, __last, __value, __base); -} -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHARCONV_FROM_CHARS_INTEGRAL_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/from_chars_result.h b/third_party/libcxx/include/c++/v1/__charconv/from_chars_result.h deleted file mode 100644 index b4ecea3..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/from_chars_result.h +++ /dev/null @@ -1,39 +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___CHARCONV_FROM_CHARS_RESULT_H -#define _LIBCPP___CHARCONV_FROM_CHARS_RESULT_H - -#include <__config> -#include <__system_error/errc.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 - -struct from_chars_result { - const char* ptr; - errc ec; -# if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI friend bool operator==(const from_chars_result&, const from_chars_result&) = default; -# endif -# if _LIBCPP_STD_VER >= 26 - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return ec == errc{}; } -# endif -}; - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_FROM_CHARS_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/tables.h b/third_party/libcxx/include/c++/v1/__charconv/tables.h deleted file mode 100644 index b8c6fd8..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/tables.h +++ /dev/null @@ -1,159 +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___CHARCONV_TABLES -#define _LIBCPP___CHARCONV_TABLES - -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __itoa { - -inline _LIBCPP_CONSTEXPR const char __base_2_lut[64] = { - '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0', '0', '1', - '0', '1', '0', '1', '1', '0', '0', '1', '1', '1', '1', '0', '0', '0', '1', '0', '0', '1', '1', '0', '1', '0', - '1', '0', '1', '1', '1', '1', '0', '0', '1', '1', '0', '1', '1', '1', '1', '0', '1', '1', '1', '1'}; - -inline _LIBCPP_CONSTEXPR const char __base_8_lut[128] = { - '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '1', '0', '1', '1', '1', '2', - '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', - '2', '6', '2', '7', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '4', '0', - '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '5', '0', '5', '1', '5', '2', '5', '3', - '5', '4', '5', '5', '5', '6', '5', '7', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', - '6', '7', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7'}; - -inline _LIBCPP_CONSTEXPR const char __base_16_lut[512] = { - '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '0', 'a', '0', - 'b', '0', 'c', '0', 'd', '0', 'e', '0', 'f', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', - '1', '7', '1', '8', '1', '9', '1', 'a', '1', 'b', '1', 'c', '1', 'd', '1', 'e', '1', 'f', '2', '0', '2', '1', '2', - '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '2', 'a', '2', 'b', '2', 'c', '2', 'd', - '2', 'e', '2', 'f', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', - '9', '3', 'a', '3', 'b', '3', 'c', '3', 'd', '3', 'e', '3', 'f', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', - '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '4', 'a', '4', 'b', '4', 'c', '4', 'd', '4', 'e', '4', 'f', '5', - '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '5', 'a', '5', 'b', - '5', 'c', '5', 'd', '5', 'e', '5', 'f', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', - '7', '6', '8', '6', '9', '6', 'a', '6', 'b', '6', 'c', '6', 'd', '6', 'e', '6', 'f', '7', '0', '7', '1', '7', '2', - '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '7', 'a', '7', 'b', '7', 'c', '7', 'd', '7', - 'e', '7', 'f', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', - '8', 'a', '8', 'b', '8', 'c', '8', 'd', '8', 'e', '8', 'f', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', - '5', '9', '6', '9', '7', '9', '8', '9', '9', '9', 'a', '9', 'b', '9', 'c', '9', 'd', '9', 'e', '9', 'f', 'a', '0', - 'a', '1', 'a', '2', 'a', '3', 'a', '4', 'a', '5', 'a', '6', 'a', '7', 'a', '8', 'a', '9', 'a', 'a', 'a', 'b', 'a', - 'c', 'a', 'd', 'a', 'e', 'a', 'f', 'b', '0', 'b', '1', 'b', '2', 'b', '3', 'b', '4', 'b', '5', 'b', '6', 'b', '7', - 'b', '8', 'b', '9', 'b', 'a', 'b', 'b', 'b', 'c', 'b', 'd', 'b', 'e', 'b', 'f', 'c', '0', 'c', '1', 'c', '2', 'c', - '3', 'c', '4', 'c', '5', 'c', '6', 'c', '7', 'c', '8', 'c', '9', 'c', 'a', 'c', 'b', 'c', 'c', 'c', 'd', 'c', 'e', - 'c', 'f', 'd', '0', 'd', '1', 'd', '2', 'd', '3', 'd', '4', 'd', '5', 'd', '6', 'd', '7', 'd', '8', 'd', '9', 'd', - 'a', 'd', 'b', 'd', 'c', 'd', 'd', 'd', 'e', 'd', 'f', 'e', '0', 'e', '1', 'e', '2', 'e', '3', 'e', '4', 'e', '5', - 'e', '6', 'e', '7', 'e', '8', 'e', '9', 'e', 'a', 'e', 'b', 'e', 'c', 'e', 'd', 'e', 'e', 'e', 'f', 'f', '0', 'f', - '1', 'f', '2', 'f', '3', 'f', '4', 'f', '5', 'f', '6', 'f', '7', 'f', '8', 'f', '9', 'f', 'a', 'f', 'b', 'f', 'c', - 'f', 'd', 'f', 'e', 'f', 'f'}; - -inline _LIBCPP_CONSTEXPR const uint32_t __pow10_32[10] = { - UINT32_C(0), - UINT32_C(10), - UINT32_C(100), - UINT32_C(1000), - UINT32_C(10000), - UINT32_C(100000), - UINT32_C(1000000), - UINT32_C(10000000), - UINT32_C(100000000), - UINT32_C(1000000000)}; - -inline _LIBCPP_CONSTEXPR const uint64_t __pow10_64[20] = { - UINT64_C(0), - UINT64_C(10), - UINT64_C(100), - UINT64_C(1000), - UINT64_C(10000), - UINT64_C(100000), - UINT64_C(1000000), - UINT64_C(10000000), - UINT64_C(100000000), - UINT64_C(1000000000), - UINT64_C(10000000000), - UINT64_C(100000000000), - UINT64_C(1000000000000), - UINT64_C(10000000000000), - UINT64_C(100000000000000), - UINT64_C(1000000000000000), - UINT64_C(10000000000000000), - UINT64_C(100000000000000000), - UINT64_C(1000000000000000000), - UINT64_C(10000000000000000000)}; - -# if _LIBCPP_HAS_INT128 -inline _LIBCPP_CONSTEXPR const int __pow10_128_offset = 0; -inline _LIBCPP_CONSTEXPR const __uint128_t __pow10_128[40] = { - UINT64_C(0), - UINT64_C(10), - UINT64_C(100), - UINT64_C(1000), - UINT64_C(10000), - UINT64_C(100000), - UINT64_C(1000000), - UINT64_C(10000000), - UINT64_C(100000000), - UINT64_C(1000000000), - UINT64_C(10000000000), - UINT64_C(100000000000), - UINT64_C(1000000000000), - UINT64_C(10000000000000), - UINT64_C(100000000000000), - UINT64_C(1000000000000000), - UINT64_C(10000000000000000), - UINT64_C(100000000000000000), - UINT64_C(1000000000000000000), - UINT64_C(10000000000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(100000000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(1000000000000000000), - __uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000), - (__uint128_t(UINT64_C(10000000000000000000)) * UINT64_C(10000000000000000000)) * 10}; -# endif - -inline _LIBCPP_CONSTEXPR const char __digits_base_10[200] = { - // clang-format off - '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', - '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', - '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', - '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', - '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', - '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', - '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', - '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', - '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', - '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'}; -// clang-format on - -} // namespace __itoa - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_TABLES diff --git a/third_party/libcxx/include/c++/v1/__charconv/to_chars.h b/third_party/libcxx/include/c++/v1/__charconv/to_chars.h deleted file mode 100644 index 8ef09af..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/to_chars.h +++ /dev/null @@ -1,25 +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___CHARCONV_TO_CHARS -#define _LIBCPP___CHARCONV_TO_CHARS - -#include <__charconv/to_chars_floating_point.h> -#include <__charconv/to_chars_integral.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_TO_CHARS diff --git a/third_party/libcxx/include/c++/v1/__charconv/to_chars_base_10.h b/third_party/libcxx/include/c++/v1/__charconv/to_chars_base_10.h deleted file mode 100644 index d90952e..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/to_chars_base_10.h +++ /dev/null @@ -1,184 +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___CHARCONV_TO_CHARS_BASE_10_H -#define _LIBCPP___CHARCONV_TO_CHARS_BASE_10_H - -#include <__algorithm/copy_n.h> -#include <__assert> -#include <__charconv/tables.h> -#include <__config> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __itoa { - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append1(char* __first, uint32_t __value) _NOEXCEPT { - *__first = '0' + static_cast(__value); - return __first + 1; -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append2(char* __first, uint32_t __value) _NOEXCEPT { - return std::copy_n(&__digits_base_10[__value * 2], 2, __first); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append3(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append2(__itoa::__append1(__first, __value / 100), __value % 100); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append4(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append2(__itoa::__append2(__first, __value / 100), __value % 100); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append5(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append4(__itoa::__append1(__first, __value / 10000), __value % 10000); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append6(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append4(__itoa::__append2(__first, __value / 10000), __value % 10000); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append7(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append6(__itoa::__append1(__first, __value / 1000000), __value % 1000000); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append8(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append6(__itoa::__append2(__first, __value / 1000000), __value % 1000000); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* __append9(char* __first, uint32_t __value) _NOEXCEPT { - return __itoa::__append8(__itoa::__append1(__first, __value / 100000000), __value % 100000000); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI char* __append10(char* __first, _Tp __value) _NOEXCEPT { - return __itoa::__append8(__itoa::__append2(__first, static_cast(__value / 100000000)), - static_cast(__value % 100000000)); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* -__base_10_u32(char* __first, uint32_t __value) _NOEXCEPT { - if (__value < 1000000) { - if (__value < 10000) { - if (__value < 100) { - // 0 <= __value < 100 - if (__value < 10) - return __itoa::__append1(__first, __value); - return __itoa::__append2(__first, __value); - } - // 100 <= __value < 10'000 - if (__value < 1000) - return __itoa::__append3(__first, __value); - return __itoa::__append4(__first, __value); - } - - // 10'000 <= __value < 1'000'000 - if (__value < 100000) - return __itoa::__append5(__first, __value); - return __itoa::__append6(__first, __value); - } - - // __value => 1'000'000 - if (__value < 100000000) { - // 1'000'000 <= __value < 100'000'000 - if (__value < 10000000) - return __itoa::__append7(__first, __value); - return __itoa::__append8(__first, __value); - } - - // 100'000'000 <= __value < max - if (__value < 1000000000) - return __itoa::__append9(__first, __value); - return __itoa::__append10(__first, __value); -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* -__base_10_u64(char* __buffer, uint64_t __value) _NOEXCEPT { - if (__value <= UINT32_MAX) - return __itoa::__base_10_u32(__buffer, static_cast(__value)); - - // Numbers in the range UINT32_MAX <= val < 10'000'000'000 always contain 10 - // digits and are outputted after this if statement. - if (__value >= 10000000000) { - // This function properly deterimines the first non-zero leading digit. - __buffer = __itoa::__base_10_u32(__buffer, static_cast(__value / 10000000000)); - __value %= 10000000000; - } - return __itoa::__append10(__buffer, __value); -} - -# if _LIBCPP_HAS_INT128 -/// \returns 10^\a exp -/// -/// \pre \a exp [19, 39] -/// -/// \note The lookup table contains a partial set of exponents limiting the -/// range that can be used. However the range is sufficient for -/// \ref __base_10_u128. -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline __uint128_t __pow_10(int __exp) _NOEXCEPT { - _LIBCPP_ASSERT_INTERNAL(__exp >= __pow10_128_offset, "Index out of bounds"); - return __pow10_128[__exp - __pow10_128_offset]; -} - -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI inline char* -__base_10_u128(char* __buffer, __uint128_t __value) _NOEXCEPT { - _LIBCPP_ASSERT_INTERNAL( - __value > numeric_limits::max(), "The optimizations for this algorithm fails when this isn't true."); - - // Unlike the 64 to 32 bit case the 128 bit case the "upper half" can't be - // stored in the "lower half". Instead we first need to handle the top most - // digits separately. - // - // Maximum unsigned values - // 64 bit 18'446'744'073'709'551'615 (20 digits) - // 128 bit 340'282'366'920'938'463'463'374'607'431'768'211'455 (39 digits) - // step 1 ^ ([0-1] digits) - // step 2 ^^^^^^^^^^^^^^^^^^^^^^^^^ ([0-19] digits) - // step 3 ^^^^^^^^^^^^^^^^^^^^^^^^^ (19 digits) - if (__value >= __itoa::__pow_10(38)) { - // step 1 - __buffer = __itoa::__append1(__buffer, static_cast(__value / __itoa::__pow_10(38))); - __value %= __itoa::__pow_10(38); - - // step 2 always 19 digits. - // They are handled here since leading zeros need to be appended to the buffer, - __buffer = __itoa::__append9(__buffer, static_cast(__value / __itoa::__pow_10(29))); - __value %= __itoa::__pow_10(29); - __buffer = __itoa::__append10(__buffer, static_cast(__value / __itoa::__pow_10(19))); - __value %= __itoa::__pow_10(19); - } else { - // step 2 - // This version needs to determine the position of the leading non-zero digit. - __buffer = __base_10_u64(__buffer, static_cast(__value / __itoa::__pow_10(19))); - __value %= __itoa::__pow_10(19); - } - - // Step 3 - __buffer = __itoa::__append9(__buffer, static_cast(__value / 10000000000)); - __buffer = __itoa::__append10(__buffer, static_cast(__value % 10000000000)); - - return __buffer; -} -# endif -} // namespace __itoa - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHARCONV_TO_CHARS_BASE_10_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/to_chars_floating_point.h b/third_party/libcxx/include/c++/v1/__charconv/to_chars_floating_point.h deleted file mode 100644 index 118f316..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/to_chars_floating_point.h +++ /dev/null @@ -1,55 +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___CHARCONV_TO_CHARS_FLOATING_POINT_H -#define _LIBCPP___CHARCONV_TO_CHARS_FLOATING_POINT_H - -#include <__charconv/chars_format.h> -#include <__charconv/to_chars_result.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, float __value); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, double __value); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, long double __value); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, float __value, chars_format __fmt); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, double __value, chars_format __fmt); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, long double __value, chars_format __fmt); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, float __value, chars_format __fmt, int __precision); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, double __value, chars_format __fmt, int __precision); - -_LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_EXPORTED_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, long double __value, chars_format __fmt, int __precision); -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_TO_CHARS_FLOATING_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/to_chars_integral.h b/third_party/libcxx/include/c++/v1/__charconv/to_chars_integral.h deleted file mode 100644 index 6d42513..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/to_chars_integral.h +++ /dev/null @@ -1,344 +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___CHARCONV_TO_CHARS_INTEGRAL_H -#define _LIBCPP___CHARCONV_TO_CHARS_INTEGRAL_H - -#include <__algorithm/copy_n.h> -#include <__assert> -#include <__bit/countl.h> -#include <__charconv/tables.h> -#include <__charconv/to_chars_base_10.h> -#include <__charconv/to_chars_result.h> -#include <__charconv/traits.h> -#include <__config> -#include <__cstddef/ptrdiff_t.h> -#include <__system_error/errc.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/integral_constant.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_same.h> -#include <__type_traits/is_signed.h> -#include <__type_traits/make_32_64_or_128_bit.h> -#include <__type_traits/make_unsigned.h> -#include <__utility/unreachable.h> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_itoa(char* __first, char* __last, _Tp __value, false_type); - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_itoa(char* __first, char* __last, _Tp __value, true_type) { - auto __x = std::__to_unsigned_like(__value); - if (__value < 0 && __first != __last) { - *__first++ = '-'; - __x = std::__complement(__x); - } - - return std::__to_chars_itoa(__first, __last, __x, false_type()); -} - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_itoa(char* __first, char* __last, _Tp __value, false_type) { - using __tx = __itoa::__traits<_Tp>; - auto __diff = __last - __first; - - if (__tx::digits <= __diff || __tx::__width(__value) <= __diff) - return {__tx::__convert(__first, __value), errc(0)}; - else - return {__last, errc::value_too_large}; -} - -# if _LIBCPP_HAS_INT128 -template <> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_itoa(char* __first, char* __last, __uint128_t __value, false_type) { - // When the value fits in 64-bits use the 64-bit code path. This reduces - // the number of expensive calculations on 128-bit values. - // - // NOTE the 128-bit code path requires this optimization. - if (__value <= numeric_limits::max()) - return __to_chars_itoa(__first, __last, static_cast(__value), false_type()); - - using __tx = __itoa::__traits<__uint128_t>; - auto __diff = __last - __first; - - if (__tx::digits <= __diff || __tx::__width(__value) <= __diff) - return {__tx::__convert(__first, __value), errc(0)}; - else - return {__last, errc::value_too_large}; -} -# endif - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_integral(char* __first, char* __last, _Tp __value, int __base); - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_integral(char* __first, char* __last, _Tp __value, int __base) { - auto __x = std::__to_unsigned_like(__value); - if (__value < 0 && __first != __last) { - *__first++ = '-'; - __x = std::__complement(__x); - } - - return std::__to_chars_integral(__first, __last, __x, __base); -} - -namespace __itoa { - -template -struct _LIBCPP_HIDDEN __integral; - -template <> -struct _LIBCPP_HIDDEN __integral<2> { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR int __width(_Tp __value) _NOEXCEPT { - // If value == 0 still need one digit. If the value != this has no - // effect since the code scans for the most significant bit set. - return numeric_limits<_Tp>::digits - std::__countl_zero(__value | 1); - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI static __to_chars_result - __to_chars(char* __first, char* __last, _Tp __value) { - ptrdiff_t __cap = __last - __first; - int __n = __width(__value); - if (__n > __cap) - return {__last, errc::value_too_large}; - - __last = __first + __n; - char* __p = __last; - const unsigned __divisor = 16; - while (__value > __divisor) { - unsigned __c = __value % __divisor; - __value /= __divisor; - __p -= 4; - std::copy_n(&__base_2_lut[4 * __c], 4, __p); - } - do { - unsigned __c = __value % 2; - __value /= 2; - *--__p = "01"[__c]; - } while (__value != 0); - return {__last, errc(0)}; - } -}; - -template <> -struct _LIBCPP_HIDDEN __integral<8> { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR int __width(_Tp __value) _NOEXCEPT { - // If value == 0 still need one digit. If the value != this has no - // effect since the code scans for the most significat bit set. - return ((numeric_limits<_Tp>::digits - std::__countl_zero(__value | 1)) + 2) / 3; - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI static __to_chars_result - __to_chars(char* __first, char* __last, _Tp __value) { - ptrdiff_t __cap = __last - __first; - int __n = __width(__value); - if (__n > __cap) - return {__last, errc::value_too_large}; - - __last = __first + __n; - char* __p = __last; - unsigned __divisor = 64; - while (__value > __divisor) { - unsigned __c = __value % __divisor; - __value /= __divisor; - __p -= 2; - std::copy_n(&__base_8_lut[2 * __c], 2, __p); - } - do { - unsigned __c = __value % 8; - __value /= 8; - *--__p = "01234567"[__c]; - } while (__value != 0); - return {__last, errc(0)}; - } -}; - -template <> -struct _LIBCPP_HIDDEN __integral<16> { - template - _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR int __width(_Tp __value) _NOEXCEPT { - // If value == 0 still need one digit. If the value != this has no - // effect since the code scans for the most significat bit set. - return (numeric_limits<_Tp>::digits - std::__countl_zero(__value | 1) + 3) / 4; - } - - template - _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI static __to_chars_result - __to_chars(char* __first, char* __last, _Tp __value) { - ptrdiff_t __cap = __last - __first; - int __n = __width(__value); - if (__n > __cap) - return {__last, errc::value_too_large}; - - __last = __first + __n; - char* __p = __last; - unsigned __divisor = 256; - while (__value > __divisor) { - unsigned __c = __value % __divisor; - __value /= __divisor; - __p -= 2; - std::copy_n(&__base_16_lut[2 * __c], 2, __p); - } - if (__first != __last) - do { - unsigned __c = __value % 16; - __value /= 16; - *--__p = "0123456789abcdef"[__c]; - } while (__value != 0); - return {__last, errc(0)}; - } -}; - -} // namespace __itoa - -template = sizeof(unsigned)), int> = 0> -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __to_chars_integral_width(_Tp __value) { - return __itoa::__integral<_Base>::__width(__value); -} - -template = 0> -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __to_chars_integral_width(_Tp __value) { - return std::__to_chars_integral_width<_Base>(static_cast(__value)); -} - -template = sizeof(unsigned)), int> = 0> -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_integral(char* __first, char* __last, _Tp __value) { - return __itoa::__integral<_Base>::__to_chars(__first, __last, __value); -} - -template = 0> -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_integral(char* __first, char* __last, _Tp __value) { - return std::__to_chars_integral<_Base>(__first, __last, static_cast(__value)); -} - -template -_LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __to_chars_integral_width(_Tp __value, unsigned __base) { - _LIBCPP_ASSERT_INTERNAL(__value >= 0, "The function requires a non-negative value."); - - unsigned __base_2 = __base * __base; - unsigned __base_3 = __base_2 * __base; - unsigned __base_4 = __base_2 * __base_2; - - int __r = 0; - while (true) { - if (__value < __base) - return __r + 1; - if (__value < __base_2) - return __r + 2; - if (__value < __base_3) - return __r + 3; - if (__value < __base_4) - return __r + 4; - - __value /= __base_4; - __r += 4; - } - - __libcpp_unreachable(); -} - -template ::value, int> > -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI __to_chars_result -__to_chars_integral(char* __first, char* __last, _Tp __value, int __base) { - if (__base == 10) [[likely]] - return std::__to_chars_itoa(__first, __last, __value, false_type()); - - switch (__base) { - case 2: - return std::__to_chars_integral<2>(__first, __last, __value); - case 8: - return std::__to_chars_integral<8>(__first, __last, __value); - case 16: - return std::__to_chars_integral<16>(__first, __last, __value); - } - - ptrdiff_t __cap = __last - __first; - int __n = std::__to_chars_integral_width(__value, __base); - if (__n > __cap) - return {__last, errc::value_too_large}; - - __last = __first + __n; - char* __p = __last; - do { - unsigned __c = __value % __base; - __value /= __base; - *--__p = "0123456789abcdefghijklmnopqrstuvwxyz"[__c]; - } while (__value != 0); - return {__last, errc(0)}; -} - -_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR_SINCE_CXX14 char __hex_to_upper(char __c) { - switch (__c) { - case 'a': - return 'A'; - case 'b': - return 'B'; - case 'c': - return 'C'; - case 'd': - return 'D'; - case 'e': - return 'E'; - case 'f': - return 'F'; - } - return __c; -} - -#if _LIBCPP_STD_VER >= 17 - -to_chars_result to_chars(char*, char*, bool, int = 10) = delete; - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, _Tp __value) { - using _Type = __make_32_64_or_128_bit_t<_Tp>; - static_assert(!is_same<_Type, void>::value, "unsupported integral type used in to_chars"); - return std::__to_chars_itoa(__first, __last, static_cast<_Type>(__value), is_signed<_Tp>()); -} - -template ::value, int> = 0> -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI to_chars_result -to_chars(char* __first, char* __last, _Tp __value, int __base) { - _LIBCPP_ASSERT_UNCATEGORIZED(2 <= __base && __base <= 36, "base not in [2, 36]"); - - using _Type = __make_32_64_or_128_bit_t<_Tp>; - return std::__to_chars_integral(__first, __last, static_cast<_Type>(__value), __base); -} - -#endif // _LIBCPP_STD_VER >= 17 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHARCONV_TO_CHARS_INTEGRAL_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/to_chars_result.h b/third_party/libcxx/include/c++/v1/__charconv/to_chars_result.h deleted file mode 100644 index a3cd4e2..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/to_chars_result.h +++ /dev/null @@ -1,48 +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___CHARCONV_TO_CHARS_RESULT_H -#define _LIBCPP___CHARCONV_TO_CHARS_RESULT_H - -#include <__config> -#include <__system_error/errc.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 17 - -struct to_chars_result { - char* ptr; - errc ec; -# if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI friend bool operator==(const to_chars_result&, const to_chars_result&) = default; -# endif -# if _LIBCPP_STD_VER >= 26 - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return ec == errc{}; } -# endif -}; - -#endif // _LIBCPP_STD_VER >= 17 - -struct __to_chars_result { - char* __ptr; - errc __ec; - -#if _LIBCPP_STD_VER >= 17 - _LIBCPP_HIDE_FROM_ABI constexpr operator to_chars_result() { return {__ptr, __ec}; } -#endif -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHARCONV_TO_CHARS_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__charconv/traits.h b/third_party/libcxx/include/c++/v1/__charconv/traits.h deleted file mode 100644 index b8c840d..0000000 --- a/third_party/libcxx/include/c++/v1/__charconv/traits.h +++ /dev/null @@ -1,167 +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___CHARCONV_TRAITS -#define _LIBCPP___CHARCONV_TRAITS - -#include <__assert> -#include <__bit/countl.h> -#include <__charconv/tables.h> -#include <__charconv/to_chars_base_10.h> -#include <__config> -#include <__memory/addressof.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_unsigned.h> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __itoa { - -template -struct _LIBCPP_HIDDEN __traits_base; - -template -struct _LIBCPP_HIDDEN __traits_base<_Tp, __enable_if_t > { - using type = uint32_t; - - /// The width estimation using a log10 algorithm. - /// - /// The algorithm is based on - /// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 - /// Instead of using IntegerLogBase2 it uses __countl_zero. - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __width(_Tp __v) { - auto __t = (32 - std::__countl_zero(static_cast(__v | 1))) * 1233 >> 12; - return __t - (__v < __itoa::__pow10_32[__t]) + 1; - } - - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI char* __convert(char* __p, _Tp __v) { - return __itoa::__base_10_u32(__p, __v); - } - - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI decltype(__pow10_32)& __pow() { - return __itoa::__pow10_32; - } -}; - -template -struct _LIBCPP_HIDDEN __traits_base<_Tp, __enable_if_t > { - using type = uint64_t; - - /// The width estimation using a log10 algorithm. - /// - /// The algorithm is based on - /// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 - /// Instead of using IntegerLogBase2 it uses __countl_zero. - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __width(_Tp __v) { - auto __t = (64 - std::__countl_zero(static_cast(__v | 1))) * 1233 >> 12; - return __t - (__v < __itoa::__pow10_64[__t]) + 1; - } - - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI char* __convert(char* __p, _Tp __v) { - return __itoa::__base_10_u64(__p, __v); - } - - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI decltype(__pow10_64)& __pow() { - return __itoa::__pow10_64; - } -}; - -# if _LIBCPP_HAS_INT128 -template -struct _LIBCPP_HIDDEN __traits_base<_Tp, __enable_if_t > { - using type = __uint128_t; - - /// The width estimation using a log10 algorithm. - /// - /// The algorithm is based on - /// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog10 - /// Instead of using IntegerLogBase2 it uses __countl_zero. - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI int __width(_Tp __v) { - _LIBCPP_ASSERT_INTERNAL( - __v > numeric_limits::max(), "The optimizations for this algorithm fail when this isn't true."); - // There's always a bit set in the upper 64-bits. - auto __t = (128 - std::__countl_zero(static_cast(__v >> 64))) * 1233 >> 12; - _LIBCPP_ASSERT_INTERNAL(__t >= __itoa::__pow10_128_offset, "Index out of bounds"); - // __t is adjusted since the lookup table misses the lower entries. - return __t - (__v < __itoa::__pow10_128[__t - __itoa::__pow10_128_offset]) + 1; - } - - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI char* __convert(char* __p, _Tp __v) { - return __itoa::__base_10_u128(__p, __v); - } - - // TODO FMT This pow function should get an index. - // By moving this to its own header it can be reused by the pow function in to_chars_base_10. - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI decltype(__pow10_128)& __pow() { - return __itoa::__pow10_128; - } -}; -# endif - -template -_LIBCPP_HIDE_FROM_ABI bool _LIBCPP_CONSTEXPR_SINCE_CXX23 __mul_overflowed(_Tp __a, _Up __b, _Tp& __r) { - static_assert(is_unsigned<_Tp>::value); - return __builtin_mul_overflow(__a, static_cast<_Tp>(__b), std::addressof(__r)); -} - -template -struct _LIBCPP_HIDDEN __traits : __traits_base<_Tp> { - static _LIBCPP_CONSTEXPR const int digits = numeric_limits<_Tp>::digits10 + 1; - using __traits_base<_Tp>::__pow; - using typename __traits_base<_Tp>::type; - - // precondition: at least one non-zero character available - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI char const* - __read(char const* __p, char const* __ep, type& __a, type& __b) { - type __cprod[digits]; - int __j = digits - 1; - int __i = digits; - do { - if (*__p < '0' || *__p > '9') - break; - __cprod[--__i] = *__p++ - '0'; - } while (__p != __ep && __i != 0); - - __a = __inner_product(__cprod + __i + 1, __cprod + __j, __pow() + 1, __cprod[__i]); - if (__itoa::__mul_overflowed(__cprod[__j], __pow()[__j - __i], __b)) - --__p; - return __p; - } - - template - static _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI _Up - __inner_product(_It1 __first1, _It1 __last1, _It2 __first2, _Up __init) { - for (; __first1 < __last1; ++__first1, ++__first2) - __init = __init + *__first1 * *__first2; - return __init; - } -}; - -} // namespace __itoa - -template -inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI _Tp __complement(_Tp __x) { - static_assert(is_unsigned<_Tp>::value, "cast to unsigned first"); - return _Tp(~__x + 1); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHARCONV_TRAITS diff --git a/third_party/libcxx/include/c++/v1/__chrono/calendar.h b/third_party/libcxx/include/c++/v1/__chrono/calendar.h deleted file mode 100644 index bb1c5e7..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/calendar.h +++ /dev/null @@ -1,44 +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___CHRONO_CALENDAR_H -#define _LIBCPP___CHRONO_CALENDAR_H - -#include <__chrono/duration.h> -#include <__chrono/time_point.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -struct local_t {}; -template -using local_time = time_point; -using local_seconds = local_time; -using local_days = local_time; - -struct last_spec { - explicit last_spec() = default; -}; -inline constexpr last_spec last{}; - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_CALENDAR_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/concepts.h b/third_party/libcxx/include/c++/v1/__chrono/concepts.h deleted file mode 100644 index 61ec256..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/concepts.h +++ /dev/null @@ -1,36 +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___CHRONO_CONCEPTS_H -#define _LIBCPP___CHRONO_CONCEPTS_H - -#include <__chrono/hh_mm_ss.h> -#include <__chrono/time_point.h> -#include <__config> -#include <__type_traits/is_specialization.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template -concept __is_hh_mm_ss = __is_specialization_v<_Tp, chrono::hh_mm_ss>; - -template -concept __is_time_point = __is_specialization_v<_Tp, chrono::time_point>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHRONO_CONCEPTS_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/convert_to_timespec.h b/third_party/libcxx/include/c++/v1/__chrono/convert_to_timespec.h deleted file mode 100644 index 11e0b82..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/convert_to_timespec.h +++ /dev/null @@ -1,51 +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___CHRONO_CONVERT_TO_TIMESPEC_H -#define _LIBCPP___CHRONO_CONVERT_TO_TIMESPEC_H - -#include <__chrono/duration.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Convert a nanoseconds duration to the given TimeSpec type, which must have -// the same properties as std::timespec. -template -_LIBCPP_HIDE_FROM_ABI inline _TimeSpec __convert_to_timespec(const chrono::nanoseconds& __ns) { - using namespace chrono; - seconds __s = duration_cast(__ns); - _TimeSpec __ts; - typedef decltype(__ts.tv_sec) __ts_sec; - const __ts_sec __ts_sec_max = numeric_limits<__ts_sec>::max(); - - if (__s.count() < __ts_sec_max) { - __ts.tv_sec = static_cast<__ts_sec>(__s.count()); - __ts.tv_nsec = static_cast((__ns - __s).count()); - } else { - __ts.tv_sec = __ts_sec_max; - __ts.tv_nsec = 999999999; // (10^9 - 1) - } - - return __ts; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHRONO_CONVERT_TO_TIMESPEC_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/convert_to_tm.h b/third_party/libcxx/include/c++/v1/__chrono/convert_to_tm.h deleted file mode 100644 index 16e1415..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/convert_to_tm.h +++ /dev/null @@ -1,241 +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___CHRONO_CONVERT_TO_TM_H -#define _LIBCPP___CHRONO_CONVERT_TO_TM_H - -#include <__chrono/calendar.h> -#include <__chrono/concepts.h> -#include <__chrono/day.h> -#include <__chrono/duration.h> -#include <__chrono/file_clock.h> -#include <__chrono/gps_clock.h> -#include <__chrono/hh_mm_ss.h> -#include <__chrono/local_info.h> -#include <__chrono/month.h> -#include <__chrono/month_weekday.h> -#include <__chrono/monthday.h> -#include <__chrono/statically_widen.h> -#include <__chrono/sys_info.h> -#include <__chrono/system_clock.h> -#include <__chrono/tai_clock.h> -#include <__chrono/time_point.h> -#include <__chrono/utc_clock.h> -#include <__chrono/weekday.h> -#include <__chrono/year.h> -#include <__chrono/year_month.h> -#include <__chrono/year_month_day.h> -#include <__chrono/year_month_weekday.h> -#include <__chrono/zoned_time.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__format/format_error.h> -#include <__memory/addressof.h> -#include <__type_traits/common_type.h> -#include <__type_traits/is_convertible.h> -#include <__type_traits/is_specialization.h> -#include -#include -#include - -#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 - -// Conerts a chrono date and weekday to a given _Tm type. -// -// This is an implementation detail for the function -// template -// _Tm __convert_to_tm(const _ChronoT& __value) -// -// This manually converts the two values to the proper type. It is possible to -// convert from sys_days to time_t and then to _Tm. But this leads to the Y2K -// bug when time_t is a 32-bit signed integer. Chrono considers years beyond -// the year 2038 valid, so instead do the transformation manually. -template - requires(same_as<_Date, chrono::year_month_day> || same_as<_Date, chrono::year_month_day_last>) -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(const _Date& __date, chrono::weekday __weekday) { - _Tm __result = {}; -# ifdef __GLIBC__ - __result.tm_zone = "UTC"; -# endif - __result.tm_year = static_cast(__date.year()) - 1900; - __result.tm_mon = static_cast(__date.month()) - 1; - __result.tm_mday = static_cast(__date.day()); - __result.tm_wday = static_cast(__weekday.c_encoding()); - __result.tm_yday = - (static_cast(__date) - - static_cast(chrono::year_month_day{__date.year(), chrono::January, chrono::day{1}})) - .count(); - - return __result; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(const chrono::sys_time<_Duration> __tp) { - chrono::sys_days __days = chrono::floor(__tp); - chrono::year_month_day __ymd{__days}; - - _Tm __result = std::__convert_to_tm<_Tm>(chrono::year_month_day{__ymd}, chrono::weekday{__days}); - - uint64_t __sec = - chrono::duration_cast(__tp - chrono::time_point_cast(__days)).count(); - __sec %= 24 * 3600; - __result.tm_hour = __sec / 3600; - __sec %= 3600; - __result.tm_min = __sec / 60; - __result.tm_sec = __sec % 60; - - return __result; -} - -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -template -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(chrono::utc_time<_Duration> __tp) { - _Tm __result = std::__convert_to_tm<_Tm>(chrono::utc_clock::to_sys(__tp)); - - if (chrono::get_leap_second_info(__tp).is_leap_second) - ++__result.tm_sec; - - return __result; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(chrono::tai_time<_Duration> __tp) { - using _Rp = common_type_t<_Duration, chrono::seconds>; - // The time between the TAI epoch (1958-01-01) and UNIX epoch (1970-01-01). - // This avoids leap second conversion when going from TAI to UTC. - // (It also avoids issues when the date is before the UTC epoch.) - constexpr chrono::seconds __offset{4383 * 24 * 60 * 60}; - return std::__convert_to_tm<_Tm>(chrono::sys_time<_Rp>{__tp.time_since_epoch() - __offset}); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(chrono::gps_time<_Duration> __tp) { - using _Rp = common_type_t<_Duration, chrono::seconds>; - // The time between the GPS epoch (1980-01-06) and UNIX epoch (1970-01-01). - constexpr chrono::seconds __offset{3657 * 24 * 60 * 60}; - return std::__convert_to_tm<_Tm>(chrono::sys_time<_Rp>{__tp.time_since_epoch() + __offset}); -} - -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB -# endif // _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -// Convert a chrono (calendar) time point, or dururation to the given _Tm type, -// which must have the same properties as std::tm. -template -_LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(const _ChronoT& __value) { - _Tm __result = {}; -# ifdef __GLIBC__ - __result.tm_zone = "UTC"; -# endif - - if constexpr (__is_time_point<_ChronoT>) { - if constexpr (same_as) - return std::__convert_to_tm<_Tm>(_ChronoT::clock::to_sys(__value)); - else if constexpr (same_as) - return std::__convert_to_tm<_Tm>(chrono::sys_time{__value.time_since_epoch()}); - else { - // Note that some clocks have specializations __convert_to_tm for their - // time_point. These don't need to be added here. They do not trigger - // this assert. - static_assert(sizeof(_ChronoT) == 0, "TODO: Add the missing clock specialization"); - } - } else if constexpr (chrono::__is_duration_v<_ChronoT>) { - // [time.format]/6 - // ... However, if a flag refers to a "time of day" (e.g. %H, %I, %p, - // etc.), then a specialization of duration is interpreted as the time of - // day elapsed since midnight. - - // Not all values can be converted to hours, it may run into ratio - // conversion errors. In that case the conversion to seconds works. - if constexpr (is_convertible_v<_ChronoT, chrono::hours>) { - auto __hour = chrono::floor(__value); - auto __sec = chrono::duration_cast(__value - __hour); - __result.tm_hour = __hour.count() % 24; - __result.tm_min = __sec.count() / 60; - __result.tm_sec = __sec.count() % 60; - } else { - uint64_t __sec = chrono::duration_cast(__value).count(); - __sec %= 24 * 3600; - __result.tm_hour = __sec / 3600; - __sec %= 3600; - __result.tm_min = __sec / 60; - __result.tm_sec = __sec % 60; - } - } else if constexpr (same_as<_ChronoT, chrono::day>) - __result.tm_mday = static_cast(__value); - else if constexpr (same_as<_ChronoT, chrono::month>) - __result.tm_mon = static_cast(__value) - 1; - else if constexpr (same_as<_ChronoT, chrono::year>) - __result.tm_year = static_cast(__value) - 1900; - else if constexpr (same_as<_ChronoT, chrono::weekday>) - __result.tm_wday = __value.c_encoding(); - else if constexpr (same_as<_ChronoT, chrono::weekday_indexed> || same_as<_ChronoT, chrono::weekday_last>) - __result.tm_wday = __value.weekday().c_encoding(); - else if constexpr (same_as<_ChronoT, chrono::month_day>) { - __result.tm_mday = static_cast(__value.day()); - __result.tm_mon = static_cast(__value.month()) - 1; - } else if constexpr (same_as<_ChronoT, chrono::month_day_last>) { - __result.tm_mon = static_cast(__value.month()) - 1; - } else if constexpr (same_as<_ChronoT, chrono::month_weekday> || same_as<_ChronoT, chrono::month_weekday_last>) { - __result.tm_wday = __value.weekday_indexed().weekday().c_encoding(); - __result.tm_mon = static_cast(__value.month()) - 1; - } else if constexpr (same_as<_ChronoT, chrono::year_month>) { - __result.tm_year = static_cast(__value.year()) - 1900; - __result.tm_mon = static_cast(__value.month()) - 1; - } else if constexpr (same_as<_ChronoT, chrono::year_month_day> || same_as<_ChronoT, chrono::year_month_day_last>) { - return std::__convert_to_tm<_Tm>( - chrono::year_month_day{__value}, chrono::weekday{static_cast(__value)}); - } else if constexpr (same_as<_ChronoT, chrono::year_month_weekday> || - same_as<_ChronoT, chrono::year_month_weekday_last>) { - return std::__convert_to_tm<_Tm>(chrono::year_month_day{static_cast(__value)}, __value.weekday()); - } else if constexpr (__is_hh_mm_ss<_ChronoT>) { - __result.tm_sec = __value.seconds().count(); - __result.tm_min = __value.minutes().count(); - // In libc++ hours is stored as a long. The type in std::tm is an int. So - // the overflow can only occur when hour uses more bits than an int - // provides. - if constexpr (sizeof(std::chrono::hours::rep) > sizeof(__result.tm_hour)) - if (__value.hours().count() > std::numeric_limits::max()) - std::__throw_format_error("Formatting hh_mm_ss, encountered an hour overflow"); - __result.tm_hour = __value.hours().count(); -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - } else if constexpr (same_as<_ChronoT, chrono::sys_info>) { - // Has no time information. - } else if constexpr (same_as<_ChronoT, chrono::local_info>) { - // Has no time information. -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - } else if constexpr (__is_specialization_v<_ChronoT, chrono::zoned_time>) { - return std::__convert_to_tm<_Tm>( - chrono::sys_time{__value.get_local_time().time_since_epoch()}); -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - } else - static_assert(sizeof(_ChronoT) == 0, "Add the missing type specialization"); - - return __result; -} - -#endif // if _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHRONO_CONVERT_TO_TM_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/day.h b/third_party/libcxx/include/c++/v1/__chrono/day.h deleted file mode 100644 index 58fdc72..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/day.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___CHRONO_DAY_H -#define _LIBCPP___CHRONO_DAY_H - -#include <__chrono/duration.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class day { -private: - unsigned char __d_; - -public: - day() = default; - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr day(unsigned __val) noexcept - : __d_(static_cast(__val)) {} - _LIBCPP_HIDE_FROM_ABI inline constexpr day& operator++() noexcept { - ++__d_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr day operator++(int) noexcept { - day __tmp = *this; - ++(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr day& operator--() noexcept { - --__d_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr day operator--(int) noexcept { - day __tmp = *this; - --(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI constexpr day& operator+=(const days& __dd) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr day& operator-=(const days& __dd) noexcept; - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr operator unsigned() const noexcept { return __d_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __d_ >= 1 && __d_ <= 31; } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const day& __lhs, const day& __rhs) noexcept { - return static_cast(__lhs) == static_cast(__rhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(const day& __lhs, const day& __rhs) noexcept { - return static_cast(__lhs) <=> static_cast(__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const day& __lhs, const days& __rhs) noexcept { - return day(static_cast(__lhs) + __rhs.count()); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const days& __lhs, const day& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator-(const day& __lhs, const days& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr days operator-(const day& __lhs, const day& __rhs) noexcept { - return days(static_cast(static_cast(__lhs)) - static_cast(static_cast(__rhs))); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr day& day::operator+=(const days& __dd) noexcept { - *this = *this + __dd; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr day& day::operator-=(const days& __dd) noexcept { - *this = *this - __dd; - return *this; -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::day& __d) noexcept { - return static_cast(__d); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_DAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/duration.h b/third_party/libcxx/include/c++/v1/__chrono/duration.h deleted file mode 100644 index b7762bd..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/duration.h +++ /dev/null @@ -1,570 +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___CHRONO_DURATION_H -#define _LIBCPP___CHRONO_DURATION_H - -#include <__compare/ordering.h> -#include <__compare/three_way_comparable.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_convertible.h> -#include <__type_traits/is_floating_point.h> -#include -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -template > -class duration; - -template -inline const bool __is_duration_v = false; - -template -inline const bool __is_duration_v > = true; - -template -inline const bool __is_duration_v > = true; - -template -inline const bool __is_duration_v > = true; - -template -inline const bool __is_duration_v > = true; - -} // namespace chrono - -template -struct common_type, chrono::duration<_Rep2, _Period2> > { - typedef chrono::duration::type, __ratio_gcd<_Period1, _Period2> > type; -}; - -namespace chrono { - -// duration_cast - -template ::type, - bool = _Period::num == 1, - bool = _Period::den == 1> -struct __duration_cast; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, true, true> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration operator()(const _FromDuration& __fd) const { - return _ToDuration(static_cast(__fd.count())); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, true, false> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration( - static_cast(static_cast<_Ct>(__fd.count()) / static_cast<_Ct>(_Period::den))); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, false, true> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration( - static_cast(static_cast<_Ct>(__fd.count()) * static_cast<_Ct>(_Period::num))); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, false, false> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration(static_cast( - static_cast<_Ct>(__fd.count()) * static_cast<_Ct>(_Period::num) / static_cast<_Ct>(_Period::den))); - } -}; - -template , int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration -duration_cast(const duration<_Rep, _Period>& __fd) { - return __duration_cast, _ToDuration>()(__fd); -} - -template -struct treat_as_floating_point : is_floating_point<_Rep> {}; - -#if _LIBCPP_STD_VER >= 17 -template -inline constexpr bool treat_as_floating_point_v = treat_as_floating_point<_Rep>::value; -#endif - -template -struct duration_values { -public: - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR _Rep zero() _NOEXCEPT { return _Rep(0); } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR _Rep max() _NOEXCEPT { - return numeric_limits<_Rep>::max(); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR _Rep min() _NOEXCEPT { - return numeric_limits<_Rep>::lowest(); - } -}; - -#if _LIBCPP_STD_VER >= 17 -template , int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration floor(const duration<_Rep, _Period>& __d) { - _ToDuration __t = chrono::duration_cast<_ToDuration>(__d); - if (__t > __d) - __t = __t - _ToDuration{1}; - return __t; -} - -template , int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration ceil(const duration<_Rep, _Period>& __d) { - _ToDuration __t = chrono::duration_cast<_ToDuration>(__d); - if (__t < __d) - __t = __t + _ToDuration{1}; - return __t; -} - -template , int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration round(const duration<_Rep, _Period>& __d) { - _ToDuration __lower = chrono::floor<_ToDuration>(__d); - _ToDuration __upper = __lower + _ToDuration{1}; - auto __lower_diff = __d - __lower; - auto __upper_diff = __upper - __d; - if (__lower_diff < __upper_diff) - return __lower; - if (__lower_diff > __upper_diff) - return __upper; - return __lower.count() & 1 ? __upper : __lower; -} -#endif - -// duration - -template -class duration { - static_assert(!__is_duration_v<_Rep>, "A duration representation can not be a duration"); - static_assert(__is_ratio_v<_Period>, "Second template parameter of duration must be a std::ratio"); - static_assert(_Period::num > 0, "duration period must be positive"); - - template - struct __no_overflow { - private: - static const intmax_t __gcd_n1_n2 = __static_gcd<_R1::num, _R2::num>; - static const intmax_t __gcd_d1_d2 = __static_gcd<_R1::den, _R2::den>; - static const intmax_t __n1 = _R1::num / __gcd_n1_n2; - static const intmax_t __d1 = _R1::den / __gcd_d1_d2; - static const intmax_t __n2 = _R2::num / __gcd_n1_n2; - static const intmax_t __d2 = _R2::den / __gcd_d1_d2; - static const intmax_t max = -((intmax_t(1) << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1); - - template - struct __mul // __overflow == false - { - static const intmax_t value = _Xp * _Yp; - }; - - template - struct __mul<_Xp, _Yp, true> { - static const intmax_t value = 1; - }; - - public: - static const bool value = (__n1 <= max / __d2) && (__n2 <= max / __d1); - typedef ratio<__mul<__n1, __d2, !value>::value, __mul<__n2, __d1, !value>::value> type; - }; - -public: - typedef _Rep rep; - typedef typename _Period::type period; - -private: - rep __rep_; - -public: -#ifndef _LIBCPP_CXX03_LANG - constexpr duration() = default; -#else - _LIBCPP_HIDE_FROM_ABI duration() {} -#endif - - template ::value && - (treat_as_floating_point::value || !treat_as_floating_point<_Rep2>::value), - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR explicit duration(const _Rep2& __r) : __rep_(__r) {} - - // conversions - template ::value && (treat_as_floating_point::value || - (__no_overflow<_Period2, period>::type::den == 1 && - !treat_as_floating_point<_Rep2>::value)), - int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR duration(const duration<_Rep2, _Period2>& __d) - : __rep_(chrono::duration_cast(__d).count()) {} - - // observer - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR rep count() const { return __rep_; } - - // arithmetic - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR typename common_type::type operator+() const { - return typename common_type::type(*this); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR typename common_type::type operator-() const { - return typename common_type::type(-__rep_); - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator++() { - ++__rep_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration operator++(int) { return duration(__rep_++); } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator--() { - --__rep_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration operator--(int) { return duration(__rep_--); } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator+=(const duration& __d) { - __rep_ += __d.count(); - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator-=(const duration& __d) { - __rep_ -= __d.count(); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator*=(const rep& __rhs) { - __rep_ *= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator/=(const rep& __rhs) { - __rep_ /= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator%=(const rep& __rhs) { - __rep_ %= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 duration& operator%=(const duration& __rhs) { - __rep_ %= __rhs.count(); - return *this; - } - - // special values - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR duration zero() _NOEXCEPT { - return duration(duration_values::zero()); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR duration min() _NOEXCEPT { - return duration(duration_values::min()); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR duration max() _NOEXCEPT { - return duration(duration_values::max()); - } -}; - -typedef duration nanoseconds; -typedef duration microseconds; -typedef duration milliseconds; -typedef duration seconds; -typedef duration > minutes; -typedef duration > hours; -#if _LIBCPP_STD_VER >= 20 -typedef duration> days; -typedef duration> weeks; -typedef duration(365.2425 * 60 * 60 * 24)>> years; -typedef duration(365.2425 * 60 * 60 * 24) / 12>> months; -#endif -// Duration == - -template -struct __duration_eq { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool operator()(const _LhsDuration& __lhs, const _RhsDuration& __rhs) const { - typedef typename common_type<_LhsDuration, _RhsDuration>::type _Ct; - return _Ct(__lhs).count() == _Ct(__rhs).count(); - } -}; - -template -struct __duration_eq<_LhsDuration, _LhsDuration> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool operator()(const _LhsDuration& __lhs, const _LhsDuration& __rhs) const { - return __lhs.count() == __rhs.count(); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator==(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __duration_eq, duration<_Rep2, _Period2> >()(__lhs, __rhs); -} - -#if _LIBCPP_STD_VER <= 17 - -// Duration != - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator!=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__lhs == __rhs); -} - -#endif // _LIBCPP_STD_VER <= 17 - -// Duration < - -template -struct __duration_lt { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool operator()(const _LhsDuration& __lhs, const _RhsDuration& __rhs) const { - typedef typename common_type<_LhsDuration, _RhsDuration>::type _Ct; - return _Ct(__lhs).count() < _Ct(__rhs).count(); - } -}; - -template -struct __duration_lt<_LhsDuration, _LhsDuration> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool operator()(const _LhsDuration& __lhs, const _LhsDuration& __rhs) const { - return __lhs.count() < __rhs.count(); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator<(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __duration_lt, duration<_Rep2, _Period2> >()(__lhs, __rhs); -} - -// Duration > - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator>(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __rhs < __lhs; -} - -// Duration <= - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator<=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__rhs < __lhs); -} - -// Duration >= - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool -operator>=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__lhs < __rhs); -} - -#if _LIBCPP_STD_VER >= 20 - -template - requires three_way_comparable> -_LIBCPP_HIDE_FROM_ABI constexpr auto -operator<=>(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - using _Ct = common_type_t, duration<_Rep2, _Period2>>; - return _Ct(__lhs).count() <=> _Ct(__rhs).count(); -} - -#endif // _LIBCPP_STD_VER >= 20 - -// Duration + - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR -typename common_type, duration<_Rep2, _Period2> >::type -operator+(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(_Cd(__lhs).count() + _Cd(__rhs).count()); -} - -// Duration - - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR -typename common_type, duration<_Rep2, _Period2> >::type -operator-(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(_Cd(__lhs).count() - _Cd(__rhs).count()); -} - -// Duration * - -template ::type>::value, int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR duration::type, _Period> -operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() * static_cast<_Cr>(__s)); -} - -template ::type>::value, int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR duration::type, _Period> -operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) { - return __d * __s; -} - -// Duration / - -template && - is_convertible::type>::value, - int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR duration::type, _Period> -operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() / static_cast<_Cr>(__s)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR typename common_type<_Rep1, _Rep2>::type -operator/(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Ct; - return _Ct(__lhs).count() / _Ct(__rhs).count(); -} - -// Duration % - -template && - is_convertible::type>::value, - int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR duration::type, _Period> -operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() % static_cast<_Cr>(__s)); -} - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR -typename common_type, duration<_Rep2, _Period2> >::type -operator%(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(static_cast<_Cr>(_Cd(__lhs).count()) % static_cast<_Cr>(_Cd(__rhs).count())); -} - -} // namespace chrono - -#if _LIBCPP_STD_VER >= 14 -// Suffixes for duration literals [time.duration.literals] -inline namespace literals { -inline namespace chrono_literals { - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::hours operator""h(unsigned long long __h) { - return chrono::hours(static_cast(__h)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration> -operator""h(long double __h) { - return chrono::duration>(__h); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::minutes operator""min(unsigned long long __m) { - return chrono::minutes(static_cast(__m)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration> -operator""min(long double __m) { - return chrono::duration>(__m); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::seconds operator""s(unsigned long long __s) { - return chrono::seconds(static_cast(__s)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration operator""s(long double __s) { - return chrono::duration(__s); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::milliseconds operator""ms(unsigned long long __ms) { - return chrono::milliseconds(static_cast(__ms)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration operator""ms(long double __ms) { - return chrono::duration(__ms); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::microseconds operator""us(unsigned long long __us) { - return chrono::microseconds(static_cast(__us)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration operator""us(long double __us) { - return chrono::duration(__us); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::nanoseconds operator""ns(unsigned long long __ns) { - return chrono::nanoseconds(static_cast(__ns)); -} - -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::duration operator""ns(long double __ns) { - return chrono::duration(__ns); -} - -} // namespace chrono_literals -} // namespace literals - -namespace chrono { // hoist the literals into namespace std::chrono -using namespace literals::chrono_literals; -} // namespace chrono - -#endif // _LIBCPP_STD_VER >= 14 - -#if _LIBCPP_STD_VER >= 26 - -template - requires __has_enabled_hash<_Rep>::value -struct hash> { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::duration<_Rep, _Period>& __d) { - return hash<_Rep>{}(__d.count()); - } -}; - -#endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHRONO_DURATION_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/exception.h b/third_party/libcxx/include/c++/v1/__chrono/exception.h deleted file mode 100644 index 1eb5b1b..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/exception.h +++ /dev/null @@ -1,135 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_EXCEPTION_H -#define _LIBCPP___CHRONO_EXCEPTION_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/calendar.h> -# include <__chrono/local_info.h> -# include <__chrono/time_point.h> -# include <__config> -# include <__configuration/availability.h> -# include <__verbose_abort> -# include -# include -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace chrono { - -class nonexistent_local_time : public runtime_error { -public: - template - _LIBCPP_HIDE_FROM_ABI nonexistent_local_time(const local_time<_Duration>& __time, const local_info& __info) - : runtime_error{__create_message(__time, __info)} { - // [time.zone.exception.nonexist]/2 - // Preconditions: i.result == local_info::nonexistent is true. - // The value of __info.result is not used. - _LIBCPP_ASSERT_PEDANTIC(__info.result == local_info::nonexistent, - "creating an nonexistent_local_time from a local_info that is not non-existent"); - } - - _LIBCPP_HIDE_FROM_ABI nonexistent_local_time(const nonexistent_local_time&) = default; - _LIBCPP_HIDE_FROM_ABI nonexistent_local_time& operator=(const nonexistent_local_time&) = default; - - _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI ~nonexistent_local_time() override; // exported as key function - -private: - template - _LIBCPP_HIDE_FROM_ABI string __create_message(const local_time<_Duration>& __time, const local_info& __info) { - return std::format( - R"({} is in a gap between -{} {} and -{} {} which are both equivalent to -{} UTC)", - __time, - local_seconds{__info.first.end.time_since_epoch()} + __info.first.offset, - __info.first.abbrev, - local_seconds{__info.second.begin.time_since_epoch()} + __info.second.offset, - __info.second.abbrev, - __info.first.end); - } -}; - -template -[[noreturn]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI void __throw_nonexistent_local_time( - [[maybe_unused]] const local_time<_Duration>& __time, [[maybe_unused]] const local_info& __info) { -# if _LIBCPP_HAS_EXCEPTIONS - throw nonexistent_local_time(__time, __info); -# else - _LIBCPP_VERBOSE_ABORT("nonexistent_local_time was thrown in -fno-exceptions mode"); -# endif -} - -class ambiguous_local_time : public runtime_error { -public: - template - _LIBCPP_HIDE_FROM_ABI ambiguous_local_time(const local_time<_Duration>& __time, const local_info& __info) - : runtime_error{__create_message(__time, __info)} { - // [time.zone.exception.ambig]/2 - // Preconditions: i.result == local_info::ambiguous is true. - // The value of __info.result is not used. - _LIBCPP_ASSERT_PEDANTIC(__info.result == local_info::ambiguous, - "creating an ambiguous_local_time from a local_info that is not ambiguous"); - } - - _LIBCPP_HIDE_FROM_ABI ambiguous_local_time(const ambiguous_local_time&) = default; - _LIBCPP_HIDE_FROM_ABI ambiguous_local_time& operator=(const ambiguous_local_time&) = default; - - _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI ~ambiguous_local_time() override; // exported as key function - -private: - template - _LIBCPP_HIDE_FROM_ABI string __create_message(const local_time<_Duration>& __time, const local_info& __info) { - return std::format( - // There are two spaces after the full-stop; this has been verified - // in the sources of the Standard. - R"({0} is ambiguous. It could be -{0} {1} == {2} UTC or -{0} {3} == {4} UTC)", - __time, - __info.first.abbrev, - __time - __info.first.offset, - __info.second.abbrev, - __time - __info.second.offset); - } -}; - -template -[[noreturn]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI void __throw_ambiguous_local_time( - [[maybe_unused]] const local_time<_Duration>& __time, [[maybe_unused]] const local_info& __info) { -# if _LIBCPP_HAS_EXCEPTIONS - throw ambiguous_local_time(__time, __info); -# else - _LIBCPP_VERBOSE_ABORT("ambiguous_local_time was thrown in -fno-exceptions mode"); -# endif -} - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_EXCEPTION_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/file_clock.h b/third_party/libcxx/include/c++/v1/__chrono/file_clock.h deleted file mode 100644 index 968f652..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/file_clock.h +++ /dev/null @@ -1,82 +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___CHRONO_FILE_CLOCK_H -#define _LIBCPP___CHRONO_FILE_CLOCK_H - -#include <__chrono/duration.h> -#include <__chrono/system_clock.h> -#include <__chrono/time_point.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#ifndef _LIBCPP_CXX03_LANG -_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM -struct _FilesystemClock; -_LIBCPP_END_NAMESPACE_FILESYSTEM -#endif // !_LIBCPP_CXX03_LANG - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -// [time.clock.file], type file_clock -using file_clock = filesystem::_FilesystemClock; - -template -using file_time = time_point; - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#ifndef _LIBCPP_CXX03_LANG -_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM -struct _FilesystemClock { -# if _LIBCPP_HAS_INT128 - typedef __int128_t rep; - typedef nano period; -# else - typedef long long rep; - typedef nano period; -# endif - - typedef chrono::duration duration; - typedef chrono::time_point<_FilesystemClock> time_point; - - _LIBCPP_EXPORTED_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 const bool is_steady = false; - - [[__nodiscard__]] _LIBCPP_EXPORTED_FROM_ABI static time_point now() noexcept; - -# if _LIBCPP_STD_VER >= 20 - template - [[nodiscard]] - _LIBCPP_HIDE_FROM_ABI static chrono::sys_time<_Duration> to_sys(const chrono::file_time<_Duration>& __t) { - return chrono::sys_time<_Duration>(__t.time_since_epoch()); - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static chrono::file_time<_Duration> - from_sys(const chrono::sys_time<_Duration>& __t) { - return chrono::file_time<_Duration>(__t.time_since_epoch()); - } -# endif // _LIBCPP_STD_VER >= 20 -}; -_LIBCPP_END_NAMESPACE_FILESYSTEM -#endif // !_LIBCPP_CXX03_LANG - -#endif // _LIBCPP___CHRONO_FILE_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/formatter.h b/third_party/libcxx/include/c++/v1/__chrono/formatter.h deleted file mode 100644 index 4975839..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/formatter.h +++ /dev/null @@ -1,1035 +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___CHRONO_FORMATTER_H -#define _LIBCPP___CHRONO_FORMATTER_H - -#include <__config> - -#if _LIBCPP_HAS_LOCALIZATION - -# include <__algorithm/ranges_copy.h> -# include <__chrono/calendar.h> -# include <__chrono/concepts.h> -# include <__chrono/convert_to_tm.h> -# include <__chrono/day.h> -# include <__chrono/duration.h> -# include <__chrono/file_clock.h> -# include <__chrono/gps_clock.h> -# include <__chrono/hh_mm_ss.h> -# include <__chrono/local_info.h> -# include <__chrono/month.h> -# include <__chrono/month_weekday.h> -# include <__chrono/monthday.h> -# include <__chrono/ostream.h> -# include <__chrono/parser_std_format_spec.h> -# include <__chrono/statically_widen.h> -# include <__chrono/sys_info.h> -# include <__chrono/system_clock.h> -# include <__chrono/tai_clock.h> -# include <__chrono/time_point.h> -# include <__chrono/utc_clock.h> -# include <__chrono/weekday.h> -# include <__chrono/year.h> -# include <__chrono/year_month.h> -# include <__chrono/year_month_day.h> -# include <__chrono/year_month_weekday.h> -# include <__chrono/zoned_time.h> -# include <__concepts/arithmetic.h> -# include <__concepts/same_as.h> -# include <__format/concepts.h> -# include <__format/format_error.h> -# include <__format/format_functions.h> -# include <__format/format_parse_context.h> -# include <__format/formatter.h> -# include <__format/parser_std_format_spec.h> -# include <__format/write_escaped.h> -# include <__iterator/istreambuf_iterator.h> -# include <__iterator/ostreambuf_iterator.h> -# include <__locale_dir/time.h> -# include <__memory/addressof.h> -# include <__type_traits/is_specialization.h> -# include -# include -# include -# include -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace __formatter { - -/// Formats a time based on a tm struct. -/// -/// This formatter passes the formatting to time_put which uses strftime. When -/// the value is outside the valid range it's unspecified what strftime will -/// output. For example weekday 8 can print 1 when the day is processed modulo -/// 7 since that handles the Sunday for 0-based weekday. It can also print 8 if -/// 7 is handled as a special case. -/// -/// The Standard doesn't specify what to do in this case so the result depends -/// on the result of the underlying code. -/// -/// \pre When the (abbreviated) weekday or month name are used, the caller -/// validates whether the value is valid. So the caller handles that -/// requirement of Table 97: Meaning of conversion specifiers -/// [tab:time.format.spec]. -/// -/// When no chrono-specs are provided it uses the stream formatter. - -// For tiny ratios it's not possible to convert a duration to a hh_mm_ss. This -// fails compile-time due to the limited precision of the ratio (64-bit is too -// small). Therefore a duration uses its own conversion. -template -_LIBCPP_HIDE_FROM_ABI void -__format_sub_seconds(basic_stringstream<_CharT>& __sstr, const chrono::duration<_Rep, _Period>& __value) { - __sstr << std::use_facet>(__sstr.getloc()).decimal_point(); - - using __duration = chrono::duration<_Rep, _Period>; - - auto __fraction = __value - chrono::duration_cast(__value); - // Converts a negative fraction to its positive value. - if (__value < chrono::seconds{0} && __fraction != __duration{0}) - __fraction += chrono::seconds{1}; - if constexpr (chrono::treat_as_floating_point_v<_Rep>) - // When the floating-point value has digits itself they are ignored based - // on the wording in [tab:time.format.spec] - // If the precision of the input cannot be exactly represented with - // seconds, then the format is a decimal floating-point number with a - // fixed format and a precision matching that of the precision of the - // input (or to a microseconds precision if the conversion to - // floating-point decimal seconds cannot be made within 18 fractional - // digits). - // - // This matches the behaviour of MSVC STL, fmtlib interprets this - // differently and uses 3 decimals. - // https://godbolt.org/z/6dsbnW8ba - std::format_to(std::ostreambuf_iterator<_CharT>{__sstr}, - _LIBCPP_STATICALLY_WIDEN(_CharT, "{:0{}.0f}"), - chrono::duration_cast::precision>(__fraction).count(), - chrono::hh_mm_ss<__duration>::fractional_width); - else - std::format_to(std::ostreambuf_iterator<_CharT>{__sstr}, - _LIBCPP_STATICALLY_WIDEN(_CharT, "{:0{}}"), - chrono::duration_cast::precision>(__fraction).count(), - chrono::hh_mm_ss<__duration>::fractional_width); -} - -template -_LIBCPP_HIDE_FROM_ABI void __format_sub_seconds(basic_stringstream<_CharT>& __sstr, const _Tp& __value) { - __formatter::__format_sub_seconds(__sstr, __value.time_since_epoch()); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__format_sub_seconds(basic_stringstream<_CharT>& __sstr, const chrono::hh_mm_ss<_Duration>& __value) { - __sstr << std::use_facet>(__sstr.getloc()).decimal_point(); - if constexpr (chrono::treat_as_floating_point_v) - std::format_to(std::ostreambuf_iterator<_CharT>{__sstr}, - _LIBCPP_STATICALLY_WIDEN(_CharT, "{:0{}.0f}"), - __value.subseconds().count(), - __value.fractional_width); - else - std::format_to(std::ostreambuf_iterator<_CharT>{__sstr}, - _LIBCPP_STATICALLY_WIDEN(_CharT, "{:0{}}"), - __value.subseconds().count(), - __value.fractional_width); -} - -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -template -_LIBCPP_HIDE_FROM_ABI void -__format_sub_seconds(basic_stringstream<_CharT>& __sstr, const chrono::zoned_time<_Duration, _TimeZonePtr>& __value) { - __formatter::__format_sub_seconds(__sstr, __value.get_local_time().time_since_epoch()); -} -# endif - -template -consteval bool __use_fraction() { - if constexpr (__is_time_point<_Tp>) - return chrono::hh_mm_ss::fractional_width; -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return chrono::hh_mm_ss::fractional_width; -# endif - else if constexpr (chrono::__is_duration_v<_Tp>) - return chrono::hh_mm_ss<_Tp>::fractional_width; - else if constexpr (__is_hh_mm_ss<_Tp>) - return _Tp::fractional_width; - else - return false; -} - -template -_LIBCPP_HIDE_FROM_ABI void __format_year(basic_stringstream<_CharT>& __sstr, int __year) { - if (__year < 0) { - __sstr << _CharT('-'); - __year = -__year; - } - - // TODO FMT Write an issue - // If the result has less than four digits it is zero-padded with 0 to two digits. - // is less -> has less - // left-padded -> zero-padded, otherwise the proper value would be 000-0. - - // Note according to the wording it should be left padded, which is odd. - __sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:04}"), __year); -} - -template -_LIBCPP_HIDE_FROM_ABI void __format_century(basic_stringstream<_CharT>& __sstr, int __year) { - // TODO FMT Write an issue - // [tab:time.format.spec] - // %C The year divided by 100 using floored division. If the result is a - // single decimal digit, it is prefixed with 0. - - bool __negative = __year < 0; - int __century = (__year - (99 * __negative)) / 100; // floored division - __sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:02}"), __century); -} - -// Implements the %z format specifier according to [tab:time.format.spec], where -// '__modifier' signals %Oz or %Ez were used. (Both modifiers behave the same, -// so there is no need to distinguish between them.) -template -_LIBCPP_HIDE_FROM_ABI void -__format_zone_offset(basic_stringstream<_CharT>& __sstr, chrono::seconds __offset, bool __modifier) { - if (__offset < 0s) { - __sstr << _CharT('-'); - __offset = -__offset; - } else { - __sstr << _CharT('+'); - } - - chrono::hh_mm_ss __hms{__offset}; - std::ostreambuf_iterator<_CharT> __out_it{__sstr}; - // Note HMS does not allow formatting hours > 23, but the offset is not limited to 24H. - std::format_to(__out_it, _LIBCPP_STATICALLY_WIDEN(_CharT, "{:02}"), __hms.hours().count()); - if (__modifier) - __sstr << _CharT(':'); - std::format_to(__out_it, _LIBCPP_STATICALLY_WIDEN(_CharT, "{:02}"), __hms.minutes().count()); -} - -// Helper to store the time zone information needed for formatting. -struct _LIBCPP_HIDE_FROM_ABI __time_zone { - // Typically these abbreviations are short and fit in the string's internal - // buffer. - string __abbrev; - chrono::seconds __offset; -}; - -template -_LIBCPP_HIDE_FROM_ABI __time_zone __convert_to_time_zone([[maybe_unused]] const _Tp& __value) { -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - if constexpr (same_as<_Tp, chrono::sys_info>) - return {__value.abbrev, __value.offset}; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_time_point<_Tp> && requires { requires same_as; }) - return {"TAI", chrono::seconds{0}}; - else if constexpr (__is_time_point<_Tp> && requires { requires same_as; }) - return {"GPS", chrono::seconds{0}}; - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return __formatter::__convert_to_time_zone(__value.get_info()); -# endif // _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - return {"UTC", chrono::seconds{0}}; -} - -template -_LIBCPP_HIDE_FROM_ABI void __format_chrono_using_chrono_specs( - basic_stringstream<_CharT>& __sstr, const _Tp& __value, basic_string_view<_CharT> __chrono_specs) { - tm __t = std::__convert_to_tm(__value); - __time_zone __z = __formatter::__convert_to_time_zone(__value); - const auto& __facet = std::use_facet>(__sstr.getloc()); - for (auto __it = __chrono_specs.begin(); __it != __chrono_specs.end(); ++__it) { - if (*__it == _CharT('%')) { - auto __s = __it; - ++__it; - // We only handle the types that can't be directly handled by time_put. - // (as an optimization n, t, and % are also handled directly.) - switch (*__it) { - case _CharT('n'): - __sstr << _CharT('\n'); - break; - case _CharT('t'): - __sstr << _CharT('\t'); - break; - case _CharT('%'): - __sstr << *__it; - break; - - case _CharT('C'): { - // strftime's output is only defined in the range [00, 99]. - int __year = __t.tm_year + 1900; - if (__year < 1000 || __year > 9999) - __formatter::__format_century(__sstr, __year); - else - __facet.put( - {__sstr}, __sstr, _CharT(' '), std::addressof(__t), std::to_address(__s), std::to_address(__it + 1)); - } break; - - case _CharT('j'): - if constexpr (chrono::__is_duration_v<_Tp>) - // Converting a duration where the period has a small ratio to days - // may fail to compile. This due to loss of precision in the - // conversion. In order to avoid that issue convert to seconds as - // an intemediate step. - __sstr << chrono::duration_cast(chrono::duration_cast(__value)).count(); - else - __facet.put( - {__sstr}, __sstr, _CharT(' '), std::addressof(__t), std::to_address(__s), std::to_address(__it + 1)); - break; - - case _CharT('q'): - if constexpr (chrono::__is_duration_v<_Tp>) { - __sstr << chrono::__units_suffix<_CharT, typename _Tp::period>(); - break; - } - __builtin_unreachable(); - - case _CharT('Q'): - // TODO FMT Determine the proper ideas - // - Should it honour the precision? - // - Shoult it honour the locale setting for the separators? - // The wording for Q doesn't use the word locale and the effect of - // precision is unspecified. - // - // MSVC STL ignores precision but uses separator - // FMT honours precision and has a bug for separator - // https://godbolt.org/z/78b7sMxns - if constexpr (chrono::__is_duration_v<_Tp>) { - __sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{}"), __value.count()); - break; - } - __builtin_unreachable(); - - case _CharT('S'): - case _CharT('T'): - __facet.put( - {__sstr}, __sstr, _CharT(' '), std::addressof(__t), std::to_address(__s), std::to_address(__it + 1)); - if constexpr (__formatter::__use_fraction<_Tp>()) - __formatter::__format_sub_seconds(__sstr, __value); - break; - - // Unlike time_put and strftime the formatting library requires %Y - // - // [tab:time.format.spec] - // The year as a decimal number. If the result is less than four digits - // it is left-padded with 0 to four digits. - // - // This means years in the range (-1000, 1000) need manual formatting. - // It's unclear whether %EY needs the same treatment. For example the - // Japanese EY contains the era name and year. This is zero-padded to 2 - // digits in time_put (note that older glibc versions didn't do - // padding.) However most eras won't reach 100 years, let alone 1000. - // So padding to 4 digits seems unwanted for Japanese. - // - // The same applies to %Ex since that too depends on the era. - // - // %x the locale's date representation is currently doesn't handle the - // zero-padding too. - // - // The 4 digits can be implemented better at a later time. On POSIX - // systems the required information can be extracted by nl_langinfo - // https://man7.org/linux/man-pages/man3/nl_langinfo.3.html - // - // Note since year < -1000 is expected to be rare it uses the more - // expensive year routine. - // - // TODO FMT evaluate the comment above. - -# if defined(__GLIBC__) || defined(_AIX) || defined(_WIN32) - case _CharT('y'): - // Glibc fails for negative values, AIX for positive values too. - __sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:02}"), (std::abs(__t.tm_year + 1900)) % 100); - break; -# endif // defined(__GLIBC__) || defined(_AIX) || defined(_WIN32) - - case _CharT('Y'): - // Depending on the platform's libc the range of supported years is - // limited. Instead of of testing all conditions use the internal - // implementation unconditionally. - __formatter::__format_year(__sstr, __t.tm_year + 1900); - break; - - case _CharT('F'): - // Depending on the platform's libc the range of supported years is - // limited. Instead of testing all conditions use the internal - // implementation unconditionally. - __formatter::__format_year(__sstr, __t.tm_year + 1900); - __sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "-{:02}-{:02}"), __t.tm_mon + 1, __t.tm_mday); - break; - - case _CharT('z'): - __formatter::__format_zone_offset(__sstr, __z.__offset, false); - break; - - case _CharT('Z'): - // __abbrev is always a char so the copy may convert. - ranges::copy(__z.__abbrev, std::ostreambuf_iterator<_CharT>{__sstr}); - break; - - case _CharT('O'): - if constexpr (__formatter::__use_fraction<_Tp>()) { - // Handle OS using the normal representation for the non-fractional - // part. There seems to be no locale information regarding how the - // fractional part should be formatted. - if (*(__it + 1) == 'S') { - ++__it; - __facet.put( - {__sstr}, __sstr, _CharT(' '), std::addressof(__t), std::to_address(__s), std::to_address(__it + 1)); - __formatter::__format_sub_seconds(__sstr, __value); - break; - } - } - - // Oz produces the same output as Ez below. - [[fallthrough]]; - case _CharT('E'): - ++__it; - if (*__it == 'z') { - __formatter::__format_zone_offset(__sstr, __z.__offset, true); - break; - } - [[fallthrough]]; - default: - __facet.put( - {__sstr}, __sstr, _CharT(' '), std::addressof(__t), std::to_address(__s), std::to_address(__it + 1)); - break; - } - } else { - __sstr << *__it; - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __weekday_ok(const _Tp& __value) { - if constexpr (__is_time_point<_Tp>) - return true; - else if constexpr (same_as<_Tp, chrono::day>) - return true; - else if constexpr (same_as<_Tp, chrono::month>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_indexed>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_weekday>) - return true; - else if constexpr (same_as<_Tp, chrono::month_weekday_last>) - return true; - else if constexpr (same_as<_Tp, chrono::year_month>) - return true; - else if constexpr (same_as<_Tp, chrono::year_month_day>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_day_last>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday>) - return __value.weekday().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday_last>) - return __value.weekday().ok(); - else if constexpr (__is_hh_mm_ss<_Tp>) - return true; -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - else if constexpr (same_as<_Tp, chrono::sys_info>) - return true; - else if constexpr (same_as<_Tp, chrono::local_info>) - return true; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return true; -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - else - static_assert(sizeof(_Tp) == 0, "Add the missing type specialization"); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __weekday_name_ok(const _Tp& __value) { - if constexpr (__is_time_point<_Tp>) - return true; - else if constexpr (same_as<_Tp, chrono::day>) - return true; - else if constexpr (same_as<_Tp, chrono::month>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::weekday_indexed>) - return __value.weekday().ok(); - else if constexpr (same_as<_Tp, chrono::weekday_last>) - return __value.weekday().ok(); - else if constexpr (same_as<_Tp, chrono::month_day>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_weekday>) - return __value.weekday_indexed().ok(); - else if constexpr (same_as<_Tp, chrono::month_weekday_last>) - return __value.weekday_indexed().ok(); - else if constexpr (same_as<_Tp, chrono::year_month>) - return true; - else if constexpr (same_as<_Tp, chrono::year_month_day>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_day_last>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday>) - return __value.weekday().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday_last>) - return __value.weekday().ok(); - else if constexpr (__is_hh_mm_ss<_Tp>) - return true; -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - else if constexpr (same_as<_Tp, chrono::sys_info>) - return true; - else if constexpr (same_as<_Tp, chrono::local_info>) - return true; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return true; -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - else - static_assert(sizeof(_Tp) == 0, "Add the missing type specialization"); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __date_ok(const _Tp& __value) { - if constexpr (__is_time_point<_Tp>) - return true; - else if constexpr (same_as<_Tp, chrono::day>) - return true; - else if constexpr (same_as<_Tp, chrono::month>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_indexed>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_weekday>) - return true; - else if constexpr (same_as<_Tp, chrono::month_weekday_last>) - return true; - else if constexpr (same_as<_Tp, chrono::year_month>) - return true; - else if constexpr (same_as<_Tp, chrono::year_month_day>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_day_last>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday_last>) - return __value.ok(); - else if constexpr (__is_hh_mm_ss<_Tp>) - return true; -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - else if constexpr (same_as<_Tp, chrono::sys_info>) - return true; - else if constexpr (same_as<_Tp, chrono::local_info>) - return true; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return true; -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - else - static_assert(sizeof(_Tp) == 0, "Add the missing type specialization"); -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr bool __month_name_ok(const _Tp& __value) { - if constexpr (__is_time_point<_Tp>) - return true; - else if constexpr (same_as<_Tp, chrono::day>) - return true; - else if constexpr (same_as<_Tp, chrono::month>) - return __value.ok(); - else if constexpr (same_as<_Tp, chrono::year>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_indexed>) - return true; - else if constexpr (same_as<_Tp, chrono::weekday_last>) - return true; - else if constexpr (same_as<_Tp, chrono::month_day>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::month_day_last>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::month_weekday>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::month_weekday_last>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::year_month>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_day>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_day_last>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday>) - return __value.month().ok(); - else if constexpr (same_as<_Tp, chrono::year_month_weekday_last>) - return __value.month().ok(); - else if constexpr (__is_hh_mm_ss<_Tp>) - return true; -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - else if constexpr (same_as<_Tp, chrono::sys_info>) - return true; - else if constexpr (same_as<_Tp, chrono::local_info>) - return true; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>) - return true; -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - else - static_assert(sizeof(_Tp) == 0, "Add the missing type specialization"); -} - -template -_LIBCPP_HIDE_FROM_ABI auto -__format_chrono(const _Tp& __value, - _FormatContext& __ctx, - __format_spec::__parsed_specifications<_CharT> __specs, - basic_string_view<_CharT> __chrono_specs) { - basic_stringstream<_CharT> __sstr; - // [time.format]/2 - // 2.1 - the "C" locale if the L option is not present in chrono-format-spec, otherwise - // 2.2 - the locale passed to the formatting function if any, otherwise - // 2.3 - the global locale. - // Note that the __ctx's locale() call does 2.2 and 2.3. - if (__specs.__chrono_.__locale_specific_form_) - __sstr.imbue(__ctx.locale()); - else - __sstr.imbue(locale::classic()); - - if (__chrono_specs.empty()) - __sstr << __value; - else { - if constexpr (chrono::__is_duration_v<_Tp>) { - // A duration can be a user defined arithmetic type. Users may specialize - // numeric_limits, but they may not specialize is_signed. - if constexpr (numeric_limits::is_signed) { - if (__value < __value.zero()) { - __sstr << _CharT('-'); - __formatter::__format_chrono_using_chrono_specs(__sstr, -__value, __chrono_specs); - } else - __formatter::__format_chrono_using_chrono_specs(__sstr, __value, __chrono_specs); - } else - __formatter::__format_chrono_using_chrono_specs(__sstr, __value, __chrono_specs); - // TODO FMT When keeping the precision it will truncate the string. - // Note that the behaviour what the precision does isn't specified. - __specs.__precision_ = -1; - } else { - // Test __weekday_name_ before __weekday_ to give a better error. - if (__specs.__chrono_.__weekday_name_ && !__formatter::__weekday_name_ok(__value)) - std::__throw_format_error("Formatting a weekday name needs a valid weekday"); - - if (__specs.__chrono_.__weekday_ && !__formatter::__weekday_ok(__value)) - std::__throw_format_error("Formatting a weekday needs a valid weekday"); - - if (__specs.__chrono_.__day_of_year_ && !__formatter::__date_ok(__value)) - std::__throw_format_error("Formatting a day of year needs a valid date"); - - if (__specs.__chrono_.__week_of_year_ && !__formatter::__date_ok(__value)) - std::__throw_format_error("Formatting a week of year needs a valid date"); - - if (__specs.__chrono_.__month_name_ && !__formatter::__month_name_ok(__value)) - std::__throw_format_error("Formatting a month name from an invalid month number"); - - if constexpr (__is_hh_mm_ss<_Tp>) { - // Note this is a pedantic intepretation of the Standard. A hh_mm_ss - // is no longer a time_of_day and can store an arbitrary number of - // hours. A number of hours in a 12 or 24 hour clock can't represent - // 24 hours or more. The functions std::chrono::make12 and - // std::chrono::make24 reaffirm this view point. - // - // Interestingly this will be the only output stream function that - // throws. - // - // TODO FMT The wording probably needs to be adapted to - // - The displayed hours is hh_mm_ss.hours() % 24 - // - It should probably allow %j in the same fashion as duration. - // - The stream formatter should change its output when hours >= 24 - // - Write it as not valid, - // - or write the number of days. - if (__specs.__chrono_.__hour_ && __value.hours().count() > 23) - std::__throw_format_error("Formatting a hour needs a valid value"); - - if (__value.is_negative()) - __sstr << _CharT('-'); - } - - __formatter::__format_chrono_using_chrono_specs(__sstr, __value, __chrono_specs); - } - } - - return __formatter::__write_string(__sstr.view(), __ctx.out(), __specs); -} - -} // namespace __formatter - -template <__fmt_char_type _CharT> -struct __formatter_chrono { -public: - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator - __parse(_ParseContext& __ctx, __format_spec::__fields __fields, __format_spec::__flags __flags) { - return __parser_.__parse(__ctx, __fields, __flags); - } - - template - _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator format(const _Tp& __value, _FormatContext& __ctx) const { - return __formatter::__format_chrono( - __value, __ctx, __parser_.__parser_.__get_parsed_chrono_specifications(__ctx), __parser_.__chrono_specs_); - } - - __format_spec::__parser_chrono<_CharT> __parser_; -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; - -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; - -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB -# endif // _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - // The flags are not __clock since there is no associated time-zone. - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__date_time); - } -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - // [time.format]/1 - // Giving a precision specification in the chrono-format-spec is valid only - // for std::chrono::duration types where the representation type Rep is a - // floating-point type. For all other Rep types, an exception of type - // format_error is thrown if the chrono-format-spec contains a precision - // specification. - // - // Note this doesn't refer to chrono::treat_as_floating_point_v<_Rep>. - if constexpr (std::floating_point<_Rep>) - return _Base::__parse(__ctx, __format_spec::__fields_chrono_fractional, __format_spec::__flags::__duration); - else - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__duration); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__day); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__month); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__year); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__weekday); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__weekday); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__weekday); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__month_day); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__month); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__month_weekday); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__month_weekday); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__year_month); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__date); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__date); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__date); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__date); - } -}; - -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__time); - } -}; - -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__time_zone); - } -}; - -template <__fmt_char_type _CharT> -struct formatter : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags{}); - } -}; -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -// Note due to how libc++'s formatters are implemented there is no need to add -// the exposition only local-time-format-t abstraction. -template -struct formatter, _CharT> : public __formatter_chrono<_CharT> { -public: - using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; - - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { - return _Base::__parse(__ctx, __format_spec::__fields_chrono, __format_spec::__flags::__clock); - } -}; -# endif // _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# endif // if _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_LOCALIZATION - -#endif // _LIBCPP___CHRONO_FORMATTER_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/gps_clock.h b/third_party/libcxx/include/c++/v1/__chrono/gps_clock.h deleted file mode 100644 index 2e220ca..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/gps_clock.h +++ /dev/null @@ -1,90 +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___CHRONO_GPS_CLOCK_H -#define _LIBCPP___CHRONO_GPS_CLOCK_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__assert> -# include <__chrono/duration.h> -# include <__chrono/time_point.h> -# include <__chrono/utc_clock.h> -# include <__config> -# include <__type_traits/common_type.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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -class gps_clock; - -template -using gps_time = time_point; -using gps_seconds = gps_time; - -class gps_clock { -public: - using rep = utc_clock::rep; - using period = utc_clock::period; - using duration = chrono::duration; - using time_point = chrono::time_point; - static constexpr bool is_steady = false; // The utc_clock is not steady. - - // The static difference between UTC and GPS time as specified in the Standard. - static constexpr chrono::seconds __offset{315964809}; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static time_point now() { return from_utc(utc_clock::now()); } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static utc_time> - to_utc(const gps_time<_Duration>& __time) noexcept { - using _Rp = common_type_t<_Duration, seconds>; - _Duration __time_since_epoch = __time.time_since_epoch(); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__time_since_epoch >= utc_time<_Rp>::min().time_since_epoch() + __offset, - "the GPS to UTC conversion would underflow"); - - return utc_time<_Rp>{__time_since_epoch + __offset}; - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static gps_time> - from_utc(const utc_time<_Duration>& __time) noexcept { - using _Rp = common_type_t<_Duration, seconds>; - _Duration __time_since_epoch = __time.time_since_epoch(); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__time_since_epoch <= utc_time<_Rp>::max().time_since_epoch() - __offset, - "the UTC to GPS conversion would overflow"); - - return gps_time<_Rp>{__time_since_epoch - __offset}; - } -}; - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_GPS_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/hh_mm_ss.h b/third_party/libcxx/include/c++/v1/__chrono/hh_mm_ss.h deleted file mode 100644 index 746eba9..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/hh_mm_ss.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___CHRONO_HH_MM_SS_H -#define _LIBCPP___CHRONO_HH_MM_SS_H - -#include <__chrono/duration.h> -#include <__chrono/time_point.h> -#include <__config> -#include <__type_traits/common_type.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -template -class hh_mm_ss { -private: - static_assert(__is_duration_v<_Duration>, "template parameter of hh_mm_ss must be a std::chrono::duration"); - using __CommonType _LIBCPP_NODEBUG = common_type_t<_Duration, chrono::seconds>; - - _LIBCPP_HIDE_FROM_ABI static constexpr uint64_t __pow10(unsigned __exp) { - uint64_t __ret = 1; - for (unsigned __i = 0; __i < __exp; ++__i) - __ret *= 10U; - return __ret; - } - - _LIBCPP_HIDE_FROM_ABI static constexpr unsigned __width(uint64_t __n, uint64_t __d = 10, unsigned __w = 0) { - if (__n >= 2 && __d != 0 && __w < 19) - return 1 + __width(__n, __d % __n * 10, __w + 1); - return 0; - } - -public: - _LIBCPP_HIDE_FROM_ABI static unsigned constexpr fractional_width = - __width(__CommonType::period::den) < 19 ? __width(__CommonType::period::den) : 6u; - using precision = duration>; - - _LIBCPP_HIDE_FROM_ABI constexpr hh_mm_ss() noexcept : hh_mm_ss{_Duration::zero()} {} - - _LIBCPP_HIDE_FROM_ABI constexpr explicit hh_mm_ss(_Duration __d) noexcept - : __is_neg_(__d < _Duration(0)), - __h_(chrono::duration_cast(chrono::abs(__d))), - __m_(chrono::duration_cast(chrono::abs(__d) - hours())), - __s_(chrono::duration_cast(chrono::abs(__d) - hours() - minutes())), - __f_(chrono::duration_cast(chrono::abs(__d) - hours() - minutes() - seconds())) {} - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool is_negative() const noexcept { return __is_neg_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::hours hours() const noexcept { return __h_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::minutes minutes() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::seconds seconds() const noexcept { return __s_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr precision subseconds() const noexcept { return __f_; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr precision to_duration() const noexcept { - auto __dur = __h_ + __m_ + __s_ + __f_; - return __is_neg_ ? -__dur : __dur; - } - - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator precision() const noexcept { return to_duration(); } - -private: - bool __is_neg_; - chrono::hours __h_; - chrono::minutes __m_; - chrono::seconds __s_; - precision __f_; -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(hh_mm_ss); - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_am(const hours& __h) noexcept { - return __h >= hours(0) && __h < hours(12); -} -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_pm(const hours& __h) noexcept { - return __h >= hours(12) && __h < hours(24); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr hours make12(const hours& __h) noexcept { - if (__h == hours(0)) - return hours(12); - else if (__h <= hours(12)) - return __h; - else - return __h - hours(12); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr hours make24(const hours& __h, bool __is_pm) noexcept { - if (__is_pm) - return __h == hours(12) ? __h : __h + hours(12); - else - return __h == hours(12) ? hours(0) : __h; -} -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_HH_MM_SS_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/high_resolution_clock.h b/third_party/libcxx/include/c++/v1/__chrono/high_resolution_clock.h deleted file mode 100644 index d324c7f..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/high_resolution_clock.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___CHRONO_HIGH_RESOLUTION_CLOCK_H -#define _LIBCPP___CHRONO_HIGH_RESOLUTION_CLOCK_H - -#include <__chrono/steady_clock.h> -#include <__chrono/system_clock.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -#if _LIBCPP_HAS_MONOTONIC_CLOCK -typedef steady_clock high_resolution_clock; -#else -typedef system_clock high_resolution_clock; -#endif - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHRONO_HIGH_RESOLUTION_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/is_clock.h b/third_party/libcxx/include/c++/v1/__chrono/is_clock.h deleted file mode 100644 index e63b848..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/is_clock.h +++ /dev/null @@ -1,72 +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___CHRONO_IS_CLOCK_H -#define _LIBCPP___CHRONO_IS_CLOCK_H - -#include <__config> - -#include <__chrono/duration.h> -#include <__chrono/time_point.h> -#include <__concepts/same_as.h> -#include <__type_traits/integral_constant.h> -#include <__type_traits/is_arithmetic.h> -#include <__type_traits/is_class.h> -#include <__type_traits/is_union.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -// Helper to check that _Tp::time_point has the form time_point<_, typename _Tp::duration>. -template -inline constexpr bool __is_valid_clock_time_point_v = false; - -template -inline constexpr bool - __is_valid_clock_time_point_v, _ClockType> = true; - -// Check if a clock satisfies the Cpp17Clock requirements as defined in [time.clock.req] -template -_LIBCPP_NO_SPECIALIZATIONS inline constexpr bool is_clock_v = requires { - typename _Tp::rep; - requires is_arithmetic_v || is_class_v || is_union_v; - - typename _Tp::period; - requires __is_ratio_v; - - typename _Tp::duration; - requires same_as>; - - typename _Tp::time_point; - requires __is_valid_clock_time_point_v; - - _Tp::is_steady; - requires same_as; - - _Tp::now(); - requires same_as; -}; - -template -struct _LIBCPP_NO_SPECIALIZATIONS is_clock : bool_constant> {}; - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER -#endif // _LIBCPP___CHRONO_IS_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/leap_second.h b/third_party/libcxx/include/c++/v1/__chrono/leap_second.h deleted file mode 100644 index 9e9df6b..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/leap_second.h +++ /dev/null @@ -1,144 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_LEAP_SECOND_H -#define _LIBCPP___CHRONO_LEAP_SECOND_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/duration.h> -# include <__chrono/system_clock.h> -# include <__chrono/time_point.h> -# include <__compare/ordering.h> -# include <__compare/three_way_comparable.h> -# include <__config> -# include <__cstddef/size_t.h> -# include <__functional/hash.h> -# include <__utility/private_constructor_tag.h> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace chrono { - -class leap_second { -public: - [[nodiscard]] - _LIBCPP_HIDE_FROM_ABI explicit constexpr leap_second(__private_constructor_tag, sys_seconds __date, seconds __value) - : __date_(__date), __value_(__value) {} - - _LIBCPP_HIDE_FROM_ABI leap_second(const leap_second&) = default; - _LIBCPP_HIDE_FROM_ABI leap_second& operator=(const leap_second&) = default; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr sys_seconds date() const noexcept { return __date_; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr seconds value() const noexcept { return __value_; } - -private: - sys_seconds __date_; - seconds __value_; - - // The function - // template - // requires three_way_comparable_with> - // constexpr auto operator<=>(const leap_second& x, const sys_time& y) noexcept; - // - // Has constraints that are recursive (LWG4139). The proposed resolution is - // to make the funcion a hidden friend. For consistency make this change for - // all comparison functions. - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const leap_second& __x, const leap_second& __y) { - return __x.date() == __y.date(); - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr strong_ordering operator<=>(const leap_second& __x, const leap_second& __y) { - return __x.date() <=> __y.date(); - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const leap_second& __x, const sys_time<_Duration>& __y) { - return __x.date() == __y; - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const leap_second& __x, const sys_time<_Duration>& __y) { - return __x.date() < __y; - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(const sys_time<_Duration>& __x, const leap_second& __y) { - return __x < __y.date(); - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const leap_second& __x, const sys_time<_Duration>& __y) { - return __y < __x; - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(const sys_time<_Duration>& __x, const leap_second& __y) { - return __y < __x; - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const leap_second& __x, const sys_time<_Duration>& __y) { - return !(__y < __x); - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(const sys_time<_Duration>& __x, const leap_second& __y) { - return !(__y < __x); - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const leap_second& __x, const sys_time<_Duration>& __y) { - return !(__x < __y); - } - - template - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(const sys_time<_Duration>& __x, const leap_second& __y) { - return !(__x < __y); - } - - template - requires three_way_comparable_with> - _LIBCPP_HIDE_FROM_ABI friend constexpr auto operator<=>(const leap_second& __x, const sys_time<_Duration>& __y) { - return __x.date() <=> __y; - } -}; - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::leap_second& __lp) noexcept { - return std::__hash_combine(hash{}(__lp.date()), hash{}(__lp.value())); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -# endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_LEAP_SECOND_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/literals.h b/third_party/libcxx/include/c++/v1/__chrono/literals.h deleted file mode 100644 index b26acba..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/literals.h +++ /dev/null @@ -1,45 +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___CHRONO_LITERALS_H -#define _LIBCPP___CHRONO_LITERALS_H - -#include <__chrono/day.h> -#include <__chrono/year.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline namespace literals { -inline namespace chrono_literals { -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::day operator""d(unsigned long long __d) noexcept { - return chrono::day(static_cast(__d)); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::year operator""y(unsigned long long __y) noexcept { - return chrono::year(static_cast(__y)); -} -} // namespace chrono_literals -} // namespace literals - -namespace chrono { // hoist the literals into namespace std::chrono -using namespace literals::chrono_literals; -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_LITERALS_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/local_info.h b/third_party/libcxx/include/c++/v1/__chrono/local_info.h deleted file mode 100644 index 31cf777..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/local_info.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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_LOCAL_INFO_H -#define _LIBCPP___CHRONO_LOCAL_INFO_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/sys_info.h> -# 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 chrono { - -struct local_info { - static constexpr int unique = 0; - static constexpr int nonexistent = 1; - static constexpr int ambiguous = 2; - - int result; - sys_info first; - sys_info second; -}; - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_LOCAL_INFO_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/month.h b/third_party/libcxx/include/c++/v1/__chrono/month.h deleted file mode 100644 index abf07e8..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/month.h +++ /dev/null @@ -1,128 +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___CHRONO_MONTH_H -#define _LIBCPP___CHRONO_MONTH_H - -#include <__chrono/duration.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class month { -private: - unsigned char __m_; - -public: - month() = default; - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr month(unsigned __val) noexcept - : __m_(static_cast(__val)) {} - _LIBCPP_HIDE_FROM_ABI inline constexpr month& operator++() noexcept { - *this += months{1}; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr month operator++(int) noexcept { - month __tmp = *this; - ++(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr month& operator--() noexcept { - *this -= months{1}; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr month operator--(int) noexcept { - month __tmp = *this; - --(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI constexpr month& operator+=(const months& __m1) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr month& operator-=(const months& __m1) noexcept; - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr operator unsigned() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_ >= 1 && __m_ <= 12; } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const month& __lhs, const month& __rhs) noexcept { - return static_cast(__lhs) == static_cast(__rhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(const month& __lhs, const month& __rhs) noexcept { - return static_cast(__lhs) <=> static_cast(__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const month& __lhs, const months& __rhs) noexcept { - auto const __mu = static_cast(static_cast(__lhs)) + (__rhs.count() - 1); - auto const __yr = (__mu >= 0 ? __mu : __mu - 11) / 12; - return month{static_cast(__mu - __yr * 12 + 1)}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const months& __lhs, const month& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator-(const month& __lhs, const months& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr months operator-(const month& __lhs, const month& __rhs) noexcept { - auto const __dm = static_cast(__lhs) - static_cast(__rhs); - return months(__dm <= 11 ? __dm : __dm + 12); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr month& month::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr month& month::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} - -inline constexpr month January{1}; -inline constexpr month February{2}; -inline constexpr month March{3}; -inline constexpr month April{4}; -inline constexpr month May{5}; -inline constexpr month June{6}; -inline constexpr month July{7}; -inline constexpr month August{8}; -inline constexpr month September{9}; -inline constexpr month October{10}; -inline constexpr month November{11}; -inline constexpr month December{12}; - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month& __m) noexcept { - return static_cast(__m); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_MONTH_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/month_weekday.h b/third_party/libcxx/include/c++/v1/__chrono/month_weekday.h deleted file mode 100644 index f149806..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/month_weekday.h +++ /dev/null @@ -1,135 +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___CHRONO_MONTH_WEEKDAY_H -#define _LIBCPP___CHRONO_MONTH_WEEKDAY_H - -#include <__chrono/month.h> -#include <__chrono/weekday.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class month_weekday { -private: - chrono::month __m_; - chrono::weekday_indexed __wdi_; - -public: - _LIBCPP_HIDE_FROM_ABI constexpr month_weekday(const chrono::month& __mval, - const chrono::weekday_indexed& __wdival) noexcept - : __m_{__mval}, __wdi_{__wdival} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_indexed weekday_indexed() const noexcept { - return __wdi_; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdi_.ok(); } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const month_weekday& __lhs, const month_weekday& __rhs) noexcept { - return __lhs.month() == __rhs.month() && __lhs.weekday_indexed() == __rhs.weekday_indexed(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday -operator/(const month& __lhs, const weekday_indexed& __rhs) noexcept { - return month_weekday{__lhs, __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday -operator/(int __lhs, const weekday_indexed& __rhs) noexcept { - return month_weekday{month(__lhs), __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday -operator/(const weekday_indexed& __lhs, const month& __rhs) noexcept { - return month_weekday{__rhs, __lhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday -operator/(const weekday_indexed& __lhs, int __rhs) noexcept { - return month_weekday{month(__rhs), __lhs}; -} - -class month_weekday_last { - chrono::month __m_; - chrono::weekday_last __wdl_; - -public: - _LIBCPP_HIDE_FROM_ABI constexpr month_weekday_last(const chrono::month& __mval, - const chrono::weekday_last& __wdlval) noexcept - : __m_{__mval}, __wdl_{__wdlval} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_last weekday_last() const noexcept { - return __wdl_; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdl_.ok(); } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const month_weekday_last& __lhs, const month_weekday_last& __rhs) noexcept { - return __lhs.month() == __rhs.month() && __lhs.weekday_last() == __rhs.weekday_last(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last -operator/(const month& __lhs, const weekday_last& __rhs) noexcept { - return month_weekday_last{__lhs, __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last -operator/(int __lhs, const weekday_last& __rhs) noexcept { - return month_weekday_last{month(__lhs), __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last -operator/(const weekday_last& __lhs, const month& __rhs) noexcept { - return month_weekday_last{__rhs, __lhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last -operator/(const weekday_last& __lhs, int __rhs) noexcept { - return month_weekday_last{month(__rhs), __lhs}; -} -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday& __mw) noexcept { - return std::__hash_combine( - hash{}(__mw.month()), hash{}(__mw.weekday_indexed())); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday_last& __mwl) noexcept { - return std::__hash_combine( - hash{}(__mwl.month()), hash{}(__mwl.weekday_last())); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_MONTH_WEEKDAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/monthday.h b/third_party/libcxx/include/c++/v1/__chrono/monthday.h deleted file mode 100644 index 443d7ea..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/monthday.h +++ /dev/null @@ -1,155 +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___CHRONO_MONTHDAY_H -#define _LIBCPP___CHRONO_MONTHDAY_H - -#include <__chrono/calendar.h> -#include <__chrono/day.h> -#include <__chrono/month.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class month_day { -private: - chrono::month __m_; - chrono::day __d_; - -public: - month_day() = default; - _LIBCPP_HIDE_FROM_ABI constexpr month_day(const chrono::month& __mval, const chrono::day& __dval) noexcept - : __m_{__mval}, __d_{__dval} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::day day() const noexcept { return __d_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool ok() const noexcept; -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool month_day::ok() const noexcept { - if (!__m_.ok()) - return false; - const unsigned __dval = static_cast(__d_); - if (__dval < 1 || __dval > 31) - return false; - if (__dval <= 29) - return true; - // Now we've got either 30 or 31 - const unsigned __mval = static_cast(__m_); - if (__mval == 2) - return false; - if (__mval == 4 || __mval == 6 || __mval == 9 || __mval == 11) - return __dval == 30; - return true; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const month_day& __lhs, const month_day& __rhs) noexcept { - return __lhs.month() == __rhs.month() && __lhs.day() == __rhs.day(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering -operator<=>(const month_day& __lhs, const month_day& __rhs) noexcept { - if (auto __c = __lhs.month() <=> __rhs.month(); __c != 0) - return __c; - return __lhs.day() <=> __rhs.day(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day -operator/(const month& __lhs, const day& __rhs) noexcept { - return month_day{__lhs, __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day -operator/(const day& __lhs, const month& __rhs) noexcept { - return __rhs / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day operator/(const month& __lhs, int __rhs) noexcept { - return __lhs / day(__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day operator/(int __lhs, const day& __rhs) noexcept { - return month(__lhs) / __rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day operator/(const day& __lhs, int __rhs) noexcept { - return month(__rhs) / __lhs; -} - -class month_day_last { -private: - chrono::month __m_; - -public: - _LIBCPP_HIDE_FROM_ABI explicit constexpr month_day_last(const chrono::month& __val) noexcept : __m_{__val} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok(); } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const month_day_last& __lhs, const month_day_last& __rhs) noexcept { - return __lhs.month() == __rhs.month(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering -operator<=>(const month_day_last& __lhs, const month_day_last& __rhs) noexcept { - return __lhs.month() <=> __rhs.month(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day_last operator/(const month& __lhs, last_spec) noexcept { - return month_day_last{__lhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day_last operator/(last_spec, const month& __rhs) noexcept { - return month_day_last{__rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day_last operator/(int __lhs, last_spec) noexcept { - return month_day_last{month(__lhs)}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_day_last operator/(last_spec, int __rhs) noexcept { - return month_day_last{month(__rhs)}; -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_day& __md) noexcept { - return std::__hash_combine(hash{}(__md.month()), hash{}(__md.day())); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_day_last& __mdl) noexcept { - return hash{}(__mdl.month()); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_MONTHDAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/ostream.h b/third_party/libcxx/include/c++/v1/__chrono/ostream.h deleted file mode 100644 index 7a01b18..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/ostream.h +++ /dev/null @@ -1,354 +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___CHRONO_OSTREAM_H -#define _LIBCPP___CHRONO_OSTREAM_H - -#include <__config> - -#if _LIBCPP_HAS_LOCALIZATION - -# include <__chrono/calendar.h> -# include <__chrono/day.h> -# include <__chrono/duration.h> -# include <__chrono/file_clock.h> -# include <__chrono/gps_clock.h> -# include <__chrono/hh_mm_ss.h> -# include <__chrono/local_info.h> -# include <__chrono/month.h> -# include <__chrono/month_weekday.h> -# include <__chrono/monthday.h> -# include <__chrono/statically_widen.h> -# include <__chrono/sys_info.h> -# include <__chrono/system_clock.h> -# include <__chrono/tai_clock.h> -# include <__chrono/utc_clock.h> -# include <__chrono/weekday.h> -# include <__chrono/year.h> -# include <__chrono/year_month.h> -# include <__chrono/year_month_day.h> -# include <__chrono/year_month_weekday.h> -# include <__chrono/zoned_time.h> -# include <__concepts/same_as.h> -# include <__format/format_functions.h> -# include <__fwd/ostream.h> -# include -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace chrono { - -template - requires(!treat_as_floating_point_v && _Duration{1} < days{1}) -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const sys_time<_Duration>& __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T}"), __tp); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const sys_days& __dp) { - return __os << year_month_day{__dp}; -} - -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const utc_time<_Duration>& __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T}"), __tp); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const tai_time<_Duration>& __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T}"), __tp); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const gps_time<_Duration>& __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T}"), __tp); -} - -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB -# endif // _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const file_time<_Duration> __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T}"), __tp); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const local_time<_Duration> __tp) { - return __os << sys_time<_Duration>{__tp.time_since_epoch()}; -} - -// Depending on the type the return is a const _CharT* or a basic_string<_CharT> -template -_LIBCPP_HIDE_FROM_ABI auto __units_suffix() { - // TODO FMT LWG issue the suffixes are always char and not STATICALLY-WIDEN'ed. - if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "as"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "fs"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ps"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ns"); - else if constexpr (same_as) -# if _LIBCPP_HAS_UNICODE - return _LIBCPP_STATICALLY_WIDEN(_CharT, "\u00b5s"); -# else - return _LIBCPP_STATICALLY_WIDEN(_CharT, "us"); -# endif - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ms"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "cs"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ds"); - else if constexpr (same_as>) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "s"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "das"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "hs"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ks"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "Ms"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "Gs"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "Ts"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "Ps"); - else if constexpr (same_as) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "Es"); - else if constexpr (same_as>) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "min"); - else if constexpr (same_as>) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "h"); - else if constexpr (same_as>) - return _LIBCPP_STATICALLY_WIDEN(_CharT, "d"); - else if constexpr (_Period::den == 1) - return std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "[{}]s"), _Period::num); - else - return std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "[{}/{}]s"), _Period::num, _Period::den); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const duration<_Rep, _Period>& __d) { - basic_ostringstream<_CharT, _Traits> __s; - __s.flags(__os.flags()); - __s.imbue(__os.getloc()); - __s.precision(__os.precision()); - __s << __d.count() << chrono::__units_suffix<_CharT, _Period>(); - return __os << __s.str(); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const day& __d) { - return __os << (__d.ok() ? std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:%d}"), __d) - // Note this error differs from the wording of the Standard. The - // Standard wording doesn't work well on AIX or Windows. There - // the formatted day seems to be either modulo 100 or completely - // omitted. Judging by the wording this is valid. - // TODO FMT Write a paper of file an LWG issue. - : std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:02} is not a valid day"), - static_cast(__d))); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const month& __m) { - return __os << (__m.ok() ? std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%b}"), __m) - : std::format(__os.getloc(), - _LIBCPP_STATICALLY_WIDEN(_CharT, "{} is not a valid month"), - static_cast(__m))); // TODO FMT Standard mandated locale isn't used. -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year& __y) { - return __os << (__y.ok() ? std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:%Y}"), __y) - : std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:%Y} is not a valid year"), __y)); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const weekday& __wd) { - return __os << (__wd.ok() ? std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%a}"), __wd) - : std::format(__os.getloc(), // TODO FMT Standard mandated locale isn't used. - _LIBCPP_STATICALLY_WIDEN(_CharT, "{} is not a valid weekday"), - static_cast(__wd.c_encoding()))); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const weekday_indexed& __wdi) { - auto __i = __wdi.index(); - return __os << (__i >= 1 && __i <= 5 - ? std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}[{}]"), __wdi.weekday(), __i) - : std::format(__os.getloc(), - _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}[{} is not a valid index]"), - __wdi.weekday(), - __i)); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const weekday_last& __wdl) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}[last]"), __wdl.weekday()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const month_day& __md) { - // TODO FMT The Standard allows 30th of February to be printed. - // It would be nice to show an error message instead. - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}/{}"), __md.month(), __md.day()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const month_day_last& __mdl) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}/last"), __mdl.month()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const month_weekday& __mwd) { - return __os << std::format( - __os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}/{:L}"), __mwd.month(), __mwd.weekday_indexed()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const month_weekday_last& __mwdl) { - return __os << std::format( - __os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L}/{:L}"), __mwdl.month(), __mwdl.weekday_last()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year_month& __ym) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{}/{:L}"), __ym.year(), __ym.month()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year_month_day& __ymd) { - return __os << (__ymd.ok() ? std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:%F}"), __ymd) - : std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{:%F} is not a valid date"), __ymd)); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year_month_day_last& __ymdl) { - return __os << std::format( - __os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{}/{:L}"), __ymdl.year(), __ymdl.month_day_last()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year_month_weekday& __ymwd) { - return __os << std::format( - __os.getloc(), - _LIBCPP_STATICALLY_WIDEN(_CharT, "{}/{:L}/{:L}"), - __ymwd.year(), - __ymwd.month(), - __ymwd.weekday_indexed()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const year_month_weekday_last& __ymwdl) { - return __os << std::format( - __os.getloc(), - _LIBCPP_STATICALLY_WIDEN(_CharT, "{}/{:L}/{:L}"), - __ymwdl.year(), - __ymwdl.month(), - __ymwdl.weekday_last()); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const hh_mm_ss<_Duration> __hms) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%T}"), __hms); -} - -# if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const sys_info& __info) { - // __info.abbrev is always std::basic_string. - // Since these strings typically are short the conversion should be cheap. - std::basic_string<_CharT> __abbrev{__info.abbrev.begin(), __info.abbrev.end()}; - return __os << std::format( - _LIBCPP_STATICALLY_WIDEN(_CharT, "[{:%F %T}, {:%F %T}) {:%T} {:%Q%q} \"{}\""), - __info.begin, - __info.end, - hh_mm_ss{__info.offset}, - __info.save, - __abbrev); -} - -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const local_info& __info) { - auto __result = [&]() -> basic_string<_CharT> { - switch (__info.result) { - case local_info::unique: - return _LIBCPP_STATICALLY_WIDEN(_CharT, "unique"); - case local_info::nonexistent: - return _LIBCPP_STATICALLY_WIDEN(_CharT, "non-existent"); - case local_info::ambiguous: - return _LIBCPP_STATICALLY_WIDEN(_CharT, "ambiguous"); - - default: - return std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "unspecified result ({})"), __info.result); - }; - }; - - return __os << std::format( - _LIBCPP_STATICALLY_WIDEN(_CharT, "{}: {{{}, {}}}"), __result(), __info.first, __info.second); -} - -# if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM -template -_LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, const zoned_time<_Duration, _TimeZonePtr>& __tp) { - return __os << std::format(__os.getloc(), _LIBCPP_STATICALLY_WIDEN(_CharT, "{:L%F %T %Z}"), __tp); -} -# endif -# endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -} // namespace chrono - -# endif // if _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_LOCALIZATION - -#endif // _LIBCPP___CHRONO_OSTREAM_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/parser_std_format_spec.h b/third_party/libcxx/include/c++/v1/__chrono/parser_std_format_spec.h deleted file mode 100644 index 8ecc19f..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/parser_std_format_spec.h +++ /dev/null @@ -1,421 +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___CHRONO_PARSER_STD_FORMAT_SPEC_H -#define _LIBCPP___CHRONO_PARSER_STD_FORMAT_SPEC_H - -#include <__config> - -#if _LIBCPP_HAS_LOCALIZATION - -# include <__format/concepts.h> -# include <__format/format_error.h> -# include <__format/format_parse_context.h> -# include <__format/formatter_string.h> -# include <__format/parser_std_format_spec.h> -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace __format_spec { - -// By not placing this constant in the formatter class it's not duplicated for char and wchar_t -inline constexpr __fields __fields_chrono_fractional{ - .__precision_ = true, .__locale_specific_form_ = true, .__type_ = false}; -inline constexpr __fields __fields_chrono{.__locale_specific_form_ = true, .__type_ = false}; - -/// Flags available or required in a chrono type. -/// -/// The caller of the chrono formatter lists the types it has available and the -/// validation tests whether the requested type spec (e.g. %M) is available in -/// the formatter. -/// When the type in the chrono-format-spec isn't present in the data a -/// \ref format_error is thrown. -enum class __flags { - __second = 0x1, - __minute = 0x2, - __hour = 0x4, - __time = __hour | __minute | __second, - - __day = 0x8, - __month = 0x10, - __year = 0x20, - - __weekday = 0x40, - - __month_day = __day | __month, - __month_weekday = __weekday | __month, - __year_month = __month | __year, - __date = __day | __month | __year | __weekday, - - __date_time = __date | __time, - - __duration = 0x80 | __time, - - __time_zone = 0x100, - - __clock = __date_time | __time_zone -}; - -_LIBCPP_HIDE_FROM_ABI constexpr __flags operator&(__flags __lhs, __flags __rhs) { - return static_cast<__flags>(static_cast(__lhs) & static_cast(__rhs)); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_second(__flags __flags) { - if ((__flags & __flags::__second) != __flags::__second) - std::__throw_format_error("The supplied date time doesn't contain a second"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_minute(__flags __flags) { - if ((__flags & __flags::__minute) != __flags::__minute) - std::__throw_format_error("The supplied date time doesn't contain a minute"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_hour(__flags __flags) { - if ((__flags & __flags::__hour) != __flags::__hour) - std::__throw_format_error("The supplied date time doesn't contain an hour"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_time(__flags __flags) { - if ((__flags & __flags::__time) != __flags::__time) - std::__throw_format_error("The supplied date time doesn't contain a time"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_day(__flags __flags) { - if ((__flags & __flags::__day) != __flags::__day) - std::__throw_format_error("The supplied date time doesn't contain a day"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_month(__flags __flags) { - if ((__flags & __flags::__month) != __flags::__month) - std::__throw_format_error("The supplied date time doesn't contain a month"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_year(__flags __flags) { - if ((__flags & __flags::__year) != __flags::__year) - std::__throw_format_error("The supplied date time doesn't contain a year"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_date(__flags __flags) { - if ((__flags & __flags::__date) != __flags::__date) - std::__throw_format_error("The supplied date time doesn't contain a date"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_date_or_duration(__flags __flags) { - if (((__flags & __flags::__date) != __flags::__date) && ((__flags & __flags::__duration) != __flags::__duration)) - std::__throw_format_error("The supplied date time doesn't contain a date or duration"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_date_time(__flags __flags) { - if ((__flags & __flags::__date_time) != __flags::__date_time) - std::__throw_format_error("The supplied date time doesn't contain a date and time"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_weekday(__flags __flags) { - if ((__flags & __flags::__weekday) != __flags::__weekday) - std::__throw_format_error("The supplied date time doesn't contain a weekday"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_duration(__flags __flags) { - if ((__flags & __flags::__duration) != __flags::__duration) - std::__throw_format_error("The supplied date time doesn't contain a duration"); -} - -_LIBCPP_HIDE_FROM_ABI constexpr void __validate_time_zone(__flags __flags) { - if ((__flags & __flags::__time_zone) != __flags::__time_zone) - std::__throw_format_error("The supplied date time doesn't contain a time zone"); -} - -template -class __parser_chrono { - using _ConstIterator _LIBCPP_NODEBUG = typename basic_format_parse_context<_CharT>::const_iterator; - -public: - template - _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator - __parse(_ParseContext& __ctx, __fields __fields, __flags __flags) { - _ConstIterator __begin = __parser_.__parse(__ctx, __fields); - _ConstIterator __end = __ctx.end(); - if (__begin == __end) - return __begin; - - _ConstIterator __last = __parse_chrono_specs(__begin, __end, __flags); - __chrono_specs_ = basic_string_view<_CharT>{__begin, __last}; - - return __last; - } - - __parser<_CharT> __parser_; - basic_string_view<_CharT> __chrono_specs_; - -private: - _LIBCPP_HIDE_FROM_ABI constexpr _ConstIterator - __parse_chrono_specs(_ConstIterator __begin, _ConstIterator __end, __flags __flags) { - _LIBCPP_ASSERT_INTERNAL(__begin != __end, - "When called with an empty input the function will cause " - "undefined behavior by evaluating data not in the input"); - - if (*__begin != _CharT('%') && *__begin != _CharT('}')) - std::__throw_format_error("The format specifier expects a '%' or a '}'"); - - do { - switch (*__begin) { - case _CharT('{'): - std::__throw_format_error("The chrono specifiers contain a '{'"); - - case _CharT('}'): - return __begin; - - case _CharT('%'): - __parse_conversion_spec(__begin, __end, __flags); - [[fallthrough]]; - - default: - // All other literals - ++__begin; - } - - } while (__begin != __end && *__begin != _CharT('}')); - - return __begin; - } - - /// \pre *__begin == '%' - /// \post __begin points at the end parsed conversion-spec - _LIBCPP_HIDE_FROM_ABI constexpr void - __parse_conversion_spec(_ConstIterator& __begin, _ConstIterator __end, __flags __flags) { - ++__begin; - if (__begin == __end) - std::__throw_format_error("End of input while parsing a conversion specifier"); - - switch (*__begin) { - case _CharT('n'): - case _CharT('t'): - case _CharT('%'): - break; - - case _CharT('S'): - __format_spec::__validate_second(__flags); - break; - - case _CharT('M'): - __format_spec::__validate_minute(__flags); - break; - - case _CharT('p'): // TODO FMT does the formater require an hour or a time? - case _CharT('H'): - case _CharT('I'): - __parser_.__hour_ = true; - __validate_hour(__flags); - break; - - case _CharT('r'): - case _CharT('R'): - case _CharT('T'): - case _CharT('X'): - __parser_.__hour_ = true; - __format_spec::__validate_time(__flags); - break; - - case _CharT('d'): - case _CharT('e'): - __format_spec::__validate_day(__flags); - break; - - case _CharT('b'): - case _CharT('h'): - case _CharT('B'): - __parser_.__month_name_ = true; - [[fallthrough]]; - case _CharT('m'): - __format_spec::__validate_month(__flags); - break; - - case _CharT('y'): - case _CharT('C'): - case _CharT('Y'): - __format_spec::__validate_year(__flags); - break; - - case _CharT('j'): - __parser_.__day_of_year_ = true; - __format_spec::__validate_date_or_duration(__flags); - break; - - case _CharT('g'): - case _CharT('G'): - case _CharT('U'): - case _CharT('V'): - case _CharT('W'): - __parser_.__week_of_year_ = true; - [[fallthrough]]; - case _CharT('x'): - case _CharT('D'): - case _CharT('F'): - __format_spec::__validate_date(__flags); - break; - - case _CharT('c'): - __format_spec::__validate_date_time(__flags); - break; - - case _CharT('a'): - case _CharT('A'): - __parser_.__weekday_name_ = true; - [[fallthrough]]; - case _CharT('u'): - case _CharT('w'): - __parser_.__weekday_ = true; - __validate_weekday(__flags); - __format_spec::__validate_weekday(__flags); - break; - - case _CharT('q'): - case _CharT('Q'): - __format_spec::__validate_duration(__flags); - break; - - case _CharT('E'): - __parse_modifier_E(__begin, __end, __flags); - break; - - case _CharT('O'): - __parse_modifier_O(__begin, __end, __flags); - break; - - case _CharT('z'): - case _CharT('Z'): - // Currently there's no time zone information. However some clocks have a - // hard-coded "time zone", for these clocks the information can be used. - // TODO FMT implement time zones. - __format_spec::__validate_time_zone(__flags); - break; - - default: // unknown type; - std::__throw_format_error("The date time type specifier is invalid"); - } - } - - /// \pre *__begin == 'E' - /// \post __begin is incremented by one. - _LIBCPP_HIDE_FROM_ABI constexpr void - __parse_modifier_E(_ConstIterator& __begin, _ConstIterator __end, __flags __flags) { - ++__begin; - if (__begin == __end) - std::__throw_format_error("End of input while parsing the modifier E"); - - switch (*__begin) { - case _CharT('X'): - __parser_.__hour_ = true; - __format_spec::__validate_time(__flags); - break; - - case _CharT('y'): - case _CharT('C'): - case _CharT('Y'): - __format_spec::__validate_year(__flags); - break; - - case _CharT('x'): - __format_spec::__validate_date(__flags); - break; - - case _CharT('c'): - __format_spec::__validate_date_time(__flags); - break; - - case _CharT('z'): - // Currently there's no time zone information. However some clocks have a - // hard-coded "time zone", for these clocks the information can be used. - // TODO FMT implement time zones. - __format_spec::__validate_time_zone(__flags); - break; - - default: - std::__throw_format_error("The date time type specifier for modifier E is invalid"); - } - } - - /// \pre *__begin == 'O' - /// \post __begin is incremented by one. - _LIBCPP_HIDE_FROM_ABI constexpr void - __parse_modifier_O(_ConstIterator& __begin, _ConstIterator __end, __flags __flags) { - ++__begin; - if (__begin == __end) - std::__throw_format_error("End of input while parsing the modifier O"); - - switch (*__begin) { - case _CharT('S'): - __format_spec::__validate_second(__flags); - break; - - case _CharT('M'): - __format_spec::__validate_minute(__flags); - break; - - case _CharT('I'): - case _CharT('H'): - __parser_.__hour_ = true; - __format_spec::__validate_hour(__flags); - break; - - case _CharT('d'): - case _CharT('e'): - __format_spec::__validate_day(__flags); - break; - - case _CharT('m'): - __format_spec::__validate_month(__flags); - break; - - case _CharT('y'): - __format_spec::__validate_year(__flags); - break; - - case _CharT('U'): - case _CharT('V'): - case _CharT('W'): - __parser_.__week_of_year_ = true; - __format_spec::__validate_date(__flags); - break; - - case _CharT('u'): - case _CharT('w'): - __parser_.__weekday_ = true; - __format_spec::__validate_weekday(__flags); - break; - - case _CharT('z'): - // Currently there's no time zone information. However some clocks have a - // hard-coded "time zone", for these clocks the information can be used. - // TODO FMT implement time zones. - __format_spec::__validate_time_zone(__flags); - break; - - default: - std::__throw_format_error("The date time type specifier for modifier O is invalid"); - } - } -}; - -} // namespace __format_spec - -# endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_LOCALIZATION - -#endif // _LIBCPP___CHRONO_PARSER_STD_FORMAT_SPEC_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/statically_widen.h b/third_party/libcxx/include/c++/v1/__chrono/statically_widen.h deleted file mode 100644 index 40e0856..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/statically_widen.h +++ /dev/null @@ -1,52 +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___CHRONO_STATICALLY_WIDEN_H -#define _LIBCPP___CHRONO_STATICALLY_WIDEN_H - -// Implements the STATICALLY-WIDEN exposition-only function. ([time.general]/2) - -#include <__concepts/same_as.h> -#include <__config> -#include <__format/concepts.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -# if _LIBCPP_HAS_WIDE_CHARACTERS -template <__fmt_char_type _CharT> -_LIBCPP_HIDE_FROM_ABI constexpr const _CharT* __statically_widen(const char* __str, const wchar_t* __wstr) { - if constexpr (same_as<_CharT, char>) - return __str; - else - return __wstr; -} -# define _LIBCPP_STATICALLY_WIDEN(_CharT, __str) ::std::__statically_widen<_CharT>(__str, L##__str) -# else // _LIBCPP_HAS_WIDE_CHARACTERS - -// Without this indirection the unit test test/libcxx/modules_include.sh.cpp -// fails for the CI build "No wide characters". This seems like a bug. -// TODO FMT investigate why this is needed. -template <__fmt_char_type _CharT> -_LIBCPP_HIDE_FROM_ABI constexpr const _CharT* __statically_widen(const char* __str) { - return __str; -} -# define _LIBCPP_STATICALLY_WIDEN(_CharT, __str) ::std::__statically_widen<_CharT>(__str) -# endif // _LIBCPP_HAS_WIDE_CHARACTERS - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHRONO_STATICALLY_WIDEN_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/steady_clock.h b/third_party/libcxx/include/c++/v1/__chrono/steady_clock.h deleted file mode 100644 index 8e68c9a..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/steady_clock.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___CHRONO_STEADY_CLOCK_H -#define _LIBCPP___CHRONO_STEADY_CLOCK_H - -#include <__chrono/duration.h> -#include <__chrono/time_point.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -#if _LIBCPP_HAS_MONOTONIC_CLOCK -class _LIBCPP_EXPORTED_FROM_ABI steady_clock { -public: - typedef nanoseconds duration; - typedef duration::rep rep; - typedef duration::period period; - typedef chrono::time_point time_point; - static _LIBCPP_CONSTEXPR_SINCE_CXX14 const bool is_steady = true; - - [[__nodiscard__]] static time_point now() _NOEXCEPT; -}; -#endif - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHRONO_STEADY_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/sys_info.h b/third_party/libcxx/include/c++/v1/__chrono/sys_info.h deleted file mode 100644 index 81e37f2..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/sys_info.h +++ /dev/null @@ -1,51 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_SYS_INFO_H -#define _LIBCPP___CHRONO_SYS_INFO_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/duration.h> -# include <__chrono/system_clock.h> -# include <__chrono/time_point.h> -# include <__config> -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 - -namespace chrono { - -struct sys_info { - sys_seconds begin; - sys_seconds end; - seconds offset; - minutes save; - string abbrev; -}; - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_SYS_INFO_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/system_clock.h b/third_party/libcxx/include/c++/v1/__chrono/system_clock.h deleted file mode 100644 index e3ef75a..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/system_clock.h +++ /dev/null @@ -1,52 +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___CHRONO_SYSTEM_CLOCK_H -#define _LIBCPP___CHRONO_SYSTEM_CLOCK_H - -#include <__chrono/duration.h> -#include <__chrono/time_point.h> -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class _LIBCPP_EXPORTED_FROM_ABI system_clock { -public: - typedef microseconds duration; - typedef duration::rep rep; - typedef duration::period period; - typedef chrono::time_point time_point; - static _LIBCPP_CONSTEXPR_SINCE_CXX14 const bool is_steady = false; - - [[__nodiscard__]] static time_point now() _NOEXCEPT; - [[__nodiscard__]] static time_t to_time_t(const time_point& __t) _NOEXCEPT; - [[__nodiscard__]] static time_point from_time_t(time_t __t) _NOEXCEPT; -}; - -#if _LIBCPP_STD_VER >= 20 - -template -using sys_time = time_point; -using sys_seconds = sys_time; -using sys_days = sys_time; - -#endif - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CHRONO_SYSTEM_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/tai_clock.h b/third_party/libcxx/include/c++/v1/__chrono/tai_clock.h deleted file mode 100644 index 14c8b70..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/tai_clock.h +++ /dev/null @@ -1,108 +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___CHRONO_TAI_CLOCK_H -#define _LIBCPP___CHRONO_TAI_CLOCK_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__assert> -# include <__chrono/duration.h> -# include <__chrono/time_point.h> -# include <__chrono/utc_clock.h> -# include <__config> -# include <__type_traits/common_type.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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -class tai_clock; - -template -using tai_time = time_point; -using tai_seconds = tai_time; - -// [time.clock.tai.overview]/1 -// The clock tai_clock measures seconds since 1958-01-01 00:00:00 and is -// offset 10s ahead of UTC at this date. That is, 1958-01-01 00:00:00 TAI is -// equivalent to 1957-12-31 23:59:50 UTC. Leap seconds are not inserted into -// TAI. Therefore every time a leap second is inserted into UTC, UTC shifts -// another second with respect to TAI. For example by 2000-01-01 there had -// been 22 positive and 0 negative leap seconds inserted so 2000-01-01 -// 00:00:00 UTC is equivalent to 2000-01-01 00:00:32 TAI (22s plus the -// initial 10s offset). -// -// Note this does not specify what the UTC offset before 1958-01-01 00:00:00 -// TAI is, nor does it follow the "real" TAI clock between 1958-01-01 and the -// start of the UTC epoch. So while the member functions are fully specified in -// the standard, they do not technically follow the "real-world" TAI clock with -// 100% accuracy. -// -// https://koka-lang.github.io/koka/doc/std_time_utc.html contains more -// information and references. -class tai_clock { -public: - using rep = utc_clock::rep; - using period = utc_clock::period; - using duration = chrono::duration; - using time_point = chrono::time_point; - static constexpr bool is_steady = false; // The utc_clock is not steady. - - // The static difference between UTC and TAI time. - static constexpr chrono::seconds __offset{378691210}; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static time_point now() { return from_utc(utc_clock::now()); } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static utc_time> - to_utc(const tai_time<_Duration>& __time) noexcept { - using _Rp = common_type_t<_Duration, seconds>; - _Duration __time_since_epoch = __time.time_since_epoch(); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__time_since_epoch >= utc_time<_Rp>::min().time_since_epoch() + __offset, - "the TAI to UTC conversion would underflow"); - - return utc_time<_Rp>{__time_since_epoch - __offset}; - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static tai_time> - from_utc(const utc_time<_Duration>& __time) noexcept { - using _Rp = common_type_t<_Duration, seconds>; - _Duration __time_since_epoch = __time.time_since_epoch(); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(__time_since_epoch <= utc_time<_Rp>::max().time_since_epoch() - __offset, - "the UTC to TAI conversion would overflow"); - - return tai_time<_Rp>{__time_since_epoch + __offset}; - } -}; - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_TAI_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/time_point.h b/third_party/libcxx/include/c++/v1/__chrono/time_point.h deleted file mode 100644 index d393e34..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/time_point.h +++ /dev/null @@ -1,255 +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___CHRONO_TIME_POINT_H -#define _LIBCPP___CHRONO_TIME_POINT_H - -#include <__chrono/duration.h> -#include <__compare/ordering.h> -#include <__compare/three_way_comparable.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> -#include <__type_traits/common_type.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_convertible.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -template -class time_point { - static_assert(__is_duration_v<_Duration>, "Second template parameter of time_point must be a std::chrono::duration"); - -public: - typedef _Clock clock; - typedef _Duration duration; - typedef typename duration::rep rep; - typedef typename duration::period period; - -private: - duration __d_; - -public: - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 time_point() : __d_(duration::zero()) {} - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit time_point(const duration& __d) : __d_(__d) {} - - // conversions - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 time_point(const time_point& __t) - : __d_(__t.time_since_epoch()) {} - - // observer - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 duration time_since_epoch() const { - return __d_; - } - - // arithmetic - -#if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI constexpr time_point& operator++() { - ++__d_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI constexpr time_point operator++(int) { return time_point{__d_++}; } - _LIBCPP_HIDE_FROM_ABI constexpr time_point& operator--() { - --__d_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI constexpr time_point operator--(int) { return time_point{__d_--}; } -#endif // _LIBCPP_STD_VER >= 20 - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 time_point& operator+=(const duration& __d) { - __d_ += __d; - return *this; - } - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 time_point& operator-=(const duration& __d) { - __d_ -= __d; - return *this; - } - - // special values - - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR time_point min() _NOEXCEPT { - return time_point(duration::min()); - } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR time_point max() _NOEXCEPT { - return time_point(duration::max()); - } -}; - -} // namespace chrono - -template -struct common_type, chrono::time_point<_Clock, _Duration2> > { - typedef chrono::time_point<_Clock, typename common_type<_Duration1, _Duration2>::type> type; -}; - -namespace chrono { - -template , int> = 0> -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 time_point<_Clock, _ToDuration> -time_point_cast(const time_point<_Clock, _Duration>& __t) { - return time_point<_Clock, _ToDuration>(chrono::duration_cast<_ToDuration>(__t.time_since_epoch())); -} - -#if _LIBCPP_STD_VER >= 17 -template , int> = 0> -[[nodiscard]] inline - _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> floor(const time_point<_Clock, _Duration>& __t) { - return time_point<_Clock, _ToDuration>{chrono::floor<_ToDuration>(__t.time_since_epoch())}; -} - -template , int> = 0> -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> -ceil(const time_point<_Clock, _Duration>& __t) { - return time_point<_Clock, _ToDuration>{chrono::ceil<_ToDuration>(__t.time_since_epoch())}; -} - -template , int> = 0> -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> -round(const time_point<_Clock, _Duration>& __t) { - return time_point<_Clock, _ToDuration>{chrono::round<_ToDuration>(__t.time_since_epoch())}; -} - -template ::is_signed, int> = 0> -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr duration<_Rep, _Period> abs(duration<_Rep, _Period> __d) { - return __d >= __d.zero() ? +__d : -__d; -} -#endif // _LIBCPP_STD_VER >= 17 - -// time_point == - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator==(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() == __rhs.time_since_epoch(); -} - -#if _LIBCPP_STD_VER <= 17 - -// time_point != - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator!=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__lhs == __rhs); -} - -#endif // _LIBCPP_STD_VER <= 17 - -// time_point < - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator<(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() < __rhs.time_since_epoch(); -} - -// time_point > - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator>(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __rhs < __lhs; -} - -// time_point <= - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator<=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__rhs < __lhs); -} - -// time_point >= - -template -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool -operator>=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__lhs < __rhs); -} - -#if _LIBCPP_STD_VER >= 20 - -template _Duration2> -_LIBCPP_HIDE_FROM_ABI constexpr auto -operator<=>(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() <=> __rhs.time_since_epoch(); -} - -#endif // _LIBCPP_STD_VER >= 20 - -// time_point operator+(time_point x, duration y); - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX14 time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> -operator+(const time_point<_Clock, _Duration1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> _Tr; - return _Tr(__lhs.time_since_epoch() + __rhs); -} - -// time_point operator+(duration x, time_point y); - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX14 time_point<_Clock, typename common_type, _Duration2>::type> -operator+(const duration<_Rep1, _Period1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __rhs + __lhs; -} - -// time_point operator-(time_point x, duration y); - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_CONSTEXPR_SINCE_CXX14 time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> -operator-(const time_point<_Clock, _Duration1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> _Ret; - return _Ret(__lhs.time_since_epoch() - __rhs); -} - -// duration operator-(time_point x, time_point y); - -template -[[__nodiscard__]] inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 -typename common_type<_Duration1, _Duration2>::type -operator-(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() - __rhs.time_since_epoch(); -} - -} // namespace chrono - -#if _LIBCPP_STD_VER >= 26 - -template - requires __has_enabled_hash<_Duration>::value -struct hash> { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::time_point<_Clock, _Duration>& __tp) { - return hash<_Duration>{}(__tp.time_since_epoch()); - } -}; - -#endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHRONO_TIME_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/time_zone.h b/third_party/libcxx/include/c++/v1/__chrono/time_zone.h deleted file mode 100644 index d18d59d..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/time_zone.h +++ /dev/null @@ -1,185 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_TIME_ZONE_H -#define _LIBCPP___CHRONO_TIME_ZONE_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/calendar.h> -# include <__chrono/duration.h> -# include <__chrono/exception.h> -# include <__chrono/local_info.h> -# include <__chrono/sys_info.h> -# include <__chrono/system_clock.h> -# include <__compare/strong_order.h> -# include <__config> -# include <__memory/unique_ptr.h> -# include <__type_traits/common_type.h> -# include - -# 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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -enum class choose { earliest, latest }; - -class _LIBCPP_AVAILABILITY_TZDB time_zone { - _LIBCPP_HIDE_FROM_ABI time_zone() = default; - -public: - class __impl; // public so it can be used by make_unique. - - // The "constructor". - // - // The default constructor is private to avoid the constructor from being - // part of the ABI. Instead use an __ugly_named function as an ABI interface, - // since that gives us the ability to change it in the future. - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI static time_zone __create(unique_ptr<__impl>&& __p); - - _LIBCPP_EXPORTED_FROM_ABI ~time_zone(); - - _LIBCPP_HIDE_FROM_ABI time_zone(time_zone&&) = default; - _LIBCPP_HIDE_FROM_ABI time_zone& operator=(time_zone&&) = default; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI string_view name() const noexcept { return __name(); } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI sys_info get_info(const sys_time<_Duration>& __time) const { - return __get_info(chrono::time_point_cast(__time)); - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI local_info get_info(const local_time<_Duration>& __time) const { - return __get_info(chrono::time_point_cast(__time)); - } - - // We don't apply nodiscard here since this function throws on many inputs, - // so it could be used as a validation. - template - _LIBCPP_HIDE_FROM_ABI sys_time> to_sys(const local_time<_Duration>& __time) const { - local_info __info = get_info(__time); - switch (__info.result) { - case local_info::unique: - return sys_time>{__time.time_since_epoch() - __info.first.offset}; - - case local_info::nonexistent: - chrono::__throw_nonexistent_local_time(__time, __info); - - case local_info::ambiguous: - chrono::__throw_ambiguous_local_time(__time, __info); - } - - // TODO TZDB The Standard does not specify anything in these cases. - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.result != -1, "cannot convert the local time; it would be before the minimum system clock value"); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.result != -2, "cannot convert the local time; it would be after the maximum system clock value"); - - return {}; - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI sys_time> - to_sys(const local_time<_Duration>& __time, choose __z) const { - local_info __info = get_info(__time); - switch (__info.result) { - case local_info::unique: // first and second are the same - return sys_time>{__time.time_since_epoch() - __info.first.offset}; - - case local_info::nonexistent: - // first and second are the same - // All non-existing values are converted to the same time. - return sys_time>{__info.first.end}; - - case local_info::ambiguous: - switch (__z) { - case choose::earliest: - return sys_time>{__time.time_since_epoch() - __info.first.offset}; - - case choose::latest: - return sys_time>{__time.time_since_epoch() - __info.second.offset}; - - // Note a value out of bounds is not specified. - } - } - - // TODO TZDB The standard does not specify anything in these cases. - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.result != -1, "cannot convert the local time; it would be before the minimum system clock value"); - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.result != -2, "cannot convert the local time; it would be after the maximum system clock value"); - - return {}; - } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI local_time> - to_local(const sys_time<_Duration>& __time) const { - using _Dp = common_type_t<_Duration, seconds>; - - sys_info __info = get_info(__time); - - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.offset >= chrono::seconds{0} || __time.time_since_epoch() >= _Dp::min() - __info.offset, - "cannot convert the system time; it would be before the minimum local clock value"); - - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - __info.offset <= chrono::seconds{0} || __time.time_since_epoch() <= _Dp::max() - __info.offset, - "cannot convert the system time; it would be after the maximum local clock value"); - - return local_time<_Dp>{__time.time_since_epoch() + __info.offset}; - } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const __impl& __implementation() const noexcept { return *__impl_; } - -private: - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI string_view __name() const noexcept; - - [[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI sys_info __get_info(sys_seconds __time) const; - [[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI local_info __get_info(local_seconds __time) const; - - unique_ptr<__impl> __impl_; -}; - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline bool -operator==(const time_zone& __x, const time_zone& __y) noexcept { - return __x.name() == __y.name(); -} - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline strong_ordering -operator<=>(const time_zone& __x, const time_zone& __y) noexcept { - return __x.name() <=> __y.name(); -} - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_TIME_ZONE_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/time_zone_link.h b/third_party/libcxx/include/c++/v1/__chrono/time_zone_link.h deleted file mode 100644 index cae40b0..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/time_zone_link.h +++ /dev/null @@ -1,79 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_TIME_ZONE_LINK_H -#define _LIBCPP___CHRONO_TIME_ZONE_LINK_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__compare/strong_order.h> -# include <__config> -# include <__utility/private_constructor_tag.h> -# include -# include - -# 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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -class time_zone_link { -public: - [[nodiscard]] - _LIBCPP_HIDE_FROM_ABI explicit time_zone_link(__private_constructor_tag, string_view __name, string_view __target) - : __name_{__name}, __target_{__target} {} - - _LIBCPP_HIDE_FROM_ABI time_zone_link(time_zone_link&&) = default; - _LIBCPP_HIDE_FROM_ABI time_zone_link& operator=(time_zone_link&&) = default; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI string_view name() const noexcept { return __name_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI string_view target() const noexcept { return __target_; } - -private: - string __name_; - // TODO TZDB instead of the name we can store the pointer to a zone. These - // pointers are immutable. This makes it possible to directly return a - // pointer in the time_zone in the 'locate_zone' function. - string __target_; -}; - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline bool -operator==(const time_zone_link& __x, const time_zone_link& __y) noexcept { - return __x.name() == __y.name(); -} - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline strong_ordering -operator<=>(const time_zone_link& __x, const time_zone_link& __y) noexcept { - return __x.name() <=> __y.name(); -} - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_TIME_ZONE_LINK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/tzdb.h b/third_party/libcxx/include/c++/v1/__chrono/tzdb.h deleted file mode 100644 index fb85f66..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/tzdb.h +++ /dev/null @@ -1,96 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_TZDB_H -#define _LIBCPP___CHRONO_TZDB_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__algorithm/ranges_lower_bound.h> -# include <__chrono/leap_second.h> -# include <__chrono/time_zone.h> -# include <__chrono/time_zone_link.h> -# include <__config> -# include <__memory/addressof.h> -# include <__vector/vector.h> -# include -# include -# include - -# 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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -struct tzdb { - string version; - vector zones; - vector links; - - vector leap_seconds; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const time_zone* __locate_zone(string_view __name) const { - if (const time_zone* __result = __find_in_zone(__name)) - return __result; - - if (auto __it = ranges::lower_bound(links, __name, {}, &time_zone_link::name); - __it != links.end() && __it->name() == __name) - if (const time_zone* __result = __find_in_zone(__it->target())) - return __result; - - return nullptr; - } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const time_zone* locate_zone(string_view __name) const { - if (const time_zone* __result = __locate_zone(__name)) - return __result; - - std::__throw_runtime_error("tzdb: requested time zone not found"); - } - - [[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI const time_zone* current_zone() const { - return __current_zone(); - } - -private: - _LIBCPP_HIDE_FROM_ABI const time_zone* __find_in_zone(string_view __name) const noexcept { - if (auto __it = ranges::lower_bound(zones, __name, {}, &time_zone::name); - __it != zones.end() && __it->name() == __name) - return std::addressof(*__it); - - return nullptr; - } - - [[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI const time_zone* __current_zone() const; -}; - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_TZDB_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/tzdb_list.h b/third_party/libcxx/include/c++/v1/__chrono/tzdb_list.h deleted file mode 100644 index 2b83a6d..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/tzdb_list.h +++ /dev/null @@ -1,108 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_TZDB_LIST_H -#define _LIBCPP___CHRONO_TZDB_LIST_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/time_zone.h> -# include <__chrono/tzdb.h> -# include <__config> -# include <__fwd/string.h> -# include -# include - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -// TODO TZDB -// Libc++ recently switched to only export __ugly_names from the dylib. -// Since the library is still experimental the functions in this header -// should be adapted to this new style. The other tzdb headers should be -// evaluated too. - -class _LIBCPP_AVAILABILITY_TZDB tzdb_list { -public: - class __impl; // public to allow construction in dylib - _LIBCPP_HIDE_FROM_ABI explicit tzdb_list(__impl* __p) : __impl_(__p) { - _LIBCPP_ASSERT_NON_NULL(__impl_ != nullptr, "initialized time_zone without a valid pimpl object"); - } - _LIBCPP_EXPORTED_FROM_ABI ~tzdb_list(); - - tzdb_list(const tzdb_list&) = delete; - tzdb_list& operator=(const tzdb_list&) = delete; - - using const_iterator = forward_list::const_iterator; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const tzdb& front() const noexcept { return __front(); } - - _LIBCPP_HIDE_FROM_ABI const_iterator erase_after(const_iterator __p) { return __erase_after(__p); } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const_iterator begin() const noexcept { return __begin(); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const_iterator end() const noexcept { return __end(); } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const noexcept { return __cbegin(); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI const_iterator cend() const noexcept { return __cend(); } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI __impl& __implementation() { return *__impl_; } - -private: - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const tzdb& __front() const noexcept; - - _LIBCPP_EXPORTED_FROM_ABI const_iterator __erase_after(const_iterator __p); - - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __begin() const noexcept; - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __end() const noexcept; - - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __cbegin() const noexcept; - [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __cend() const noexcept; - - __impl* __impl_; -}; - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI tzdb_list& get_tzdb_list(); - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline const tzdb& get_tzdb() { - return get_tzdb_list().front(); -} - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline const time_zone* locate_zone(string_view __name) { - return get_tzdb().locate_zone(__name); -} - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_HIDE_FROM_ABI inline const time_zone* current_zone() { - return get_tzdb().current_zone(); -} - -_LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI const tzdb& reload_tzdb(); - -[[nodiscard]] _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI string remote_version(); - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_TZDB_LIST_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/utc_clock.h b/third_party/libcxx/include/c++/v1/__chrono/utc_clock.h deleted file mode 100644 index 2207b89..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/utc_clock.h +++ /dev/null @@ -1,163 +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___CHRONO_UTC_CLOCK_H -#define _LIBCPP___CHRONO_UTC_CLOCK_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/duration.h> -# include <__chrono/leap_second.h> -# include <__chrono/system_clock.h> -# include <__chrono/time_point.h> -# include <__chrono/tzdb.h> -# include <__chrono/tzdb_list.h> -# include <__config> -# include <__type_traits/common_type.h> - -# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -# endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -class utc_clock; - -template -using utc_time = time_point; -using utc_seconds = utc_time; - -class utc_clock { -public: - using rep = system_clock::rep; - using period = system_clock::period; - using duration = chrono::duration; - using time_point = chrono::time_point; - static constexpr bool is_steady = false; // The system_clock is not steady. - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static time_point now() { return from_sys(system_clock::now()); } - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static sys_time> - to_sys(const utc_time<_Duration>& __time); - - template - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static utc_time> - from_sys(const sys_time<_Duration>& __time) { - using _Rp = utc_time>; - // TODO TZDB investigate optimizations. - // - // The leap second database stores all transitions, this mean to calculate - // the current number of leap seconds the code needs to iterate over all - // leap seconds to accumulate the sum. Then the sum can be used to determine - // the sys_time. Accessing the database involves acquiring a mutex. - // - // The historic entries in the database are immutable. Hard-coding these - // values in a table would allow: - // - To store the sum, allowing a binary search on the data. - // - Avoid acquiring a mutex. - // The disadvantage are: - // - A slightly larger code size. - // - // There are two optimization directions - // - hard-code the database and do a linear search for future entries. This - // search can start at the back, and should probably contain very few - // entries. (Adding leap seconds is quite rare and new release of libc++ - // can add the new entries; they are announced half a year before they are - // added.) - // - During parsing the leap seconds store an additional database in the - // dylib with the list of the sum of the leap seconds. In that case there - // can be a private function __get_utc_to_sys_table that returns the - // table. - // - // Note for to_sys there are no optimizations to be done; it uses - // get_leap_second_info. The function get_leap_second_info could benefit - // from optimizations as described above; again both options apply. - - // Both UTC and the system clock use the same epoch. The Standard - // specifies from 1970-01-01 even when UTC starts at - // 1972-01-01 00:00:10 TAI. So when the sys_time is before epoch we can be - // sure there both clocks return the same value. - - const tzdb& __tzdb = chrono::get_tzdb(); - _Rp __result{__time.time_since_epoch()}; - for (const auto& __leap_second : __tzdb.leap_seconds) { - if (__leap_second > __time) - return __result; - - __result += __leap_second.value(); - } - return __result; - } -}; - -struct leap_second_info { - bool is_leap_second; - seconds elapsed; -}; - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI leap_second_info get_leap_second_info(const utc_time<_Duration>& __time) { - const tzdb& __tzdb = chrono::get_tzdb(); - if (__tzdb.leap_seconds.empty()) [[unlikely]] - return {false, chrono::seconds{0}}; - - sys_seconds __sys{chrono::floor(__time).time_since_epoch()}; - seconds __elapsed{0}; - for (const auto& __leap_second : __tzdb.leap_seconds) { - if (__sys == __leap_second.date() + __elapsed) - // A time point may only be a leap second during a positive leap second - // insertion, since time points that occur during a (theoretical) - // negative leap second don't exist. - return {__leap_second.value() > 0s, __elapsed + __leap_second.value()}; - - if (__sys < __leap_second.date() + __elapsed) - return {false, __elapsed}; - - __elapsed += __leap_second.value(); - } - - return {false, __elapsed}; -} - -template -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI sys_time> -utc_clock::to_sys(const utc_time<_Duration>& __time) { - using _Dp = common_type_t<_Duration, seconds>; - leap_second_info __info = chrono::get_leap_second_info(__time); - - // [time.clock.utc.members]/2 - // Returns: A sys_time t, such that from_sys(t) == u if such a mapping - // exists. Otherwise u represents a time_point during a positive leap - // second insertion, the conversion counts that leap second as not - // inserted, and the last representable value of sys_time prior to the - // insertion of the leap second is returned. - sys_time> __result{__time.time_since_epoch() - __info.elapsed}; - if (__info.is_leap_second) - return chrono::floor(__result) + chrono::seconds{1} - _Dp{1}; - - return __result; -} - -} // namespace chrono - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_UTC_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/weekday.h b/third_party/libcxx/include/c++/v1/__chrono/weekday.h deleted file mode 100644 index 5e1065d..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/weekday.h +++ /dev/null @@ -1,202 +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___CHRONO_WEEKDAY_H -#define _LIBCPP___CHRONO_WEEKDAY_H - -#include <__chrono/calendar.h> -#include <__chrono/duration.h> -#include <__chrono/system_clock.h> -#include <__chrono/time_point.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class weekday_indexed; -class weekday_last; - -class weekday { -private: - unsigned char __wd_; - _LIBCPP_HIDE_FROM_ABI static constexpr unsigned char __weekday_from_days(int __days) noexcept; - -public: - weekday() = default; - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr weekday(unsigned __val) noexcept - : __wd_(static_cast(__val == 7 ? 0 : __val)) {} - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday(const sys_days& __sysd) noexcept - : __wd_(__weekday_from_days(__sysd.time_since_epoch().count())) {} - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr weekday(const local_days& __locd) noexcept - : __wd_(__weekday_from_days(__locd.time_since_epoch().count())) {} - - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday& operator++() noexcept { - __wd_ = (__wd_ == 6 ? 0 : __wd_ + 1); - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday operator++(int) noexcept { - weekday __tmp = *this; - ++(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday& operator--() noexcept { - __wd_ = (__wd_ == 0 ? 6 : __wd_ - 1); - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday operator--(int) noexcept { - weekday __tmp = *this; - --(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI constexpr weekday& operator+=(const days& __dd) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr weekday& operator-=(const days& __dd) noexcept; - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr unsigned c_encoding() const noexcept { return __wd_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr unsigned iso_encoding() const noexcept { - return __wd_ == 0u ? 7 : __wd_; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __wd_ <= 6; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr weekday_indexed operator[](unsigned __index) const noexcept; - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr weekday_last operator[](last_spec) const noexcept; -}; - -// https://howardhinnant.github.io/date_algorithms.html#weekday_from_days -_LIBCPP_HIDE_FROM_ABI inline constexpr unsigned char weekday::__weekday_from_days(int __days) noexcept { - return static_cast(static_cast(__days >= -4 ? (__days + 4) % 7 : (__days + 5) % 7 + 6)); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const weekday& __lhs, const weekday& __rhs) noexcept { - return __lhs.c_encoding() == __rhs.c_encoding(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr weekday -operator+(const weekday& __lhs, const days& __rhs) noexcept { - auto const __mu = static_cast(__lhs.c_encoding()) + __rhs.count(); - auto const __yr = (__mu >= 0 ? __mu : __mu - 6) / 7; - return weekday{static_cast(__mu - __yr * 7)}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr weekday -operator+(const days& __lhs, const weekday& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr weekday -operator-(const weekday& __lhs, const days& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr days -operator-(const weekday& __lhs, const weekday& __rhs) noexcept { - const int __wdu = __lhs.c_encoding() - __rhs.c_encoding(); - const int __wk = (__wdu >= 0 ? __wdu : __wdu - 6) / 7; - return days{__wdu - __wk * 7}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr weekday& weekday::operator+=(const days& __dd) noexcept { - *this = *this + __dd; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr weekday& weekday::operator-=(const days& __dd) noexcept { - *this = *this - __dd; - return *this; -} - -class weekday_indexed { -private: - chrono::weekday __wd_; - unsigned char __idx_; - -public: - weekday_indexed() = default; - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday_indexed(const chrono::weekday& __wdval, unsigned __idxval) noexcept - : __wd_{__wdval}, __idx_(__idxval) {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday weekday() const noexcept { return __wd_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr unsigned index() const noexcept { return __idx_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { - return __wd_.ok() && __idx_ >= 1 && __idx_ <= 5; - } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const weekday_indexed& __lhs, const weekday_indexed& __rhs) noexcept { - return __lhs.weekday() == __rhs.weekday() && __lhs.index() == __rhs.index(); -} - -class weekday_last { -private: - chrono::weekday __wd_; - -public: - _LIBCPP_HIDE_FROM_ABI explicit constexpr weekday_last(const chrono::weekday& __val) noexcept : __wd_{__val} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::weekday weekday() const noexcept { return __wd_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool ok() const noexcept { return __wd_.ok(); } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const weekday_last& __lhs, const weekday_last& __rhs) noexcept { - return __lhs.weekday() == __rhs.weekday(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr weekday_indexed weekday::operator[](unsigned __index) const noexcept { - return weekday_indexed{*this, __index}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr weekday_last weekday::operator[](last_spec) const noexcept { - return weekday_last{*this}; -} - -inline constexpr weekday Sunday{0}; -inline constexpr weekday Monday{1}; -inline constexpr weekday Tuesday{2}; -inline constexpr weekday Wednesday{3}; -inline constexpr weekday Thursday{4}; -inline constexpr weekday Friday{5}; -inline constexpr weekday Saturday{6}; - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::weekday& __w) noexcept { - return __w.c_encoding(); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::weekday_indexed& __wi) noexcept { - return std::__hash_combine(hash{}(__wi.weekday()), __wi.index()); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::weekday_last& __wl) noexcept { - return hash{}(__wl.weekday()); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_WEEKDAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/year.h b/third_party/libcxx/include/c++/v1/__chrono/year.h deleted file mode 100644 index 208d6eb..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/year.h +++ /dev/null @@ -1,131 +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___CHRONO_YEAR_H -#define _LIBCPP___CHRONO_YEAR_H - -#include <__chrono/duration.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__undef_macros> - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class year { -private: - short __y_; - -public: - year() = default; - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr year(int __val) noexcept : __y_(static_cast(__val)) {} - - _LIBCPP_HIDE_FROM_ABI inline constexpr year& operator++() noexcept { - ++__y_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr year operator++(int) noexcept { - year __tmp = *this; - ++(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr year& operator--() noexcept { - --__y_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr year operator--(int) noexcept { - year __tmp = *this; - --(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI constexpr year& operator+=(const years& __dy) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year& operator-=(const years& __dy) noexcept; - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year operator+() const noexcept { return *this; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year operator-() const noexcept { return year{-__y_}; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_leap() const noexcept { - return __y_ % 4 == 0 && (__y_ % 100 != 0 || __y_ % 400 == 0); - } - _LIBCPP_HIDE_FROM_ABI explicit inline constexpr operator int() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool ok() const noexcept; - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static inline constexpr year min() noexcept { return year{-32767}; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static inline constexpr year max() noexcept { return year{32767}; } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const year& __lhs, const year& __rhs) noexcept { - return static_cast(__lhs) == static_cast(__rhs); -} - -_LIBCPP_HIDE_FROM_ABI constexpr strong_ordering operator<=>(const year& __lhs, const year& __rhs) noexcept { - return static_cast(__lhs) <=> static_cast(__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year operator+(const year& __lhs, const years& __rhs) noexcept { - return year(static_cast(__lhs) + __rhs.count()); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year operator+(const years& __lhs, const year& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year operator-(const year& __lhs, const years& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr years operator-(const year& __lhs, const year& __rhs) noexcept { - return years{static_cast(__lhs) - static_cast(__rhs)}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year& year::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year& year::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI constexpr bool year::ok() const noexcept { - static_assert(static_cast(std::numeric_limits::max()) == static_cast(max())); - return static_cast(min()) <= __y_; -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year& __y) noexcept { - return static_cast(__y); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CHRONO_YEAR_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/year_month.h b/third_party/libcxx/include/c++/v1/__chrono/year_month.h deleted file mode 100644 index fdeeed1..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/year_month.h +++ /dev/null @@ -1,143 +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___CHRONO_YEAR_MONTH_H -#define _LIBCPP___CHRONO_YEAR_MONTH_H - -#include <__chrono/duration.h> -#include <__chrono/month.h> -#include <__chrono/year.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class year_month { - chrono::year __y_; - chrono::month __m_; - -public: - year_month() = default; - _LIBCPP_HIDE_FROM_ABI constexpr year_month(const chrono::year& __yval, const chrono::month& __mval) noexcept - : __y_{__yval}, __m_{__mval} {} - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::year year() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month& operator+=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month& operator-=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month& operator+=(const years& __dy) noexcept; - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month& operator-=(const years& __dy) noexcept; - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __y_.ok() && __m_.ok(); } -}; - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month operator/(const year& __y, const month& __m) noexcept { - return year_month{__y, __m}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month operator/(const year& __y, int __m) noexcept { - return year_month{__y, month(__m)}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const year_month& __lhs, const year_month& __rhs) noexcept { - return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering -operator<=>(const year_month& __lhs, const year_month& __rhs) noexcept { - if (auto __c = __lhs.year() <=> __rhs.year(); __c != 0) - return __c; - return __lhs.month() <=> __rhs.month(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator+(const year_month& __lhs, const months& __rhs) noexcept { - int __dmi = static_cast(static_cast(__lhs.month())) - 1 + __rhs.count(); - const int __dy = (__dmi >= 0 ? __dmi : __dmi - 11) / 12; - __dmi = __dmi - __dy * 12 + 1; - return (__lhs.year() + years(__dy)) / month(static_cast(__dmi)); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator+(const months& __lhs, const year_month& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator+(const year_month& __lhs, const years& __rhs) noexcept { - return (__lhs.year() + __rhs) / __lhs.month(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator+(const years& __lhs, const year_month& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr months -operator-(const year_month& __lhs, const year_month& __rhs) noexcept { - return (__lhs.year() - __rhs.year()) + - months(static_cast(__lhs.month()) - static_cast(__rhs.month())); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator-(const year_month& __lhs, const months& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month -operator-(const year_month& __lhs, const years& __rhs) noexcept { - return __lhs + -__rhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month& year_month::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month& year_month::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month& year_month::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month& year_month::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year_month& __ym) noexcept { - return std::__hash_combine(hash{}(__ym.year()), hash{}(__ym.month())); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_YEAR_MONTH_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/year_month_day.h b/third_party/libcxx/include/c++/v1/__chrono/year_month_day.h deleted file mode 100644 index b0149d3..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/year_month_day.h +++ /dev/null @@ -1,371 +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___CHRONO_YEAR_MONTH_DAY_H -#define _LIBCPP___CHRONO_YEAR_MONTH_DAY_H - -#include <__chrono/calendar.h> -#include <__chrono/day.h> -#include <__chrono/duration.h> -#include <__chrono/month.h> -#include <__chrono/monthday.h> -#include <__chrono/system_clock.h> -#include <__chrono/time_point.h> -#include <__chrono/year.h> -#include <__chrono/year_month.h> -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class year_month_day_last; - -class year_month_day { -private: - chrono::year __y_; - chrono::month __m_; - chrono::day __d_; - -public: - year_month_day() = default; - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day( - const chrono::year& __yval, const chrono::month& __mval, const chrono::day& __dval) noexcept - : __y_{__yval}, __m_{__mval}, __d_{__dval} {} - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day(const year_month_day_last& __ymdl) noexcept; - _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day(const sys_days& __sysd) noexcept - : year_month_day(__from_days(__sysd.time_since_epoch())) {} - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr year_month_day(const local_days& __locd) noexcept - : year_month_day(__from_days(__locd.time_since_epoch())) {} - - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day& operator+=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day& operator-=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day& operator+=(const years& __dy) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day& operator-=(const years& __dy) noexcept; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::year year() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::day day() const noexcept { return __d_; } - _LIBCPP_HIDE_FROM_ABI inline constexpr operator sys_days() const noexcept { return sys_days{__to_days()}; } - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr operator local_days() const noexcept { - return local_days{__to_days()}; - } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool ok() const noexcept; - - _LIBCPP_HIDE_FROM_ABI static constexpr year_month_day __from_days(days __d) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr days __to_days() const noexcept; -}; - -// https://howardhinnant.github.io/date_algorithms.html#civil_from_days -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day year_month_day::__from_days(days __d) noexcept { - static_assert(numeric_limits::digits >= 18, ""); - static_assert(numeric_limits::digits >= 20, ""); - const int __z = __d.count() + 719468; - const int __era = (__z >= 0 ? __z : __z - 146096) / 146097; - const unsigned __doe = static_cast(__z - __era * 146097); // [0, 146096] - const unsigned __yoe = (__doe - __doe / 1460 + __doe / 36524 - __doe / 146096) / 365; // [0, 399] - const int __yr = static_cast(__yoe) + __era * 400; - const unsigned __doy = __doe - (365 * __yoe + __yoe / 4 - __yoe / 100); // [0, 365] - const unsigned __mp = (5 * __doy + 2) / 153; // [0, 11] - const unsigned __dy = __doy - (153 * __mp + 2) / 5 + 1; // [1, 31] - const unsigned __mth = __mp + (__mp < 10 ? 3 : -9); // [1, 12] - return year_month_day{chrono::year{__yr + (__mth <= 2)}, chrono::month{__mth}, chrono::day{__dy}}; -} - -// https://howardhinnant.github.io/date_algorithms.html#days_from_civil -_LIBCPP_HIDE_FROM_ABI inline constexpr days year_month_day::__to_days() const noexcept { - static_assert(numeric_limits::digits >= 18, ""); - static_assert(numeric_limits::digits >= 20, ""); - - const int __yr = static_cast(__y_) - (__m_ <= February); - const unsigned __mth = static_cast(__m_); - const unsigned __dy = static_cast(__d_); - - const int __era = (__yr >= 0 ? __yr : __yr - 399) / 400; - const unsigned __yoe = static_cast(__yr - __era * 400); // [0, 399] - const unsigned __doy = (153 * (__mth + (__mth > 2 ? -3 : 9)) + 2) / 5 + __dy - 1; // [0, 365] - const unsigned __doe = __yoe * 365 + __yoe / 4 - __yoe / 100 + __doy; // [0, 146096] - return days{__era * 146097 + static_cast(__doe) - 719468}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const year_month_day& __lhs, const year_month_day& __rhs) noexcept { - return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month() && __lhs.day() == __rhs.day(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering -operator<=>(const year_month_day& __lhs, const year_month_day& __rhs) noexcept { - if (auto __c = __lhs.year() <=> __rhs.year(); __c != 0) - return __c; - if (auto __c = __lhs.month() <=> __rhs.month(); __c != 0) - return __c; - return __lhs.day() <=> __rhs.day(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(const year_month& __lhs, const day& __rhs) noexcept { - return year_month_day{__lhs.year(), __lhs.month(), __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(const year_month& __lhs, int __rhs) noexcept { - return __lhs / day(__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(const year& __lhs, const month_day& __rhs) noexcept { - return __lhs / __rhs.month() / __rhs.day(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(int __lhs, const month_day& __rhs) noexcept { - return year(__lhs) / __rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(const month_day& __lhs, const year& __rhs) noexcept { - return __rhs / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator/(const month_day& __lhs, int __rhs) noexcept { - return year(__rhs) / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator+(const year_month_day& __lhs, const months& __rhs) noexcept { - return (__lhs.year() / __lhs.month() + __rhs) / __lhs.day(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator+(const months& __lhs, const year_month_day& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator-(const year_month_day& __lhs, const months& __rhs) noexcept { - return __lhs + -__rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator+(const year_month_day& __lhs, const years& __rhs) noexcept { - return (__lhs.year() + __rhs) / __lhs.month() / __lhs.day(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator+(const years& __lhs, const year_month_day& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day -operator-(const year_month_day& __lhs, const years& __rhs) noexcept { - return __lhs + -__rhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day& year_month_day::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day& year_month_day::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day& year_month_day::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day& year_month_day::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -class year_month_day_last { -private: - chrono::year __y_; - chrono::month_day_last __mdl_; - -public: - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day_last(const year& __yval, const month_day_last& __mdlval) noexcept - : __y_{__yval}, __mdl_{__mdlval} {} - - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day_last& operator+=(const months& __m) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day_last& operator-=(const months& __m) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day_last& operator+=(const years& __y) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_day_last& operator-=(const years& __y) noexcept; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::year year() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __mdl_.month(); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month_day_last month_day_last() const noexcept { - return __mdl_; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::day day() const noexcept; - _LIBCPP_HIDE_FROM_ABI inline constexpr operator sys_days() const noexcept { - return sys_days{year() / month() / day()}; - } - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr operator local_days() const noexcept { - return local_days{year() / month() / day()}; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __y_.ok() && __mdl_.ok(); } -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr chrono::day year_month_day_last::day() const noexcept { - constexpr chrono::day __d[] = { - chrono::day(31), - chrono::day(28), - chrono::day(31), - chrono::day(30), - chrono::day(31), - chrono::day(30), - chrono::day(31), - chrono::day(31), - chrono::day(30), - chrono::day(31), - chrono::day(30), - chrono::day(31)}; - return (month() != February || !__y_.is_leap()) && month().ok() - ? __d[static_cast(month()) - 1] - : chrono::day{29}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const year_month_day_last& __lhs, const year_month_day_last& __rhs) noexcept { - return __lhs.year() == __rhs.year() && __lhs.month_day_last() == __rhs.month_day_last(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering -operator<=>(const year_month_day_last& __lhs, const year_month_day_last& __rhs) noexcept { - if (auto __c = __lhs.year() <=> __rhs.year(); __c != 0) - return __c; - return __lhs.month_day_last() <=> __rhs.month_day_last(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator/(const year_month& __lhs, last_spec) noexcept { - return year_month_day_last{__lhs.year(), month_day_last{__lhs.month()}}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator/(const year& __lhs, const month_day_last& __rhs) noexcept { - return year_month_day_last{__lhs, __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator/(int __lhs, const month_day_last& __rhs) noexcept { - return year_month_day_last{year{__lhs}, __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator/(const month_day_last& __lhs, const year& __rhs) noexcept { - return __rhs / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator/(const month_day_last& __lhs, int __rhs) noexcept { - return year{__rhs} / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator+(const year_month_day_last& __lhs, const months& __rhs) noexcept { - return (__lhs.year() / __lhs.month() + __rhs) / last; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator+(const months& __lhs, const year_month_day_last& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator-(const year_month_day_last& __lhs, const months& __rhs) noexcept { - return __lhs + (-__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator+(const year_month_day_last& __lhs, const years& __rhs) noexcept { - return year_month_day_last{__lhs.year() + __rhs, __lhs.month_day_last()}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator+(const years& __lhs, const year_month_day_last& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last -operator-(const year_month_day_last& __lhs, const years& __rhs) noexcept { - return __lhs + (-__rhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last& -year_month_day_last::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last& -year_month_day_last::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last& -year_month_day_last::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day_last& -year_month_day_last::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_day::year_month_day(const year_month_day_last& __ymdl) noexcept - : __y_{__ymdl.year()}, __m_{__ymdl.month()}, __d_{__ymdl.day()} {} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool year_month_day::ok() const noexcept { - if (!__y_.ok() || !__m_.ok()) - return false; - return chrono::day{1} <= __d_ && __d_ <= (__y_ / __m_ / last).day(); -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year_month_day& __ymd) noexcept { - return std::__hash_combine( - hash{}(__ymd.year()), - std::__hash_combine(hash{}(__ymd.month()), hash{}(__ymd.day()))); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year_month_day_last& __ymdl) noexcept { - return std::__hash_combine( - hash{}(__ymdl.year()), hash{}(__ymdl.month_day_last())); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_YEAR_MONTH_DAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/year_month_weekday.h b/third_party/libcxx/include/c++/v1/__chrono/year_month_weekday.h deleted file mode 100644 index eff472f..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/year_month_weekday.h +++ /dev/null @@ -1,325 +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___CHRONO_YEAR_MONTH_WEEKDAY_H -#define _LIBCPP___CHRONO_YEAR_MONTH_WEEKDAY_H - -#include <__chrono/calendar.h> -#include <__chrono/day.h> -#include <__chrono/duration.h> -#include <__chrono/month.h> -#include <__chrono/month_weekday.h> -#include <__chrono/system_clock.h> -#include <__chrono/time_point.h> -#include <__chrono/weekday.h> -#include <__chrono/year.h> -#include <__chrono/year_month.h> -#include <__chrono/year_month_day.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class year_month_weekday { - chrono::year __y_; - chrono::month __m_; - chrono::weekday_indexed __wdi_; - -public: - year_month_weekday() = default; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday( - const chrono::year& __yval, const chrono::month& __mval, const chrono::weekday_indexed& __wdival) noexcept - : __y_{__yval}, __m_{__mval}, __wdi_{__wdival} {} - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday(const sys_days& __sysd) noexcept - : year_month_weekday(__from_days(__sysd.time_since_epoch())) {} - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr year_month_weekday(const local_days& __locd) noexcept - : year_month_weekday(__from_days(__locd.time_since_epoch())) {} - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday& operator+=(const months&) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday& operator-=(const months&) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday& operator+=(const years&) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday& operator-=(const years&) noexcept; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::year year() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday weekday() const noexcept { - return __wdi_.weekday(); - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr unsigned index() const noexcept { return __wdi_.index(); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_indexed weekday_indexed() const noexcept { - return __wdi_; - } - - _LIBCPP_HIDE_FROM_ABI inline constexpr operator sys_days() const noexcept { return sys_days{__to_days()}; } - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr operator local_days() const noexcept { - return local_days{__to_days()}; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { - if (!__y_.ok() || !__m_.ok() || !__wdi_.ok()) - return false; - if (__wdi_.index() <= 4) - return true; - auto __nth_weekday_day = - __wdi_.weekday() - chrono::weekday{static_cast(__y_ / __m_ / 1)} + days{(__wdi_.index() - 1) * 7 + 1}; - return static_cast(__nth_weekday_day.count()) <= static_cast((__y_ / __m_ / last).day()); - } - - _LIBCPP_HIDE_FROM_ABI static constexpr year_month_weekday __from_days(days __d) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr days __to_days() const noexcept; -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday year_month_weekday::__from_days(days __d) noexcept { - const sys_days __sysd{__d}; - const chrono::weekday __wd = chrono::weekday(__sysd); - const year_month_day __ymd = year_month_day(__sysd); - return year_month_weekday{__ymd.year(), __ymd.month(), __wd[(static_cast(__ymd.day()) - 1) / 7 + 1]}; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr days year_month_weekday::__to_days() const noexcept { - const sys_days __sysd = sys_days(__y_ / __m_ / 1); - return (__sysd + (__wdi_.weekday() - chrono::weekday(__sysd) + days{(__wdi_.index() - 1) * 7})).time_since_epoch(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const year_month_weekday& __lhs, const year_month_weekday& __rhs) noexcept { - return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month() && - __lhs.weekday_indexed() == __rhs.weekday_indexed(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator/(const year_month& __lhs, const weekday_indexed& __rhs) noexcept { - return year_month_weekday{__lhs.year(), __lhs.month(), __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator/(const year& __lhs, const month_weekday& __rhs) noexcept { - return year_month_weekday{__lhs, __rhs.month(), __rhs.weekday_indexed()}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator/(int __lhs, const month_weekday& __rhs) noexcept { - return year(__lhs) / __rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator/(const month_weekday& __lhs, const year& __rhs) noexcept { - return __rhs / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator/(const month_weekday& __lhs, int __rhs) noexcept { - return year(__rhs) / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator+(const year_month_weekday& __lhs, const months& __rhs) noexcept { - return (__lhs.year() / __lhs.month() + __rhs) / __lhs.weekday_indexed(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator+(const months& __lhs, const year_month_weekday& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator-(const year_month_weekday& __lhs, const months& __rhs) noexcept { - return __lhs + (-__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator+(const year_month_weekday& __lhs, const years& __rhs) noexcept { - return year_month_weekday{__lhs.year() + __rhs, __lhs.month(), __lhs.weekday_indexed()}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator+(const years& __lhs, const year_month_weekday& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday -operator-(const year_month_weekday& __lhs, const years& __rhs) noexcept { - return __lhs + (-__rhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday& year_month_weekday::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday& year_month_weekday::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday& year_month_weekday::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday& year_month_weekday::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -class year_month_weekday_last { -private: - chrono::year __y_; - chrono::month __m_; - chrono::weekday_last __wdl_; - -public: - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday_last( - const chrono::year& __yval, const chrono::month& __mval, const chrono::weekday_last& __wdlval) noexcept - : __y_{__yval}, __m_{__mval}, __wdl_{__wdlval} {} - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday_last& operator+=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday_last& operator-=(const months& __dm) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday_last& operator+=(const years& __dy) noexcept; - _LIBCPP_HIDE_FROM_ABI constexpr year_month_weekday_last& operator-=(const years& __dy) noexcept; - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::year year() const noexcept { return __y_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday weekday() const noexcept { - return __wdl_.weekday(); - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_last weekday_last() const noexcept { - return __wdl_; - } - _LIBCPP_HIDE_FROM_ABI inline constexpr operator sys_days() const noexcept { return sys_days{__to_days()}; } - _LIBCPP_HIDE_FROM_ABI inline explicit constexpr operator local_days() const noexcept { - return local_days{__to_days()}; - } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { - return __y_.ok() && __m_.ok() && __wdl_.ok(); - } - - _LIBCPP_HIDE_FROM_ABI constexpr days __to_days() const noexcept; -}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr days year_month_weekday_last::__to_days() const noexcept { - const sys_days __last = sys_days{__y_ / __m_ / last}; - return (__last - (chrono::weekday{__last} - __wdl_.weekday())).time_since_epoch(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool -operator==(const year_month_weekday_last& __lhs, const year_month_weekday_last& __rhs) noexcept { - return __lhs.year() == __rhs.year() && __lhs.month() == __rhs.month() && __lhs.weekday_last() == __rhs.weekday_last(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator/(const year_month& __lhs, const weekday_last& __rhs) noexcept { - return year_month_weekday_last{__lhs.year(), __lhs.month(), __rhs}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator/(const year& __lhs, const month_weekday_last& __rhs) noexcept { - return year_month_weekday_last{__lhs, __rhs.month(), __rhs.weekday_last()}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator/(int __lhs, const month_weekday_last& __rhs) noexcept { - return year(__lhs) / __rhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator/(const month_weekday_last& __lhs, const year& __rhs) noexcept { - return __rhs / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator/(const month_weekday_last& __lhs, int __rhs) noexcept { - return year(__rhs) / __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator+(const year_month_weekday_last& __lhs, const months& __rhs) noexcept { - return (__lhs.year() / __lhs.month() + __rhs) / __lhs.weekday_last(); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator+(const months& __lhs, const year_month_weekday_last& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator-(const year_month_weekday_last& __lhs, const months& __rhs) noexcept { - return __lhs + (-__rhs); -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator+(const year_month_weekday_last& __lhs, const years& __rhs) noexcept { - return year_month_weekday_last{__lhs.year() + __rhs, __lhs.month(), __lhs.weekday_last()}; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator+(const years& __lhs, const year_month_weekday_last& __rhs) noexcept { - return __rhs + __lhs; -} - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last -operator-(const year_month_weekday_last& __lhs, const years& __rhs) noexcept { - return __lhs + (-__rhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last& -year_month_weekday_last::operator+=(const months& __dm) noexcept { - *this = *this + __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last& -year_month_weekday_last::operator-=(const months& __dm) noexcept { - *this = *this - __dm; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last& -year_month_weekday_last::operator+=(const years& __dy) noexcept { - *this = *this + __dy; - return *this; -} -_LIBCPP_HIDE_FROM_ABI inline constexpr year_month_weekday_last& -year_month_weekday_last::operator-=(const years& __dy) noexcept { - *this = *this - __dy; - return *this; -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year_month_weekday& __ymw) noexcept { - return std::__hash_combine( - hash{}(__ymw.year()), - std::__hash_combine( - hash{}(__ymw.month()), hash{}(__ymw.weekday_indexed()))); - } -}; - -template <> -struct hash { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::year_month_weekday_last& __ymwl) noexcept { - return std::__hash_combine( - hash{}(__ymwl.year()), - std::__hash_combine( - hash{}(__ymwl.month()), hash{}(__ymwl.weekday_last()))); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___CHRONO_YEAR_MONTH_WEEKDAY_H diff --git a/third_party/libcxx/include/c++/v1/__chrono/zoned_time.h b/third_party/libcxx/include/c++/v1/__chrono/zoned_time.h deleted file mode 100644 index e63528e..0000000 --- a/third_party/libcxx/include/c++/v1/__chrono/zoned_time.h +++ /dev/null @@ -1,244 +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 -// -//===----------------------------------------------------------------------===// - -// For information see https://libcxx.llvm.org/DesignDocs/TimeZone.html - -#ifndef _LIBCPP___CHRONO_ZONED_TIME_H -#define _LIBCPP___CHRONO_ZONED_TIME_H - -#include -// Enable the contents of the header only when libc++ was built with experimental features enabled. -#if _LIBCPP_HAS_EXPERIMENTAL_TZDB - -# include <__chrono/calendar.h> -# include <__chrono/duration.h> -# include <__chrono/sys_info.h> -# include <__chrono/system_clock.h> -# include <__chrono/time_zone.h> -# include <__chrono/tzdb_list.h> -# include <__concepts/constructible.h> -# include <__config> -# include <__cstddef/size_t.h> -# include <__functional/hash.h> -# include <__type_traits/common_type.h> -# include <__type_traits/conditional.h> -# include <__type_traits/remove_cvref.h> -# include <__utility/declval.h> -# include <__utility/move.h> -# include - -# 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 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION - -namespace chrono { - -template -struct zoned_traits {}; - -template <> -struct zoned_traits { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static const time_zone* default_zone() { return chrono::locate_zone("UTC"); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static const time_zone* locate_zone(string_view __name) { - return chrono::locate_zone(__name); - } -}; - -template -class zoned_time { - // [time.zone.zonedtime.ctor]/2 - static_assert(__is_duration_v<_Duration>, - "the program is ill-formed since _Duration is not a specialization of std::chrono::duration"); - - // The wording uses the constraints like - // constructible_from - // Using these constraints in the code causes the compiler to give an - // error that the constraint depends on itself. To avoid that issue use - // the fact it is possible to create this object from a _TimeZonePtr. - using __traits _LIBCPP_NODEBUG = zoned_traits<_TimeZonePtr>; - -public: - using duration = common_type_t<_Duration, seconds>; - - _LIBCPP_HIDE_FROM_ABI zoned_time() - requires requires { __traits::default_zone(); } - : __zone_{__traits::default_zone()}, __tp_{} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(const zoned_time&) = default; - _LIBCPP_HIDE_FROM_ABI zoned_time& operator=(const zoned_time&) = default; - - _LIBCPP_HIDE_FROM_ABI zoned_time(const sys_time<_Duration>& __tp) - requires requires { __traits::default_zone(); } - : __zone_{__traits::default_zone()}, __tp_{__tp} {} - - _LIBCPP_HIDE_FROM_ABI explicit zoned_time(_TimeZonePtr __zone) : __zone_{std::move(__zone)}, __tp_{} {} - - _LIBCPP_HIDE_FROM_ABI explicit zoned_time(string_view __name) - requires(requires { __traits::locate_zone(string_view{}); } && - constructible_from<_TimeZonePtr, decltype(__traits::locate_zone(string_view{}))>) - : __zone_{__traits::locate_zone(__name)}, __tp_{} {} - - template - _LIBCPP_HIDE_FROM_ABI zoned_time(const zoned_time<_Duration2, _TimeZonePtr>& __zt) - requires is_convertible_v, sys_time<_Duration>> - : __zone_{__zt.get_time_zone()}, __tp_{__zt.get_sys_time()} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(_TimeZonePtr __zone, const sys_time<_Duration>& __tp) - : __zone_{std::move(__zone)}, __tp_{__tp} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(string_view __name, const sys_time<_Duration>& __tp) - requires requires { _TimeZonePtr{__traits::locate_zone(string_view{})}; } - : zoned_time{__traits::locate_zone(__name), __tp} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(_TimeZonePtr __zone, const local_time<_Duration>& __tp) - requires(is_convertible_v() -> to_sys(local_time<_Duration>{})), - sys_time>) - : __zone_{std::move(__zone)}, __tp_{__zone_->to_sys(__tp)} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(string_view __name, const local_time<_Duration>& __tp) - requires(requires { - _TimeZonePtr{__traits::locate_zone(string_view{})}; - } && is_convertible_v() -> to_sys(local_time<_Duration>{})), - sys_time>) - : zoned_time{__traits::locate_zone(__name), __tp} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(_TimeZonePtr __zone, const local_time<_Duration>& __tp, choose __c) - requires(is_convertible_v< - decltype(std::declval<_TimeZonePtr&>() -> to_sys(local_time<_Duration>{}, choose::earliest)), - sys_time>) - : __zone_{std::move(__zone)}, __tp_{__zone_->to_sys(__tp, __c)} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time(string_view __name, const local_time<_Duration>& __tp, choose __c) - requires(requires { - _TimeZonePtr{__traits::locate_zone(string_view{})}; - } && is_convertible_v() -> to_sys(local_time<_Duration>{}, choose::earliest)), - sys_time>) - : zoned_time{__traits::locate_zone(__name), __tp, __c} {} - - template - _LIBCPP_HIDE_FROM_ABI zoned_time(_TimeZonePtr __zone, const zoned_time<_Duration2, _TimeZonePtr2>& __zt) - requires is_convertible_v, sys_time<_Duration>> - : __zone_{std::move(__zone)}, __tp_{__zt.get_sys_time()} {} - - // per wording choose has no effect - template - _LIBCPP_HIDE_FROM_ABI zoned_time(_TimeZonePtr __zone, const zoned_time<_Duration2, _TimeZonePtr2>& __zt, choose) - requires is_convertible_v, sys_time<_Duration>> - : __zone_{std::move(__zone)}, __tp_{__zt.get_sys_time()} {} - - template - _LIBCPP_HIDE_FROM_ABI zoned_time(string_view __name, const zoned_time<_Duration2, _TimeZonePtr2>& __zt) - requires(requires { - _TimeZonePtr{__traits::locate_zone(string_view{})}; - } && is_convertible_v, sys_time<_Duration>>) - : zoned_time{__traits::locate_zone(__name), __zt} {} - - template - _LIBCPP_HIDE_FROM_ABI zoned_time(string_view __name, const zoned_time<_Duration2, _TimeZonePtr2>& __zt, choose __c) - requires(requires { - _TimeZonePtr{__traits::locate_zone(string_view{})}; - } && is_convertible_v, sys_time<_Duration>>) - : zoned_time{__traits::locate_zone(__name), __zt, __c} {} - - _LIBCPP_HIDE_FROM_ABI zoned_time& operator=(const sys_time<_Duration>& __tp) { - __tp_ = __tp; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI zoned_time& operator=(const local_time<_Duration>& __tp) { - // TODO TZDB This seems wrong. - // Assigning a non-existent or ambiguous time will throw and not satisfy - // the post condition. This seems quite odd; I constructed an object with - // choose::earliest and that choice is not respected. - // what did LEWG do with this. - // MSVC STL and libstdc++ behave the same - __tp_ = __zone_->to_sys(__tp); - return *this; - } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI operator sys_time() const { return get_sys_time(); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI explicit operator local_time() const { return get_local_time(); } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI _TimeZonePtr get_time_zone() const { return __zone_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI local_time get_local_time() const { return __zone_->to_local(__tp_); } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI sys_time get_sys_time() const { return __tp_; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI sys_info get_info() const { return __zone_->get_info(__tp_); } - -private: - _TimeZonePtr __zone_; - sys_time __tp_; -}; - -zoned_time() -> zoned_time; - -template -zoned_time(sys_time<_Duration>) -> zoned_time>; - -template -using __time_zone_representation _LIBCPP_NODEBUG = - conditional_t, - const time_zone*, - remove_cvref_t<_TimeZonePtrOrName>>; - -template -zoned_time(_TimeZonePtrOrName&&) -> zoned_time>; - -template -zoned_time(_TimeZonePtrOrName&&, sys_time<_Duration>) - -> zoned_time, __time_zone_representation<_TimeZonePtrOrName>>; - -template -zoned_time(_TimeZonePtrOrName&&, local_time<_Duration>, choose = choose::earliest) - -> zoned_time, __time_zone_representation<_TimeZonePtrOrName>>; - -template -zoned_time(_TimeZonePtrOrName&&, zoned_time<_Duration, _TimeZonePtr2>, choose = choose::earliest) - -> zoned_time, __time_zone_representation<_TimeZonePtrOrName>>; - -using zoned_seconds = zoned_time; - -template -_LIBCPP_HIDE_FROM_ABI bool -operator==(const zoned_time<_Duration1, _TimeZonePtr>& __lhs, const zoned_time<_Duration2, _TimeZonePtr>& __rhs) { - return __lhs.get_time_zone() == __rhs.get_time_zone() && __lhs.get_sys_time() == __rhs.get_sys_time(); -} - -} // namespace chrono - -# if _LIBCPP_STD_VER >= 26 - -template - requires __has_enabled_hash<_Duration>::value && __has_enabled_hash<_TimeZonePtr>::value -struct hash> { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t - operator()(const chrono::zoned_time<_Duration, _TimeZonePtr>& __zt) { - return std::__hash_combine( - hash>{}(__zt.get_sys_time()), hash<_TimeZonePtr>{}(__zt.get_time_zone())); - } -}; - -# endif // _LIBCPP_STD_VER >= 26 - -# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && - // _LIBCPP_HAS_LOCALIZATION - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB - -#endif // _LIBCPP___CHRONO_ZONED_TIME_H diff --git a/third_party/libcxx/include/c++/v1/__compare/common_comparison_category.h b/third_party/libcxx/include/c++/v1/__compare/common_comparison_category.h deleted file mode 100644 index eae2ef0..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/common_comparison_category.h +++ /dev/null @@ -1,86 +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___COMPARE_COMMON_COMPARISON_CATEGORY_H -#define _LIBCPP___COMPARE_COMMON_COMPARISON_CATEGORY_H - -#include <__compare/ordering.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -namespace __comp_detail { - -enum _ClassifyCompCategory : unsigned { _None, _PartialOrd, _WeakOrd, _StrongOrd, _CCC_Size }; - -template -_LIBCPP_HIDE_FROM_ABI constexpr _ClassifyCompCategory __type_to_enum() noexcept { - if (is_same_v<_Tp, partial_ordering>) - return _PartialOrd; - if (is_same_v<_Tp, weak_ordering>) - return _WeakOrd; - if (is_same_v<_Tp, strong_ordering>) - return _StrongOrd; - return _None; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr _ClassifyCompCategory -__compute_comp_type(const _ClassifyCompCategory (&__types)[_Size]) { - int __seen[_CCC_Size] = {}; - for (auto __type : __types) - ++__seen[__type]; - if (__seen[_None]) - return _None; - if (__seen[_PartialOrd]) - return _PartialOrd; - if (__seen[_WeakOrd]) - return _WeakOrd; - return _StrongOrd; -} - -template -_LIBCPP_HIDE_FROM_ABI constexpr auto __get_comp_type() { - using _CCC = _ClassifyCompCategory; - constexpr _CCC __type_kinds[] = {_StrongOrd, __comp_detail::__type_to_enum<_Ts>()...}; - constexpr _CCC __cat = __comp_detail::__compute_comp_type(__type_kinds); - if constexpr (__cat == _None) - return void(); - else if constexpr (__cat == _PartialOrd) - return partial_ordering::equivalent; - else if constexpr (__cat == _WeakOrd) - return weak_ordering::equivalent; - else if constexpr (__cat == _StrongOrd) - return strong_ordering::equivalent; - else - static_assert(_False, "unhandled case"); -} -} // namespace __comp_detail - -// [cmp.common], common comparison category type -template -struct common_comparison_category { - using type _LIBCPP_NODEBUG = decltype(__comp_detail::__get_comp_type<_Ts...>()); -}; - -template -using common_comparison_category_t = typename common_comparison_category<_Ts...>::type; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMMON_COMPARISON_CATEGORY_H diff --git a/third_party/libcxx/include/c++/v1/__compare/compare_partial_order_fallback.h b/third_party/libcxx/include/c++/v1/__compare/compare_partial_order_fallback.h deleted file mode 100644 index 80f2aca..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/compare_partial_order_fallback.h +++ /dev/null @@ -1,75 +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___COMPARE_COMPARE_PARTIAL_ORDER_FALLBACK -#define _LIBCPP___COMPARE_COMPARE_PARTIAL_ORDER_FALLBACK - -#include <__compare/ordering.h> -#include <__compare/partial_order.h> -#include <__concepts/boolean_testable.h> -#include <__config> -#include <__type_traits/decay.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [cmp.alg] -namespace __compare_partial_order_fallback { -struct __fn { - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept( - noexcept(std::partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) - -> decltype(std::partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))) { - return std::partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - } - - template - requires is_same_v, decay_t<_Up>> && requires(_Tp&& __t, _Up&& __u) { - { std::forward<_Tp>(__t) == std::forward<_Up>(__u) } -> __boolean_testable; - { std::forward<_Tp>(__t) < std::forward<_Up>(__u) } -> __boolean_testable; - { std::forward<_Up>(__u) < std::forward<_Tp>(__t) } -> __boolean_testable; - } - _LIBCPP_HIDE_FROM_ABI static constexpr partial_ordering __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept( - noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? partial_ordering::equivalent - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) ? partial_ordering::less - : std::forward<_Up>(__u) < std::forward<_Tp>(__t) ? partial_ordering::greater - : partial_ordering::unordered)) { - return std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? partial_ordering::equivalent - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) ? partial_ordering::less - : std::forward<_Up>(__u) < std::forward<_Tp>(__t) - ? partial_ordering::greater - : partial_ordering::unordered; - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()); - } -}; -} // namespace __compare_partial_order_fallback - -inline namespace __cpo { -inline constexpr auto compare_partial_order_fallback = __compare_partial_order_fallback::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMPARE_PARTIAL_ORDER_FALLBACK diff --git a/third_party/libcxx/include/c++/v1/__compare/compare_strong_order_fallback.h b/third_party/libcxx/include/c++/v1/__compare/compare_strong_order_fallback.h deleted file mode 100644 index c41a90c..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/compare_strong_order_fallback.h +++ /dev/null @@ -1,72 +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___COMPARE_COMPARE_STRONG_ORDER_FALLBACK -#define _LIBCPP___COMPARE_COMPARE_STRONG_ORDER_FALLBACK - -#include <__compare/ordering.h> -#include <__compare/strong_order.h> -#include <__concepts/boolean_testable.h> -#include <__config> -#include <__type_traits/decay.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [cmp.alg] -namespace __compare_strong_order_fallback { -struct __fn { - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept( - noexcept(std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) - -> decltype(std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))) { - return std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - } - - template - requires is_same_v, decay_t<_Up>> && requires(_Tp&& __t, _Up&& __u) { - { std::forward<_Tp>(__t) == std::forward<_Up>(__u) } -> __boolean_testable; - { std::forward<_Tp>(__t) < std::forward<_Up>(__u) } -> __boolean_testable; - } - _LIBCPP_HIDE_FROM_ABI static constexpr strong_ordering __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept( - noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? strong_ordering::equal - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) ? strong_ordering::less - : strong_ordering::greater)) { - return std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? strong_ordering::equal - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) - ? strong_ordering::less - : strong_ordering::greater; - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()); - } -}; -} // namespace __compare_strong_order_fallback - -inline namespace __cpo { -inline constexpr auto compare_strong_order_fallback = __compare_strong_order_fallback::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMPARE_STRONG_ORDER_FALLBACK diff --git a/third_party/libcxx/include/c++/v1/__compare/compare_three_way.h b/third_party/libcxx/include/c++/v1/__compare/compare_three_way.h deleted file mode 100644 index 852c587..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/compare_three_way.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___COMPARE_COMPARE_THREE_WAY_H -#define _LIBCPP___COMPARE_COMPARE_THREE_WAY_H - -#include <__compare/three_way_comparable.h> -#include <__config> -#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 - -struct compare_three_way { - template - requires three_way_comparable_with<_T1, _T2> - constexpr _LIBCPP_HIDE_FROM_ABI auto operator()(_T1&& __t, _T2&& __u) const - noexcept(noexcept(std::forward<_T1>(__t) <=> std::forward<_T2>(__u))) { - return std::forward<_T1>(__t) <=> std::forward<_T2>(__u); - } - - using is_transparent = void; -}; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMPARE_THREE_WAY_H diff --git a/third_party/libcxx/include/c++/v1/__compare/compare_three_way_result.h b/third_party/libcxx/include/c++/v1/__compare/compare_three_way_result.h deleted file mode 100644 index 264a4d6..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/compare_three_way_result.h +++ /dev/null @@ -1,46 +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___COMPARE_COMPARE_THREE_WAY_RESULT_H -#define _LIBCPP___COMPARE_COMPARE_THREE_WAY_RESULT_H - -#include <__config> -#include <__type_traits/make_const_lvalue_ref.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 - -template -struct _LIBCPP_HIDE_FROM_ABI __compare_three_way_result {}; - -template -struct _LIBCPP_HIDE_FROM_ABI __compare_three_way_result< - _Tp, - _Up, - decltype(std::declval<__make_const_lvalue_ref<_Tp>>() <=> std::declval<__make_const_lvalue_ref<_Up>>(), void())> { - using type _LIBCPP_NODEBUG = - decltype(std::declval<__make_const_lvalue_ref<_Tp>>() <=> std::declval<__make_const_lvalue_ref<_Up>>()); -}; - -template -struct _LIBCPP_NO_SPECIALIZATIONS compare_three_way_result : __compare_three_way_result<_Tp, _Up, void> {}; - -template -using compare_three_way_result_t = typename compare_three_way_result<_Tp, _Up>::type; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMPARE_THREE_WAY_RESULT_H diff --git a/third_party/libcxx/include/c++/v1/__compare/compare_weak_order_fallback.h b/third_party/libcxx/include/c++/v1/__compare/compare_weak_order_fallback.h deleted file mode 100644 index 26689fb..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/compare_weak_order_fallback.h +++ /dev/null @@ -1,73 +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___COMPARE_COMPARE_WEAK_ORDER_FALLBACK -#define _LIBCPP___COMPARE_COMPARE_WEAK_ORDER_FALLBACK - -#include <__compare/ordering.h> -#include <__compare/weak_order.h> -#include <__concepts/boolean_testable.h> -#include <__config> -#include <__type_traits/decay.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [cmp.alg] -namespace __compare_weak_order_fallback { -struct __fn { - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept( - noexcept(std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) - -> decltype(std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))) { - return std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - } - - template - requires is_same_v, decay_t<_Up>> && requires(_Tp&& __t, _Up&& __u) { - { std::forward<_Tp>(__t) == std::forward<_Up>(__u) } -> __boolean_testable; - { std::forward<_Tp>(__t) < std::forward<_Up>(__u) } -> __boolean_testable; - } - _LIBCPP_HIDE_FROM_ABI static constexpr weak_ordering __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept(noexcept( - std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? weak_ordering::equivalent - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) - ? weak_ordering::less - : weak_ordering::greater)) { - return std::forward<_Tp>(__t) == std::forward<_Up>(__u) ? weak_ordering::equivalent - : std::forward<_Tp>(__t) < std::forward<_Up>(__u) - ? weak_ordering::less - : weak_ordering::greater; - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<1>()); - } -}; -} // namespace __compare_weak_order_fallback - -inline namespace __cpo { -inline constexpr auto compare_weak_order_fallback = __compare_weak_order_fallback::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_COMPARE_WEAK_ORDER_FALLBACK diff --git a/third_party/libcxx/include/c++/v1/__compare/is_eq.h b/third_party/libcxx/include/c++/v1/__compare/is_eq.h deleted file mode 100644 index ee4d11b..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/is_eq.h +++ /dev/null @@ -1,34 +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___COMPARE_IS_EQ_H -#define _LIBCPP___COMPARE_IS_EQ_H - -#include <__compare/ordering.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_eq(partial_ordering __c) noexcept { return __c == 0; } -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_neq(partial_ordering __c) noexcept { return __c != 0; } -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_lt(partial_ordering __c) noexcept { return __c < 0; } -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_lteq(partial_ordering __c) noexcept { return __c <= 0; } -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_gt(partial_ordering __c) noexcept { return __c > 0; } -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_gteq(partial_ordering __c) noexcept { return __c >= 0; } - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_IS_EQ_H diff --git a/third_party/libcxx/include/c++/v1/__compare/ordering.h b/third_party/libcxx/include/c++/v1/__compare/ordering.h deleted file mode 100644 index 902ef53..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/ordering.h +++ /dev/null @@ -1,282 +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___COMPARE_ORDERING_H -#define _LIBCPP___COMPARE_ORDERING_H - -#include <__config> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// exposition only -enum class _OrdResult : signed char { __less = -1, __equiv = 0, __greater = 1 }; - -enum class _PartialOrdResult : signed char { - __less = static_cast(_OrdResult::__less), - __equiv = static_cast(_OrdResult::__equiv), - __greater = static_cast(_OrdResult::__greater), - __unordered = -127, -}; - -class partial_ordering; -class weak_ordering; -class strong_ordering; - -struct _CmpUnspecifiedParam { - // If anything other than a literal 0 is provided, the behavior is undefined by the Standard. - // - // The alternative to the `__enable_if__` attribute would be to use the fact that a pointer - // can be constructed from literal 0, but this conflicts with `-Wzero-as-null-pointer-constant`. - template > > - _LIBCPP_HIDE_FROM_ABI consteval _CmpUnspecifiedParam(_Tp __zero) noexcept -# if __has_attribute(__enable_if__) - __attribute__((__enable_if__( - __zero == 0, "Only literal 0 is allowed as the operand of a comparison with one of the ordering types"))) -# endif - { - (void)__zero; - } -}; - -class partial_ordering { - _LIBCPP_HIDE_FROM_ABI explicit constexpr partial_ordering(_PartialOrdResult __v) noexcept : __value_(__v) {} - -public: - // valid values - static const partial_ordering less; - static const partial_ordering equivalent; - static const partial_ordering greater; - static const partial_ordering unordered; - - // comparisons - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(partial_ordering, partial_ordering) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == _PartialOrdResult::__equiv; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == _PartialOrdResult::__less; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == _PartialOrdResult::__equiv || __v.__value_ == _PartialOrdResult::__less; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == _PartialOrdResult::__greater; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == _PartialOrdResult::__equiv || __v.__value_ == _PartialOrdResult::__greater; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(_CmpUnspecifiedParam, partial_ordering __v) noexcept { - return __v.__value_ == _PartialOrdResult::__greater; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(_CmpUnspecifiedParam, partial_ordering __v) noexcept { - return __v.__value_ == _PartialOrdResult::__equiv || __v.__value_ == _PartialOrdResult::__greater; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(_CmpUnspecifiedParam, partial_ordering __v) noexcept { - return __v.__value_ == _PartialOrdResult::__less; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(_CmpUnspecifiedParam, partial_ordering __v) noexcept { - return __v.__value_ == _PartialOrdResult::__equiv || __v.__value_ == _PartialOrdResult::__less; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr partial_ordering - operator<=>(partial_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr partial_ordering - operator<=>(_CmpUnspecifiedParam, partial_ordering __v) noexcept { - return __v < 0 ? partial_ordering::greater : (__v > 0 ? partial_ordering::less : __v); - } - -private: - _PartialOrdResult __value_; -}; - -inline constexpr partial_ordering partial_ordering::less(_PartialOrdResult::__less); -inline constexpr partial_ordering partial_ordering::equivalent(_PartialOrdResult::__equiv); -inline constexpr partial_ordering partial_ordering::greater(_PartialOrdResult::__greater); -inline constexpr partial_ordering partial_ordering::unordered(_PartialOrdResult::__unordered); - -class weak_ordering { - using _ValueT _LIBCPP_NODEBUG = signed char; - - _LIBCPP_HIDE_FROM_ABI explicit constexpr weak_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {} - -public: - static const weak_ordering less; - static const weak_ordering equivalent; - static const weak_ordering greater; - - _LIBCPP_HIDE_FROM_ABI constexpr operator partial_ordering() const noexcept { - return __value_ == 0 ? partial_ordering::equivalent - : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater); - } - - // comparisons - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(weak_ordering, weak_ordering) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ < 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ <= 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ > 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ >= 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(_CmpUnspecifiedParam, weak_ordering __v) noexcept { - return 0 < __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(_CmpUnspecifiedParam, weak_ordering __v) noexcept { - return 0 <= __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(_CmpUnspecifiedParam, weak_ordering __v) noexcept { - return 0 > __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(_CmpUnspecifiedParam, weak_ordering __v) noexcept { - return 0 >= __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr weak_ordering operator<=>(weak_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr weak_ordering operator<=>(_CmpUnspecifiedParam, weak_ordering __v) noexcept { - return __v < 0 ? weak_ordering::greater : (__v > 0 ? weak_ordering::less : __v); - } - -private: - _ValueT __value_; -}; - -inline constexpr weak_ordering weak_ordering::less(_OrdResult::__less); -inline constexpr weak_ordering weak_ordering::equivalent(_OrdResult::__equiv); -inline constexpr weak_ordering weak_ordering::greater(_OrdResult::__greater); - -class strong_ordering { - using _ValueT _LIBCPP_NODEBUG = signed char; - - _LIBCPP_HIDE_FROM_ABI explicit constexpr strong_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {} - -public: - static const strong_ordering less; - static const strong_ordering equal; - static const strong_ordering equivalent; - static const strong_ordering greater; - - // conversions - _LIBCPP_HIDE_FROM_ABI constexpr operator partial_ordering() const noexcept { - return __value_ == 0 ? partial_ordering::equivalent - : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater); - } - - _LIBCPP_HIDE_FROM_ABI constexpr operator weak_ordering() const noexcept { - return __value_ == 0 ? weak_ordering::equivalent : (__value_ < 0 ? weak_ordering::less : weak_ordering::greater); - } - - // comparisons - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(strong_ordering, strong_ordering) noexcept = default; - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ == 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ < 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ <= 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ > 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v.__value_ >= 0; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<(_CmpUnspecifiedParam, strong_ordering __v) noexcept { - return 0 < __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator<=(_CmpUnspecifiedParam, strong_ordering __v) noexcept { - return 0 <= __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>(_CmpUnspecifiedParam, strong_ordering __v) noexcept { - return 0 > __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator>=(_CmpUnspecifiedParam, strong_ordering __v) noexcept { - return 0 >= __v.__value_; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr strong_ordering - operator<=>(strong_ordering __v, _CmpUnspecifiedParam) noexcept { - return __v; - } - - _LIBCPP_HIDE_FROM_ABI friend constexpr strong_ordering - operator<=>(_CmpUnspecifiedParam, strong_ordering __v) noexcept { - return __v < 0 ? strong_ordering::greater : (__v > 0 ? strong_ordering::less : __v); - } - -private: - _ValueT __value_; -}; - -inline constexpr strong_ordering strong_ordering::less(_OrdResult::__less); -inline constexpr strong_ordering strong_ordering::equal(_OrdResult::__equiv); -inline constexpr strong_ordering strong_ordering::equivalent(_OrdResult::__equiv); -inline constexpr strong_ordering strong_ordering::greater(_OrdResult::__greater); - -/// [cmp.categories.pre]/1 -/// The types partial_ordering, weak_ordering, and strong_ordering are -/// collectively termed the comparison category types. -template -concept __comparison_category = - is_same_v<_Tp, partial_ordering> || is_same_v<_Tp, weak_ordering> || is_same_v<_Tp, strong_ordering>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_ORDERING_H diff --git a/third_party/libcxx/include/c++/v1/__compare/partial_order.h b/third_party/libcxx/include/c++/v1/__compare/partial_order.h deleted file mode 100644 index 1d2fae6..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/partial_order.h +++ /dev/null @@ -1,77 +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___COMPARE_PARTIAL_ORDER -#define _LIBCPP___COMPARE_PARTIAL_ORDER - -#include <__compare/compare_three_way.h> -#include <__compare/ordering.h> -#include <__compare/weak_order.h> -#include <__config> -#include <__type_traits/decay.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [cmp.alg] -namespace __partial_order { -void partial_order() = delete; - -struct __fn { - // NOLINTBEGIN(libcpp-robust-against-adl) partial_order should use ADL, but only here - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<2>) noexcept( - noexcept(partial_ordering(partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(partial_ordering(partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return partial_ordering(partial_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - // NOLINTEND(libcpp-robust-against-adl) - - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept( - noexcept(partial_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(partial_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return partial_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept( - noexcept(partial_ordering(std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(partial_ordering(std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return partial_ordering(std::weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>()); - } -}; -} // namespace __partial_order - -inline namespace __cpo { -inline constexpr auto partial_order = __partial_order::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_PARTIAL_ORDER diff --git a/third_party/libcxx/include/c++/v1/__compare/strong_order.h b/third_party/libcxx/include/c++/v1/__compare/strong_order.h deleted file mode 100644 index ba6de44..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/strong_order.h +++ /dev/null @@ -1,125 +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___COMPARE_STRONG_ORDER -#define _LIBCPP___COMPARE_STRONG_ORDER - -#include <__bit/bit_cast.h> -#include <__compare/compare_three_way.h> -#include <__compare/ordering.h> -#include <__config> -#include <__math/traits.h> -#include <__type_traits/conditional.h> -#include <__type_traits/decay.h> -#include <__type_traits/is_floating_point.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> -#include -#include - -#ifndef _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 - -// [cmp.alg] -namespace __strong_order { -void strong_order() = delete; - -struct __fn { - // NOLINTBEGIN(libcpp-robust-against-adl) strong_order should use ADL, but only here - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<2>) noexcept( - noexcept(strong_ordering(strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(strong_ordering(strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return strong_ordering(strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - // NOLINTEND(libcpp-robust-against-adl) - - template > - requires is_same_v<_Dp, decay_t<_Up>> && is_floating_point_v<_Dp> - _LIBCPP_HIDE_FROM_ABI static constexpr strong_ordering __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept { - if constexpr (numeric_limits<_Dp>::is_iec559 && - (sizeof(_Dp) == sizeof(int32_t) || sizeof(_Dp) == sizeof(int64_t))) { - using _IntT = conditional_t; - _IntT __rx = std::bit_cast<_IntT>(__t); - _IntT __ry = std::bit_cast<_IntT>(__u); - __rx = (__rx < 0) ? (numeric_limits<_IntT>::min() - __rx - 1) : __rx; - __ry = (__ry < 0) ? (numeric_limits<_IntT>::min() - __ry - 1) : __ry; - return (__rx <=> __ry); - } else if (__t < __u) { - return strong_ordering::less; - } else if (__t > __u) { - return strong_ordering::greater; - } else if (__t == __u) { - static_assert(numeric_limits<_Dp>::radix == 2, "floating point type with a radix other than 2?"); - return __math::signbit(__u) <=> __math::signbit(__t); - } else { - // They're unordered, so one of them must be a NAN. - // The order is -QNAN, -SNAN, numbers, +SNAN, +QNAN. - bool __t_is_nan = __math::isnan(__t); - bool __u_is_nan = __math::isnan(__u); - bool __t_is_negative = __math::signbit(__t); - bool __u_is_negative = __math::signbit(__u); - using _IntType = - conditional_t>; - if constexpr (is_same_v<_IntType, void>) { - static_assert(sizeof(_Dp) == 0, "std::strong_order is unimplemented for this floating-point type"); - } else if (__t_is_nan && __u_is_nan) { - // Order by sign bit, then by "payload bits" (we'll just use bit_cast). - if (__t_is_negative != __u_is_negative) { - return (__u_is_negative <=> __t_is_negative); - } else { - return std::bit_cast<_IntType>(__t) <=> std::bit_cast<_IntType>(__u); - } - } else if (__t_is_nan) { - return __t_is_negative ? strong_ordering::less : strong_ordering::greater; - } else { - return __u_is_negative ? strong_ordering::greater : strong_ordering::less; - } - } - } - - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept( - noexcept(strong_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(strong_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return strong_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<2>()); - } -}; -} // namespace __strong_order - -inline namespace __cpo { -inline constexpr auto strong_order = __strong_order::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___COMPARE_STRONG_ORDER diff --git a/third_party/libcxx/include/c++/v1/__compare/synth_three_way.h b/third_party/libcxx/include/c++/v1/__compare/synth_three_way.h deleted file mode 100644 index 63bf56d..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/synth_three_way.h +++ /dev/null @@ -1,53 +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___COMPARE_SYNTH_THREE_WAY_H -#define _LIBCPP___COMPARE_SYNTH_THREE_WAY_H - -#include <__compare/ordering.h> -#include <__compare/three_way_comparable.h> -#include <__concepts/boolean_testable.h> -#include <__config> -#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 - -// [expos.only.func] - -_LIBCPP_HIDE_FROM_ABI inline constexpr auto __synth_three_way = [](const _Tp& __t, const _Up& __u) - requires requires { - { __t < __u } -> __boolean_testable; - { __u < __t } -> __boolean_testable; - } -{ - if constexpr (three_way_comparable_with<_Tp, _Up>) { - return __t <=> __u; - } else { - if (__t < __u) - return weak_ordering::less; - if (__u < __t) - return weak_ordering::greater; - return weak_ordering::equivalent; - } -}; - -template -using __synth_three_way_result _LIBCPP_NODEBUG = - decltype(std::__synth_three_way(std::declval<_Tp&>(), std::declval<_Up&>())); - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_SYNTH_THREE_WAY_H diff --git a/third_party/libcxx/include/c++/v1/__compare/three_way_comparable.h b/third_party/libcxx/include/c++/v1/__compare/three_way_comparable.h deleted file mode 100644 index ad6d05a..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/three_way_comparable.h +++ /dev/null @@ -1,55 +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___COMPARE_THREE_WAY_COMPARABLE_H -#define _LIBCPP___COMPARE_THREE_WAY_COMPARABLE_H - -#include <__compare/common_comparison_category.h> -#include <__compare/ordering.h> -#include <__concepts/common_reference_with.h> -#include <__concepts/comparison_common_type.h> -#include <__concepts/equality_comparable.h> -#include <__concepts/same_as.h> -#include <__concepts/totally_ordered.h> -#include <__config> -#include <__type_traits/common_reference.h> -#include <__type_traits/make_const_lvalue_ref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template -concept __compares_as = same_as, _Cat>; - -template -concept three_way_comparable = - __weakly_equality_comparable_with<_Tp, _Tp> && __partially_ordered_with<_Tp, _Tp> && - requires(__make_const_lvalue_ref<_Tp> __a, __make_const_lvalue_ref<_Tp> __b) { - { __a <=> __b } -> __compares_as<_Cat>; - }; - -template -concept three_way_comparable_with = - three_way_comparable<_Tp, _Cat> && three_way_comparable<_Up, _Cat> && __comparison_common_type_with<_Tp, _Up> && - three_way_comparable, __make_const_lvalue_ref<_Up>>, _Cat> && - __weakly_equality_comparable_with<_Tp, _Up> && __partially_ordered_with<_Tp, _Up> && - requires(__make_const_lvalue_ref<_Tp> __t, __make_const_lvalue_ref<_Up> __u) { - { __t <=> __u } -> __compares_as<_Cat>; - { __u <=> __t } -> __compares_as<_Cat>; - }; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_THREE_WAY_COMPARABLE_H diff --git a/third_party/libcxx/include/c++/v1/__compare/weak_order.h b/third_party/libcxx/include/c++/v1/__compare/weak_order.h deleted file mode 100644 index 1a3e85f..0000000 --- a/third_party/libcxx/include/c++/v1/__compare/weak_order.h +++ /dev/null @@ -1,105 +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___COMPARE_WEAK_ORDER -#define _LIBCPP___COMPARE_WEAK_ORDER - -#include <__compare/compare_three_way.h> -#include <__compare/ordering.h> -#include <__compare/strong_order.h> -#include <__config> -#include <__math/traits.h> -#include <__type_traits/decay.h> -#include <__type_traits/is_floating_point.h> -#include <__type_traits/is_same.h> -#include <__utility/forward.h> -#include <__utility/priority_tag.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [cmp.alg] -namespace __weak_order { -void weak_order() = delete; - -struct __fn { - // NOLINTBEGIN(libcpp-robust-against-adl) weak_order should use ADL, but only here - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<3>) noexcept( - noexcept(weak_ordering(weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(weak_ordering(weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return weak_ordering(weak_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - // NOLINTEND(libcpp-robust-against-adl) - - template > - requires is_same_v<_Dp, decay_t<_Up>> && is_floating_point_v<_Dp> - _LIBCPP_HIDE_FROM_ABI static constexpr weak_ordering __go(_Tp&& __t, _Up&& __u, __priority_tag<2>) noexcept { - partial_ordering __po = (__t <=> __u); - if (__po == partial_ordering::less) { - return weak_ordering::less; - } else if (__po == partial_ordering::equivalent) { - return weak_ordering::equivalent; - } else if (__po == partial_ordering::greater) { - return weak_ordering::greater; - } else { - // Otherwise, at least one of them is a NaN. - bool __t_is_nan = __math::isnan(__t); - bool __u_is_nan = __math::isnan(__u); - bool __t_is_negative = __math::signbit(__t); - bool __u_is_negative = __math::signbit(__u); - if (__t_is_nan && __u_is_nan) { - return (__u_is_negative <=> __t_is_negative); - } else if (__t_is_nan) { - return __t_is_negative ? weak_ordering::less : weak_ordering::greater; - } else { - return __u_is_negative ? weak_ordering::greater : weak_ordering::less; - } - } - } - - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<1>) noexcept( - noexcept(weak_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(weak_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return weak_ordering(compare_three_way()(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - - template - requires is_same_v, decay_t<_Up>> - _LIBCPP_HIDE_FROM_ABI static constexpr auto __go(_Tp&& __t, _Up&& __u, __priority_tag<0>) noexcept( - noexcept(weak_ordering(std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))))) - -> decltype(weak_ordering(std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - return weak_ordering(std::strong_order(std::forward<_Tp>(__t), std::forward<_Up>(__u))); - } - - template - _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<3>()))) - -> decltype(__go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<3>())) { - return __go(std::forward<_Tp>(__t), std::forward<_Up>(__u), __priority_tag<3>()); - } -}; -} // namespace __weak_order - -inline namespace __cpo { -inline constexpr auto weak_order = __weak_order::__fn{}; -} // namespace __cpo - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___COMPARE_WEAK_ORDER diff --git a/third_party/libcxx/include/c++/v1/__concepts/arithmetic.h b/third_party/libcxx/include/c++/v1/__concepts/arithmetic.h deleted file mode 100644 index 64c0200..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/arithmetic.h +++ /dev/null @@ -1,43 +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___CONCEPTS_ARITHMETIC_H -#define _LIBCPP___CONCEPTS_ARITHMETIC_H - -#include <__config> -#include <__type_traits/is_floating_point.h> -#include <__type_traits/is_integral.h> -#include <__type_traits/is_signed.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concepts.arithmetic], arithmetic concepts - -template -concept integral = is_integral_v<_Tp>; - -template -concept signed_integral = integral<_Tp> && is_signed_v<_Tp>; - -template -concept unsigned_integral = integral<_Tp> && !signed_integral<_Tp>; - -template -concept floating_point = is_floating_point_v<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_ARITHMETIC_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/assignable.h b/third_party/libcxx/include/c++/v1/__concepts/assignable.h deleted file mode 100644 index 7423daa..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/assignable.h +++ /dev/null @@ -1,41 +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___CONCEPTS_ASSIGNABLE_H -#define _LIBCPP___CONCEPTS_ASSIGNABLE_H - -#include <__concepts/common_reference_with.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__type_traits/is_reference.h> -#include <__type_traits/make_const_lvalue_ref.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 - -// [concept.assignable] - -template -concept assignable_from = - is_lvalue_reference_v<_Lhs> && - common_reference_with<__make_const_lvalue_ref<_Lhs>, __make_const_lvalue_ref<_Rhs>> && - requires(_Lhs __lhs, _Rhs&& __rhs) { - { __lhs = std::forward<_Rhs>(__rhs) } -> same_as<_Lhs>; - }; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_ASSIGNABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/boolean_testable.h b/third_party/libcxx/include/c++/v1/__concepts/boolean_testable.h deleted file mode 100644 index b379fe9..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/boolean_testable.h +++ /dev/null @@ -1,38 +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___CONCEPTS_BOOLEAN_TESTABLE_H -#define _LIBCPP___CONCEPTS_BOOLEAN_TESTABLE_H - -#include <__concepts/convertible_to.h> -#include <__config> -#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 - -// [concepts.booleantestable] - -template -concept __boolean_testable_impl = convertible_to<_Tp, bool>; - -template -concept __boolean_testable = __boolean_testable_impl<_Tp> && requires(_Tp&& __t) { - { !std::forward<_Tp>(__t) } -> __boolean_testable_impl; -}; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_BOOLEAN_TESTABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/class_or_enum.h b/third_party/libcxx/include/c++/v1/__concepts/class_or_enum.h deleted file mode 100644 index 9fceed0..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/class_or_enum.h +++ /dev/null @@ -1,34 +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___CONCEPTS_CLASS_OR_ENUM_H -#define _LIBCPP___CONCEPTS_CLASS_OR_ENUM_H - -#include <__config> -#include <__type_traits/is_class.h> -#include <__type_traits/is_enum.h> -#include <__type_traits/is_union.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// Whether a type is a class type or enumeration type according to the Core wording. - -template -concept __class_or_enum = is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_CLASS_OR_ENUM_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/common_reference_with.h b/third_party/libcxx/include/c++/v1/__concepts/common_reference_with.h deleted file mode 100644 index 4eb687e..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/common_reference_with.h +++ /dev/null @@ -1,36 +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___CONCEPTS_COMMON_REFERENCE_WITH_H -#define _LIBCPP___CONCEPTS_COMMON_REFERENCE_WITH_H - -#include <__concepts/convertible_to.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__type_traits/common_reference.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.commonref] - -template -concept common_reference_with = - same_as, common_reference_t<_Up, _Tp>> && - convertible_to<_Tp, common_reference_t<_Tp, _Up>> && convertible_to<_Up, common_reference_t<_Tp, _Up>>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_COMMON_REFERENCE_WITH_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/common_with.h b/third_party/libcxx/include/c++/v1/__concepts/common_with.h deleted file mode 100644 index 09082b2..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/common_with.h +++ /dev/null @@ -1,52 +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___CONCEPTS_COMMON_WITH_H -#define _LIBCPP___CONCEPTS_COMMON_WITH_H - -#include <__concepts/common_reference_with.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__type_traits/add_reference.h> -#include <__type_traits/common_reference.h> -#include <__type_traits/common_type.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 - -// [concept.common] - -// clang-format off -template -concept common_with = - same_as, common_type_t<_Up, _Tp>> && - requires { - static_cast>(std::declval<_Tp>()); - static_cast>(std::declval<_Up>()); - } && - common_reference_with< - add_lvalue_reference_t, - add_lvalue_reference_t> && - common_reference_with< - add_lvalue_reference_t>, - common_reference_t< - add_lvalue_reference_t, - add_lvalue_reference_t>>; -// clang-format on - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_COMMON_WITH_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/comparison_common_type.h b/third_party/libcxx/include/c++/v1/__concepts/comparison_common_type.h deleted file mode 100644 index 3f0d770..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/comparison_common_type.h +++ /dev/null @@ -1,40 +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___CONCEPTS_COMPARISON_COMMON_TYPE_H -#define _LIBCPP___CONCEPTS_COMPARISON_COMMON_TYPE_H - -#include <__concepts/convertible_to.h> -#include <__concepts/same_as.h> -#include <__config> -#include <__type_traits/common_reference.h> -#include <__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template > -concept __comparison_common_type_with_impl = - same_as, common_reference_t> && requires { - requires convertible_to || convertible_to<_Tp, const _CommonRef&>; - requires convertible_to || convertible_to<_Up, const _CommonRef&>; - }; - -template -concept __comparison_common_type_with = __comparison_common_type_with_impl, remove_cvref_t<_Up>>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_COMPARISON_COMMON_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/constructible.h b/third_party/libcxx/include/c++/v1/__concepts/constructible.h deleted file mode 100644 index 835a444..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/constructible.h +++ /dev/null @@ -1,55 +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___CONCEPTS_CONSTRUCTIBLE_H -#define _LIBCPP___CONCEPTS_CONSTRUCTIBLE_H - -#include <__concepts/convertible_to.h> -#include <__concepts/destructible.h> -#include <__config> -#include <__type_traits/is_constructible.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.constructible] -template -concept constructible_from = destructible<_Tp> && is_constructible_v<_Tp, _Args...>; - -// [concept.default.init] - -template -concept __default_initializable = requires { ::new _Tp; }; - -template -concept default_initializable = constructible_from<_Tp> && requires { _Tp{}; } && __default_initializable<_Tp>; - -// [concept.moveconstructible] -template -concept move_constructible = constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>; - -// [concept.copyconstructible] -// clang-format off -template -concept copy_constructible = - move_constructible<_Tp> && - constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp> && - constructible_from<_Tp, const _Tp&> && convertible_to && - constructible_from<_Tp, const _Tp> && convertible_to; -// clang-format on - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_CONSTRUCTIBLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/convertible_to.h b/third_party/libcxx/include/c++/v1/__concepts/convertible_to.h deleted file mode 100644 index 6d5b6c1..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/convertible_to.h +++ /dev/null @@ -1,33 +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___CONCEPTS_CONVERTIBLE_TO_H -#define _LIBCPP___CONCEPTS_CONVERTIBLE_TO_H - -#include <__config> -#include <__type_traits/is_convertible.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 - -// [concept.convertible] - -template -concept convertible_to = is_convertible_v<_From, _To> && requires { static_cast<_To>(std::declval<_From>()); }; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_CONVERTIBLE_TO_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/copyable.h b/third_party/libcxx/include/c++/v1/__concepts/copyable.h deleted file mode 100644 index 2bf0ad4..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/copyable.h +++ /dev/null @@ -1,41 +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___CONCEPTS_COPYABLE_H -#define _LIBCPP___CONCEPTS_COPYABLE_H - -#include <__concepts/assignable.h> -#include <__concepts/constructible.h> -#include <__concepts/movable.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concepts.object] - -// clang-format off -template -concept copyable = - copy_constructible<_Tp> && - movable<_Tp> && - assignable_from<_Tp&, _Tp&> && - assignable_from<_Tp&, const _Tp&> && - assignable_from<_Tp&, const _Tp>; -// clang-format on - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_COPYABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/derived_from.h b/third_party/libcxx/include/c++/v1/__concepts/derived_from.h deleted file mode 100644 index 9875fae..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/derived_from.h +++ /dev/null @@ -1,33 +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___CONCEPTS_DERIVED_FROM_H -#define _LIBCPP___CONCEPTS_DERIVED_FROM_H - -#include <__config> -#include <__type_traits/is_base_of.h> -#include <__type_traits/is_convertible.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.derived] - -template -concept derived_from = is_base_of_v<_Bp, _Dp> && is_convertible_v; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_DERIVED_FROM_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/destructible.h b/third_party/libcxx/include/c++/v1/__concepts/destructible.h deleted file mode 100644 index 28b4b1b..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/destructible.h +++ /dev/null @@ -1,32 +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___CONCEPTS_DESTRUCTIBLE_H -#define _LIBCPP___CONCEPTS_DESTRUCTIBLE_H - -#include <__config> -#include <__type_traits/is_nothrow_destructible.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.destructible] - -template -concept destructible = is_nothrow_destructible_v<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_DESTRUCTIBLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/different_from.h b/third_party/libcxx/include/c++/v1/__concepts/different_from.h deleted file mode 100644 index fd31f6e..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/different_from.h +++ /dev/null @@ -1,31 +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___CONCEPTS_DIFFERENT_FROM_H -#define _LIBCPP___CONCEPTS_DIFFERENT_FROM_H - -#include <__concepts/same_as.h> -#include <__config> -#include <__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -template -concept __different_from = !same_as, remove_cvref_t<_Up>>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_DIFFERENT_FROM_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/equality_comparable.h b/third_party/libcxx/include/c++/v1/__concepts/equality_comparable.h deleted file mode 100644 index 56fc6f8..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/equality_comparable.h +++ /dev/null @@ -1,57 +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___CONCEPTS_EQUALITY_COMPARABLE_H -#define _LIBCPP___CONCEPTS_EQUALITY_COMPARABLE_H - -#include <__concepts/boolean_testable.h> -#include <__concepts/common_reference_with.h> -#include <__concepts/comparison_common_type.h> -#include <__config> -#include <__type_traits/common_reference.h> -#include <__type_traits/make_const_lvalue_ref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.equalitycomparable] - -template -concept __weakly_equality_comparable_with = - requires(__make_const_lvalue_ref<_Tp> __t, __make_const_lvalue_ref<_Up> __u) { - { __t == __u } -> __boolean_testable; - { __t != __u } -> __boolean_testable; - { __u == __t } -> __boolean_testable; - { __u != __t } -> __boolean_testable; - }; - -template -concept equality_comparable = __weakly_equality_comparable_with<_Tp, _Tp>; - -// clang-format off -template -concept equality_comparable_with = - equality_comparable<_Tp> && equality_comparable<_Up> && - __comparison_common_type_with<_Tp, _Up> && - equality_comparable< - common_reference_t< - __make_const_lvalue_ref<_Tp>, - __make_const_lvalue_ref<_Up>>> && - __weakly_equality_comparable_with<_Tp, _Up>; -// clang-format on - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_EQUALITY_COMPARABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/invocable.h b/third_party/libcxx/include/c++/v1/__concepts/invocable.h deleted file mode 100644 index 8a29398..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/invocable.h +++ /dev/null @@ -1,40 +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___CONCEPTS_INVOCABLE_H -#define _LIBCPP___CONCEPTS_INVOCABLE_H - -#include <__config> -#include <__functional/invoke.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 - -// [concept.invocable] - -template -concept invocable = requires(_Fn&& __fn, _Args&&... __args) { - std::invoke(std::forward<_Fn>(__fn), std::forward<_Args>(__args)...); // not required to be equality preserving -}; - -// [concept.regular.invocable] - -template -concept regular_invocable = invocable<_Fn, _Args...>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_INVOCABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/movable.h b/third_party/libcxx/include/c++/v1/__concepts/movable.h deleted file mode 100644 index bc5b9d7..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/movable.h +++ /dev/null @@ -1,35 +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___CONCEPTS_MOVABLE_H -#define _LIBCPP___CONCEPTS_MOVABLE_H - -#include <__concepts/assignable.h> -#include <__concepts/constructible.h> -#include <__concepts/swappable.h> -#include <__config> -#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 - -// [concepts.object] - -template -concept movable = is_object_v<_Tp> && move_constructible<_Tp> && assignable_from<_Tp&, _Tp> && swappable<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_MOVABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/predicate.h b/third_party/libcxx/include/c++/v1/__concepts/predicate.h deleted file mode 100644 index e0263a8..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/predicate.h +++ /dev/null @@ -1,34 +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___CONCEPTS_PREDICATE_H -#define _LIBCPP___CONCEPTS_PREDICATE_H - -#include <__concepts/boolean_testable.h> -#include <__concepts/invocable.h> -#include <__config> -#include <__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.predicate] - -template -concept predicate = regular_invocable<_Fn, _Args...> && __boolean_testable>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_PREDICATE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/regular.h b/third_party/libcxx/include/c++/v1/__concepts/regular.h deleted file mode 100644 index 9f3d8bf..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/regular.h +++ /dev/null @@ -1,33 +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___CONCEPTS_REGULAR_H -#define _LIBCPP___CONCEPTS_REGULAR_H - -#include <__concepts/equality_comparable.h> -#include <__concepts/semiregular.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.object] - -template -concept regular = semiregular<_Tp> && equality_comparable<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_REGULAR_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/relation.h b/third_party/libcxx/include/c++/v1/__concepts/relation.h deleted file mode 100644 index 7545a7d..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/relation.h +++ /dev/null @@ -1,43 +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___CONCEPTS_RELATION_H -#define _LIBCPP___CONCEPTS_RELATION_H - -#include <__concepts/predicate.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.relation] - -template -concept relation = - predicate<_Rp, _Tp, _Tp> && predicate<_Rp, _Up, _Up> && predicate<_Rp, _Tp, _Up> && predicate<_Rp, _Up, _Tp>; - -// [concept.equiv] - -template -concept equivalence_relation = relation<_Rp, _Tp, _Up>; - -// [concept.strictweakorder] - -template -concept strict_weak_order = relation<_Rp, _Tp, _Up>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_RELATION_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/same_as.h b/third_party/libcxx/include/c++/v1/__concepts/same_as.h deleted file mode 100644 index 4241131..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/same_as.h +++ /dev/null @@ -1,35 +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___CONCEPTS_SAME_AS_H -#define _LIBCPP___CONCEPTS_SAME_AS_H - -#include <__config> -#include <__type_traits/is_same.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.same] - -template -concept __same_as_impl = _IsSame<_Tp, _Up>::value; - -template -concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_SAME_AS_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/semiregular.h b/third_party/libcxx/include/c++/v1/__concepts/semiregular.h deleted file mode 100644 index 7a159d1..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/semiregular.h +++ /dev/null @@ -1,33 +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___CONCEPTS_SEMIREGULAR_H -#define _LIBCPP___CONCEPTS_SEMIREGULAR_H - -#include <__concepts/constructible.h> -#include <__concepts/copyable.h> -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.object] - -template -concept semiregular = copyable<_Tp> && default_initializable<_Tp>; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_SEMIREGULAR_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/swappable.h b/third_party/libcxx/include/c++/v1/__concepts/swappable.h deleted file mode 100644 index c691d3a..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/swappable.h +++ /dev/null @@ -1,122 +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___CONCEPTS_SWAPPABLE_H -#define _LIBCPP___CONCEPTS_SWAPPABLE_H - -#include <__concepts/assignable.h> -#include <__concepts/class_or_enum.h> -#include <__concepts/common_reference_with.h> -#include <__concepts/constructible.h> -#include <__config> -#include <__cstddef/size_t.h> -#include <__type_traits/extent.h> -#include <__type_traits/is_nothrow_assignable.h> -#include <__type_traits/is_nothrow_constructible.h> -#include <__type_traits/remove_cvref.h> -#include <__utility/exchange.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 - -// [concept.swappable] - -namespace ranges { -namespace __swap { - -template -void swap(_Tp&, _Tp&) = delete; - -// clang-format off -template -concept __unqualified_swappable_with = - (__class_or_enum> || __class_or_enum>) && - requires(_Tp&& __t, _Up&& __u) { - swap(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - }; -// clang-format on - -struct __fn; - -// clang-format off -template -concept __swappable_arrays = - !__unqualified_swappable_with<_Tp (&)[_Size], _Up (&)[_Size]> && - extent_v<_Tp> == extent_v<_Up> && - requires(_Tp (&__t)[_Size], _Up (&__u)[_Size], const __fn& __swap) { - __swap(__t[0], __u[0]); - }; -// clang-format on - -template -concept __exchangeable = - !__unqualified_swappable_with<_Tp&, _Tp&> && move_constructible<_Tp> && assignable_from<_Tp&, _Tp>; - -struct __fn { - // 2.1 `S` is `(void)swap(E1, E2)`* if `E1` or `E2` has class or enumeration type and... - // *The name `swap` is used here unqualified. - template - requires __unqualified_swappable_with<_Tp, _Up> - _LIBCPP_HIDE_FROM_ABI constexpr void operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(swap(std::forward<_Tp>(__t), std::forward<_Up>(__u)))) { - swap(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - } - - // 2.2 Otherwise, if `E1` and `E2` are lvalues of array types with equal extent and... - template - requires __swappable_arrays<_Tp, _Up, _Size> - _LIBCPP_HIDE_FROM_ABI constexpr void operator()(_Tp (&__t)[_Size], _Up (&__u)[_Size]) const - noexcept(noexcept((*this)(*__t, *__u))) { - // TODO(cjdb): replace with `ranges::swap_ranges`. - for (size_t __i = 0; __i < _Size; ++__i) { - (*this)(__t[__i], __u[__i]); - } - } - - // 2.3 Otherwise, if `E1` and `E2` are lvalues of the same type `T` that models... - template <__exchangeable _Tp> - _LIBCPP_HIDE_FROM_ABI constexpr void operator()(_Tp& __x, _Tp& __y) const - noexcept(is_nothrow_move_constructible_v<_Tp> && is_nothrow_move_assignable_v<_Tp>) { - __y = std::exchange(__x, std::move(__y)); - } -}; -} // namespace __swap - -inline namespace __cpo { -inline constexpr auto swap = __swap::__fn{}; -} // namespace __cpo -} // namespace ranges - -template -concept swappable = requires(_Tp& __a, _Tp& __b) { ranges::swap(__a, __b); }; - -template -concept swappable_with = common_reference_with<_Tp, _Up> && requires(_Tp&& __t, _Up&& __u) { - ranges::swap(std::forward<_Tp>(__t), std::forward<_Tp>(__t)); - ranges::swap(std::forward<_Up>(__u), std::forward<_Up>(__u)); - ranges::swap(std::forward<_Tp>(__t), std::forward<_Up>(__u)); - ranges::swap(std::forward<_Up>(__u), std::forward<_Tp>(__t)); -}; - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CONCEPTS_SWAPPABLE_H diff --git a/third_party/libcxx/include/c++/v1/__concepts/totally_ordered.h b/third_party/libcxx/include/c++/v1/__concepts/totally_ordered.h deleted file mode 100644 index 186c3b4..0000000 --- a/third_party/libcxx/include/c++/v1/__concepts/totally_ordered.h +++ /dev/null @@ -1,59 +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___CONCEPTS_TOTALLY_ORDERED_H -#define _LIBCPP___CONCEPTS_TOTALLY_ORDERED_H - -#include <__concepts/boolean_testable.h> -#include <__concepts/equality_comparable.h> -#include <__config> -#include <__type_traits/common_reference.h> -#include <__type_traits/make_const_lvalue_ref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if _LIBCPP_STD_VER >= 20 - -// [concept.totallyordered] - -template -concept __partially_ordered_with = requires(__make_const_lvalue_ref<_Tp> __t, __make_const_lvalue_ref<_Up> __u) { - { __t < __u } -> __boolean_testable; - { __t > __u } -> __boolean_testable; - { __t <= __u } -> __boolean_testable; - { __t >= __u } -> __boolean_testable; - { __u < __t } -> __boolean_testable; - { __u > __t } -> __boolean_testable; - { __u <= __t } -> __boolean_testable; - { __u >= __t } -> __boolean_testable; -}; - -template -concept totally_ordered = equality_comparable<_Tp> && __partially_ordered_with<_Tp, _Tp>; - -// clang-format off -template -concept totally_ordered_with = - totally_ordered<_Tp> && totally_ordered<_Up> && - equality_comparable_with<_Tp, _Up> && - totally_ordered< - common_reference_t< - __make_const_lvalue_ref<_Tp>, - __make_const_lvalue_ref<_Up>>> && - __partially_ordered_with<_Tp, _Up>; -// clang-format on - -#endif // _LIBCPP_STD_VER >= 20 - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CONCEPTS_TOTALLY_ORDERED_H diff --git a/third_party/libcxx/include/c++/v1/__condition_variable/condition_variable.h b/third_party/libcxx/include/c++/v1/__condition_variable/condition_variable.h deleted file mode 100644 index b715193..0000000 --- a/third_party/libcxx/include/c++/v1/__condition_variable/condition_variable.h +++ /dev/null @@ -1,232 +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___CONDITION_VARIABLE_CONDITION_VARIABLE_H -#define _LIBCPP___CONDITION_VARIABLE_CONDITION_VARIABLE_H - -#include <__chrono/duration.h> -#include <__chrono/steady_clock.h> -#include <__chrono/system_clock.h> -#include <__chrono/time_point.h> -#include <__config> -#include <__mutex/mutex.h> -#include <__mutex/unique_lock.h> -#include <__system_error/throw_system_error.h> -#include <__thread/support.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_floating_point.h> -#include <__utility/move.h> -#include -#include - -#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_HAS_THREADS - -// enum class cv_status -_LIBCPP_DECLARE_STRONG_ENUM(cv_status){no_timeout, timeout}; -_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(cv_status) - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI chrono::nanoseconds __safe_nanosecond_cast(chrono::duration<_Rep, _Period> __d) { - using namespace chrono; - using __ratio = ratio_divide<_Period, nano>; - using __ns_rep = nanoseconds::rep; - _Rep __result_float = __d.count() * __ratio::num / __ratio::den; - - _Rep __result_max = numeric_limits<__ns_rep>::max(); - if (__result_float >= __result_max) { - return nanoseconds::max(); - } - - _Rep __result_min = numeric_limits<__ns_rep>::min(); - if (__result_float <= __result_min) { - return nanoseconds::min(); - } - - return nanoseconds(static_cast<__ns_rep>(__result_float)); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI chrono::nanoseconds __safe_nanosecond_cast(chrono::duration<_Rep, _Period> __d) { - using namespace chrono; - if (__d.count() == 0) { - return nanoseconds(0); - } - - using __ratio = ratio_divide<_Period, nano>; - using __ns_rep = nanoseconds::rep; - __ns_rep __result_max = numeric_limits<__ns_rep>::max(); - if (__d.count() > 0 && __d.count() > __result_max / __ratio::num) { - return nanoseconds::max(); - } - - __ns_rep __result_min = numeric_limits<__ns_rep>::min(); - if (__d.count() < 0 && __d.count() < __result_min / __ratio::num) { - return nanoseconds::min(); - } - - __ns_rep __result = __d.count() * __ratio::num / __ratio::den; - if (__result == 0) { - return nanoseconds(1); - } - - return nanoseconds(__result); -} - -class _LIBCPP_EXPORTED_FROM_ABI condition_variable { - __libcpp_condvar_t __cv_ = _LIBCPP_CONDVAR_INITIALIZER; - -public: - _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR condition_variable() _NOEXCEPT = default; - -# if _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION - ~condition_variable() = default; -# else - ~condition_variable(); -# endif - - condition_variable(const condition_variable&) = delete; - condition_variable& operator=(const condition_variable&) = delete; - - void notify_one() _NOEXCEPT; - void notify_all() _NOEXCEPT; - - void wait(unique_lock& __lk) _NOEXCEPT; - - template - _LIBCPP_HIDE_FROM_ABI void wait(unique_lock& __lk, _Predicate __pred) { - while (!__pred()) - wait(__lk); - } - - template - _LIBCPP_HIDE_FROM_ABI cv_status - wait_until(unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t) { - using namespace chrono; - using __clock_tp_ns = time_point<_Clock, nanoseconds>; - - typename _Clock::time_point __now = _Clock::now(); - if (__t <= __now) - return cv_status::timeout; - - __clock_tp_ns __t_ns = __clock_tp_ns(std::__safe_nanosecond_cast(__t.time_since_epoch())); - - __do_timed_wait(__lk, __t_ns); - return _Clock::now() < __t ? cv_status::no_timeout : cv_status::timeout; - } - - template - _LIBCPP_HIDE_FROM_ABI bool - wait_until(unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t, _Predicate __pred) { - while (!__pred()) { - if (wait_until(__lk, __t) == cv_status::timeout) - return __pred(); - } - return true; - } - - template - _LIBCPP_HIDE_FROM_ABI cv_status wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d) { - using namespace chrono; - if (__d <= __d.zero()) - return cv_status::timeout; - using __ns_rep = nanoseconds::rep; - steady_clock::time_point __c_now = steady_clock::now(); - -# if _LIBCPP_HAS_COND_CLOCKWAIT - using __clock_tp_ns = time_point; - __ns_rep __now_count_ns = std::__safe_nanosecond_cast(__c_now.time_since_epoch()).count(); -# else - using __clock_tp_ns = time_point; - __ns_rep __now_count_ns = std::__safe_nanosecond_cast(system_clock::now().time_since_epoch()).count(); -# endif - - __ns_rep __d_ns_count = std::__safe_nanosecond_cast(__d).count(); - - if (__now_count_ns > numeric_limits<__ns_rep>::max() - __d_ns_count) { - __do_timed_wait(__lk, __clock_tp_ns::max()); - } else { - __do_timed_wait(__lk, __clock_tp_ns(nanoseconds(__now_count_ns + __d_ns_count))); - } - - return steady_clock::now() - __c_now < __d ? cv_status::no_timeout : cv_status::timeout; - } - - template - bool _LIBCPP_HIDE_FROM_ABI - wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d, _Predicate __pred); - - typedef __libcpp_condvar_t* native_handle_type; - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI native_handle_type native_handle() { return &__cv_; } - -private: - void - __do_timed_wait(unique_lock& __lk, chrono::time_point) _NOEXCEPT; -# if _LIBCPP_HAS_COND_CLOCKWAIT - _LIBCPP_HIDE_FROM_ABI void - __do_timed_wait(unique_lock& __lk, chrono::time_point) _NOEXCEPT; -# endif - template - _LIBCPP_HIDE_FROM_ABI void - __do_timed_wait(unique_lock& __lk, chrono::time_point<_Clock, chrono::nanoseconds>) _NOEXCEPT; -}; -#endif // _LIBCPP_HAS_THREADS - -#if _LIBCPP_HAS_THREADS - -template -inline bool -condition_variable::wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d, _Predicate __pred) { - return wait_until(__lk, chrono::steady_clock::now() + __d, std::move(__pred)); -} - -# if _LIBCPP_HAS_COND_CLOCKWAIT -inline void condition_variable::__do_timed_wait( - unique_lock& __lk, chrono::time_point __tp) _NOEXCEPT { - using namespace chrono; - if (!__lk.owns_lock()) - std::__throw_system_error(EPERM, "condition_variable::timed wait: mutex not locked"); - nanoseconds __d = __tp.time_since_epoch(); - timespec __ts; - seconds __s = duration_cast(__d); - using __ts_sec = decltype(__ts.tv_sec); - const __ts_sec __ts_sec_max = numeric_limits<__ts_sec>::max(); - if (__s.count() < __ts_sec_max) { - __ts.tv_sec = static_cast<__ts_sec>(__s.count()); - __ts.tv_nsec = (__d - __s).count(); - } else { - __ts.tv_sec = __ts_sec_max; - __ts.tv_nsec = giga::num - 1; - } - int __ec = pthread_cond_clockwait(&__cv_, __lk.mutex()->native_handle(), CLOCK_MONOTONIC, &__ts); - if (__ec != 0 && __ec != ETIMEDOUT) - std::__throw_system_error(__ec, "condition_variable timed_wait failed"); -} -# endif // _LIBCPP_HAS_COND_CLOCKWAIT - -template -inline void condition_variable::__do_timed_wait(unique_lock& __lk, - chrono::time_point<_Clock, chrono::nanoseconds> __tp) _NOEXCEPT { - wait_for(__lk, __tp - _Clock::now()); -} - -#endif // _LIBCPP_HAS_THREADS - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CONDITION_VARIABLE_CONDITION_VARIABLE_H diff --git a/third_party/libcxx/include/c++/v1/__config b/third_party/libcxx/include/c++/v1/__config deleted file mode 100644 index 942b0a9..0000000 --- a/third_party/libcxx/include/c++/v1/__config +++ /dev/null @@ -1,612 +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___CONFIG -#define _LIBCPP___CONFIG - -#include <__config_site> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#ifdef __cplusplus - -# include <__configuration/abi.h> -# include <__configuration/attributes.h> -# include <__configuration/availability.h> -# include <__configuration/compiler.h> -# include <__configuration/experimental.h> -# include <__configuration/hardening.h> -# include <__configuration/language.h> -# include <__configuration/platform.h> - -// The attributes supported by clang are documented at https://clang.llvm.org/docs/AttributeReference.html - -// _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM. -// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 17.0.1 == 17.00.01), _LIBCPP_VERSION is -// defined to XXYYZZ. -# define _LIBCPP_VERSION 230000 - -# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y -# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y) -# define _LIBCPP_CONCAT3(X, Y, Z) _LIBCPP_CONCAT(X, _LIBCPP_CONCAT(Y, Z)) - -# define _LIBCPP_TOSTRING2(x) #x -# define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) - -# ifndef __has_constexpr_builtin -# define __has_constexpr_builtin(x) 0 -# endif - -// This checks wheter a Clang module is built -# ifndef __building_module -# define __building_module(...) 0 -# endif - -// '__is_identifier' returns '0' if '__x' is a reserved identifier provided by -// the compiler and '1' otherwise. -# ifndef __is_identifier -# define __is_identifier(__x) 1 -# endif - -# define __has_keyword(__x) !(__is_identifier(__x)) - -# ifndef __has_warning -# define __has_warning(...) 0 -# endif - -# if !defined(_LIBCPP_COMPILER_CLANG_BASED) && __cplusplus < 201103L -# error "libc++ only supports C++03 with Clang-based compilers. Please enable C++11" -# endif - -# if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME) -# define _LIBCPP_ABI_VCRUNTIME -# endif - -# if defined(__MVS__) -# include // for __NATIVE_ASCII_F -# endif - -# if defined(_WIN32) -# define _LIBCPP_WIN32API -# define _LIBCPP_SHORT_WCHAR 1 -// Both MinGW and native MSVC provide a "MSVC"-like environment -# define _LIBCPP_MSVCRT_LIKE -// If mingw not explicitly detected, assume using MS C runtime only if -// a MS compatibility version is specified. -# if defined(_MSC_VER) && !defined(__MINGW32__) -# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library -# endif -# if (defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_ARM) || defined(__arm__)) -# define _LIBCPP_HAS_BITSCAN64 1 -# else -# define _LIBCPP_HAS_BITSCAN64 0 -# endif -# define _LIBCPP_HAS_OPEN_WITH_WCHAR 1 -# else -# define _LIBCPP_HAS_OPEN_WITH_WCHAR 0 -# define _LIBCPP_HAS_BITSCAN64 0 -# endif // defined(_WIN32) - -# if defined(_AIX) && !defined(__64BIT__) -// The size of wchar is 2 byte on 32-bit mode on AIX. -# define _LIBCPP_SHORT_WCHAR 1 -# endif - -// Libc++ supports various implementations of std::random_device. -// -// _LIBCPP_USING_DEV_RANDOM -// Read entropy from the given file, by default `/dev/urandom`. -// If a token is provided, it is assumed to be the path to a file -// to read entropy from. This is the default behavior if nothing -// else is specified. This implementation requires storing state -// inside `std::random_device`. -// -// _LIBCPP_USING_ARC4_RANDOM -// Use arc4random(). This allows obtaining random data even when -// using sandboxing mechanisms. On some platforms like Apple, this -// is the recommended source of entropy for user-space programs. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_GETENTROPY -// Use getentropy(). -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_FUCHSIA_CPRNG -// Use Fuchsia's zx_cprng_draw() system call, which is specified to -// deliver high-quality entropy and cannot fail. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_WIN32_RANDOM -// Use rand_s(), for use on Windows. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__DragonFly__) -# define _LIBCPP_USING_ARC4_RANDOM -# elif defined(__wasi__) || defined(__EMSCRIPTEN__) -# define _LIBCPP_USING_GETENTROPY -# elif defined(__Fuchsia__) -# define _LIBCPP_USING_FUCHSIA_CPRNG -# elif defined(_LIBCPP_WIN32API) -# define _LIBCPP_USING_WIN32_RANDOM -# else -# define _LIBCPP_USING_DEV_RANDOM -# endif - -# ifndef _LIBCPP_CXX03_LANG - -# define _LIBCPP_ALIGNOF(...) alignof(__VA_ARGS__) -# define _ALIGNAS_TYPE(x) alignas(x) -# define _ALIGNAS(x) alignas(x) -# define _NOEXCEPT noexcept -# define _NOEXCEPT_(...) noexcept(__VA_ARGS__) -# define _LIBCPP_CONSTEXPR constexpr - -# else - -# define _LIBCPP_ALIGNOF(...) _Alignof(__VA_ARGS__) -# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(_LIBCPP_ALIGNOF(x)))) -# define _ALIGNAS(x) __attribute__((__aligned__(x))) -# define nullptr __nullptr -# define _NOEXCEPT throw() -# define _NOEXCEPT_(...) -# define static_assert(...) _Static_assert(__VA_ARGS__) -# define decltype(...) __decltype(__VA_ARGS__) -# define _LIBCPP_CONSTEXPR - -typedef __char16_t char16_t; -typedef __char32_t char32_t; - -# endif - -# define _LIBCPP_PREFERRED_ALIGNOF(_Tp) __alignof(_Tp) - -# if __has_extension(blocks) && defined(__APPLE__) -# define _LIBCPP_HAS_BLOCKS_RUNTIME 1 -# else -# define _LIBCPP_HAS_BLOCKS_RUNTIME 0 -# endif - -# ifdef _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") -# define _LIBCPP_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(clang diagnostic ignored str)) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) -# elif defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") -# define _LIBCPP_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(GCC diagnostic ignored str)) -# else -# define _LIBCPP_DIAGNOSTIC_PUSH -# define _LIBCPP_DIAGNOSTIC_POP -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) -# endif - -// Macros to enter and leave a state where deprecation warnings are suppressed. -# define _LIBCPP_SUPPRESS_DEPRECATED_PUSH \ - _LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") -# define _LIBCPP_SUPPRESS_DEPRECATED_POP _LIBCPP_DIAGNOSTIC_POP - -// Clang modules take a significant compile time hit when pushing and popping diagnostics. -// Since all the headers are marked as system headers unless _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER is defined, we can -// simply disable this pushing and popping when _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER isn't defined. -# ifdef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS \ - _LIBCPP_DIAGNOSTIC_PUSH \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++11-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++23-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++23-extensions") -# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS _LIBCPP_DIAGNOSTIC_POP -# else -# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS -# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS -# endif - -// clang-format off - -// The unversioned namespace is used when we want to be ABI compatible with other standard libraries in some way. There -// are two main categories where that's the case: -// - Historically, we have made exception types ABI compatible with libstdc++ to allow throwing them between libstdc++ -// and libc++. This is not used anymore for new exception types, since there is no use-case for it anymore. -// - Types and functions which are used by the compiler are in the unversioned namespace, since the compiler has to know -// their mangling without the appropriate declaration in some cases. -// If it's not clear whether using the unversioned namespace is the correct thing to do, it's not. The versioned -// namespace (_LIBCPP_BEGIN_NAMESPACE_STD) should almost always be used. -# define _LIBCPP_BEGIN_UNVERSIONED_NAMESPACE_STD \ - _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS namespace _LIBCPP_NAMESPACE_VISIBILITY std { - -# define _LIBCPP_END_UNVERSIONED_NAMESPACE_STD } _LIBCPP_POP_EXTENSION_DIAGNOSTICS - -# define _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_BEGIN_UNVERSIONED_NAMESPACE_STD inline namespace _LIBCPP_ABI_NAMESPACE { -# define _LIBCPP_END_NAMESPACE_STD } _LIBCPP_END_UNVERSIONED_NAMESPACE_STD - -// TODO: This should really be in the versioned namespace -#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL _LIBCPP_BEGIN_UNVERSIONED_NAMESPACE_STD namespace experimental { -#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL } _LIBCPP_END_UNVERSIONED_NAMESPACE_STD - -#define _LIBCPP_BEGIN_NAMESPACE_LFTS _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL inline namespace fundamentals_v1 { -#define _LIBCPP_END_NAMESPACE_LFTS } _LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#define _LIBCPP_BEGIN_NAMESPACE_LFTS_V2 _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL inline namespace fundamentals_v2 { -#define _LIBCPP_END_NAMESPACE_LFTS_V2 } _LIBCPP_END_NAMESPACE_EXPERIMENTAL - -#ifdef _LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE -# define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM _LIBCPP_BEGIN_NAMESPACE_STD namespace filesystem { -# define _LIBCPP_END_NAMESPACE_FILESYSTEM } _LIBCPP_END_NAMESPACE_STD -#else -# define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM _LIBCPP_BEGIN_NAMESPACE_STD \ - inline namespace __fs { namespace filesystem { - -# define _LIBCPP_END_NAMESPACE_FILESYSTEM }} _LIBCPP_END_NAMESPACE_STD -#endif - -// clang-format on - -# if !defined(__SIZEOF_INT128__) || defined(_MSC_VER) -# define _LIBCPP_HAS_INT128 0 -# else -# define _LIBCPP_HAS_INT128 1 -# endif - -# ifdef _LIBCPP_CXX03_LANG -# define _LIBCPP_DECLARE_STRONG_ENUM(x) \ - struct _LIBCPP_EXPORTED_FROM_ABI x { \ - enum __lx -// clang-format off -# define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ - __lx __v_; \ - _LIBCPP_HIDE_FROM_ABI x(__lx __v) : __v_(__v) {} \ - _LIBCPP_HIDE_FROM_ABI explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ - _LIBCPP_HIDE_FROM_ABI operator int() const { return __v_; } \ - }; -// clang-format on - -# else // _LIBCPP_CXX03_LANG -# define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class x -# define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) -# endif // _LIBCPP_CXX03_LANG - -# ifdef __FreeBSD__ -# define _DECLARE_C99_LDBL_MATH 1 -# endif - -// If we are getting operator new from the MSVC CRT, then allocation overloads -// for align_val_t were added in 19.12, aka VS 2017 version 15.3. -# if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912 -# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 0 -# elif defined(_LIBCPP_ABI_VCRUNTIME) && !defined(__cpp_aligned_new) -// We're deferring to Microsoft's STL to provide aligned new et al. We don't -// have it unless the language feature test macro is defined. -# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 0 -# elif defined(__MVS__) -# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 0 -# else -# define _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION 1 -# endif - -# if !_LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION || (!defined(__cpp_aligned_new) || __cpp_aligned_new < 201606) -# define _LIBCPP_HAS_ALIGNED_ALLOCATION 0 -# else -# define _LIBCPP_HAS_ALIGNED_ALLOCATION 1 -# endif - -# if defined(__APPLE__) || defined(__FreeBSD__) -# define _LIBCPP_WCTYPE_IS_MASK -# endif - -// FIXME: using `#warning` causes diagnostics from system headers which include deprecated headers. This can only be -// enabled again once https://github.com/llvm/llvm-project/pull/168041 (or a similar feature) has landed, since that -// allows suppression in system headers. -# if defined(__DEPRECATED) && __DEPRECATED && !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) && 0 -# define _LIBCPP_DIAGNOSE_DEPRECATED_HEADERS 1 -# else -# define _LIBCPP_DIAGNOSE_DEPRECATED_HEADERS 0 -# endif - -# if _LIBCPP_STD_VER <= 11 -# define _LIBCPP_EXPLICIT_SINCE_CXX14 -# else -# define _LIBCPP_EXPLICIT_SINCE_CXX14 explicit -# endif - -# if _LIBCPP_STD_VER >= 23 -# define _LIBCPP_EXPLICIT_SINCE_CXX23 explicit -# else -# define _LIBCPP_EXPLICIT_SINCE_CXX23 -# endif - -# if _LIBCPP_STD_VER >= 14 -# define _LIBCPP_CONSTEXPR_SINCE_CXX14 constexpr -# else -# define _LIBCPP_CONSTEXPR_SINCE_CXX14 -# endif - -# if _LIBCPP_STD_VER >= 17 -# define _LIBCPP_CONSTEXPR_SINCE_CXX17 constexpr -# else -# define _LIBCPP_CONSTEXPR_SINCE_CXX17 -# endif - -# if _LIBCPP_STD_VER >= 20 -# define _LIBCPP_CONSTEXPR_SINCE_CXX20 constexpr -# else -# define _LIBCPP_CONSTEXPR_SINCE_CXX20 -# endif - -# if _LIBCPP_STD_VER >= 23 -# define _LIBCPP_CONSTEXPR_SINCE_CXX23 constexpr -# else -# define _LIBCPP_CONSTEXPR_SINCE_CXX23 -# endif - -# if _LIBCPP_STD_VER >= 26 -# define _LIBCPP_CONSTEXPR_SINCE_CXX26 constexpr -# else -# define _LIBCPP_CONSTEXPR_SINCE_CXX26 -# endif - -// Thread API -// clang-format off -# if _LIBCPP_HAS_THREADS && \ - !_LIBCPP_HAS_THREAD_API_PTHREAD && \ - !_LIBCPP_HAS_THREAD_API_WIN32 && \ - !_LIBCPP_HAS_THREAD_API_EXTERNAL && \ - !_LIBCPP_HAS_THREAD_API_C11 - -# if defined(__FreeBSD__) || \ - defined(__wasi__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NuttX__) || \ - defined(__linux__) || \ - defined(__GNU__) || \ - defined(__APPLE__) || \ - defined(__MVS__) || \ - defined(_AIX) || \ - defined(__EMSCRIPTEN__) -// clang-format on -# undef _LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 -# elif defined(__Fuchsia__) -// TODO(44575): Switch to C11 thread API when possible. -# undef _LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_THREAD_API_PTHREAD 1 -# elif defined(_LIBCPP_WIN32API) -# undef _LIBCPP_HAS_THREAD_API_WIN32 -# define _LIBCPP_HAS_THREAD_API_WIN32 1 -# else -# error "No thread API" -# endif // _LIBCPP_HAS_THREAD_API -# endif // _LIBCPP_HAS_THREADS - -# if !_LIBCPP_HAS_THREAD_API_PTHREAD -# define _LIBCPP_HAS_COND_CLOCKWAIT 0 -# elif (defined(__ANDROID__) && __ANDROID_API__ >= 30) || _LIBCPP_GLIBC_PREREQ(2, 30) -# define _LIBCPP_HAS_COND_CLOCKWAIT 1 -# else -# define _LIBCPP_HAS_COND_CLOCKWAIT 0 -# endif - -# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_PTHREAD -# error _LIBCPP_HAS_THREAD_API_PTHREAD may only be true when _LIBCPP_HAS_THREADS is true. -# endif - -# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_EXTERNAL -# error _LIBCPP_HAS_THREAD_API_EXTERNAL may only be true when _LIBCPP_HAS_THREADS is true. -# endif - -# if !_LIBCPP_HAS_THREADS && _LIBCPP_HAS_THREAD_API_C11 -# error _LIBCPP_HAS_THREAD_API_C11 may only be true when _LIBCPP_HAS_THREADS is true. -# endif - -# if !_LIBCPP_HAS_MONOTONIC_CLOCK && _LIBCPP_HAS_THREADS -# error _LIBCPP_HAS_MONOTONIC_CLOCK may only be false when _LIBCPP_HAS_THREADS is false. -# endif - -# if _LIBCPP_HAS_THREADS && !defined(__STDCPP_THREADS__) -# define __STDCPP_THREADS__ 1 -# endif - -// The glibc and Bionic implementation of pthreads implements -// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32 -// mutexes have no destroy mechanism. -// -// This optimization can't be performed on Apple platforms, where -// pthread_mutex_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): Enable this optimization on Bionic after speaking to their -// respective stakeholders. -// clang-format off -# if (_LIBCPP_HAS_THREAD_API_PTHREAD && defined(__GLIBC__)) || \ - (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || \ - _LIBCPP_HAS_THREAD_API_WIN32 -// clang-format on -# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 1 -# else -# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION 0 -# endif - -// Destroying a condvar is a nop on Windows. -// -// This optimization can't be performed on Apple platforms, where -// pthread_cond_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): This is potentially true for some pthread implementations -// as well. -# if (_LIBCPP_HAS_THREAD_API_C11 && defined(__Fuchsia__)) || _LIBCPP_HAS_THREAD_API_WIN32 -# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 1 -# else -# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION 0 -# endif - -# if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || \ - _LIBCPP_HAS_MUSL_LIBC || defined(__OpenBSD__) || _LIBCPP_LIBC_LLVM_LIBC -# define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE -# endif - -# if __has_feature(cxx_atomic) || __has_extension(c_atomic) || __has_keyword(_Atomic) -# define _LIBCPP_HAS_C_ATOMIC_IMP 1 -# define _LIBCPP_HAS_GCC_ATOMIC_IMP 0 -# define _LIBCPP_HAS_EXTERNAL_ATOMIC_IMP 0 -# elif defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_HAS_C_ATOMIC_IMP 0 -# define _LIBCPP_HAS_GCC_ATOMIC_IMP 1 -# define _LIBCPP_HAS_EXTERNAL_ATOMIC_IMP 0 -# endif - -# if !_LIBCPP_HAS_C_ATOMIC_IMP && !_LIBCPP_HAS_GCC_ATOMIC_IMP && !_LIBCPP_HAS_EXTERNAL_ATOMIC_IMP -# define _LIBCPP_HAS_ATOMIC_HEADER 0 -# else -# define _LIBCPP_HAS_ATOMIC_HEADER 1 -# ifndef _LIBCPP_ATOMIC_FLAG_TYPE -# define _LIBCPP_ATOMIC_FLAG_TYPE bool -# endif -# endif - -// We often repeat things just for handling wide characters in the library. -// When wide characters are disabled, it can be useful to have a quick way of -// disabling it without having to resort to #if-#endif, which has a larger -// impact on readability. -# if !_LIBCPP_HAS_WIDE_CHARACTERS -# define _LIBCPP_IF_WIDE_CHARACTERS(...) -# else -# define _LIBCPP_IF_WIDE_CHARACTERS(...) __VA_ARGS__ -# endif - -// clang-format off -# define _LIBCPP_PUSH_MACROS _Pragma("push_macro(\"min\")") _Pragma("push_macro(\"max\")") _Pragma("push_macro(\"refresh\")") _Pragma("push_macro(\"move\")") _Pragma("push_macro(\"erase\")") -# define _LIBCPP_POP_MACROS _Pragma("pop_macro(\"min\")") _Pragma("pop_macro(\"max\")") _Pragma("pop_macro(\"refresh\")") _Pragma("pop_macro(\"move\")") _Pragma("pop_macro(\"erase\")") -// clang-format on - -# ifndef _LIBCPP_NO_AUTO_LINK -# if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_BUILDING_LIBRARY) -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -# pragma comment(lib, "c++.lib") -# else -# pragma comment(lib, "libc++.lib") -# endif -# endif // defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_BUILDING_LIBRARY) -# endif // _LIBCPP_NO_AUTO_LINK - -// Configures the fopen close-on-exec mode character, if any. This string will -// be appended to any mode string used by fstream for fopen/fdopen. -// -// Not all platforms support this, but it helps avoid fd-leaks on platforms that -// do. -# if defined(__BIONIC__) -# define _LIBCPP_FOPEN_CLOEXEC_MODE "e" -# else -# define _LIBCPP_FOPEN_CLOEXEC_MODE -# endif - -// c8rtomb() and mbrtoc8() were added in C++20 and C23. Support for these -// functions is gradually being added to existing C libraries. The conditions -// below check for known C library versions and conditions under which these -// functions are declared by the C library. -// -// GNU libc 2.36 and newer declare c8rtomb() and mbrtoc8() in C++ modes if -// __cpp_char8_t is defined or if C2X extensions are enabled. Determining -// the latter depends on internal GNU libc details that are not appropriate -// to depend on here, so any declarations present when __cpp_char8_t is not -// defined are ignored. -# if _LIBCPP_GLIBC_PREREQ(2, 36) && defined(__cpp_char8_t) -# define _LIBCPP_HAS_C8RTOMB_MBRTOC8 1 -# else -# define _LIBCPP_HAS_C8RTOMB_MBRTOC8 0 -# endif - -// There are a handful of public standard library types that are intended to -// support CTAD but don't need any explicit deduction guides to do so. This -// macro is used to mark them as such, which suppresses the -// '-Wctad-maybe-unsupported' compiler warning when CTAD is used in user code -// with these classes. -# if _LIBCPP_STD_VER >= 17 -# ifdef _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) \ - template \ - [[maybe_unused]] _ClassName(typename _Tag::__allow_ctad...)->_ClassName<_Tag...> -# else -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(ClassName) \ - template \ - ClassName(typename _Tag::__allow_ctad...)->ClassName<_Tag...> -# endif -# else -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "") -# endif - -# if defined(__OBJC__) && defined(_LIBCPP_APPLE_CLANG_VER) -# define _LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS -# endif - -# define _PSTL_PRAGMA(x) _Pragma(#x) - -// Enable SIMD for compilers that support OpenMP 4.0 -# if (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_UDR_PRESENT -# define _PSTL_PRAGMA_SIMD _PSTL_PRAGMA(omp simd) -# define _PSTL_PRAGMA_DECLARE_SIMD _PSTL_PRAGMA(omp declare simd) -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _PSTL_PRAGMA(omp simd reduction(PRM)) -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) _PSTL_PRAGMA(omp simd reduction(inscan, PRM)) -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan inclusive(PRM)) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan exclusive(PRM)) - -// Declaration of reduction functor, where -// NAME - the name of the functor -// OP - type of the callable object with the reduction operation -// omp_in - refers to the local partial result -// omp_out - refers to the final value of the combiner operator -// omp_priv - refers to the private copy of the initial value -// omp_orig - refers to the original variable to be reduced -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) \ - _PSTL_PRAGMA(omp declare reduction(NAME:OP : omp_out(omp_in)) initializer(omp_priv = omp_orig)) - -# elif defined(_LIBCPP_COMPILER_CLANG_BASED) - -# define _PSTL_PRAGMA_SIMD _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_DECLARE_SIMD -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) - -# else // (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_PRAGMA_SIMD -# define _PSTL_PRAGMA_DECLARE_SIMD -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) - -# endif // (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED - -#endif // __cplusplus - -#endif // _LIBCPP___CONFIG diff --git a/third_party/libcxx/include/c++/v1/__configuration/abi.h b/third_party/libcxx/include/c++/v1/__configuration/abi.h deleted file mode 100644 index 5ce040f..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/abi.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___CONFIGURATION_ABI_H -#define _LIBCPP___CONFIGURATION_ABI_H - -#include <__config_site> -#include <__configuration/compiler.h> -#include <__configuration/platform.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -// FIXME: ABI detection should be done via compiler builtin macros. This -// is just a placeholder until Clang implements such macros. For now assume -// that Windows compilers pretending to be MSVC++ target the Microsoft ABI, -// and allow the user to explicitly specify the ABI to handle cases where this -// heuristic falls short. -#if _LIBCPP_ABI_FORCE_ITANIUM && _LIBCPP_ABI_FORCE_MICROSOFT -# error "Only one of _LIBCPP_ABI_FORCE_ITANIUM and _LIBCPP_ABI_FORCE_MICROSOFT can be true" -#elif _LIBCPP_ABI_FORCE_ITANIUM -# define _LIBCPP_ABI_ITANIUM -#elif _LIBCPP_ABI_FORCE_MICROSOFT -# define _LIBCPP_ABI_MICROSOFT -#else -// Windows uses the Microsoft ABI -# if defined(_WIN32) && defined(_MSC_VER) -# define _LIBCPP_ABI_MICROSOFT - -// 32-bit ARM uses the Itanium ABI with a few differences (array cookies, etc), -// and so does 64-bit ARM on Apple platforms. -# elif defined(__arm__) || (defined(__APPLE__) && defined(__aarch64__)) -# define _LIBCPP_ABI_ITANIUM_WITH_ARM_DIFFERENCES - -// Non-Apple 64-bit ARM uses the vanilla Itanium ABI -# elif defined(__aarch64__) -# define _LIBCPP_ABI_ITANIUM - -// We assume that other architectures also use the vanilla Itanium ABI too -# else -# define _LIBCPP_ABI_ITANIUM -# endif -#endif - -#if _LIBCPP_ABI_VERSION >= 2 -// TODO: Move the description of the remaining ABI flags to ABIGuarantees.rst or remove them. - -// Override the default return value of exception::what() for bad_function_call::what() -// with a string that is specific to bad_function_call (see http://wg21.link/LWG2233). -// This is an ABI break on platforms that sign and authenticate vtable function pointers -// because it changes the mangling of the virtual function located in the vtable, which -// changes how it gets signed. -# define _LIBCPP_ABI_BAD_FUNCTION_CALL_GOOD_WHAT_MESSAGE -// According to the Standard, `bitset::operator[] const` returns bool -# define _LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL - -// These flags are documented in ABIGuarantees.rst -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -# define _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE -# define _LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI -# define _LIBCPP_ABI_ENABLE_UNIQUE_PTR_TRIVIAL_ABI -# define _LIBCPP_ABI_FIX_CITYHASH_IMPLEMENTATION -# define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE -# define _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE -# define _LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE -# define _LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING -# define _LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE -# define _LIBCPP_ABI_NO_ITERATOR_BASES -# define _LIBCPP_ABI_NO_RANDOM_DEVICE_COMPATIBILITY_LAYOUT -# define _LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER -# define _LIBCPP_ABI_OPTIMIZED_FUNCTION -# define _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO -# define _LIBCPP_ABI_STRING_OPTIMIZED_EXTERNAL_INSTANTIATION -# define _LIBCPP_ABI_USE_WRAP_ITER_IN_STD_ARRAY -# define _LIBCPP_ABI_USE_WRAP_ITER_IN_STD_STRING_VIEW -# define _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION -# define _LIBCPP_ABI_TRIVIALLY_COPYABLE_BIT_ITERATOR - -#elif _LIBCPP_ABI_VERSION == 1 -// Feature macros for disabling pre ABI v1 features. All of these options -// are deprecated. -# if defined(__FreeBSD__) -# define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR -# endif -#endif - -// TODO(LLVM 22): Remove this check -#if defined(_LIBCPP_ABI_NO_ITERATOR_BASES) && !defined(_LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER) -# ifndef _LIBCPP_ONLY_NO_ITERATOR_BASES -# error "You probably want to define _LIBCPP_ABI_NO_REVERSE_ITERATOR_SECOND_MEMBER. This has been split out from" \ - " _LIBCPP_ABI_NO_ITERATOR_BASES to allow only removing the second iterator member, since they aren't really related." \ - "If you actually want this ABI configuration, please define _LIBCPP_ONLY_NO_ITERATOR_BASES instead." -# endif -#endif - -// We had some bugs where we use [[no_unique_address]] together with construct_at, -// which causes UB as the call on construct_at could write to overlapping subobjects -// -// https://llvm.org/PR70506 -// https://llvm.org/PR70494 -// -// To fix the bug we had to change the ABI of some classes to remove [[no_unique_address]] under certain conditions. -// The macro below is used for all classes whose ABI have changed as part of fixing these bugs. -#define _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS __attribute__((__abi_tag__("llvm18_nua"))) - -// [[msvc::no_unique_address]] seems to mostly affect empty classes, so the padding scheme for Itanium doesn't work. -#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING) -# define _LIBCPP_ABI_NO_COMPRESSED_PAIR_PADDING -#endif - -// Tracks the bounds of the array owned by std::unique_ptr, allowing it to trap when accessed out-of-bounds. -// Note that limited bounds checking is also available outside of this ABI configuration, but only some categories -// of types can be checked. -// -// ABI impact: This causes the layout of std::unique_ptr to change and its size to increase. -// This also affects the representation of a few library types that use std::unique_ptr -// internally, such as the unordered containers. -// #define _LIBCPP_ABI_BOUNDED_UNIQUE_PTR - -#if defined(_LIBCPP_COMPILER_CLANG_BASED) -# if defined(__APPLE__) -# if defined(__i386__) || defined(__x86_64__) -// use old string layout on x86_64 and i386 -# elif defined(__arm__) -// use old string layout on arm (which does not include aarch64/arm64), except on watch ABIs -# if defined(__ARM_ARCH_7K__) && __ARM_ARCH_7K__ >= 2 -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -# endif -# else -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -# endif -# endif -#endif - -#endif // _LIBCPP___CONFIGURATION_ABI_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/attributes.h b/third_party/libcxx/include/c++/v1/__configuration/attributes.h deleted file mode 100644 index 39683b7..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/attributes.h +++ /dev/null @@ -1,466 +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___CONFIGURATION_ATTRIBUTES_H -#define _LIBCPP___CONFIGURATION_ATTRIBUTES_H - -#include <__config_site> -#include <__configuration/hardening.h> -#include <__configuration/language.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#ifndef __has_declspec_attribute -# define __has_declspec_attribute(__x) 0 -#endif - -// Attributes relevant for layout ABI -// ---------------------------------- - -#if __has_cpp_attribute(msvc::no_unique_address) -// MSVC implements [[no_unique_address]] as a silent no-op currently. -// (If/when MSVC breaks its C++ ABI, it will be changed to work as intended.) -// However, MSVC implements [[msvc::no_unique_address]] which does what -// [[no_unique_address]] is supposed to do, in general. -# define _LIBCPP_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]] -#else -# define _LIBCPP_NO_UNIQUE_ADDRESS [[__no_unique_address__]] -#endif - -#define _LIBCPP_PACKED __attribute__((__packed__)) - -// Attributes affecting overload resolution -// ---------------------------------------- - -#if __has_attribute(__enable_if__) -# define _LIBCPP_PREFERRED_OVERLOAD __attribute__((__enable_if__(true, ""))) -#endif - -// Visibility attributes -// --------------------- - -#if defined(_LIBCPP_OBJECT_FORMAT_COFF) - -# ifdef _DLL -# define _LIBCPP_CRT_FUNC __declspec(dllimport) -# else -# define _LIBCPP_CRT_FUNC -# endif - -# if defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) || (defined(__MINGW32__) && !defined(_LIBCPP_BUILDING_LIBRARY)) -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_EXPORTED_FROM_ABI -# elif defined(_LIBCPP_BUILDING_LIBRARY) -# if defined(__MINGW32__) -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __declspec(dllexport) -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# else -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS __declspec(dllexport) -# endif -# define _LIBCPP_OVERRIDABLE_FUNC_VIS __declspec(dllexport) -# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllexport) -# else -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __declspec(dllimport) -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllimport) -# endif - -# define _LIBCPP_HIDDEN -# define _LIBCPP_TEMPLATE_DATA_VIS -# define _LIBCPP_NAMESPACE_VISIBILITY - -#else - -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -# define _LIBCPP_VISIBILITY(vis) __attribute__((__visibility__(vis))) -# else -# define _LIBCPP_VISIBILITY(vis) -# endif - -# define _LIBCPP_HIDDEN _LIBCPP_VISIBILITY("hidden") -# define _LIBCPP_TEMPLATE_DATA_VIS _LIBCPP_VISIBILITY("default") -# define _LIBCPP_EXPORTED_FROM_ABI _LIBCPP_VISIBILITY("default") -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_VISIBILITY("default") -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS - -// TODO: Make this a proper customization point or remove the option to override it. -# ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_VISIBILITY("default") -# endif - -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) && __has_attribute(__type_visibility__) -# define _LIBCPP_NAMESPACE_VISIBILITY __attribute__((__type_visibility__("default"))) -# elif !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -# define _LIBCPP_NAMESPACE_VISIBILITY __attribute__((__visibility__("default"))) -# else -# define _LIBCPP_NAMESPACE_VISIBILITY -# endif - -#endif // defined(_LIBCPP_OBJECT_FORMAT_COFF) - -// hide_from_abi -// ------------- - -#define _LIBCPP_ALWAYS_INLINE __attribute__((__always_inline__)) - -#if __has_attribute(exclude_from_explicit_instantiation) -# define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION __attribute__((__exclude_from_explicit_instantiation__)) -#else -// Try to approximate the effect of exclude_from_explicit_instantiation -// (which is that entities are not assumed to be provided by explicit -// template instantiations in the dylib) by always inlining those entities. -# define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION _LIBCPP_ALWAYS_INLINE -#endif - -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST -# define _LIBCPP_HARDENING_SIG f -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_EXTENSIVE -# define _LIBCPP_HARDENING_SIG s -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -# define _LIBCPP_HARDENING_SIG d -#else -# define _LIBCPP_HARDENING_SIG n // "none" -#endif - -#if _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_OBSERVE -# define _LIBCPP_ASSERTION_SEMANTIC_SIG o -#elif _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE -# define _LIBCPP_ASSERTION_SEMANTIC_SIG q -#elif _LIBCPP_ASSERTION_SEMANTIC == _LIBCPP_ASSERTION_SEMANTIC_ENFORCE -# define _LIBCPP_ASSERTION_SEMANTIC_SIG e -#else -# define _LIBCPP_ASSERTION_SEMANTIC_SIG i // `ignore` -#endif - -#if !_LIBCPP_HAS_EXCEPTIONS -# define _LIBCPP_EXCEPTIONS_SIG n -#else -# define _LIBCPP_EXCEPTIONS_SIG e -#endif - -#define _LIBCPP_ODR_SIGNATURE \ - _LIBCPP_CONCAT( \ - _LIBCPP_CONCAT(_LIBCPP_CONCAT(_LIBCPP_HARDENING_SIG, _LIBCPP_ASSERTION_SEMANTIC_SIG), _LIBCPP_EXCEPTIONS_SIG), \ - _LIBCPP_VERSION) - -// This macro marks a symbol as being hidden from libc++'s ABI. This is achieved -// on two levels: -// 1. The symbol is given hidden visibility, which ensures that users won't start exporting -// symbols from their dynamic library by means of using the libc++ headers. This ensures -// that those symbols stay private to the dynamic library in which it is defined. -// -// 2. The symbol is given an ABI tag that encodes the ODR-relevant properties of the library. -// This ensures that no ODR violation can arise from mixing two TUs compiled with different -// versions or configurations of libc++ (such as exceptions vs no-exceptions). Indeed, if the -// program contains two definitions of a function, the ODR requires them to be token-by-token -// equivalent, and the linker is allowed to pick either definition and discard the other one. -// -// For example, if a program contains a copy of `vector::at()` compiled with exceptions enabled -// *and* a copy of `vector::at()` compiled with exceptions disabled (by means of having two TUs -// compiled with different settings), the two definitions are both visible by the linker and they -// have the same name, but they have a meaningfully different implementation (one throws an exception -// and the other aborts the program). This violates the ODR and makes the program ill-formed, and in -// practice what will happen is that the linker will pick one of the definitions at random and will -// discard the other one. This can quite clearly lead to incorrect program behavior. -// -// A similar reasoning holds for many other properties that are ODR-affecting. Essentially any -// property that causes the code of a function to differ from the code in another configuration -// can be considered ODR-affecting. In practice, we don't encode all such properties in the ABI -// tag, but we encode the ones that we think are most important: library version, exceptions, and -// hardening mode. -// -// Note that historically, solving this problem has been achieved in various ways, including -// force-inlining all functions or giving internal linkage to all functions. Both these previous -// solutions suffer from drawbacks that lead notably to code bloat. -// -// Note that we use _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION to ensure that we don't depend -// on _LIBCPP_HIDE_FROM_ABI methods of classes explicitly instantiated in the dynamic library. -// -// Also note that the _LIBCPP_HIDE_FROM_ABI_VIRTUAL macro should be used on virtual functions -// instead of _LIBCPP_HIDE_FROM_ABI. That macro does not use an ABI tag. Indeed, the mangled -// name of a virtual function is part of its ABI, since some architectures like arm64e can sign -// the virtual function pointer in the vtable based on the mangled name of the function. Since -// we use an ABI tag that changes with each released version, the mangled name of the virtual -// function would change, which is incorrect. Note that it doesn't make much sense to change -// the implementation of a virtual function in an ABI-incompatible way in the first place, -// since that would be an ABI break anyway. Hence, the lack of ABI tag should not be noticeable. -// -// The macro can be applied to record and enum types. When the tagged type is nested in -// a record this "parent" record needs to have the macro too. Another use case for applying -// this macro to records and unions is to apply an ABI tag to inline constexpr variables. -// This can be useful for inline variables that are implementation details which are expected -// to change in the future. -// -// TODO: We provide a escape hatch with _LIBCPP_NO_ABI_TAG for folks who want to avoid increasing -// the length of symbols with an ABI tag. In practice, we should remove the escape hatch and -// use compression mangling instead, see https://github.com/itanium-cxx-abi/cxx-abi/issues/70. -#ifndef _LIBCPP_NO_ABI_TAG -# define _LIBCPP_HIDE_FROM_ABI \ - _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION \ - __attribute__((__abi_tag__(_LIBCPP_TOSTRING(_LIBCPP_ODR_SIGNATURE)))) -#else -# define _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION -#endif -#define _LIBCPP_HIDE_FROM_ABI_VIRTUAL _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION - -// Optional attributes -// ------------------- - -// these are useful for a better QoI, but not required to be available - -#define _LIBCPP_NOALIAS __attribute__((__malloc__)) -#define _LIBCPP_NODEBUG [[__gnu__::__nodebug__]] -#define _LIBCPP_NO_SANITIZE(...) __attribute__((__no_sanitize__(__VA_ARGS__))) -#define _LIBCPP_INIT_PRIORITY_MAX __attribute__((__init_priority__(100))) -#define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) \ - __attribute__((__format__(archetype, format_string_index, first_format_arg_index))) - -#if __has_attribute(__no_sanitize__) && !defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_NO_CFI __attribute__((__no_sanitize__("cfi"))) -#else -# define _LIBCPP_NO_CFI -#endif - -#if __has_attribute(__using_if_exists__) -# define _LIBCPP_USING_IF_EXISTS __attribute__((__using_if_exists__)) -#else -# define _LIBCPP_USING_IF_EXISTS -#endif - -#if __has_cpp_attribute(_Clang::__no_destroy__) -# define _LIBCPP_NO_DESTROY [[_Clang::__no_destroy__]] -#else -# define _LIBCPP_NO_DESTROY -#endif - -#if __has_attribute(__diagnose_if__) -# define _LIBCPP_DIAGNOSE_WARNING(...) __attribute__((__diagnose_if__(__VA_ARGS__, "warning"))) -#else -# define _LIBCPP_DIAGNOSE_WARNING(...) -#endif - -#if __has_attribute(__diagnose_if__) && !defined(_LIBCPP_APPLE_CLANG_VER) && \ - (!defined(_LIBCPP_CLANG_VER) || _LIBCPP_CLANG_VER >= 2001) -# define _LIBCPP_DIAGNOSE_IF(...) __attribute__((__diagnose_if__(__VA_ARGS__))) -#else -# define _LIBCPP_DIAGNOSE_IF(...) -#endif - -#define _LIBCPP_DIAGNOSE_NULLPTR_IF(condition, condition_description) \ - _LIBCPP_DIAGNOSE_IF( \ - condition, \ - "null passed to callee that requires a non-null argument" condition_description, \ - "warning", \ - "nonnull") - -#if __has_cpp_attribute(_Clang::__lifetimebound__) -# define _LIBCPP_LIFETIMEBOUND [[_Clang::__lifetimebound__]] -#else -# define _LIBCPP_LIFETIMEBOUND -#endif - -// This is to work around https://llvm.org/PR156809 -#ifndef _LIBCPP_CXX03_LANG -# define _LIBCPP_CTOR_LIFETIMEBOUND _LIBCPP_LIFETIMEBOUND -#else -# define _LIBCPP_CTOR_LIFETIMEBOUND -#endif - -#if __has_cpp_attribute(_Clang::__noescape__) -# define _LIBCPP_NOESCAPE [[_Clang::__noescape__]] -#else -# define _LIBCPP_NOESCAPE -#endif - -#if __has_cpp_attribute(_Clang::__no_specializations__) -# define _LIBCPP_NO_SPECIALIZATIONS \ - [[_Clang::__no_specializations__("Users are not allowed to specialize this standard library entity")]] -#else -# define _LIBCPP_NO_SPECIALIZATIONS -#endif - -#if __has_cpp_attribute(_Clang::__preferred_name__) -# define _LIBCPP_PREFERRED_NAME(x) [[_Clang::__preferred_name__(x)]] -#else -# define _LIBCPP_PREFERRED_NAME(x) -#endif - -#if __has_cpp_attribute(_Clang::__scoped_lockable__) -# define _LIBCPP_SCOPED_LOCKABLE [[_Clang::__scoped_lockable__]] -#else -# define _LIBCPP_SCOPED_LOCKABLE -#endif - -#if __has_cpp_attribute(_Clang::__capability__) -# define _LIBCPP_CAPABILITY(...) [[_Clang::__capability__(__VA_ARGS__)]] -#else -# define _LIBCPP_CAPABILITY(...) -#endif - -#if __has_attribute(__acquire_capability__) -# define _LIBCPP_ACQUIRE_CAPABILITY(...) __attribute__((__acquire_capability__(__VA_ARGS__))) -#else -# define _LIBCPP_ACQUIRE_CAPABILITY(...) -#endif - -#if __has_cpp_attribute(_Clang::__try_acquire_capability__) -# define _LIBCPP_TRY_ACQUIRE_CAPABILITY(...) [[_Clang::__try_acquire_capability__(__VA_ARGS__)]] -#else -# define _LIBCPP_TRY_ACQUIRE_CAPABILITY(...) -#endif - -#if __has_cpp_attribute(_Clang::__acquire_shared_capability__) -# define _LIBCPP_ACQUIRE_SHARED_CAPABILITY [[_Clang::__acquire_shared_capability__]] -#else -# define _LIBCPP_ACQUIRE_SHARED_CAPABILITY -#endif - -#if __has_cpp_attribute(_Clang::__try_acquire_shared_capability__) -# define _LIBCPP_TRY_ACQUIRE_SHARED_CAPABILITY(...) [[_Clang::__try_acquire_shared_capability__(__VA_ARGS__)]] -#else -# define _LIBCPP_TRY_ACQUIRE_SHARED_CAPABILITY(...) -#endif - -#if __has_cpp_attribute(_Clang::__release_capability__) -# define _LIBCPP_RELEASE_CAPABILITY [[_Clang::__release_capability__]] -#else -# define _LIBCPP_RELEASE_CAPABILITY -#endif - -#if __has_cpp_attribute(_Clang::__release_shared_capability__) -# define _LIBCPP_RELEASE_SHARED_CAPABILITY [[_Clang::__release_shared_capability__]] -#else -# define _LIBCPP_RELEASE_SHARED_CAPABILITY -#endif - -#if __has_attribute(__requires_capability__) -# define _LIBCPP_REQUIRES_CAPABILITY(...) __attribute__((__requires_capability__(__VA_ARGS__))) -#else -# define _LIBCPP_REQUIRES_CAPABILITY(...) -#endif - -#if __has_cpp_attribute(_Clang::__no_thread_safety_analysis__) -# define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS [[_Clang::__no_thread_safety_analysis__]] -#else -# define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS -#endif - -#if defined(_LIBCPP_ABI_MICROSOFT) && __has_declspec_attribute(empty_bases) -# define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases) -#else -# define _LIBCPP_DECLSPEC_EMPTY_BASES -#endif - -// Allow for build-time disabling of unsigned integer sanitization -#if __has_attribute(no_sanitize) && !defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow"))) -#else -# define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK -#endif - -#if __has_feature(nullability) -# define _LIBCPP_DIAGNOSE_NULLPTR _Nonnull -#else -# define _LIBCPP_DIAGNOSE_NULLPTR -#endif - -#if defined(__CUDACC__) || defined(__CUDA_ARCH__) || defined(__CUDA_LIBDEVICE__) -// The CUDA SDK contains an unfortunate definition for the __noinline__ macro, -// which breaks the regular __attribute__((__noinline__)) syntax. Therefore, -// when compiling for CUDA we use the non-underscored version of the noinline -// attribute. -// -// This is a temporary workaround and we still expect the CUDA SDK team to solve -// this issue properly in the SDK headers. -// -// See https://github.com/llvm/llvm-project/pull/73838 for more details. -# define _LIBCPP_NOINLINE __attribute__((noinline)) -#elif __has_attribute(__noinline__) -# define _LIBCPP_NOINLINE __attribute__((__noinline__)) -#else -# define _LIBCPP_NOINLINE -#endif - -// Deprecation macros -// ------------------ - -// Deprecations warnings are always enabled, except when users explicitly opt-out -// by defining _LIBCPP_DISABLE_DEPRECATION_WARNINGS. -#if !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) -# if __has_attribute(__deprecated__) -# define _LIBCPP_DEPRECATED __attribute__((__deprecated__)) -# define _LIBCPP_DEPRECATED_(m) __attribute__((__deprecated__(m))) -# elif _LIBCPP_STD_VER >= 14 -# define _LIBCPP_DEPRECATED [[deprecated]] -# define _LIBCPP_DEPRECATED_(m) [[deprecated(m)]] -# else -# define _LIBCPP_DEPRECATED -# define _LIBCPP_DEPRECATED_(m) -# endif -#else -# define _LIBCPP_DEPRECATED -# define _LIBCPP_DEPRECATED_(m) -#endif - -#if !defined(_LIBCPP_CXX03_LANG) -# define _LIBCPP_DEPRECATED_IN_CXX11 _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_IN_CXX11 -#endif - -#if _LIBCPP_STD_VER >= 14 -# define _LIBCPP_DEPRECATED_IN_CXX14 _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_IN_CXX14 -#endif - -#if _LIBCPP_STD_VER >= 17 -# define _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_IN_CXX17 -#endif - -#if _LIBCPP_STD_VER >= 20 -# define _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_IN_CXX20 -#endif - -#if _LIBCPP_STD_VER >= 23 -# define _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_IN_CXX23 -#endif - -#if _LIBCPP_STD_VER >= 26 -# define _LIBCPP_DEPRECATED_IN_CXX26 _LIBCPP_DEPRECATED -# define _LIBCPP_DEPRECATED_IN_CXX26_(m) _LIBCPP_DEPRECATED_(m) -#else -# define _LIBCPP_DEPRECATED_IN_CXX26 -# define _LIBCPP_DEPRECATED_IN_CXX26_(m) -#endif - -#if _LIBCPP_HAS_CHAR8_T -# define _LIBCPP_DEPRECATED_WITH_CHAR8_T _LIBCPP_DEPRECATED -#else -# define _LIBCPP_DEPRECATED_WITH_CHAR8_T -#endif - -#if __has_cpp_attribute(_Clang::__no_field_protection__) -# define _LIBCPP_DISABLE_POINTER_FIELD_PROTECTION [[_Clang::__no_field_protection__]] -#else -# define _LIBCPP_DISABLE_POINTER_FIELD_PROTECTION -#endif - -#endif // _LIBCPP___CONFIGURATION_ATTRIBUTES_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/availability.h b/third_party/libcxx/include/c++/v1/__configuration/availability.h deleted file mode 100644 index f1a598b..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/availability.h +++ /dev/null @@ -1,299 +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___CONFIGURATION_AVAILABILITY_H -#define _LIBCPP___CONFIGURATION_AVAILABILITY_H - -#include <__configuration/compiler.h> -#include <__configuration/language.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// This file defines a framework that can be used by vendors to encode the version of an operating system that various -// features of libc++ has been shipped in. This is primarily intended to allow safely deploying an executable built with -// a new version of the library on a platform containing an older version of the built library. -// Detailed documentation for this can be found at https://libcxx.llvm.org/VendorDocumentation.html#availability-markup - -// Availability markup is disabled when building the library, or when a non-Clang -// compiler is used because only Clang supports the necessary attributes. -// -// We also allow users to force-disable availability markup via the `_LIBCPP_DISABLE_AVAILABILITY` -// macro because that is the only way to work around a Clang bug related to availability -// attributes: https://llvm.org/PR134151. -// Once that bug has been fixed, we should remove the macro. -#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || \ - !defined(_LIBCPP_COMPILER_CLANG_BASED) || defined(_LIBCPP_DISABLE_AVAILABILITY) -# undef _LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS -# define _LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS 0 -#endif - -// When availability annotations are disabled, we take for granted that features introduced -// in all versions of the library are available. -#if !_LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS - -# define _LIBCPP_INTRODUCED_IN_LLVM_22 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_22_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_21 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_21_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_20 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_20_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_19 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_18 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_16 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_15 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_14 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_12 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE /* nothing */ - -#elif defined(__APPLE__) - -// clang-format off - -// LLVM 22 -// TODO: Fill this in -# define _LIBCPP_INTRODUCED_IN_LLVM_22 0 -# define _LIBCPP_INTRODUCED_IN_LLVM_22_ATTRIBUTE __attribute__((unavailable)) - -// LLVM 21 -// TODO: Fill this in -# define _LIBCPP_INTRODUCED_IN_LLVM_21 0 -# define _LIBCPP_INTRODUCED_IN_LLVM_21_ATTRIBUTE __attribute__((unavailable)) - -// LLVM 20 -// -// Note that versions for most Apple OSes were bumped forward and aligned in that release. -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 260000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 260000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 260000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 260000) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 100000) -# define _LIBCPP_INTRODUCED_IN_LLVM_20 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_20 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_20_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 26.0))) \ - __attribute__((availability(ios, strict, introduced = 26.0))) \ - __attribute__((availability(tvos, strict, introduced = 26.0))) \ - __attribute__((availability(watchos, strict, introduced = 26.0))) \ - __attribute__((availability(bridgeos, strict, introduced = 10.0))) - -// LLVM 19 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 150400) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 180400) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 180400) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 110400) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 90400) -# define _LIBCPP_INTRODUCED_IN_LLVM_19 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_19 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 15.4))) \ - __attribute__((availability(ios, strict, introduced = 18.4))) \ - __attribute__((availability(tvos, strict, introduced = 18.4))) \ - __attribute__((availability(watchos, strict, introduced = 11.4))) \ - __attribute__((availability(bridgeos, strict, introduced = 9.4))) - -// LLVM 18 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 150000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 180000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 180000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 110000) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 90000) || \ - (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 240000) -# define _LIBCPP_INTRODUCED_IN_LLVM_18 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_18 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 15.0))) \ - __attribute__((availability(ios, strict, introduced = 18.0))) \ - __attribute__((availability(tvos, strict, introduced = 18.0))) \ - __attribute__((availability(watchos, strict, introduced = 11.0))) \ - __attribute__((availability(bridgeos, strict, introduced = 9.0))) \ - __attribute__((availability(driverkit, strict, introduced = 24.0))) - -// LLVM 16 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100000) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 80000) || \ - (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 230000) -# define _LIBCPP_INTRODUCED_IN_LLVM_16 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_16 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 14.0))) \ - __attribute__((availability(ios, strict, introduced = 17.0))) \ - __attribute__((availability(tvos, strict, introduced = 17.0))) \ - __attribute__((availability(watchos, strict, introduced = 10.0))) \ - __attribute__((availability(bridgeos, strict, introduced = 8.0))) \ - __attribute__((availability(driverkit, strict, introduced = 23.0))) - -// LLVM 15 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130300) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160300) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160300) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90300) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 70500) || \ - (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 220400) -# define _LIBCPP_INTRODUCED_IN_LLVM_15 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_15 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 13.3))) \ - __attribute__((availability(ios, strict, introduced = 16.3))) \ - __attribute__((availability(tvos, strict, introduced = 16.3))) \ - __attribute__((availability(watchos, strict, introduced = 9.3))) \ - __attribute__((availability(bridgeos, strict, introduced = 7.5))) \ - __attribute__((availability(driverkit, strict, introduced = 22.4))) - -// LLVM 14 -# define _LIBCPP_INTRODUCED_IN_LLVM_14 _LIBCPP_INTRODUCED_IN_LLVM_15 -# define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE - -// LLVM 12 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 120300) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 150300) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 150300) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 80300) || \ - (defined(__ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_BRIDGE_OS_VERSION_MIN_REQUIRED__ < 60000) || \ - (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 210300) -# define _LIBCPP_INTRODUCED_IN_LLVM_12 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_12 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 12.3))) \ - __attribute__((availability(ios, strict, introduced = 15.3))) \ - __attribute__((availability(tvos, strict, introduced = 15.3))) \ - __attribute__((availability(watchos, strict, introduced = 8.3))) \ - __attribute__((availability(bridgeos, strict, introduced = 6.0))) \ - __attribute__((availability(driverkit, strict, introduced = 21.3))) - -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 150000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 150000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 80000) || \ - (defined(__ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_DRIVERKIT_VERSION_MIN_REQUIRED__ < 200000) -# warning "The selected platform is no longer supported by libc++." -# endif - -#else - -// ...New vendors can add availability markup here... - -# error \ - "It looks like you're trying to enable vendor availability markup, but you haven't defined the corresponding macros yet!" - -#endif - -// This controls the availability of new implementation of std::atomic's -// wait, notify_one and notify_all. The new implementation uses -// the native atomic wait/notify operations on platforms that support them -// based on the size of the atomic type, instead of the type itself. -#define _LIBCPP_AVAILABILITY_HAS_NEW_SYNC _LIBCPP_INTRODUCED_IN_LLVM_22 -#define _LIBCPP_AVAILABILITY_NEW_SYNC _LIBCPP_INTRODUCED_IN_LLVM_22_ATTRIBUTE - -// This controls whether `std::__hash_memory` is available in the dylib, which -// is used for some `std::hash` specializations. -#define _LIBCPP_AVAILABILITY_HAS_HASH_MEMORY _LIBCPP_INTRODUCED_IN_LLVM_21 -// No attribute, since we've had hash in the headers before - -// This controls whether we provide a message for `bad_function_call::what()` that specific to `std::bad_function_call`. -// See https://wg21.link/LWG2233. This requires `std::bad_function_call::what()` to be available in the dylib. -#define _LIBCPP_AVAILABILITY_HAS_BAD_FUNCTION_CALL_GOOD_WHAT_MESSAGE _LIBCPP_INTRODUCED_IN_LLVM_21 -// No attribute, since we've had bad_function_call::what() in the headers before - -// This controls the availability of floating-point std::from_chars functions. -// These overloads were added later than the integer overloads. -#define _LIBCPP_AVAILABILITY_HAS_FROM_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_20 -#define _LIBCPP_AVAILABILITY_FROM_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_20_ATTRIBUTE - -// This controls the availability of the C++20 time zone database. -// The parser code is built in the library. -#define _LIBCPP_AVAILABILITY_HAS_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE - -// These macros determine whether we assume that std::bad_function_call and -// std::bad_expected_access provide a key function in the dylib. This allows -// centralizing their vtable and typeinfo instead of having all TUs provide -// a weak definition that then gets deduplicated. -#define _LIBCPP_AVAILABILITY_HAS_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE -#define _LIBCPP_AVAILABILITY_HAS_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE - -// These macros controls the availability of __cxa_init_primary_exception -// in the built library, which std::make_exception_ptr might use -// (see libcxx/include/__exception/exception_ptr.h). -#define _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18 -#define _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE - -// This controls the availability of the C++17 std::pmr library, -// which is implemented in large part in the built library. -// -// TODO: Enable std::pmr markup once https://llvm.org/PR40340 has been fixed -// Until then, it is possible for folks to try to use `std::pmr` when back-deploying to targets that don't support -// it and it'll be a load-time error, but we don't have a good alternative because the library won't compile if we -// use availability annotations until that bug has been fixed. -#define _LIBCPP_AVAILABILITY_HAS_PMR _LIBCPP_INTRODUCED_IN_LLVM_16 -#define _LIBCPP_AVAILABILITY_PMR - -// This controls whether the library claims to provide a default verbose -// termination function, and consequently whether the headers will try -// to use it when the mechanism isn't overriden at compile-time. -#define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15 -#define _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE - -// This controls the availability of floating-point std::to_chars functions. -// These overloads were added later than the integer overloads. -#define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14 -#define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE - -// Enable additional explicit instantiations of iostreams components. This -// reduces the number of weak definitions generated in programs that use -// iostreams by providing a single strong definition in the shared library. -// -// TODO: Enable additional explicit instantiations on GCC once it supports exclude_from_explicit_instantiation, -// or once libc++ doesn't use the attribute anymore. -// TODO: Enable them on Windows once https://llvm.org/PR41018 has been fixed. -#if !defined(_LIBCPP_COMPILER_GCC) && !defined(_WIN32) -# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 _LIBCPP_INTRODUCED_IN_LLVM_12 -#else -# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 0 -#endif - -// Only define a bunch of symbols in the dylib if we need to be compatible with LLVM 7 headers or older -# if defined(_LIBCPP_BUILDING_LIBRARY) && _LIBCPP_AVAILABILITY_MINIMUM_HEADER_VERSION < 8 -# define _LIBCPP_HIDE_FROM_ABI_SINCE_LLVM8 -# else -# define _LIBCPP_HIDE_FROM_ABI_SINCE_LLVM8 _LIBCPP_HIDE_FROM_ABI -# endif - -#endif // _LIBCPP___CONFIGURATION_AVAILABILITY_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/compiler.h b/third_party/libcxx/include/c++/v1/__configuration/compiler.h deleted file mode 100644 index 7cd81e0..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/compiler.h +++ /dev/null @@ -1,51 +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___CONFIGURATION_COMPILER_H -#define _LIBCPP___CONFIGURATION_COMPILER_H - -#include <__config_site> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if defined(__apple_build_version__) -// Given AppleClang XX.Y.Z, _LIBCPP_APPLE_CLANG_VER is XXYZ (e.g. AppleClang 14.0.3 => 1403) -# define _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_APPLE_CLANG_VER (__apple_build_version__ / 10000) -#elif defined(__clang__) -# define _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_CLANG_VER (__clang_major__ * 100 + __clang_minor__) -#elif defined(__GNUC__) -# define _LIBCPP_COMPILER_GCC -# define _LIBCPP_GCC_VER (__GNUC__ * 100 + __GNUC_MINOR__) -#endif - -#ifdef __cplusplus - -// Warn if a compiler version is used that is not supported anymore -// LLVM RELEASE Update the minimum compiler versions -# if defined(_LIBCPP_CLANG_VER) -# if _LIBCPP_CLANG_VER < 2001 -# warning "Libc++ only supports Clang 20 and later" -# endif -# elif defined(_LIBCPP_APPLE_CLANG_VER) -# if _LIBCPP_APPLE_CLANG_VER < 1700 -# warning "Libc++ only supports AppleClang 26 and later" -# endif -# elif defined(_LIBCPP_GCC_VER) -# if _LIBCPP_GCC_VER < 1500 -# warning "Libc++ only supports GCC 15 and later" -# endif -# endif - -#endif - -#endif // _LIBCPP___CONFIGURATION_COMPILER_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/experimental.h b/third_party/libcxx/include/c++/v1/__configuration/experimental.h deleted file mode 100644 index bb38d82..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/experimental.h +++ /dev/null @@ -1,38 +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___CONFIGURATION_EXPERIMENTAL_H -#define _LIBCPP___CONFIGURATION_EXPERIMENTAL_H - -#include <__config_site> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if __has_feature(experimental_library) -# ifndef _LIBCPP_ENABLE_EXPERIMENTAL -# define _LIBCPP_ENABLE_EXPERIMENTAL -# endif -#endif - -// Incomplete features get their own specific disabling flags. This makes it -// easier to grep for target specific flags once the feature is complete. -#if defined(_LIBCPP_ENABLE_EXPERIMENTAL) || defined(_LIBCPP_BUILDING_LIBRARY) -# define _LIBCPP_HAS_EXPERIMENTAL_LIBRARY 1 -#else -# define _LIBCPP_HAS_EXPERIMENTAL_LIBRARY 0 -#endif - -#define _LIBCPP_HAS_EXPERIMENTAL_PSTL _LIBCPP_HAS_EXPERIMENTAL_LIBRARY -#define _LIBCPP_HAS_EXPERIMENTAL_TZDB _LIBCPP_HAS_EXPERIMENTAL_LIBRARY -#define _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM _LIBCPP_HAS_EXPERIMENTAL_LIBRARY -#define _LIBCPP_HAS_EXPERIMENTAL_HARDENING_OBSERVE_SEMANTIC _LIBCPP_HAS_EXPERIMENTAL_LIBRARY -#define _LIBCPP_HAS_EXPERIMENTAL_OPTIONAL_ITERATOR _LIBCPP_HAS_EXPERIMENTAL_LIBRARY - -#endif // _LIBCPP___CONFIGURATION_EXPERIMENTAL_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/hardening.h b/third_party/libcxx/include/c++/v1/__configuration/hardening.h deleted file mode 100644 index 5723f5a..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/hardening.h +++ /dev/null @@ -1,215 +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___CONFIGURATION_HARDENING_H -#define _LIBCPP___CONFIGURATION_HARDENING_H - -#include <__config_site> -#include <__configuration/experimental.h> -#include <__configuration/language.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -// TODO(LLVM 23): Remove this. We're making these an error to catch folks who might not have migrated. -// Since hardening went through several changes (many of which impacted user-facing macros), -// we're keeping these checks around for a bit longer than usual. Failure to properly configure -// hardening results in checks being dropped silently, which is a pretty big deal. -#if defined(_LIBCPP_ENABLE_ASSERTIONS) -# error "_LIBCPP_ENABLE_ASSERTIONS has been removed, please use _LIBCPP_HARDENING_MODE= instead (see docs)" -#endif -#if defined(_LIBCPP_ENABLE_HARDENED_MODE) -# error "_LIBCPP_ENABLE_HARDENED_MODE has been removed, please use _LIBCPP_HARDENING_MODE= instead (see docs)" -#endif -#if defined(_LIBCPP_ENABLE_SAFE_MODE) -# error "_LIBCPP_ENABLE_SAFE_MODE has been removed, please use _LIBCPP_HARDENING_MODE= instead (see docs)" -#endif -#if defined(_LIBCPP_ENABLE_DEBUG_MODE) -# error "_LIBCPP_ENABLE_DEBUG_MODE has been removed, please use _LIBCPP_HARDENING_MODE= instead (see docs)" -#endif - -// The library provides the macro `_LIBCPP_HARDENING_MODE` which can be set to one of the following values: -// -// - `_LIBCPP_HARDENING_MODE_NONE`; -// - `_LIBCPP_HARDENING_MODE_FAST`; -// - `_LIBCPP_HARDENING_MODE_EXTENSIVE`; -// - `_LIBCPP_HARDENING_MODE_DEBUG`. -// -// These values have the following effects: -// -// - `_LIBCPP_HARDENING_MODE_NONE` -- sets the hardening mode to "none" which disables all runtime hardening checks; -// -// - `_LIBCPP_HARDENING_MODE_FAST` -- sets that hardening mode to "fast". The fast mode enables security-critical checks -// that can be done with relatively little runtime overhead in constant time; -// -// - `_LIBCPP_HARDENING_MODE_EXTENSIVE` -- sets the hardening mode to "extensive". The extensive mode is a superset of -// the fast mode that additionally enables checks that are relatively cheap and prevent common types of logic errors -// but are not necessarily security-critical; -// -// - `_LIBCPP_HARDENING_MODE_DEBUG` -- sets the hardening mode to "debug". The debug mode is a superset of the extensive -// mode and enables all checks available in the library, including internal assertions. Checks that are part of the -// debug mode can be very expensive and thus the debug mode is intended to be used for testing, not in production. - -// Inside the library, assertions are categorized so they can be cherry-picked based on the chosen hardening mode. These -// macros are only for internal use -- users should only pick one of the high-level hardening modes described above. -// -// - `_LIBCPP_ASSERT_VALID_INPUT_RANGE` -- checks that ranges (whether expressed as an iterator pair, an iterator and -// a sentinel, an iterator and a count, or a `std::range`) given as input to library functions are valid: -// - the sentinel is reachable from the begin iterator; -// - TODO(hardening): both iterators refer to the same container. -// -// - `_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS` -- checks that any attempts to access a container element, whether through -// the container object or through an iterator, are valid and do not attempt to go out of bounds or otherwise access -// a non-existent element. For iterator checks to work, bounded iterators must be enabled in the ABI. Types like -// `optional` and `function` are considered one-element containers for the purposes of this check. -// -// - `_LIBCPP_ASSERT_NON_NULL` -- checks that the pointer being dereferenced is not null. On most modern platforms zero -// address does not refer to an actual location in memory, so a null pointer dereference would not compromize the -// memory security of a program (however, it is still undefined behavior that can result in strange errors due to -// compiler optimizations). -// -// - `_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES` -- for functions that take several ranges as arguments, checks that the -// given ranges do not overlap. -// -// - `_LIBCPP_ASSERT_VALID_DEALLOCATION` -- checks that an attempt to deallocate memory is valid (e.g. the given object -// was allocated by the given allocator). Violating this category typically results in a memory leak. -// -// - `_LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL` -- checks that a call to an external API doesn't fail in -// an unexpected manner. This includes triggering documented cases of undefined behavior in an external library (like -// attempting to unlock an unlocked mutex in pthreads). Any API external to the library falls under this category -// (from system calls to compiler intrinsics). We generally don't expect these failures to compromize memory safety or -// otherwise create an immediate security issue. -// -// - `_LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR` -- checks any operations that exchange nodes between containers to make sure -// the containers have compatible allocators. -// -// - `_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN` -- checks that the given argument is within the domain of valid arguments -// for the function. Violating this typically produces an incorrect result (e.g. the clamp algorithm returns the -// original value without clamping it due to incorrect functors) or puts an object into an invalid state (e.g. -// a string view where only a subset of elements is possible to access). This category is for assertions violating -// which doesn't cause any immediate issues in the library -- whatever the consequences are, they will happen in the -// user code. -// -// - `_LIBCPP_ASSERT_PEDANTIC` -- checks prerequisites which are imposed by the Standard, but violating which happens to -// be benign in our implementation. -// -// - `_LIBCPP_ASSERT_SEMANTIC_REQUIREMENT` -- checks that the given argument satisfies the semantic requirements imposed -// by the Standard. Typically, there is no simple way to completely prove that a semantic requirement is satisfied; -// thus, this would often be a heuristic check and it might be quite expensive. -// -// - `_LIBCPP_ASSERT_INTERNAL` -- checks that internal invariants of the library hold. These assertions don't depend on -// user input. -// -// - `_LIBCPP_ASSERT_UNCATEGORIZED` -- for assertions that haven't been properly classified yet. - -// clang-format off -# define _LIBCPP_HARDENING_MODE_NONE (1 << 1) -# define _LIBCPP_HARDENING_MODE_FAST (1 << 2) -# define _LIBCPP_HARDENING_MODE_EXTENSIVE (1 << 4) // Deliberately not ordered. -# define _LIBCPP_HARDENING_MODE_DEBUG (1 << 3) -// clang-format on - -#ifndef _LIBCPP_HARDENING_MODE - -# ifndef _LIBCPP_HARDENING_MODE_DEFAULT -# error _LIBCPP_HARDENING_MODE_DEFAULT is not defined. This definition should be set at configuration time in the \ -`__config_site` header, please make sure your installation of libc++ is not broken. -# endif - -# define _LIBCPP_HARDENING_MODE _LIBCPP_HARDENING_MODE_DEFAULT -#endif - -#if _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_NONE && _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_FAST && \ - _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_EXTENSIVE && \ - _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_DEBUG -# error _LIBCPP_HARDENING_MODE must be set to one of the following values: \ -_LIBCPP_HARDENING_MODE_NONE, \ -_LIBCPP_HARDENING_MODE_FAST, \ -_LIBCPP_HARDENING_MODE_EXTENSIVE, \ -_LIBCPP_HARDENING_MODE_DEBUG -#endif - -// The library provides the macro `_LIBCPP_ASSERTION_SEMANTIC` for configuring the assertion semantic used by hardening; -// it can be set to one of the following values: -// -// - `_LIBCPP_ASSERTION_SEMANTIC_IGNORE`; -// - `_LIBCPP_ASSERTION_SEMANTIC_OBSERVE`; -// - `_LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE`; -// - `_LIBCPP_ASSERTION_SEMANTIC_ENFORCE`. -// -// libc++ assertion semantics generally mirror the evaluation semantics of C++26 Contracts: -// - `ignore` evaluates the assertion but doesn't do anything if it fails (note that it differs from the Contracts -// `ignore` semantic which wouldn't evaluate the assertion at all); -// - `observe` logs an error (indicating, if possible, that the error is fatal) and continues execution; -// - `quick-enforce` terminates the program as fast as possible (via trapping); -// - `enforce` logs an error and then terminates the program. -// -// Additionally, a special `hardening-dependent` value selects the assertion semantic based on the hardening mode in -// effect: the production-capable modes (`fast` and `extensive`) map to `quick_enforce` and the `debug` mode maps to -// `enforce`. The `hardening-dependent` semantic cannot be selected explicitly, it is only used when no assertion -// semantic is provided by the user _and_ the library's default semantic is configured to be dependent on hardening. -// -// Notes: -// - Continuing execution after a hardening check fails results in undefined behavior; the `observe` semantic is meant -// to make adopting hardening easier but should not be used outside of this scenario; -// - C++26 wording for Library Hardening precludes a conforming Hardened implementation from using the Contracts -// `ignore` semantic when evaluating hardened preconditions in the Library. Libc++ allows using this semantic for -// hardened preconditions, however, be aware that using `ignore` does not produce a conforming "Hardened" -// implementation, unlike the other semantics above. -// clang-format off -# define _LIBCPP_ASSERTION_SEMANTIC_HARDENING_DEPENDENT (1 << 1) -# define _LIBCPP_ASSERTION_SEMANTIC_IGNORE (1 << 2) -# define _LIBCPP_ASSERTION_SEMANTIC_OBSERVE (1 << 3) -# define _LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE (1 << 4) -# define _LIBCPP_ASSERTION_SEMANTIC_ENFORCE (1 << 5) -// clang-format on - -// If the user attempts to configure the assertion semantic, check that it is allowed in the current environment. -#if defined(_LIBCPP_ASSERTION_SEMANTIC) -# if !_LIBCPP_HAS_EXPERIMENTAL_LIBRARY -# error "Assertion semantics are an experimental feature." -# endif -# if defined(_LIBCPP_CXX03_LANG) -# error "Assertion semantics are not available in the C++03 mode." -# endif -#endif // defined(_LIBCPP_ASSERTION_SEMANTIC) - -// User-provided semantic takes top priority -- don't override if set. -#ifndef _LIBCPP_ASSERTION_SEMANTIC - -# ifndef _LIBCPP_ASSERTION_SEMANTIC_DEFAULT -# error _LIBCPP_ASSERTION_SEMANTIC_DEFAULT is not defined. This definition should be set at configuration time in \ -the `__config_site` header, please make sure your installation of libc++ is not broken. -# endif - -# if _LIBCPP_ASSERTION_SEMANTIC_DEFAULT != _LIBCPP_ASSERTION_SEMANTIC_HARDENING_DEPENDENT -# define _LIBCPP_ASSERTION_SEMANTIC _LIBCPP_ASSERTION_SEMANTIC_DEFAULT -# else -# if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -# define _LIBCPP_ASSERTION_SEMANTIC _LIBCPP_ASSERTION_SEMANTIC_ENFORCE -# else -# define _LIBCPP_ASSERTION_SEMANTIC _LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE -# endif -# endif // _LIBCPP_ASSERTION_SEMANTIC_DEFAULT != _LIBCPP_ASSERTION_SEMANTIC_HARDENING_DEPENDENT - -#endif // #ifndef _LIBCPP_ASSERTION_SEMANTIC - -// Finally, validate the selected semantic (in case the user tries setting it to an incorrect value): -#if _LIBCPP_ASSERTION_SEMANTIC != _LIBCPP_ASSERTION_SEMANTIC_IGNORE && \ - _LIBCPP_ASSERTION_SEMANTIC != _LIBCPP_ASSERTION_SEMANTIC_OBSERVE && \ - _LIBCPP_ASSERTION_SEMANTIC != _LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE && \ - _LIBCPP_ASSERTION_SEMANTIC != _LIBCPP_ASSERTION_SEMANTIC_ENFORCE -# error _LIBCPP_ASSERTION_SEMANTIC must be set to one of the following values: \ -_LIBCPP_ASSERTION_SEMANTIC_IGNORE, \ -_LIBCPP_ASSERTION_SEMANTIC_OBSERVE, \ -_LIBCPP_ASSERTION_SEMANTIC_QUICK_ENFORCE, \ -_LIBCPP_ASSERTION_SEMANTIC_ENFORCE -#endif - -#endif // _LIBCPP___CONFIGURATION_HARDENING_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/language.h b/third_party/libcxx/include/c++/v1/__configuration/language.h deleted file mode 100644 index 3137ba2..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/language.h +++ /dev/null @@ -1,59 +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___CONFIGURATION_LANGUAGE_H -#define _LIBCPP___CONFIGURATION_LANGUAGE_H - -#include <__config_site> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -// NOLINTBEGIN(libcpp-cpp-version-check) -#ifdef __cplusplus -# if __cplusplus < 201103L -# define _LIBCPP_CXX03_LANG -# endif -# if __cplusplus <= 201103L -# define _LIBCPP_STD_VER 11 -# elif __cplusplus <= 201402L -# define _LIBCPP_STD_VER 14 -# elif __cplusplus <= 201703L -# define _LIBCPP_STD_VER 17 -# elif __cplusplus <= 202002L -# define _LIBCPP_STD_VER 20 -# elif __cplusplus <= 202302L -# define _LIBCPP_STD_VER 23 -# else -// Expected release year of the next C++ standard -# define _LIBCPP_STD_VER 26 -# endif -#endif // __cplusplus -// NOLINTEND(libcpp-cpp-version-check) - -#if defined(__cpp_rtti) && __cpp_rtti >= 199711L -# define _LIBCPP_HAS_RTTI 1 -#else -# define _LIBCPP_HAS_RTTI 0 -#endif - -#if defined(__cpp_exceptions) && __cpp_exceptions >= 199711L -# define _LIBCPP_HAS_EXCEPTIONS 1 -#else -# define _LIBCPP_HAS_EXCEPTIONS 0 -#endif - -#if _LIBCPP_STD_VER <= 17 || !defined(__cpp_char8_t) -# define _LIBCPP_HAS_CHAR8_T 0 -#else -# define _LIBCPP_HAS_CHAR8_T 1 -#endif - -#endif // _LIBCPP___CONFIGURATION_LANGUAGE_H diff --git a/third_party/libcxx/include/c++/v1/__configuration/platform.h b/third_party/libcxx/include/c++/v1/__configuration/platform.h deleted file mode 100644 index 644fe17..0000000 --- a/third_party/libcxx/include/c++/v1/__configuration/platform.h +++ /dev/null @@ -1,56 +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___CONFIGURATION_PLATFORM_H -#define _LIBCPP___CONFIGURATION_PLATFORM_H - -#include <__config_site> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if defined(__ELF__) -# define _LIBCPP_OBJECT_FORMAT_ELF 1 -#elif defined(__MACH__) -# define _LIBCPP_OBJECT_FORMAT_MACHO 1 -#elif defined(_WIN32) -# define _LIBCPP_OBJECT_FORMAT_COFF 1 -#elif defined(__wasm__) -# define _LIBCPP_OBJECT_FORMAT_WASM 1 -#elif defined(_AIX) -# define _LIBCPP_OBJECT_FORMAT_XCOFF 1 -#else -// ... add new file formats here ... -#endif - -// Need to detect which libc we're using if we're on Linux. -#if (defined(__linux__) || defined(__AMDGPU__) || defined(__NVPTX__)) && __has_include() -# include -# if defined(__GLIBC_PREREQ) -# define _LIBCPP_GLIBC_PREREQ(a, b) __GLIBC_PREREQ(a, b) -# else -# define _LIBCPP_GLIBC_PREREQ(a, b) 0 -# endif // defined(__GLIBC_PREREQ) -#else -# define _LIBCPP_GLIBC_PREREQ(a, b) 0 -#endif - -#ifndef __BYTE_ORDER__ -# error \ - "Your compiler doesn't seem to define __BYTE_ORDER__, which is required by libc++ to know the endianness of your target platform" -#endif - -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -# define _LIBCPP_LITTLE_ENDIAN -#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -# define _LIBCPP_BIG_ENDIAN -#endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - -#endif // _LIBCPP___CONFIGURATION_PLATFORM_H diff --git a/third_party/libcxx/include/c++/v1/__coroutine/coroutine_handle.h b/third_party/libcxx/include/c++/v1/__coroutine/coroutine_handle.h deleted file mode 100644 index b26a650..0000000 --- a/third_party/libcxx/include/c++/v1/__coroutine/coroutine_handle.h +++ /dev/null @@ -1,177 +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___COROUTINE_COROUTINE_HANDLE_H -#define _LIBCPP___COROUTINE_COROUTINE_HANDLE_H - -#include <__assert> -#include <__config> -#include <__cstddef/nullptr_t.h> -#include <__cstddef/size_t.h> -#include <__functional/hash.h> -#include <__memory/addressof.h> -#include <__type_traits/remove_cv.h> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -// [coroutine.handle] -template -struct coroutine_handle; - -template <> -struct coroutine_handle { -public: - // [coroutine.handle.con], construct/reset - constexpr coroutine_handle() noexcept = default; - - _LIBCPP_HIDE_FROM_ABI constexpr coroutine_handle(nullptr_t) noexcept {} - - _LIBCPP_HIDE_FROM_ABI coroutine_handle& operator=(nullptr_t) noexcept { - __handle_ = nullptr; - return *this; - } - - // [coroutine.handle.export.import], export/import - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr void* address() const noexcept { return __handle_; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr coroutine_handle from_address(void* __addr) noexcept { - coroutine_handle __tmp; - __tmp.__handle_ = __addr; - return __tmp; - } - - // [coroutine.handle.observers], observers - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return __handle_ != nullptr; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool done() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "done() can be called only on suspended coroutines"); - return __builtin_coro_done(__handle_); - } - - // [coroutine.handle.resumption], resumption - _LIBCPP_HIDE_FROM_ABI void operator()() const { resume(); } - - _LIBCPP_HIDE_FROM_ABI void resume() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "resume() can be called only on suspended coroutines"); - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(!done(), "resume() has undefined behavior when the coroutine is done"); - __builtin_coro_resume(__handle_); - } - - _LIBCPP_HIDE_FROM_ABI void destroy() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "destroy() can be called only on suspended coroutines"); - __builtin_coro_destroy(__handle_); - } - -private: - _LIBCPP_HIDE_FROM_ABI bool __is_suspended() const { - // FIXME actually implement a check for if the coro is suspended. - return __handle_ != nullptr; - } - - void* __handle_ = nullptr; -}; - -// [coroutine.handle.compare] -inline _LIBCPP_HIDE_FROM_ABI constexpr bool operator==(coroutine_handle<> __x, coroutine_handle<> __y) noexcept { - return __x.address() == __y.address(); -} -inline _LIBCPP_HIDE_FROM_ABI constexpr strong_ordering -operator<=>(coroutine_handle<> __x, coroutine_handle<> __y) noexcept { - return compare_three_way()(__x.address(), __y.address()); -} - -template -struct coroutine_handle { -public: - // [coroutine.handle.con], construct/reset - constexpr coroutine_handle() noexcept = default; - - _LIBCPP_HIDE_FROM_ABI constexpr coroutine_handle(nullptr_t) noexcept {} - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static coroutine_handle from_promise(_Promise& __promise) { - using _RawPromise = __remove_cv_t<_Promise>; - coroutine_handle __tmp; - __tmp.__handle_ = - __builtin_coro_promise(std::addressof(const_cast<_RawPromise&>(__promise)), alignof(_Promise), true); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI coroutine_handle& operator=(nullptr_t) noexcept { - __handle_ = nullptr; - return *this; - } - - // [coroutine.handle.export.import], export/import - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr void* address() const noexcept { return __handle_; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static constexpr coroutine_handle from_address(void* __addr) noexcept { - coroutine_handle __tmp; - __tmp.__handle_ = __addr; - return __tmp; - } - - // [coroutine.handle.conv], conversion - _LIBCPP_HIDE_FROM_ABI constexpr operator coroutine_handle<>() const noexcept { - return coroutine_handle<>::from_address(address()); - } - - // [coroutine.handle.observers], observers - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return __handle_ != nullptr; } - - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool done() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "done() can be called only on suspended coroutines"); - return __builtin_coro_done(__handle_); - } - - // [coroutine.handle.resumption], resumption - _LIBCPP_HIDE_FROM_ABI void operator()() const { resume(); } - - _LIBCPP_HIDE_FROM_ABI void resume() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "resume() can be called only on suspended coroutines"); - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(!done(), "resume() has undefined behavior when the coroutine is done"); - __builtin_coro_resume(__handle_); - } - - _LIBCPP_HIDE_FROM_ABI void destroy() const { - _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(__is_suspended(), "destroy() can be called only on suspended coroutines"); - __builtin_coro_destroy(__handle_); - } - - // [coroutine.handle.promise], promise access - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI _Promise& promise() const { - return *static_cast<_Promise*>(__builtin_coro_promise(this->__handle_, alignof(_Promise), false)); - } - -private: - _LIBCPP_HIDE_FROM_ABI bool __is_suspended() const { - // FIXME actually implement a check for if the coro is suspended. - return __handle_ != nullptr; - } - void* __handle_ = nullptr; -}; - -// [coroutine.handle.hash] -template -struct hash> { - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI size_t operator()(const coroutine_handle<_Tp>& __v) const noexcept { - return hash()(__v.address()); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___COROUTINE_COROUTINE_HANDLE_H diff --git a/third_party/libcxx/include/c++/v1/__coroutine/coroutine_traits.h b/third_party/libcxx/include/c++/v1/__coroutine/coroutine_traits.h deleted file mode 100644 index 60f7ca2..0000000 --- a/third_party/libcxx/include/c++/v1/__coroutine/coroutine_traits.h +++ /dev/null @@ -1,48 +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___COROUTINE_COROUTINE_TRAITS_H -#define _LIBCPP___COROUTINE_COROUTINE_TRAITS_H - -#include <__config> -#include <__type_traits/void_t.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -// [coroutine.traits] -// [coroutine.traits.primary] -// The header defined the primary template coroutine_traits such that -// if ArgTypes is a parameter pack of types and if the qualified-id R::promise_type -// is valid and denotes a type ([temp.deduct]), then coroutine_traits -// has the following publicly accessible memebr: -// -// using promise_type = typename R::promise_type; -// -// Otherwise, coroutine_traits has no members. -template -struct __coroutine_traits_sfinae {}; - -template -struct __coroutine_traits_sfinae< _Tp, __void_t > { - using promise_type = typename _Tp::promise_type; -}; - -template -struct coroutine_traits : public __coroutine_traits_sfinae<_Ret> {}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___COROUTINE_COROUTINE_TRAITS_H diff --git a/third_party/libcxx/include/c++/v1/__coroutine/noop_coroutine_handle.h b/third_party/libcxx/include/c++/v1/__coroutine/noop_coroutine_handle.h deleted file mode 100644 index b9c54d3..0000000 --- a/third_party/libcxx/include/c++/v1/__coroutine/noop_coroutine_handle.h +++ /dev/null @@ -1,97 +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___COROUTINE_NOOP_COROUTINE_HANDLE_H -#define _LIBCPP___COROUTINE_NOOP_COROUTINE_HANDLE_H - -#include <__config> -#include <__coroutine/coroutine_handle.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -// [coroutine.noop] -// [coroutine.promise.noop] -struct noop_coroutine_promise {}; - -// [coroutine.handle.noop] -template <> -struct coroutine_handle { -public: - // [coroutine.handle.noop.conv], conversion - _LIBCPP_HIDE_FROM_ABI constexpr operator coroutine_handle<>() const noexcept { - return coroutine_handle<>::from_address(address()); - } - - // [coroutine.handle.noop.observers], observers - _LIBCPP_HIDE_FROM_ABI constexpr explicit operator bool() const noexcept { return true; } - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool done() const noexcept { return false; } - - // [coroutine.handle.noop.resumption], resumption - _LIBCPP_HIDE_FROM_ABI constexpr void operator()() const noexcept {} - _LIBCPP_HIDE_FROM_ABI constexpr void resume() const noexcept {} - _LIBCPP_HIDE_FROM_ABI constexpr void destroy() const noexcept {} - - // [coroutine.handle.noop.promise], promise access - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI noop_coroutine_promise& promise() const noexcept { - return *static_cast( - __builtin_coro_promise(this->__handle_, alignof(noop_coroutine_promise), false)); - } - - // [coroutine.handle.noop.address], address - [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr void* address() const noexcept { return __handle_; } - -private: - _LIBCPP_HIDE_FROM_ABI friend coroutine_handle noop_coroutine() noexcept; - -# if __has_builtin(__builtin_coro_noop) - _LIBCPP_HIDE_FROM_ABI coroutine_handle() noexcept { this->__handle_ = __builtin_coro_noop(); } - - void* __handle_ = nullptr; - -# elif defined(_LIBCPP_COMPILER_GCC) - // GCC doesn't implement __builtin_coro_noop(). - // Construct the coroutine frame manually instead. - struct __noop_coroutine_frame_ty_ { - static void __dummy_resume_destroy_func() {} - - void (*__resume_)() = __dummy_resume_destroy_func; - void (*__destroy_)() = __dummy_resume_destroy_func; - struct noop_coroutine_promise __promise_; - }; - - static __noop_coroutine_frame_ty_ __noop_coroutine_frame_; - - void* __handle_ = &__noop_coroutine_frame_; - - _LIBCPP_HIDE_FROM_ABI coroutine_handle() noexcept = default; - -# endif // __has_builtin(__builtin_coro_noop) -}; - -using noop_coroutine_handle = coroutine_handle; - -# if defined(_LIBCPP_COMPILER_GCC) -inline noop_coroutine_handle::__noop_coroutine_frame_ty_ noop_coroutine_handle::__noop_coroutine_frame_{}; -# endif - -// [coroutine.noop.coroutine] -[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI noop_coroutine_handle noop_coroutine() noexcept { - return noop_coroutine_handle(); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // _LIBCPP___COROUTINE_NOOP_COROUTINE_HANDLE_H diff --git a/third_party/libcxx/include/c++/v1/__coroutine/trivial_awaitables.h b/third_party/libcxx/include/c++/v1/__coroutine/trivial_awaitables.h deleted file mode 100644 index 7cb7f4d..0000000 --- a/third_party/libcxx/include/c++/v1/__coroutine/trivial_awaitables.h +++ /dev/null @@ -1,40 +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___COROUTINE_TRIVIAL_AWAITABLES_H -#define __LIBCPP___COROUTINE_TRIVIAL_AWAITABLES_H - -#include <__config> -#include <__coroutine/coroutine_handle.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 20 - -_LIBCPP_BEGIN_NAMESPACE_STD - -// [coroutine.trivial.awaitables] -struct suspend_never { - _LIBCPP_HIDE_FROM_ABI constexpr bool await_ready() const noexcept { return true; } - _LIBCPP_HIDE_FROM_ABI constexpr void await_suspend(coroutine_handle<>) const noexcept {} - _LIBCPP_HIDE_FROM_ABI constexpr void await_resume() const noexcept {} -}; - -struct suspend_always { - _LIBCPP_HIDE_FROM_ABI constexpr bool await_ready() const noexcept { return false; } - _LIBCPP_HIDE_FROM_ABI constexpr void await_suspend(coroutine_handle<>) const noexcept {} - _LIBCPP_HIDE_FROM_ABI constexpr void await_resume() const noexcept {} -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_STD_VER >= 20 - -#endif // __LIBCPP___COROUTINE_TRIVIAL_AWAITABLES_H diff --git a/third_party/libcxx/include/c++/v1/__cstddef/byte.h b/third_party/libcxx/include/c++/v1/__cstddef/byte.h deleted file mode 100644 index 3d97db1..0000000 --- a/third_party/libcxx/include/c++/v1/__cstddef/byte.h +++ /dev/null @@ -1,85 +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___CSTDDEF_BYTE_H -#define _LIBCPP___CSTDDEF_BYTE_H - -#include <__config> -#include <__fwd/byte.h> -#include <__type_traits/enable_if.h> -#include <__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if _LIBCPP_STD_VER >= 17 -_LIBCPP_BEGIN_UNVERSIONED_NAMESPACE_STD - -enum class byte : unsigned char {}; - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte operator|(byte __lhs, byte __rhs) noexcept { - return static_cast( - static_cast(static_cast(__lhs) | static_cast(__rhs))); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte& operator|=(byte& __lhs, byte __rhs) noexcept { - return __lhs = __lhs | __rhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte operator&(byte __lhs, byte __rhs) noexcept { - return static_cast( - static_cast(static_cast(__lhs) & static_cast(__rhs))); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte& operator&=(byte& __lhs, byte __rhs) noexcept { - return __lhs = __lhs & __rhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte operator^(byte __lhs, byte __rhs) noexcept { - return static_cast( - static_cast(static_cast(__lhs) ^ static_cast(__rhs))); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte& operator^=(byte& __lhs, byte __rhs) noexcept { - return __lhs = __lhs ^ __rhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr byte operator~(byte __b) noexcept { - return static_cast(static_cast(~static_cast(__b))); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr byte& operator<<=(byte& __lhs, _Integer __shift) noexcept { - return __lhs = __lhs << __shift; -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr byte operator<<(byte __lhs, _Integer __shift) noexcept { - return static_cast(static_cast(static_cast(__lhs) << __shift)); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr byte& operator>>=(byte& __lhs, _Integer __shift) noexcept { - return __lhs = __lhs >> __shift; -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr byte operator>>(byte __lhs, _Integer __shift) noexcept { - return static_cast(static_cast(static_cast(__lhs) >> __shift)); -} - -template ::value, int> = 0> -[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Integer to_integer(byte __b) noexcept { - return static_cast<_Integer>(__b); -} - -_LIBCPP_END_UNVERSIONED_NAMESPACE_STD -#endif // _LIBCPP_STD_VER >= 17 - -#endif // _LIBCPP___CSTDDEF_BYTE_H diff --git a/third_party/libcxx/include/c++/v1/__cstddef/max_align_t.h b/third_party/libcxx/include/c++/v1/__cstddef/max_align_t.h deleted file mode 100644 index 7c09c7e..0000000 --- a/third_party/libcxx/include/c++/v1/__cstddef/max_align_t.h +++ /dev/null @@ -1,27 +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___CSTDDEF_MAX_ALIGN_T_H -#define _LIBCPP___CSTDDEF_MAX_ALIGN_T_H - -#include <__config> -#include - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if !defined(_LIBCPP_CXX03_LANG) -using ::max_align_t _LIBCPP_USING_IF_EXISTS; -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CSTDDEF_MAX_ALIGN_T_H diff --git a/third_party/libcxx/include/c++/v1/__cstddef/nullptr_t.h b/third_party/libcxx/include/c++/v1/__cstddef/nullptr_t.h deleted file mode 100644 index 7eaae01..0000000 --- a/third_party/libcxx/include/c++/v1/__cstddef/nullptr_t.h +++ /dev/null @@ -1,24 +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___CSTDDEF_NULLPTR_T_H -#define _LIBCPP___CSTDDEF_NULLPTR_T_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -using nullptr_t = decltype(nullptr); - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CSTDDEF_NULLPTR_T_H diff --git a/third_party/libcxx/include/c++/v1/__cstddef/ptrdiff_t.h b/third_party/libcxx/include/c++/v1/__cstddef/ptrdiff_t.h deleted file mode 100644 index 146f345..0000000 --- a/third_party/libcxx/include/c++/v1/__cstddef/ptrdiff_t.h +++ /dev/null @@ -1,24 +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___CSTDDEF_PTRDIFF_T_H -#define _LIBCPP___CSTDDEF_PTRDIFF_T_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -using ptrdiff_t = decltype(static_cast(nullptr) - static_cast(nullptr)); - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CSTDDEF_PTRDIFF_T_H diff --git a/third_party/libcxx/include/c++/v1/__cstddef/size_t.h b/third_party/libcxx/include/c++/v1/__cstddef/size_t.h deleted file mode 100644 index 59bad93..0000000 --- a/third_party/libcxx/include/c++/v1/__cstddef/size_t.h +++ /dev/null @@ -1,24 +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___CSTDDEF_SIZE_T_H -#define _LIBCPP___CSTDDEF_SIZE_T_H - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -using size_t = decltype(sizeof(int)); - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CSTDDEF_SIZE_T_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/adjacent_find.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/adjacent_find.h deleted file mode 100644 index ac23323..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/adjacent_find.h +++ /dev/null @@ -1,57 +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___CXX03___ALGORITHM_ADJACENT_FIND_H -#define _LIBCPP___CXX03___ALGORITHM_ADJACENT_FIND_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _Iter __adjacent_find(_Iter __first, _Sent __last, _BinaryPredicate&& __pred) { - if (__first == __last) - return __first; - _Iter __i = __first; - while (++__i != __last) { - if (__pred(*__first, *__i)) - return __first; - __first = __i; - } - return __i; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { - return std::__adjacent_find(std::move(__first), std::move(__last), __pred); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -adjacent_find(_ForwardIterator __first, _ForwardIterator __last) { - return std::adjacent_find(std::move(__first), std::move(__last), __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_ADJACENT_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/all_of.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/all_of.h deleted file mode 100644 index 8bc39b0..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/all_of.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_ALL_OF_H -#define _LIBCPP___CXX03___ALGORITHM_ALL_OF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (!__pred(*__first)) - return false; - return true; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_ALL_OF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/any_of.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/any_of.h deleted file mode 100644 index 6b3462a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/any_of.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_ANY_OF_H -#define _LIBCPP___CXX03___ALGORITHM_ANY_OF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (__pred(*__first)) - return true; - return false; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_ANY_OF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/binary_search.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/binary_search.h deleted file mode 100644 index 37e2739..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/binary_search.h +++ /dev/null @@ -1,39 +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___CXX03___ALGORITHM_BINARY_SEARCH_H -#define _LIBCPP___CXX03___ALGORITHM_BINARY_SEARCH_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/lower_bound.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - __first = std::lower_bound<_ForwardIterator, _Tp, __comp_ref_type<_Compare> >(__first, __last, __value, __comp); - return __first != __last && !__comp(__value, *__first); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::binary_search(__first, __last, __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_BINARY_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp.h deleted file mode 100644 index 420c434..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp.h +++ /dev/null @@ -1,49 +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___CXX03___ALGORITHM_COMP_H -#define _LIBCPP___CXX03___ALGORITHM_COMP_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/desugars_to.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -struct __equal_to { - template - _LIBCPP_HIDE_FROM_ABI bool operator()(const _T1& __x, const _T2& __y) const { - return __x == __y; - } -}; - -template -inline const bool __desugars_to_v<__equal_tag, __equal_to, _Tp, _Up> = true; - -// The definition is required because __less is part of the ABI, but it's empty -// because all comparisons should be transparent. -template -struct __less {}; - -template <> -struct __less { - template - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __lhs, const _Up& __rhs) const { - return __lhs < __rhs; - } -}; - -template -inline const bool __desugars_to_v<__less_tag, __less<>, _Tp, _Tp> = true; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_COMP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp_ref_type.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp_ref_type.h deleted file mode 100644 index bf4d07c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/comp_ref_type.h +++ /dev/null @@ -1,66 +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___CXX03___ALGORITHM_COMP_REF_TYPE_H -#define _LIBCPP___CXX03___ALGORITHM_COMP_REF_TYPE_H - -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__utility/declval.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __debug_less { - _Compare& __comp_; - _LIBCPP_HIDE_FROM_ABI __debug_less(_Compare& __c) : __comp_(__c) {} - - template - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Up& __y) { - bool __r = __comp_(__x, __y); - if (__r) - __do_compare_assert(0, __y, __x); - return __r; - } - - template - _LIBCPP_HIDE_FROM_ABI bool operator()(_Tp& __x, _Up& __y) { - bool __r = __comp_(__x, __y); - if (__r) - __do_compare_assert(0, __y, __x); - return __r; - } - - template - inline _LIBCPP_HIDE_FROM_ABI decltype((void)std::declval<_Compare&>()(std::declval<_LHS&>(), std::declval<_RHS&>())) - __do_compare_assert(int, _LHS& __l, _RHS& __r) { - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(!__comp_(__l, __r), "Comparator does not induce a strict weak ordering"); - (void)__l; - (void)__r; - } - - template - inline _LIBCPP_HIDE_FROM_ABI void __do_compare_assert(long, _LHS&, _RHS&) {} -}; - -// Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -template -using __comp_ref_type = __debug_less<_Comp>; -#else -template -using __comp_ref_type = _Comp&; -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_COMP_REF_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy.h deleted file mode 100644 index ab164a8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy.h +++ /dev/null @@ -1,117 +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___CXX03___ALGORITHM_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_COPY_H - -#include <__cxx03/__algorithm/copy_move_common.h> -#include <__cxx03/__algorithm/for_each_segment.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> __copy(_InIter, _Sent, _OutIter); - -template -struct __copy_impl { - template - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _Sent __last, _OutIter __result) const { - while (__first != __last) { - *__result = *__first; - ++__first; - ++__result; - } - - return std::make_pair(std::move(__first), std::move(__result)); - } - - template - struct _CopySegment { - using _Traits = __segmented_iterator_traits<_InIter>; - - _OutIter& __result_; - - _LIBCPP_HIDE_FROM_ABI explicit _CopySegment(_OutIter& __result) : __result_(__result) {} - - _LIBCPP_HIDE_FROM_ABI void - operator()(typename _Traits::__local_iterator __lfirst, typename _Traits::__local_iterator __llast) { - __result_ = std::__copy<_AlgPolicy>(__lfirst, __llast, std::move(__result_)).second; - } - }; - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - std::__for_each_segment(__first, __last, _CopySegment<_InIter, _OutIter>(__result)); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = typename common_type<__iter_diff_t<_InIter>, __iter_diff_t<_OutIter> >::type; - - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__result)); - - auto __local_first = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_last = _Traits::__end(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iters = std::__copy<_AlgPolicy>(__first, __first + __size, __local_first); - __first = std::move(__iters.first); - - if (__first == __last) - return std::make_pair(std::move(__first), _Traits::__compose(__segment_iterator, std::move(__iters.second))); - - __local_first = _Traits::__begin(++__segment_iterator); - } - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_trivial_impl(__first, __last, __result); - } -}; - -template -pair<_InIter, _OutIter> inline _LIBCPP_HIDE_FROM_ABI __copy(_InIter __first, _Sent __last, _OutIter __result) { - return std::__copy_move_unwrap_iters<__copy_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - return std::__copy<_ClassicAlgPolicy>(__first, __last, __result).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_backward.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_backward.h deleted file mode 100644 index 0a84b6e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_backward.h +++ /dev/null @@ -1,132 +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___CXX03___ALGORITHM_COPY_BACKWARD_H -#define _LIBCPP___CXX03___ALGORITHM_COPY_BACKWARD_H - -#include <__cxx03/__algorithm/copy_move_common.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> __copy_backward(_InIter __first, _Sent __last, _OutIter __result); - -template -struct __copy_backward_impl { - template - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _Sent __last, _OutIter __result) const { - auto __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - auto __original_last_iter = __last_iter; - - while (__first != __last_iter) { - *--__result = *--__last_iter; - } - - return std::make_pair(std::move(__original_last_iter), std::move(__result)); - } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_InIter>; - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - if (__sfirst == __slast) { - auto __iters = - std::__copy_backward<_AlgPolicy>(_Traits::__local(__first), _Traits::__local(__last), std::move(__result)); - return std::make_pair(__last, __iters.second); - } - - __result = - std::__copy_backward<_AlgPolicy>(_Traits::__begin(__slast), _Traits::__local(__last), std::move(__result)) - .second; - --__slast; - while (__sfirst != __slast) { - __result = - std::__copy_backward<_AlgPolicy>(_Traits::__begin(__slast), _Traits::__end(__slast), std::move(__result)) - .second; - --__slast; - } - __result = std::__copy_backward<_AlgPolicy>(_Traits::__local(__first), _Traits::__end(__slast), std::move(__result)) - .second; - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - auto __orig_last = __last; - auto __segment_iterator = _Traits::__segment(__result); - - // When the range contains no elements, __result might not be a valid iterator - if (__first == __last) - return std::make_pair(__first, __result); - - auto __local_last = _Traits::__local(__result); - while (true) { - using _DiffT = typename common_type<__iter_diff_t<_InIter>, __iter_diff_t<_OutIter> >::type; - - auto __local_first = _Traits::__begin(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iter = std::__copy_backward<_AlgPolicy>(__last - __size, __last, __local_last).second; - __last -= __size; - - if (__first == __last) - return std::make_pair(std::move(__orig_last), _Traits::__compose(__segment_iterator, std::move(__iter))); - --__segment_iterator; - __local_last = _Traits::__end(__segment_iterator); - } - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_backward_trivial_impl(__first, __last, __result); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator1, _BidirectionalIterator2> -__copy_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result) { - return std::__copy_move_unwrap_iters<__copy_backward_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _BidirectionalIterator2 -copy_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) { - static_assert(std::is_copy_constructible<_BidirectionalIterator1>::value && - std::is_copy_constructible<_BidirectionalIterator1>::value, - "Iterators must be copy constructible."); - - return std::__copy_backward<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_COPY_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_if.h deleted file mode 100644 index 53a85bc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_if.h +++ /dev/null @@ -1,34 +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___CXX03___ALGORITHM_COPY_IF_H -#define _LIBCPP___CXX03___ALGORITHM_COPY_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) { - for (; __first != __last; ++__first) { - if (__pred(*__first)) { - *__result = *__first; - ++__result; - } - } - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_move_common.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_move_common.h deleted file mode 100644 index 8d1ba8e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_move_common.h +++ /dev/null @@ -1,112 +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___CXX03___ALGORITHM_COPY_MOVE_COMMON_H -#define _LIBCPP___CXX03___ALGORITHM_COPY_MOVE_COMMON_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__algorithm/unwrap_range.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__string/constexpr_c_functions.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_always_bitcastable.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_trivially_assignable.h> -#include <__cxx03/__type_traits/is_volatile.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Type traits. - -template -struct __can_lower_copy_assignment_to_memmove { - static const bool value = - // If the types are always bitcastable, it's valid to do a bitwise copy between them. - __is_always_bitcastable<_From, _To>::value && - // Reject conversions that wouldn't be performed by the regular built-in assignment (e.g. between arrays). - is_trivially_assignable<_To&, const _From&>::value && - // `memmove` doesn't accept `volatile` pointers, make sure the optimization SFINAEs away in that case. - !is_volatile<_From>::value && !is_volatile<_To>::value; -}; - -template -struct __can_lower_move_assignment_to_memmove { - static const bool value = - __is_always_bitcastable<_From, _To>::value && is_trivially_assignable<_To&, _From&&>::value && - !is_volatile<_From>::value && !is_volatile<_To>::value; -}; - -// `memmove` algorithms implementation. - -template -_LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> __copy_trivial_impl(_In* __first, _In* __last, _Out* __result) { - const size_t __n = static_cast(__last - __first); - - std::__constexpr_memmove(__result, __first, __element_count(__n)); - - return std::make_pair(__last, __result + __n); -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> __copy_backward_trivial_impl(_In* __first, _In* __last, _Out* __result) { - const size_t __n = static_cast(__last - __first); - __result -= __n; - - std::__constexpr_memmove(__result, __first, __element_count(__n)); - - return std::make_pair(__last, __result); -} - -// Iterator unwrapping and dispatching to the correct overload. - -template -struct __can_rewrap - : integral_constant::value && is_copy_constructible<_OutIter>::value> {}; - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> -__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) { - auto __range = std::__unwrap_range(__first, std::move(__last)); - auto __result = _Algorithm()(std::move(__range.first), std::move(__range.second), std::__unwrap_iter(__out_first)); - return std::make_pair(std::__rewrap_range<_Sent>(std::move(__first), std::move(__result.first)), - std::__rewrap_iter(std::move(__out_first), std::move(__result.second))); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> -__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) { - return _Algorithm()(std::move(__first), std::move(__last), std::move(__out_first)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_COPY_MOVE_COMMON_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_n.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_n.h deleted file mode 100644 index b32b908..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/copy_n.h +++ /dev/null @@ -1,58 +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___CXX03___ALGORITHM_COPY_N_H -#define _LIBCPP___CXX03___ALGORITHM_COPY_N_H - -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__utility/convert_to_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value && - !__has_random_access_iterator_category<_InputIterator>::value, - int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator copy_n(_InputIterator __first, _Size __orig_n, _OutputIterator __result) { - typedef decltype(std::__convert_to_integral(__orig_n)) _IntegralSize; - _IntegralSize __n = __orig_n; - if (__n > 0) { - *__result = *__first; - ++__result; - for (--__n; __n > 0; --__n) { - ++__first; - *__result = *__first; - ++__result; - } - } - return __result; -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator copy_n(_InputIterator __first, _Size __orig_n, _OutputIterator __result) { - typedef typename iterator_traits<_InputIterator>::difference_type difference_type; - typedef decltype(std::__convert_to_integral(__orig_n)) _IntegralSize; - _IntegralSize __n = __orig_n; - return std::copy(__first, __first + difference_type(__n), __result); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_COPY_N_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count.h deleted file mode 100644 index 5b05b4b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count.h +++ /dev/null @@ -1,92 +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___CXX03___ALGORITHM_COUNT_H -#define _LIBCPP___CXX03___ALGORITHM_COUNT_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__bit/invert_if.h> -#include <__cxx03/__bit/popcount.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__fwd/bit_reference.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// generic implementation -template -_LIBCPP_HIDE_FROM_ABI typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> -__count(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - typename _IterOps<_AlgPolicy>::template __difference_type<_Iter> __r(0); - for (; __first != __last; ++__first) - if (std::__invoke(__proj, *__first) == __value) - ++__r; - return __r; -} - -// __bit_iterator implementation -template -_LIBCPP_HIDE_FROM_ABI typename __bit_iterator<_Cp, _IsConst>::difference_type -__count_bool(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n) { - using _It = __bit_iterator<_Cp, _IsConst>; - using __storage_type = typename _It::__storage_type; - using difference_type = typename _It::difference_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __r = 0; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - __storage_type __m = (__storage_type(~0) << __first.__ctz_) & (__storage_type(~0) >> (__clz_f - __dn)); - __r = std::__libcpp_popcount<__storage_type>(std::__invert_if(*__first.__seg_) & __m); - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word) - __r += std::__libcpp_popcount<__storage_type>(std::__invert_if(*__first.__seg_)); - // do last partial word - if (__n > 0) { - __storage_type __m = __storage_type(~0) >> (__bits_per_word - __n); - __r += std::__libcpp_popcount<__storage_type>(std::__invert_if(*__first.__seg_) & __m); - } - return __r; -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI __iter_diff_t<__bit_iterator<_Cp, _IsConst> > -__count(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value, _Proj&) { - if (__value) - return std::__count_bool(__first, static_cast(__last - __first)); - return std::__count_bool(__first, static_cast(__last - __first)); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI __iter_diff_t<_InputIterator> -count(_InputIterator __first, _InputIterator __last, const _Tp& __value) { - __identity __proj; - return std::__count<_ClassicAlgPolicy>(__first, __last, __value, __proj); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_COUNT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count_if.h deleted file mode 100644 index 8a31989..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/count_if.h +++ /dev/null @@ -1,34 +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___CXX03___ALGORITHM_COUNT_IF_H -#define _LIBCPP___CXX03___ALGORITHM_COUNT_IF_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI typename iterator_traits<_InputIterator>::difference_type -count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - typename iterator_traits<_InputIterator>::difference_type __r(0); - for (; __first != __last; ++__first) - if (__pred(*__first)) - ++__r; - return __r; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_COUNT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal.h deleted file mode 100644 index 5dbc757..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal.h +++ /dev/null @@ -1,73 +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___CXX03___ALGORITHM_EQUAL_H -#define _LIBCPP___CXX03___ALGORITHM_EQUAL_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__string/constexpr_c_functions.h> -#include <__cxx03/__type_traits/desugars_to.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_equality_comparable.h> -#include <__cxx03/__type_traits/is_volatile.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool __equal_iter_impl( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate& __pred) { - for (; __first1 != __last1; ++__first1, (void)++__first2) - if (!__pred(*__first1, *__first2)) - return false; - return true; -} - -template && !is_volatile<_Tp>::value && - !is_volatile<_Up>::value && __libcpp_is_trivially_equality_comparable<_Tp, _Up>::value, - int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -__equal_iter_impl(_Tp* __first1, _Tp* __last1, _Up* __first2, _BinaryPredicate&) { - return std::__constexpr_memcmp_equal(__first1, __first2, __element_count(__last1 - __first1)); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) { - return std::__equal_iter_impl( - std::__unwrap_iter(__first1), std::__unwrap_iter(__last1), std::__unwrap_iter(__first2), __pred); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) { - return std::equal(__first1, __last1, __first2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_EQUAL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal_range.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal_range.h deleted file mode 100644 index e84b536..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/equal_range.h +++ /dev/null @@ -1,85 +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___CXX03___ALGORITHM_EQUAL_RANGE_H -#define _LIBCPP___CXX03___ALGORITHM_EQUAL_RANGE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/half_positive.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/lower_bound.h> -#include <__cxx03/__algorithm/upper_bound.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iter, _Iter> -__equal_range(_Iter __first, _Sent __last, const _Tp& __value, _Compare&& __comp, _Proj&& __proj) { - auto __len = _IterOps<_AlgPolicy>::distance(__first, __last); - _Iter __end = _IterOps<_AlgPolicy>::next(__first, __last); - while (__len != 0) { - auto __half_len = std::__half_positive(__len); - _Iter __mid = _IterOps<_AlgPolicy>::next(__first, __half_len); - if (std::__invoke(__comp, std::__invoke(__proj, *__mid), __value)) { - __first = ++__mid; - __len -= __half_len + 1; - } else if (std::__invoke(__comp, __value, std::__invoke(__proj, *__mid))) { - __end = __mid; - __len = __half_len; - } else { - _Iter __mp1 = __mid; - return pair<_Iter, _Iter>(std::__lower_bound<_AlgPolicy>(__first, __mid, __value, __comp, __proj), - std::__upper_bound<_AlgPolicy>(++__mp1, __end, __value, __comp, __proj)); - } - } - return pair<_Iter, _Iter>(__first, __first); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(__is_callable<_Compare, decltype(*__first), const _Tp&>::value, "The comparator has to be callable"); - static_assert(is_copy_constructible<_ForwardIterator>::value, "Iterator has to be copy constructible"); - return std::__equal_range<_ClassicAlgPolicy>( - std::move(__first), - std::move(__last), - __value, - static_cast<__comp_ref_type<_Compare> >(__comp), - std::__identity()); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::equal_range(std::move(__first), std::move(__last), __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_EQUAL_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill.h deleted file mode 100644 index c1b92dd..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill.h +++ /dev/null @@ -1,44 +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___CXX03___ALGORITHM_FILL_H -#define _LIBCPP___CXX03___ALGORITHM_FILL_H - -#include <__cxx03/__algorithm/fill_n.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// fill isn't specialized for std::memset, because the compiler already optimizes the loop to a call to std::memset. - -template -inline _LIBCPP_HIDE_FROM_ABI void -__fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, forward_iterator_tag) { - for (; __first != __last; ++__first) - *__first = __value; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -__fill(_RandomAccessIterator __first, _RandomAccessIterator __last, const _Tp& __value, random_access_iterator_tag) { - std::fill_n(__first, __last - __first, __value); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - std::__fill(__first, __last, __value, typename iterator_traits<_ForwardIterator>::iterator_category()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FILL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill_n.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill_n.h deleted file mode 100644 index b52f650..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/fill_n.h +++ /dev/null @@ -1,94 +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___CXX03___ALGORITHM_FILL_N_H -#define _LIBCPP___CXX03___ALGORITHM_FILL_N_H - -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__config> -#include <__cxx03/__fwd/bit_reference.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__utility/convert_to_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// fill_n isn't specialized for std::memset, because the compiler already optimizes the loop to a call to std::memset. - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator __fill_n(_OutputIterator __first, _Size __n, const _Tp& __value); - -template -_LIBCPP_HIDE_FROM_ABI void __fill_n_bool(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n) { - using _It = __bit_iterator<_Cp, false>; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn)); - if (_FillVal) - *__first.__seg_ |= __m; - else - *__first.__seg_ &= ~__m; - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - __storage_type __nw = __n / __bits_per_word; - std::__fill_n(std::__to_address(__first.__seg_), __nw, _FillVal ? static_cast<__storage_type>(-1) : 0); - __n -= __nw * __bits_per_word; - // do last partial word - if (__n > 0) { - __first.__seg_ += __nw; - __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n); - if (_FillVal) - *__first.__seg_ |= __m; - else - *__first.__seg_ &= ~__m; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> -__fill_n(__bit_iterator<_Cp, false> __first, _Size __n, const bool& __value) { - if (__n > 0) { - if (__value) - std::__fill_n_bool(__first, __n); - else - std::__fill_n_bool(__first, __n); - } - return __first + __n; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator __fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) { - for (; __n > 0; ++__first, (void)--__n) - *__first = __value; - return __first; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) { - return std::__fill_n(__first, std::__convert_to_integral(__n), __value); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_FILL_N_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find.h deleted file mode 100644 index baa8e4c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find.h +++ /dev/null @@ -1,177 +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___CXX03___ALGORITHM_FIND_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_H - -#include <__cxx03/__algorithm/find_segment_if.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__bit/countr.h> -#include <__cxx03/__bit/invert_if.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__fwd/bit_reference.h> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__string/constexpr_c_functions.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/is_signed.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/limits> - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -# include <__cxx03/cwchar> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// generic implementation -template -_LIBCPP_HIDE_FROM_ABI _Iter __find(_Iter __first, _Sent __last, const _Tp& __value, _Proj& __proj) { - for (; __first != __last; ++__first) - if (std::__invoke(__proj, *__first) == __value) - break; - return __first; -} - -// trivially equality comparable implementations -template ::value && __libcpp_is_trivially_equality_comparable<_Tp, _Up>::value && - sizeof(_Tp) == 1, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp* __find(_Tp* __first, _Tp* __last, const _Up& __value, _Proj&) { - if (auto __ret = std::__constexpr_memchr(__first, __value, __last - __first)) - return __ret; - return __last; -} - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template ::value && __libcpp_is_trivially_equality_comparable<_Tp, _Up>::value && - sizeof(_Tp) == sizeof(wchar_t) && _LIBCPP_ALIGNOF(_Tp) >= _LIBCPP_ALIGNOF(wchar_t), - int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp* __find(_Tp* __first, _Tp* __last, const _Up& __value, _Proj&) { - if (auto __ret = std::__constexpr_wmemchr(__first, __value, __last - __first)) - return __ret; - return __last; -} -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -// TODO: This should also be possible to get right with different signedness -// cast integral types to allow vectorization -template ::value && !__libcpp_is_trivially_equality_comparable<_Tp, _Up>::value && - is_integral<_Tp>::value && is_integral<_Up>::value && - is_signed<_Tp>::value == is_signed<_Up>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp* __find(_Tp* __first, _Tp* __last, const _Up& __value, _Proj& __proj) { - if (__value < numeric_limits<_Tp>::min() || __value > numeric_limits<_Tp>::max()) - return __last; - return std::__find(__first, __last, _Tp(__value), __proj); -} - -// __bit_iterator implementation -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, _IsConst> -__find_bool(__bit_iterator<_Cp, _IsConst> __first, typename _Cp::size_type __n) { - using _It = __bit_iterator<_Cp, _IsConst>; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - // do first partial word - if (__first.__ctz_ != 0) { - __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_); - __storage_type __dn = std::min(__clz_f, __n); - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn)); - __storage_type __b = std::__invert_if(*__first.__seg_) & __m; - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - if (__n == __dn) - return __first + __n; - __n -= __dn; - ++__first.__seg_; - } - // do middle whole words - for (; __n >= __bits_per_word; ++__first.__seg_, __n -= __bits_per_word) { - __storage_type __b = std::__invert_if(*__first.__seg_); - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - } - // do last partial word - if (__n > 0) { - __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b = std::__invert_if(*__first.__seg_) & __m; - if (__b) - return _It(__first.__seg_, static_cast(std::__countr_zero(__b))); - } - return _It(__first.__seg_, static_cast(__n)); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, _IsConst> -__find(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, const _Tp& __value, _Proj&) { - if (static_cast(__value)) - return std::__find_bool(__first, static_cast(__last - __first)); - return std::__find_bool(__first, static_cast(__last - __first)); -} - -// segmented iterator implementation - -template -struct __find_segment; - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _SegmentedIterator -__find(_SegmentedIterator __first, _SegmentedIterator __last, const _Tp& __value, _Proj& __proj) { - return std::__find_segment_if(std::move(__first), std::move(__last), __find_segment<_Tp>(__value), __proj); -} - -template -struct __find_segment { - const _Tp& __value_; - - _LIBCPP_HIDE_FROM_ABI __find_segment(const _Tp& __value) : __value_(__value) {} - - template - _LIBCPP_HIDE_FROM_ABI _InputIterator operator()(_InputIterator __first, _InputIterator __last, _Proj& __proj) const { - return std::__find(__first, __last, __value_, __proj); - } -}; - -// public API -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _InputIterator -find(_InputIterator __first, _InputIterator __last, const _Tp& __value) { - __identity __proj; - return std::__rewrap_iter( - __first, std::__find(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __value, __proj)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_end.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_end.h deleted file mode 100644 index 8045021..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_end.h +++ /dev/null @@ -1,225 +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___CXX03___ALGORITHM_FIND_END_OF_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_END_OF_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/search.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__iterator/reverse_iterator.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template < class _AlgPolicy, - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Pred, - class _Proj1, - class _Proj2> -_LIBCPP_HIDE_FROM_ABI inline pair<_Iter1, _Iter1> __find_end_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - forward_iterator_tag, - forward_iterator_tag) { - // modeled after search algorithm - _Iter1 __match_first = _IterOps<_AlgPolicy>::next(__first1, __last1); // __last1 is the "default" answer - _Iter1 __match_last = __match_first; - if (__first2 == __last2) - return pair<_Iter1, _Iter1>(__match_last, __match_last); - while (true) { - while (true) { - if (__first1 == __last1) // if source exhausted return last correct answer (or __last1 if never found) - return pair<_Iter1, _Iter1>(__match_first, __match_last); - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - // *__first1 matches *__first2, now match elements after here - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) { // Pattern exhaused, record answer and search for another one - __match_first = __first1; - __match_last = ++__m1; - ++__first1; - break; - } - if (++__m1 == __last1) // Source exhausted, return last answer - return pair<_Iter1, _Iter1>(__match_first, __match_last); - // mismatch, restart with a new __first - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } // else there is a match, check next elements - } - } -} - -template < class _IterOps, - class _Pred, - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Proj1, - class _Proj2> -_LIBCPP_HIDE_FROM_ABI _Iter1 __find_end( - _Iter1 __first1, - _Sent1 __sent1, - _Iter2 __first2, - _Sent2 __sent2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - bidirectional_iterator_tag, - bidirectional_iterator_tag) { - auto __last1 = _IterOps::next(__first1, __sent1); - auto __last2 = _IterOps::next(__first2, __sent2); - // modeled after search algorithm (in reverse) - if (__first2 == __last2) - return __last1; // Everything matches an empty sequence - _Iter1 __l1 = __last1; - _Iter2 __l2 = __last2; - --__l2; - while (true) { - // Find last element in sequence 1 that matchs *(__last2-1), with a mininum of loop checks - while (true) { - if (__first1 == __l1) // return __last1 if no element matches *__first2 - return __last1; - if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2))) - break; - } - // *__l1 matches *__l2, now match elements before here - _Iter1 __m1 = __l1; - _Iter2 __m2 = __l2; - while (true) { - if (__m2 == __first2) // If pattern exhausted, __m1 is the answer (works for 1 element pattern) - return __m1; - if (__m1 == __first1) // Otherwise if source exhaused, pattern not found - return __last1; - - // if there is a mismatch, restart with a new __l1 - if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(__proj2, *--__m2))) { - break; - } // else there is a match, check next elements - } - } -} - -template < class _AlgPolicy, - class _Pred, - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Proj1, - class _Proj2> -_LIBCPP_HIDE_FROM_ABI _Iter1 __find_end( - _Iter1 __first1, - _Sent1 __sent1, - _Iter2 __first2, - _Sent2 __sent2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - random_access_iterator_tag, - random_access_iterator_tag) { - typedef typename iterator_traits<_Iter1>::difference_type _D1; - auto __last1 = _IterOps<_AlgPolicy>::next(__first1, __sent1); - auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __sent2); - // Take advantage of knowing source and pattern lengths. Stop short when source is smaller than pattern - auto __len2 = __last2 - __first2; - if (__len2 == 0) - return __last1; - auto __len1 = __last1 - __first1; - if (__len1 < __len2) - return __last1; - const _Iter1 __s = __first1 + _D1(__len2 - 1); // End of pattern match can't go before here - _Iter1 __l1 = __last1; - _Iter2 __l2 = __last2; - --__l2; - while (true) { - while (true) { - if (__s == __l1) - return __last1; - if (std::__invoke(__pred, std::__invoke(__proj1, *--__l1), std::__invoke(__proj2, *__l2))) - break; - } - _Iter1 __m1 = __l1; - _Iter2 __m2 = __l2; - while (true) { - if (__m2 == __first2) - return __m1; - // no need to check range on __m1 because __s guarantees we have enough source - if (!std::__invoke(__pred, std::__invoke(__proj1, *--__m1), std::__invoke(*--__m2))) { - break; - } - } - } -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 __find_end_classic( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate& __pred) { - auto __proj = __identity(); - return std::__find_end_impl<_ClassicAlgPolicy>( - __first1, - __last1, - __first2, - __last2, - __pred, - __proj, - __proj, - typename iterator_traits<_ForwardIterator1>::iterator_category(), - typename iterator_traits<_ForwardIterator2>::iterator_category()) - .first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 find_end( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - return std::__find_end_classic(__first1, __last1, __first2, __last2, __pred); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 -find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::find_end(__first1, __last1, __first2, __last2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_END_OF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_first_of.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_first_of.h deleted file mode 100644 index dd61fb4..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_first_of.h +++ /dev/null @@ -1,55 +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___CXX03___ALGORITHM_FIND_FIRST_OF_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_FIRST_OF_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator1 __find_first_of_ce( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate&& __pred) { - for (; __first1 != __last1; ++__first1) - for (_ForwardIterator2 __j = __first2; __j != __last2; ++__j) - if (__pred(*__first1, *__j)) - return __first1; - return __last1; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 find_first_of( - _ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __pred); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 find_first_of( - _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::__find_first_of_ce(__first1, __last1, __first2, __last2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_FIRST_OF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if.h deleted file mode 100644 index e7cb971..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_FIND_IF_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _InputIterator -find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (__pred(*__first)) - break; - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if_not.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if_not.h deleted file mode 100644 index d3a6d7b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_if_not.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_FIND_IF_NOT_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_IF_NOT_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _InputIterator -find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (!__pred(*__first)) - break; - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_IF_NOT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_segment_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_segment_if.h deleted file mode 100644 index 9fdf8ae..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/find_segment_if.h +++ /dev/null @@ -1,62 +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___CXX03___ALGORITHM_FIND_SEGMENT_IF_H -#define _LIBCPP___CXX03___ALGORITHM_FIND_SEGMENT_IF_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __find_segment_if is a utility function for optimizing iteration over segmented iterators linearly. -// [__first, __last) has to be a segmented range. __pred is expected to take a range of local iterators and the __proj. -// It returns an iterator to the first element that satisfies the predicate, or a one-past-the-end iterator if there was -// no match. __proj may be anything that should be passed to __pred, but is expected to be a projection to support -// ranges algorithms, or __identity for classic algorithms. - -template -_LIBCPP_HIDE_FROM_ABI _SegmentedIterator -__find_segment_if(_SegmentedIterator __first, _SegmentedIterator __last, _Pred __pred, _Proj& __proj) { - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - - // We are in a single segment, so we might not be at the beginning or end - if (__sfirst == __slast) - return _Traits::__compose(__sfirst, __pred(_Traits::__local(__first), _Traits::__local(__last), __proj)); - - { // We have more than one segment. Iterate over the first segment, since we might not start at the beginning - auto __llast = _Traits::__end(__sfirst); - auto __liter = __pred(_Traits::__local(__first), __llast, __proj); - if (__liter != __llast) - return _Traits::__compose(__sfirst, __liter); - } - ++__sfirst; - - // Iterate over the segments which are guaranteed to be completely in the range - while (__sfirst != __slast) { - auto __llast = _Traits::__end(__sfirst); - auto __liter = __pred(_Traits::__begin(__sfirst), _Traits::__end(__sfirst), __proj); - if (__liter != __llast) - return _Traits::__compose(__sfirst, __liter); - ++__sfirst; - } - - // Iterate over the last segment - return _Traits::__compose(__sfirst, __pred(_Traits::__begin(__sfirst), _Traits::__local(__last), __proj)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FIND_SEGMENT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each.h deleted file mode 100644 index 1ffb013..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each.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___CXX03___ALGORITHM_FOR_EACH_H -#define _LIBCPP___CXX03___ALGORITHM_FOR_EACH_H - -#include <__cxx03/__algorithm/for_each_segment.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__type_traits/enable_if.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Function for_each(_InputIterator __first, _InputIterator __last, _Function __f) { - for (; __first != __last; ++__first) - __f(*__first); - return __f; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FOR_EACH_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each_segment.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each_segment.h deleted file mode 100644 index b1d54ad..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/for_each_segment.h +++ /dev/null @@ -1,52 +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___CXX03___ALGORITHM_FOR_EACH_SEGMENT_H -#define _LIBCPP___CXX03___ALGORITHM_FOR_EACH_SEGMENT_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __for_each_segment is a utility function for optimizing iterating over segmented iterators linearly. -// __first and __last are expected to be a segmented range. __func is expected to take a range of local iterators. -// Anything that is returned from __func is ignored. - -template -_LIBCPP_HIDE_FROM_ABI void __for_each_segment(_SegmentedIterator __first, _SegmentedIterator __last, _Functor __func) { - using _Traits = __segmented_iterator_traits<_SegmentedIterator>; - - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - - // We are in a single segment, so we might not be at the beginning or end - if (__sfirst == __slast) { - __func(_Traits::__local(__first), _Traits::__local(__last)); - return; - } - - // We have more than one segment. Iterate over the first segment, since we might not start at the beginning - __func(_Traits::__local(__first), _Traits::__end(__sfirst)); - ++__sfirst; - // iterate over the segments which are guaranteed to be completely in the range - while (__sfirst != __slast) { - __func(_Traits::__begin(__sfirst), _Traits::__end(__sfirst)); - ++__sfirst; - } - // iterate over the last segment - __func(_Traits::__begin(__sfirst), _Traits::__local(__last)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_FOR_EACH_SEGMENT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate.h deleted file mode 100644 index 2d98820..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate.h +++ /dev/null @@ -1,28 +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___CXX03___ALGORITHM_GENERATE_H -#define _LIBCPP___CXX03___ALGORITHM_GENERATE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen) { - for (; __first != __last; ++__first) - *__first = __gen(); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_GENERATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate_n.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate_n.h deleted file mode 100644 index f1ea183..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/generate_n.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_GENERATE_N_H -#define _LIBCPP___CXX03___ALGORITHM_GENERATE_N_H - -#include <__cxx03/__config> -#include <__cxx03/__utility/convert_to_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator generate_n(_OutputIterator __first, _Size __orig_n, _Generator __gen) { - typedef decltype(std::__convert_to_integral(__orig_n)) _IntegralSize; - _IntegralSize __n = __orig_n; - for (; __n > 0; ++__first, (void)--__n) - *__first = __gen(); - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_GENERATE_N_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/half_positive.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/half_positive.h deleted file mode 100644 index 6e01fce..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/half_positive.h +++ /dev/null @@ -1,37 +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___CXX03___ALGORITHM_HALF_POSITIVE_H -#define _LIBCPP___CXX03___ALGORITHM_HALF_POSITIVE_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/make_unsigned.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Perform division by two quickly for positive integers (llvm.org/PR39129) - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Integral __half_positive(_Integral __value) { - return static_cast<_Integral>(static_cast<__make_unsigned_t<_Integral> >(__value) / 2); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp __half_positive(_Tp __value) { - return __value / 2; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_HALF_POSITIVE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/includes.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/includes.h deleted file mode 100644 index 194f508..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/includes.h +++ /dev/null @@ -1,79 +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___CXX03___ALGORITHM_INCLUDES_H -#define _LIBCPP___CXX03___ALGORITHM_INCLUDES_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI bool __includes( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Comp&& __comp, - _Proj1&& __proj1, - _Proj2&& __proj2) { - for (; __first2 != __last2; ++__first1) { - if (__first1 == __last1 || - std::__invoke(__comp, std::__invoke(__proj2, *__first2), std::__invoke(__proj1, *__first1))) - return false; - if (!std::__invoke(__comp, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - ++__first2; - } - return true; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -includes(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _Compare __comp) { - static_assert( - __is_callable<_Compare, decltype(*__first1), decltype(*__first2)>::value, "Comparator has to be callable"); - - return std::__includes( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - static_cast<__comp_ref_type<_Compare> >(__comp), - __identity(), - __identity()); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::includes(std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_INCLUDES_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/inplace_merge.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/inplace_merge.h deleted file mode 100644 index 187969d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/inplace_merge.h +++ /dev/null @@ -1,240 +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___CXX03___ALGORITHM_INPLACE_MERGE_H -#define _LIBCPP___CXX03___ALGORITHM_INPLACE_MERGE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/lower_bound.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__algorithm/move.h> -#include <__cxx03/__algorithm/rotate.h> -#include <__cxx03/__algorithm/upper_bound.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/reverse_iterator.h> -#include <__cxx03/__memory/destruct_n.h> -#include <__cxx03/__memory/temporary_buffer.h> -#include <__cxx03/__memory/unique_ptr.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/new> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __invert // invert the sense of a comparison -{ -private: - _Predicate __p_; - -public: - _LIBCPP_HIDE_FROM_ABI __invert() {} - - _LIBCPP_HIDE_FROM_ABI explicit __invert(_Predicate __p) : __p_(__p) {} - - template - _LIBCPP_HIDE_FROM_ABI bool operator()(const _T1& __x) { - return !__p_(__x); - } - - template - _LIBCPP_HIDE_FROM_ABI bool operator()(const _T1& __x, const _T2& __y) { - return __p_(__y, __x); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI void __half_inplace_merge( - _InputIterator1 __first1, - _Sent1 __last1, - _InputIterator2 __first2, - _Sent2 __last2, - _OutputIterator __result, - _Compare&& __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - std::__move<_AlgPolicy>(__first1, __last1, __result); - return; - } - - if (__comp(*__first2, *__first1)) { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first2); - ++__first2; - } else { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first1); - ++__first1; - } - } - // __first2 through __last2 are already in the right spot. -} - -template -_LIBCPP_HIDE_FROM_ABI void __buffered_inplace_merge( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - _Compare&& __comp, - typename iterator_traits<_BidirectionalIterator>::difference_type __len1, - typename iterator_traits<_BidirectionalIterator>::difference_type __len2, - typename iterator_traits<_BidirectionalIterator>::value_type* __buff) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h2(__buff, __d); - if (__len1 <= __len2) { - value_type* __p = __buff; - for (_BidirectionalIterator __i = __first; __i != __middle; - __d.template __incr(), (void)++__i, (void)++__p) - ::new ((void*)__p) value_type(_IterOps<_AlgPolicy>::__iter_move(__i)); - std::__half_inplace_merge<_AlgPolicy>(__buff, __p, __middle, __last, __first, __comp); - } else { - value_type* __p = __buff; - for (_BidirectionalIterator __i = __middle; __i != __last; - __d.template __incr(), (void)++__i, (void)++__p) - ::new ((void*)__p) value_type(_IterOps<_AlgPolicy>::__iter_move(__i)); - typedef reverse_iterator<_BidirectionalIterator> _RBi; - typedef reverse_iterator _Rv; - typedef __invert<_Compare> _Inverted; - std::__half_inplace_merge<_AlgPolicy>( - _Rv(__p), _Rv(__buff), _RBi(__middle), _RBi(__first), _RBi(__last), _Inverted(__comp)); - } -} - -template -void __inplace_merge( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - _Compare&& __comp, - typename iterator_traits<_BidirectionalIterator>::difference_type __len1, - typename iterator_traits<_BidirectionalIterator>::difference_type __len2, - typename iterator_traits<_BidirectionalIterator>::value_type* __buff, - ptrdiff_t __buff_size) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - while (true) { - // if __middle == __last, we're done - if (__len2 == 0) - return; - if (__len1 <= __buff_size || __len2 <= __buff_size) - return std::__buffered_inplace_merge<_AlgPolicy>(__first, __middle, __last, __comp, __len1, __len2, __buff); - // shrink [__first, __middle) as much as possible (with no moves), returning if it shrinks to 0 - for (; true; ++__first, (void)--__len1) { - if (__len1 == 0) - return; - if (__comp(*__middle, *__first)) - break; - } - // __first < __middle < __last - // *__first > *__middle - // partition [__first, __m1) [__m1, __middle) [__middle, __m2) [__m2, __last) such that - // all elements in: - // [__first, __m1) <= [__middle, __m2) - // [__middle, __m2) < [__m1, __middle) - // [__m1, __middle) <= [__m2, __last) - // and __m1 or __m2 is in the middle of its range - _BidirectionalIterator __m1; // "median" of [__first, __middle) - _BidirectionalIterator __m2; // "median" of [__middle, __last) - difference_type __len11; // distance(__first, __m1) - difference_type __len21; // distance(__middle, __m2) - // binary search smaller range - if (__len1 < __len2) { // __len >= 1, __len2 >= 2 - __len21 = __len2 / 2; - __m2 = __middle; - _Ops::advance(__m2, __len21); - __m1 = std::__upper_bound<_AlgPolicy>(__first, __middle, *__m2, __comp, std::__identity()); - __len11 = _Ops::distance(__first, __m1); - } else { - if (__len1 == 1) { // __len1 >= __len2 && __len2 > 0, therefore __len2 == 1 - // It is known *__first > *__middle - _Ops::iter_swap(__first, __middle); - return; - } - // __len1 >= 2, __len2 >= 1 - __len11 = __len1 / 2; - __m1 = __first; - _Ops::advance(__m1, __len11); - __m2 = std::lower_bound(__middle, __last, *__m1, __comp); - __len21 = _Ops::distance(__middle, __m2); - } - difference_type __len12 = __len1 - __len11; // distance(__m1, __middle) - difference_type __len22 = __len2 - __len21; // distance(__m2, __last) - // [__first, __m1) [__m1, __middle) [__middle, __m2) [__m2, __last) - // swap middle two partitions - __middle = std::__rotate<_AlgPolicy>(__m1, __middle, __m2).first; - // __len12 and __len21 now have swapped meanings - // merge smaller range with recursive call and larger with tail recursion elimination - if (__len11 + __len21 < __len12 + __len22) { - std::__inplace_merge<_AlgPolicy>(__first, __m1, __middle, __comp, __len11, __len21, __buff, __buff_size); - __first = __middle; - __middle = __m2; - __len1 = __len12; - __len2 = __len22; - } else { - std::__inplace_merge<_AlgPolicy>(__middle, __m2, __last, __comp, __len12, __len22, __buff, __buff_size); - __last = __middle; - __middle = __m1; - __len1 = __len11; - __len2 = __len21; - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI void __inplace_merge( - _BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last, _Compare&& __comp) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - difference_type __len1 = _IterOps<_AlgPolicy>::distance(__first, __middle); - difference_type __len2 = _IterOps<_AlgPolicy>::distance(__middle, __last); - difference_type __buf_size = std::min(__len1, __len2); - // TODO: Remove the use of std::get_temporary_buffer - _LIBCPP_SUPPRESS_DEPRECATED_PUSH - pair __buf = std::get_temporary_buffer(__buf_size); - _LIBCPP_SUPPRESS_DEPRECATED_POP - unique_ptr __h(__buf.first); - return std::__inplace_merge<_AlgPolicy>( - std::move(__first), std::move(__middle), std::move(__last), __comp, __len1, __len2, __buf.first, __buf.second); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void inplace_merge( - _BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last, _Compare __comp) { - std::__inplace_merge<_ClassicAlgPolicy>( - std::move(__first), std::move(__middle), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -inplace_merge(_BidirectionalIterator __first, _BidirectionalIterator __middle, _BidirectionalIterator __last) { - std::inplace_merge(std::move(__first), std::move(__middle), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_INPLACE_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap.h deleted file mode 100644 index a29cefe..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap.h +++ /dev/null @@ -1,38 +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___CXX03___ALGORITHM_IS_HEAP_H -#define _LIBCPP___CXX03___ALGORITHM_IS_HEAP_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/is_heap_until.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - return std::__is_heap_until(__first, __last, static_cast<__comp_ref_type<_Compare> >(__comp)) == __last; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - return std::is_heap(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap_until.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap_until.h deleted file mode 100644 index 6625af7..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_heap_until.h +++ /dev/null @@ -1,62 +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___CXX03___ALGORITHM_IS_HEAP_UNTIL_H -#define _LIBCPP___CXX03___ALGORITHM_IS_HEAP_UNTIL_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __len = __last - __first; - difference_type __p = 0; - difference_type __c = 1; - _RandomAccessIterator __pp = __first; - while (__c < __len) { - _RandomAccessIterator __cp = __first + __c; - if (__comp(*__pp, *__cp)) - return __cp; - ++__c; - ++__cp; - if (__c == __len) - return __last; - if (__comp(*__pp, *__cp)) - return __cp; - ++__p; - ++__pp; - __c = 2 * __p + 1; - } - return __last; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - return std::__is_heap_until(__first, __last, static_cast<__comp_ref_type<_Compare> >(__comp)); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) { - return std::__is_heap_until(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_HEAP_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_partitioned.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_partitioned.h deleted file mode 100644 index c4547d3..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_partitioned.h +++ /dev/null @@ -1,37 +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___CXX03___ALGORITHM_IS_PARTITIONED_H -#define _LIBCPP___CXX03___ALGORITHM_IS_PARTITIONED_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool -is_partitioned(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (!__pred(*__first)) - break; - if (__first == __last) - return true; - ++__first; - for (; __first != __last; ++__first) - if (__pred(*__first)) - return false; - return true; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_PARTITIONED_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_permutation.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_permutation.h deleted file mode 100644 index 9402fdf..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_permutation.h +++ /dev/null @@ -1,254 +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___CXX03___ALGORITHM_IS_PERMUTATION_H -#define _LIBCPP___CXX03___ALGORITHM_IS_PERMUTATION_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _ConstTimeDistance : false_type {}; - -template -struct _ConstTimeDistance< - _Iter1, - _Iter1, - _Iter2, - _Iter2, - __enable_if_t< is_same::iterator_category, random_access_iterator_tag>::value && - is_same::iterator_category, random_access_iterator_tag>::value > > - : true_type {}; - -// Internal functions - -// For each element in [f1, l1) see if there are the same number of equal elements in [f2, l2) -template -_LIBCPP_HIDE_FROM_ABI bool __is_permutation_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2) { - using _D1 = __iter_diff_t<_Iter1>; - - for (auto __i = __first1; __i != __last1; ++__i) { - // Have we already counted the number of *__i in [f1, l1)? - auto __match = __first1; - for (; __match != __i; ++__match) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__match), std::__invoke(__proj1, *__i))) - break; - } - - if (__match == __i) { - // Count number of *__i in [f2, l2) - _D1 __c2 = 0; - for (auto __j = __first2; __j != __last2; ++__j) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__i), std::__invoke(__proj2, *__j))) - ++__c2; - } - if (__c2 == 0) - return false; - - // Count number of *__i in [__i, l1) (we can start with 1) - _D1 __c1 = 1; - for (auto __j = _IterOps<_AlgPolicy>::next(__i); __j != __last1; ++__j) { - if (std::__invoke(__pred, std::__invoke(__proj1, *__i), std::__invoke(__proj1, *__j))) - ++__c1; - } - if (__c1 != __c2) - return false; - } - } - - return true; -} - -// 2+1 iterators, predicate. Not used by range algorithms. -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool __is_permutation( - _ForwardIterator1 __first1, _Sentinel1 __last1, _ForwardIterator2 __first2, _BinaryPredicate&& __pred) { - // Shorten sequences as much as possible by lopping of any equal prefix. - for (; __first1 != __last1; ++__first1, (void)++__first2) { - if (!__pred(*__first1, *__first2)) - break; - } - - if (__first1 == __last1) - return true; - - // __first1 != __last1 && *__first1 != *__first2 - using _D1 = __iter_diff_t<_ForwardIterator1>; - _D1 __l1 = _IterOps<_AlgPolicy>::distance(__first1, __last1); - if (__l1 == _D1(1)) - return false; - auto __last2 = _IterOps<_AlgPolicy>::next(__first2, __l1); - - return std::__is_permutation_impl<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __identity(), - __identity()); -} - -// 2+2 iterators, predicate, non-constant time `distance`. -template -_LIBCPP_HIDE_FROM_ABI bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2, - /*_ConstTimeDistance=*/false_type) { - // Shorten sequences as much as possible by lopping of any equal prefix. - while (__first1 != __last1 && __first2 != __last2) { - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - ++__first2; - } - - if (__first1 == __last1) - return __first2 == __last2; - if (__first2 == __last2) // Second range is shorter - return false; - - using _D1 = __iter_diff_t<_Iter1>; - _D1 __l1 = _IterOps<_AlgPolicy>::distance(__first1, __last1); - - using _D2 = __iter_diff_t<_Iter2>; - _D2 __l2 = _IterOps<_AlgPolicy>::distance(__first2, __last2); - if (__l1 != __l2) - return false; - - return std::__is_permutation_impl<_AlgPolicy>( - std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2); -} - -// 2+2 iterators, predicate, specialization for constant-time `distance` call. -template -_LIBCPP_HIDE_FROM_ABI bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2, - /*_ConstTimeDistance=*/true_type) { - if (std::distance(__first1, __last1) != std::distance(__first2, __last2)) - return false; - return std::__is_permutation<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2, - /*_ConstTimeDistance=*/false_type()); -} - -// 2+2 iterators, predicate -template -_LIBCPP_HIDE_FROM_ABI bool __is_permutation( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred&& __pred, - _Proj1&& __proj1, - _Proj2&& __proj2) { - return std::__is_permutation<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - __pred, - __proj1, - __proj2, - _ConstTimeDistance<_Iter1, _Sent1, _Iter2, _Sent2>()); -} - -// Public interface - -// 2+1 iterators, predicate -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool is_permutation( - _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _BinaryPredicate __pred) { - static_assert(__is_callable<_BinaryPredicate, decltype(*__first1), decltype(*__first2)>::value, - "The predicate has to be callable"); - - return std::__is_permutation<_ClassicAlgPolicy>(std::move(__first1), std::move(__last1), std::move(__first2), __pred); -} - -// 2+1 iterators -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { - return std::is_permutation(__first1, __last1, __first2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted.h deleted file mode 100644 index 262b963..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted.h +++ /dev/null @@ -1,37 +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___CXX03___ALGORITHM_IS_SORTED_H -#define _LIBCPP___CXX03___ALGORITHM_IS_SORTED_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/is_sorted_until.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -is_sorted(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - return std::__is_sorted_until<__comp_ref_type<_Compare> >(__first, __last, __comp) == __last; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool is_sorted(_ForwardIterator __first, _ForwardIterator __last) { - return std::is_sorted(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_SORTED_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted_until.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted_until.h deleted file mode 100644 index 9bd3998..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/is_sorted_until.h +++ /dev/null @@ -1,51 +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___CXX03___ALGORITHM_IS_SORTED_UNTIL_H -#define _LIBCPP___CXX03___ALGORITHM_IS_SORTED_UNTIL_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator -__is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (__comp(*__i, *__first)) - return __i; - __first = __i; - } - } - return __last; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - return std::__is_sorted_until<__comp_ref_type<_Compare> >(__first, __last, __comp); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) { - return std::is_sorted_until(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_IS_SORTED_UNTIL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iter_swap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iter_swap.h deleted file mode 100644 index 896a277..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iter_swap.h +++ /dev/null @@ -1,29 +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___CXX03___ALGORITHM_ITER_SWAP_H -#define _LIBCPP___CXX03___ALGORITHM_ITER_SWAP_H - -#include <__cxx03/__config> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/swap.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { - swap(*__a, *__b); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_ITER_SWAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iterator_operations.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iterator_operations.h deleted file mode 100644 index b824928..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/iterator_operations.h +++ /dev/null @@ -1,192 +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___CXX03___ALGORITHM_ITERATOR_OPERATIONS_H -#define _LIBCPP___CXX03___ALGORITHM_ITERATOR_OPERATIONS_H - -#include <__cxx03/__algorithm/iter_swap.h> -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__iterator/prev.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_reference.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _IterOps; - -struct _ClassicAlgPolicy {}; - -template <> -struct _IterOps<_ClassicAlgPolicy> { - template - using __value_type = typename iterator_traits<_Iter>::value_type; - - template - using __iterator_category = typename iterator_traits<_Iter>::iterator_category; - - template - using __difference_type = typename iterator_traits<_Iter>::difference_type; - - // advance - template - _LIBCPP_HIDE_FROM_ABI static void advance(_Iter& __iter, _Distance __count) { - std::advance(__iter, __count); - } - - // distance - template - _LIBCPP_HIDE_FROM_ABI static typename iterator_traits<_Iter>::difference_type distance(_Iter __first, _Iter __last) { - return std::distance(__first, __last); - } - - template - using __deref_t = decltype(*std::declval<_Iter&>()); - - template - using __move_t = decltype(std::move(*std::declval<_Iter&>())); - - template - _LIBCPP_HIDE_FROM_ABI static void __validate_iter_reference() { - static_assert( - is_same<__deref_t<_Iter>, typename iterator_traits<__remove_cvref_t<_Iter> >::reference>::value, - "It looks like your iterator's `iterator_traits::reference` does not match the return type of " - "dereferencing the iterator, i.e., calling `*it`. This is undefined behavior according to [input.iterators] " - "and can lead to dangling reference issues at runtime, so we are flagging this."); - } - - // iter_move - template >::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI static - // If the result of dereferencing `_Iter` is a reference type, deduce the result of calling `std::move` on it. - // Note that the C++03 mode doesn't support `decltype(auto)` as the return type. - __move_t<_Iter> - __iter_move(_Iter&& __i) { - __validate_iter_reference<_Iter>(); - - return std::move(*std::forward<_Iter>(__i)); - } - - template >::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI static - // If the result of dereferencing `_Iter` is a value type, deduce the return value of this function to also be a - // value -- otherwise, after `operator*` returns a temporary, this function would return a dangling reference to - // that temporary. Note that the C++03 mode doesn't support `auto` as the return type. - __deref_t<_Iter> - __iter_move(_Iter&& __i) { - __validate_iter_reference<_Iter>(); - - return *std::forward<_Iter>(__i); - } - - // iter_swap - template - _LIBCPP_HIDE_FROM_ABI static void iter_swap(_Iter1&& __a, _Iter2&& __b) { - std::iter_swap(std::forward<_Iter1>(__a), std::forward<_Iter2>(__b)); - } - - // next - template - _LIBCPP_HIDE_FROM_ABI static _Iterator next(_Iterator, _Iterator __last) { - return __last; - } - - template - _LIBCPP_HIDE_FROM_ABI static __remove_cvref_t<_Iter> - next(_Iter&& __it, typename iterator_traits<__remove_cvref_t<_Iter> >::difference_type __n = 1) { - return std::next(std::forward<_Iter>(__it), __n); - } - - // prev - template - _LIBCPP_HIDE_FROM_ABI static __remove_cvref_t<_Iter> - prev(_Iter&& __iter, typename iterator_traits<__remove_cvref_t<_Iter> >::difference_type __n = 1) { - return std::prev(std::forward<_Iter>(__iter), __n); - } - - template - _LIBCPP_HIDE_FROM_ABI static void __advance_to(_Iter& __first, _Iter __last) { - __first = __last; - } - - // advance with sentinel, a la std::ranges::advance - template - _LIBCPP_HIDE_FROM_ABI static __difference_type<_Iter> - __advance_to(_Iter& __iter, __difference_type<_Iter> __count, const _Iter& __sentinel) { - return _IterOps::__advance_to(__iter, __count, __sentinel, typename iterator_traits<_Iter>::iterator_category()); - } - -private: - // advance with sentinel, a la std::ranges::advance -- InputIterator specialization - template - _LIBCPP_HIDE_FROM_ABI static __difference_type<_InputIter> __advance_to( - _InputIter& __iter, __difference_type<_InputIter> __count, const _InputIter& __sentinel, input_iterator_tag) { - __difference_type<_InputIter> __dist = 0; - for (; __dist < __count && __iter != __sentinel; ++__dist) - ++__iter; - return __count - __dist; - } - - // advance with sentinel, a la std::ranges::advance -- BidirectionalIterator specialization - template - _LIBCPP_HIDE_FROM_ABI static __difference_type<_BiDirIter> - __advance_to(_BiDirIter& __iter, - __difference_type<_BiDirIter> __count, - const _BiDirIter& __sentinel, - bidirectional_iterator_tag) { - __difference_type<_BiDirIter> __dist = 0; - if (__count >= 0) - for (; __dist < __count && __iter != __sentinel; ++__dist) - ++__iter; - else - for (__count = -__count; __dist < __count && __iter != __sentinel; ++__dist) - --__iter; - return __count - __dist; - } - - // advance with sentinel, a la std::ranges::advance -- RandomIterator specialization - template - _LIBCPP_HIDE_FROM_ABI static __difference_type<_RandIter> - __advance_to(_RandIter& __iter, - __difference_type<_RandIter> __count, - const _RandIter& __sentinel, - random_access_iterator_tag) { - auto __dist = _IterOps::distance(__iter, __sentinel); - _LIBCPP_ASSERT_VALID_INPUT_RANGE( - __count == 0 || (__dist < 0) == (__count < 0), "__sentinel must precede __iter when __count < 0"); - if (__count < 0) - __dist = __dist > __count ? __dist : __count; - else - __dist = __dist < __count ? __dist : __count; - __iter += __dist; - return __count - __dist; - } -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_ITERATOR_OPERATIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lexicographical_compare.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lexicographical_compare.h deleted file mode 100644 index 0d991c9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lexicographical_compare.h +++ /dev/null @@ -1,57 +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___CXX03___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H -#define _LIBCPP___CXX03___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI bool __lexicographical_compare( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _Compare __comp) { - for (; __first2 != __last2; ++__first1, (void)++__first2) { - if (__first1 == __last1 || __comp(*__first1, *__first2)) - return true; - if (__comp(*__first2, *__first1)) - return false; - } - return false; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool lexicographical_compare( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _Compare __comp) { - return std::__lexicographical_compare<__comp_ref_type<_Compare> >(__first1, __last1, __first2, __last2, __comp); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool lexicographical_compare( - _InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) { - return std::lexicographical_compare(__first1, __last1, __first2, __last2, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_LEXICOGRAPHICAL_COMPARE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lower_bound.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lower_bound.h deleted file mode 100644 index 47ae255..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/lower_bound.h +++ /dev/null @@ -1,109 +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___CXX03___ALGORITHM_LOWER_BOUND_H -#define _LIBCPP___CXX03___ALGORITHM_LOWER_BOUND_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/half_positive.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__type_traits/remove_reference.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _Iter __lower_bound_bisecting( - _Iter __first, - const _Type& __value, - typename iterator_traits<_Iter>::difference_type __len, - _Comp& __comp, - _Proj& __proj) { - while (__len != 0) { - auto __l2 = std::__half_positive(__len); - _Iter __m = __first; - _IterOps<_AlgPolicy>::advance(__m, __l2); - if (std::__invoke(__comp, std::__invoke(__proj, *__m), __value)) { - __first = ++__m; - __len -= __l2 + 1; - } else { - __len = __l2; - } - } - return __first; -} - -// One-sided binary search, aka meta binary search, has been in the public domain for decades, and has the general -// advantage of being \Omega(1) rather than the classic algorithm's \Omega(log(n)), with the downside of executing at -// most 2*log(n) comparisons vs the classic algorithm's exact log(n). There are two scenarios in which it really shines: -// the first one is when operating over non-random-access iterators, because the classic algorithm requires knowing the -// container's size upfront, which adds \Omega(n) iterator increments to the complexity. The second one is when you're -// traversing the container in order, trying to fast-forward to the next value: in that case, the classic algorithm -// would yield \Omega(n*log(n)) comparisons and, for non-random-access iterators, \Omega(n^2) iterator increments, -// whereas the one-sided version will yield O(n) operations on both counts, with a \Omega(log(n)) bound on the number of -// comparisons. -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _ForwardIterator -__lower_bound_onesided(_ForwardIterator __first, _Sent __last, const _Type& __value, _Comp& __comp, _Proj& __proj) { - // step = 0, ensuring we can always short-circuit when distance is 1 later on - if (__first == __last || !std::__invoke(__comp, std::__invoke(__proj, *__first), __value)) - return __first; - - using _Distance = typename iterator_traits<_ForwardIterator>::difference_type; - for (_Distance __step = 1; __first != __last; __step <<= 1) { - auto __it = __first; - auto __dist = __step - _IterOps<_AlgPolicy>::__advance_to(__it, __step, __last); - // once we reach the last range where needle can be we must start - // looking inwards, bisecting that range - if (__it == __last || !std::__invoke(__comp, std::__invoke(__proj, *__it), __value)) { - // we've already checked the previous value and it was less, we can save - // one comparison by skipping bisection - if (__dist == 1) - return __it; - return std::__lower_bound_bisecting<_AlgPolicy>(__first, __value, __dist, __comp, __proj); - } - // range not found, move forward! - __first = __it; - } - return __first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -__lower_bound(_ForwardIterator __first, _Sent __last, const _Type& __value, _Comp& __comp, _Proj& __proj) { - const auto __dist = _IterOps<_AlgPolicy>::distance(__first, __last); - return std::__lower_bound_bisecting<_AlgPolicy>(__first, __value, __dist, __comp, __proj); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(__is_callable<_Compare, decltype(*__first), const _Tp&>::value, "The comparator has to be callable"); - auto __proj = std::__identity(); - return std::__lower_bound<_ClassicAlgPolicy>(__first, __last, __value, __comp, __proj); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::lower_bound(__first, __last, __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_LOWER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_heap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_heap.h deleted file mode 100644 index faa7e9e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_heap.h +++ /dev/null @@ -1,59 +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___CXX03___ALGORITHM_MAKE_HEAP_H -#define _LIBCPP___CXX03___ALGORITHM_MAKE_HEAP_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/sift_down.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - __comp_ref_type<_Compare> __comp_ref = __comp; - - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - difference_type __n = __last - __first; - if (__n > 1) { - // start from the first parent, there is no need to consider children - for (difference_type __start = (__n - 2) / 2; __start >= 0; --__start) { - std::__sift_down<_AlgPolicy>(__first, __comp_ref, __n, __first + __start); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - std::__make_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::make_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MAKE_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_projected.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_projected.h deleted file mode 100644 index 592f6d6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/make_projected.h +++ /dev/null @@ -1,74 +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___CXX03___ALGORITHM_MAKE_PROJECTED_H -#define _LIBCPP___CXX03___ALGORITHM_MAKE_PROJECTED_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_member_pointer.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _ProjectedPred { - _Pred& __pred; // Can be a unary or a binary predicate. - _Proj& __proj; - - _LIBCPP_HIDE_FROM_ABI _ProjectedPred(_Pred& __pred_arg, _Proj& __proj_arg) : __pred(__pred_arg), __proj(__proj_arg) {} - - template - typename __invoke_of<_Pred&, decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_Tp>()))>::type - _LIBCPP_HIDE_FROM_ABI - operator()(_Tp&& __v) const { - return std::__invoke(__pred, std::__invoke(__proj, std::forward<_Tp>(__v))); - } - - template - typename __invoke_of<_Pred&, - decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_T1>())), - decltype(std::__invoke(std::declval<_Proj&>(), std::declval<_T2>()))>::type _LIBCPP_HIDE_FROM_ABI - operator()(_T1&& __lhs, _T2&& __rhs) const { - return std::__invoke( - __pred, std::__invoke(__proj, std::forward<_T1>(__lhs)), std::__invoke(__proj, std::forward<_T2>(__rhs))); - } -}; - -template < - class _Pred, - class _Proj, - __enable_if_t >::value && __is_identity<__decay_t<_Proj> >::value), int> = 0> -_LIBCPP_HIDE_FROM_ABI _ProjectedPred<_Pred, _Proj> __make_projected(_Pred& __pred, _Proj& __proj) { - return _ProjectedPred<_Pred, _Proj>(__pred, __proj); -} - -// Avoid creating the functor and just use the pristine comparator -- for certain algorithms, this would enable -// optimizations that rely on the type of the comparator. Additionally, this results in less layers of indirection in -// the call stack when the comparator is invoked, even in an unoptimized build. -template < - class _Pred, - class _Proj, - __enable_if_t >::value && __is_identity<__decay_t<_Proj> >::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Pred& __make_projected(_Pred& __pred, _Proj&) { - return __pred; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_MAKE_PROJECTED_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max.h deleted file mode 100644 index 0a2e435..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max.h +++ /dev/null @@ -1,42 +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___CXX03___ALGORITHM_MAX_H -#define _LIBCPP___CXX03___ALGORITHM_MAX_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/max_element.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI const _Tp& -max(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__a, __b) ? __b : __a; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI const _Tp& -max(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::max(__a, __b, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MAX_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max_element.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max_element.h deleted file mode 100644 index 710df45..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/max_element.h +++ /dev/null @@ -1,51 +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___CXX03___ALGORITHM_MAX_ELEMENT_H -#define _LIBCPP___CXX03___ALGORITHM_MAX_ELEMENT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -__max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::max_element requires a ForwardIterator"); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) - if (__comp(*__first, *__i)) - __first = __i; - } - return __first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - return std::__max_element<__comp_ref_type<_Compare> >(__first, __last, __comp); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -max_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::max_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_MAX_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/merge.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/merge.h deleted file mode 100644 index b5a19a8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/merge.h +++ /dev/null @@ -1,69 +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___CXX03___ALGORITHM_MERGE_H -#define _LIBCPP___CXX03___ALGORITHM_MERGE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _OutputIterator __merge( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) - return std::copy(__first1, __last1, __result); - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } else { - *__result = *__first1; - ++__first1; - } - } - return std::copy(__first2, __last2, __result); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -merge(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__merge<__comp_ref_type<_Compare> >(__first1, __last1, __first2, __last2, __result, __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -merge(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::merge(__first1, __last1, __first2, __last2, __result, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_MERGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min.h deleted file mode 100644 index f42e47b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min.h +++ /dev/null @@ -1,42 +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___CXX03___ALGORITHM_MIN_H -#define _LIBCPP___CXX03___ALGORITHM_MIN_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/min_element.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI const _Tp& -min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__b, __a) ? __b : __a; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI const _Tp& -min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::min(__a, __b, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MIN_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min_element.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min_element.h deleted file mode 100644 index 41c0416..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/min_element.h +++ /dev/null @@ -1,70 +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___CXX03___ALGORITHM_MIN_ELEMENT_H -#define _LIBCPP___CXX03___ALGORITHM_MIN_ELEMENT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _Iter __min_element(_Iter __first, _Sent __last, _Comp __comp, _Proj& __proj) { - if (__first == __last) - return __first; - - _Iter __i = __first; - while (++__i != __last) - if (std::__invoke(__comp, std::__invoke(__proj, *__i), std::__invoke(__proj, *__first))) - __first = __i; - - return __first; -} - -template -_LIBCPP_HIDE_FROM_ABI _Iter __min_element(_Iter __first, _Sent __last, _Comp __comp) { - auto __proj = __identity(); - return std::__min_element<_Comp>(std::move(__first), std::move(__last), __comp, __proj); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -min_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::min_element requires a ForwardIterator"); - static_assert( - __is_callable<_Compare, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); - - return std::__min_element<__comp_ref_type<_Compare> >(std::move(__first), std::move(__last), __comp); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -min_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::min_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MIN_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax.h deleted file mode 100644 index ce19486..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax.h +++ /dev/null @@ -1,39 +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___CXX03___ALGORITHM_MINMAX_H -#define _LIBCPP___CXX03___ALGORITHM_MINMAX_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/minmax_element.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI pair -minmax(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) { - return __comp(__b, __a) ? pair(__b, __a) : pair(__a, __b); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI pair -minmax(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) { - return std::minmax(__a, __b, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_MINMAX_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax_element.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax_element.h deleted file mode 100644 index 8451725..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/minmax_element.h +++ /dev/null @@ -1,99 +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___CXX03___ALGORITHM_MINMAX_ELEMENT_H -#define _LIBCPP___CXX03___ALGORITHM_MINMAX_ELEMENT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _MinmaxElementLessFunc { - _Comp& __comp_; - _Proj& __proj_; - -public: - _LIBCPP_HIDE_FROM_ABI _MinmaxElementLessFunc(_Comp& __comp, _Proj& __proj) : __comp_(__comp), __proj_(__proj) {} - - template - _LIBCPP_HIDE_FROM_ABI bool operator()(_Iter& __it1, _Iter& __it2) { - return std::__invoke(__comp_, std::__invoke(__proj_, *__it1), std::__invoke(__proj_, *__it2)); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iter, _Iter> -__minmax_element_impl(_Iter __first, _Sent __last, _Comp& __comp, _Proj& __proj) { - auto __less = _MinmaxElementLessFunc<_Comp, _Proj>(__comp, __proj); - - pair<_Iter, _Iter> __result(__first, __first); - if (__first == __last || ++__first == __last) - return __result; - - if (__less(__first, __result.first)) - __result.first = __first; - else - __result.second = __first; - - while (++__first != __last) { - _Iter __i = __first; - if (++__first == __last) { - if (__less(__i, __result.first)) - __result.first = __i; - else if (!__less(__i, __result.second)) - __result.second = __i; - return __result; - } - - if (__less(__first, __i)) { - if (__less(__first, __result.first)) - __result.first = __first; - if (!__less(__i, __result.second)) - __result.second = __i; - } else { - if (__less(__i, __result.first)) - __result.first = __i; - if (!__less(__first, __result.second)) - __result.second = __first; - } - } - - return __result; -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -minmax_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) { - static_assert( - __has_forward_iterator_category<_ForwardIterator>::value, "std::minmax_element requires a ForwardIterator"); - static_assert( - __is_callable<_Compare, decltype(*__first), decltype(*__first)>::value, "The comparator has to be callable"); - auto __proj = __identity(); - return std::__minmax_element_impl(__first, __last, __comp, __proj); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -minmax_element(_ForwardIterator __first, _ForwardIterator __last) { - return std::minmax_element(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_MINMAX_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/mismatch.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/mismatch.h deleted file mode 100644 index 3c57c1b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/mismatch.h +++ /dev/null @@ -1,171 +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___CXX03___ALGORITHM_MISMATCH_H -#define _LIBCPP___CXX03___ALGORITHM_MISMATCH_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__algorithm/simd_utils.h> -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/aliasing_iterator.h> -#include <__cxx03/__type_traits/desugars_to.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> -#include <__cxx03/__type_traits/is_equality_comparable.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/__utility/unreachable.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter2> -__mismatch_loop(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - while (__first1 != __last1) { - if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - ++__first2; - } - return std::make_pair(std::move(__first1), std::move(__first2)); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter2> -__mismatch(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2); -} - -#if _LIBCPP_VECTORIZE_ALGORITHMS - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_Iter, _Iter> -__mismatch_vectorized(_Iter __first1, _Iter __last1, _Iter __first2) { - using __value_type = __iter_value_type<_Iter>; - constexpr size_t __unroll_count = 4; - constexpr size_t __vec_size = __native_vector_size<__value_type>; - using __vec = __simd_vector<__value_type, __vec_size>; - - if (!__libcpp_is_constant_evaluated()) { - auto __orig_first1 = __first1; - auto __last2 = __first2 + (__last1 - __first1); - while (static_cast(__last1 - __first1) >= __unroll_count * __vec_size) [[__unlikely__]] { - __vec __lhs[__unroll_count]; - __vec __rhs[__unroll_count]; - - for (size_t __i = 0; __i != __unroll_count; ++__i) { - __lhs[__i] = std::__load_vector<__vec>(__first1 + __i * __vec_size); - __rhs[__i] = std::__load_vector<__vec>(__first2 + __i * __vec_size); - } - - for (size_t __i = 0; __i != __unroll_count; ++__i) { - if (auto __cmp_res = __lhs[__i] == __rhs[__i]; !std::__all_of(__cmp_res)) { - auto __offset = __i * __vec_size + std::__find_first_not_set(__cmp_res); - return {__first1 + __offset, __first2 + __offset}; - } - } - - __first1 += __unroll_count * __vec_size; - __first2 += __unroll_count * __vec_size; - } - - // check the remaining 0-3 vectors - while (static_cast(__last1 - __first1) >= __vec_size) { - if (auto __cmp_res = std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2); - !std::__all_of(__cmp_res)) { - auto __offset = std::__find_first_not_set(__cmp_res); - return {__first1 + __offset, __first2 + __offset}; - } - __first1 += __vec_size; - __first2 += __vec_size; - } - - if (__last1 - __first1 == 0) - return {__first1, __first2}; - - // Check if we can load elements in front of the current pointer. If that's the case load a vector at - // (last - vector_size) to check the remaining elements - if (static_cast(__first1 - __orig_first1) >= __vec_size) { - __first1 = __last1 - __vec_size; - __first2 = __last2 - __vec_size; - auto __offset = - std::__find_first_not_set(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2)); - return {__first1 + __offset, __first2 + __offset}; - } // else loop over the elements individually - } - - __equal_to __pred; - __identity __proj; - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj, __proj); -} - -template ::value && __desugars_to_v<__equal_tag, _Pred, _Tp, _Tp> && - __is_identity<_Proj1>::value && __is_identity<_Proj2>::value, - int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_Tp*, _Tp*> -__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Pred&, _Proj1&, _Proj2&) { - return std::__mismatch_vectorized(__first1, __last1, __first2); -} - -template ::value && __desugars_to_v<__equal_tag, _Pred, _Tp, _Tp> && - __is_identity<_Proj1>::value && __is_identity<_Proj2>::value && - __can_map_to_integer_v<_Tp> && __libcpp_is_trivially_equality_comparable<_Tp, _Tp>::value, - int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI pair<_Tp*, _Tp*> -__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - if (__libcpp_is_constant_evaluated()) { - return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2); - } else { - using _Iter = __aliasing_iterator<_Tp*, __get_as_integer_type_t<_Tp>>; - auto __ret = std::__mismatch_vectorized(_Iter(__first1), _Iter(__last1), _Iter(__first2)); - return {__ret.first.__base(), __ret.second.__base()}; - } -} -#endif // _LIBCPP_VECTORIZE_ALGORITHMS - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) { - __identity __proj; - auto __res = std::__mismatch( - std::__unwrap_iter(__first1), std::__unwrap_iter(__last1), std::__unwrap_iter(__first2), __pred, __proj, __proj); - return std::make_pair(std::__rewrap_iter(__first1, __res.first), std::__rewrap_iter(__first2, __res.second)); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI pair<_InputIterator1, _InputIterator2> -mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) { - return std::mismatch(__first1, __last1, __first2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MISMATCH_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move.h deleted file mode 100644 index 0c744bc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move.h +++ /dev/null @@ -1,120 +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___CXX03___ALGORITHM_MOVE_H -#define _LIBCPP___CXX03___ALGORITHM_MOVE_H - -#include <__cxx03/__algorithm/copy_move_common.h> -#include <__cxx03/__algorithm/for_each_segment.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> __move(_InIter __first, _Sent __last, _OutIter __result); - -template -struct __move_impl { - template - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _Sent __last, _OutIter __result) const { - while (__first != __last) { - *__result = _IterOps<_AlgPolicy>::__iter_move(__first); - ++__first; - ++__result; - } - return std::make_pair(std::move(__first), std::move(__result)); - } - - template - struct _MoveSegment { - using _Traits = __segmented_iterator_traits<_InIter>; - - _OutIter& __result_; - - _LIBCPP_HIDE_FROM_ABI explicit _MoveSegment(_OutIter& __result) : __result_(__result) {} - - _LIBCPP_HIDE_FROM_ABI void - operator()(typename _Traits::__local_iterator __lfirst, typename _Traits::__local_iterator __llast) { - __result_ = std::__move<_AlgPolicy>(__lfirst, __llast, std::move(__result_)).second; - } - }; - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - std::__for_each_segment(__first, __last, _MoveSegment<_InIter, _OutIter>(__result)); - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = typename common_type<__iter_diff_t<_InIter>, __iter_diff_t<_OutIter> >::type; - - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__result)); - - auto __local_first = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_last = _Traits::__end(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iters = std::__move<_AlgPolicy>(__first, __first + __size, __local_first); - __first = std::move(__iters.first); - - if (__first == __last) - return std::make_pair(std::move(__first), _Traits::__compose(__segment_iterator, std::move(__iters.second))); - - __local_first = _Traits::__begin(++__segment_iterator); - } - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_trivial_impl(__first, __last, __result); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> __move(_InIter __first, _Sent __last, _OutIter __result) { - return std::__copy_move_unwrap_iters<__move_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -move(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - static_assert(is_copy_constructible<_InputIterator>::value, "Iterators has to be copy constructible."); - static_assert(is_copy_constructible<_OutputIterator>::value, "The output iterator has to be copy constructible."); - - return std::__move<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MOVE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move_backward.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move_backward.h deleted file mode 100644 index 61e29c5..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/move_backward.h +++ /dev/null @@ -1,133 +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___CXX03___ALGORITHM_MOVE_BACKWARD_H -#define _LIBCPP___CXX03___ALGORITHM_MOVE_BACKWARD_H - -#include <__cxx03/__algorithm/copy_move_common.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator1, _BidirectionalIterator2> -__move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result); - -template -struct __move_backward_impl { - template - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _Sent __last, _OutIter __result) const { - auto __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - auto __original_last_iter = __last_iter; - - while (__first != __last_iter) { - *--__result = _IterOps<_AlgPolicy>::__iter_move(--__last_iter); - } - - return std::make_pair(std::move(__original_last_iter), std::move(__result)); - } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_InIter>; - auto __sfirst = _Traits::__segment(__first); - auto __slast = _Traits::__segment(__last); - if (__sfirst == __slast) { - auto __iters = - std::__move_backward<_AlgPolicy>(_Traits::__local(__first), _Traits::__local(__last), std::move(__result)); - return std::make_pair(__last, __iters.second); - } - - __result = - std::__move_backward<_AlgPolicy>(_Traits::__begin(__slast), _Traits::__local(__last), std::move(__result)) - .second; - --__slast; - while (__sfirst != __slast) { - __result = - std::__move_backward<_AlgPolicy>(_Traits::__begin(__slast), _Traits::__end(__slast), std::move(__result)) - .second; - --__slast; - } - __result = std::__move_backward<_AlgPolicy>(_Traits::__local(__first), _Traits::__end(__slast), std::move(__result)) - .second; - return std::make_pair(__last, std::move(__result)); - } - - template ::value && - !__is_segmented_iterator<_InIter>::value && __is_segmented_iterator<_OutIter>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_InIter, _OutIter> operator()(_InIter __first, _InIter __last, _OutIter __result) const { - using _Traits = __segmented_iterator_traits<_OutIter>; - using _DiffT = typename common_type<__iter_diff_t<_InIter>, __iter_diff_t<_OutIter> >::type; - - // When the range contains no elements, __result might not be a valid iterator - if (__first == __last) - return std::make_pair(__first, __result); - - auto __orig_last = __last; - - auto __local_last = _Traits::__local(__result); - auto __segment_iterator = _Traits::__segment(__result); - while (true) { - auto __local_first = _Traits::__begin(__segment_iterator); - auto __size = std::min<_DiffT>(__local_last - __local_first, __last - __first); - auto __iter = std::__move_backward<_AlgPolicy>(__last - __size, __last, __local_last).second; - __last -= __size; - - if (__first == __last) - return std::make_pair(std::move(__orig_last), _Traits::__compose(__segment_iterator, std::move(__iter))); - - __local_last = _Traits::__end(--__segment_iterator); - } - } - - // At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer. - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair<_In*, _Out*> operator()(_In* __first, _In* __last, _Out* __result) const { - return std::__copy_backward_trivial_impl(__first, __last, __result); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator1, _BidirectionalIterator2> -__move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result) { - static_assert(std::is_copy_constructible<_BidirectionalIterator1>::value && - std::is_copy_constructible<_BidirectionalIterator1>::value, - "Iterators must be copy constructible."); - - return std::__copy_move_unwrap_iters<__move_backward_impl<_AlgPolicy> >( - std::move(__first), std::move(__last), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _BidirectionalIterator2 -move_backward(_BidirectionalIterator1 __first, _BidirectionalIterator1 __last, _BidirectionalIterator2 __result) { - return std::__move_backward<_ClassicAlgPolicy>(std::move(__first), std::move(__last), std::move(__result)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_MOVE_BACKWARD_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/next_permutation.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/next_permutation.h deleted file mode 100644 index 12c6c51..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/next_permutation.h +++ /dev/null @@ -1,74 +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___CXX03___ALGORITHM_NEXT_PERMUTATION_H -#define _LIBCPP___CXX03___ALGORITHM_NEXT_PERMUTATION_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/reverse.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator, bool> -__next_permutation(_BidirectionalIterator __first, _Sentinel __last, _Compare&& __comp) { - using _Result = pair<_BidirectionalIterator, bool>; - - _BidirectionalIterator __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - _BidirectionalIterator __i = __last_iter; - if (__first == __last || __first == --__i) - return _Result(std::move(__last_iter), false); - - while (true) { - _BidirectionalIterator __ip1 = __i; - if (__comp(*--__i, *__ip1)) { - _BidirectionalIterator __j = __last_iter; - while (!__comp(*__i, *--__j)) - ; - _IterOps<_AlgPolicy>::iter_swap(__i, __j); - std::__reverse<_AlgPolicy>(__ip1, __last_iter); - return _Result(std::move(__last_iter), true); - } - if (__i == __first) { - std::__reverse<_AlgPolicy>(__first, __last_iter); - return _Result(std::move(__last_iter), false); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool -next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - return std::__next_permutation<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool next_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) { - return std::next_permutation(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_NEXT_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/none_of.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/none_of.h deleted file mode 100644 index 6672d5c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/none_of.h +++ /dev/null @@ -1,32 +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___CXX03___ALGORITHM_NONE_OF_H -#define _LIBCPP___CXX03___ALGORITHM_NONE_OF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool -none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { - for (; __first != __last; ++__first) - if (__pred(*__first)) - return false; - return true; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_NONE_OF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/nth_element.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/nth_element.h deleted file mode 100644 index e39540f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/nth_element.h +++ /dev/null @@ -1,261 +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___CXX03___ALGORITHM_NTH_ELEMENT_H -#define _LIBCPP___CXX03___ALGORITHM_NTH_ELEMENT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/sort.h> -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__debug_utils/randomize_range.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI bool __nth_element_find_guard( - _RandomAccessIterator& __i, _RandomAccessIterator& __j, _RandomAccessIterator __m, _Compare __comp) { - // manually guard downward moving __j against __i - while (true) { - if (__i == --__j) { - return false; - } - if (__comp(*__j, *__m)) { - return true; // found guard for downward moving __j, now use unguarded partition - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI void -// NOLINTNEXTLINE(readability-function-cognitive-complexity) -__nth_element( - _RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - // _Compare is known to be a reference type - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - const difference_type __limit = 7; - while (true) { - if (__nth == __last) - return; - difference_type __len = __last - __first; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return; - case 3: { - _RandomAccessIterator __m = __first; - std::__sort3<_AlgPolicy, _Compare>(__first, ++__m, --__last, __comp); - return; - } - } - if (__len <= __limit) { - std::__selection_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - return; - } - // __len > __limit >= 3 - _RandomAccessIterator __m = __first + __len / 2; - _RandomAccessIterator __lm1 = __last; - unsigned __n_swaps = std::__sort3<_AlgPolicy, _Compare>(__first, __m, --__lm1, __comp); - // *__m is median - // partition [__first, __m) < *__m and *__m <= [__m, __last) - // (this inhibits tossing elements equivalent to __m around unnecessarily) - _RandomAccessIterator __i = __first; - _RandomAccessIterator __j = __lm1; - // j points beyond range to be tested, *__lm1 is known to be <= *__m - // The search going up is known to be guarded but the search coming down isn't. - // Prime the downward search with a guard. - if (!__comp(*__i, *__m)) // if *__first == *__m - { - // *__first == *__m, *__first doesn't go in first part - if (std::__nth_element_find_guard<_Compare>(__i, __j, __m, __comp)) { - _Ops::iter_swap(__i, __j); - ++__n_swaps; - } else { - // *__first == *__m, *__m <= all other elements - // Partition instead into [__first, __i) == *__first and *__first < [__i, __last) - ++__i; // __first + 1 - __j = __last; - if (!__comp(*__first, *--__j)) { // we need a guard if *__first == *(__last-1) - while (true) { - if (__i == __j) { - return; // [__first, __last) all equivalent elements - } else if (__comp(*__first, *__i)) { - _Ops::iter_swap(__i, __j); - ++__n_swaps; - ++__i; - break; - } - ++__i; - } - } - // [__first, __i) == *__first and *__first < [__j, __last) and __j == __last - 1 - if (__i == __j) { - return; - } - while (true) { - while (!__comp(*__first, *__i)) { - ++__i; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __i != __last, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __j != __first, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__j; - } while (__comp(*__first, *__j)); - if (__i >= __j) - break; - _Ops::iter_swap(__i, __j); - ++__n_swaps; - ++__i; - } - // [__first, __i) == *__first and *__first < [__i, __last) - // The first part is sorted, - if (__nth < __i) { - return; - } - // __nth_element the second part - // std::__nth_element<_Compare>(__i, __nth, __last, __comp); - __first = __i; - continue; - } - } - ++__i; - // j points beyond range to be tested, *__lm1 is known to be <= *__m - // if not yet partitioned... - if (__i < __j) { - // known that *(__i - 1) < *__m - while (true) { - // __m still guards upward moving __i - while (__comp(*__i, *__m)) { - ++__i; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __i != __last, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } - // It is now known that a guard exists for downward moving __j - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __j != __first, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__j; - } while (!__comp(*__j, *__m)); - if (__i >= __j) - break; - _Ops::iter_swap(__i, __j); - ++__n_swaps; - // It is known that __m != __j - // If __m just moved, follow it - if (__m == __i) - __m = __j; - ++__i; - } - } - // [__first, __i) < *__m and *__m <= [__i, __last) - if (__i != __m && __comp(*__m, *__i)) { - _Ops::iter_swap(__i, __m); - ++__n_swaps; - } - // [__first, __i) < *__i and *__i <= [__i+1, __last) - if (__nth == __i) - return; - if (__n_swaps == 0) { - // We were given a perfectly partitioned sequence. Coincidence? - if (__nth < __i) { - // Check for [__first, __i) already sorted - __j = __m = __first; - while (true) { - if (++__j == __i) { - // [__first, __i) sorted - return; - } - if (__comp(*__j, *__m)) { - // not yet sorted, so sort - break; - } - __m = __j; - } - } else { - // Check for [__i, __last) already sorted - __j = __m = __i; - while (true) { - if (++__j == __last) { - // [__i, __last) sorted - return; - } - if (__comp(*__j, *__m)) { - // not yet sorted, so sort - break; - } - __m = __j; - } - } - } - // __nth_element on range containing __nth - if (__nth < __i) { - // std::__nth_element<_Compare>(__first, __nth, __i, __comp); - __last = __i; - } else { - // std::__nth_element<_Compare>(__i+1, __nth, __last, __comp); - __first = ++__i; - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void __nth_element_impl( - _RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare& __comp) { - if (__nth == __last) - return; - - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - std::__nth_element<_AlgPolicy, __comp_ref_type<_Compare> >(__first, __nth, __last, __comp); - - std::__debug_randomize_range<_AlgPolicy>(__first, __nth); - if (__nth != __last) { - std::__debug_randomize_range<_AlgPolicy>(++__nth, __last); - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last, _Compare __comp) { - std::__nth_element_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__nth), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth, _RandomAccessIterator __last) { - std::nth_element(std::move(__first), std::move(__nth), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_NTH_ELEMENT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort.h deleted file mode 100644 index 56cb9e0..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort.h +++ /dev/null @@ -1,91 +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___CXX03___ALGORITHM_PARTIAL_SORT_H -#define _LIBCPP___CXX03___ALGORITHM_PARTIAL_SORT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/make_heap.h> -#include <__cxx03/__algorithm/sift_down.h> -#include <__cxx03/__algorithm/sort_heap.h> -#include <__cxx03/__config> -#include <__cxx03/__debug_utils/randomize_range.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator __partial_sort_impl( - _RandomAccessIterator __first, _RandomAccessIterator __middle, _Sentinel __last, _Compare&& __comp) { - if (__first == __middle) { - return _IterOps<_AlgPolicy>::next(__middle, __last); - } - - std::__make_heap<_AlgPolicy>(__first, __middle, __comp); - - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __middle - __first; - _RandomAccessIterator __i = __middle; - for (; __i != __last; ++__i) { - if (__comp(*__i, *__first)) { - _IterOps<_AlgPolicy>::iter_swap(__i, __first); - std::__sift_down<_AlgPolicy>(__first, __comp, __len, __first); - } - } - std::__sort_heap<_AlgPolicy>(std::move(__first), std::move(__middle), __comp); - - return __i; -} - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _Sentinel __last, _Compare& __comp) { - if (__first == __middle) - return _IterOps<_AlgPolicy>::next(__middle, __last); - - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - auto __last_iter = - std::__partial_sort_impl<_AlgPolicy>(__first, __middle, __last, static_cast<__comp_ref_type<_Compare> >(__comp)); - - std::__debug_randomize_range<_AlgPolicy>(__middle, __last); - - return __last_iter; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void partial_sort( - _RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - (void)std::__partial_sort<_ClassicAlgPolicy>(std::move(__first), std::move(__middle), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last) { - std::partial_sort(__first, __middle, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_PARTIAL_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort_copy.h deleted file mode 100644 index e0846dc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partial_sort_copy.h +++ /dev/null @@ -1,106 +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___CXX03___ALGORITHM_PARTIAL_SORT_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_PARTIAL_SORT_COPY_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/make_heap.h> -#include <__cxx03/__algorithm/make_projected.h> -#include <__cxx03/__algorithm/sift_down.h> -#include <__cxx03/__algorithm/sort_heap.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_InputIterator, _RandomAccessIterator> __partial_sort_copy( - _InputIterator __first, - _Sentinel1 __last, - _RandomAccessIterator __result_first, - _Sentinel2 __result_last, - _Compare&& __comp, - _Proj1&& __proj1, - _Proj2&& __proj2) { - _RandomAccessIterator __r = __result_first; - auto&& __projected_comp = std::__make_projected(__comp, __proj2); - - if (__r != __result_last) { - for (; __first != __last && __r != __result_last; ++__first, (void)++__r) - *__r = *__first; - std::__make_heap<_AlgPolicy>(__result_first, __r, __projected_comp); - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __r - __result_first; - for (; __first != __last; ++__first) - if (std::__invoke(__comp, std::__invoke(__proj1, *__first), std::__invoke(__proj2, *__result_first))) { - *__result_first = *__first; - std::__sift_down<_AlgPolicy>(__result_first, __projected_comp, __len, __result_first); - } - std::__sort_heap<_AlgPolicy>(__result_first, __r, __projected_comp); - } - - return pair<_InputIterator, _RandomAccessIterator>( - _IterOps<_AlgPolicy>::next(std::move(__first), std::move(__last)), std::move(__r)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator partial_sort_copy( - _InputIterator __first, - _InputIterator __last, - _RandomAccessIterator __result_first, - _RandomAccessIterator __result_last, - _Compare __comp) { - static_assert( - __is_callable<_Compare, decltype(*__first), decltype(*__result_first)>::value, "Comparator has to be callable"); - - auto __result = std::__partial_sort_copy<_ClassicAlgPolicy>( - __first, - __last, - __result_first, - __result_last, - static_cast<__comp_ref_type<_Compare> >(__comp), - __identity(), - __identity()); - return __result.second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator partial_sort_copy( - _InputIterator __first, - _InputIterator __last, - _RandomAccessIterator __result_first, - _RandomAccessIterator __result_last) { - return std::partial_sort_copy(__first, __last, __result_first, __result_last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_PARTIAL_SORT_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition.h deleted file mode 100644 index 47fe62f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition.h +++ /dev/null @@ -1,90 +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___CXX03___ALGORITHM_PARTITION_H -#define _LIBCPP___CXX03___ALGORITHM_PARTITION_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -__partition_impl(_ForwardIterator __first, _Sentinel __last, _Predicate __pred, forward_iterator_tag) { - while (true) { - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__first)); - if (!__pred(*__first)) - break; - ++__first; - } - - _ForwardIterator __p = __first; - while (++__p != __last) { - if (__pred(*__p)) { - _IterOps<_AlgPolicy>::iter_swap(__first, __p); - ++__first; - } - } - return std::make_pair(std::move(__first), std::move(__p)); -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator, _BidirectionalIterator> -__partition_impl(_BidirectionalIterator __first, _Sentinel __sentinel, _Predicate __pred, bidirectional_iterator_tag) { - _BidirectionalIterator __original_last = _IterOps<_AlgPolicy>::next(__first, __sentinel); - _BidirectionalIterator __last = __original_last; - - while (true) { - while (true) { - if (__first == __last) - return std::make_pair(std::move(__first), std::move(__original_last)); - if (!__pred(*__first)) - break; - ++__first; - } - do { - if (__first == --__last) - return std::make_pair(std::move(__first), std::move(__original_last)); - } while (!__pred(*__last)); - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - ++__first; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _ForwardIterator> -__partition(_ForwardIterator __first, _Sentinel __last, _Predicate&& __pred, _IterCategory __iter_category) { - return std::__partition_impl<__remove_cvref_t<_Predicate>&, _AlgPolicy>( - std::move(__first), std::move(__last), __pred, __iter_category); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - using _IterCategory = typename iterator_traits<_ForwardIterator>::iterator_category; - auto __result = std::__partition<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __pred, _IterCategory()); - return __result.first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_copy.h deleted file mode 100644 index 3781233..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_copy.h +++ /dev/null @@ -1,43 +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___CXX03___ALGORITHM_PARTITION_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_PARTITION_COPY_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_OutputIterator1, _OutputIterator2> partition_copy( - _InputIterator __first, - _InputIterator __last, - _OutputIterator1 __out_true, - _OutputIterator2 __out_false, - _Predicate __pred) { - for (; __first != __last; ++__first) { - if (__pred(*__first)) { - *__out_true = *__first; - ++__out_true; - } else { - *__out_false = *__first; - ++__out_false; - } - } - return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_PARTITION_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_point.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_point.h deleted file mode 100644 index 8dc6aea..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/partition_point.h +++ /dev/null @@ -1,44 +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___CXX03___ALGORITHM_PARTITION_POINT_H -#define _LIBCPP___CXX03___ALGORITHM_PARTITION_POINT_H - -#include <__cxx03/__algorithm/half_positive.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator -partition_point(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type; - difference_type __len = std::distance(__first, __last); - while (__len != 0) { - difference_type __l2 = std::__half_positive(__len); - _ForwardIterator __m = __first; - std::advance(__m, __l2); - if (__pred(*__m)) { - __first = ++__m; - __len -= __l2 + 1; - } else - __len = __l2; - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_PARTITION_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/pop_heap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/pop_heap.h deleted file mode 100644 index ed0d1f1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/pop_heap.h +++ /dev/null @@ -1,80 +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___CXX03___ALGORITHM_POP_HEAP_H -#define _LIBCPP___CXX03___ALGORITHM_POP_HEAP_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/push_heap.h> -#include <__cxx03/__algorithm/sift_down.h> -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -__pop_heap(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - // Calling `pop_heap` on an empty range is undefined behavior, but in practice it will be a no-op. - _LIBCPP_ASSERT_PEDANTIC(__len > 0, "The heap given to pop_heap must be non-empty"); - - __comp_ref_type<_Compare> __comp_ref = __comp; - - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - if (__len > 1) { - value_type __top = _IterOps<_AlgPolicy>::__iter_move(__first); // create a hole at __first - _RandomAccessIterator __hole = std::__floyd_sift_down<_AlgPolicy>(__first, __comp_ref, __len); - --__last; - - if (__hole == __last) { - *__hole = std::move(__top); - } else { - *__hole = _IterOps<_AlgPolicy>::__iter_move(__last); - ++__hole; - *__last = std::move(__top); - std::__sift_up<_AlgPolicy>(__first, __hole, __comp_ref, __hole - __first); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __last - __first; - std::__pop_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp, __len); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::pop_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_POP_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/prev_permutation.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/prev_permutation.h deleted file mode 100644 index a617377..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/prev_permutation.h +++ /dev/null @@ -1,74 +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___CXX03___ALGORITHM_PREV_PERMUTATION_H -#define _LIBCPP___CXX03___ALGORITHM_PREV_PERMUTATION_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/reverse.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_BidirectionalIterator, bool> -__prev_permutation(_BidirectionalIterator __first, _Sentinel __last, _Compare&& __comp) { - using _Result = pair<_BidirectionalIterator, bool>; - - _BidirectionalIterator __last_iter = _IterOps<_AlgPolicy>::next(__first, __last); - _BidirectionalIterator __i = __last_iter; - if (__first == __last || __first == --__i) - return _Result(std::move(__last_iter), false); - - while (true) { - _BidirectionalIterator __ip1 = __i; - if (__comp(*__ip1, *--__i)) { - _BidirectionalIterator __j = __last_iter; - while (!__comp(*--__j, *__i)) - ; - _IterOps<_AlgPolicy>::iter_swap(__i, __j); - std::__reverse<_AlgPolicy>(__ip1, __last_iter); - return _Result(std::move(__last_iter), true); - } - if (__i == __first) { - std::__reverse<_AlgPolicy>(__first, __last_iter); - return _Result(std::move(__last_iter), false); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool -prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - return std::__prev_permutation<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), static_cast<__comp_ref_type<_Compare> >(__comp)) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool prev_permutation(_BidirectionalIterator __first, _BidirectionalIterator __last) { - return std::prev_permutation(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_PREV_PERMUTATION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/push_heap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/push_heap.h deleted file mode 100644 index eb4dc36..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/push_heap.h +++ /dev/null @@ -1,83 +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___CXX03___ALGORITHM_PUSH_HEAP_H -#define _LIBCPP___CXX03___ALGORITHM_PUSH_HEAP_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void -__sift_up(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare&& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - - if (__len > 1) { - __len = (__len - 2) / 2; - _RandomAccessIterator __ptr = __first + __len; - - if (__comp(*__ptr, *--__last)) { - value_type __t(_IterOps<_AlgPolicy>::__iter_move(__last)); - do { - *__last = _IterOps<_AlgPolicy>::__iter_move(__ptr); - __last = __ptr; - if (__len == 0) - break; - __len = (__len - 1) / 2; - __ptr = __first + __len; - } while (__comp(*__ptr, __t)); - - *__last = std::move(__t); - } - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -__push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) { - typename iterator_traits<_RandomAccessIterator>::difference_type __len = __last - __first; - std::__sift_up<_AlgPolicy, __comp_ref_type<_Compare> >(std::move(__first), std::move(__last), __comp, __len); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - std::__push_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::push_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_PUSH_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove.h deleted file mode 100644 index c5dc7aa..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove.h +++ /dev/null @@ -1,46 +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___CXX03___ALGORITHM_REMOVE_H -#define _LIBCPP___CXX03___ALGORITHM_REMOVE_H - -#include <__cxx03/__algorithm/find.h> -#include <__cxx03/__algorithm/find_if.h> -#include <__cxx03/__config> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _ForwardIterator -remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - __first = std::find(__first, __last, __value); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (!(*__i == __value)) { - *__first = std::move(*__i); - ++__first; - } - } - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_REMOVE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy.h deleted file mode 100644 index 7360f53..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy.h +++ /dev/null @@ -1,34 +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___CXX03___ALGORITHM_REMOVE_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_REMOVE_COPY_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -remove_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, const _Tp& __value) { - for (; __first != __last; ++__first) { - if (!(*__first == __value)) { - *__result = *__first; - ++__result; - } - } - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REMOVE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy_if.h deleted file mode 100644 index 5993738..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_copy_if.h +++ /dev/null @@ -1,34 +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___CXX03___ALGORITHM_REMOVE_COPY_IF_H -#define _LIBCPP___CXX03___ALGORITHM_REMOVE_COPY_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -remove_copy_if(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _Predicate __pred) { - for (; __first != __last; ++__first) { - if (!__pred(*__first)) { - *__result = *__first; - ++__result; - } - } - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REMOVE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_if.h deleted file mode 100644 index c740f45..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/remove_if.h +++ /dev/null @@ -1,45 +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___CXX03___ALGORITHM_REMOVE_IF_H -#define _LIBCPP___CXX03___ALGORITHM_REMOVE_IF_H - -#include <__cxx03/__algorithm/find_if.h> -#include <__cxx03/__config> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _ForwardIterator -remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - __first = std::find_if<_ForwardIterator, _Predicate&>(__first, __last, __pred); - if (__first != __last) { - _ForwardIterator __i = __first; - while (++__i != __last) { - if (!__pred(*__i)) { - *__first = std::move(*__i); - ++__first; - } - } - } - return __first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_REMOVE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace.h deleted file mode 100644 index 975bc5f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace.h +++ /dev/null @@ -1,30 +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___CXX03___ALGORITHM_REPLACE_H -#define _LIBCPP___CXX03___ALGORITHM_REPLACE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -replace(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value, const _Tp& __new_value) { - for (; __first != __last; ++__first) - if (*__first == __old_value) - *__first = __new_value; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REPLACE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy.h deleted file mode 100644 index 6e786c3..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy.h +++ /dev/null @@ -1,37 +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___CXX03___ALGORITHM_REPLACE_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_REPLACE_COPY_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator replace_copy( - _InputIterator __first, - _InputIterator __last, - _OutputIterator __result, - const _Tp& __old_value, - const _Tp& __new_value) { - for (; __first != __last; ++__first, (void)++__result) - if (*__first == __old_value) - *__result = __new_value; - else - *__result = *__first; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REPLACE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy_if.h deleted file mode 100644 index 43bbcc0..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_copy_if.h +++ /dev/null @@ -1,37 +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___CXX03___ALGORITHM_REPLACE_COPY_IF_H -#define _LIBCPP___CXX03___ALGORITHM_REPLACE_COPY_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator replace_copy_if( - _InputIterator __first, - _InputIterator __last, - _OutputIterator __result, - _Predicate __pred, - const _Tp& __new_value) { - for (; __first != __last; ++__first, (void)++__result) - if (__pred(*__first)) - *__result = __new_value; - else - *__result = *__first; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REPLACE_COPY_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_if.h deleted file mode 100644 index 5816b24..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/replace_if.h +++ /dev/null @@ -1,30 +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___CXX03___ALGORITHM_REPLACE_IF_H -#define _LIBCPP___CXX03___ALGORITHM_REPLACE_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -replace_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred, const _Tp& __new_value) { - for (; __first != __last; ++__first) - if (__pred(*__first)) - *__first = __new_value; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REPLACE_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse.h deleted file mode 100644 index d5298fc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse.h +++ /dev/null @@ -1,61 +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___CXX03___ALGORITHM_REVERSE_H -#define _LIBCPP___CXX03___ALGORITHM_REVERSE_H - -#include <__cxx03/__algorithm/iter_swap.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -__reverse_impl(_BidirectionalIterator __first, _BidirectionalIterator __last, bidirectional_iterator_tag) { - while (__first != __last) { - if (__first == --__last) - break; - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - ++__first; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -__reverse_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag) { - if (__first != __last) - for (; __first < --__last; ++__first) - _IterOps<_AlgPolicy>::iter_swap(__first, __last); -} - -template -_LIBCPP_HIDE_FROM_ABI void __reverse(_BidirectionalIterator __first, _Sentinel __last) { - using _IterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_BidirectionalIterator>; - std::__reverse_impl<_AlgPolicy>(std::move(__first), std::move(__last), _IterCategory()); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) { - std::__reverse<_ClassicAlgPolicy>(std::move(__first), std::move(__last)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_REVERSE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse_copy.h deleted file mode 100644 index a667e8a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/reverse_copy.h +++ /dev/null @@ -1,30 +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___CXX03___ALGORITHM_REVERSE_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_REVERSE_COPY_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last, _OutputIterator __result) { - for (; __first != __last; ++__result) - *__result = *--__last; - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_REVERSE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate.h deleted file mode 100644 index 8e5c10a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate.h +++ /dev/null @@ -1,196 +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___CXX03___ALGORITHM_ROTATE_H -#define _LIBCPP___CXX03___ALGORITHM_ROTATE_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/move.h> -#include <__cxx03/__algorithm/move_backward.h> -#include <__cxx03/__algorithm/swap_ranges.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_trivially_assignable.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator __rotate_left(_ForwardIterator __first, _ForwardIterator __last) { - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - using _Ops = _IterOps<_AlgPolicy>; - - value_type __tmp = _Ops::__iter_move(__first); - _ForwardIterator __lm1 = std::__move<_AlgPolicy>(_Ops::next(__first), __last, __first).second; - *__lm1 = std::move(__tmp); - return __lm1; -} - -template -_LIBCPP_HIDE_FROM_ABI _BidirectionalIterator -__rotate_right(_BidirectionalIterator __first, _BidirectionalIterator __last) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - using _Ops = _IterOps<_AlgPolicy>; - - _BidirectionalIterator __lm1 = _Ops::prev(__last); - value_type __tmp = _Ops::__iter_move(__lm1); - _BidirectionalIterator __fp1 = std::__move_backward<_AlgPolicy>(__first, __lm1, std::move(__last)).second; - *__first = std::move(__tmp); - return __fp1; -} - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator -__rotate_forward(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) { - _ForwardIterator __i = __middle; - while (true) { - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - ++__first; - if (++__i == __last) - break; - if (__first == __middle) - __middle = __i; - } - _ForwardIterator __r = __first; - if (__first != __middle) { - __i = __middle; - while (true) { - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - ++__first; - if (++__i == __last) { - if (__first == __middle) - break; - __i = __middle; - } else if (__first == __middle) - __middle = __i; - } - } - return __r; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _Integral __algo_gcd(_Integral __x, _Integral __y) { - do { - _Integral __t = __x % __y; - __x = __y; - __y = __t; - } while (__y); - return __x; -} - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__rotate_gcd(_RandomAccessIterator __first, _RandomAccessIterator __middle, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - using _Ops = _IterOps<_AlgPolicy>; - - const difference_type __m1 = __middle - __first; - const difference_type __m2 = _Ops::distance(__middle, __last); - if (__m1 == __m2) { - std::__swap_ranges<_AlgPolicy>(__first, __middle, __middle, __last); - return __middle; - } - const difference_type __g = std::__algo_gcd(__m1, __m2); - for (_RandomAccessIterator __p = __first + __g; __p != __first;) { - value_type __t(_Ops::__iter_move(--__p)); - _RandomAccessIterator __p1 = __p; - _RandomAccessIterator __p2 = __p1 + __m1; - do { - *__p1 = _Ops::__iter_move(__p2); - __p1 = __p2; - const difference_type __d = _Ops::distance(__p2, __last); - if (__m1 < __d) - __p2 += __m1; - else - __p2 = __first + (__m1 - __d); - } while (__p2 != __p); - *__p1 = std::move(__t); - } - return __first + __m2; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -__rotate_impl(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last, std::forward_iterator_tag) { - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _BidirectionalIterator __rotate_impl( - _BidirectionalIterator __first, - _BidirectionalIterator __middle, - _BidirectionalIterator __last, - bidirectional_iterator_tag) { - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - if (_IterOps<_AlgPolicy>::next(__middle) == __last) - return std::__rotate_right<_AlgPolicy>(__first, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _RandomAccessIterator __rotate_impl( - _RandomAccessIterator __first, - _RandomAccessIterator __middle, - _RandomAccessIterator __last, - random_access_iterator_tag) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - if (is_trivially_move_assignable::value) { - if (_IterOps<_AlgPolicy>::next(__first) == __middle) - return std::__rotate_left<_AlgPolicy>(__first, __last); - if (_IterOps<_AlgPolicy>::next(__middle) == __last) - return std::__rotate_right<_AlgPolicy>(__first, __last); - return std::__rotate_gcd<_AlgPolicy>(__first, __middle, __last); - } - return std::__rotate_forward<_AlgPolicy>(__first, __middle, __last); -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iterator, _Iterator> __rotate(_Iterator __first, _Iterator __middle, _Sentinel __last) { - using _Ret = pair<_Iterator, _Iterator>; - _Iterator __last_iter = _IterOps<_AlgPolicy>::next(__middle, __last); - - if (__first == __middle) - return _Ret(__last_iter, __last_iter); - if (__middle == __last) - return _Ret(std::move(__first), std::move(__last_iter)); - - using _IterCategory = typename _IterOps<_AlgPolicy>::template __iterator_category<_Iterator>; - auto __result = std::__rotate_impl<_AlgPolicy>(std::move(__first), std::move(__middle), __last_iter, _IterCategory()); - - return _Ret(std::move(__result), std::move(__last_iter)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -rotate(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last) { - return std::__rotate<_ClassicAlgPolicy>(std::move(__first), std::move(__middle), std::move(__last)).first; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_ROTATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate_copy.h deleted file mode 100644 index 06e1fb4..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/rotate_copy.h +++ /dev/null @@ -1,29 +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___CXX03___ALGORITHM_ROTATE_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_ROTATE_COPY_H - -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -rotate_copy(_ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last, _OutputIterator __result) { - return std::copy(__first, __middle, std::copy(__middle, __last, __result)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_ROTATE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search.h deleted file mode 100644 index f3691de..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search.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___CXX03___ALGORITHM_SEARCH_H -#define _LIBCPP___CXX03___ALGORITHM_SEARCH_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter1> __search_forward_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - if (__first2 == __last2) - return std::make_pair(__first1, __first1); // Everything matches an empty sequence - while (true) { - // Find first element in sequence 1 that matchs *__first2, with a mininum of loop checks - while (true) { - if (__first1 == __last1) { // return __last1 if no element matches *__first2 - _IterOps<_AlgPolicy>::__advance_to(__first1, __last1); - return std::make_pair(__first1, __first1); - } - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - // *__first1 matches *__first2, now match elements after here - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) // If pattern exhausted, __first1 is the answer (works for 1 element pattern) - return std::make_pair(__first1, ++__m1); - if (++__m1 == __last1) { // Otherwise if source exhaused, pattern not found - return std::make_pair(__m1, __m1); - } - - // if there is a mismatch, restart with a new __first1 - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } // else there is a match, check next elements - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter1> __search_random_access_impl( - _Iter1 __first1, - _Sent1 __last1, - _Iter2 __first2, - _Sent2 __last2, - _Pred& __pred, - _Proj1& __proj1, - _Proj2& __proj2, - _DiffT1 __size1, - _DiffT2 __size2) { - const _Iter1 __s = __first1 + __size1 - _DiffT1(__size2 - 1); // Start of pattern match can't go beyond here - - while (true) { - while (true) { - if (__first1 == __s) { - _IterOps<_AlgPolicy>::__advance_to(__first1, __last1); - return std::make_pair(__first1, __first1); - } - if (std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2))) - break; - ++__first1; - } - - _Iter1 __m1 = __first1; - _Iter2 __m2 = __first2; - while (true) { - if (++__m2 == __last2) - return std::make_pair(__first1, __first1 + _DiffT1(__size2)); - ++__m1; // no need to check range on __m1 because __s guarantees we have enough source - if (!std::__invoke(__pred, std::__invoke(__proj1, *__m1), std::__invoke(__proj2, *__m2))) { - ++__first1; - break; - } - } - } -} - -template ::value && - __has_random_access_iterator_category<_Iter2>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter1> __search_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - auto __size2 = __last2 - __first2; - if (__size2 == 0) - return std::make_pair(__first1, __first1); - - auto __size1 = __last1 - __first1; - if (__size1 < __size2) { - return std::make_pair(__last1, __last1); - } - - return std::__search_random_access_impl<_ClassicAlgPolicy>( - __first1, __last1, __first2, __last2, __pred, __proj1, __proj2, __size1, __size2); -} - -template < - class _Iter1, - class _Sent1, - class _Iter2, - class _Sent2, - class _Pred, - class _Proj1, - class _Proj2, - __enable_if_t<__has_forward_iterator_category<_Iter1>::value && __has_forward_iterator_category<_Iter2>::value && - !(__has_random_access_iterator_category<_Iter1>::value && - __has_random_access_iterator_category<_Iter2>::value), - int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter1> __search_impl( - _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) { - return std::__search_forward_impl<_ClassicAlgPolicy>(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 -search(_ForwardIterator1 __first1, - _ForwardIterator1 __last1, - _ForwardIterator2 __first2, - _ForwardIterator2 __last2, - _BinaryPredicate __pred) { - static_assert(__is_callable<_BinaryPredicate, decltype(*__first1), decltype(*__first2)>::value, - "BinaryPredicate has to be callable"); - auto __proj = __identity(); - return std::__search_impl(__first1, __last1, __first2, __last2, __pred, __proj, __proj).first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator1 -search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) { - return std::search(__first1, __last1, __first2, __last2, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_SEARCH_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search_n.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search_n.h deleted file mode 100644 index 98328c6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/search_n.h +++ /dev/null @@ -1,153 +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___CXX03___ALGORITHM_SEARCH_N_H -#define _LIBCPP___CXX03___ALGORITHM_SEARCH_N_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_callable.h> -#include <__cxx03/__utility/convert_to_integral.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<_Iter, _Iter> __search_n_forward_impl( - _Iter __first, _Sent __last, _SizeT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - if (__count <= 0) - return std::make_pair(__first, __first); - while (true) { - // Find first element in sequence that matchs __value, with a mininum of loop checks - while (true) { - if (__first == __last) { // return __last if no element matches __value - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - if (std::__invoke(__pred, std::__invoke(__proj, *__first), __value)) - break; - ++__first; - } - // *__first matches __value, now match elements after here - _Iter __m = __first; - _SizeT __c(0); - while (true) { - if (++__c == __count) // If pattern exhausted, __first is the answer (works for 1 element pattern) - return std::make_pair(__first, ++__m); - if (++__m == __last) { // Otherwise if source exhaused, pattern not found - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - - // if there is a mismatch, restart with a new __first - if (!std::__invoke(__pred, std::__invoke(__proj, *__m), __value)) { - __first = __m; - ++__first; - break; - } // else there is a match, check next elements - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI std::pair<_Iter, _Iter> __search_n_random_access_impl( - _Iter __first, _Sent __last, _SizeT __count, const _Type& __value, _Pred& __pred, _Proj& __proj, _DiffT __size1) { - using difference_type = typename iterator_traits<_Iter>::difference_type; - if (__count == 0) - return std::make_pair(__first, __first); - if (__size1 < static_cast<_DiffT>(__count)) { - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - - const auto __s = __first + __size1 - difference_type(__count - 1); // Start of pattern match can't go beyond here - while (true) { - // Find first element in sequence that matchs __value, with a mininum of loop checks - while (true) { - if (__first >= __s) { // return __last if no element matches __value - _IterOps<_AlgPolicy>::__advance_to(__first, __last); - return std::make_pair(__first, __first); - } - if (std::__invoke(__pred, std::__invoke(__proj, *__first), __value)) - break; - ++__first; - } - // *__first matches __value_, now match elements after here - auto __m = __first; - _SizeT __c(0); - while (true) { - if (++__c == __count) // If pattern exhausted, __first is the answer (works for 1 element pattern) - return std::make_pair(__first, __first + _DiffT(__count)); - ++__m; // no need to check range on __m because __s guarantees we have enough source - - // if there is a mismatch, restart with a new __first - if (!std::__invoke(__pred, std::__invoke(__proj, *__m), __value)) { - __first = __m; - ++__first; - break; - } // else there is a match, check next elements - } - } -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_Iter, _Iter> -__search_n_impl(_Iter __first, _Sent __last, _DiffT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - return std::__search_n_random_access_impl<_ClassicAlgPolicy>( - __first, __last, __count, __value, __pred, __proj, __last - __first); -} - -template ::value && - !__has_random_access_iterator_category<_Iter1>::value, - int> = 0> -_LIBCPP_HIDE_FROM_ABI pair<_Iter1, _Iter1> -__search_n_impl(_Iter1 __first, _Sent1 __last, _DiffT __count, const _Type& __value, _Pred& __pred, _Proj& __proj) { - return std::__search_n_forward_impl<_ClassicAlgPolicy>(__first, __last, __count, __value, __pred, __proj); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator search_n( - _ForwardIterator __first, _ForwardIterator __last, _Size __count, const _Tp& __value, _BinaryPredicate __pred) { - static_assert( - __is_callable<_BinaryPredicate, decltype(*__first), const _Tp&>::value, "BinaryPredicate has to be callable"); - auto __proj = __identity(); - return std::__search_n_impl(__first, __last, std::__convert_to_integral(__count), __value, __pred, __proj).first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -search_n(_ForwardIterator __first, _ForwardIterator __last, _Size __count, const _Tp& __value) { - return std::search_n(__first, __last, std::__convert_to_integral(__count), __value, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_SEARCH_N_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_difference.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_difference.h deleted file mode 100644 index 943b458..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_difference.h +++ /dev/null @@ -1,77 +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___CXX03___ALGORITHM_SET_DIFFERENCE_H -#define _LIBCPP___CXX03___ALGORITHM_SET_DIFFERENCE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI pair<__remove_cvref_t<_InIter1>, __remove_cvref_t<_OutIter> > __set_difference( - _InIter1&& __first1, _Sent1&& __last1, _InIter2&& __first2, _Sent2&& __last2, _OutIter&& __result, _Comp&& __comp) { - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__first1; - ++__result; - } else if (__comp(*__first2, *__first1)) { - ++__first2; - } else { - ++__first1; - ++__first2; - } - } - return std::__copy<_AlgPolicy>(std::move(__first1), std::move(__last1), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator set_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_difference<_ClassicAlgPolicy, __comp_ref_type<_Compare> >( - __first1, __last1, __first2, __last2, __result, __comp) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator set_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::__set_difference<_ClassicAlgPolicy>(__first1, __last1, __first2, __last2, __result, __less<>()).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SET_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_intersection.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_intersection.h deleted file mode 100644 index d892dad..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_intersection.h +++ /dev/null @@ -1,211 +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___CXX03___ALGORITHM_SET_INTERSECTION_H -#define _LIBCPP___CXX03___ALGORITHM_SET_INTERSECTION_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/lower_bound.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/swap.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_intersection_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI __set_intersection_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -// Helper for __set_intersection() with one-sided binary search: populate result and advance input iterators if they -// are found to potentially contain the same value in two consecutive calls. This function is very intimately related to -// the way it is used and doesn't attempt to abstract that, it's not appropriate for general usage outside of its -// context. -template -_LIBCPP_HIDE_FROM_ABI void __set_intersection_add_output_if_equal( - bool __may_be_equal, - _InForwardIter1& __first1, - _InForwardIter2& __first2, - _OutIter& __result, - bool& __prev_may_be_equal) { - if (__may_be_equal && __prev_may_be_equal) { - *__result = *__first1; - ++__result; - ++__first1; - ++__first2; - __prev_may_be_equal = false; - } else { - __prev_may_be_equal = __may_be_equal; - } -} - -// With forward iterators we can make multiple passes over the data, allowing the use of one-sided binary search to -// reduce best-case complexity to log(N). Understanding how we can use binary search and still respect complexity -// guarantees is _not_ straightforward: the guarantee is "at most 2*(N+M)-1 comparisons", and one-sided binary search -// will necessarily overshoot depending on the position of the needle in the haystack -- for instance, if we're -// searching for 3 in (1, 2, 3, 4), we'll check if 3<1, then 3<2, then 3<4, and, finally, 3<3, for a total of 4 -// comparisons, when linear search would have yielded 3. However, because we won't need to perform the intervening -// reciprocal comparisons (ie 1<3, 2<3, 4<3), that extra comparison doesn't run afoul of the guarantee. Additionally, -// this type of scenario can only happen for match distances of up to 5 elements, because 2*log2(8) is 6, and we'll -// still be worse-off at position 5 of an 8-element set. From then onwards these scenarios can't happen. TL;DR: we'll be -// 1 comparison worse-off compared to the classic linear-searching algorithm if matching position 3 of a set with 4 -// elements, or position 5 if the set has 7 or 8 elements, but we'll never exceed the complexity guarantees from the -// standard. -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI __set_intersection_result<_InForwardIter1, _InForwardIter2, _OutIter> -__set_intersection( - _InForwardIter1 __first1, - _Sent1 __last1, - _InForwardIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Compare&& __comp, - std::forward_iterator_tag, - std::forward_iterator_tag) { - std::__identity __proj; - bool __prev_may_be_equal = false; - - while (__first2 != __last2) { - _InForwardIter1 __first1_next = - std::__lower_bound_onesided<_AlgPolicy>(__first1, __last1, *__first2, __comp, __proj); - std::swap(__first1_next, __first1); - // keeping in mind that a==b iff !(a(__first2, __last2, *__first1, __comp, __proj); - std::swap(__first2_next, __first2); - std::__set_intersection_add_output_if_equal( - __first2 == __first2_next, __first1, __first2, __result, __prev_may_be_equal); - } - return __set_intersection_result<_InForwardIter1, _InForwardIter2, _OutIter>( - _IterOps<_AlgPolicy>::next(std::move(__first1), std::move(__last1)), - _IterOps<_AlgPolicy>::next(std::move(__first2), std::move(__last2)), - std::move(__result)); -} - -// input iterators are not suitable for multipass algorithms, so we stick to the classic single-pass version -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI __set_intersection_result<_InInputIter1, _InInputIter2, _OutIter> -__set_intersection( - _InInputIter1 __first1, - _Sent1 __last1, - _InInputIter2 __first2, - _Sent2 __last2, - _OutIter __result, - _Compare&& __comp, - std::input_iterator_tag, - std::input_iterator_tag) { - while (__first1 != __last1 && __first2 != __last2) { - if (__comp(*__first1, *__first2)) - ++__first1; - else { - if (!__comp(*__first2, *__first1)) { - *__result = *__first1; - ++__result; - ++__first1; - } - ++__first2; - } - } - - return __set_intersection_result<_InInputIter1, _InInputIter2, _OutIter>( - _IterOps<_AlgPolicy>::next(std::move(__first1), std::move(__last1)), - _IterOps<_AlgPolicy>::next(std::move(__first2), std::move(__last2)), - std::move(__result)); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI __set_intersection_result<_InIter1, _InIter2, _OutIter> __set_intersection( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - return std::__set_intersection<_AlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - std::forward<_Compare>(__comp), - typename std::_IterOps<_AlgPolicy>::template __iterator_category<_InIter1>(), - typename std::_IterOps<_AlgPolicy>::template __iterator_category<_InIter2>()); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator set_intersection( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_intersection<_ClassicAlgPolicy, __comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator set_intersection( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::__set_intersection<_ClassicAlgPolicy>( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()) - .__out_; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SET_INTERSECTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_symmetric_difference.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_symmetric_difference.h deleted file mode 100644 index 82a1c46..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_symmetric_difference.h +++ /dev/null @@ -1,108 +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___CXX03___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H -#define _LIBCPP___CXX03___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_symmetric_difference_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI - __set_symmetric_difference_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -template -_LIBCPP_HIDE_FROM_ABI __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter> __set_symmetric_difference( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - while (__first1 != __last1) { - if (__first2 == __last2) { - auto __ret1 = std::__copy<_AlgPolicy>(std::move(__first1), std::move(__last1), std::move(__result)); - return __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( - std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); - } - if (__comp(*__first1, *__first2)) { - *__result = *__first1; - ++__result; - ++__first1; - } else { - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__result; - } else { - ++__first1; - } - ++__first2; - } - } - auto __ret2 = std::__copy<_AlgPolicy>(std::move(__first2), std::move(__last2), std::move(__result)); - return __set_symmetric_difference_result<_InIter1, _InIter2, _OutIter>( - std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); -} - -template -_LIBCPP_HIDE_FROM_ABI _OutputIterator set_symmetric_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_symmetric_difference<_ClassicAlgPolicy, __comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -_LIBCPP_HIDE_FROM_ABI _OutputIterator set_symmetric_difference( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::set_symmetric_difference( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SET_SYMMETRIC_DIFFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_union.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_union.h deleted file mode 100644 index 3effd78..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/set_union.h +++ /dev/null @@ -1,104 +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___CXX03___ALGORITHM_SET_UNION_H -#define _LIBCPP___CXX03___ALGORITHM_SET_UNION_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/copy.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __set_union_result { - _InIter1 __in1_; - _InIter2 __in2_; - _OutIter __out_; - - // need a constructor as C++03 aggregate init is hard - _LIBCPP_HIDE_FROM_ABI __set_union_result(_InIter1&& __in_iter1, _InIter2&& __in_iter2, _OutIter&& __out_iter) - : __in1_(std::move(__in_iter1)), __in2_(std::move(__in_iter2)), __out_(std::move(__out_iter)) {} -}; - -template -_LIBCPP_HIDE_FROM_ABI __set_union_result<_InIter1, _InIter2, _OutIter> __set_union( - _InIter1 __first1, _Sent1 __last1, _InIter2 __first2, _Sent2 __last2, _OutIter __result, _Compare&& __comp) { - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - auto __ret1 = std::__copy<_AlgPolicy>(std::move(__first1), std::move(__last1), std::move(__result)); - return __set_union_result<_InIter1, _InIter2, _OutIter>( - std::move(__ret1.first), std::move(__first2), std::move((__ret1.second))); - } - if (__comp(*__first2, *__first1)) { - *__result = *__first2; - ++__first2; - } else { - if (!__comp(*__first1, *__first2)) { - ++__first2; - } - *__result = *__first1; - ++__first1; - } - } - auto __ret2 = std::__copy<_AlgPolicy>(std::move(__first2), std::move(__last2), std::move(__result)); - return __set_union_result<_InIter1, _InIter2, _OutIter>( - std::move(__first1), std::move(__ret2.first), std::move((__ret2.second))); -} - -template -_LIBCPP_HIDE_FROM_ABI _OutputIterator set_union( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - return std::__set_union<_ClassicAlgPolicy, __comp_ref_type<_Compare> >( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __comp) - .__out_; -} - -template -_LIBCPP_HIDE_FROM_ABI _OutputIterator set_union( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result) { - return std::set_union( - std::move(__first1), - std::move(__last1), - std::move(__first2), - std::move(__last2), - std::move(__result), - __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SET_UNION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/shuffle.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/shuffle.h deleted file mode 100644 index 24cd71c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/shuffle.h +++ /dev/null @@ -1,157 +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___CXX03___ALGORITHM_SHUFFLE_H -#define _LIBCPP___CXX03___ALGORITHM_SHUFFLE_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__random/uniform_int_distribution.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/swap.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -class _LIBCPP_EXPORTED_FROM_ABI __libcpp_debug_randomizer { -public: - _LIBCPP_HIDE_FROM_ABI __libcpp_debug_randomizer() { - __state_ = __seed(); - __inc_ = __state_ + 0xda3e39cb94b95bdbULL; - __inc_ = (__inc_ << 1) | 1; - } - typedef uint_fast32_t result_type; - - static const result_type _Min = 0; - static const result_type _Max = 0xFFFFFFFF; - - _LIBCPP_HIDE_FROM_ABI result_type operator()() { - uint_fast64_t __oldstate = __state_; - __state_ = __oldstate * 6364136223846793005ULL + __inc_; - return __oldstate >> 32; - } - - static _LIBCPP_HIDE_FROM_ABI result_type min() { return _Min; } - static _LIBCPP_HIDE_FROM_ABI result_type max() { return _Max; } - -private: - uint_fast64_t __state_; - uint_fast64_t __inc_; - _LIBCPP_HIDE_FROM_ABI static uint_fast64_t __seed() { -#ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED - return _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY_SEED; -#else - static char __x; - return reinterpret_cast(&__x); -#endif - } -}; - -class _LIBCPP_EXPORTED_FROM_ABI __rs_default; - -_LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); - -class _LIBCPP_EXPORTED_FROM_ABI __rs_default { - static unsigned __c_; - - __rs_default(); - -public: - typedef uint_fast32_t result_type; - - static const result_type _Min = 0; - static const result_type _Max = 0xFFFFFFFF; - - __rs_default(const __rs_default&); - ~__rs_default(); - - result_type operator()(); - - static _LIBCPP_HIDE_FROM_ABI result_type min() { return _Min; } - static _LIBCPP_HIDE_FROM_ABI result_type max() { return _Max; } - - friend _LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); -}; - -_LIBCPP_EXPORTED_FROM_ABI __rs_default __rs_get(); - -template -_LIBCPP_HIDE_FROM_ABI void random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef uniform_int_distribution _Dp; - typedef typename _Dp::param_type _Pp; - difference_type __d = __last - __first; - if (__d > 1) { - _Dp __uid; - __rs_default __g = __rs_get(); - for (--__last, (void)--__d; __first < __last; ++__first, (void)--__d) { - difference_type __i = __uid(__g, _Pp(0, __d)); - if (__i != difference_type(0)) - swap(*__first, *(__first + __i)); - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI void -random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, _RandomNumberGenerator& __rand) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __d = __last - __first; - if (__d > 1) { - for (--__last; __first < __last; ++__first, (void)--__d) { - difference_type __i = __rand(__d); - if (__i != difference_type(0)) - swap(*__first, *(__first + __i)); - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__shuffle(_RandomAccessIterator __first, _Sentinel __last_sentinel, _UniformRandomNumberGenerator&& __g) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef uniform_int_distribution _Dp; - typedef typename _Dp::param_type _Pp; - - auto __original_last = _IterOps<_AlgPolicy>::next(__first, __last_sentinel); - auto __last = __original_last; - difference_type __d = __last - __first; - if (__d > 1) { - _Dp __uid; - for (--__last, (void)--__d; __first < __last; ++__first, (void)--__d) { - difference_type __i = __uid(__g, _Pp(0, __d)); - if (__i != difference_type(0)) - _IterOps<_AlgPolicy>::iter_swap(__first, __first + __i); - } - } - - return __original_last; -} - -template -_LIBCPP_HIDE_FROM_ABI void -shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last, _UniformRandomNumberGenerator&& __g) { - (void)std::__shuffle<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), std::forward<_UniformRandomNumberGenerator>(__g)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SHUFFLE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sift_down.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sift_down.h deleted file mode 100644 index d299b71..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sift_down.h +++ /dev/null @@ -1,118 +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___CXX03___ALGORITHM_SIFT_DOWN_H -#define _LIBCPP___CXX03___ALGORITHM_SIFT_DOWN_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void -__sift_down(_RandomAccessIterator __first, - _Compare&& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - _RandomAccessIterator __start) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - // left-child of __start is at 2 * __start + 1 - // right-child of __start is at 2 * __start + 2 - difference_type __child = __start - __first; - - if (__len < 2 || (__len - 2) / 2 < __child) - return; - - __child = 2 * __child + 1; - _RandomAccessIterator __child_i = __first + __child; - - if ((__child + 1) < __len && __comp(*__child_i, *(__child_i + difference_type(1)))) { - // right-child exists and is greater than left-child - ++__child_i; - ++__child; - } - - // check if we are in heap-order - if (__comp(*__child_i, *__start)) - // we are, __start is larger than its largest child - return; - - value_type __top(_Ops::__iter_move(__start)); - do { - // we are not in heap-order, swap the parent with its largest child - *__start = _Ops::__iter_move(__child_i); - __start = __child_i; - - if ((__len - 2) / 2 < __child) - break; - - // recompute the child based off of the updated parent - __child = 2 * __child + 1; - __child_i = __first + __child; - - if ((__child + 1) < __len && __comp(*__child_i, *(__child_i + difference_type(1)))) { - // right-child exists and is greater than left-child - ++__child_i; - ++__child; - } - - // check if we are in heap-order - } while (!__comp(*__child_i, __top)); - *__start = std::move(__top); -} - -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator __floyd_sift_down( - _RandomAccessIterator __first, - _Compare&& __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len) { - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - _LIBCPP_ASSERT_INTERNAL(__len >= 2, "shouldn't be called unless __len >= 2"); - - _RandomAccessIterator __hole = __first; - _RandomAccessIterator __child_i = __first; - difference_type __child = 0; - - while (true) { - __child_i += difference_type(__child + 1); - __child = 2 * __child + 1; - - if ((__child + 1) < __len && __comp(*__child_i, *(__child_i + difference_type(1)))) { - // right-child exists and is greater than left-child - ++__child_i; - ++__child; - } - - // swap __hole with its largest child - *__hole = _IterOps<_AlgPolicy>::__iter_move(__child_i); - __hole = __child_i; - - // if __hole is now a leaf, we're done - if (__child > (__len - 2) / 2) - return __hole; - } -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SIFT_DOWN_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/simd_utils.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/simd_utils.h deleted file mode 100644 index 7b0e825..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/simd_utils.h +++ /dev/null @@ -1,159 +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___CXX03___ALGORITHM_SIMD_UTILS_H -#define _LIBCPP___CXX03___ALGORITHM_SIMD_UTILS_H - -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__bit/countl.h> -#include <__cxx03/__bit/countr.h> -#include <__cxx03/__config> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/integer_sequence.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -// TODO: Find out how altivec changes things and allow vectorizations there too. -#define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0 - -#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS && !defined(__OPTIMIZE_SIZE__) -# define _LIBCPP_VECTORIZE_ALGORITHMS 1 -#else -# define _LIBCPP_VECTORIZE_ALGORITHMS 0 -#endif - -#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline constexpr bool __can_map_to_integer_v = - sizeof(_Tp) == alignof(_Tp) && (sizeof(_Tp) == 1 || sizeof(_Tp) == 2 || sizeof(_Tp) == 4 || sizeof(_Tp) == 8); - -template -struct __get_as_integer_type_impl; - -template <> -struct __get_as_integer_type_impl<1> { - using type = uint8_t; -}; - -template <> -struct __get_as_integer_type_impl<2> { - using type = uint16_t; -}; -template <> -struct __get_as_integer_type_impl<4> { - using type = uint32_t; -}; -template <> -struct __get_as_integer_type_impl<8> { - using type = uint64_t; -}; - -template -using __get_as_integer_type_t = typename __get_as_integer_type_impl::type; - -// This isn't specialized for 64 byte vectors on purpose. They have the potential to significantly reduce performance -// in mixed simd/non-simd workloads and don't provide any performance improvement for currently vectorized algorithms -// as far as benchmarks are concerned. -# if defined(__AVX__) || defined(__MVS__) -template -inline constexpr size_t __native_vector_size = 32 / sizeof(_Tp); -# elif defined(__SSE__) || defined(__ARM_NEON__) -template -inline constexpr size_t __native_vector_size = 16 / sizeof(_Tp); -# elif defined(__MMX__) -template -inline constexpr size_t __native_vector_size = 8 / sizeof(_Tp); -# else -template -inline constexpr size_t __native_vector_size = 1; -# endif - -template -using __simd_vector __attribute__((__ext_vector_type__(_Np))) = _ArithmeticT; - -template -inline constexpr size_t __simd_vector_size_v = []() -> size_t { - static_assert(_False, "Not a vector!"); -}(); - -template -inline constexpr size_t __simd_vector_size_v<__simd_vector<_Tp, _Np>> = _Np; - -template -_LIBCPP_HIDE_FROM_ABI _Tp __simd_vector_underlying_type_impl(__simd_vector<_Tp, _Np>) { - return _Tp{}; -} - -template -using __simd_vector_underlying_type_t = decltype(std::__simd_vector_underlying_type_impl(_VecT{})); - -// This isn't inlined without always_inline when loading chars. -template -_LIBCPP_NODISCARD _LIBCPP_ALWAYS_INLINE _LIBCPP_HIDE_FROM_ABI _VecT __load_vector(_Iter __iter) noexcept { - return [=](index_sequence<_Indices...>) _LIBCPP_ALWAYS_INLINE noexcept { - return _VecT{__iter[_Indices]...}; - }(make_index_sequence<__simd_vector_size_v<_VecT>>{}); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool __all_of(__simd_vector<_Tp, _Np> __vec) noexcept { - return __builtin_reduce_and(__builtin_convertvector(__vec, __simd_vector)); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_Tp, _Np> __vec) noexcept { - using __mask_vec = __simd_vector; - - // This has MSan disabled du to https://github.com/llvm/llvm-project/issues/85876 - auto __impl = [&](_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept { -# if defined(_LIBCPP_BIG_ENDIAN) - return std::min( - _Np, std::__countl_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); -# else - return std::min( - _Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); -# endif - }; - - if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) { - return __impl(uint8_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint16_t)) { - return __impl(uint16_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint32_t)) { - return __impl(uint32_t{}); - } else if constexpr (sizeof(__mask_vec) == sizeof(uint64_t)) { - return __impl(uint64_t{}); - } else { - static_assert(sizeof(__mask_vec) == 0, "unexpected required size for mask integer type"); - return 0; - } -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_not_set(__simd_vector<_Tp, _Np> __vec) noexcept { - return std::__find_first_set(~__vec); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SIMD_UTILS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort.h deleted file mode 100644 index 41df4d9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort.h +++ /dev/null @@ -1,989 +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___CXX03___ALGORITHM_SORT_H -#define _LIBCPP___CXX03___ALGORITHM_SORT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iter_swap.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/min_element.h> -#include <__cxx03/__algorithm/partial_sort.h> -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__assert> -#include <__cxx03/__bit/blsr.h> -#include <__cxx03/__bit/countl.h> -#include <__cxx03/__bit/countr.h> -#include <__cxx03/__config> -#include <__cxx03/__debug_utils/randomize_range.h> -#include <__cxx03/__debug_utils/strict_weak_ordering_check.h> -#include <__cxx03/__functional/operations.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/disjunction.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/climits> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// stable, 2-3 compares, 0-2 swaps - -template -_LIBCPP_HIDE_FROM_ABI unsigned __sort3(_ForwardIterator __x, _ForwardIterator __y, _ForwardIterator __z, _Compare __c) { - using _Ops = _IterOps<_AlgPolicy>; - - unsigned __r = 0; - if (!__c(*__y, *__x)) // if x <= y - { - if (!__c(*__z, *__y)) // if y <= z - return __r; // x <= y && y <= z - // x <= y && y > z - _Ops::iter_swap(__y, __z); // x <= z && y < z - __r = 1; - if (__c(*__y, *__x)) // if x > y - { - _Ops::iter_swap(__x, __y); // x < y && y <= z - __r = 2; - } - return __r; // x <= y && y < z - } - if (__c(*__z, *__y)) // x > y, if y > z - { - _Ops::iter_swap(__x, __z); // x < y && y < z - __r = 1; - return __r; - } - _Ops::iter_swap(__x, __y); // x > y && y <= z - __r = 1; // x < y && x <= z - if (__c(*__z, *__y)) // if y > z - { - _Ops::iter_swap(__y, __z); // x <= y && y < z - __r = 2; - } - return __r; -} // x <= y && y <= z - -// stable, 3-6 compares, 0-5 swaps - -template -_LIBCPP_HIDE_FROM_ABI void -__sort4(_ForwardIterator __x1, _ForwardIterator __x2, _ForwardIterator __x3, _ForwardIterator __x4, _Compare __c) { - using _Ops = _IterOps<_AlgPolicy>; - std::__sort3<_AlgPolicy, _Compare>(__x1, __x2, __x3, __c); - if (__c(*__x4, *__x3)) { - _Ops::iter_swap(__x3, __x4); - if (__c(*__x3, *__x2)) { - _Ops::iter_swap(__x2, __x3); - if (__c(*__x2, *__x1)) { - _Ops::iter_swap(__x1, __x2); - } - } - } -} - -// stable, 4-10 compares, 0-9 swaps - -template -_LIBCPP_HIDE_FROM_ABI void -__sort5(_ForwardIterator __x1, - _ForwardIterator __x2, - _ForwardIterator __x3, - _ForwardIterator __x4, - _ForwardIterator __x5, - _Comp __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - std::__sort4<_AlgPolicy, _Comp>(__x1, __x2, __x3, __x4, __comp); - if (__comp(*__x5, *__x4)) { - _Ops::iter_swap(__x4, __x5); - if (__comp(*__x4, *__x3)) { - _Ops::iter_swap(__x3, __x4); - if (__comp(*__x3, *__x2)) { - _Ops::iter_swap(__x2, __x3); - if (__comp(*__x2, *__x1)) { - _Ops::iter_swap(__x1, __x2); - } - } - } - } -} - -// The comparator being simple is a prerequisite for using the branchless optimization. -template -struct __is_simple_comparator : false_type {}; -template <> -struct __is_simple_comparator<__less<>&> : true_type {}; -template -struct __is_simple_comparator&> : true_type {}; -template -struct __is_simple_comparator&> : true_type {}; - -template ::value_type> -using __use_branchless_sort = - integral_constant::value && sizeof(_Tp) <= sizeof(void*) && - is_arithmetic<_Tp>::value && __is_simple_comparator<_Compare>::value>; - -namespace __detail { - -// Size in bits for the bitset in use. -enum { __block_size = sizeof(uint64_t) * 8 }; - -} // namespace __detail - -// Ensures that __c(*__x, *__y) is true by swapping *__x and *__y if necessary. -template -inline _LIBCPP_HIDE_FROM_ABI void __cond_swap(_RandomAccessIterator __x, _RandomAccessIterator __y, _Compare __c) { - // Note: this function behaves correctly even with proxy iterators (because it relies on `value_type`). - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - bool __r = __c(*__x, *__y); - value_type __tmp = __r ? *__x : *__y; - *__y = __r ? *__y : *__x; - *__x = __tmp; -} - -// Ensures that *__x, *__y and *__z are ordered according to the comparator __c, -// under the assumption that *__y and *__z are already ordered. -template -inline _LIBCPP_HIDE_FROM_ABI void -__partially_sorted_swap(_RandomAccessIterator __x, _RandomAccessIterator __y, _RandomAccessIterator __z, _Compare __c) { - // Note: this function behaves correctly even with proxy iterators (because it relies on `value_type`). - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - bool __r = __c(*__z, *__x); - value_type __tmp = __r ? *__z : *__x; - *__z = __r ? *__x : *__z; - __r = __c(__tmp, *__y); - *__x = __r ? *__x : *__y; - *__y = __r ? *__y : __tmp; -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort3_maybe_branchless( - _RandomAccessIterator __x1, _RandomAccessIterator __x2, _RandomAccessIterator __x3, _Compare __c) { - std::__cond_swap<_Compare>(__x2, __x3, __c); - std::__partially_sorted_swap<_Compare>(__x1, __x2, __x3, __c); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort3_maybe_branchless( - _RandomAccessIterator __x1, _RandomAccessIterator __x2, _RandomAccessIterator __x3, _Compare __c) { - std::__sort3<_AlgPolicy, _Compare>(__x1, __x2, __x3, __c); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort4_maybe_branchless( - _RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _Compare __c) { - std::__cond_swap<_Compare>(__x1, __x3, __c); - std::__cond_swap<_Compare>(__x2, __x4, __c); - std::__cond_swap<_Compare>(__x1, __x2, __c); - std::__cond_swap<_Compare>(__x3, __x4, __c); - std::__cond_swap<_Compare>(__x2, __x3, __c); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort4_maybe_branchless( - _RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _Compare __c) { - std::__sort4<_AlgPolicy, _Compare>(__x1, __x2, __x3, __x4, __c); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort5_maybe_branchless( - _RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _RandomAccessIterator __x5, - _Compare __c) { - std::__cond_swap<_Compare>(__x1, __x2, __c); - std::__cond_swap<_Compare>(__x4, __x5, __c); - std::__partially_sorted_swap<_Compare>(__x3, __x4, __x5, __c); - std::__cond_swap<_Compare>(__x2, __x5, __c); - std::__partially_sorted_swap<_Compare>(__x1, __x3, __x4, __c); - std::__partially_sorted_swap<_Compare>(__x2, __x3, __x4, __c); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void __sort5_maybe_branchless( - _RandomAccessIterator __x1, - _RandomAccessIterator __x2, - _RandomAccessIterator __x3, - _RandomAccessIterator __x4, - _RandomAccessIterator __x5, - _Compare __c) { - std::__sort5<_AlgPolicy, _Compare, _RandomAccessIterator>( - std::move(__x1), std::move(__x2), std::move(__x3), std::move(__x4), std::move(__x5), __c); -} - -// Assumes size > 0 -template -_LIBCPP_HIDE_FROM_ABI void -__selection_sort(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - _BidirectionalIterator __lm1 = __last; - for (--__lm1; __first != __lm1; ++__first) { - _BidirectionalIterator __i = std::__min_element<_Compare>(__first, __last, __comp); - if (__i != __first) - _IterOps<_AlgPolicy>::iter_swap(__first, __i); - } -} - -// Sort the iterator range [__first, __last) using the comparator __comp using -// the insertion sort algorithm. -template -_LIBCPP_HIDE_FROM_ABI void -__insertion_sort(_BidirectionalIterator __first, _BidirectionalIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (__first == __last) - return; - _BidirectionalIterator __i = __first; - for (++__i; __i != __last; ++__i) { - _BidirectionalIterator __j = __i; - --__j; - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _BidirectionalIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - } while (__j != __first && __comp(__t, *--__k)); - *__j = std::move(__t); - } - } -} - -// Sort the iterator range [__first, __last) using the comparator __comp using -// the insertion sort algorithm. Insertion sort has two loops, outer and inner. -// The implementation below has no bounds check (unguarded) for the inner loop. -// Assumes that there is an element in the position (__first - 1) and that each -// element in the input range is greater or equal to the element at __first - 1. -template -_LIBCPP_HIDE_FROM_ABI void -__insertion_sort_unguarded(_RandomAccessIterator const __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - if (__first == __last) - return; - const _RandomAccessIterator __leftmost = __first - difference_type(1); - (void)__leftmost; // can be unused when assertions are disabled - for (_RandomAccessIterator __i = __first + difference_type(1); __i != __last; ++__i) { - _RandomAccessIterator __j = __i - difference_type(1); - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _RandomAccessIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __k != __leftmost, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(__t, *--__k)); // No need for bounds check due to the assumption stated above. - *__j = std::move(__t); - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI bool -__insertion_sort_incomplete(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - switch (__last - __first) { - case 0: - case 1: - return true; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return true; - case 3: - std::__sort3_maybe_branchless<_AlgPolicy, _Comp>(__first, __first + difference_type(1), --__last, __comp); - return true; - case 4: - std::__sort4_maybe_branchless<_AlgPolicy, _Comp>( - __first, __first + difference_type(1), __first + difference_type(2), --__last, __comp); - return true; - case 5: - std::__sort5_maybe_branchless<_AlgPolicy, _Comp>( - __first, - __first + difference_type(1), - __first + difference_type(2), - __first + difference_type(3), - --__last, - __comp); - return true; - } - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - _RandomAccessIterator __j = __first + difference_type(2); - std::__sort3_maybe_branchless<_AlgPolicy, _Comp>(__first, __first + difference_type(1), __j, __comp); - const unsigned __limit = 8; - unsigned __count = 0; - for (_RandomAccessIterator __i = __j + difference_type(1); __i != __last; ++__i) { - if (__comp(*__i, *__j)) { - value_type __t(_Ops::__iter_move(__i)); - _RandomAccessIterator __k = __j; - __j = __i; - do { - *__j = _Ops::__iter_move(__k); - __j = __k; - } while (__j != __first && __comp(__t, *--__k)); - *__j = std::move(__t); - if (++__count == __limit) - return ++__i == __last; - } - __j = __i; - } - return true; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos( - _RandomAccessIterator __first, _RandomAccessIterator __last, uint64_t& __left_bitset, uint64_t& __right_bitset) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - // Swap one pair on each iteration as long as both bitsets have at least one - // element for swapping. - while (__left_bitset != 0 && __right_bitset != 0) { - difference_type __tz_left = __libcpp_ctz(__left_bitset); - __left_bitset = __libcpp_blsr(__left_bitset); - difference_type __tz_right = __libcpp_ctz(__right_bitset); - __right_bitset = __libcpp_blsr(__right_bitset); - _Ops::iter_swap(__first + __tz_left, __last - __tz_right); - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void -__populate_left_bitset(_RandomAccessIterator __first, _Compare __comp, _ValueType& __pivot, uint64_t& __left_bitset) { - // Possible vectorization. With a proper "-march" flag, the following loop - // will be compiled into a set of SIMD instructions. - _RandomAccessIterator __iter = __first; - for (int __j = 0; __j < __detail::__block_size;) { - bool __comp_result = !__comp(*__iter, __pivot); - __left_bitset |= (static_cast(__comp_result) << __j); - __j++; - ++__iter; - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void -__populate_right_bitset(_RandomAccessIterator __lm1, _Compare __comp, _ValueType& __pivot, uint64_t& __right_bitset) { - // Possible vectorization. With a proper "-march" flag, the following loop - // will be compiled into a set of SIMD instructions. - _RandomAccessIterator __iter = __lm1; - for (int __j = 0; __j < __detail::__block_size;) { - bool __comp_result = __comp(*__iter, __pivot); - __right_bitset |= (static_cast(__comp_result) << __j); - __j++; - --__iter; - } -} - -template ::value_type> -inline _LIBCPP_HIDE_FROM_ABI void __bitset_partition_partial_blocks( - _RandomAccessIterator& __first, - _RandomAccessIterator& __lm1, - _Compare __comp, - _ValueType& __pivot, - uint64_t& __left_bitset, - uint64_t& __right_bitset) { - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __remaining_len = __lm1 - __first + 1; - difference_type __l_size; - difference_type __r_size; - if (__left_bitset == 0 && __right_bitset == 0) { - __l_size = __remaining_len / 2; - __r_size = __remaining_len - __l_size; - } else if (__left_bitset == 0) { - // We know at least one side is a full block. - __l_size = __remaining_len - __detail::__block_size; - __r_size = __detail::__block_size; - } else { // if (__right_bitset == 0) - __l_size = __detail::__block_size; - __r_size = __remaining_len - __detail::__block_size; - } - // Record the comparison outcomes for the elements currently on the left side. - if (__left_bitset == 0) { - _RandomAccessIterator __iter = __first; - for (int __j = 0; __j < __l_size; __j++) { - bool __comp_result = !__comp(*__iter, __pivot); - __left_bitset |= (static_cast(__comp_result) << __j); - ++__iter; - } - } - // Record the comparison outcomes for the elements currently on the right - // side. - if (__right_bitset == 0) { - _RandomAccessIterator __iter = __lm1; - for (int __j = 0; __j < __r_size; __j++) { - bool __comp_result = __comp(*__iter, __pivot); - __right_bitset |= (static_cast(__comp_result) << __j); - --__iter; - } - } - std::__swap_bitmap_pos<_AlgPolicy, _RandomAccessIterator>(__first, __lm1, __left_bitset, __right_bitset); - __first += (__left_bitset == 0) ? __l_size : 0; - __lm1 -= (__right_bitset == 0) ? __r_size : 0; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void __swap_bitmap_pos_within( - _RandomAccessIterator& __first, _RandomAccessIterator& __lm1, uint64_t& __left_bitset, uint64_t& __right_bitset) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - if (__left_bitset) { - // Swap within the left side. Need to find set positions in the reverse - // order. - while (__left_bitset != 0) { - difference_type __tz_left = __detail::__block_size - 1 - __libcpp_clz(__left_bitset); - __left_bitset &= (static_cast(1) << __tz_left) - 1; - _RandomAccessIterator __it = __first + __tz_left; - if (__it != __lm1) { - _Ops::iter_swap(__it, __lm1); - } - --__lm1; - } - __first = __lm1 + difference_type(1); - } else if (__right_bitset) { - // Swap within the right side. Need to find set positions in the reverse - // order. - while (__right_bitset != 0) { - difference_type __tz_right = __detail::__block_size - 1 - __libcpp_clz(__right_bitset); - __right_bitset &= (static_cast(1) << __tz_right) - 1; - _RandomAccessIterator __it = __lm1 - __tz_right; - if (__it != __first) { - _Ops::iter_swap(__it, __first); - } - ++__first; - } - } -} - -// Partition [__first, __last) using the comparator __comp. *__first has the -// chosen pivot. Elements that are equivalent are kept to the left of the -// pivot. Returns the iterator for the pivot and a bool value which is true if -// the provided range is already sorted, false otherwise. We assume that the -// length of the range is at least three elements. -// -// __bitset_partition uses bitsets for storing outcomes of the comparisons -// between the pivot and other elements. -template -_LIBCPP_HIDE_FROM_ABI std::pair<_RandomAccessIterator, bool> -__bitset_partition(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::difference_type difference_type; - _LIBCPP_ASSERT_INTERNAL(__last - __first >= difference_type(3), ""); - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - - value_type __pivot(_Ops::__iter_move(__first)); - // Find the first element greater than the pivot. - if (__comp(__pivot, *(__last - difference_type(1)))) { - // Not guarded since we know the last element is greater than the pivot. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - } else { - while (++__first < __last && !__comp(__pivot, *__first)) { - } - } - // Find the last element less than or equal to the pivot. - if (__first < __last) { - // It will be always guarded because __introsort will do the median-of-three - // before calling this. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - // If the first element greater than the pivot is at or after the - // last element less than or equal to the pivot, then we have covered the - // entire range without swapping elements. This implies the range is already - // partitioned. - bool __already_partitioned = __first >= __last; - if (!__already_partitioned) { - _Ops::iter_swap(__first, __last); - ++__first; - } - - // In [__first, __last) __last is not inclusive. From now on, it uses last - // minus one to be inclusive on both sides. - _RandomAccessIterator __lm1 = __last - difference_type(1); - uint64_t __left_bitset = 0; - uint64_t __right_bitset = 0; - - // Reminder: length = __lm1 - __first + 1. - while (__lm1 - __first >= 2 * __detail::__block_size - 1) { - // Record the comparison outcomes for the elements currently on the left - // side. - if (__left_bitset == 0) - std::__populate_left_bitset<_Compare>(__first, __comp, __pivot, __left_bitset); - // Record the comparison outcomes for the elements currently on the right - // side. - if (__right_bitset == 0) - std::__populate_right_bitset<_Compare>(__lm1, __comp, __pivot, __right_bitset); - // Swap the elements recorded to be the candidates for swapping in the - // bitsets. - std::__swap_bitmap_pos<_AlgPolicy, _RandomAccessIterator>(__first, __lm1, __left_bitset, __right_bitset); - // Only advance the iterator if all the elements that need to be moved to - // other side were moved. - __first += (__left_bitset == 0) ? difference_type(__detail::__block_size) : difference_type(0); - __lm1 -= (__right_bitset == 0) ? difference_type(__detail::__block_size) : difference_type(0); - } - // Now, we have a less-than a block worth of elements on at least one of the - // sides. - std::__bitset_partition_partial_blocks<_AlgPolicy, _Compare>( - __first, __lm1, __comp, __pivot, __left_bitset, __right_bitset); - // At least one the bitsets would be empty. For the non-empty one, we need to - // properly partition the elements that appear within that bitset. - std::__swap_bitmap_pos_within<_AlgPolicy>(__first, __lm1, __left_bitset, __right_bitset); - - // Move the pivot to its correct position. - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return std::make_pair(__pivot_pos, __already_partitioned); -} - -// Partition [__first, __last) using the comparator __comp. *__first has the -// chosen pivot. Elements that are equivalent are kept to the right of the -// pivot. Returns the iterator for the pivot and a bool value which is true if -// the provided range is already sorted, false otherwise. We assume that the -// length of the range is at least three elements. -template -_LIBCPP_HIDE_FROM_ABI std::pair<_RandomAccessIterator, bool> -__partition_with_equals_on_right(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - _LIBCPP_ASSERT_INTERNAL(__last - __first >= difference_type(3), ""); - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - value_type __pivot(_Ops::__iter_move(__first)); - // Find the first element greater or equal to the pivot. It will be always - // guarded because __introsort will do the median-of-three before calling - // this. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(*__first, __pivot)); - - // Find the last element less than the pivot. - if (__begin == __first - difference_type(1)) { - while (__first < __last && !__comp(*--__last, __pivot)) - ; - } else { - // Guarded. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (!__comp(*__last, __pivot)); - } - - // If the first element greater than or equal to the pivot is at or after the - // last element less than the pivot, then we have covered the entire range - // without swapping elements. This implies the range is already partitioned. - bool __already_partitioned = __first >= __last; - // Go through the remaining elements. Swap pairs of elements (one to the - // right of the pivot and the other to left of the pivot) that are not on the - // correct side of the pivot. - while (__first < __last) { - _Ops::iter_swap(__first, __last); - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (__comp(*__first, __pivot)); - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (!__comp(*__last, __pivot)); - } - // Move the pivot to its correct position. - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return std::make_pair(__pivot_pos, __already_partitioned); -} - -// Similar to the above function. Elements equivalent to the pivot are put to -// the left of the pivot. Returns the iterator to the pivot element. -template -_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator -__partition_with_equals_on_left(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - typedef typename std::iterator_traits<_RandomAccessIterator>::value_type value_type; - const _RandomAccessIterator __begin = __first; // used for bounds checking, those are not moved around - const _RandomAccessIterator __end = __last; - (void)__end; // - value_type __pivot(_Ops::__iter_move(__first)); - if (__comp(__pivot, *(__last - difference_type(1)))) { - // Guarded. - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - } else { - while (++__first < __last && !__comp(__pivot, *__first)) { - } - } - - if (__first < __last) { - // It will be always guarded because __introsort will do the - // median-of-three before calling this. - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - while (__first < __last) { - _Ops::iter_swap(__first, __last); - do { - ++__first; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __first != __end, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - } while (!__comp(__pivot, *__first)); - do { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __last != __begin, - "Would read out of bounds, does your comparator satisfy the strict-weak ordering requirement?"); - --__last; - } while (__comp(__pivot, *__last)); - } - _RandomAccessIterator __pivot_pos = __first - difference_type(1); - if (__begin != __pivot_pos) { - *__begin = _Ops::__iter_move(__pivot_pos); - } - *__pivot_pos = std::move(__pivot); - return __first; -} - -// The main sorting function. Implements introsort combined with other ideas: -// - option of using block quick sort for partitioning, -// - guarded and unguarded insertion sort for small lengths, -// - Tuckey's ninther technique for computing the pivot, -// - check on whether partition was not required. -// The implementation is partly based on Orson Peters' pattern-defeating -// quicksort, published at: . -template -void __introsort(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __depth, - bool __leftmost = true) { - using _Ops = _IterOps<_AlgPolicy>; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - using _Comp_ref = __comp_ref_type<_Compare>; - // Upper bound for using insertion sort for sorting. - difference_type __limit = 24; - // Lower bound for using Tuckey's ninther technique for median computation. - difference_type __ninther_threshold = 128; - while (true) { - difference_type __len = __last - __first; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _Ops::iter_swap(__first, __last); - return; - case 3: - std::__sort3_maybe_branchless<_AlgPolicy, _Compare>(__first, __first + difference_type(1), --__last, __comp); - return; - case 4: - std::__sort4_maybe_branchless<_AlgPolicy, _Compare>( - __first, __first + difference_type(1), __first + difference_type(2), --__last, __comp); - return; - case 5: - std::__sort5_maybe_branchless<_AlgPolicy, _Compare>( - __first, - __first + difference_type(1), - __first + difference_type(2), - __first + difference_type(3), - --__last, - __comp); - return; - } - // Use insertion sort if the length of the range is below the specified limit. - if (__len < __limit) { - if (__leftmost) { - std::__insertion_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - } else { - std::__insertion_sort_unguarded<_AlgPolicy, _Compare>(__first, __last, __comp); - } - return; - } - if (__depth == 0) { - // Fallback to heap sort as Introsort suggests. - std::__partial_sort<_AlgPolicy, _Compare>(__first, __last, __last, __comp); - return; - } - --__depth; - { - difference_type __half_len = __len / 2; - // Use Tuckey's ninther technique or median of 3 for pivot selection - // depending on the length of the range being sorted. - if (__len > __ninther_threshold) { - std::__sort3<_AlgPolicy, _Compare>(__first, __first + __half_len, __last - difference_type(1), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + difference_type(1), __first + (__half_len - 1), __last - difference_type(2), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + difference_type(2), __first + (__half_len + 1), __last - difference_type(3), __comp); - std::__sort3<_AlgPolicy, _Compare>( - __first + (__half_len - 1), __first + __half_len, __first + (__half_len + 1), __comp); - _Ops::iter_swap(__first, __first + __half_len); - } else { - std::__sort3<_AlgPolicy, _Compare>(__first + __half_len, __first, __last - difference_type(1), __comp); - } - } - // The elements to the left of the current iterator range are already - // sorted. If the current iterator range to be sorted is not the - // leftmost part of the entire iterator range and the pivot is same as - // the highest element in the range to the left, then we know that all - // the elements in the range [first, pivot] would be equal to the pivot, - // assuming the equal elements are put on the left side when - // partitioned. This also means that we do not need to sort the left - // side of the partition. - if (!__leftmost && !__comp(*(__first - difference_type(1)), *__first)) { - __first = std::__partition_with_equals_on_left<_AlgPolicy, _RandomAccessIterator, _Comp_ref>( - __first, __last, _Comp_ref(__comp)); - continue; - } - // Use bitset partition only if asked for. - auto __ret = _UseBitSetPartition - ? std::__bitset_partition<_AlgPolicy, _RandomAccessIterator, _Compare>(__first, __last, __comp) - : std::__partition_with_equals_on_right<_AlgPolicy, _RandomAccessIterator, _Compare>( - __first, __last, __comp); - _RandomAccessIterator __i = __ret.first; - // [__first, __i) < *__i and *__i <= [__i+1, __last) - // If we were given a perfect partition, see if insertion sort is quick... - if (__ret.second) { - bool __fs = std::__insertion_sort_incomplete<_AlgPolicy, _Compare>(__first, __i, __comp); - if (std::__insertion_sort_incomplete<_AlgPolicy, _Compare>(__i + difference_type(1), __last, __comp)) { - if (__fs) - return; - __last = __i; - continue; - } else { - if (__fs) { - __first = ++__i; - continue; - } - } - } - // Sort the left partiton recursively and the right partition with tail recursion elimination. - std::__introsort<_AlgPolicy, _Compare, _RandomAccessIterator, _UseBitSetPartition>( - __first, __i, __comp, __depth, __leftmost); - __leftmost = false; - __first = ++__i; - } -} - -template -inline _LIBCPP_HIDE_FROM_ABI _Number __log2i(_Number __n) { - if (__n == 0) - return 0; - if (sizeof(__n) <= sizeof(unsigned)) - return sizeof(unsigned) * CHAR_BIT - 1 - __libcpp_clz(static_cast(__n)); - if (sizeof(__n) <= sizeof(unsigned long)) - return sizeof(unsigned long) * CHAR_BIT - 1 - __libcpp_clz(static_cast(__n)); - if (sizeof(__n) <= sizeof(unsigned long long)) - return sizeof(unsigned long long) * CHAR_BIT - 1 - __libcpp_clz(static_cast(__n)); - - _Number __log2 = 0; - while (__n > 1) { - __log2++; - __n >>= 1; - } - return __log2; -} - -template -void __sort(_RandomAccessIterator, _RandomAccessIterator, _Comp); - -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, char*>(char*, char*, __less&); -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, wchar_t*>(wchar_t*, wchar_t*, __less&); -#endif -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, signed char*>(signed char*, signed char*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned char*>(unsigned char*, unsigned char*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, short*>(short*, short*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned short*>(unsigned short*, unsigned short*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, int*>(int*, int*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned*>(unsigned*, unsigned*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, long*>(long*, long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, unsigned long*>(unsigned long*, unsigned long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, long long*>(long long*, long long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, unsigned long long*>( - unsigned long long*, unsigned long long*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, float*>(float*, float*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void __sort<__less&, double*>(double*, double*, __less&); -extern template _LIBCPP_EXPORTED_FROM_ABI void -__sort<__less&, long double*>(long double*, long double*, __less&); - -template -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp& __comp) { - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - difference_type __depth_limit = 2 * std::__log2i(__last - __first); - - // Only use bitset partitioning for arithmetic types. We should also check - // that the default comparator is in use so that we are sure that there are no - // branches in the comparator. - std::__introsort<_AlgPolicy, - _Comp&, - _RandomAccessIterator, - __use_branchless_sort<_Comp, _RandomAccessIterator>::value>(__first, __last, __comp, __depth_limit); -} - -template -using __is_any_of = _Or...>; - -template -using __sort_is_specialized_in_library = __is_any_of< - _Type, - char, -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS - wchar_t, -#endif - signed char, - unsigned char, - short, - unsigned short, - int, - unsigned int, - long, - unsigned long, - long long, - unsigned long long, - float, - double, - long double>; - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, __less<>&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} - -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __sort_dispatch(_Type* __first, _Type* __last, less<_Type>&) { - __less<_Type> __comp; - std::__sort<__less<_Type>&, _Type*>(__first, __last, __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -__sort_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp& __comp) { - std::__debug_randomize_range<_AlgPolicy>(__first, __last); - - if (__libcpp_is_constant_evaluated()) { - std::__partial_sort<_AlgPolicy>( - std::__unwrap_iter(__first), std::__unwrap_iter(__last), std::__unwrap_iter(__last), __comp); - } else { - std::__sort_dispatch<_AlgPolicy>(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __comp); - } - std::__check_strict_weak_ordering_sorted(std::__unwrap_iter(__first), std::__unwrap_iter(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp __comp) { - std::__sort_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::sort(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort_heap.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort_heap.h deleted file mode 100644 index 1a7cad1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/sort_heap.h +++ /dev/null @@ -1,62 +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___CXX03___ALGORITHM_SORT_HEAP_H -#define _LIBCPP___CXX03___ALGORITHM_SORT_HEAP_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/pop_heap.h> -#include <__cxx03/__config> -#include <__cxx03/__debug_utils/strict_weak_ordering_check.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI void -__sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare&& __comp) { - _RandomAccessIterator __saved_last = __last; - __comp_ref_type<_Compare> __comp_ref = __comp; - - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - for (difference_type __n = __last - __first; __n > 1; --__last, (void)--__n) - std::__pop_heap<_AlgPolicy>(__first, __last, __comp_ref, __n); - std::__check_strict_weak_ordering_sorted(__first, __saved_last, __comp_ref); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - static_assert(std::is_copy_constructible<_RandomAccessIterator>::value, "Iterators must be copy constructible."); - static_assert(std::is_copy_assignable<_RandomAccessIterator>::value, "Iterators must be copy assignable."); - - std::__sort_heap<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::sort_heap(std::move(__first), std::move(__last), __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SORT_HEAP_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_partition.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_partition.h deleted file mode 100644 index c804498..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_partition.h +++ /dev/null @@ -1,307 +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___CXX03___ALGORITHM_STABLE_PARTITION_H -#define _LIBCPP___CXX03___ALGORITHM_STABLE_PARTITION_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/rotate.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/destruct_n.h> -#include <__cxx03/__memory/temporary_buffer.h> -#include <__cxx03/__memory/unique_ptr.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/new> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator __stable_partition_impl( - _ForwardIterator __first, - _ForwardIterator __last, - _Predicate __pred, - _Distance __len, - _Pair __p, - forward_iterator_tag __fit) { - using _Ops = _IterOps<_AlgPolicy>; - - // *__first is known to be false - // __len >= 1 - if (__len == 1) - return __first; - if (__len == 2) { - _ForwardIterator __m = __first; - if (__pred(*++__m)) { - _Ops::iter_swap(__first, __m); - return __m; - } - return __first; - } - if (__len <= __p.second) { // The buffer is big enough to use - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__p.first, __d); - // Move the falses into the temporary buffer, and the trues to the front of the line - // Update __first to always point to the end of the trues - value_type* __t = __p.first; - ::new ((void*)__t) value_type(_Ops::__iter_move(__first)); - __d.template __incr(); - ++__t; - _ForwardIterator __i = __first; - while (++__i != __last) { - if (__pred(*__i)) { - *__first = _Ops::__iter_move(__i); - ++__first; - } else { - ::new ((void*)__t) value_type(_Ops::__iter_move(__i)); - __d.template __incr(); - ++__t; - } - } - // All trues now at start of range, all falses in buffer - // Move falses back into range, but don't mess up __first which points to first false - __i = __first; - for (value_type* __t2 = __p.first; __t2 < __t; ++__t2, (void)++__i) - *__i = _Ops::__iter_move(__t2); - // __h destructs moved-from values out of the temp buffer, but doesn't deallocate buffer - return __first; - } - // Else not enough buffer, do in place - // __len >= 3 - _ForwardIterator __m = __first; - _Distance __len2 = __len / 2; // __len2 >= 2 - _Ops::advance(__m, __len2); - // recurse on [__first, __m), *__first know to be false - // F????????????????? - // f m l - _ForwardIterator __first_false = - std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__first, __m, __pred, __len2, __p, __fit); - // TTTFFFFF?????????? - // f ff m l - // recurse on [__m, __last], except increase __m until *(__m) is false, *__last know to be true - _ForwardIterator __m1 = __m; - _ForwardIterator __second_false = __last; - _Distance __len_half = __len - __len2; - while (__pred(*__m1)) { - if (++__m1 == __last) - goto __second_half_done; - --__len_half; - } - // TTTFFFFFTTTF?????? - // f ff m m1 l - __second_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__m1, __last, __pred, __len_half, __p, __fit); -__second_half_done: - // TTTFFFFFTTTTTFFFFF - // f ff m sf l - return std::__rotate<_AlgPolicy>(__first_false, __m, __second_false).first; - // TTTTTTTTFFFFFFFFFF - // | -} - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator -__stable_partition_impl(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred, forward_iterator_tag) { - typedef typename iterator_traits<_ForwardIterator>::difference_type difference_type; - typedef typename iterator_traits<_ForwardIterator>::value_type value_type; - - const difference_type __alloc_limit = 3; // might want to make this a function of trivial assignment - // Either prove all true and return __first or point to first false - while (true) { - if (__first == __last) - return __first; - if (!__pred(*__first)) - break; - ++__first; - } - // We now have a reduced range [__first, __last) - // *__first is known to be false - difference_type __len = _IterOps<_AlgPolicy>::distance(__first, __last); - pair __p(0, 0); - unique_ptr __h; - if (__len >= __alloc_limit) { - // TODO: Remove the use of std::get_temporary_buffer - _LIBCPP_SUPPRESS_DEPRECATED_PUSH - __p = std::get_temporary_buffer(__len); - _LIBCPP_SUPPRESS_DEPRECATED_POP - __h.reset(__p.first); - } - return std::__stable_partition_impl<_AlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, __len, __p, forward_iterator_tag()); -} - -template -_BidirectionalIterator __stable_partition_impl( - _BidirectionalIterator __first, - _BidirectionalIterator __last, - _Predicate __pred, - _Distance __len, - _Pair __p, - bidirectional_iterator_tag __bit) { - using _Ops = _IterOps<_AlgPolicy>; - - // *__first is known to be false - // *__last is known to be true - // __len >= 2 - if (__len == 2) { - _Ops::iter_swap(__first, __last); - return __last; - } - if (__len == 3) { - _BidirectionalIterator __m = __first; - if (__pred(*++__m)) { - _Ops::iter_swap(__first, __m); - _Ops::iter_swap(__m, __last); - return __last; - } - _Ops::iter_swap(__m, __last); - _Ops::iter_swap(__first, __m); - return __m; - } - if (__len <= __p.second) { // The buffer is big enough to use - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__p.first, __d); - // Move the falses into the temporary buffer, and the trues to the front of the line - // Update __first to always point to the end of the trues - value_type* __t = __p.first; - ::new ((void*)__t) value_type(_Ops::__iter_move(__first)); - __d.template __incr(); - ++__t; - _BidirectionalIterator __i = __first; - while (++__i != __last) { - if (__pred(*__i)) { - *__first = _Ops::__iter_move(__i); - ++__first; - } else { - ::new ((void*)__t) value_type(_Ops::__iter_move(__i)); - __d.template __incr(); - ++__t; - } - } - // move *__last, known to be true - *__first = _Ops::__iter_move(__i); - __i = ++__first; - // All trues now at start of range, all falses in buffer - // Move falses back into range, but don't mess up __first which points to first false - for (value_type* __t2 = __p.first; __t2 < __t; ++__t2, (void)++__i) - *__i = _Ops::__iter_move(__t2); - // __h destructs moved-from values out of the temp buffer, but doesn't deallocate buffer - return __first; - } - // Else not enough buffer, do in place - // __len >= 4 - _BidirectionalIterator __m = __first; - _Distance __len2 = __len / 2; // __len2 >= 2 - _Ops::advance(__m, __len2); - // recurse on [__first, __m-1], except reduce __m-1 until *(__m-1) is true, *__first know to be false - // F????????????????T - // f m l - _BidirectionalIterator __m1 = __m; - _BidirectionalIterator __first_false = __first; - _Distance __len_half = __len2; - while (!__pred(*--__m1)) { - if (__m1 == __first) - goto __first_half_done; - --__len_half; - } - // F???TFFF?????????T - // f m1 m l - __first_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__first, __m1, __pred, __len_half, __p, __bit); -__first_half_done: - // TTTFFFFF?????????T - // f ff m l - // recurse on [__m, __last], except increase __m until *(__m) is false, *__last know to be true - __m1 = __m; - _BidirectionalIterator __second_false = __last; - ++__second_false; - __len_half = __len - __len2; - while (__pred(*__m1)) { - if (++__m1 == __last) - goto __second_half_done; - --__len_half; - } - // TTTFFFFFTTTF?????T - // f ff m m1 l - __second_false = std::__stable_partition_impl<_AlgPolicy, _Predicate&>(__m1, __last, __pred, __len_half, __p, __bit); -__second_half_done: - // TTTFFFFFTTTTTFFFFF - // f ff m sf l - return std::__rotate<_AlgPolicy>(__first_false, __m, __second_false).first; - // TTTTTTTTFFFFFFFFFF - // | -} - -template -_LIBCPP_HIDE_FROM_ABI _BidirectionalIterator __stable_partition_impl( - _BidirectionalIterator __first, _BidirectionalIterator __last, _Predicate __pred, bidirectional_iterator_tag) { - typedef typename iterator_traits<_BidirectionalIterator>::difference_type difference_type; - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - const difference_type __alloc_limit = 4; // might want to make this a function of trivial assignment - // Either prove all true and return __first or point to first false - while (true) { - if (__first == __last) - return __first; - if (!__pred(*__first)) - break; - ++__first; - } - // __first points to first false, everything prior to __first is already set. - // Either prove [__first, __last) is all false and return __first, or point __last to last true - do { - if (__first == --__last) - return __first; - } while (!__pred(*__last)); - // We now have a reduced range [__first, __last] - // *__first is known to be false - // *__last is known to be true - // __len >= 2 - difference_type __len = _IterOps<_AlgPolicy>::distance(__first, __last) + 1; - pair __p(0, 0); - unique_ptr __h; - if (__len >= __alloc_limit) { - // TODO: Remove the use of std::get_temporary_buffer - _LIBCPP_SUPPRESS_DEPRECATED_PUSH - __p = std::get_temporary_buffer(__len); - _LIBCPP_SUPPRESS_DEPRECATED_POP - __h.reset(__p.first); - } - return std::__stable_partition_impl<_AlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, __len, __p, bidirectional_iterator_tag()); -} - -template -_LIBCPP_HIDE_FROM_ABI _ForwardIterator __stable_partition( - _ForwardIterator __first, _ForwardIterator __last, _Predicate&& __pred, _IterCategory __iter_category) { - return std::__stable_partition_impl<_AlgPolicy, __remove_cvref_t<_Predicate>&>( - std::move(__first), std::move(__last), __pred, __iter_category); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -stable_partition(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) { - using _IterCategory = typename iterator_traits<_ForwardIterator>::iterator_category; - return std::__stable_partition<_ClassicAlgPolicy, _Predicate&>( - std::move(__first), std::move(__last), __pred, _IterCategory()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_STABLE_PARTITION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_sort.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_sort.h deleted file mode 100644 index e1f89f6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/stable_sort.h +++ /dev/null @@ -1,273 +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___CXX03___ALGORITHM_STABLE_SORT_H -#define _LIBCPP___CXX03___ALGORITHM_STABLE_SORT_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/inplace_merge.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__algorithm/sort.h> -#include <__cxx03/__config> -#include <__cxx03/__debug_utils/strict_weak_ordering_check.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/destruct_n.h> -#include <__cxx03/__memory/temporary_buffer.h> -#include <__cxx03/__memory/unique_ptr.h> -#include <__cxx03/__type_traits/is_trivially_assignable.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/new> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void __insertion_sort_move( - _BidirectionalIterator __first1, - _BidirectionalIterator __last1, - typename iterator_traits<_BidirectionalIterator>::value_type* __first2, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_BidirectionalIterator>::value_type value_type; - if (__first1 != __last1) { - __destruct_n __d(0); - unique_ptr __h(__first2, __d); - value_type* __last2 = __first2; - ::new ((void*)__last2) value_type(_Ops::__iter_move(__first1)); - __d.template __incr(); - for (++__last2; ++__first1 != __last1; ++__last2) { - value_type* __j2 = __last2; - value_type* __i2 = __j2; - if (__comp(*__first1, *--__i2)) { - ::new ((void*)__j2) value_type(std::move(*__i2)); - __d.template __incr(); - for (--__j2; __i2 != __first2 && __comp(*__first1, *--__i2); --__j2) - *__j2 = std::move(*__i2); - *__j2 = _Ops::__iter_move(__first1); - } else { - ::new ((void*)__j2) value_type(_Ops::__iter_move(__first1)); - __d.template __incr(); - } - } - __h.release(); - } -} - -template -_LIBCPP_HIDE_FROM_ABI void __merge_move_construct( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - typename iterator_traits<_InputIterator1>::value_type* __result, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_InputIterator1>::value_type value_type; - __destruct_n __d(0); - unique_ptr __h(__result, __d); - for (; true; ++__result) { - if (__first1 == __last1) { - for (; __first2 != __last2; ++__first2, (void)++__result, __d.template __incr()) - ::new ((void*)__result) value_type(_Ops::__iter_move(__first2)); - __h.release(); - return; - } - if (__first2 == __last2) { - for (; __first1 != __last1; ++__first1, (void)++__result, __d.template __incr()) - ::new ((void*)__result) value_type(_Ops::__iter_move(__first1)); - __h.release(); - return; - } - if (__comp(*__first2, *__first1)) { - ::new ((void*)__result) value_type(_Ops::__iter_move(__first2)); - __d.template __incr(); - ++__first2; - } else { - ::new ((void*)__result) value_type(_Ops::__iter_move(__first1)); - __d.template __incr(); - ++__first1; - } - } -} - -template -_LIBCPP_HIDE_FROM_ABI void __merge_move_assign( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _OutputIterator __result, - _Compare __comp) { - using _Ops = _IterOps<_AlgPolicy>; - - for (; __first1 != __last1; ++__result) { - if (__first2 == __last2) { - for (; __first1 != __last1; ++__first1, (void)++__result) - *__result = _Ops::__iter_move(__first1); - return; - } - if (__comp(*__first2, *__first1)) { - *__result = _Ops::__iter_move(__first2); - ++__first2; - } else { - *__result = _Ops::__iter_move(__first1); - ++__first1; - } - } - for (; __first2 != __last2; ++__first2, (void)++__result) - *__result = _Ops::__iter_move(__first2); -} - -template -void __stable_sort(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __buff, - ptrdiff_t __buff_size); - -template -void __stable_sort_move(_RandomAccessIterator __first1, - _RandomAccessIterator __last1, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __first2) { - using _Ops = _IterOps<_AlgPolicy>; - - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - switch (__len) { - case 0: - return; - case 1: - ::new ((void*)__first2) value_type(_Ops::__iter_move(__first1)); - return; - case 2: - __destruct_n __d(0); - unique_ptr __h2(__first2, __d); - if (__comp(*--__last1, *__first1)) { - ::new ((void*)__first2) value_type(_Ops::__iter_move(__last1)); - __d.template __incr(); - ++__first2; - ::new ((void*)__first2) value_type(_Ops::__iter_move(__first1)); - } else { - ::new ((void*)__first2) value_type(_Ops::__iter_move(__first1)); - __d.template __incr(); - ++__first2; - ::new ((void*)__first2) value_type(_Ops::__iter_move(__last1)); - } - __h2.release(); - return; - } - if (__len <= 8) { - std::__insertion_sort_move<_AlgPolicy, _Compare>(__first1, __last1, __first2, __comp); - return; - } - typename iterator_traits<_RandomAccessIterator>::difference_type __l2 = __len / 2; - _RandomAccessIterator __m = __first1 + __l2; - std::__stable_sort<_AlgPolicy, _Compare>(__first1, __m, __comp, __l2, __first2, __l2); - std::__stable_sort<_AlgPolicy, _Compare>(__m, __last1, __comp, __len - __l2, __first2 + __l2, __len - __l2); - std::__merge_move_construct<_AlgPolicy, _Compare>(__first1, __m, __m, __last1, __first2, __comp); -} - -template -struct __stable_sort_switch { - static const unsigned value = 128 * is_trivially_copy_assignable<_Tp>::value; -}; - -template -void __stable_sort(_RandomAccessIterator __first, - _RandomAccessIterator __last, - _Compare __comp, - typename iterator_traits<_RandomAccessIterator>::difference_type __len, - typename iterator_traits<_RandomAccessIterator>::value_type* __buff, - ptrdiff_t __buff_size) { - typedef typename iterator_traits<_RandomAccessIterator>::value_type value_type; - typedef typename iterator_traits<_RandomAccessIterator>::difference_type difference_type; - switch (__len) { - case 0: - case 1: - return; - case 2: - if (__comp(*--__last, *__first)) - _IterOps<_AlgPolicy>::iter_swap(__first, __last); - return; - } - if (__len <= static_cast(__stable_sort_switch::value)) { - std::__insertion_sort<_AlgPolicy, _Compare>(__first, __last, __comp); - return; - } - typename iterator_traits<_RandomAccessIterator>::difference_type __l2 = __len / 2; - _RandomAccessIterator __m = __first + __l2; - if (__len <= __buff_size) { - __destruct_n __d(0); - unique_ptr __h2(__buff, __d); - std::__stable_sort_move<_AlgPolicy, _Compare>(__first, __m, __comp, __l2, __buff); - __d.__set(__l2, (value_type*)nullptr); - std::__stable_sort_move<_AlgPolicy, _Compare>(__m, __last, __comp, __len - __l2, __buff + __l2); - __d.__set(__len, (value_type*)nullptr); - std::__merge_move_assign<_AlgPolicy, _Compare>( - __buff, __buff + __l2, __buff + __l2, __buff + __len, __first, __comp); - // std::__merge<_Compare>(move_iterator(__buff), - // move_iterator(__buff + __l2), - // move_iterator<_RandomAccessIterator>(__buff + __l2), - // move_iterator<_RandomAccessIterator>(__buff + __len), - // __first, __comp); - return; - } - std::__stable_sort<_AlgPolicy, _Compare>(__first, __m, __comp, __l2, __buff, __buff_size); - std::__stable_sort<_AlgPolicy, _Compare>(__m, __last, __comp, __len - __l2, __buff, __buff_size); - std::__inplace_merge<_AlgPolicy>(__first, __m, __last, __comp, __l2, __len - __l2, __buff, __buff_size); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -__stable_sort_impl(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare& __comp) { - using value_type = typename iterator_traits<_RandomAccessIterator>::value_type; - using difference_type = typename iterator_traits<_RandomAccessIterator>::difference_type; - - difference_type __len = __last - __first; - pair __buf(0, 0); - unique_ptr __h; - if (__len > static_cast(__stable_sort_switch::value)) { - // TODO: Remove the use of std::get_temporary_buffer - _LIBCPP_SUPPRESS_DEPRECATED_PUSH - __buf = std::get_temporary_buffer(__len); - _LIBCPP_SUPPRESS_DEPRECATED_POP - __h.reset(__buf.first); - } - - std::__stable_sort<_AlgPolicy, __comp_ref_type<_Compare> >(__first, __last, __comp, __len, __buf.first, __buf.second); - std::__check_strict_weak_ordering_sorted(__first, __last, __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) { - std::__stable_sort_impl<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __comp); -} - -template -inline _LIBCPP_HIDE_FROM_ABI void stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { - std::stable_sort(__first, __last, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_STABLE_SORT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/swap_ranges.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/swap_ranges.h deleted file mode 100644 index d1f50c1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/swap_ranges.h +++ /dev/null @@ -1,62 +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___CXX03___ALGORITHM_SWAP_RANGES_H -#define _LIBCPP___CXX03___ALGORITHM_SWAP_RANGES_H - -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// 2+2 iterators: the shorter size will be used. -template -_LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator1, _ForwardIterator2> -__swap_ranges(_ForwardIterator1 __first1, _Sentinel1 __last1, _ForwardIterator2 __first2, _Sentinel2 __last2) { - while (__first1 != __last1 && __first2 != __last2) { - _IterOps<_AlgPolicy>::iter_swap(__first1, __first2); - ++__first1; - ++__first2; - } - - return pair<_ForwardIterator1, _ForwardIterator2>(std::move(__first1), std::move(__first2)); -} - -// 2+1 iterators: size2 >= size1. -template -_LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator1, _ForwardIterator2> -__swap_ranges(_ForwardIterator1 __first1, _Sentinel1 __last1, _ForwardIterator2 __first2) { - while (__first1 != __last1) { - _IterOps<_AlgPolicy>::iter_swap(__first1, __first2); - ++__first1; - ++__first2; - } - - return pair<_ForwardIterator1, _ForwardIterator2>(std::move(__first1), std::move(__first2)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator2 -swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2) { - return std::__swap_ranges<_ClassicAlgPolicy>(std::move(__first1), std::move(__last1), std::move(__first2)).second; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_SWAP_RANGES_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/three_way_comp_ref_type.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/three_way_comp_ref_type.h deleted file mode 100644 index 7e978b8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/three_way_comp_ref_type.h +++ /dev/null @@ -1,26 +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___CXX03___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H -#define _LIBCPP___CXX03___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H - -#include <__cxx03/__assert> -#include <__cxx03/__compare/ordering.h> -#include <__cxx03/__config> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/transform.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/transform.h deleted file mode 100644 index abdf2cc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/transform.h +++ /dev/null @@ -1,42 +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___CXX03___ALGORITHM_TRANSFORM_H -#define _LIBCPP___CXX03___ALGORITHM_TRANSFORM_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __op) { - for (; __first != __last; ++__first, (void)++__result) - *__result = __op(*__first); - return __result; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator transform( - _InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _OutputIterator __result, - _BinaryOperation __binary_op) { - for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result) - *__result = __binary_op(*__first1, *__first2); - return __result; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ALGORITHM_TRANSFORM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/uniform_random_bit_generator_adaptor.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/uniform_random_bit_generator_adaptor.h deleted file mode 100644 index ef789bf..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/uniform_random_bit_generator_adaptor.h +++ /dev/null @@ -1,20 +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___CXX03___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H -#define _LIBCPP___CXX03___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/invoke.h> -#include <__cxx03/__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#endif // _LIBCPP___CXX03___ALGORITHM_RANGES_UNIFORM_RANDOM_BIT_GENERATOR_ADAPTOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique.h deleted file mode 100644 index 15980b9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique.h +++ /dev/null @@ -1,64 +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___CXX03___ALGORITHM_UNIQUE_H -#define _LIBCPP___CXX03___ALGORITHM_UNIQUE_H - -#include <__cxx03/__algorithm/adjacent_find.h> -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// unique - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI std::pair<_Iter, _Iter> -__unique(_Iter __first, _Sent __last, _BinaryPredicate&& __pred) { - __first = std::__adjacent_find(__first, __last, __pred); - if (__first != __last) { - // ... a a ? ... - // f i - _Iter __i = __first; - for (++__i; ++__i != __last;) - if (!__pred(*__first, *__i)) - *++__first = _IterOps<_AlgPolicy>::__iter_move(__i); - ++__first; - return std::pair<_Iter, _Iter>(std::move(__first), std::move(__i)); - } - return std::pair<_Iter, _Iter>(__first, __first); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _ForwardIterator -unique(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred) { - return std::__unique<_ClassicAlgPolicy>(std::move(__first), std::move(__last), __pred).first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -unique(_ForwardIterator __first, _ForwardIterator __last) { - return std::unique(__first, __last, __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_UNIQUE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique_copy.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique_copy.h deleted file mode 100644 index 5bed5b5..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unique_copy.h +++ /dev/null @@ -1,127 +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___CXX03___ALGORITHM_UNIQUE_COPY_H -#define _LIBCPP___CXX03___ALGORITHM_UNIQUE_COPY_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/is_base_of.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __unique_copy_tags { - -struct __reread_from_input_tag {}; -struct __reread_from_output_tag {}; -struct __read_from_tmp_value_tag {}; - -} // namespace __unique_copy_tags - -template -_LIBCPP_HIDE_FROM_ABI pair<_InputIterator, _OutputIterator> -__unique_copy(_InputIterator __first, - _Sent __last, - _OutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__read_from_tmp_value_tag) { - if (__first != __last) { - typename _IterOps<_AlgPolicy>::template __value_type<_InputIterator> __t(*__first); - *__result = __t; - ++__result; - while (++__first != __last) { - if (!__pred(__t, *__first)) { - __t = *__first; - *__result = __t; - ++__result; - } - } - } - return pair<_InputIterator, _OutputIterator>(std::move(__first), std::move(__result)); -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_ForwardIterator, _OutputIterator> -__unique_copy(_ForwardIterator __first, - _Sent __last, - _OutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__reread_from_input_tag) { - if (__first != __last) { - _ForwardIterator __i = __first; - *__result = *__i; - ++__result; - while (++__first != __last) { - if (!__pred(*__i, *__first)) { - *__result = *__first; - ++__result; - __i = __first; - } - } - } - return pair<_ForwardIterator, _OutputIterator>(std::move(__first), std::move(__result)); -} - -template -_LIBCPP_HIDE_FROM_ABI pair<_InputIterator, _InputAndOutputIterator> -__unique_copy(_InputIterator __first, - _Sent __last, - _InputAndOutputIterator __result, - _BinaryPredicate&& __pred, - __unique_copy_tags::__reread_from_output_tag) { - if (__first != __last) { - *__result = *__first; - while (++__first != __last) - if (!__pred(*__result, *__first)) - *++__result = *__first; - ++__result; - } - return pair<_InputIterator, _InputAndOutputIterator>(std::move(__first), std::move(__result)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _BinaryPredicate __pred) { - using __algo_tag = __conditional_t< - is_base_of::iterator_category>::value, - __unique_copy_tags::__reread_from_input_tag, - __conditional_t< - is_base_of::iterator_category>::value && - is_same< typename iterator_traits<_InputIterator>::value_type, - typename iterator_traits<_OutputIterator>::value_type>::value, - __unique_copy_tags::__reread_from_output_tag, - __unique_copy_tags::__read_from_tmp_value_tag> >; - return std::__unique_copy<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), std::move(__result), __pred, __algo_tag()) - .second; -} - -template -inline _LIBCPP_HIDE_FROM_ABI _OutputIterator -unique_copy(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { - return std::unique_copy(std::move(__first), std::move(__last), std::move(__result), __equal_to()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_UNIQUE_COPY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_iter.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_iter.h deleted file mode 100644 index d8daa54..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_iter.h +++ /dev/null @@ -1,74 +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___CXX03___ALGORITHM_UNWRAP_ITER_H -#define _LIBCPP___CXX03___ALGORITHM_UNWRAP_ITER_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// TODO: Change the name of __unwrap_iter_impl to something more appropriate -// The job of __unwrap_iter is to remove iterator wrappers (like reverse_iterator or __wrap_iter), -// to reduce the number of template instantiations and to enable pointer-based optimizations e.g. in std::copy. -// -// Some algorithms (e.g. std::copy, but not std::sort) need to convert an -// "unwrapped" result back into the original iterator type. Doing that is the job of __rewrap_iter. - -// Default case - we can't unwrap anything -template ::value> -struct __unwrap_iter_impl { - static _LIBCPP_HIDE_FROM_ABI _Iter __rewrap(_Iter, _Iter __iter) { return __iter; } - static _LIBCPP_HIDE_FROM_ABI _Iter __unwrap(_Iter __i) _NOEXCEPT { return __i; } -}; - -// TODO(hardening): make sure that the following unwrapping doesn't unexpectedly turn hardened iterators into raw -// pointers. - -// It's a contiguous iterator, so we can use a raw pointer instead -template -struct __unwrap_iter_impl<_Iter, true> { - using _ToAddressT = decltype(std::__to_address(std::declval<_Iter>())); - - static _LIBCPP_HIDE_FROM_ABI _Iter __rewrap(_Iter __orig_iter, _ToAddressT __unwrapped_iter) { - return __orig_iter + (__unwrapped_iter - std::__to_address(__orig_iter)); - } - - static _LIBCPP_HIDE_FROM_ABI _ToAddressT __unwrap(_Iter __i) _NOEXCEPT { return std::__to_address(__i); } -}; - -template , - __enable_if_t::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI decltype(_Impl::__unwrap(std::declval<_Iter>())) __unwrap_iter(_Iter __i) _NOEXCEPT { - return _Impl::__unwrap(__i); -} - -template > -_LIBCPP_HIDE_FROM_ABI _OrigIter __rewrap_iter(_OrigIter __orig_iter, _Iter __iter) _NOEXCEPT { - return _Impl::__rewrap(std::move(__orig_iter), std::move(__iter)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_UNWRAP_ITER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_range.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_range.h deleted file mode 100644 index 1926676..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/unwrap_range.h +++ /dev/null @@ -1,46 +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___CXX03___ALGORITHM_UNWRAP_RANGE_H -#define _LIBCPP___CXX03___ALGORITHM_UNWRAP_RANGE_H - -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// __unwrap_range and __rewrap_range are used to unwrap ranges which may have different iterator and sentinel types. -// __unwrap_iter and __rewrap_iter don't work for this, because they assume that the iterator and sentinel have -// the same type. __unwrap_range tries to get two iterators and then forward to __unwrap_iter. - -template ()))> -_LIBCPP_HIDE_FROM_ABI pair<_Unwrapped, _Unwrapped> __unwrap_range(_Iter __first, _Iter __last) { - return std::make_pair(std::__unwrap_iter(std::move(__first)), std::__unwrap_iter(std::move(__last))); -} - -template -_LIBCPP_HIDE_FROM_ABI _Iter __rewrap_range(_Iter __orig_iter, _Unwrapped __iter) { - return std::__rewrap_iter(std::move(__orig_iter), std::move(__iter)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_UNWRAP_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/upper_bound.h b/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/upper_bound.h deleted file mode 100644 index 6c7cc37..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__algorithm/upper_bound.h +++ /dev/null @@ -1,68 +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___CXX03___ALGORITHM_UPPER_BOUND_H -#define _LIBCPP___CXX03___ALGORITHM_UPPER_BOUND_H - -#include <__cxx03/__algorithm/comp.h> -#include <__cxx03/__algorithm/half_positive.h> -#include <__cxx03/__algorithm/iterator_operations.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/identity.h> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/distance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Iter -__upper_bound(_Iter __first, _Sent __last, const _Tp& __value, _Compare&& __comp, _Proj&& __proj) { - auto __len = _IterOps<_AlgPolicy>::distance(__first, __last); - while (__len != 0) { - auto __half_len = std::__half_positive(__len); - auto __mid = _IterOps<_AlgPolicy>::next(__first, __half_len); - if (std::__invoke(__comp, __value, std::__invoke(__proj, *__mid))) - __len = __half_len; - else { - __first = ++__mid; - __len -= __half_len + 1; - } - } - return __first; -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value, _Compare __comp) { - static_assert(is_copy_constructible<_ForwardIterator>::value, "Iterator has to be copy constructible"); - return std::__upper_bound<_ClassicAlgPolicy>( - std::move(__first), std::move(__last), __value, std::move(__comp), std::__identity()); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _ForwardIterator -upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) { - return std::upper_bound(std::move(__first), std::move(__last), __value, __less<>()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ALGORITHM_UPPER_BOUND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__assert b/third_party/libcxx/include/c++/v1/__cxx03/__assert deleted file mode 100644 index f6c4d8e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__assert +++ /dev/null @@ -1,118 +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___CXX03___ASSERT -#define _LIBCPP___CXX03___ASSERT - -#include <__assertion_handler> // Note: this include is generated by CMake and is potentially vendor-provided. -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define _LIBCPP_ASSERT(expression, message) \ - (__builtin_expect(static_cast(expression), 1) \ - ? (void)0 \ - : _LIBCPP_ASSERTION_HANDLER(__FILE__ ":" _LIBCPP_TOSTRING(__LINE__) ": assertion " _LIBCPP_TOSTRING( \ - expression) " failed: " message "\n")) - -// TODO: __builtin_assume can currently inhibit optimizations. Until this has been fixed and we can add -// assumptions without a clear optimization intent, disable that to avoid worsening the code generation. -// See https://discourse.llvm.org/t/llvm-assume-blocks-optimization/71609 for a discussion. -#if 0 && __has_builtin(__builtin_assume) -# define _LIBCPP_ASSUME(expression) \ - (_LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wassume") \ - __builtin_assume(static_cast(expression)) _LIBCPP_DIAGNOSTIC_POP) -#else -# define _LIBCPP_ASSUME(expression) ((void)0) -#endif - -// clang-format off -// Fast hardening mode checks. - -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST - -// Enabled checks. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -// Disabled checks. -// On most modern platforms, dereferencing a null pointer does not lead to an actual memory access. -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSUME(expression) -// Overlapping ranges will make algorithms produce incorrect results but don't directly lead to a security -// vulnerability. -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSUME(expression) - -// Extensive hardening mode checks. - -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_EXTENSIVE - -// Enabled checks. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message) -// Disabled checks. -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) _LIBCPP_ASSUME(expression) - -// Debug hardening mode checks. - -#elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG - -// All checks enabled. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) _LIBCPP_ASSERT(expression, message) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSERT(expression, message) - -// Disable all checks if hardening is not enabled. - -#else - -// All checks disabled. -# define _LIBCPP_ASSERT_VALID_INPUT_RANGE(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_NON_NULL(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_VALID_DEALLOCATION(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_PEDANTIC(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_INTERNAL(expression, message) _LIBCPP_ASSUME(expression) -# define _LIBCPP_ASSERT_UNCATEGORIZED(expression, message) _LIBCPP_ASSUME(expression) - -#endif // _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST -// clang-format on - -#endif // _LIBCPP___CXX03___ASSERT diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/aliases.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/aliases.h deleted file mode 100644 index 4cb75ee..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/aliases.h +++ /dev/null @@ -1,85 +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___CXX03___ATOMIC_ALIASES_H -#define _LIBCPP___CXX03___ATOMIC_ALIASES_H - -#include <__cxx03/__atomic/atomic.h> -#include <__cxx03/__atomic/atomic_lock_free.h> -#include <__cxx03/__atomic/contention_t.h> -#include <__cxx03/__atomic/is_always_lock_free.h> -#include <__cxx03/__config> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/make_unsigned.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -using atomic_bool = atomic; -using atomic_char = atomic; -using atomic_schar = atomic; -using atomic_uchar = atomic; -using atomic_short = atomic; -using atomic_ushort = atomic; -using atomic_int = atomic; -using atomic_uint = atomic; -using atomic_long = atomic; -using atomic_ulong = atomic; -using atomic_llong = atomic; -using atomic_ullong = atomic; -#ifndef _LIBCPP_HAS_NO_CHAR8_T -using atomic_char8_t = atomic; -#endif -using atomic_char16_t = atomic; -using atomic_char32_t = atomic; -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using atomic_wchar_t = atomic; -#endif - -using atomic_int_least8_t = atomic; -using atomic_uint_least8_t = atomic; -using atomic_int_least16_t = atomic; -using atomic_uint_least16_t = atomic; -using atomic_int_least32_t = atomic; -using atomic_uint_least32_t = atomic; -using atomic_int_least64_t = atomic; -using atomic_uint_least64_t = atomic; - -using atomic_int_fast8_t = atomic; -using atomic_uint_fast8_t = atomic; -using atomic_int_fast16_t = atomic; -using atomic_uint_fast16_t = atomic; -using atomic_int_fast32_t = atomic; -using atomic_uint_fast32_t = atomic; -using atomic_int_fast64_t = atomic; -using atomic_uint_fast64_t = atomic; - -using atomic_int8_t = atomic< int8_t>; -using atomic_uint8_t = atomic; -using atomic_int16_t = atomic< int16_t>; -using atomic_uint16_t = atomic; -using atomic_int32_t = atomic< int32_t>; -using atomic_uint32_t = atomic; -using atomic_int64_t = atomic< int64_t>; -using atomic_uint64_t = atomic; - -using atomic_intptr_t = atomic; -using atomic_uintptr_t = atomic; -using atomic_size_t = atomic; -using atomic_ptrdiff_t = atomic; -using atomic_intmax_t = atomic; -using atomic_uintmax_t = atomic; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_ALIASES_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic.h deleted file mode 100644 index f2e8493..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic.h +++ /dev/null @@ -1,484 +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___CXX03___ATOMIC_ATOMIC_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_H - -#include <__cxx03/__atomic/atomic_base.h> -#include <__cxx03/__atomic/check_memory_order.h> -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/operations.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/is_floating_point.h> -#include <__cxx03/__type_traits/is_function.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/remove_const.h> -#include <__cxx03/__type_traits/remove_pointer.h> -#include <__cxx03/__type_traits/remove_volatile.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstring> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct atomic : public __atomic_base<_Tp> { - using __base = __atomic_base<_Tp>; - - _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI atomic(_Tp __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) volatile _NOEXCEPT { - __base::store(__d); - return __d; - } - _LIBCPP_HIDE_FROM_ABI _Tp operator=(_Tp __d) _NOEXCEPT { - __base::store(__d); - return __d; - } - - atomic& operator=(const atomic&) = delete; - atomic& operator=(const atomic&) volatile = delete; -}; - -// atomic - -template -struct atomic<_Tp*> : public __atomic_base<_Tp*> { - using __base = __atomic_base<_Tp*>; - - using difference_type = ptrdiff_t; - - _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI atomic(_Tp* __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp* operator=(_Tp* __d) volatile _NOEXCEPT { - __base::store(__d); - return __d; - } - _LIBCPP_HIDE_FROM_ABI _Tp* operator=(_Tp* __d) _NOEXCEPT { - __base::store(__d); - return __d; - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_add(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* fetch_sub(ptrdiff_t __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - // __atomic_fetch_add accepts function pointers, guard against them. - static_assert(!is_function<__remove_pointer_t<_Tp> >::value, "Pointer to function isn't allowed"); - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp* operator++(int) volatile _NOEXCEPT { return fetch_add(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++(int) _NOEXCEPT { return fetch_add(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--(int) volatile _NOEXCEPT { return fetch_sub(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--(int) _NOEXCEPT { return fetch_sub(1); } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++() volatile _NOEXCEPT { return fetch_add(1) + 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator++() _NOEXCEPT { return fetch_add(1) + 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--() volatile _NOEXCEPT { return fetch_sub(1) - 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator--() _NOEXCEPT { return fetch_sub(1) - 1; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator+=(ptrdiff_t __op) volatile _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator+=(ptrdiff_t __op) _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator-=(ptrdiff_t __op) volatile _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp* operator-=(ptrdiff_t __op) _NOEXCEPT { return fetch_sub(__op) - __op; } - - atomic& operator=(const atomic&) = delete; - atomic& operator=(const atomic&) volatile = delete; -}; - -// atomic_is_lock_free - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_is_lock_free(const volatile atomic<_Tp>* __o) _NOEXCEPT { - return __o->is_lock_free(); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_is_lock_free(const atomic<_Tp>* __o) _NOEXCEPT { - return __o->is_lock_free(); -} - -// atomic_init - -template -_LIBCPP_HIDE_FROM_ABI void atomic_init(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - std::__cxx_atomic_init(std::addressof(__o->__a_), __d); -} - -template -_LIBCPP_HIDE_FROM_ABI void atomic_init(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - std::__cxx_atomic_init(std::addressof(__o->__a_), __d); -} - -// atomic_store - -template -_LIBCPP_HIDE_FROM_ABI void atomic_store(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - __o->store(__d); -} - -template -_LIBCPP_HIDE_FROM_ABI void atomic_store(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - __o->store(__d); -} - -// atomic_store_explicit - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_store_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - __o->store(__d, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI void -atomic_store_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - __o->store(__d, __m); -} - -// atomic_load - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_load(const volatile atomic<_Tp>* __o) _NOEXCEPT { - return __o->load(); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_load(const atomic<_Tp>* __o) _NOEXCEPT { - return __o->load(); -} - -// atomic_load_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_load_explicit(const volatile atomic<_Tp>* __o, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->load(__m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_load_explicit(const atomic<_Tp>* __o, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->load(__m); -} - -// atomic_exchange - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_exchange(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->exchange(__d); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_exchange(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->exchange(__d); -} - -// atomic_exchange_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_exchange_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT { - return __o->exchange(__d, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_exchange_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __d, memory_order __m) _NOEXCEPT { - return __o->exchange(__d, __m); -} - -// atomic_compare_exchange_weak - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_weak(*__e, __d); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak( - atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_weak(*__e, __d); -} - -// atomic_compare_exchange_strong - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_strong(*__e, __d); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong( - atomic<_Tp>* __o, typename atomic<_Tp>::value_type* __e, typename atomic<_Tp>::value_type __d) _NOEXCEPT { - return __o->compare_exchange_strong(*__e, __d); -} - -// atomic_compare_exchange_weak_explicit - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak_explicit( - volatile atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_weak(*__e, __d, __s, __f); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_weak_explicit( - atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_weak(*__e, __d, __s, __f); -} - -// atomic_compare_exchange_strong_explicit - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong_explicit( - volatile atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_strong(*__e, __d, __s, __f); -} - -template -_LIBCPP_HIDE_FROM_ABI bool atomic_compare_exchange_strong_explicit( - atomic<_Tp>* __o, - typename atomic<_Tp>::value_type* __e, - typename atomic<_Tp>::value_type __d, - memory_order __s, - memory_order __f) _NOEXCEPT _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return __o->compare_exchange_strong(*__e, __d, __s, __f); -} - -// atomic_wait - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_wait(const volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v) _NOEXCEPT { - return __o->wait(__v); -} - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_wait(const atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v) _NOEXCEPT { - return __o->wait(__v); -} - -// atomic_wait_explicit - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_wait_explicit(const volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->wait(__v, __m); -} - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_wait_explicit(const atomic<_Tp>* __o, typename atomic<_Tp>::value_type __v, memory_order __m) _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return __o->wait(__v, __m); -} - -// atomic_notify_one - -template -_LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_notify_one(volatile atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_one(); -} -template -_LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_one(); -} - -// atomic_notify_all - -template -_LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_notify_all(volatile atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_all(); -} -template -_LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -atomic_notify_all(atomic<_Tp>* __o) _NOEXCEPT { - __o->notify_all(); -} - -// atomic_fetch_add - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_add(volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_add(__op); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_add(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_add(__op); -} - -// atomic_fetch_add_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_add_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_add(__op, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_add_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_add(__op, __m); -} - -// atomic_fetch_sub - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_sub(volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_sub(__op); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_sub(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op) _NOEXCEPT { - return __o->fetch_sub(__op); -} - -// atomic_fetch_sub_explicit - -template -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_sub_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_sub(__op, __m); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_sub_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::difference_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_sub(__op, __m); -} - -// atomic_fetch_and - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_and(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_and(__op); -} - -// atomic_fetch_and_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_and_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_and(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_and_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_and(__op, __m); -} - -// atomic_fetch_or - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_or(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_or(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_or(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_or(__op); -} - -// atomic_fetch_or_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_or_explicit(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_or(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_or_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_or(__op, __m); -} - -// atomic_fetch_xor - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor(volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_xor(__op); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op) _NOEXCEPT { - return __o->fetch_xor(__op); -} - -// atomic_fetch_xor_explicit - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp atomic_fetch_xor_explicit( - volatile atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_xor(__op, __m); -} - -template ::value && !is_same<_Tp, bool>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI _Tp -atomic_fetch_xor_explicit(atomic<_Tp>* __o, typename atomic<_Tp>::value_type __op, memory_order __m) _NOEXCEPT { - return __o->fetch_xor(__op, __m); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_base.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_base.h deleted file mode 100644 index d79ef7d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_base.h +++ /dev/null @@ -1,217 +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___CXX03___ATOMIC_ATOMIC_BASE_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_BASE_H - -#include <__cxx03/__atomic/atomic_sync.h> -#include <__cxx03/__atomic/check_memory_order.h> -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__atomic/is_always_lock_free.h> -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_nothrow_constructible.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/version> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value && !is_same<_Tp, bool>::value> -struct __atomic_base // false -{ - mutable __cxx_atomic_impl<_Tp> __a_; - - using value_type = _Tp; - - _LIBCPP_HIDE_FROM_ABI bool is_lock_free() const volatile _NOEXCEPT { - return __cxx_atomic_is_lock_free(sizeof(__cxx_atomic_impl<_Tp>)); - } - _LIBCPP_HIDE_FROM_ABI bool is_lock_free() const _NOEXCEPT { - return static_cast<__atomic_base const volatile*>(this)->is_lock_free(); - } - _LIBCPP_HIDE_FROM_ABI void store(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - std::__cxx_atomic_store(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI void store(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT - _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) { - std::__cxx_atomic_store(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp load(memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return std::__cxx_atomic_load(std::addressof(__a_), __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp load(memory_order __m = memory_order_seq_cst) const _NOEXCEPT - _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) { - return std::__cxx_atomic_load(std::addressof(__a_), __m); - } - _LIBCPP_HIDE_FROM_ABI operator _Tp() const volatile _NOEXCEPT { return load(); } - _LIBCPP_HIDE_FROM_ABI operator _Tp() const _NOEXCEPT { return load(); } - _LIBCPP_HIDE_FROM_ABI _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_exchange(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp exchange(_Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_exchange(std::addressof(__a_), __d, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) volatile _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) volatile _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __s, memory_order __f) _NOEXCEPT - _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__s, __f) { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __s, __f); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_weak(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_weak(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - _LIBCPP_HIDE_FROM_ABI bool - compare_exchange_strong(_Tp& __e, _Tp __d, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_compare_exchange_strong(std::addressof(__a_), std::addressof(__e), __d, __m, __m); - } - - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void wait(_Tp __v, memory_order __m = memory_order_seq_cst) const - volatile _NOEXCEPT { - std::__atomic_wait(*this, __v, __m); - } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void - wait(_Tp __v, memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - std::__atomic_wait(*this, __v, __m); - } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_one() volatile _NOEXCEPT { - std::__atomic_notify_one(*this); - } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_one() _NOEXCEPT { std::__atomic_notify_one(*this); } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_all() volatile _NOEXCEPT { - std::__atomic_notify_all(*this); - } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_all() _NOEXCEPT { std::__atomic_notify_all(*this); } - - _LIBCPP_HIDE_FROM_ABI __atomic_base() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI __atomic_base(_Tp __d) _NOEXCEPT : __a_(__d) {} - - __atomic_base(const __atomic_base&) = delete; -}; - -// atomic - -template -struct __atomic_base<_Tp, true> : public __atomic_base<_Tp, false> { - using __base = __atomic_base<_Tp, false>; - - using difference_type = typename __base::value_type; - - _LIBCPP_HIDE_FROM_ABI __atomic_base() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI __atomic_base(_Tp __d) _NOEXCEPT : __base(__d) {} - - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_add(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_add(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_sub(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_sub(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_and(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_and(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_and(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_or(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_or(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_or(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return std::__cxx_atomic_fetch_xor(std::addressof(this->__a_), __op, __m); - } - _LIBCPP_HIDE_FROM_ABI _Tp fetch_xor(_Tp __op, memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return std::__cxx_atomic_fetch_xor(std::addressof(this->__a_), __op, __m); - } - - _LIBCPP_HIDE_FROM_ABI _Tp operator++(int) volatile _NOEXCEPT { return fetch_add(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++(int) _NOEXCEPT { return fetch_add(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--(int) volatile _NOEXCEPT { return fetch_sub(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--(int) _NOEXCEPT { return fetch_sub(_Tp(1)); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++() volatile _NOEXCEPT { return fetch_add(_Tp(1)) + _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator++() _NOEXCEPT { return fetch_add(_Tp(1)) + _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--() volatile _NOEXCEPT { return fetch_sub(_Tp(1)) - _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator--() _NOEXCEPT { return fetch_sub(_Tp(1)) - _Tp(1); } - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) volatile _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator+=(_Tp __op) _NOEXCEPT { return fetch_add(__op) + __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) volatile _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator-=(_Tp __op) _NOEXCEPT { return fetch_sub(__op) - __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator&=(_Tp __op) volatile _NOEXCEPT { return fetch_and(__op) & __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator&=(_Tp __op) _NOEXCEPT { return fetch_and(__op) & __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator|=(_Tp __op) volatile _NOEXCEPT { return fetch_or(__op) | __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator|=(_Tp __op) _NOEXCEPT { return fetch_or(__op) | __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator^=(_Tp __op) volatile _NOEXCEPT { return fetch_xor(__op) ^ __op; } - _LIBCPP_HIDE_FROM_ABI _Tp operator^=(_Tp __op) _NOEXCEPT { return fetch_xor(__op) ^ __op; } -}; - -// Here we need _IsIntegral because the default template argument is not enough -// e.g __atomic_base is __atomic_base, which inherits from -// __atomic_base and the caller of the wait function is -// __atomic_base. So specializing __atomic_base<_Tp> does not work -template -struct __atomic_waitable_traits<__atomic_base<_Tp, _IsIntegral> > { - static _LIBCPP_HIDE_FROM_ABI _Tp __atomic_load(const __atomic_base<_Tp, _IsIntegral>& __a, memory_order __order) { - return __a.load(__order); - } - - static _LIBCPP_HIDE_FROM_ABI _Tp - __atomic_load(const volatile __atomic_base<_Tp, _IsIntegral>& __this, memory_order __order) { - return __this.load(__order); - } - - static _LIBCPP_HIDE_FROM_ABI const __cxx_atomic_impl<_Tp>* - __atomic_contention_address(const __atomic_base<_Tp, _IsIntegral>& __a) { - return std::addressof(__a.__a_); - } - - static _LIBCPP_HIDE_FROM_ABI const volatile __cxx_atomic_impl<_Tp>* - __atomic_contention_address(const volatile __atomic_base<_Tp, _IsIntegral>& __this) { - return std::addressof(__this.__a_); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_BASE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_flag.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_flag.h deleted file mode 100644 index 316e014..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_flag.h +++ /dev/null @@ -1,184 +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___CXX03___ATOMIC_ATOMIC_FLAG_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_FLAG_H - -#include <__cxx03/__atomic/atomic_sync.h> -#include <__cxx03/__atomic/contention_t.h> -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__thread/support.h> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -struct atomic_flag { - __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE> __a_; - - _LIBCPP_HIDE_FROM_ABI bool test(memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT { - return _LIBCPP_ATOMIC_FLAG_TYPE(true) == __cxx_atomic_load(&__a_, __m); - } - _LIBCPP_HIDE_FROM_ABI bool test(memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - return _LIBCPP_ATOMIC_FLAG_TYPE(true) == __cxx_atomic_load(&__a_, __m); - } - - _LIBCPP_HIDE_FROM_ABI bool test_and_set(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m); - } - _LIBCPP_HIDE_FROM_ABI bool test_and_set(memory_order __m = memory_order_seq_cst) _NOEXCEPT { - return __cxx_atomic_exchange(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(true), __m); - } - _LIBCPP_HIDE_FROM_ABI void clear(memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT { - __cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m); - } - _LIBCPP_HIDE_FROM_ABI void clear(memory_order __m = memory_order_seq_cst) _NOEXCEPT { - __cxx_atomic_store(&__a_, _LIBCPP_ATOMIC_FLAG_TYPE(false), __m); - } - - _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void - wait(bool __v, memory_order __m = memory_order_seq_cst) const volatile _NOEXCEPT { - std::__atomic_wait(*this, _LIBCPP_ATOMIC_FLAG_TYPE(__v), __m); - } - _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void - wait(bool __v, memory_order __m = memory_order_seq_cst) const _NOEXCEPT { - std::__atomic_wait(*this, _LIBCPP_ATOMIC_FLAG_TYPE(__v), __m); - } - _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_one() volatile _NOEXCEPT { - std::__atomic_notify_one(*this); - } - _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_one() _NOEXCEPT { - std::__atomic_notify_one(*this); - } - _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_all() volatile _NOEXCEPT { - std::__atomic_notify_all(*this); - } - _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void notify_all() _NOEXCEPT { - std::__atomic_notify_all(*this); - } - atomic_flag() _NOEXCEPT = default; - - _LIBCPP_HIDE_FROM_ABI atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION - - atomic_flag(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) volatile = delete; -}; - -template <> -struct __atomic_waitable_traits { - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATOMIC_FLAG_TYPE __atomic_load(const atomic_flag& __a, memory_order __order) { - return std::__cxx_atomic_load(&__a.__a_, __order); - } - - static _LIBCPP_HIDE_FROM_ABI _LIBCPP_ATOMIC_FLAG_TYPE - __atomic_load(const volatile atomic_flag& __a, memory_order __order) { - return std::__cxx_atomic_load(&__a.__a_, __order); - } - - static _LIBCPP_HIDE_FROM_ABI const __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE>* - __atomic_contention_address(const atomic_flag& __a) { - return std::addressof(__a.__a_); - } - - static _LIBCPP_HIDE_FROM_ABI const volatile __cxx_atomic_impl<_LIBCPP_ATOMIC_FLAG_TYPE>* - __atomic_contention_address(const volatile atomic_flag& __a) { - return std::addressof(__a.__a_); - } -}; - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test(const volatile atomic_flag* __o) _NOEXCEPT { return __o->test(); } - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test(const atomic_flag* __o) _NOEXCEPT { return __o->test(); } - -inline _LIBCPP_HIDE_FROM_ABI bool -atomic_flag_test_explicit(const volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_explicit(const atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set(volatile atomic_flag* __o) _NOEXCEPT { - return __o->test_and_set(); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set(atomic_flag* __o) _NOEXCEPT { return __o->test_and_set(); } - -inline _LIBCPP_HIDE_FROM_ABI bool -atomic_flag_test_and_set_explicit(volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test_and_set(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI bool atomic_flag_test_and_set_explicit(atomic_flag* __o, memory_order __m) _NOEXCEPT { - return __o->test_and_set(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear(volatile atomic_flag* __o) _NOEXCEPT { __o->clear(); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear(atomic_flag* __o) _NOEXCEPT { __o->clear(); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear_explicit(volatile atomic_flag* __o, memory_order __m) _NOEXCEPT { - __o->clear(__m); -} - -inline _LIBCPP_HIDE_FROM_ABI void atomic_flag_clear_explicit(atomic_flag* __o, memory_order __m) _NOEXCEPT { - __o->clear(__m); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_wait(const volatile atomic_flag* __o, bool __v) _NOEXCEPT { - __o->wait(__v); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_wait(const atomic_flag* __o, bool __v) _NOEXCEPT { - __o->wait(__v); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_wait_explicit(const volatile atomic_flag* __o, bool __v, memory_order __m) _NOEXCEPT { - __o->wait(__v, __m); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_wait_explicit(const atomic_flag* __o, bool __v, memory_order __m) _NOEXCEPT { - __o->wait(__v, __m); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_notify_one(volatile atomic_flag* __o) _NOEXCEPT { - __o->notify_one(); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_notify_one(atomic_flag* __o) _NOEXCEPT { - __o->notify_one(); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_notify_all(volatile atomic_flag* __o) _NOEXCEPT { - __o->notify_all(); -} - -inline _LIBCPP_DEPRECATED_ATOMIC_SYNC _LIBCPP_HIDE_FROM_ABI _LIBCPP_AVAILABILITY_SYNC void -atomic_flag_notify_all(atomic_flag* __o) _NOEXCEPT { - __o->notify_all(); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_FLAG_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_init.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_init.h deleted file mode 100644 index 16b2752..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_init.h +++ /dev/null @@ -1,21 +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___CXX03___ATOMIC_ATOMIC_INIT_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_INIT_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define ATOMIC_FLAG_INIT {false} -#define ATOMIC_VAR_INIT(__v) {__v} - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_INIT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_lock_free.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_lock_free.h deleted file mode 100644 index 297d148..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_lock_free.h +++ /dev/null @@ -1,48 +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___CXX03___ATOMIC_ATOMIC_LOCK_FREE_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_LOCK_FREE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#if defined(__CLANG_ATOMIC_BOOL_LOCK_FREE) -# define ATOMIC_BOOL_LOCK_FREE __CLANG_ATOMIC_BOOL_LOCK_FREE -# define ATOMIC_CHAR_LOCK_FREE __CLANG_ATOMIC_CHAR_LOCK_FREE -# ifndef _LIBCPP_HAS_NO_CHAR8_T -# define ATOMIC_CHAR8_T_LOCK_FREE __CLANG_ATOMIC_CHAR8_T_LOCK_FREE -# endif -# define ATOMIC_CHAR16_T_LOCK_FREE __CLANG_ATOMIC_CHAR16_T_LOCK_FREE -# define ATOMIC_CHAR32_T_LOCK_FREE __CLANG_ATOMIC_CHAR32_T_LOCK_FREE -# define ATOMIC_WCHAR_T_LOCK_FREE __CLANG_ATOMIC_WCHAR_T_LOCK_FREE -# define ATOMIC_SHORT_LOCK_FREE __CLANG_ATOMIC_SHORT_LOCK_FREE -# define ATOMIC_INT_LOCK_FREE __CLANG_ATOMIC_INT_LOCK_FREE -# define ATOMIC_LONG_LOCK_FREE __CLANG_ATOMIC_LONG_LOCK_FREE -# define ATOMIC_LLONG_LOCK_FREE __CLANG_ATOMIC_LLONG_LOCK_FREE -# define ATOMIC_POINTER_LOCK_FREE __CLANG_ATOMIC_POINTER_LOCK_FREE -#elif defined(__GCC_ATOMIC_BOOL_LOCK_FREE) -# define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE -# define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE -# ifndef _LIBCPP_HAS_NO_CHAR8_T -# define ATOMIC_CHAR8_T_LOCK_FREE __GCC_ATOMIC_CHAR8_T_LOCK_FREE -# endif -# define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE -# define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE -# define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE -# define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE -# define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE -# define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE -# define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE -# define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE -#endif - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_LOCK_FREE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_sync.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_sync.h deleted file mode 100644 index ca029f0..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/atomic_sync.h +++ /dev/null @@ -1,205 +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___CXX03___ATOMIC_ATOMIC_SYNC_H -#define _LIBCPP___CXX03___ATOMIC_ATOMIC_SYNC_H - -#include <__cxx03/__atomic/contention_t.h> -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__atomic/to_gcc_order.h> -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__thread/poll_with_backoff.h> -#include <__cxx03/__thread/support.h> -#include <__cxx03/__type_traits/conjunction.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/void_t.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/cstring> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// The customisation points to enable the following functions: -// - __atomic_wait -// - __atomic_wait_unless -// - __atomic_notify_one -// - __atomic_notify_all -// Note that std::atomic::wait was back-ported to C++03 -// The below implementations look ugly to support C++03 -template -struct __atomic_waitable_traits { - template - static void __atomic_load(_AtomicWaitable&&, memory_order) = delete; - - template - static void __atomic_contention_address(_AtomicWaitable&&) = delete; -}; - -template -struct __atomic_waitable : false_type {}; - -template -struct __atomic_waitable< _Tp, - __void_t >::__atomic_load( - std::declval(), std::declval())), - decltype(__atomic_waitable_traits<__decay_t<_Tp> >::__atomic_contention_address( - std::declval()))> > : true_type {}; - -template -struct __atomic_wait_poll_impl { - const _AtomicWaitable& __a_; - _Poll __poll_; - memory_order __order_; - - _LIBCPP_HIDE_FROM_ABI bool operator()() const { - auto __current_val = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_load(__a_, __order_); - return __poll_(__current_val); - } -}; - -#ifndef _LIBCPP_HAS_NO_THREADS - -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_one(void const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void __cxx_atomic_notify_all(void const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t -__libcpp_atomic_monitor(void const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__libcpp_atomic_wait(void const volatile*, __cxx_contention_t) _NOEXCEPT; - -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__cxx_atomic_notify_one(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__cxx_atomic_notify_all(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t -__libcpp_atomic_monitor(__cxx_atomic_contention_t const volatile*) _NOEXCEPT; -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_EXPORTED_FROM_ABI void -__libcpp_atomic_wait(__cxx_atomic_contention_t const volatile*, __cxx_contention_t) _NOEXCEPT; - -template -struct __atomic_wait_backoff_impl { - const _AtomicWaitable& __a_; - _Poll __poll_; - memory_order __order_; - - using __waitable_traits = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; - - _LIBCPP_AVAILABILITY_SYNC - _LIBCPP_HIDE_FROM_ABI bool - __update_monitor_val_and_poll(__cxx_atomic_contention_t const volatile*, __cxx_contention_t& __monitor_val) const { - // In case the contention type happens to be __cxx_atomic_contention_t, i.e. __cxx_atomic_impl, - // the platform wait is directly monitoring the atomic value itself. - // `__poll_` takes the current value of the atomic as an in-out argument - // to potentially modify it. After it returns, `__monitor` has a value - // which can be safely waited on by `std::__libcpp_atomic_wait` without any - // ABA style issues. - __monitor_val = __waitable_traits::__atomic_load(__a_, __order_); - return __poll_(__monitor_val); - } - - _LIBCPP_AVAILABILITY_SYNC - _LIBCPP_HIDE_FROM_ABI bool - __update_monitor_val_and_poll(void const volatile* __contention_address, __cxx_contention_t& __monitor_val) const { - // In case the contention type is anything else, platform wait is monitoring a __cxx_atomic_contention_t - // from the global pool, the monitor comes from __libcpp_atomic_monitor - __monitor_val = std::__libcpp_atomic_monitor(__contention_address); - auto __current_val = __waitable_traits::__atomic_load(__a_, __order_); - return __poll_(__current_val); - } - - _LIBCPP_AVAILABILITY_SYNC - _LIBCPP_HIDE_FROM_ABI bool operator()(chrono::nanoseconds __elapsed) const { - if (__elapsed > chrono::microseconds(64)) { - auto __contention_address = __waitable_traits::__atomic_contention_address(__a_); - __cxx_contention_t __monitor_val; - if (__update_monitor_val_and_poll(__contention_address, __monitor_val)) - return true; - std::__libcpp_atomic_wait(__contention_address, __monitor_val); - } else if (__elapsed > chrono::microseconds(4)) - __libcpp_thread_yield(); - else { - } // poll - return false; - } -}; - -// The semantics of this function are similar to `atomic`'s -// `.wait(T old, std::memory_order order)`, but instead of having a hardcoded -// predicate (is the loaded value unequal to `old`?), the predicate function is -// specified as an argument. The loaded value is given as an in-out argument to -// the predicate. If the predicate function returns `true`, -// `__atomic_wait_unless` will return. If the predicate function returns -// `false`, it must set the argument to its current understanding of the atomic -// value. The predicate function must not return `false` spuriously. -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -__atomic_wait_unless(const _AtomicWaitable& __a, _Poll&& __poll, memory_order __order) { - static_assert(__atomic_waitable<_AtomicWaitable>::value, ""); - __atomic_wait_poll_impl<_AtomicWaitable, __decay_t<_Poll> > __poll_impl = {__a, __poll, __order}; - __atomic_wait_backoff_impl<_AtomicWaitable, __decay_t<_Poll> > __backoff_fn = {__a, __poll, __order}; - std::__libcpp_thread_poll_with_backoff(__poll_impl, __backoff_fn); -} - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>::value, ""); - std::__cxx_atomic_notify_one(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a)); -} - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable& __a) { - static_assert(__atomic_waitable<_AtomicWaitable>::value, ""); - std::__cxx_atomic_notify_all(__atomic_waitable_traits<__decay_t<_AtomicWaitable> >::__atomic_contention_address(__a)); -} - -#else // _LIBCPP_HAS_NO_THREADS - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_wait_unless(const _AtomicWaitable& __a, _Poll&& __poll, memory_order __order) { - __atomic_wait_poll_impl<_AtomicWaitable, __decay_t<_Poll> > __poll_fn = {__a, __poll, __order}; - std::__libcpp_thread_poll_with_backoff(__poll_fn, __spinning_backoff_policy()); -} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_one(const _AtomicWaitable&) {} - -template -_LIBCPP_HIDE_FROM_ABI void __atomic_notify_all(const _AtomicWaitable&) {} - -#endif // _LIBCPP_HAS_NO_THREADS - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_nonatomic_compare_equal(_Tp const& __lhs, _Tp const& __rhs) { - return std::memcmp(std::addressof(__lhs), std::addressof(__rhs), sizeof(_Tp)) == 0; -} - -template -struct __atomic_compare_unequal_to { - _Tp __val_; - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __arg) const { - return !std::__cxx_nonatomic_compare_equal(__arg, __val_); - } -}; - -template -_LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI void -__atomic_wait(_AtomicWaitable& __a, _Up __val, memory_order __order) { - static_assert(__atomic_waitable<_AtomicWaitable>::value, ""); - __atomic_compare_unequal_to<_Up> __nonatomic_equal = {__val}; - std::__atomic_wait_unless(__a, __nonatomic_equal, __order); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_ATOMIC_SYNC_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/check_memory_order.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/check_memory_order.h deleted file mode 100644 index 5661efd..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/check_memory_order.h +++ /dev/null @@ -1,34 +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___CXX03___ATOMIC_CHECK_MEMORY_ORDER_H -#define _LIBCPP___CXX03___ATOMIC_CHECK_MEMORY_ORDER_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define _LIBCPP_CHECK_STORE_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_consume || __m == memory_order_acquire || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_LOAD_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_release || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_EXCHANGE_MEMORY_ORDER(__m, __f) \ - _LIBCPP_DIAGNOSE_WARNING(__f == memory_order_release || __f == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#define _LIBCPP_CHECK_WAIT_MEMORY_ORDER(__m) \ - _LIBCPP_DIAGNOSE_WARNING(__m == memory_order_release || __m == memory_order_acq_rel, \ - "memory order argument to atomic operation is invalid") - -#endif // _LIBCPP___CXX03___ATOMIC_CHECK_MEMORY_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/contention_t.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/contention_t.h deleted file mode 100644 index c7ecf9d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/contention_t.h +++ /dev/null @@ -1,32 +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___CXX03___ATOMIC_CONTENTION_T_H -#define _LIBCPP___CXX03___ATOMIC_CONTENTION_T_H - -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__config> -#include <__cxx03/cstdint> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if defined(__linux__) || defined(__Fuchsia__) || (defined(_AIX) && !defined(__64BIT__)) -using __cxx_contention_t = int32_t; -#else -using __cxx_contention_t = int64_t; -#endif // __linux__ || __Fuchsia__ || (_AIX && !__64BIT__) - -using __cxx_atomic_contention_t = __cxx_atomic_impl<__cxx_contention_t>; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_CONTENTION_T_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/cxx_atomic_impl.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/cxx_atomic_impl.h deleted file mode 100644 index 4ec516b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/cxx_atomic_impl.h +++ /dev/null @@ -1,498 +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___CXX03___ATOMIC_CXX_ATOMIC_IMPL_H -#define _LIBCPP___CXX03___ATOMIC_CXX_ATOMIC_IMPL_H - -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__atomic/to_gcc_order.h> -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_trivially_copyable.h> -#include <__cxx03/__type_traits/remove_const.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if defined(_LIBCPP_HAS_GCC_ATOMIC_IMP) - -// [atomics.types.generic]p1 guarantees _Tp is trivially copyable. Because -// the default operator= in an object is not volatile, a byte-by-byte copy -// is required. -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_assign_volatile(_Tp& __a_value, _Tv const& __val) { - __a_value = __val; -} -template ::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_assign_volatile(_Tp volatile& __a_value, _Tv volatile const& __val) { - volatile char* __to = reinterpret_cast(std::addressof(__a_value)); - volatile char* __end = __to + sizeof(_Tp); - volatile const char* __from = reinterpret_cast(std::addressof(__val)); - while (__to != __end) - *__to++ = *__from++; -} - -template -struct __cxx_atomic_base_impl { - _LIBCPP_HIDE_FROM_ABI __cxx_atomic_base_impl() _NOEXCEPT : __a_value() {} - explicit __cxx_atomic_base_impl(_Tp value) _NOEXCEPT : __a_value(value) {} - _Tp __a_value; -}; - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __val) { - __cxx_atomic_assign_volatile(__a->__a_value, __val); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val) { - __a->__a_value = __val; -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_thread_fence(memory_order __order) { - __atomic_thread_fence(__to_gcc_order(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_signal_fence(memory_order __order) { - __atomic_signal_fence(__to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) { - __atomic_store(std::addressof(__a->__a_value), std::addressof(__val), __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_store(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) { - __atomic_store(std::addressof(__a->__a_value), std::addressof(__val), __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(const volatile __cxx_atomic_base_impl<_Tp>* __a, memory_order __order) { - _Tp __ret; - __atomic_load(std::addressof(__a->__a_value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(const volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp* __dst, memory_order __order) { - __atomic_load(std::addressof(__a->__a_value), __dst, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(const __cxx_atomic_base_impl<_Tp>* __a, _Tp* __dst, memory_order __order) { - __atomic_load(std::addressof(__a->__a_value), __dst, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(const __cxx_atomic_base_impl<_Tp>* __a, memory_order __order) { - _Tp __ret; - __atomic_load(std::addressof(__a->__a_value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) { - _Tp __ret; - __atomic_exchange( - std::addressof(__a->__a_value), std::addressof(__value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) { - _Tp __ret; - __atomic_exchange( - std::addressof(__a->__a_value), std::addressof(__value), std::addressof(__ret), __to_gcc_order(__order)); - return __ret; -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - volatile __cxx_atomic_base_impl<_Tp>* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - false, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - false, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - volatile __cxx_atomic_base_impl<_Tp>* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - true, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) { - return __atomic_compare_exchange( - std::addressof(__a->__a_value), - __expected, - std::addressof(__value), - true, - __to_gcc_order(__success), - __to_gcc_failure_order(__failure)); -} - -template -struct __skip_amt { - enum { value = 1 }; -}; - -template -struct __skip_amt<_Tp*> { - enum { value = sizeof(_Tp) }; -}; - -// FIXME: Haven't figured out what the spec says about using arrays with -// atomic_fetch_add. Force a failure rather than creating bad behavior. -template -struct __skip_amt<_Tp[]> {}; -template -struct __skip_amt<_Tp[n]> {}; - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(volatile __cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_add(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_add(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(volatile __cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_sub(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp>* __a, _Td __delta, memory_order __order) { - return __atomic_fetch_sub(std::addressof(__a->__a_value), __delta * __skip_amt<_Tp>::value, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_and(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_and(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_or(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_or(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(volatile __cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_xor(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) { - return __atomic_fetch_xor(std::addressof(__a->__a_value), __pattern, __to_gcc_order(__order)); -} - -# define __cxx_atomic_is_lock_free(__s) __atomic_is_lock_free(__s, 0) - -#elif defined(_LIBCPP_HAS_C_ATOMIC_IMP) - -template -struct __cxx_atomic_base_impl { - _LIBCPP_HIDE_FROM_ABI __cxx_atomic_base_impl() _NOEXCEPT : __a_value() {} - explicit __cxx_atomic_base_impl(_Tp __value) _NOEXCEPT : __a_value(__value) {} - _LIBCPP_DISABLE_EXTENSION_WARNING _Atomic(_Tp) __a_value; -}; - -# define __cxx_atomic_is_lock_free(__s) __c11_atomic_is_lock_free(__s) - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_thread_fence(memory_order __order) _NOEXCEPT { - __c11_atomic_thread_fence(static_cast<__memory_order_underlying_t>(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline void __cxx_atomic_signal_fence(memory_order __order) _NOEXCEPT { - __c11_atomic_signal_fence(static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val) _NOEXCEPT { - __c11_atomic_init(std::addressof(__a->__a_value), __val); -} -template -_LIBCPP_HIDE_FROM_ABI void __cxx_atomic_init(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val) _NOEXCEPT { - __c11_atomic_init(std::addressof(__a->__a_value), __val); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __val, memory_order __order) _NOEXCEPT { - __c11_atomic_store(std::addressof(__a->__a_value), __val, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_store(__cxx_atomic_base_impl<_Tp>* __a, _Tp __val, memory_order __order) _NOEXCEPT { - __c11_atomic_store(std::addressof(__a->__a_value), __val, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const volatile* __a, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - return __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp __cxx_atomic_load(__cxx_atomic_base_impl<_Tp> const* __a, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - return __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(__cxx_atomic_base_impl<_Tp> const volatile* __a, _Tp* __dst, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - *__dst = __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI void -__cxx_atomic_load_inplace(__cxx_atomic_base_impl<_Tp> const* __a, _Tp* __dst, memory_order __order) _NOEXCEPT { - using __ptr_type = __remove_const_t__a_value)>*; - *__dst = __c11_atomic_load( - const_cast<__ptr_type>(std::addressof(__a->__a_value)), static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __value, memory_order __order) _NOEXCEPT { - return __c11_atomic_exchange( - std::addressof(__a->__a_value), __value, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_exchange(__cxx_atomic_base_impl<_Tp>* __a, _Tp __value, memory_order __order) _NOEXCEPT { - return __c11_atomic_exchange( - std::addressof(__a->__a_value), __value, static_cast<__memory_order_underlying_t>(__order)); -} - -_LIBCPP_HIDE_FROM_ABI inline memory_order __to_failure_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_release - ? memory_order_relaxed - : (__order == memory_order_acq_rel ? memory_order_acquire : __order); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp> volatile* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) _NOEXCEPT { - return __c11_atomic_compare_exchange_strong( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_strong( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) - _NOEXCEPT { - return __c11_atomic_compare_exchange_strong( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} - -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp> volatile* __a, - _Tp* __expected, - _Tp __value, - memory_order __success, - memory_order __failure) _NOEXCEPT { - return __c11_atomic_compare_exchange_weak( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} -template -_LIBCPP_HIDE_FROM_ABI bool __cxx_atomic_compare_exchange_weak( - __cxx_atomic_base_impl<_Tp>* __a, _Tp* __expected, _Tp __value, memory_order __success, memory_order __failure) - _NOEXCEPT { - return __c11_atomic_compare_exchange_weak( - std::addressof(__a->__a_value), - __expected, - __value, - static_cast<__memory_order_underlying_t>(__success), - static_cast<__memory_order_underlying_t>(__to_failure_order(__failure))); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp>* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_add(__cxx_atomic_base_impl<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_add( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp>* __a, _Tp __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*> volatile* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp* -__cxx_atomic_fetch_sub(__cxx_atomic_base_impl<_Tp*>* __a, ptrdiff_t __delta, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_sub( - std::addressof(__a->__a_value), __delta, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_and( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_and(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_and( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_or( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_or(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_or( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp> volatile* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_xor( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} -template -_LIBCPP_HIDE_FROM_ABI _Tp -__cxx_atomic_fetch_xor(__cxx_atomic_base_impl<_Tp>* __a, _Tp __pattern, memory_order __order) _NOEXCEPT { - return __c11_atomic_fetch_xor( - std::addressof(__a->__a_value), __pattern, static_cast<__memory_order_underlying_t>(__order)); -} - -#endif // _LIBCPP_HAS_GCC_ATOMIC_IMP, _LIBCPP_HAS_C_ATOMIC_IMP - -template > -struct __cxx_atomic_impl : public _Base { - static_assert(is_trivially_copyable<_Tp>::value, "std::atomic requires that 'T' be a trivially copyable type"); - - _LIBCPP_HIDE_FROM_ABI __cxx_atomic_impl() _NOEXCEPT = default; - _LIBCPP_HIDE_FROM_ABI explicit __cxx_atomic_impl(_Tp __value) _NOEXCEPT : _Base(__value) {} -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_CXX_ATOMIC_IMPL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/fence.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/fence.h deleted file mode 100644 index 05eaa83..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/fence.h +++ /dev/null @@ -1,28 +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___CXX03___ATOMIC_FENCE_H -#define _LIBCPP___CXX03___ATOMIC_FENCE_H - -#include <__cxx03/__atomic/cxx_atomic_impl.h> -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI void atomic_thread_fence(memory_order __m) _NOEXCEPT { __cxx_atomic_thread_fence(__m); } - -inline _LIBCPP_HIDE_FROM_ABI void atomic_signal_fence(memory_order __m) _NOEXCEPT { __cxx_atomic_signal_fence(__m); } - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_FENCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/is_always_lock_free.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/is_always_lock_free.h deleted file mode 100644 index 45628ae..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/is_always_lock_free.h +++ /dev/null @@ -1,28 +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___CXX03___ATOMIC_IS_ALWAYS_LOCK_FREE_H -#define _LIBCPP___CXX03___ATOMIC_IS_ALWAYS_LOCK_FREE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __libcpp_is_always_lock_free { - // __atomic_always_lock_free is available in all Standard modes - static const bool __value = __atomic_always_lock_free(sizeof(_Tp), nullptr); -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_IS_ALWAYS_LOCK_FREE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/kill_dependency.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/kill_dependency.h deleted file mode 100644 index 1e0dfc8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/kill_dependency.h +++ /dev/null @@ -1,27 +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___CXX03___ATOMIC_KILL_DEPENDENCY_H -#define _LIBCPP___CXX03___ATOMIC_KILL_DEPENDENCY_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Tp kill_dependency(_Tp __y) _NOEXCEPT { - return __y; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_KILL_DEPENDENCY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/memory_order.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/memory_order.h deleted file mode 100644 index d610c86..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/memory_order.h +++ /dev/null @@ -1,40 +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___CXX03___ATOMIC_MEMORY_ORDER_H -#define _LIBCPP___CXX03___ATOMIC_MEMORY_ORDER_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/underlying_type.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Figure out what the underlying type for `memory_order` would be if it were -// declared as an unscoped enum (accounting for -fshort-enums). Use this result -// to pin the underlying type in C++20. -enum __legacy_memory_order { __mo_relaxed, __mo_consume, __mo_acquire, __mo_release, __mo_acq_rel, __mo_seq_cst }; - -using __memory_order_underlying_t = underlying_type<__legacy_memory_order>::type; - -enum memory_order { - memory_order_relaxed = __mo_relaxed, - memory_order_consume = __mo_consume, - memory_order_acquire = __mo_acquire, - memory_order_release = __mo_release, - memory_order_acq_rel = __mo_acq_rel, - memory_order_seq_cst = __mo_seq_cst, -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_MEMORY_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/to_gcc_order.h b/third_party/libcxx/include/c++/v1/__cxx03/__atomic/to_gcc_order.h deleted file mode 100644 index aa510c1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__atomic/to_gcc_order.h +++ /dev/null @@ -1,54 +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___CXX03___ATOMIC_TO_GCC_ORDER_H -#define _LIBCPP___CXX03___ATOMIC_TO_GCC_ORDER_H - -#include <__cxx03/__atomic/memory_order.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if defined(__ATOMIC_RELAXED) && defined(__ATOMIC_CONSUME) && defined(__ATOMIC_ACQUIRE) && \ - defined(__ATOMIC_RELEASE) && defined(__ATOMIC_ACQ_REL) && defined(__ATOMIC_SEQ_CST) - -_LIBCPP_HIDE_FROM_ABI inline int __to_gcc_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_relaxed - ? __ATOMIC_RELAXED - : (__order == memory_order_acquire - ? __ATOMIC_ACQUIRE - : (__order == memory_order_release - ? __ATOMIC_RELEASE - : (__order == memory_order_seq_cst - ? __ATOMIC_SEQ_CST - : (__order == memory_order_acq_rel ? __ATOMIC_ACQ_REL : __ATOMIC_CONSUME)))); -} - -_LIBCPP_HIDE_FROM_ABI inline int __to_gcc_failure_order(memory_order __order) { - // Avoid switch statement to make this a constexpr. - return __order == memory_order_relaxed - ? __ATOMIC_RELAXED - : (__order == memory_order_acquire - ? __ATOMIC_ACQUIRE - : (__order == memory_order_release - ? __ATOMIC_RELAXED - : (__order == memory_order_seq_cst - ? __ATOMIC_SEQ_CST - : (__order == memory_order_acq_rel ? __ATOMIC_ACQUIRE : __ATOMIC_CONSUME)))); -} - -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ATOMIC_TO_GCC_ORDER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/blsr.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/blsr.h deleted file mode 100644 index b8027d9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/blsr.h +++ /dev/null @@ -1,30 +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___CXX03___BIT_BLSR_H -#define _LIBCPP___CXX03___BIT_BLSR_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI unsigned __libcpp_blsr(unsigned __x) _NOEXCEPT { return __x ^ (__x & -__x); } - -inline _LIBCPP_HIDE_FROM_ABI unsigned long __libcpp_blsr(unsigned long __x) _NOEXCEPT { return __x ^ (__x & -__x); } - -inline _LIBCPP_HIDE_FROM_ABI unsigned long long __libcpp_blsr(unsigned long long __x) _NOEXCEPT { - return __x ^ (__x & -__x); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___BIT_BLSR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/countl.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/countl.h deleted file mode 100644 index 3f0161a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/countl.h +++ /dev/null @@ -1,96 +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 -// -//===----------------------------------------------------------------------===// - -// TODO: __builtin_clzg is available since Clang 19 and GCC 14. When support for older versions is dropped, we can -// refactor this code to exclusively use __builtin_clzg. - -#ifndef _LIBCPP___CXX03___BIT_COUNTL_H -#define _LIBCPP___CXX03___BIT_COUNTL_H - -#include <__cxx03/__bit/rotate.h> -#include <__cxx03/__config> -#include <__cxx03/__type_traits/is_unsigned_integer.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_clz(unsigned __x) _NOEXCEPT { return __builtin_clz(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_clz(unsigned long __x) _NOEXCEPT { - return __builtin_clzl(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_clz(unsigned long long __x) _NOEXCEPT { - return __builtin_clzll(__x); -} - -#ifndef _LIBCPP_HAS_NO_INT128 -inline _LIBCPP_HIDE_FROM_ABI int __libcpp_clz(__uint128_t __x) _NOEXCEPT { -# if __has_builtin(__builtin_clzg) - return __builtin_clzg(__x); -# else - // The function is written in this form due to C++ constexpr limitations. - // The algorithm: - // - Test whether any bit in the high 64-bits is set - // - No bits set: - // - The high 64-bits contain 64 leading zeros, - // - Add the result of the low 64-bits. - // - Any bits set: - // - The number of leading zeros of the input is the number of leading - // zeros in the high 64-bits. - return ((__x >> 64) == 0) ? (64 + __builtin_clzll(static_cast(__x))) - : __builtin_clzll(static_cast(__x >> 64)); -# endif -} -#endif // _LIBCPP_HAS_NO_INT128 - -template -_LIBCPP_HIDE_FROM_ABI int __countl_zero(_Tp __t) _NOEXCEPT { - static_assert(__libcpp_is_unsigned_integer<_Tp>::value, "__countl_zero requires an unsigned integer type"); -#if __has_builtin(__builtin_clzg) - return __builtin_clzg(__t, numeric_limits<_Tp>::digits); -#else // __has_builtin(__builtin_clzg) - if (__t == 0) - return numeric_limits<_Tp>::digits; - - if (sizeof(_Tp) <= sizeof(unsigned int)) - return std::__libcpp_clz(static_cast(__t)) - - (numeric_limits::digits - numeric_limits<_Tp>::digits); - else if (sizeof(_Tp) <= sizeof(unsigned long)) - return std::__libcpp_clz(static_cast(__t)) - - (numeric_limits::digits - numeric_limits<_Tp>::digits); - else if (sizeof(_Tp) <= sizeof(unsigned long long)) - return std::__libcpp_clz(static_cast(__t)) - - (numeric_limits::digits - numeric_limits<_Tp>::digits); - else { - int __ret = 0; - int __iter = 0; - const unsigned int __ulldigits = numeric_limits::digits; - while (true) { - __t = std::__rotl(__t, __ulldigits); - if ((__iter = std::__countl_zero(static_cast(__t))) != __ulldigits) - break; - __ret += __iter; - } - return __ret + __iter; - } -#endif // __has_builtin(__builtin_clzg) -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___BIT_COUNTL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/countr.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/countr.h deleted file mode 100644 index 2f5b559..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/countr.h +++ /dev/null @@ -1,67 +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 -// -//===----------------------------------------------------------------------===// - -// TODO: __builtin_ctzg is available since Clang 19 and GCC 14. When support for older versions is dropped, we can -// refactor this code to exclusively use __builtin_ctzg. - -#ifndef _LIBCPP___CXX03___BIT_COUNTR_H -#define _LIBCPP___CXX03___BIT_COUNTR_H - -#include <__cxx03/__bit/rotate.h> -#include <__cxx03/__config> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_ctz(unsigned __x) _NOEXCEPT { return __builtin_ctz(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_ctz(unsigned long __x) _NOEXCEPT { - return __builtin_ctzl(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI int __libcpp_ctz(unsigned long long __x) _NOEXCEPT { - return __builtin_ctzll(__x); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI int __countr_zero(_Tp __t) _NOEXCEPT { -#if __has_builtin(__builtin_ctzg) - return __builtin_ctzg(__t, numeric_limits<_Tp>::digits); -#else // __has_builtin(__builtin_ctzg) - if (__t == 0) - return numeric_limits<_Tp>::digits; - if (sizeof(_Tp) <= sizeof(unsigned int)) - return std::__libcpp_ctz(static_cast(__t)); - else if (sizeof(_Tp) <= sizeof(unsigned long)) - return std::__libcpp_ctz(static_cast(__t)); - else if (sizeof(_Tp) <= sizeof(unsigned long long)) - return std::__libcpp_ctz(static_cast(__t)); - else { - int __ret = 0; - const unsigned int __ulldigits = numeric_limits::digits; - while (static_cast(__t) == 0uLL) { - __ret += __ulldigits; - __t >>= __ulldigits; - } - return __ret + std::__libcpp_ctz(static_cast(__t)); - } -#endif // __has_builtin(__builtin_ctzg) -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___BIT_COUNTR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/invert_if.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/invert_if.h deleted file mode 100644 index cc2815e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/invert_if.h +++ /dev/null @@ -1,29 +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___CXX03___BIT_INVERT_IF_H -#define _LIBCPP___CXX03___BIT_INVERT_IF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Tp __invert_if(_Tp __v) { - if (_Invert) - return ~__v; - return __v; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___BIT_INVERT_IF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/popcount.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/popcount.h deleted file mode 100644 index a61a921..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/popcount.h +++ /dev/null @@ -1,34 +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___CXX03___BIT_POPCOUNT_H -#define _LIBCPP___CXX03___BIT_POPCOUNT_H - -#include <__cxx03/__bit/rotate.h> -#include <__cxx03/__config> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI int __libcpp_popcount(_Tp __v) { - return __builtin_popcountg(__v); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___BIT_POPCOUNT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit/rotate.h b/third_party/libcxx/include/c++/v1/__cxx03/__bit/rotate.h deleted file mode 100644 index fbe121f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit/rotate.h +++ /dev/null @@ -1,57 +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___CXX03___BIT_ROTATE_H -#define _LIBCPP___CXX03___BIT_ROTATE_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/is_unsigned_integer.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Writing two full functions for rotl and rotr makes it easier for the compiler -// to optimize the code. On x86 this function becomes the ROL instruction and -// the rotr function becomes the ROR instruction. -template -_LIBCPP_HIDE_FROM_ABI _Tp __rotl(_Tp __x, int __s) _NOEXCEPT { - static_assert(__libcpp_is_unsigned_integer<_Tp>::value, "__rotl requires an unsigned integer type"); - const int __N = numeric_limits<_Tp>::digits; - int __r = __s % __N; - - if (__r == 0) - return __x; - - if (__r > 0) - return (__x << __r) | (__x >> (__N - __r)); - - return (__x >> -__r) | (__x << (__N + __r)); -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp __rotr(_Tp __x, int __s) _NOEXCEPT { - static_assert(__libcpp_is_unsigned_integer<_Tp>::value, "__rotr requires an unsigned integer type"); - const int __N = numeric_limits<_Tp>::digits; - int __r = __s % __N; - - if (__r == 0) - return __x; - - if (__r > 0) - return (__x >> __r) | (__x << (__N - __r)); - - return (__x << -__r) | (__x >> (__N + __r)); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___BIT_ROTATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__bit_reference b/third_party/libcxx/include/c++/v1/__cxx03/__bit_reference deleted file mode 100644 index ac0005f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__bit_reference +++ /dev/null @@ -1,965 +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___CXX03___BIT_REFERENCE -#define _LIBCPP___CXX03___BIT_REFERENCE - -#include <__cxx03/__algorithm/copy_n.h> -#include <__cxx03/__algorithm/fill_n.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__bit/countr.h> -#include <__cxx03/__bit/invert_if.h> -#include <__cxx03/__bit/popcount.h> -#include <__cxx03/__config> -#include <__cxx03/__fwd/bit_reference.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/construct_at.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__utility/swap.h> -#include <__cxx03/cstring> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __bit_const_reference; - -template -struct __has_storage_type { - static const bool value = false; -}; - -template ::value> -class __bit_reference { - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__storage_pointer; - - __storage_pointer __seg_; - __storage_type __mask_; - - friend typename _Cp::__self; - - friend class __bit_const_reference<_Cp>; - friend class __bit_iterator<_Cp, false>; - -public: - using __container = typename _Cp::__self; - - _LIBCPP_HIDE_FROM_ABI __bit_reference(const __bit_reference&) = default; - - _LIBCPP_HIDE_FROM_ABI operator bool() const _NOEXCEPT { return static_cast(*__seg_ & __mask_); } - _LIBCPP_HIDE_FROM_ABI bool operator~() const _NOEXCEPT { return !static_cast(*this); } - - _LIBCPP_HIDE_FROM_ABI __bit_reference& operator=(bool __x) _NOEXCEPT { - if (__x) - *__seg_ |= __mask_; - else - *__seg_ &= ~__mask_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __bit_reference& operator=(const __bit_reference& __x) _NOEXCEPT { - return operator=(static_cast(__x)); - } - - _LIBCPP_HIDE_FROM_ABI void flip() _NOEXCEPT { *__seg_ ^= __mask_; } - _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> operator&() const _NOEXCEPT { - return __bit_iterator<_Cp, false>(__seg_, static_cast(std::__libcpp_ctz(__mask_))); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __bit_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT - : __seg_(__s), - __mask_(__m) {} -}; - -template -class __bit_reference<_Cp, false> {}; - -template -inline _LIBCPP_HIDE_FROM_ABI void swap(__bit_reference<_Cp> __x, __bit_reference<_Cp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void swap(__bit_reference<_Cp> __x, __bit_reference<_Dp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void swap(__bit_reference<_Cp> __x, bool& __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void swap(bool& __x, __bit_reference<_Cp> __y) _NOEXCEPT { - bool __t = __x; - __x = __y; - __y = __t; -} - -template -class __bit_const_reference { - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__const_storage_pointer; - - __storage_pointer __seg_; - __storage_type __mask_; - - friend typename _Cp::__self; - friend class __bit_iterator<_Cp, true>; - -public: - using __container = typename _Cp::__self; - - _LIBCPP_HIDE_FROM_ABI __bit_const_reference(const __bit_const_reference&) = default; - __bit_const_reference& operator=(const __bit_const_reference&) = delete; - - _LIBCPP_HIDE_FROM_ABI __bit_const_reference(const __bit_reference<_Cp>& __x) _NOEXCEPT - : __seg_(__x.__seg_), - __mask_(__x.__mask_) {} - - _LIBCPP_HIDE_FROM_ABI operator bool() const _NOEXCEPT { return static_cast(*__seg_ & __mask_); } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, true> operator&() const _NOEXCEPT { - return __bit_iterator<_Cp, true>(__seg_, static_cast(std::__libcpp_ctz(__mask_))); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __bit_const_reference(__storage_pointer __s, __storage_type __m) _NOEXCEPT - : __seg_(__s), - __mask_(__m) {} -}; - -// copy - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_aligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = (__storage_type(~0) << __first.__ctz_) & (__storage_type(~0) >> (__clz - __dn)); - __storage_type __b = *__first.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - __storage_type __nw = __n / __bits_per_word; - std::copy_n(std::__to_address(__first.__seg_), __nw, std::__to_address(__result.__seg_)); - __n -= __nw * __bits_per_word; - __result.__seg_ += __nw; - // do last word - if (__n > 0) { - __first.__seg_ += __nw; - __storage_type __m = __storage_type(~0) >> (__bits_per_word - __n); - __storage_type __b = *__first.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(__n); - } - } - return __result; -} - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_unaligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = (__storage_type(~0) << __first.__ctz_) & (__storage_type(~0) >> (__clz_f - __dn)); - __storage_type __b = *__first.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = (__storage_type(~0) << __result.__ctz_) & (__storage_type(~0) >> (__clz_r - __ddn)); - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __first.__ctz_) - *__result.__seg_ |= __b << (__result.__ctz_ - __first.__ctz_); - else - *__result.__seg_ |= __b >> (__first.__ctz_ - __result.__ctz_); - __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__ddn + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = __storage_type(~0) >> (__bits_per_word - __dn); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> (__first.__ctz_ + __ddn); - __result.__ctz_ = static_cast(__dn); - } - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __m = __storage_type(~0) << __result.__ctz_; - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_) { - __storage_type __b = *__first.__seg_; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << __result.__ctz_; - ++__result.__seg_; - *__result.__seg_ &= __m; - *__result.__seg_ |= __b >> __clz_r; - } - // do last word - if (__n > 0) { - __m = __storage_type(~0) >> (__bits_per_word - __n); - __storage_type __b = *__first.__seg_ & __m; - __storage_type __dn = std::min(__n, static_cast(__clz_r)); - __m = (__storage_type(~0) << __result.__ctz_) & (__storage_type(~0) >> (__clz_r - __dn)); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << __result.__ctz_; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = __storage_type(~0) >> (__bits_per_word - __n); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> __dn; - __result.__ctz_ = static_cast(__n); - } - } - } - return __result; -} - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> -copy(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - if (__first.__ctz_ == __result.__ctz_) - return std::__copy_aligned(__first, __last, __result); - return std::__copy_unaligned(__first, __last, __result); -} - -// copy_backward - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_backward_aligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__last.__ctz_ != 0) { - difference_type __dn = std::min(static_cast(__last.__ctz_), __n); - __n -= __dn; - unsigned __clz = __bits_per_word - __last.__ctz_; - __storage_type __m = (~__storage_type(0) << (__last.__ctz_ - __dn)) & (~__storage_type(0) >> __clz); - __storage_type __b = *__last.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(((-__dn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - // __last.__ctz_ = 0 - } - // __last.__ctz_ == 0 || __n == 0 - // __result.__ctz_ == 0 || __n == 0 - // do middle words - __storage_type __nw = __n / __bits_per_word; - __result.__seg_ -= __nw; - __last.__seg_ -= __nw; - std::copy_n(std::__to_address(__last.__seg_), __nw, std::__to_address(__result.__seg_)); - __n -= __nw * __bits_per_word; - // do last word - if (__n > 0) { - __storage_type __m = ~__storage_type(0) << (__bits_per_word - __n); - __storage_type __b = *--__last.__seg_ & __m; - *--__result.__seg_ &= ~__m; - *__result.__seg_ |= __b; - __result.__ctz_ = static_cast(-__n & (__bits_per_word - 1)); - } - } - return __result; -} - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> __copy_backward_unaligned( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - using _In = __bit_iterator<_Cp, _IsConst>; - using difference_type = typename _In::difference_type; - using __storage_type = typename _In::__storage_type; - - const int __bits_per_word = _In::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__last.__ctz_ != 0) { - difference_type __dn = std::min(static_cast(__last.__ctz_), __n); - __n -= __dn; - unsigned __clz_l = __bits_per_word - __last.__ctz_; - __storage_type __m = (~__storage_type(0) << (__last.__ctz_ - __dn)) & (~__storage_type(0) >> __clz_l); - __storage_type __b = *__last.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min(__dn, static_cast(__result.__ctz_)); - if (__ddn > 0) { - __m = (~__storage_type(0) << (__result.__ctz_ - __ddn)) & (~__storage_type(0) >> __clz_r); - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __last.__ctz_) - *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_); - else - *__result.__seg_ |= __b >> (__last.__ctz_ - __result.__ctz_); - __result.__ctz_ = static_cast(((-__ddn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - } - if (__dn > 0) { - // __result.__ctz_ == 0 - --__result.__seg_; - __result.__ctz_ = static_cast(-__dn & (__bits_per_word - 1)); - __m = ~__storage_type(0) << __result.__ctz_; - *__result.__seg_ &= ~__m; - __last.__ctz_ -= __dn + __ddn; - *__result.__seg_ |= __b << (__result.__ctz_ - __last.__ctz_); - } - // __last.__ctz_ = 0 - } - // __last.__ctz_ == 0 || __n == 0 - // __result.__ctz_ != 0 || __n == 0 - // do middle words - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __m = ~__storage_type(0) >> __clz_r; - for (; __n >= __bits_per_word; __n -= __bits_per_word) { - __storage_type __b = *--__last.__seg_; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> __clz_r; - *--__result.__seg_ &= __m; - *__result.__seg_ |= __b << __result.__ctz_; - } - // do last word - if (__n > 0) { - __m = ~__storage_type(0) << (__bits_per_word - __n); - __storage_type __b = *--__last.__seg_ & __m; - __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __dn = std::min(__n, static_cast(__result.__ctz_)); - __m = (~__storage_type(0) << (__result.__ctz_ - __dn)) & (~__storage_type(0) >> __clz_r); - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b >> (__bits_per_word - __result.__ctz_); - __result.__ctz_ = static_cast(((-__dn & (__bits_per_word - 1)) + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - // __result.__ctz_ == 0 - --__result.__seg_; - __result.__ctz_ = static_cast(-__n & (__bits_per_word - 1)); - __m = ~__storage_type(0) << __result.__ctz_; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b << (__result.__ctz_ - (__bits_per_word - __n - __dn)); - } - } - } - return __result; -} - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> copy_backward( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - if (__last.__ctz_ == __result.__ctz_) - return std::__copy_backward_aligned(__first, __last, __result); - return std::__copy_backward_unaligned(__first, __last, __result); -} - -// move - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> -move(__bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - return std::copy(__first, __last, __result); -} - -// move_backward - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> move_backward( - __bit_iterator<_Cp, _IsConst> __first, __bit_iterator<_Cp, _IsConst> __last, __bit_iterator<_Cp, false> __result) { - return std::copy_backward(__first, __last, __result); -} - -// swap_ranges - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cr, false> __swap_ranges_aligned( - __bit_iterator<_Cl, false> __first, __bit_iterator<_Cl, false> __last, __bit_iterator<_Cr, false> __result) { - using _I1 = __bit_iterator<_Cl, false>; - using difference_type = typename _I1::difference_type; - using __storage_type = typename _I1::__storage_type; - - const int __bits_per_word = _I1::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz - __dn)); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1; - *__first.__seg_ |= __b2; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_, ++__result.__seg_) - swap(*__first.__seg_, *__result.__seg_); - // do last word - if (__n > 0) { - __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1; - *__first.__seg_ |= __b2; - __result.__ctz_ = static_cast(__n); - } - } - return __result; -} - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cr, false> __swap_ranges_unaligned( - __bit_iterator<_Cl, false> __first, __bit_iterator<_Cl, false> __last, __bit_iterator<_Cr, false> __result) { - using _I1 = __bit_iterator<_Cl, false>; - using difference_type = typename _I1::difference_type; - using __storage_type = typename _I1::__storage_type; - - const int __bits_per_word = _I1::__bits_per_word; - difference_type __n = __last - __first; - if (__n > 0) { - // do first word - if (__first.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn)); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn)); - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - if (__result.__ctz_ > __first.__ctz_) { - unsigned __s = __result.__ctz_ - __first.__ctz_; - *__result.__seg_ |= __b1 << __s; - *__first.__seg_ |= __b2 >> __s; - } else { - unsigned __s = __first.__ctz_ - __result.__ctz_; - *__result.__seg_ |= __b1 >> __s; - *__first.__seg_ |= __b2 << __s; - } - __result.__seg_ += (__ddn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__ddn + __result.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __dn); - __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - unsigned __s = __first.__ctz_ + __ddn; - *__result.__seg_ |= __b1 >> __s; - *__first.__seg_ |= __b2 << __s; - __result.__ctz_ = static_cast(__dn); - } - ++__first.__seg_; - // __first.__ctz_ = 0; - } - // __first.__ctz_ == 0; - // do middle words - __storage_type __m = ~__storage_type(0) << __result.__ctz_; - unsigned __clz_r = __bits_per_word - __result.__ctz_; - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first.__seg_) { - __storage_type __b1 = *__first.__seg_; - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 << __result.__ctz_; - *__first.__seg_ = __b2 >> __result.__ctz_; - ++__result.__seg_; - __b2 = *__result.__seg_ & ~__m; - *__result.__seg_ &= __m; - *__result.__seg_ |= __b1 >> __clz_r; - *__first.__seg_ |= __b2 << __clz_r; - } - // do last word - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b1 = *__first.__seg_ & __m; - *__first.__seg_ &= ~__m; - __storage_type __dn = std::min<__storage_type>(__n, __clz_r); - __m = (~__storage_type(0) << __result.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn)); - __storage_type __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 << __result.__ctz_; - *__first.__seg_ |= __b2 >> __result.__ctz_; - __result.__seg_ += (__dn + __result.__ctz_) / __bits_per_word; - __result.__ctz_ = static_cast((__dn + __result.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - __b2 = *__result.__seg_ & __m; - *__result.__seg_ &= ~__m; - *__result.__seg_ |= __b1 >> __dn; - *__first.__seg_ |= __b2 << __dn; - __result.__ctz_ = static_cast(__n); - } - } - } - return __result; -} - -template -inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cr, false> swap_ranges( - __bit_iterator<_Cl, false> __first1, __bit_iterator<_Cl, false> __last1, __bit_iterator<_Cr, false> __first2) { - if (__first1.__ctz_ == __first2.__ctz_) - return std::__swap_ranges_aligned(__first1, __last1, __first2); - return std::__swap_ranges_unaligned(__first1, __last1, __first2); -} - -// rotate - -template -struct __bit_array { - using difference_type = typename _Cp::difference_type; - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__storage_pointer; - using iterator = typename _Cp::iterator; - - static const unsigned __bits_per_word = _Cp::__bits_per_word; - static const unsigned _Np = 4; - - difference_type __size_; - __storage_type __word_[_Np]; - - _LIBCPP_HIDE_FROM_ABI static difference_type capacity() { - return static_cast(_Np * __bits_per_word); - } - _LIBCPP_HIDE_FROM_ABI explicit __bit_array(difference_type __s) : __size_(__s) { - if (__libcpp_is_constant_evaluated()) { - for (size_t __i = 0; __i != __bit_array<_Cp>::_Np; ++__i) - std::__construct_at(__word_ + __i, 0); - } - } - _LIBCPP_HIDE_FROM_ABI iterator begin() { - return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]), 0); - } - _LIBCPP_HIDE_FROM_ABI iterator end() { - return iterator(pointer_traits<__storage_pointer>::pointer_to(__word_[0]) + __size_ / __bits_per_word, - static_cast(__size_ % __bits_per_word)); - } -}; - -template -_LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cp, false> -rotate(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __middle, __bit_iterator<_Cp, false> __last) { - using _I1 = __bit_iterator<_Cp, false>; - using difference_type = typename _I1::difference_type; - - difference_type __d1 = __middle - __first; - difference_type __d2 = __last - __middle; - _I1 __r = __first + __d2; - while (__d1 != 0 && __d2 != 0) { - if (__d1 <= __d2) { - if (__d1 <= __bit_array<_Cp>::capacity()) { - __bit_array<_Cp> __b(__d1); - std::copy(__first, __middle, __b.begin()); - std::copy(__b.begin(), __b.end(), std::copy(__middle, __last, __first)); - break; - } else { - __bit_iterator<_Cp, false> __mp = std::swap_ranges(__first, __middle, __middle); - __first = __middle; - __middle = __mp; - __d2 -= __d1; - } - } else { - if (__d2 <= __bit_array<_Cp>::capacity()) { - __bit_array<_Cp> __b(__d2); - std::copy(__middle, __last, __b.begin()); - std::copy_backward(__b.begin(), __b.end(), std::copy_backward(__first, __middle, __last)); - break; - } else { - __bit_iterator<_Cp, false> __mp = __first + __d2; - std::swap_ranges(__first, __mp, __middle); - __first = __mp; - __d1 -= __d2; - } - } - } - return __r; -} - -// equal - -template -_LIBCPP_HIDE_FROM_ABI bool __equal_unaligned( - __bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1, __bit_iterator<_Cp, _IC2> __first2) { - using _It = __bit_iterator<_Cp, _IC1>; - using difference_type = typename _It::difference_type; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __n = __last1 - __first1; - if (__n > 0) { - // do first word - if (__first1.__ctz_ != 0) { - unsigned __clz_f = __bits_per_word - __first1.__ctz_; - difference_type __dn = std::min(static_cast(__clz_f), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first1.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn)); - __storage_type __b = *__first1.__seg_ & __m; - unsigned __clz_r = __bits_per_word - __first2.__ctz_; - __storage_type __ddn = std::min<__storage_type>(__dn, __clz_r); - __m = (~__storage_type(0) << __first2.__ctz_) & (~__storage_type(0) >> (__clz_r - __ddn)); - if (__first2.__ctz_ > __first1.__ctz_) { - if ((*__first2.__seg_ & __m) != (__b << (__first2.__ctz_ - __first1.__ctz_))) - return false; - } else { - if ((*__first2.__seg_ & __m) != (__b >> (__first1.__ctz_ - __first2.__ctz_))) - return false; - } - __first2.__seg_ += (__ddn + __first2.__ctz_) / __bits_per_word; - __first2.__ctz_ = static_cast((__ddn + __first2.__ctz_) % __bits_per_word); - __dn -= __ddn; - if (__dn > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __dn); - if ((*__first2.__seg_ & __m) != (__b >> (__first1.__ctz_ + __ddn))) - return false; - __first2.__ctz_ = static_cast(__dn); - } - ++__first1.__seg_; - // __first1.__ctz_ = 0; - } - // __first1.__ctz_ == 0; - // do middle words - unsigned __clz_r = __bits_per_word - __first2.__ctz_; - __storage_type __m = ~__storage_type(0) << __first2.__ctz_; - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_) { - __storage_type __b = *__first1.__seg_; - if ((*__first2.__seg_ & __m) != (__b << __first2.__ctz_)) - return false; - ++__first2.__seg_; - if ((*__first2.__seg_ & ~__m) != (__b >> __clz_r)) - return false; - } - // do last word - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - __storage_type __b = *__first1.__seg_ & __m; - __storage_type __dn = std::min(__n, static_cast(__clz_r)); - __m = (~__storage_type(0) << __first2.__ctz_) & (~__storage_type(0) >> (__clz_r - __dn)); - if ((*__first2.__seg_ & __m) != (__b << __first2.__ctz_)) - return false; - __first2.__seg_ += (__dn + __first2.__ctz_) / __bits_per_word; - __first2.__ctz_ = static_cast((__dn + __first2.__ctz_) % __bits_per_word); - __n -= __dn; - if (__n > 0) { - __m = ~__storage_type(0) >> (__bits_per_word - __n); - if ((*__first2.__seg_ & __m) != (__b >> __dn)) - return false; - } - } - } - return true; -} - -template -_LIBCPP_HIDE_FROM_ABI bool __equal_aligned( - __bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1, __bit_iterator<_Cp, _IC2> __first2) { - using _It = __bit_iterator<_Cp, _IC1>; - using difference_type = typename _It::difference_type; - using __storage_type = typename _It::__storage_type; - - const int __bits_per_word = _It::__bits_per_word; - difference_type __n = __last1 - __first1; - if (__n > 0) { - // do first word - if (__first1.__ctz_ != 0) { - unsigned __clz = __bits_per_word - __first1.__ctz_; - difference_type __dn = std::min(static_cast(__clz), __n); - __n -= __dn; - __storage_type __m = (~__storage_type(0) << __first1.__ctz_) & (~__storage_type(0) >> (__clz - __dn)); - if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m)) - return false; - ++__first2.__seg_; - ++__first1.__seg_; - // __first1.__ctz_ = 0; - // __first2.__ctz_ = 0; - } - // __first1.__ctz_ == 0; - // __first2.__ctz_ == 0; - // do middle words - for (; __n >= __bits_per_word; __n -= __bits_per_word, ++__first1.__seg_, ++__first2.__seg_) - if (*__first2.__seg_ != *__first1.__seg_) - return false; - // do last word - if (__n > 0) { - __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n); - if ((*__first2.__seg_ & __m) != (*__first1.__seg_ & __m)) - return false; - } - } - return true; -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool -equal(__bit_iterator<_Cp, _IC1> __first1, __bit_iterator<_Cp, _IC1> __last1, __bit_iterator<_Cp, _IC2> __first2) { - if (__first1.__ctz_ == __first2.__ctz_) - return std::__equal_aligned(__first1, __last1, __first2); - return std::__equal_unaligned(__first1, __last1, __first2); -} - -template -class __bit_iterator { -public: - using difference_type = typename _Cp::difference_type; - using value_type = bool; - using pointer = __bit_iterator; -#ifndef _LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL - using reference = __conditional_t<_IsConst, __bit_const_reference<_Cp>, __bit_reference<_Cp> >; -#else - using reference = __conditional_t<_IsConst, bool, __bit_reference<_Cp> >; -#endif - using iterator_category = random_access_iterator_tag; - -private: - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = - __conditional_t<_IsConst, typename _Cp::__const_storage_pointer, typename _Cp::__storage_pointer>; - - static const unsigned __bits_per_word = _Cp::__bits_per_word; - - __storage_pointer __seg_; - unsigned __ctz_; - -public: - _LIBCPP_HIDE_FROM_ABI __bit_iterator() _NOEXCEPT {} - - // When _IsConst=false, this is the copy constructor. - // It is non-trivial. Making it trivial would break ABI. - // When _IsConst=true, this is a converting constructor; - // the copy and move constructors are implicitly generated - // and trivial. - _LIBCPP_HIDE_FROM_ABI __bit_iterator(const __bit_iterator<_Cp, false>& __it) _NOEXCEPT - : __seg_(__it.__seg_), - __ctz_(__it.__ctz_) {} - - // When _IsConst=false, we have a user-provided copy constructor, - // so we must also provide a copy assignment operator because - // the implicit generation of a defaulted one is deprecated. - // When _IsConst=true, the assignment operators are - // implicitly generated and trivial. - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator=(const _If<_IsConst, struct __private_nat, __bit_iterator>& __it) { - __seg_ = __it.__seg_; - __ctz_ = __it.__ctz_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI reference operator*() const _NOEXCEPT { - return __conditional_t<_IsConst, __bit_const_reference<_Cp>, __bit_reference<_Cp> >( - __seg_, __storage_type(1) << __ctz_); - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator++() { - if (__ctz_ != __bits_per_word - 1) - ++__ctz_; - else { - __ctz_ = 0; - ++__seg_; - } - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator operator++(int) { - __bit_iterator __tmp = *this; - ++(*this); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator--() { - if (__ctz_ != 0) - --__ctz_; - else { - __ctz_ = __bits_per_word - 1; - --__seg_; - } - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator operator--(int) { - __bit_iterator __tmp = *this; - --(*this); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator+=(difference_type __n) { - if (__n >= 0) - __seg_ += (__n + __ctz_) / __bits_per_word; - else - __seg_ += static_cast(__n - __bits_per_word + __ctz_ + 1) / - static_cast(__bits_per_word); - __n &= (__bits_per_word - 1); - __ctz_ = static_cast((__n + __ctz_) % __bits_per_word); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator& operator-=(difference_type __n) { return *this += -__n; } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator operator+(difference_type __n) const { - __bit_iterator __t(*this); - __t += __n; - return __t; - } - - _LIBCPP_HIDE_FROM_ABI __bit_iterator operator-(difference_type __n) const { - __bit_iterator __t(*this); - __t -= __n; - return __t; - } - - _LIBCPP_HIDE_FROM_ABI friend __bit_iterator operator+(difference_type __n, const __bit_iterator& __it) { - return __it + __n; - } - - _LIBCPP_HIDE_FROM_ABI friend difference_type operator-(const __bit_iterator& __x, const __bit_iterator& __y) { - return (__x.__seg_ - __y.__seg_) * __bits_per_word + __x.__ctz_ - __y.__ctz_; - } - - _LIBCPP_HIDE_FROM_ABI reference operator[](difference_type __n) const { return *(*this + __n); } - - _LIBCPP_HIDE_FROM_ABI friend bool operator==(const __bit_iterator& __x, const __bit_iterator& __y) { - return __x.__seg_ == __y.__seg_ && __x.__ctz_ == __y.__ctz_; - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator!=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__x == __y); - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator<(const __bit_iterator& __x, const __bit_iterator& __y) { - return __x.__seg_ < __y.__seg_ || (__x.__seg_ == __y.__seg_ && __x.__ctz_ < __y.__ctz_); - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator>(const __bit_iterator& __x, const __bit_iterator& __y) { - return __y < __x; - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator<=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__y < __x); - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator>=(const __bit_iterator& __x, const __bit_iterator& __y) { - return !(__x < __y); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __bit_iterator(__storage_pointer __s, unsigned __ctz) _NOEXCEPT - : __seg_(__s), - __ctz_(__ctz) {} - - friend typename _Cp::__self; - - friend class __bit_reference<_Cp>; - friend class __bit_const_reference<_Cp>; - friend class __bit_iterator<_Cp, true>; - template - friend struct __bit_array; - - template - friend void __fill_n_bool(__bit_iterator<_Dp, false> __first, typename _Dp::size_type __n); - - template - friend __bit_iterator<_Dp, false> __copy_aligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Dp, false> __copy_unaligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Dp, false> - copy(__bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Dp, false> __copy_backward_aligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Dp, false> __copy_backward_unaligned( - __bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Dp, false> - copy_backward(__bit_iterator<_Dp, _IC> __first, __bit_iterator<_Dp, _IC> __last, __bit_iterator<_Dp, false> __result); - template - friend __bit_iterator<_Cr, false> - __swap_ranges_aligned(__bit_iterator<_Cl, false>, __bit_iterator<_Cl, false>, __bit_iterator<_Cr, false>); - template - friend __bit_iterator<_Cr, false> - __swap_ranges_unaligned(__bit_iterator<_Cl, false>, __bit_iterator<_Cl, false>, __bit_iterator<_Cr, false>); - template - friend __bit_iterator<_Cr, false> - swap_ranges(__bit_iterator<_Cl, false>, __bit_iterator<_Cl, false>, __bit_iterator<_Cr, false>); - template - friend __bit_iterator<_Dp, false> - rotate(__bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>, __bit_iterator<_Dp, false>); - template - friend bool __equal_aligned(__bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC2>); - template - friend bool __equal_unaligned(__bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC2>); - template - friend bool equal(__bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC1>, __bit_iterator<_Dp, _IC2>); - template - friend __bit_iterator<_Dp, _IC> __find_bool(__bit_iterator<_Dp, _IC>, typename _Dp::size_type); - template - friend typename __bit_iterator<_Dp, _IC>::difference_type - _LIBCPP_HIDE_FROM_ABI __count_bool(__bit_iterator<_Dp, _IC>, typename _Dp::size_type); -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___BIT_REFERENCE diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/convert_to_timespec.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/convert_to_timespec.h deleted file mode 100644 index 24d77c2..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/convert_to_timespec.h +++ /dev/null @@ -1,51 +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___CXX03___CHRONO_CONVERT_TO_TIMESPEC_H -#define _LIBCPP___CXX03___CHRONO_CONVERT_TO_TIMESPEC_H - -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__config> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Convert a nanoseconds duration to the given TimeSpec type, which must have -// the same properties as std::timespec. -template -_LIBCPP_HIDE_FROM_ABI inline _TimeSpec __convert_to_timespec(const chrono::nanoseconds& __ns) { - using namespace chrono; - seconds __s = duration_cast(__ns); - _TimeSpec __ts; - typedef decltype(__ts.tv_sec) __ts_sec; - const __ts_sec __ts_sec_max = numeric_limits<__ts_sec>::max(); - - if (__s.count() < __ts_sec_max) { - __ts.tv_sec = static_cast<__ts_sec>(__s.count()); - __ts.tv_nsec = static_cast((__ns - __s).count()); - } else { - __ts.tv_sec = __ts_sec_max; - __ts.tv_nsec = 999999999; // (10^9 - 1) - } - - return __ts; -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___CHRONO_CONVERT_TO_TIMESPEC_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/duration.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/duration.h deleted file mode 100644 index 3a96df7..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/duration.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___CXX03___CHRONO_DURATION_H -#define _LIBCPP___CXX03___CHRONO_DURATION_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__type_traits/is_floating_point.h> -#include <__cxx03/limits> -#include <__cxx03/ratio> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -template > -class _LIBCPP_TEMPLATE_VIS duration; - -template -struct __is_duration : false_type {}; - -template -struct __is_duration > : true_type {}; - -template -struct __is_duration > : true_type {}; - -template -struct __is_duration > : true_type {}; - -template -struct __is_duration > : true_type {}; - -} // namespace chrono - -template -struct _LIBCPP_TEMPLATE_VIS common_type, chrono::duration<_Rep2, _Period2> > { - typedef chrono::duration::type, typename __ratio_gcd<_Period1, _Period2>::type> - type; -}; - -namespace chrono { - -// duration_cast - -template ::type, - bool = _Period::num == 1, - bool = _Period::den == 1> -struct __duration_cast; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, true, true> { - _LIBCPP_HIDE_FROM_ABI _ToDuration operator()(const _FromDuration& __fd) const { - return _ToDuration(static_cast(__fd.count())); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, true, false> { - _LIBCPP_HIDE_FROM_ABI _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration( - static_cast(static_cast<_Ct>(__fd.count()) / static_cast<_Ct>(_Period::den))); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, false, true> { - _LIBCPP_HIDE_FROM_ABI _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration( - static_cast(static_cast<_Ct>(__fd.count()) * static_cast<_Ct>(_Period::num))); - } -}; - -template -struct __duration_cast<_FromDuration, _ToDuration, _Period, false, false> { - _LIBCPP_HIDE_FROM_ABI _ToDuration operator()(const _FromDuration& __fd) const { - typedef typename common_type::type _Ct; - return _ToDuration(static_cast( - static_cast<_Ct>(__fd.count()) * static_cast<_Ct>(_Period::num) / static_cast<_Ct>(_Period::den))); - } -}; - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _ToDuration duration_cast(const duration<_Rep, _Period>& __fd) { - return __duration_cast, _ToDuration>()(__fd); -} - -template -struct _LIBCPP_TEMPLATE_VIS treat_as_floating_point : is_floating_point<_Rep> {}; - -// clang-format off -template -struct _LIBCPP_TEMPLATE_VIS duration_values { -public: - _LIBCPP_HIDE_FROM_ABI static _Rep zero() _NOEXCEPT { return _Rep(0); } - _LIBCPP_HIDE_FROM_ABI static _Rep max() _NOEXCEPT { return numeric_limits<_Rep>::max(); } - _LIBCPP_HIDE_FROM_ABI static _Rep min() _NOEXCEPT { return numeric_limits<_Rep>::lowest(); } -}; -// clang-format on - -// duration - -template -class _LIBCPP_TEMPLATE_VIS duration { - static_assert(!__is_duration<_Rep>::value, "A duration representation can not be a duration"); - static_assert(__is_ratio<_Period>::value, "Second template parameter of duration must be a std::ratio"); - static_assert(_Period::num > 0, "duration period must be positive"); - - template - struct __no_overflow { - private: - static const intmax_t __gcd_n1_n2 = __static_gcd<_R1::num, _R2::num>::value; - static const intmax_t __gcd_d1_d2 = __static_gcd<_R1::den, _R2::den>::value; - static const intmax_t __n1 = _R1::num / __gcd_n1_n2; - static const intmax_t __d1 = _R1::den / __gcd_d1_d2; - static const intmax_t __n2 = _R2::num / __gcd_n1_n2; - static const intmax_t __d2 = _R2::den / __gcd_d1_d2; - static const intmax_t max = -((intmax_t(1) << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1); - - template - struct __mul // __overflow == false - { - static const intmax_t value = _Xp * _Yp; - }; - - template - struct __mul<_Xp, _Yp, true> { - static const intmax_t value = 1; - }; - - public: - static const bool value = (__n1 <= max / __d2) && (__n2 <= max / __d1); - typedef ratio<__mul<__n1, __d2, !value>::value, __mul<__n2, __d1, !value>::value> type; - }; - -public: - typedef _Rep rep; - typedef typename _Period::type period; - -private: - rep __rep_; - -public: - _LIBCPP_HIDE_FROM_ABI duration() {} - - template ::value && - (treat_as_floating_point::value || !treat_as_floating_point<_Rep2>::value), - int> = 0> - _LIBCPP_HIDE_FROM_ABI explicit duration(const _Rep2& __r) : __rep_(__r) {} - - // conversions - template ::value && (treat_as_floating_point::value || - (__no_overflow<_Period2, period>::type::den == 1 && - !treat_as_floating_point<_Rep2>::value)), - int> = 0> - _LIBCPP_HIDE_FROM_ABI duration(const duration<_Rep2, _Period2>& __d) - : __rep_(chrono::duration_cast(__d).count()) {} - - // observer - - _LIBCPP_HIDE_FROM_ABI rep count() const { return __rep_; } - - // arithmetic - - _LIBCPP_HIDE_FROM_ABI typename common_type::type operator+() const { - return typename common_type::type(*this); - } - _LIBCPP_HIDE_FROM_ABI typename common_type::type operator-() const { - return typename common_type::type(-__rep_); - } - _LIBCPP_HIDE_FROM_ABI duration& operator++() { - ++__rep_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration operator++(int) { return duration(__rep_++); } - _LIBCPP_HIDE_FROM_ABI duration& operator--() { - --__rep_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration operator--(int) { return duration(__rep_--); } - - _LIBCPP_HIDE_FROM_ABI duration& operator+=(const duration& __d) { - __rep_ += __d.count(); - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration& operator-=(const duration& __d) { - __rep_ -= __d.count(); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI duration& operator*=(const rep& __rhs) { - __rep_ *= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration& operator/=(const rep& __rhs) { - __rep_ /= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration& operator%=(const rep& __rhs) { - __rep_ %= __rhs; - return *this; - } - _LIBCPP_HIDE_FROM_ABI duration& operator%=(const duration& __rhs) { - __rep_ %= __rhs.count(); - return *this; - } - - // special values - - _LIBCPP_HIDE_FROM_ABI static duration zero() _NOEXCEPT { return duration(duration_values::zero()); } - _LIBCPP_HIDE_FROM_ABI static duration min() _NOEXCEPT { return duration(duration_values::min()); } - _LIBCPP_HIDE_FROM_ABI static duration max() _NOEXCEPT { return duration(duration_values::max()); } -}; - -typedef duration nanoseconds; -typedef duration microseconds; -typedef duration milliseconds; -typedef duration seconds; -typedef duration< long, ratio< 60> > minutes; -typedef duration< long, ratio<3600> > hours; - -// Duration == - -template -struct __duration_eq { - _LIBCPP_HIDE_FROM_ABI bool operator()(const _LhsDuration& __lhs, const _RhsDuration& __rhs) const { - typedef typename common_type<_LhsDuration, _RhsDuration>::type _Ct; - return _Ct(__lhs).count() == _Ct(__rhs).count(); - } -}; - -template -struct __duration_eq<_LhsDuration, _LhsDuration> { - _LIBCPP_HIDE_FROM_ABI bool operator()(const _LhsDuration& __lhs, const _LhsDuration& __rhs) const { - return __lhs.count() == __rhs.count(); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator==(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __duration_eq, duration<_Rep2, _Period2> >()(__lhs, __rhs); -} - -// Duration != - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator!=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__lhs == __rhs); -} - -// Duration < - -template -struct __duration_lt { - _LIBCPP_HIDE_FROM_ABI bool operator()(const _LhsDuration& __lhs, const _RhsDuration& __rhs) const { - typedef typename common_type<_LhsDuration, _RhsDuration>::type _Ct; - return _Ct(__lhs).count() < _Ct(__rhs).count(); - } -}; - -template -struct __duration_lt<_LhsDuration, _LhsDuration> { - _LIBCPP_HIDE_FROM_ABI bool operator()(const _LhsDuration& __lhs, const _LhsDuration& __rhs) const { - return __lhs.count() < __rhs.count(); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator<(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __duration_lt, duration<_Rep2, _Period2> >()(__lhs, __rhs); -} - -// Duration > - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator>(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return __rhs < __lhs; -} - -// Duration <= - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator<=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__rhs < __lhs); -} - -// Duration >= - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator>=(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - return !(__lhs < __rhs); -} - -// Duration + - -template -inline _LIBCPP_HIDE_FROM_ABI typename common_type, duration<_Rep2, _Period2> >::type -operator+(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(_Cd(__lhs).count() + _Cd(__rhs).count()); -} - -// Duration - - -template -inline _LIBCPP_HIDE_FROM_ABI typename common_type, duration<_Rep2, _Period2> >::type -operator-(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(_Cd(__lhs).count() - _Cd(__rhs).count()); -} - -// Duration * - -template ::type>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI duration::type, _Period> -operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() * static_cast<_Cr>(__s)); -} - -template ::type>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI duration::type, _Period> -operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) { - return __d * __s; -} - -// Duration / - -template ::value && - is_convertible::type>::value, - int> = 0> -inline _LIBCPP_HIDE_FROM_ABI duration::type, _Period> -operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() / static_cast<_Cr>(__s)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename common_type<_Rep1, _Rep2>::type -operator/(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type, duration<_Rep2, _Period2> >::type _Ct; - return _Ct(__lhs).count() / _Ct(__rhs).count(); -} - -// Duration % - -template ::value && - is_convertible::type>::value, - int> = 0> -inline _LIBCPP_HIDE_FROM_ABI duration::type, _Period> -operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef duration<_Cr, _Period> _Cd; - return _Cd(_Cd(__d).count() % static_cast<_Cr>(__s)); -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename common_type, duration<_Rep2, _Period2> >::type -operator%(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef typename common_type<_Rep1, _Rep2>::type _Cr; - typedef typename common_type, duration<_Rep2, _Period2> >::type _Cd; - return _Cd(static_cast<_Cr>(_Cd(__lhs).count()) % static_cast<_Cr>(_Cd(__rhs).count())); -} - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) -# include <__cxx03/type_traits> -#endif - -#endif // _LIBCPP___CXX03___CHRONO_DURATION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/high_resolution_clock.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/high_resolution_clock.h deleted file mode 100644 index 3371d16..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/high_resolution_clock.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___CXX03___CHRONO_HIGH_RESOLUTION_CLOCK_H -#define _LIBCPP___CXX03___CHRONO_HIGH_RESOLUTION_CLOCK_H - -#include <__cxx03/__chrono/steady_clock.h> -#include <__cxx03/__chrono/system_clock.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -#ifndef _LIBCPP_HAS_NO_MONOTONIC_CLOCK -typedef steady_clock high_resolution_clock; -#else -typedef system_clock high_resolution_clock; -#endif - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___CHRONO_HIGH_RESOLUTION_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/steady_clock.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/steady_clock.h deleted file mode 100644 index 5a8fa4f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/steady_clock.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___CXX03___CHRONO_STEADY_CLOCK_H -#define _LIBCPP___CXX03___CHRONO_STEADY_CLOCK_H - -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__chrono/time_point.h> -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -#ifndef _LIBCPP_HAS_NO_MONOTONIC_CLOCK -class _LIBCPP_EXPORTED_FROM_ABI steady_clock { -public: - typedef nanoseconds duration; - typedef duration::rep rep; - typedef duration::period period; - typedef chrono::time_point time_point; - static const bool is_steady = true; - - static time_point now() _NOEXCEPT; -}; -#endif - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___CHRONO_STEADY_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/system_clock.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/system_clock.h deleted file mode 100644 index 09d2d69..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/system_clock.h +++ /dev/null @@ -1,43 +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___CXX03___CHRONO_SYSTEM_CLOCK_H -#define _LIBCPP___CXX03___CHRONO_SYSTEM_CLOCK_H - -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__chrono/time_point.h> -#include <__cxx03/__config> -#include <__cxx03/ctime> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -class _LIBCPP_EXPORTED_FROM_ABI system_clock { -public: - typedef microseconds duration; - typedef duration::rep rep; - typedef duration::period period; - typedef chrono::time_point time_point; - static const bool is_steady = false; - - static time_point now() _NOEXCEPT; - static time_t to_time_t(const time_point& __t) _NOEXCEPT; - static time_point from_time_t(time_t __t) _NOEXCEPT; -}; - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___CHRONO_SYSTEM_CLOCK_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/time_point.h b/third_party/libcxx/include/c++/v1/__cxx03/__chrono/time_point.h deleted file mode 100644 index 7f2a73a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__chrono/time_point.h +++ /dev/null @@ -1,177 +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___CXX03___CHRONO_TIME_POINT_H -#define _LIBCPP___CXX03___CHRONO_TIME_POINT_H - -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__config> -#include <__cxx03/__type_traits/common_type.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace chrono { - -template -class _LIBCPP_TEMPLATE_VIS time_point { - static_assert(__is_duration<_Duration>::value, - "Second template parameter of time_point must be a std::chrono::duration"); - -public: - typedef _Clock clock; - typedef _Duration duration; - typedef typename duration::rep rep; - typedef typename duration::period period; - -private: - duration __d_; - -public: - _LIBCPP_HIDE_FROM_ABI time_point() : __d_(duration::zero()) {} - _LIBCPP_HIDE_FROM_ABI explicit time_point(const duration& __d) : __d_(__d) {} - - // conversions - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI time_point(const time_point& __t) : __d_(__t.time_since_epoch()) {} - - // observer - - _LIBCPP_HIDE_FROM_ABI duration time_since_epoch() const { return __d_; } - - // arithmetic - - _LIBCPP_HIDE_FROM_ABI time_point& operator+=(const duration& __d) { - __d_ += __d; - return *this; - } - _LIBCPP_HIDE_FROM_ABI time_point& operator-=(const duration& __d) { - __d_ -= __d; - return *this; - } - - // special values - - _LIBCPP_HIDE_FROM_ABI static time_point min() _NOEXCEPT { return time_point(duration::min()); } - _LIBCPP_HIDE_FROM_ABI static time_point max() _NOEXCEPT { return time_point(duration::max()); } -}; - -} // namespace chrono - -template -struct _LIBCPP_TEMPLATE_VIS -common_type, chrono::time_point<_Clock, _Duration2> > { - typedef chrono::time_point<_Clock, typename common_type<_Duration1, _Duration2>::type> type; -}; - -namespace chrono { - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI time_point<_Clock, _ToDuration> time_point_cast(const time_point<_Clock, _Duration>& __t) { - return time_point<_Clock, _ToDuration>(chrono::duration_cast<_ToDuration>(__t.time_since_epoch())); -} - -// time_point == - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator==(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() == __rhs.time_since_epoch(); -} - -// time_point != - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator!=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__lhs == __rhs); -} - -// time_point < - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator<(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() < __rhs.time_since_epoch(); -} - -// time_point > - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator>(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __rhs < __lhs; -} - -// time_point <= - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator<=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__rhs < __lhs); -} - -// time_point >= - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator>=(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return !(__lhs < __rhs); -} - -// time_point operator+(time_point x, duration y); - -template -inline _LIBCPP_HIDE_FROM_ABI time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> -operator+(const time_point<_Clock, _Duration1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> _Tr; - return _Tr(__lhs.time_since_epoch() + __rhs); -} - -// time_point operator+(duration x, time_point y); - -template -inline _LIBCPP_HIDE_FROM_ABI time_point<_Clock, typename common_type, _Duration2>::type> -operator+(const duration<_Rep1, _Period1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __rhs + __lhs; -} - -// time_point operator-(time_point x, duration y); - -template -inline _LIBCPP_HIDE_FROM_ABI time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> -operator-(const time_point<_Clock, _Duration1>& __lhs, const duration<_Rep2, _Period2>& __rhs) { - typedef time_point<_Clock, typename common_type<_Duration1, duration<_Rep2, _Period2> >::type> _Ret; - return _Ret(__lhs.time_since_epoch() - __rhs); -} - -// duration operator-(time_point x, time_point y); - -template -inline _LIBCPP_HIDE_FROM_ABI typename common_type<_Duration1, _Duration2>::type -operator-(const time_point<_Clock, _Duration1>& __lhs, const time_point<_Clock, _Duration2>& __rhs) { - return __lhs.time_since_epoch() - __rhs.time_since_epoch(); -} - -} // namespace chrono - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___CHRONO_TIME_POINT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__condition_variable/condition_variable.h b/third_party/libcxx/include/c++/v1/__cxx03/__condition_variable/condition_variable.h deleted file mode 100644 index af03250..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__condition_variable/condition_variable.h +++ /dev/null @@ -1,244 +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___CXX03___CONDITION_VARIABLE_CONDITION_VARIABLE_H -#define _LIBCPP___CXX03___CONDITION_VARIABLE_CONDITION_VARIABLE_H - -#include <__cxx03/__chrono/duration.h> -#include <__cxx03/__chrono/steady_clock.h> -#include <__cxx03/__chrono/system_clock.h> -#include <__cxx03/__chrono/time_point.h> -#include <__cxx03/__config> -#include <__cxx03/__mutex/mutex.h> -#include <__cxx03/__mutex/unique_lock.h> -#include <__cxx03/__system_error/system_error.h> -#include <__cxx03/__thread/support.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_floating_point.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/limits> -#include <__cxx03/ratio> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -#ifndef _LIBCPP_HAS_NO_THREADS - -// enum class cv_status -_LIBCPP_DECLARE_STRONG_ENUM(cv_status){no_timeout, timeout}; -_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(cv_status) - -class _LIBCPP_EXPORTED_FROM_ABI condition_variable { - __libcpp_condvar_t __cv_ = _LIBCPP_CONDVAR_INITIALIZER; - -public: - _LIBCPP_HIDE_FROM_ABI condition_variable() _NOEXCEPT = default; - -# ifdef _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION - ~condition_variable() = default; -# else - ~condition_variable(); -# endif - - condition_variable(const condition_variable&) = delete; - condition_variable& operator=(const condition_variable&) = delete; - - void notify_one() _NOEXCEPT; - void notify_all() _NOEXCEPT; - - void wait(unique_lock& __lk) _NOEXCEPT; - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS void wait(unique_lock& __lk, _Predicate __pred); - - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS cv_status - wait_until(unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t); - - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS bool - wait_until(unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t, _Predicate __pred); - - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS cv_status - wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d); - - template - bool _LIBCPP_HIDE_FROM_ABI - wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d, _Predicate __pred); - - typedef __libcpp_condvar_t* native_handle_type; - _LIBCPP_HIDE_FROM_ABI native_handle_type native_handle() { return &__cv_; } - -private: - void - __do_timed_wait(unique_lock& __lk, chrono::time_point) _NOEXCEPT; -# if defined(_LIBCPP_HAS_COND_CLOCKWAIT) - _LIBCPP_HIDE_FROM_ABI void - __do_timed_wait(unique_lock& __lk, chrono::time_point) _NOEXCEPT; -# endif - template - _LIBCPP_HIDE_FROM_ABI void - __do_timed_wait(unique_lock& __lk, chrono::time_point<_Clock, chrono::nanoseconds>) _NOEXCEPT; -}; -#endif // !_LIBCPP_HAS_NO_THREADS - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI chrono::nanoseconds __safe_nanosecond_cast(chrono::duration<_Rep, _Period> __d) { - using namespace chrono; - using __ratio = ratio_divide<_Period, nano>; - using __ns_rep = nanoseconds::rep; - _Rep __result_float = __d.count() * __ratio::num / __ratio::den; - - _Rep __result_max = numeric_limits<__ns_rep>::max(); - if (__result_float >= __result_max) { - return nanoseconds::max(); - } - - _Rep __result_min = numeric_limits<__ns_rep>::min(); - if (__result_float <= __result_min) { - return nanoseconds::min(); - } - - return nanoseconds(static_cast<__ns_rep>(__result_float)); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI chrono::nanoseconds __safe_nanosecond_cast(chrono::duration<_Rep, _Period> __d) { - using namespace chrono; - if (__d.count() == 0) { - return nanoseconds(0); - } - - using __ratio = ratio_divide<_Period, nano>; - using __ns_rep = nanoseconds::rep; - __ns_rep __result_max = numeric_limits<__ns_rep>::max(); - if (__d.count() > 0 && __d.count() > __result_max / __ratio::num) { - return nanoseconds::max(); - } - - __ns_rep __result_min = numeric_limits<__ns_rep>::min(); - if (__d.count() < 0 && __d.count() < __result_min / __ratio::num) { - return nanoseconds::min(); - } - - __ns_rep __result = __d.count() * __ratio::num / __ratio::den; - if (__result == 0) { - return nanoseconds(1); - } - - return nanoseconds(__result); -} - -#ifndef _LIBCPP_HAS_NO_THREADS -template -void condition_variable::wait(unique_lock& __lk, _Predicate __pred) { - while (!__pred()) - wait(__lk); -} - -template -cv_status condition_variable::wait_until(unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t) { - using namespace chrono; - using __clock_tp_ns = time_point<_Clock, nanoseconds>; - - typename _Clock::time_point __now = _Clock::now(); - if (__t <= __now) - return cv_status::timeout; - - __clock_tp_ns __t_ns = __clock_tp_ns(std::__safe_nanosecond_cast(__t.time_since_epoch())); - - __do_timed_wait(__lk, __t_ns); - return _Clock::now() < __t ? cv_status::no_timeout : cv_status::timeout; -} - -template -bool condition_variable::wait_until( - unique_lock& __lk, const chrono::time_point<_Clock, _Duration>& __t, _Predicate __pred) { - while (!__pred()) { - if (wait_until(__lk, __t) == cv_status::timeout) - return __pred(); - } - return true; -} - -template -cv_status condition_variable::wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d) { - using namespace chrono; - if (__d <= __d.zero()) - return cv_status::timeout; - using __ns_rep = nanoseconds::rep; - steady_clock::time_point __c_now = steady_clock::now(); - -# if defined(_LIBCPP_HAS_COND_CLOCKWAIT) - using __clock_tp_ns = time_point; - __ns_rep __now_count_ns = std::__safe_nanosecond_cast(__c_now.time_since_epoch()).count(); -# else - using __clock_tp_ns = time_point; - __ns_rep __now_count_ns = std::__safe_nanosecond_cast(system_clock::now().time_since_epoch()).count(); -# endif - - __ns_rep __d_ns_count = std::__safe_nanosecond_cast(__d).count(); - - if (__now_count_ns > numeric_limits<__ns_rep>::max() - __d_ns_count) { - __do_timed_wait(__lk, __clock_tp_ns::max()); - } else { - __do_timed_wait(__lk, __clock_tp_ns(nanoseconds(__now_count_ns + __d_ns_count))); - } - - return steady_clock::now() - __c_now < __d ? cv_status::no_timeout : cv_status::timeout; -} - -template -inline bool -condition_variable::wait_for(unique_lock& __lk, const chrono::duration<_Rep, _Period>& __d, _Predicate __pred) { - return wait_until(__lk, chrono::steady_clock::now() + __d, std::move(__pred)); -} - -# if defined(_LIBCPP_HAS_COND_CLOCKWAIT) -inline void condition_variable::__do_timed_wait( - unique_lock& __lk, chrono::time_point __tp) _NOEXCEPT { - using namespace chrono; - if (!__lk.owns_lock()) - __throw_system_error(EPERM, "condition_variable::timed wait: mutex not locked"); - nanoseconds __d = __tp.time_since_epoch(); - timespec __ts; - seconds __s = duration_cast(__d); - using __ts_sec = decltype(__ts.tv_sec); - const __ts_sec __ts_sec_max = numeric_limits<__ts_sec>::max(); - if (__s.count() < __ts_sec_max) { - __ts.tv_sec = static_cast<__ts_sec>(__s.count()); - __ts.tv_nsec = (__d - __s).count(); - } else { - __ts.tv_sec = __ts_sec_max; - __ts.tv_nsec = giga::num - 1; - } - int __ec = pthread_cond_clockwait(&__cv_, __lk.mutex()->native_handle(), CLOCK_MONOTONIC, &__ts); - if (__ec != 0 && __ec != ETIMEDOUT) - __throw_system_error(__ec, "condition_variable timed_wait failed"); -} -# endif // _LIBCPP_HAS_COND_CLOCKWAIT - -template -inline void condition_variable::__do_timed_wait(unique_lock& __lk, - chrono::time_point<_Clock, chrono::nanoseconds> __tp) _NOEXCEPT { - wait_for(__lk, __tp - _Clock::now()); -} - -#endif // _LIBCPP_HAS_NO_THREADS - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___CONDITION_VARIABLE_CONDITION_VARIABLE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__config b/third_party/libcxx/include/c++/v1/__cxx03/__config deleted file mode 100644 index d955429..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__config +++ /dev/null @@ -1,1077 +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___CXX03___CONFIG -#define _LIBCPP___CXX03___CONFIG - -#include <__cxx03/__configuration/abi.h> -#include <__cxx03/__configuration/availability.h> -#include <__cxx03/__configuration/compiler.h> -#include <__cxx03/__configuration/config_site_shim.h> -#include <__cxx03/__configuration/platform.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#ifdef __cplusplus - -// The attributes supported by clang are documented at https://clang.llvm.org/docs/AttributeReference.html - -// _LIBCPP_VERSION represents the version of libc++, which matches the version of LLVM. -// Given a LLVM release LLVM XX.YY.ZZ (e.g. LLVM 17.0.1 == 17.00.01), _LIBCPP_VERSION is -// defined to XXYYZZ. -# define _LIBCPP_VERSION 190100 - -# define _LIBCPP_CONCAT_IMPL(_X, _Y) _X##_Y -# define _LIBCPP_CONCAT(_X, _Y) _LIBCPP_CONCAT_IMPL(_X, _Y) - -// HARDENING { - -// This is for backward compatibility -- make enabling `_LIBCPP_ENABLE_ASSERTIONS` (which predates hardening modes) -// equivalent to setting the extensive mode. This is deprecated and will be removed in LLVM 20. -# ifdef _LIBCPP_ENABLE_ASSERTIONS -# warning "_LIBCPP_ENABLE_ASSERTIONS is deprecated, please use _LIBCPP_HARDENING_MODE instead" -# if _LIBCPP_ENABLE_ASSERTIONS != 0 && _LIBCPP_ENABLE_ASSERTIONS != 1 -# error "_LIBCPP_ENABLE_ASSERTIONS must be set to 0 or 1" -# endif -# if _LIBCPP_ENABLE_ASSERTIONS -# define _LIBCPP_HARDENING_MODE _LIBCPP_HARDENING_MODE_EXTENSIVE -# endif -# endif - -// The library provides the macro `_LIBCPP_HARDENING_MODE` which can be set to one of the following values: -// -// - `_LIBCPP_HARDENING_MODE_NONE`; -// - `_LIBCPP_HARDENING_MODE_FAST`; -// - `_LIBCPP_HARDENING_MODE_EXTENSIVE`; -// - `_LIBCPP_HARDENING_MODE_DEBUG`. -// -// These values have the following effects: -// -// - `_LIBCPP_HARDENING_MODE_NONE` -- sets the hardening mode to "none" which disables all runtime hardening checks; -// -// - `_LIBCPP_HARDENING_MODE_FAST` -- sets that hardening mode to "fast". The fast mode enables security-critical checks -// that can be done with relatively little runtime overhead in constant time; -// -// - `_LIBCPP_HARDENING_MODE_EXTENSIVE` -- sets the hardening mode to "extensive". The extensive mode is a superset of -// the fast mode that additionally enables checks that are relatively cheap and prevent common types of logic errors -// but are not necessarily security-critical; -// -// - `_LIBCPP_HARDENING_MODE_DEBUG` -- sets the hardening mode to "debug". The debug mode is a superset of the extensive -// mode and enables all checks available in the library, including internal assertions. Checks that are part of the -// debug mode can be very expensive and thus the debug mode is intended to be used for testing, not in production. - -// Inside the library, assertions are categorized so they can be cherry-picked based on the chosen hardening mode. These -// macros are only for internal use -- users should only pick one of the high-level hardening modes described above. -// -// - `_LIBCPP_ASSERT_VALID_INPUT_RANGE` -- checks that ranges (whether expressed as an iterator pair, an iterator and -// a sentinel, an iterator and a count, or a `std::range`) given as input to library functions are valid: -// - the sentinel is reachable from the begin iterator; -// - TODO(hardening): both iterators refer to the same container. -// -// - `_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS` -- checks that any attempts to access a container element, whether through -// the container object or through an iterator, are valid and do not attempt to go out of bounds or otherwise access -// a non-existent element. For iterator checks to work, bounded iterators must be enabled in the ABI. Types like -// `optional` and `function` are considered one-element containers for the purposes of this check. -// -// - `_LIBCPP_ASSERT_NON_NULL` -- checks that the pointer being dereferenced is not null. On most modern platforms zero -// address does not refer to an actual location in memory, so a null pointer dereference would not compromize the -// memory security of a program (however, it is still undefined behavior that can result in strange errors due to -// compiler optimizations). -// -// - `_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES` -- for functions that take several ranges as arguments, checks that the -// given ranges do not overlap. -// -// - `_LIBCPP_ASSERT_VALID_DEALLOCATION` -- checks that an attempt to deallocate memory is valid (e.g. the given object -// was allocated by the given allocator). Violating this category typically results in a memory leak. -// -// - `_LIBCPP_ASSERT_VALID_EXTERNAL_API_CALL` -- checks that a call to an external API doesn't fail in -// an unexpected manner. This includes triggering documented cases of undefined behavior in an external library (like -// attempting to unlock an unlocked mutex in pthreads). Any API external to the library falls under this category -// (from system calls to compiler intrinsics). We generally don't expect these failures to compromize memory safety or -// otherwise create an immediate security issue. -// -// - `_LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR` -- checks any operations that exchange nodes between containers to make sure -// the containers have compatible allocators. -// -// - `_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN` -- checks that the given argument is within the domain of valid arguments -// for the function. Violating this typically produces an incorrect result (e.g. the clamp algorithm returns the -// original value without clamping it due to incorrect functors) or puts an object into an invalid state (e.g. -// a string view where only a subset of elements is possible to access). This category is for assertions violating -// which doesn't cause any immediate issues in the library -- whatever the consequences are, they will happen in the -// user code. -// -// - `_LIBCPP_ASSERT_PEDANTIC` -- checks prerequisites which are imposed by the Standard, but violating which happens to -// be benign in our implementation. -// -// - `_LIBCPP_ASSERT_SEMANTIC_REQUIREMENT` -- checks that the given argument satisfies the semantic requirements imposed -// by the Standard. Typically, there is no simple way to completely prove that a semantic requirement is satisfied; -// thus, this would often be a heuristic check and it might be quite expensive. -// -// - `_LIBCPP_ASSERT_INTERNAL` -- checks that internal invariants of the library hold. These assertions don't depend on -// user input. -// -// - `_LIBCPP_ASSERT_UNCATEGORIZED` -- for assertions that haven't been properly classified yet. - -// clang-format off -# define _LIBCPP_HARDENING_MODE_NONE (1 << 1) -# define _LIBCPP_HARDENING_MODE_FAST (1 << 2) -# define _LIBCPP_HARDENING_MODE_EXTENSIVE (1 << 4) // Deliberately not ordered. -# define _LIBCPP_HARDENING_MODE_DEBUG (1 << 3) -// clang-format on - -# ifndef _LIBCPP_HARDENING_MODE - -# ifndef _LIBCPP_HARDENING_MODE_DEFAULT -# error _LIBCPP_HARDENING_MODE_DEFAULT is not defined. This definition should be set at configuration time in the \ -`__config_site` header, please make sure your installation of libc++ is not broken. -# endif - -# define _LIBCPP_HARDENING_MODE _LIBCPP_HARDENING_MODE_DEFAULT -# endif - -# if _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_NONE && \ - _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_FAST && \ - _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_EXTENSIVE && \ - _LIBCPP_HARDENING_MODE != _LIBCPP_HARDENING_MODE_DEBUG -# error _LIBCPP_HARDENING_MODE must be set to one of the following values: \ -_LIBCPP_HARDENING_MODE_NONE, \ -_LIBCPP_HARDENING_MODE_FAST, \ -_LIBCPP_HARDENING_MODE_EXTENSIVE, \ -_LIBCPP_HARDENING_MODE_DEBUG -# endif - -# ifdef _LIBCPP_ASSERTION_SEMANTIC -# error "Assertion semantics are not available in the C++03 mode." -# endif - -// } HARDENING - -# define _LIBCPP_TOSTRING2(x) #x -# define _LIBCPP_TOSTRING(x) _LIBCPP_TOSTRING2(x) - -# ifndef __has_constexpr_builtin -# define __has_constexpr_builtin(x) 0 -# endif - -// This checks wheter a Clang module is built -# ifndef __building_module -# define __building_module(...) 0 -# endif - -// '__is_identifier' returns '0' if '__x' is a reserved identifier provided by -// the compiler and '1' otherwise. -# ifndef __is_identifier -# define __is_identifier(__x) 1 -# endif - -# ifndef __has_declspec_attribute -# define __has_declspec_attribute(__x) 0 -# endif - -# define __has_keyword(__x) !(__is_identifier(__x)) - -# ifndef __has_warning -# define __has_warning(...) 0 -# endif - -# if !defined(_LIBCPP_COMPILER_CLANG_BASED) && __cplusplus < 201103L -# error "libc++ only supports C++03 with Clang-based compilers. Please enable C++11" -# endif - -// FIXME: ABI detection should be done via compiler builtin macros. This -// is just a placeholder until Clang implements such macros. For now assume -// that Windows compilers pretending to be MSVC++ target the Microsoft ABI, -// and allow the user to explicitly specify the ABI to handle cases where this -// heuristic falls short. -# if defined(_LIBCPP_ABI_FORCE_ITANIUM) && defined(_LIBCPP_ABI_FORCE_MICROSOFT) -# error "Only one of _LIBCPP_ABI_FORCE_ITANIUM and _LIBCPP_ABI_FORCE_MICROSOFT can be defined" -# elif defined(_LIBCPP_ABI_FORCE_ITANIUM) -# define _LIBCPP_ABI_ITANIUM -# elif defined(_LIBCPP_ABI_FORCE_MICROSOFT) -# define _LIBCPP_ABI_MICROSOFT -# else -# if defined(_WIN32) && defined(_MSC_VER) -# define _LIBCPP_ABI_MICROSOFT -# else -# define _LIBCPP_ABI_ITANIUM -# endif -# endif - -# if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME) -# define _LIBCPP_ABI_VCRUNTIME -# endif - -# if __has_feature(experimental_library) -# ifndef _LIBCPP_ENABLE_EXPERIMENTAL -# define _LIBCPP_ENABLE_EXPERIMENTAL -# endif -# endif - -# if defined(__MVS__) -# include // for __NATIVE_ASCII_F -# endif - -# if defined(_WIN32) -# define _LIBCPP_WIN32API -# define _LIBCPP_SHORT_WCHAR 1 -// Both MinGW and native MSVC provide a "MSVC"-like environment -# define _LIBCPP_MSVCRT_LIKE -// If mingw not explicitly detected, assume using MS C runtime only if -// a MS compatibility version is specified. -# if defined(_MSC_VER) && !defined(__MINGW32__) -# define _LIBCPP_MSVCRT // Using Microsoft's C Runtime library -# endif -# if (defined(_M_AMD64) || defined(__x86_64__)) || (defined(_M_ARM) || defined(__arm__)) -# define _LIBCPP_HAS_BITSCAN64 -# endif -# define _LIBCPP_HAS_OPEN_WITH_WCHAR -# endif // defined(_WIN32) - -# if defined(_AIX) && !defined(__64BIT__) -// The size of wchar is 2 byte on 32-bit mode on AIX. -# define _LIBCPP_SHORT_WCHAR 1 -# endif - -// Libc++ supports various implementations of std::random_device. -// -// _LIBCPP_USING_DEV_RANDOM -// Read entropy from the given file, by default `/dev/urandom`. -// If a token is provided, it is assumed to be the path to a file -// to read entropy from. This is the default behavior if nothing -// else is specified. This implementation requires storing state -// inside `std::random_device`. -// -// _LIBCPP_USING_ARC4_RANDOM -// Use arc4random(). This allows obtaining random data even when -// using sandboxing mechanisms. On some platforms like Apple, this -// is the recommended source of entropy for user-space programs. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_GETENTROPY -// Use getentropy(). -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_FUCHSIA_CPRNG -// Use Fuchsia's zx_cprng_draw() system call, which is specified to -// deliver high-quality entropy and cannot fail. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_NACL_RANDOM -// NaCl's sandbox (which PNaCl also runs in) doesn't allow filesystem access, -// including accesses to the special files under `/dev`. This implementation -// uses the NaCL syscall `nacl_secure_random_init()` to get entropy. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -// -// _LIBCPP_USING_WIN32_RANDOM -// Use rand_s(), for use on Windows. -// When this option is used, the token passed to `std::random_device`'s -// constructor *must* be "/dev/urandom" -- anything else is an error. -# if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ - defined(__DragonFly__) -# define _LIBCPP_USING_ARC4_RANDOM -# elif defined(__wasi__) || defined(__EMSCRIPTEN__) -# define _LIBCPP_USING_GETENTROPY -# elif defined(__Fuchsia__) -# define _LIBCPP_USING_FUCHSIA_CPRNG -# elif defined(__native_client__) -# define _LIBCPP_USING_NACL_RANDOM -# elif defined(_LIBCPP_WIN32API) -# define _LIBCPP_USING_WIN32_RANDOM -# else -# define _LIBCPP_USING_DEV_RANDOM -# endif - -# define _LIBCPP_ALIGNOF(_Tp) _Alignof(_Tp) -# define _ALIGNAS_TYPE(x) __attribute__((__aligned__(_LIBCPP_ALIGNOF(x)))) -# define _ALIGNAS(x) __attribute__((__aligned__(x))) -# define _LIBCPP_NORETURN __attribute__((__noreturn__)) -# define nullptr __nullptr -# define _NOEXCEPT throw() -# define static_assert(...) _Static_assert(__VA_ARGS__) -# define decltype(...) __decltype(__VA_ARGS__) - -typedef __char16_t char16_t; -typedef __char32_t char32_t; - -# define _LIBCPP_PREFERRED_ALIGNOF(_Tp) __alignof(_Tp) - -// Objective-C++ features (opt-in) -# if __has_feature(objc_arc) -# define _LIBCPP_HAS_OBJC_ARC -# endif - -# if __has_feature(objc_arc_weak) -# define _LIBCPP_HAS_OBJC_ARC_WEAK -# endif - -# if __has_extension(blocks) -# define _LIBCPP_HAS_EXTENSION_BLOCKS -# endif - -# if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && defined(__APPLE__) -# define _LIBCPP_HAS_BLOCKS_RUNTIME -# endif - -# if !__has_feature(address_sanitizer) -# define _LIBCPP_HAS_NO_ASAN -# endif - -# define _LIBCPP_ALWAYS_INLINE __attribute__((__always_inline__)) - -# define _LIBCPP_DISABLE_EXTENSION_WARNING __extension__ - -# if defined(_LIBCPP_OBJECT_FORMAT_COFF) - -# ifdef _DLL -# define _LIBCPP_CRT_FUNC __declspec(dllimport) -# else -# define _LIBCPP_CRT_FUNC -# endif - -# if defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) || (defined(__MINGW32__) && !defined(_LIBCPP_BUILDING_LIBRARY)) -# define _LIBCPP_DLL_VIS -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_EXPORTED_FROM_ABI -# elif defined(_LIBCPP_BUILDING_LIBRARY) -# define _LIBCPP_DLL_VIS __declspec(dllexport) -# if defined(__MINGW32__) -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_DLL_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# else -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS _LIBCPP_DLL_VIS -# endif -# define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_DLL_VIS -# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllexport) -# else -# define _LIBCPP_DLL_VIS __declspec(dllimport) -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_DLL_VIS -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllimport) -# endif - -# define _LIBCPP_HIDDEN -# define _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS -# define _LIBCPP_TEMPLATE_VIS -# define _LIBCPP_TEMPLATE_DATA_VIS -# define _LIBCPP_TYPE_VISIBILITY_DEFAULT - -# else - -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -# define _LIBCPP_VISIBILITY(vis) __attribute__((__visibility__(vis))) -# else -# define _LIBCPP_VISIBILITY(vis) -# endif - -# define _LIBCPP_HIDDEN _LIBCPP_VISIBILITY("hidden") -# define _LIBCPP_TEMPLATE_DATA_VIS _LIBCPP_VISIBILITY("default") -# define _LIBCPP_EXPORTED_FROM_ABI _LIBCPP_VISIBILITY("default") -# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_VISIBILITY("default") -# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS - -// TODO: Make this a proper customization point or remove the option to override it. -# ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS -# define _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_VISIBILITY("default") -# endif - -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -// The inline should be removed once PR32114 is resolved -# define _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS inline _LIBCPP_HIDDEN -# else -# define _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS -# endif - -// GCC doesn't support the type_visibility attribute, so we have to keep the visibility attribute on templates -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) && !__has_attribute(__type_visibility__) -# define _LIBCPP_TEMPLATE_VIS __attribute__((__visibility__("default"))) -# else -# define _LIBCPP_TEMPLATE_VIS -# endif - -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) && __has_attribute(__type_visibility__) -# define _LIBCPP_TYPE_VISIBILITY_DEFAULT __attribute__((__type_visibility__("default"))) -# else -# define _LIBCPP_TYPE_VISIBILITY_DEFAULT -# endif - -# endif // defined(_LIBCPP_OBJECT_FORMAT_COFF) - -# if __has_attribute(exclude_from_explicit_instantiation) -# define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION __attribute__((__exclude_from_explicit_instantiation__)) -# else -// Try to approximate the effect of exclude_from_explicit_instantiation -// (which is that entities are not assumed to be provided by explicit -// template instantiations in the dylib) by always inlining those entities. -# define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION _LIBCPP_ALWAYS_INLINE -# endif - -# ifdef _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") -# define _LIBCPP_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(clang diagnostic ignored str)) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) -# elif defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") -# define _LIBCPP_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(GCC diagnostic ignored str)) -# else -# define _LIBCPP_DIAGNOSTIC_PUSH -# define _LIBCPP_DIAGNOSTIC_POP -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) -# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) -# endif - -# if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST -# define _LIBCPP_HARDENING_SIG f -# elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_EXTENSIVE -# define _LIBCPP_HARDENING_SIG s -# elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -# define _LIBCPP_HARDENING_SIG d -# else -# define _LIBCPP_HARDENING_SIG n // "none" -# endif - -# ifdef _LIBCPP_HAS_NO_EXCEPTIONS -# define _LIBCPP_EXCEPTIONS_SIG n -# else -# define _LIBCPP_EXCEPTIONS_SIG e -# endif - -# define _LIBCPP_ODR_SIGNATURE \ - _LIBCPP_CONCAT(_LIBCPP_CONCAT(_LIBCPP_HARDENING_SIG, _LIBCPP_EXCEPTIONS_SIG), _LIBCPP_VERSION) - -// This macro marks a symbol as being hidden from libc++'s ABI. This is achieved -// on two levels: -// 1. The symbol is given hidden visibility, which ensures that users won't start exporting -// symbols from their dynamic library by means of using the libc++ headers. This ensures -// that those symbols stay private to the dynamic library in which it is defined. -// -// 2. The symbol is given an ABI tag that encodes the ODR-relevant properties of the library. -// This ensures that no ODR violation can arise from mixing two TUs compiled with different -// versions or configurations of libc++ (such as exceptions vs no-exceptions). Indeed, if the -// program contains two definitions of a function, the ODR requires them to be token-by-token -// equivalent, and the linker is allowed to pick either definition and discard the other one. -// -// For example, if a program contains a copy of `vector::at()` compiled with exceptions enabled -// *and* a copy of `vector::at()` compiled with exceptions disabled (by means of having two TUs -// compiled with different settings), the two definitions are both visible by the linker and they -// have the same name, but they have a meaningfully different implementation (one throws an exception -// and the other aborts the program). This violates the ODR and makes the program ill-formed, and in -// practice what will happen is that the linker will pick one of the definitions at random and will -// discard the other one. This can quite clearly lead to incorrect program behavior. -// -// A similar reasoning holds for many other properties that are ODR-affecting. Essentially any -// property that causes the code of a function to differ from the code in another configuration -// can be considered ODR-affecting. In practice, we don't encode all such properties in the ABI -// tag, but we encode the ones that we think are most important: library version, exceptions, and -// hardening mode. -// -// Note that historically, solving this problem has been achieved in various ways, including -// force-inlining all functions or giving internal linkage to all functions. Both these previous -// solutions suffer from drawbacks that lead notably to code bloat. -// -// Note that we use _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION to ensure that we don't depend -// on _LIBCPP_HIDE_FROM_ABI methods of classes explicitly instantiated in the dynamic library. -// -// Also note that the _LIBCPP_HIDE_FROM_ABI_VIRTUAL macro should be used on virtual functions -// instead of _LIBCPP_HIDE_FROM_ABI. That macro does not use an ABI tag. Indeed, the mangled -// name of a virtual function is part of its ABI, since some architectures like arm64e can sign -// the virtual function pointer in the vtable based on the mangled name of the function. Since -// we use an ABI tag that changes with each released version, the mangled name of the virtual -// function would change, which is incorrect. Note that it doesn't make much sense to change -// the implementation of a virtual function in an ABI-incompatible way in the first place, -// since that would be an ABI break anyway. Hence, the lack of ABI tag should not be noticeable. -// -// The macro can be applied to record and enum types. When the tagged type is nested in -// a record this "parent" record needs to have the macro too. Another use case for applying -// this macro to records and unions is to apply an ABI tag to inline constexpr variables. -// This can be useful for inline variables that are implementation details which are expected -// to change in the future. -// -// TODO: We provide a escape hatch with _LIBCPP_NO_ABI_TAG for folks who want to avoid increasing -// the length of symbols with an ABI tag. In practice, we should remove the escape hatch and -// use compression mangling instead, see https://github.com/itanium-cxx-abi/cxx-abi/issues/70. -# ifndef _LIBCPP_NO_ABI_TAG -# define _LIBCPP_HIDE_FROM_ABI \ - _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION \ - __attribute__((__abi_tag__(_LIBCPP_TOSTRING(_LIBCPP_ODR_SIGNATURE)))) -# else -# define _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION -# endif -# define _LIBCPP_HIDE_FROM_ABI_VIRTUAL _LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION - -# ifdef _LIBCPP_BUILDING_LIBRARY -# if _LIBCPP_ABI_VERSION > 1 -# define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 _LIBCPP_HIDE_FROM_ABI -# else -# define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 -# endif -# else -# define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 _LIBCPP_HIDE_FROM_ABI -# endif - -// TODO: Remove this workaround once we drop support for Clang 16 -# if __has_warning("-Wc++23-extensions") -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++23-extensions") -# else -# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++2b-extensions") -# endif - -// Clang modules take a significant compile time hit when pushing and popping diagnostics. -// Since all the headers are marked as system headers in the modulemap, we can simply disable this -// pushing and popping when building with clang modules. -# if !__has_feature(modules) -# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS \ - _LIBCPP_DIAGNOSTIC_PUSH \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++11-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \ - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \ - _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++23-extensions") -# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS _LIBCPP_DIAGNOSTIC_POP -# else -# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS -# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS -# endif - -// Inline namespaces are available in Clang/GCC/MSVC regardless of C++ dialect. -// clang-format off -# define _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS \ - namespace _LIBCPP_TYPE_VISIBILITY_DEFAULT std { \ - inline namespace _LIBCPP_ABI_NAMESPACE { -# define _LIBCPP_END_NAMESPACE_STD }} _LIBCPP_POP_EXTENSION_DIAGNOSTICS - -#ifdef _LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE -# define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM _LIBCPP_BEGIN_NAMESPACE_STD namespace filesystem { -# define _LIBCPP_END_NAMESPACE_FILESYSTEM } _LIBCPP_END_NAMESPACE_STD -#else -# define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM _LIBCPP_BEGIN_NAMESPACE_STD \ - inline namespace __fs { namespace filesystem { - -# define _LIBCPP_END_NAMESPACE_FILESYSTEM }} _LIBCPP_END_NAMESPACE_STD -#endif - -// clang-format on - -# if __has_attribute(__enable_if__) -# define _LIBCPP_PREFERRED_OVERLOAD __attribute__((__enable_if__(true, ""))) -# endif - -# if !defined(__SIZEOF_INT128__) || defined(_MSC_VER) -# define _LIBCPP_HAS_NO_INT128 -# endif - -# define _LIBCPP_DECLARE_STRONG_ENUM(x) \ - struct _LIBCPP_EXPORTED_FROM_ABI x { \ - enum __lx -// clang-format off -# define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \ - __lx __v_; \ - _LIBCPP_HIDE_FROM_ABI x(__lx __v) : __v_(__v) {} \ - _LIBCPP_HIDE_FROM_ABI explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \ - _LIBCPP_HIDE_FROM_ABI operator int() const { return __v_; } \ - }; -// clang-format on - -# if defined(__APPLE__) || defined(__FreeBSD__) || defined(_LIBCPP_MSVCRT_LIKE) || defined(__NetBSD__) -# define _LIBCPP_LOCALE__L_EXTENSIONS 1 -# endif - -# ifdef __FreeBSD__ -# define _DECLARE_C99_LDBL_MATH 1 -# endif - -// If we are getting operator new from the MSVC CRT, then allocation overloads -// for align_val_t were added in 19.12, aka VS 2017 version 15.3. -# if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912 -# define _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION -# elif defined(_LIBCPP_ABI_VCRUNTIME) && !defined(__cpp_aligned_new) -// We're deferring to Microsoft's STL to provide aligned new et al. We don't -// have it unless the language feature test macro is defined. -# define _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION -# elif defined(__MVS__) -# define _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION -# endif - -# if defined(_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION) || (!defined(__cpp_aligned_new) || __cpp_aligned_new < 201606) -# define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION -# endif - -# if defined(__APPLE__) || defined(__FreeBSD__) -# define _LIBCPP_HAS_DEFAULTRUNELOCALE -# endif - -# if defined(__APPLE__) || defined(__FreeBSD__) -# define _LIBCPP_WCTYPE_IS_MASK -# endif - -# define _LIBCPP_HAS_NO_CHAR8_T - -// Deprecation macros. -// -// Deprecations warnings are always enabled, except when users explicitly opt-out -// by defining _LIBCPP_DISABLE_DEPRECATION_WARNINGS. -# if !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS) -# define _LIBCPP_DEPRECATED __attribute__((__deprecated__)) -# define _LIBCPP_DEPRECATED_(m) __attribute__((__deprecated__(m))) -# else -# define _LIBCPP_DEPRECATED -# define _LIBCPP_DEPRECATED_(m) -# endif - -# define _LIBCPP_DEPRECATED_ATOMIC_SYNC /* nothing */ - -# if !defined(_LIBCPP_HAS_NO_CHAR8_T) -# define _LIBCPP_DEPRECATED_WITH_CHAR8_T _LIBCPP_DEPRECATED -# else -# define _LIBCPP_DEPRECATED_WITH_CHAR8_T -# endif - -// Macros to enter and leave a state where deprecation warnings are suppressed. -# if defined(_LIBCPP_COMPILER_CLANG_BASED) || defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_SUPPRESS_DEPRECATED_PUSH \ - _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wdeprecated\"") \ - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") -# define _LIBCPP_SUPPRESS_DEPRECATED_POP _Pragma("GCC diagnostic pop") -# else -# define _LIBCPP_SUPPRESS_DEPRECATED_PUSH -# define _LIBCPP_SUPPRESS_DEPRECATED_POP -# endif - -# ifndef _LIBCPP_WEAK -# define _LIBCPP_WEAK __attribute__((__weak__)) -# endif - -// Thread API -// clang-format off -# if !defined(_LIBCPP_HAS_NO_THREADS) && \ - !defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && \ - !defined(_LIBCPP_HAS_THREAD_API_WIN32) && \ - !defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) - -# if defined(__FreeBSD__) || \ - defined(__wasi__) || \ - defined(__NetBSD__) || \ - defined(__OpenBSD__) || \ - defined(__NuttX__) || \ - defined(__linux__) || \ - defined(__GNU__) || \ - defined(__APPLE__) || \ - defined(__MVS__) || \ - defined(_AIX) || \ - defined(__EMSCRIPTEN__) -// clang-format on -# define _LIBCPP_HAS_THREAD_API_PTHREAD -# elif defined(__Fuchsia__) -// TODO(44575): Switch to C11 thread API when possible. -# define _LIBCPP_HAS_THREAD_API_PTHREAD -# elif defined(_LIBCPP_WIN32API) -# define _LIBCPP_HAS_THREAD_API_WIN32 -# else -# error "No thread API" -# endif // _LIBCPP_HAS_THREAD_API -# endif // _LIBCPP_HAS_NO_THREADS - -# if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) -# if defined(__ANDROID__) && __ANDROID_API__ >= 30 -# define _LIBCPP_HAS_COND_CLOCKWAIT -# elif defined(_LIBCPP_GLIBC_PREREQ) -# if _LIBCPP_GLIBC_PREREQ(2, 30) -# define _LIBCPP_HAS_COND_CLOCKWAIT -# endif -# endif -# endif - -# if defined(_LIBCPP_HAS_NO_THREADS) && defined(_LIBCPP_HAS_THREAD_API_PTHREAD) -# error _LIBCPP_HAS_THREAD_API_PTHREAD may only be defined when \ - _LIBCPP_HAS_NO_THREADS is not defined. -# endif - -# if defined(_LIBCPP_HAS_NO_THREADS) && defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) -# error _LIBCPP_HAS_THREAD_API_EXTERNAL may not be defined when \ - _LIBCPP_HAS_NO_THREADS is defined. -# endif - -# if defined(_LIBCPP_HAS_NO_MONOTONIC_CLOCK) && !defined(_LIBCPP_HAS_NO_THREADS) -# error _LIBCPP_HAS_NO_MONOTONIC_CLOCK may only be defined when \ - _LIBCPP_HAS_NO_THREADS is defined. -# endif - -# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(__STDCPP_THREADS__) -# define __STDCPP_THREADS__ 1 -# endif - -// The glibc and Bionic implementation of pthreads implements -// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32 -// mutexes have no destroy mechanism. -// -// This optimization can't be performed on Apple platforms, where -// pthread_mutex_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): Enable this optimization on Bionic after speaking to their -// respective stakeholders. -// clang-format off -# if (defined(_LIBCPP_HAS_THREAD_API_PTHREAD) && defined(__GLIBC__)) || \ - (defined(_LIBCPP_HAS_THREAD_API_C11) && defined(__Fuchsia__)) || \ - defined(_LIBCPP_HAS_THREAD_API_WIN32) -// clang-format on -# define _LIBCPP_HAS_TRIVIAL_MUTEX_DESTRUCTION -# endif - -// Destroying a condvar is a nop on Windows. -// -// This optimization can't be performed on Apple platforms, where -// pthread_cond_destroy can allow the kernel to release resources. -// See https://llvm.org/D64298 for details. -// -// TODO(EricWF): This is potentially true for some pthread implementations -// as well. -# if (defined(_LIBCPP_HAS_THREAD_API_C11) && defined(__Fuchsia__)) || defined(_LIBCPP_HAS_THREAD_API_WIN32) -# define _LIBCPP_HAS_TRIVIAL_CONDVAR_DESTRUCTION -# endif - -# if defined(__BIONIC__) || defined(__NuttX__) || defined(__Fuchsia__) || defined(__wasi__) || \ - defined(_LIBCPP_HAS_MUSL_LIBC) || defined(__OpenBSD__) -# define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE -# endif - -# if __has_feature(cxx_atomic) || __has_extension(c_atomic) || __has_keyword(_Atomic) -# define _LIBCPP_HAS_C_ATOMIC_IMP -# elif defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_HAS_GCC_ATOMIC_IMP -# endif - -# if !defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP) && \ - !defined(_LIBCPP_HAS_EXTERNAL_ATOMIC_IMP) -# define _LIBCPP_HAS_NO_ATOMIC_HEADER -# else -# ifndef _LIBCPP_ATOMIC_FLAG_TYPE -# define _LIBCPP_ATOMIC_FLAG_TYPE bool -# endif -# endif - -# if defined(__FreeBSD__) && defined(__clang__) && __has_attribute(__no_thread_safety_analysis__) -# define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS __attribute__((__no_thread_safety_analysis__)) -# else -# define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS -# endif - -# if defined(_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS) -# if defined(__clang__) && __has_attribute(acquire_capability) -// Work around the attribute handling in clang. When both __declspec and -// __attribute__ are present, the processing goes awry preventing the definition -// of the types. In MinGW mode, __declspec evaluates to __attribute__, and thus -// combining the two does work. -# if !defined(_MSC_VER) -# define _LIBCPP_HAS_THREAD_SAFETY_ANNOTATIONS -# endif -# endif -# endif - -# ifdef _LIBCPP_HAS_THREAD_SAFETY_ANNOTATIONS -# define _LIBCPP_THREAD_SAFETY_ANNOTATION(x) __attribute__((x)) -# else -# define _LIBCPP_THREAD_SAFETY_ANNOTATION(x) -# endif - -# if __has_attribute(__require_constant_initialization__) -# define _LIBCPP_CONSTINIT __attribute__((__require_constant_initialization__)) -# else -# define _LIBCPP_CONSTINIT -# endif - -# if defined(__CUDACC__) || defined(__CUDA_ARCH__) || defined(__CUDA_LIBDEVICE__) -// The CUDA SDK contains an unfortunate definition for the __noinline__ macro, -// which breaks the regular __attribute__((__noinline__)) syntax. Therefore, -// when compiling for CUDA we use the non-underscored version of the noinline -// attribute. -// -// This is a temporary workaround and we still expect the CUDA SDK team to solve -// this issue properly in the SDK headers. -// -// See https://github.com/llvm/llvm-project/pull/73838 for more details. -# define _LIBCPP_NOINLINE __attribute__((noinline)) -# elif __has_attribute(__noinline__) -# define _LIBCPP_NOINLINE __attribute__((__noinline__)) -# else -# define _LIBCPP_NOINLINE -# endif - -// We often repeat things just for handling wide characters in the library. -// When wide characters are disabled, it can be useful to have a quick way of -// disabling it without having to resort to #if-#endif, which has a larger -// impact on readability. -# if defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) -# define _LIBCPP_IF_WIDE_CHARACTERS(...) -# else -# define _LIBCPP_IF_WIDE_CHARACTERS(...) __VA_ARGS__ -# endif - -// clang-format off -# define _LIBCPP_PUSH_MACROS _Pragma("push_macro(\"min\")") _Pragma("push_macro(\"max\")") _Pragma("push_macro(\"refresh\")") _Pragma("push_macro(\"move\")") _Pragma("push_macro(\"erase\")") -# define _LIBCPP_POP_MACROS _Pragma("pop_macro(\"min\")") _Pragma("pop_macro(\"max\")") _Pragma("pop_macro(\"refresh\")") _Pragma("pop_macro(\"move\")") _Pragma("pop_macro(\"erase\")") -// clang-format on - -# ifndef _LIBCPP_NO_AUTO_LINK -# if defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_BUILDING_LIBRARY) -# if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) -# pragma comment(lib, "c++.lib") -# else -# pragma comment(lib, "libc++.lib") -# endif -# endif // defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_BUILDING_LIBRARY) -# endif // _LIBCPP_NO_AUTO_LINK - -// Configures the fopen close-on-exec mode character, if any. This string will -// be appended to any mode string used by fstream for fopen/fdopen. -// -// Not all platforms support this, but it helps avoid fd-leaks on platforms that -// do. -# if defined(__BIONIC__) -# define _LIBCPP_FOPEN_CLOEXEC_MODE "e" -# else -# define _LIBCPP_FOPEN_CLOEXEC_MODE -# endif - -# if __has_cpp_attribute(msvc::no_unique_address) -// MSVC implements [[no_unique_address]] as a silent no-op currently. -// (If/when MSVC breaks its C++ ABI, it will be changed to work as intended.) -// However, MSVC implements [[msvc::no_unique_address]] which does what -// [[no_unique_address]] is supposed to do, in general. - -// Clang-cl does not yet (14.0) implement either [[no_unique_address]] or -// [[msvc::no_unique_address]] though. If/when it does implement -// [[msvc::no_unique_address]], this should be preferred though. -# define _LIBCPP_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]] -# elif __has_cpp_attribute(no_unique_address) -# define _LIBCPP_NO_UNIQUE_ADDRESS [[__no_unique_address__]] -# else -# define _LIBCPP_NO_UNIQUE_ADDRESS /* nothing */ -// Note that this can be replaced by #error as soon as clang-cl -// implements msvc::no_unique_address, since there should be no C++20 -// compiler that doesn't support one of the two attributes at that point. -// We generally don't want to use this macro outside of C++20-only code, -// because using it conditionally in one language version only would make -// the ABI inconsistent. -# endif - -// c8rtomb() and mbrtoc8() were added in C++20 and C23. Support for these -// functions is gradually being added to existing C libraries. The conditions -// below check for known C library versions and conditions under which these -// functions are declared by the C library. -# define _LIBCPP_HAS_NO_C8RTOMB_MBRTOC8 -// GNU libc 2.36 and newer declare c8rtomb() and mbrtoc8() in C++ modes if -// __cpp_char8_t is defined or if C2X extensions are enabled. Determining -// the latter depends on internal GNU libc details that are not appropriate -// to depend on here, so any declarations present when __cpp_char8_t is not -// defined are ignored. -# if defined(_LIBCPP_GLIBC_PREREQ) -# if _LIBCPP_GLIBC_PREREQ(2, 36) && defined(__cpp_char8_t) -# undef _LIBCPP_HAS_NO_C8RTOMB_MBRTOC8 -# endif -# endif - -// There are a handful of public standard library types that are intended to -// support CTAD but don't need any explicit deduction guides to do so. This -// macro is used to mark them as such, which suppresses the -// '-Wctad-maybe-unsupported' compiler warning when CTAD is used in user code -// with these classes. -# define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "") - -// TODO(varconst): currently, there are bugs in Clang's intrinsics when handling Objective-C++ `id`, so don't use -// compiler intrinsics in the Objective-C++ mode. -# ifdef __OBJC__ -# define _LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS -# endif - -# define _PSTL_PRAGMA(x) _Pragma(#x) - -// Enable SIMD for compilers that support OpenMP 4.0 -# if (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_UDR_PRESENT -# define _PSTL_PRAGMA_SIMD _PSTL_PRAGMA(omp simd) -# define _PSTL_PRAGMA_DECLARE_SIMD _PSTL_PRAGMA(omp declare simd) -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _PSTL_PRAGMA(omp simd reduction(PRM)) -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) _PSTL_PRAGMA(omp simd reduction(inscan, PRM)) -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan inclusive(PRM)) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) _PSTL_PRAGMA(omp scan exclusive(PRM)) - -// Declaration of reduction functor, where -// NAME - the name of the functor -// OP - type of the callable object with the reduction operation -// omp_in - refers to the local partial result -// omp_out - refers to the final value of the combiner operator -// omp_priv - refers to the private copy of the initial value -// omp_orig - refers to the original variable to be reduced -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) \ - _PSTL_PRAGMA(omp declare reduction(NAME:OP : omp_out(omp_in)) initializer(omp_priv = omp_orig)) - -# elif defined(_LIBCPP_COMPILER_CLANG_BASED) - -# define _PSTL_PRAGMA_SIMD _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_DECLARE_SIMD -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) _Pragma("clang loop vectorize(enable) interleave(enable)") -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) - -# else // (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_PRAGMA_SIMD -# define _PSTL_PRAGMA_DECLARE_SIMD -# define _PSTL_PRAGMA_SIMD_REDUCTION(PRM) -# define _PSTL_PRAGMA_SIMD_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_INCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_SIMD_EXCLUSIVE_SCAN(PRM) -# define _PSTL_PRAGMA_DECLARE_REDUCTION(NAME, OP) - -# endif // (defined(_OPENMP) && _OPENMP >= 201307) - -# define _PSTL_USE_NONTEMPORAL_STORES_IF_ALLOWED - -// Optional attributes - these are useful for a better QoI, but not required to be available - -# if __has_attribute(__no_sanitize__) && !defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_NO_CFI __attribute__((__no_sanitize__("cfi"))) -# else -# define _LIBCPP_NO_CFI -# endif - -# if __has_attribute(__malloc__) -# define _LIBCPP_NOALIAS __attribute__((__malloc__)) -# else -# define _LIBCPP_NOALIAS -# endif - -# if __has_attribute(__using_if_exists__) -# define _LIBCPP_USING_IF_EXISTS __attribute__((__using_if_exists__)) -# else -# define _LIBCPP_USING_IF_EXISTS -# endif - -# if __has_cpp_attribute(__nodiscard__) -# define _LIBCPP_NODISCARD [[__nodiscard__]] -# else -// We can't use GCC's [[gnu::warn_unused_result]] and -// __attribute__((warn_unused_result)), because GCC does not silence them via -// (void) cast. -# define _LIBCPP_NODISCARD -# endif - -# if __has_attribute(__no_destroy__) -# define _LIBCPP_NO_DESTROY __attribute__((__no_destroy__)) -# else -# define _LIBCPP_NO_DESTROY -# endif - -# if __has_attribute(__diagnose_if__) -# define _LIBCPP_DIAGNOSE_WARNING(...) __attribute__((__diagnose_if__(__VA_ARGS__, "warning"))) -# else -# define _LIBCPP_DIAGNOSE_WARNING(...) -# endif - -// Use a function like macro to imply that it must be followed by a semicolon -# if __has_cpp_attribute(fallthrough) -# define _LIBCPP_FALLTHROUGH() [[fallthrough]] -# elif __has_attribute(__fallthrough__) -# define _LIBCPP_FALLTHROUGH() __attribute__((__fallthrough__)) -# else -# define _LIBCPP_FALLTHROUGH() ((void)0) -# endif - -# if __has_cpp_attribute(_Clang::__lifetimebound__) -# define _LIBCPP_LIFETIMEBOUND [[_Clang::__lifetimebound__]] -# else -# define _LIBCPP_LIFETIMEBOUND -# endif - -# if __has_attribute(__nodebug__) -# define _LIBCPP_NODEBUG __attribute__((__nodebug__)) -# else -# define _LIBCPP_NODEBUG -# endif - -# if __has_attribute(__standalone_debug__) -# define _LIBCPP_STANDALONE_DEBUG __attribute__((__standalone_debug__)) -# else -# define _LIBCPP_STANDALONE_DEBUG -# endif - -# if __has_attribute(__preferred_name__) -# define _LIBCPP_PREFERRED_NAME(x) __attribute__((__preferred_name__(x))) -# else -# define _LIBCPP_PREFERRED_NAME(x) -# endif - -# if __has_attribute(__no_sanitize__) -# define _LIBCPP_NO_SANITIZE(...) __attribute__((__no_sanitize__(__VA_ARGS__))) -# else -# define _LIBCPP_NO_SANITIZE(...) -# endif - -# if __has_attribute(__init_priority__) -# define _LIBCPP_INIT_PRIORITY_MAX __attribute__((__init_priority__(100))) -# else -# define _LIBCPP_INIT_PRIORITY_MAX -# endif - -# if __has_attribute(__format__) -// The attribute uses 1-based indices for ordinary and static member functions. -// The attribute uses 2-based indices for non-static member functions. -# define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) \ - __attribute__((__format__(archetype, format_string_index, first_format_arg_index))) -# else -# define _LIBCPP_ATTRIBUTE_FORMAT(archetype, format_string_index, first_format_arg_index) /* nothing */ -# endif - -# if __has_attribute(__packed__) -# define _LIBCPP_PACKED __attribute__((__packed__)) -# else -# define _LIBCPP_PACKED -# endif - -# if defined(_LIBCPP_ABI_MICROSOFT) && __has_declspec_attribute(empty_bases) -# define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases) -# else -# define _LIBCPP_DECLSPEC_EMPTY_BASES -# endif - -// Allow for build-time disabling of unsigned integer sanitization -# if __has_attribute(no_sanitize) && !defined(_LIBCPP_COMPILER_GCC) -# define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow"))) -# else -# define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK -# endif - -// Clang-18 has support for deducing this, but it does not set the FTM. -# if defined(__cpp_explicit_this_parameter) || (defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1800) -# define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER -# endif - -#endif // __cplusplus - -#endif // _LIBCPP___CXX03___CONFIG diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/abi.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/abi.h deleted file mode 100644 index 81dd5b1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/abi.h +++ /dev/null @@ -1,172 +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___CXX03___CONFIGURATION_ABI_H -#define _LIBCPP___CXX03___CONFIGURATION_ABI_H - -#include <__cxx03/__configuration/compiler.h> -#include <__cxx03/__configuration/config_site_shim.h> -#include <__cxx03/__configuration/platform.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if _LIBCPP_ABI_VERSION >= 2 -// Change short string representation so that string data starts at offset 0, -// improving its alignment in some cases. -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -// Fix deque iterator type in order to support incomplete types. -# define _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE -// Fix undefined behavior in how std::list stores its linked nodes. -# define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB -// Fix undefined behavior in how __tree stores its end and parent nodes. -# define _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB -// Fix undefined behavior in how __hash_table stores its pointer types. -# define _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB -# define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB -# define _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE -// Override the default return value of exception::what() for bad_function_call::what() -// with a string that is specific to bad_function_call (see http://wg21.link/LWG2233). -// This is an ABI break on platforms that sign and authenticate vtable function pointers -// because it changes the mangling of the virtual function located in the vtable, which -// changes how it gets signed. -# define _LIBCPP_ABI_BAD_FUNCTION_CALL_GOOD_WHAT_MESSAGE -// Enable optimized version of __do_get_(un)signed which avoids redundant copies. -# define _LIBCPP_ABI_OPTIMIZED_LOCALE_NUM_GET -// Give reverse_iterator one data member of type T, not two. -// Also, in C++17 and later, don't derive iterator types from std::iterator. -# define _LIBCPP_ABI_NO_ITERATOR_BASES -// Use the smallest possible integer type to represent the index of the variant. -// Previously libc++ used "unsigned int" exclusively. -# define _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION -// Unstable attempt to provide a more optimized std::function -# define _LIBCPP_ABI_OPTIMIZED_FUNCTION -// All the regex constants must be distinct and nonzero. -# define _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO -// Re-worked external template instantiations for std::string with a focus on -// performance and fast-path inlining. -# define _LIBCPP_ABI_STRING_OPTIMIZED_EXTERNAL_INSTANTIATION -// Enable clang::trivial_abi on std::unique_ptr. -# define _LIBCPP_ABI_ENABLE_UNIQUE_PTR_TRIVIAL_ABI -// Enable clang::trivial_abi on std::shared_ptr and std::weak_ptr -# define _LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI -// std::random_device holds some state when it uses an implementation that gets -// entropy from a file (see _LIBCPP_USING_DEV_RANDOM). When switching from this -// implementation to another one on a platform that has already shipped -// std::random_device, one needs to retain the same object layout to remain ABI -// compatible. This switch removes these workarounds for platforms that don't care -// about ABI compatibility. -# define _LIBCPP_ABI_NO_RANDOM_DEVICE_COMPATIBILITY_LAYOUT -// Don't export the legacy __basic_string_common class and its methods from the built library. -# define _LIBCPP_ABI_DO_NOT_EXPORT_BASIC_STRING_COMMON -// Don't export the legacy __vector_base_common class and its methods from the built library. -# define _LIBCPP_ABI_DO_NOT_EXPORT_VECTOR_BASE_COMMON -// According to the Standard, `bitset::operator[] const` returns bool -# define _LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL -// Fix the implementation of CityHash used for std::hash. -// This is an ABI break because `std::hash` will return a different result, -// which means that hashing the same object in translation units built against -// different versions of libc++ can return inconsistent results. This is especially -// tricky since std::hash is used in the implementation of unordered containers. -// -// The incorrect implementation of CityHash has the problem that it drops some -// bits on the floor. -# define _LIBCPP_ABI_FIX_CITYHASH_IMPLEMENTATION -// Remove the base 10 implementation of std::to_chars from the dylib. -// The implementation moved to the header, but we still export the symbols from -// the dylib for backwards compatibility. -# define _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 -// Define std::array/std::string_view iterators to be __wrap_iters instead of raw -// pointers, which prevents people from relying on a non-portable implementation -// detail. This is especially useful because enabling bounded iterators hardening -// requires code not to make these assumptions. -# define _LIBCPP_ABI_USE_WRAP_ITER_IN_STD_ARRAY -# define _LIBCPP_ABI_USE_WRAP_ITER_IN_STD_STRING_VIEW -// Dont' add an inline namespace for `std::filesystem` -# define _LIBCPP_ABI_NO_FILESYSTEM_INLINE_NAMESPACE -// std::basic_ios uses WEOF to indicate that the fill value is -// uninitialized. However, on platforms where the size of char_type is -// equal to or greater than the size of int_type and char_type is unsigned, -// std::char_traits::eq_int_type() cannot distinguish between WEOF -// and WCHAR_MAX. This ABI setting determines whether we should instead track whether the fill -// value has been initialized using a separate boolean, which changes the ABI. -# define _LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE -// Make a std::pair of trivially copyable types trivially copyable. -// While this technically doesn't change the layout of pair itself, other types may decide to programatically change -// their representation based on whether something is trivially copyable. -# define _LIBCPP_ABI_TRIVIALLY_COPYABLE_PAIR -#elif _LIBCPP_ABI_VERSION == 1 -# if !(defined(_LIBCPP_OBJECT_FORMAT_COFF) || defined(_LIBCPP_OBJECT_FORMAT_XCOFF)) -// Enable compiling copies of now inline methods into the dylib to support -// applications compiled against older libraries. This is unnecessary with -// COFF dllexport semantics, since dllexport forces a non-inline definition -// of inline functions to be emitted anyway. Our own non-inline copy would -// conflict with the dllexport-emitted copy, so we disable it. For XCOFF, -// the linker will take issue with the symbols in the shared object if the -// weak inline methods get visibility (such as from -fvisibility-inlines-hidden), -// so disable it. -# define _LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS -# endif -// Feature macros for disabling pre ABI v1 features. All of these options -// are deprecated. -# if defined(__FreeBSD__) -# define _LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR -# endif -#endif - -// We had some bugs where we use [[no_unique_address]] together with construct_at, -// which causes UB as the call on construct_at could write to overlapping subobjects -// -// https://github.com/llvm/llvm-project/issues/70506 -// https://github.com/llvm/llvm-project/issues/70494 -// -// To fix the bug we had to change the ABI of some classes to remove [[no_unique_address]] under certain conditions. -// The macro below is used for all classes whose ABI have changed as part of fixing these bugs. -#define _LIBCPP_ABI_LLVM18_NO_UNIQUE_ADDRESS __attribute__((__abi_tag__("llvm18_nua"))) - -// Changes the iterator type of select containers (see below) to a bounded iterator that keeps track of whether it's -// within the bounds of the original container and asserts it on every dereference. -// -// ABI impact: changes the iterator type of the relevant containers. -// -// Supported containers: -// - `span`; -// - `string_view`. -// #define _LIBCPP_ABI_BOUNDED_ITERATORS - -// Changes the iterator type of `basic_string` to a bounded iterator that keeps track of whether it's within the bounds -// of the original container and asserts it on every dereference and when performing iterator arithmetics. -// -// ABI impact: changes the iterator type of `basic_string` and its specializations, such as `string` and `wstring`. -// #define _LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING - -// Changes the iterator type of `vector` to a bounded iterator that keeps track of whether it's within the bounds of the -// original container and asserts it on every dereference and when performing iterator arithmetics. Note: this doesn't -// yet affect `vector`. -// -// ABI impact: changes the iterator type of `vector` (except `vector`). -// #define _LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR - -#if defined(_LIBCPP_COMPILER_CLANG_BASED) -# if defined(__APPLE__) -# if defined(__i386__) || defined(__x86_64__) -// use old string layout on x86_64 and i386 -# elif defined(__arm__) -// use old string layout on arm (which does not include aarch64/arm64), except on watch ABIs -# if defined(__ARM_ARCH_7K__) && __ARM_ARCH_7K__ >= 2 -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -# endif -# else -# define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT -# endif -# endif -#endif - -#endif // _LIBCPP___CXX03___CONFIGURATION_ABI_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/availability.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/availability.h deleted file mode 100644 index ad45ce0..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/availability.h +++ /dev/null @@ -1,400 +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___CXX03___CONFIGURATION_AVAILABILITY_H -#define _LIBCPP___CXX03___CONFIGURATION_AVAILABILITY_H - -#include <__cxx03/__configuration/compiler.h> -#include <__cxx03/__configuration/language.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// Libc++ is shipped by various vendors. In particular, it is used as a system -// library on macOS, iOS and other Apple platforms. In order for users to be -// able to compile a binary that is intended to be deployed to an older version -// of a platform, Clang provides availability attributes [1]. These attributes -// can be placed on declarations and are used to describe the life cycle of a -// symbol in the library. -// -// The main goal is to ensure a compile-time error if a symbol that hasn't been -// introduced in a previously released library is used in a program that targets -// that previously released library. Normally, this would be a load-time error -// when one tries to launch the program against the older library. -// -// For example, the filesystem library was introduced in the dylib in LLVM 9. -// On Apple platforms, this corresponds to macOS 10.15. If a user compiles on -// a macOS 10.15 host but targets macOS 10.13 with their program, the compiler -// would normally not complain (because the required declarations are in the -// headers), but the dynamic loader would fail to find the symbols when actually -// trying to launch the program on macOS 10.13. To turn this into a compile-time -// issue instead, declarations are annotated with when they were introduced, and -// the compiler can produce a diagnostic if the program references something that -// isn't available on the deployment target. -// -// This mechanism is general in nature, and any vendor can add their markup to -// the library (see below). Whenever a new feature is added that requires support -// in the shared library, two macros are added below to allow marking the feature -// as unavailable: -// 1. A macro named `_LIBCPP_AVAILABILITY_HAS_` which must be defined -// to `_LIBCPP_INTRODUCED_IN_` for the appropriate LLVM version. -// 2. A macro named `_LIBCPP_AVAILABILITY_`, which must be defined to -// `_LIBCPP_INTRODUCED_IN__MARKUP` for the appropriate LLVM version. -// -// When vendors decide to ship the feature as part of their shared library, they -// can update the `_LIBCPP_INTRODUCED_IN_` macro (and the markup counterpart) -// based on the platform version they shipped that version of LLVM in. The library -// will then use this markup to provide an optimal user experience on these platforms. -// -// Furthermore, many features in the standard library have corresponding -// feature-test macros. The `_LIBCPP_AVAILABILITY_HAS_` macros -// are checked by the corresponding feature-test macros generated by -// generate_feature_test_macro_components.py to ensure that the library -// doesn't announce a feature as being implemented if it is unavailable on -// the deployment target. -// -// Note that this mechanism is disabled by default in the "upstream" libc++. -// Availability annotations are only meaningful when shipping libc++ inside -// a platform (i.e. as a system library), and so vendors that want them should -// turn those annotations on at CMake configuration time. -// -// [1]: https://clang.llvm.org/docs/AttributeReference.html#availability - -// For backwards compatibility, allow users to define _LIBCPP_DISABLE_AVAILABILITY -// for a while. -#if defined(_LIBCPP_DISABLE_AVAILABILITY) -# if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS) -# define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -# endif -#endif - -// Availability markup is disabled when building the library, or when a non-Clang -// compiler is used because only Clang supports the necessary attributes. -#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || !defined(_LIBCPP_COMPILER_CLANG_BASED) -# if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS) -# define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -# endif -#endif - -// When availability annotations are disabled, we take for granted that features introduced -// in all versions of the library are available. -#if defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS) - -# define _LIBCPP_INTRODUCED_IN_LLVM_19 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_18 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_17 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_17_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_16 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_15 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_14 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_13 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_13_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_12 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_11 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_10 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_10_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_9 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE /* nothing */ -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH /* nothing */ -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_8 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_8_ATTRIBUTE /* nothing */ - -# define _LIBCPP_INTRODUCED_IN_LLVM_4 1 -# define _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE /* nothing */ - -#elif defined(__APPLE__) - -// clang-format off - -// LLVM 19 -// TODO: Fill this in -# define _LIBCPP_INTRODUCED_IN_LLVM_19 0 -# define _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE __attribute__((unavailable)) - -// LLVM 18 -// TODO: Fill this in -# define _LIBCPP_INTRODUCED_IN_LLVM_18 0 -# define _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE __attribute__((unavailable)) - -// LLVM 17 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140400) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170400) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170400) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100400) -# define _LIBCPP_INTRODUCED_IN_LLVM_17 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_17 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_17_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 14.4))) \ - __attribute__((availability(ios, strict, introduced = 17.4))) \ - __attribute__((availability(tvos, strict, introduced = 17.4))) \ - __attribute__((availability(watchos, strict, introduced = 10.4))) - -// LLVM 16 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100000) -# define _LIBCPP_INTRODUCED_IN_LLVM_16 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_16 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_16_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 14.0))) \ - __attribute__((availability(ios, strict, introduced = 17.0))) \ - __attribute__((availability(tvos, strict, introduced = 17.0))) \ - __attribute__((availability(watchos, strict, introduced = 10.0))) - -// LLVM 15 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130400) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160500) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160500) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90500) -# define _LIBCPP_INTRODUCED_IN_LLVM_15 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_15 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 13.4))) \ - __attribute__((availability(ios, strict, introduced = 16.5))) \ - __attribute__((availability(tvos, strict, introduced = 16.5))) \ - __attribute__((availability(watchos, strict, introduced = 9.5))) - -// LLVM 14 -# define _LIBCPP_INTRODUCED_IN_LLVM_14 _LIBCPP_INTRODUCED_IN_LLVM_15 -# define _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE - -// LLVM 13 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90000) -# define _LIBCPP_INTRODUCED_IN_LLVM_13 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_13 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_13_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 13.0))) \ - __attribute__((availability(ios, strict, introduced = 16.0))) \ - __attribute__((availability(tvos, strict, introduced = 16.0))) \ - __attribute__((availability(watchos, strict, introduced = 9.0))) - -// LLVM 12 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 120300) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 150300) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 150300) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 80300) -# define _LIBCPP_INTRODUCED_IN_LLVM_12 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_12 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_12_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 12.3))) \ - __attribute__((availability(ios, strict, introduced = 15.3))) \ - __attribute__((availability(tvos, strict, introduced = 15.3))) \ - __attribute__((availability(watchos, strict, introduced = 8.3))) - -// LLVM 11 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 140000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 140000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 70000) -# define _LIBCPP_INTRODUCED_IN_LLVM_11 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_11 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 11.0))) \ - __attribute__((availability(ios, strict, introduced = 14.0))) \ - __attribute__((availability(tvos, strict, introduced = 14.0))) \ - __attribute__((availability(watchos, strict, introduced = 7.0))) - -// LLVM 10 -# define _LIBCPP_INTRODUCED_IN_LLVM_10 _LIBCPP_INTRODUCED_IN_LLVM_11 -# define _LIBCPP_INTRODUCED_IN_LLVM_10_ATTRIBUTE _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE - -// LLVM 9 -# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101500) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 130000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 130000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 60000) -# define _LIBCPP_INTRODUCED_IN_LLVM_9 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_9 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE \ - __attribute__((availability(macos, strict, introduced = 10.15))) \ - __attribute__((availability(ios, strict, introduced = 13.0))) \ - __attribute__((availability(tvos, strict, introduced = 13.0))) \ - __attribute__((availability(watchos, strict, introduced = 6.0))) -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH \ - _Pragma("clang attribute push(__attribute__((availability(macos,strict,introduced=10.15))), apply_to=any(function,record))") \ - _Pragma("clang attribute push(__attribute__((availability(ios,strict,introduced=13.0))), apply_to=any(function,record))") \ - _Pragma("clang attribute push(__attribute__((availability(tvos,strict,introduced=13.0))), apply_to=any(function,record))") \ - _Pragma("clang attribute push(__attribute__((availability(watchos,strict,introduced=6.0))), apply_to=any(function,record))") -# define _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP \ - _Pragma("clang attribute pop") \ - _Pragma("clang attribute pop") \ - _Pragma("clang attribute pop") \ - _Pragma("clang attribute pop") - -// LLVM 4 -# if defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000 -# define _LIBCPP_INTRODUCED_IN_LLVM_4 0 -# else -# define _LIBCPP_INTRODUCED_IN_LLVM_4 1 -# endif -# define _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE __attribute__((availability(watchos, strict, introduced = 5.0))) - -// clang-format on - -#else - -// ...New vendors can add availability markup here... - -# error \ - "It looks like you're trying to enable vendor availability markup, but you haven't defined the corresponding macros yet!" - -#endif - -// These macros control the availability of std::bad_optional_access and -// other exception types. These were put in the shared library to prevent -// code bloat from every user program defining the vtable for these exception -// types. -// -// Note that when exceptions are disabled, the methods that normally throw -// these exceptions can be used even on older deployment targets, but those -// methods will abort instead of throwing. -#define _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4 -#define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE - -#define _LIBCPP_AVAILABILITY_HAS_BAD_VARIANT_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4 -#define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE - -#define _LIBCPP_AVAILABILITY_HAS_BAD_ANY_CAST _LIBCPP_INTRODUCED_IN_LLVM_4 -#define _LIBCPP_AVAILABILITY_BAD_ANY_CAST _LIBCPP_INTRODUCED_IN_LLVM_4_ATTRIBUTE - -// These macros control the availability of all parts of that -// depend on something in the dylib. -#define _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY _LIBCPP_INTRODUCED_IN_LLVM_9 -#define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE -#define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_PUSH -#define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP _LIBCPP_INTRODUCED_IN_LLVM_9_ATTRIBUTE_POP - -// This controls the availability of the C++20 synchronization library, -// which requires shared library support for various operations -// (see libcxx/src/atomic.cpp). This includes , , -// , and notification functions on std::atomic. -#define _LIBCPP_AVAILABILITY_HAS_SYNC _LIBCPP_INTRODUCED_IN_LLVM_11 -#define _LIBCPP_AVAILABILITY_SYNC _LIBCPP_INTRODUCED_IN_LLVM_11_ATTRIBUTE - -// Enable additional explicit instantiations of iostreams components. This -// reduces the number of weak definitions generated in programs that use -// iostreams by providing a single strong definition in the shared library. -// -// TODO: Enable additional explicit instantiations on GCC once it supports exclude_from_explicit_instantiation, -// or once libc++ doesn't use the attribute anymore. -// TODO: Enable them on Windows once https://llvm.org/PR41018 has been fixed. -#if !defined(_LIBCPP_COMPILER_GCC) && !defined(_WIN32) -# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 _LIBCPP_INTRODUCED_IN_LLVM_12 -#else -# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 0 -#endif - -// This controls the availability of floating-point std::to_chars functions. -// These overloads were added later than the integer overloads. -#define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14 -#define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT _LIBCPP_INTRODUCED_IN_LLVM_14_ATTRIBUTE - -// This controls whether the library claims to provide a default verbose -// termination function, and consequently whether the headers will try -// to use it when the mechanism isn't overriden at compile-time. -#define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15 -#define _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_INTRODUCED_IN_LLVM_15_ATTRIBUTE - -// This controls the availability of the C++17 std::pmr library, -// which is implemented in large part in the built library. -// -// TODO: Enable std::pmr markup once https://github.com/llvm/llvm-project/issues/40340 has been fixed -// Until then, it is possible for folks to try to use `std::pmr` when back-deploying to targets that don't support -// it and it'll be a load-time error, but we don't have a good alternative because the library won't compile if we -// use availability annotations until that bug has been fixed. -#define _LIBCPP_AVAILABILITY_HAS_PMR _LIBCPP_INTRODUCED_IN_LLVM_16 -#define _LIBCPP_AVAILABILITY_PMR - -// These macros controls the availability of __cxa_init_primary_exception -// in the built library, which std::make_exception_ptr might use -// (see libcxx/include/__exception/exception_ptr.h). -#define _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18 -#define _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE - -// This controls the availability of C++23 , which -// has a dependency on the built library (it needs access to -// the underlying buffer types of std::cout, std::cerr, and std::clog. -#define _LIBCPP_AVAILABILITY_HAS_PRINT _LIBCPP_INTRODUCED_IN_LLVM_18 -#define _LIBCPP_AVAILABILITY_PRINT _LIBCPP_INTRODUCED_IN_LLVM_18_ATTRIBUTE - -// This controls the availability of the C++20 time zone database. -// The parser code is built in the library. -#define _LIBCPP_AVAILABILITY_HAS_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_TZDB _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE - -// These macros determine whether we assume that std::bad_function_call and -// std::bad_expected_access provide a key function in the dylib. This allows -// centralizing their vtable and typeinfo instead of having all TUs provide -// a weak definition that then gets deduplicated. -#define _LIBCPP_AVAILABILITY_HAS_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_BAD_FUNCTION_CALL_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE -#define _LIBCPP_AVAILABILITY_HAS_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19 -#define _LIBCPP_AVAILABILITY_BAD_EXPECTED_ACCESS_KEY_FUNCTION _LIBCPP_INTRODUCED_IN_LLVM_19_ATTRIBUTE - -// Define availability attributes that depend on _LIBCPP_HAS_NO_EXCEPTIONS. -// Those are defined in terms of the availability attributes above, and -// should not be vendor-specific. -#if defined(_LIBCPP_HAS_NO_EXCEPTIONS) -# define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST -# define _LIBCPP_AVAILABILITY_THROW_BAD_OPTIONAL_ACCESS -# define _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS -#else -# define _LIBCPP_AVAILABILITY_THROW_BAD_ANY_CAST _LIBCPP_AVAILABILITY_BAD_ANY_CAST -# define _LIBCPP_AVAILABILITY_THROW_BAD_OPTIONAL_ACCESS _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS -# define _LIBCPP_AVAILABILITY_THROW_BAD_VARIANT_ACCESS _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS -#endif - -// Define availability attributes that depend on both -// _LIBCPP_HAS_NO_EXCEPTIONS and _LIBCPP_HAS_NO_RTTI. -#if defined(_LIBCPP_HAS_NO_EXCEPTIONS) || defined(_LIBCPP_HAS_NO_RTTI) -# undef _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION -# undef _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION -# define _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION 0 -# define _LIBCPP_AVAILABILITY_INIT_PRIMARY_EXCEPTION -#endif - -#endif // _LIBCPP___CXX03___CONFIGURATION_AVAILABILITY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/compiler.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/compiler.h deleted file mode 100644 index 4d53a21..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/compiler.h +++ /dev/null @@ -1,51 +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___CXX03___CONFIGURATION_COMPILER_H -#define _LIBCPP___CXX03___CONFIGURATION_COMPILER_H - -#include <__cxx03/__configuration/config_site_shim.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if defined(__apple_build_version__) -// Given AppleClang XX.Y.Z, _LIBCPP_APPLE_CLANG_VER is XXYZ (e.g. AppleClang 14.0.3 => 1403) -# define _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_APPLE_CLANG_VER (__apple_build_version__ / 10000) -#elif defined(__clang__) -# define _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_CLANG_VER (__clang_major__ * 100 + __clang_minor__) -#elif defined(__GNUC__) -# define _LIBCPP_COMPILER_GCC -# define _LIBCPP_GCC_VER (__GNUC__ * 100 + __GNUC_MINOR__) -#endif - -#ifdef __cplusplus - -// Warn if a compiler version is used that is not supported anymore -// LLVM RELEASE Update the minimum compiler versions -# if defined(_LIBCPP_CLANG_VER) -# if _LIBCPP_CLANG_VER < 1700 -# warning "Libc++ only supports Clang 17 and later" -# endif -# elif defined(_LIBCPP_APPLE_CLANG_VER) -# if _LIBCPP_APPLE_CLANG_VER < 1500 -# warning "Libc++ only supports AppleClang 15 and later" -# endif -# elif defined(_LIBCPP_GCC_VER) -# if _LIBCPP_GCC_VER < 1400 -# warning "Libc++ only supports GCC 14 and later" -# endif -# endif - -#endif - -#endif // _LIBCPP___CXX03___CONFIGURATION_COMPILER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/config_site_shim.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/config_site_shim.h deleted file mode 100644 index 974a17a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/config_site_shim.h +++ /dev/null @@ -1,80 +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___CXX03___CONFIGURATION_CONFIG_SITE_SHIM_H -#define _LIBCPP___CXX03___CONFIGURATION_CONFIG_SITE_SHIM_H - -#include <__config_site> - -#if !_LIBCPP_ABI_FORCE_ITANIUM -# undef _LIBCPP_ABI_FORCE_ITANIUM -#endif - -#if !_LIBCPP_ABI_FORCE_MICROSOFT -# undef _LIBCPP_ABI_FORCE_MICROSOFT -#endif - -#if !_LIBCPP_HAS_THREADS -# define _LIBCPP_HAS_NO_THREADS -#endif - -#if !_LIBCPP_HAS_MONOTONIC_CLOCK -# define _LIBCPP_HAS_NO_MONOTONIC_CLOCK -#endif - -#if !_LIBCPP_HAS_MUSL_LIBC -# undef _LIBCPP_HAS_MUSL_LIBC -#endif - -#if !_LIBCPP_HAS_THREAD_API_PTHREAD -# undef _LIBCPP_HAS_THREAD_API_PTHREAD -#endif - -#if !_LIBCPP_HAS_THREAD_API_EXTERNAL -# undef _LIBCPP_HAS_THREAD_API_EXTERNAL -#endif - -#if !_LIBCPP_HAS_THREAD_API_WIN32 -# undef _LIBCPP_HAS_THREAD_API_WIN32 -#endif - -#undef _LIBCPP_HAS_THREAD_API_C11 - -#if !_LIBCPP_HAS_VENDOR_AVAILABILITY_ANNOTATIONS -# define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -#endif - -#if !_LIBCPP_HAS_FILESYSTEM -# define _LIBCPP_HAS_NO_FILESYSTEM -#endif - -#if !_LIBCPP_HAS_RANDOM_DEVICE -# define _LIBCPP_HAS_NO_RANDOM_DEVICE -#endif - -#if !_LIBCPP_HAS_LOCALIZATION -# define _LIBCPP_HAS_NO_LOCALIZATION -#endif - -#if !_LIBCPP_HAS_UNICODE -# define _LIBCPP_HAS_NO_UNICODE -#endif - -#if !_LIBCPP_HAS_WIDE_CHARACTERS -# define _LIBCPP_HAS_NO_WIDE_CHARACTERS -#endif - -#if !_LIBCPP_HAS_TIME_ZONE_DATABASE -# define _LIBCPP_HAS_NO_TIME_ZONE_DATABASE -#endif - -#if !_LIBCPP_INSTRUMENTED_WITH_ASAN -# undef _LIBCPP_INSTRUMENTED_WITH_ASAN -#endif - -#endif // _LIBCPP___CXX03___CONFIGURATION_CONFIG_SITE_SHIM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/language.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/language.h deleted file mode 100644 index adc98a8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/language.h +++ /dev/null @@ -1,27 +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___CXX03___CONFIGURATION_LANGUAGE_H -#define _LIBCPP___CXX03___CONFIGURATION_LANGUAGE_H - -#include <__cxx03/__configuration/config_site_shim.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if !defined(__cpp_rtti) || __cpp_rtti < 199711L -# define _LIBCPP_HAS_NO_RTTI -#endif - -#if !defined(__cpp_exceptions) || __cpp_exceptions < 199711L -# define _LIBCPP_HAS_NO_EXCEPTIONS -#endif - -#endif // _LIBCPP___CXX03___CONFIGURATION_LANGUAGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/platform.h b/third_party/libcxx/include/c++/v1/__cxx03/__configuration/platform.h deleted file mode 100644 index 2459050..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__configuration/platform.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___CXX03___CONFIGURATION_PLATFORM_H -#define _LIBCPP___CXX03___CONFIGURATION_PLATFORM_H - -#include <__cxx03/__configuration/config_site_shim.h> - -#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -# pragma GCC system_header -#endif - -#if defined(__ELF__) -# define _LIBCPP_OBJECT_FORMAT_ELF 1 -#elif defined(__MACH__) -# define _LIBCPP_OBJECT_FORMAT_MACHO 1 -#elif defined(_WIN32) -# define _LIBCPP_OBJECT_FORMAT_COFF 1 -#elif defined(__wasm__) -# define _LIBCPP_OBJECT_FORMAT_WASM 1 -#elif defined(_AIX) -# define _LIBCPP_OBJECT_FORMAT_XCOFF 1 -#else -// ... add new file formats here ... -#endif - -// Need to detect which libc we're using if we're on Linux. -#if defined(__linux__) -# include -# if defined(__GLIBC_PREREQ) -# define _LIBCPP_GLIBC_PREREQ(a, b) __GLIBC_PREREQ(a, b) -# else -# define _LIBCPP_GLIBC_PREREQ(a, b) 0 -# endif // defined(__GLIBC_PREREQ) -#endif // defined(__linux__) - -#ifndef __BYTE_ORDER__ -# error \ - "Your compiler doesn't seem to define __BYTE_ORDER__, which is required by libc++ to know the endianness of your target platform" -#endif - -#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -# define _LIBCPP_LITTLE_ENDIAN -#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -# define _LIBCPP_BIG_ENDIAN -#endif // __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - -#endif // _LIBCPP___CXX03___CONFIGURATION_PLATFORM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/randomize_range.h b/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/randomize_range.h deleted file mode 100644 index 577a6be..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/randomize_range.h +++ /dev/null @@ -1,40 +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___CXX03___LIBCXX_DEBUG_RANDOMIZE_RANGE_H -#define _LIBCPP___CXX03___LIBCXX_DEBUG_RANDOMIZE_RANGE_H - -#include <__cxx03/__config> - -#ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY -# include <__cxx03/__algorithm/shuffle.h> -# include <__cxx03/__type_traits/is_constant_evaluated.h> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void __debug_randomize_range(_Iterator __first, _Sentinel __last) { -#ifdef _LIBCPP_DEBUG_RANDOMIZE_UNSPECIFIED_STABILITY -# error Support for unspecified stability is only for C++11 and higher - - if (!__libcpp_is_constant_evaluated()) - std::__shuffle<_AlgPolicy>(__first, __last, __libcpp_debug_randomizer()); -#else - (void)__first; - (void)__last; -#endif -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LIBCXX_DEBUG_RANDOMIZE_RANGE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/sanitizers.h b/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/sanitizers.h deleted file mode 100644 index 32c4399..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/sanitizers.h +++ /dev/null @@ -1,104 +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___CXX03___LIBCXX_DEBUG_UTILS_SANITIZERS_H -#define _LIBCPP___CXX03___LIBCXX_DEBUG_UTILS_SANITIZERS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#ifndef _LIBCPP_HAS_NO_ASAN - -extern "C" { -_LIBCPP_EXPORTED_FROM_ABI void -__sanitizer_annotate_contiguous_container(const void*, const void*, const void*, const void*); -_LIBCPP_EXPORTED_FROM_ABI void __sanitizer_annotate_double_ended_contiguous_container( - const void*, const void*, const void*, const void*, const void*, const void*); -_LIBCPP_EXPORTED_FROM_ABI int -__sanitizer_verify_double_ended_contiguous_container(const void*, const void*, const void*, const void*); -} - -#endif // _LIBCPP_HAS_NO_ASAN - -_LIBCPP_BEGIN_NAMESPACE_STD - -// ASan choices -#ifndef _LIBCPP_HAS_NO_ASAN -# define _LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS 1 -#endif - -#ifdef _LIBCPP_HAS_ASAN_CONTAINER_ANNOTATIONS_FOR_ALL_ALLOCATORS -// __asan_annotate_container_with_allocator determines whether containers with custom allocators are annotated. This is -// a public customization point to disable annotations if the custom allocator assumes that the memory isn't poisoned. -// See the https://libcxx.llvm.org/UsingLibcxx.html#turning-off-asan-annotation-in-containers for more information. -template -struct __asan_annotate_container_with_allocator : true_type {}; -#endif - -// Annotate a double-ended contiguous range. -// - [__first_storage, __last_storage) is the allocated memory region, -// - [__first_old_contained, __last_old_contained) is the previously allowed (unpoisoned) range, and -// - [__first_new_contained, __last_new_contained) is the new allowed (unpoisoned) range. -template -_LIBCPP_HIDE_FROM_ABI void __annotate_double_ended_contiguous_container( - const void* __first_storage, - const void* __last_storage, - const void* __first_old_contained, - const void* __last_old_contained, - const void* __first_new_contained, - const void* __last_new_contained) { -#ifdef _LIBCPP_HAS_NO_ASAN - (void)__first_storage; - (void)__last_storage; - (void)__first_old_contained; - (void)__last_old_contained; - (void)__first_new_contained; - (void)__last_new_contained; -#else - if (__asan_annotate_container_with_allocator<_Allocator>::value && __first_storage != nullptr) - __sanitizer_annotate_double_ended_contiguous_container( - __first_storage, - __last_storage, - __first_old_contained, - __last_old_contained, - __first_new_contained, - __last_new_contained); -#endif -} - -// Annotate a contiguous range. -// [__first_storage, __last_storage) is the allocated memory region, -// __old_last_contained is the previously last allowed (unpoisoned) element, and -// __new_last_contained is the new last allowed (unpoisoned) element. -template -_LIBCPP_HIDE_FROM_ABI void __annotate_contiguous_container( - const void* __first_storage, - const void* __last_storage, - const void* __old_last_contained, - const void* __new_last_contained) { -#ifdef _LIBCPP_HAS_NO_ASAN - (void)__first_storage; - (void)__last_storage; - (void)__old_last_contained; - (void)__new_last_contained; -#else - if (!__libcpp_is_constant_evaluated() && __asan_annotate_container_with_allocator<_Allocator>::value && - __first_storage != nullptr) - __sanitizer_annotate_contiguous_container( - __first_storage, __last_storage, __old_last_contained, __new_last_contained); -#endif -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LIBCXX_DEBUG_UTILS_SANITIZERS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/strict_weak_ordering_check.h b/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/strict_weak_ordering_check.h deleted file mode 100644 index 9897652..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__debug_utils/strict_weak_ordering_check.h +++ /dev/null @@ -1,77 +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___CXX03___LIBCXX_DEBUG_STRICT_WEAK_ORDERING_CHECK -#define _LIBCPP___CXX03___LIBCXX_DEBUG_STRICT_WEAK_ORDERING_CHECK - -#include <__cxx03/__config> - -#include <__cxx03/__algorithm/comp_ref_type.h> -#include <__cxx03/__algorithm/is_sorted.h> -#include <__cxx03/__assert> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void -__check_strict_weak_ordering_sorted(_RandomAccessIterator __first, _RandomAccessIterator __last, _Comp& __comp) { -#if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG - using __diff_t = __iter_diff_t<_RandomAccessIterator>; - using _Comp_ref = __comp_ref_type<_Comp>; - if (!__libcpp_is_constant_evaluated()) { - // Check if the range is actually sorted. - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - (std::is_sorted<_RandomAccessIterator, _Comp_ref>(__first, __last, _Comp_ref(__comp))), - "The range is not sorted after the sort, your comparator is not a valid strict-weak ordering"); - // Limit the number of elements we need to check. - __diff_t __size = __last - __first > __diff_t(100) ? __diff_t(100) : __last - __first; - __diff_t __p = 0; - while (__p < __size) { - __diff_t __q = __p + __diff_t(1); - // Find first element that is greater than *(__first+__p). - while (__q < __size && !__comp(*(__first + __p), *(__first + __q))) { - ++__q; - } - // Check that the elements from __p to __q are equal between each other. - for (__diff_t __b = __p; __b < __q; ++__b) { - for (__diff_t __a = __p; __a <= __b; ++__a) { - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - !__comp(*(__first + __a), *(__first + __b)), "Your comparator is not a valid strict-weak ordering"); - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - !__comp(*(__first + __b), *(__first + __a)), "Your comparator is not a valid strict-weak ordering"); - } - } - // Check that elements between __p and __q are less than between __q and __size. - for (__diff_t __a = __p; __a < __q; ++__a) { - for (__diff_t __b = __q; __b < __size; ++__b) { - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - __comp(*(__first + __a), *(__first + __b)), "Your comparator is not a valid strict-weak ordering"); - _LIBCPP_ASSERT_SEMANTIC_REQUIREMENT( - !__comp(*(__first + __b), *(__first + __a)), "Your comparator is not a valid strict-weak ordering"); - } - } - // Skip these equal elements. - __p = __q; - } - } -#else - (void)__first; - (void)__last; - (void)__comp; -#endif // _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LIBCXX_DEBUG_STRICT_WEAK_ORDERING_CHECK diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception.h b/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception.h deleted file mode 100644 index 27b1e43..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception.h +++ /dev/null @@ -1,94 +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___CXX03___EXCEPTION_EXCEPTION_H -#define _LIBCPP___CXX03___EXCEPTION_EXCEPTION_H - -#include <__cxx03/__config> - -// defines its own std::exception and std::bad_exception types, -// which we use in order to be ABI-compatible with other STLs on Windows. -#if defined(_LIBCPP_ABI_VCRUNTIME) -# include <__cxx03/vcruntime_exception.h> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -namespace std { // purposefully not using versioning namespace - -#if defined(_LIBCPP_ABI_VCRUNTIME) && (!defined(_HAS_EXCEPTIONS) || _HAS_EXCEPTIONS != 0) -// The std::exception class was already included above, but we're explicit about this condition here for clarity. - -#elif defined(_LIBCPP_ABI_VCRUNTIME) && _HAS_EXCEPTIONS == 0 -// However, does not define std::exception and std::bad_exception -// when _HAS_EXCEPTIONS == 0. -// -// Since libc++ still wants to provide the std::exception hierarchy even when _HAS_EXCEPTIONS == 0 -// (after all those are simply types like any other), we define an ABI-compatible version -// of the VCRuntime std::exception and std::bad_exception types in that mode. - -struct __std_exception_data { - char const* _What; - bool _DoFree; -}; - -class exception { // base of all library exceptions -public: - exception() _NOEXCEPT : __data_() {} - - explicit exception(char const* __message) _NOEXCEPT : __data_() { - __data_._What = __message; - __data_._DoFree = true; - } - - exception(exception const&) _NOEXCEPT {} - - exception& operator=(exception const&) _NOEXCEPT { return *this; } - - virtual ~exception() _NOEXCEPT {} - - virtual char const* what() const _NOEXCEPT { return __data_._What ? __data_._What : "Unknown exception"; } - -private: - __std_exception_data __data_; -}; - -class bad_exception : public exception { -public: - bad_exception() _NOEXCEPT : exception("bad exception") {} -}; - -#else // !defined(_LIBCPP_ABI_VCRUNTIME) -// On all other platforms, we define our own std::exception and std::bad_exception types -// regardless of whether exceptions are turned on as a language feature. - -class _LIBCPP_EXPORTED_FROM_ABI exception { -public: - _LIBCPP_HIDE_FROM_ABI exception() _NOEXCEPT {} - _LIBCPP_HIDE_FROM_ABI exception(const exception&) _NOEXCEPT = default; - _LIBCPP_HIDE_FROM_ABI exception& operator=(const exception&) _NOEXCEPT = default; - - virtual ~exception() _NOEXCEPT; - virtual const char* what() const _NOEXCEPT; -}; - -class _LIBCPP_EXPORTED_FROM_ABI bad_exception : public exception { -public: - _LIBCPP_HIDE_FROM_ABI bad_exception() _NOEXCEPT {} - _LIBCPP_HIDE_FROM_ABI bad_exception(const bad_exception&) _NOEXCEPT = default; - _LIBCPP_HIDE_FROM_ABI bad_exception& operator=(const bad_exception&) _NOEXCEPT = default; - ~bad_exception() _NOEXCEPT override; - const char* what() const _NOEXCEPT override; -}; -#endif // !_LIBCPP_ABI_VCRUNTIME - -} // namespace std - -#endif // _LIBCPP___CXX03___EXCEPTION_EXCEPTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception_ptr.h b/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception_ptr.h deleted file mode 100644 index 33dbd40..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__exception/exception_ptr.h +++ /dev/null @@ -1,177 +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___CXX03___EXCEPTION_EXCEPTION_PTR_H -#define _LIBCPP___CXX03___EXCEPTION_EXCEPTION_PTR_H - -#include <__cxx03/__config> -#include <__cxx03/__exception/operations.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__memory/construct_at.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstdlib> -#include <__cxx03/new> -#include <__cxx03/typeinfo> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#ifndef _LIBCPP_ABI_MICROSOFT - -# if _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION - -namespace __cxxabiv1 { - -extern "C" { -_LIBCPP_OVERRIDABLE_FUNC_VIS void* __cxa_allocate_exception(size_t) throw(); -_LIBCPP_OVERRIDABLE_FUNC_VIS void __cxa_free_exception(void*) throw(); - -struct __cxa_exception; -_LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception( - void*, - std::type_info*, -# if defined(_WIN32) - void(__thiscall*)(void*)) throw(); -# elif defined(__wasm__) - // In Wasm, a destructor returns its argument - void* (*)(void*)) throw(); -# else - void (*)(void*)) throw(); -# endif -} - -} // namespace __cxxabiv1 - -# endif - -#endif - -namespace std { // purposefully not using versioning namespace - -#ifndef _LIBCPP_ABI_MICROSOFT - -class _LIBCPP_EXPORTED_FROM_ABI exception_ptr { - void* __ptr_; - - static exception_ptr __from_native_exception_pointer(void*) _NOEXCEPT; - - template - friend _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep) _NOEXCEPT; - -public: - // exception_ptr is basically a COW string. - using __trivially_relocatable = exception_ptr; - - _LIBCPP_HIDE_FROM_ABI exception_ptr() _NOEXCEPT : __ptr_() {} - _LIBCPP_HIDE_FROM_ABI exception_ptr(nullptr_t) _NOEXCEPT : __ptr_() {} - - exception_ptr(const exception_ptr&) _NOEXCEPT; - exception_ptr& operator=(const exception_ptr&) _NOEXCEPT; - ~exception_ptr() _NOEXCEPT; - - _LIBCPP_HIDE_FROM_ABI explicit operator bool() const _NOEXCEPT { return __ptr_ != nullptr; } - - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT { - return __x.__ptr_ == __y.__ptr_; - } - - friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT { - return !(__x == __y); - } - - friend _LIBCPP_EXPORTED_FROM_ABI exception_ptr current_exception() _NOEXCEPT; - friend _LIBCPP_EXPORTED_FROM_ABI void rethrow_exception(exception_ptr); -}; - -template -_LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT { -# ifndef _LIBCPP_HAS_NO_EXCEPTIONS -# if _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION && __cplusplus >= 201103L - using _Ep2 = __decay_t<_Ep>; - - void* __ex = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ep)); -# ifdef __wasm__ - // In Wasm, a destructor returns its argument - (void)__cxxabiv1::__cxa_init_primary_exception( - __ex, const_cast(&typeid(_Ep)), [](void* __p) -> void* { -# else - (void)__cxxabiv1::__cxa_init_primary_exception(__ex, const_cast(&typeid(_Ep)), [](void* __p) { -# endif - std::__destroy_at(static_cast<_Ep2*>(__p)); -# ifdef __wasm__ - return __p; -# endif - }); - - try { - ::new (__ex) _Ep2(__e); - return exception_ptr::__from_native_exception_pointer(__ex); - } catch (...) { - __cxxabiv1::__cxa_free_exception(__ex); - return current_exception(); - } -# else - try { - throw __e; - } catch (...) { - return current_exception(); - } -# endif -# else - ((void)__e); - std::abort(); -# endif -} - -#else // _LIBCPP_ABI_MICROSOFT - -class _LIBCPP_EXPORTED_FROM_ABI exception_ptr { - _LIBCPP_DIAGNOSTIC_PUSH - _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wunused-private-field") - void* __ptr1_; - void* __ptr2_; - _LIBCPP_DIAGNOSTIC_POP - -public: - exception_ptr() _NOEXCEPT; - exception_ptr(nullptr_t) _NOEXCEPT; - exception_ptr(const exception_ptr& __other) _NOEXCEPT; - exception_ptr& operator=(const exception_ptr& __other) _NOEXCEPT; - exception_ptr& operator=(nullptr_t) _NOEXCEPT; - ~exception_ptr() _NOEXCEPT; - explicit operator bool() const _NOEXCEPT; -}; - -_LIBCPP_EXPORTED_FROM_ABI bool operator==(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT; - -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT { - return !(__x == __y); -} - -_LIBCPP_EXPORTED_FROM_ABI void swap(exception_ptr&, exception_ptr&) _NOEXCEPT; - -_LIBCPP_EXPORTED_FROM_ABI exception_ptr __copy_exception_ptr(void* __except, const void* __ptr); -_LIBCPP_EXPORTED_FROM_ABI exception_ptr current_exception() _NOEXCEPT; -_LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void rethrow_exception(exception_ptr); - -// This is a built-in template function which automagically extracts the required -// information. -template -void* __GetExceptionInfo(_E); - -template -_LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT { - return __copy_exception_ptr(std::addressof(__e), __GetExceptionInfo(__e)); -} - -#endif // _LIBCPP_ABI_MICROSOFT -} // namespace std - -#endif // _LIBCPP___CXX03___EXCEPTION_EXCEPTION_PTR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__exception/nested_exception.h b/third_party/libcxx/include/c++/v1/__cxx03/__exception/nested_exception.h deleted file mode 100644 index 6079994..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__exception/nested_exception.h +++ /dev/null @@ -1,99 +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___CXX03___EXCEPTION_NESTED_EXCEPTION_H -#define _LIBCPP___CXX03___EXCEPTION_NESTED_EXCEPTION_H - -#include <__cxx03/__config> -#include <__cxx03/__exception/exception_ptr.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/__type_traits/is_base_of.h> -#include <__cxx03/__type_traits/is_class.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__type_traits/is_final.h> -#include <__cxx03/__type_traits/is_polymorphic.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -namespace std { // purposefully not using versioning namespace - -class _LIBCPP_EXPORTED_FROM_ABI nested_exception { - exception_ptr __ptr_; - -public: - nested_exception() _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI nested_exception(const nested_exception&) _NOEXCEPT = default; - _LIBCPP_HIDE_FROM_ABI nested_exception& operator=(const nested_exception&) _NOEXCEPT = default; - virtual ~nested_exception() _NOEXCEPT; - - // access functions - _LIBCPP_NORETURN void rethrow_nested() const; - _LIBCPP_HIDE_FROM_ABI exception_ptr nested_ptr() const _NOEXCEPT { return __ptr_; } -}; - -template -struct __nested : public _Tp, public nested_exception { - _LIBCPP_HIDE_FROM_ABI explicit __nested(const _Tp& __t) : _Tp(__t) {} -}; - -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS -template -struct __throw_with_nested; - -template -struct __throw_with_nested<_Tp, _Up, true> { - _LIBCPP_NORETURN static inline _LIBCPP_HIDE_FROM_ABI void __do_throw(_Tp&& __t) { - throw __nested<_Up>(std::forward<_Tp>(__t)); - } -}; - -template -struct __throw_with_nested<_Tp, _Up, false> { - _LIBCPP_NORETURN static inline _LIBCPP_HIDE_FROM_ABI void __do_throw(_Tp&& __t) { throw std::forward<_Tp>(__t); } -}; -#endif - -template -_LIBCPP_NORETURN _LIBCPP_HIDE_FROM_ABI void throw_with_nested(_Tp&& __t) { -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - using _Up = __decay_t<_Tp>; - static_assert(is_copy_constructible<_Up>::value, "type thrown must be CopyConstructible"); - __throw_with_nested<_Tp, - _Up, - is_class<_Up>::value && !is_base_of::value && - !__libcpp_is_final<_Up>::value>::__do_throw(std::forward<_Tp>(__t)); -#else - ((void)__t); - // FIXME: Make this abort -#endif -} - -template -struct __can_dynamic_cast - : _BoolConstant< is_polymorphic<_From>::value && - (!is_base_of<_To, _From>::value || is_convertible::value)> {}; - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void rethrow_if_nested(const _Ep& __e) { - const nested_exception* __nep = dynamic_cast(std::addressof(__e)); - if (__nep) - __nep->rethrow_nested(); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI void rethrow_if_nested(const _Ep&) {} - -} // namespace std - -#endif // _LIBCPP___CXX03___EXCEPTION_NESTED_EXCEPTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__exception/operations.h b/third_party/libcxx/include/c++/v1/__cxx03/__exception/operations.h deleted file mode 100644 index da8abba..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__exception/operations.h +++ /dev/null @@ -1,38 +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___CXX03___EXCEPTION_OPERATIONS_H -#define _LIBCPP___CXX03___EXCEPTION_OPERATIONS_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -namespace std { // purposefully not using versioning namespace -using unexpected_handler = void (*)(); -_LIBCPP_EXPORTED_FROM_ABI unexpected_handler set_unexpected(unexpected_handler) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI unexpected_handler get_unexpected() _NOEXCEPT; -_LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void unexpected(); - -using terminate_handler = void (*)(); -_LIBCPP_EXPORTED_FROM_ABI terminate_handler set_terminate(terminate_handler) _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI terminate_handler get_terminate() _NOEXCEPT; - -_LIBCPP_EXPORTED_FROM_ABI bool uncaught_exception() _NOEXCEPT; -_LIBCPP_EXPORTED_FROM_ABI int uncaught_exceptions() _NOEXCEPT; - -class _LIBCPP_EXPORTED_FROM_ABI exception_ptr; - -_LIBCPP_EXPORTED_FROM_ABI exception_ptr current_exception() _NOEXCEPT; -_LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void rethrow_exception(exception_ptr); -} // namespace std - -#endif // _LIBCPP___CXX03___EXCEPTION_OPERATIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__exception/terminate.h b/third_party/libcxx/include/c++/v1/__cxx03/__exception/terminate.h deleted file mode 100644 index 5f0cfa9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__exception/terminate.h +++ /dev/null @@ -1,22 +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___CXX03___EXCEPTION_TERMINATE_H -#define _LIBCPP___CXX03___EXCEPTION_TERMINATE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -namespace std { // purposefully not using versioning namespace -_LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void terminate() _NOEXCEPT; -} // namespace std - -#endif // _LIBCPP___CXX03___EXCEPTION_TERMINATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_function.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_function.h deleted file mode 100644 index 06613bd..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_function.h +++ /dev/null @@ -1,43 +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___CXX03___FUNCTIONAL_BINARY_FUNCTION_H -#define _LIBCPP___CXX03___FUNCTIONAL_BINARY_FUNCTION_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS binary_function { - typedef _Arg1 first_argument_type; - typedef _Arg2 second_argument_type; - typedef _Result result_type; -}; - -template -struct __binary_function_keep_layout_base { - using first_argument_type = _Arg1; - using second_argument_type = _Arg2; - using result_type = _Result; -}; - -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") -template -using __binary_function = binary_function<_Arg1, _Arg2, _Result>; -_LIBCPP_DIAGNOSTIC_POP - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_BINARY_FUNCTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_negate.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_negate.h deleted file mode 100644 index f59506c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binary_negate.h +++ /dev/null @@ -1,45 +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___CXX03___FUNCTIONAL_BINARY_NEGATE_H -#define _LIBCPP___CXX03___FUNCTIONAL_BINARY_NEGATE_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS binary_negate - : public __binary_function { - _Predicate __pred_; - -public: - _LIBCPP_HIDE_FROM_ABI explicit binary_negate(const _Predicate& __pred) : __pred_(__pred) {} - - _LIBCPP_HIDE_FROM_ABI bool operator()(const typename _Predicate::first_argument_type& __x, - const typename _Predicate::second_argument_type& __y) const { - return !__pred_(__x, __y); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI binary_negate<_Predicate> not2(const _Predicate& __pred) { - return binary_negate<_Predicate>(__pred); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_BINARY_NEGATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/bind.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/bind.h deleted file mode 100644 index 1722844..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/bind.h +++ /dev/null @@ -1,70 +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___CXX03___FUNCTIONAL_BIND_H -#define _LIBCPP___CXX03___FUNCTIONAL_BIND_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/weak_result_type.h> -#include <__cxx03/__fwd/functional.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_reference_wrapper.h> -#include <__cxx03/__type_traits/is_void.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct is_bind_expression - : _If< _IsSame<_Tp, __remove_cvref_t<_Tp> >::value, false_type, is_bind_expression<__remove_cvref_t<_Tp> > > {}; - -template -struct is_placeholder - : _If< _IsSame<_Tp, __remove_cvref_t<_Tp> >::value, - integral_constant, - is_placeholder<__remove_cvref_t<_Tp> > > {}; - -namespace placeholders { - -template -struct __ph {}; - -// C++17 recommends that we implement placeholders as `inline constexpr`, but allows -// implementing them as `extern `. Libc++ implements them as -// `extern const` in all standard modes to avoid an ABI break in C++03: making them -// `inline constexpr` requires removing their definition in the shared library to -// avoid ODR violations, which is an ABI break. -// -// In practice, since placeholders are empty, `extern const` is almost impossible -// to distinguish from `inline constexpr` from a usage stand point. -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<1> _1; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<2> _2; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<3> _3; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<4> _4; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<5> _5; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<6> _6; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<7> _7; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<8> _8; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<9> _9; -_LIBCPP_EXPORTED_FROM_ABI extern const __ph<10> _10; - -} // namespace placeholders - -template -struct is_placeholder > : public integral_constant {}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_BIND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder1st.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder1st.h deleted file mode 100644 index aacb024..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder1st.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___CXX03___FUNCTIONAL_BINDER1ST_H -#define _LIBCPP___CXX03___FUNCTIONAL_BINDER1ST_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/unary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS binder1st - : public __unary_function { -protected: - _Operation op; - typename _Operation::first_argument_type value; - -public: - _LIBCPP_HIDE_FROM_ABI binder1st(const _Operation& __x, const typename _Operation::first_argument_type __y) - : op(__x), value(__y) {} - _LIBCPP_HIDE_FROM_ABI typename _Operation::result_type - operator()(typename _Operation::second_argument_type& __x) const { - return op(value, __x); - } - _LIBCPP_HIDE_FROM_ABI typename _Operation::result_type - operator()(const typename _Operation::second_argument_type& __x) const { - return op(value, __x); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI binder1st<_Operation> bind1st(const _Operation& __op, const _Tp& __x) { - return binder1st<_Operation>(__op, __x); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_BINDER1ST_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder2nd.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder2nd.h deleted file mode 100644 index b45a1fe..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/binder2nd.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___CXX03___FUNCTIONAL_BINDER2ND_H -#define _LIBCPP___CXX03___FUNCTIONAL_BINDER2ND_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/unary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS binder2nd - : public __unary_function { -protected: - _Operation op; - typename _Operation::second_argument_type value; - -public: - _LIBCPP_HIDE_FROM_ABI binder2nd(const _Operation& __x, const typename _Operation::second_argument_type __y) - : op(__x), value(__y) {} - _LIBCPP_HIDE_FROM_ABI typename _Operation::result_type - operator()(typename _Operation::first_argument_type& __x) const { - return op(__x, value); - } - _LIBCPP_HIDE_FROM_ABI typename _Operation::result_type - operator()(const typename _Operation::first_argument_type& __x) const { - return op(__x, value); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI binder2nd<_Operation> bind2nd(const _Operation& __op, const _Tp& __x) { - return binder2nd<_Operation>(__op, __x); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_BINDER2ND_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/hash.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/hash.h deleted file mode 100644 index b2c3bee..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/hash.h +++ /dev/null @@ -1,509 +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___CXX03___FUNCTIONAL_HASH_H -#define _LIBCPP___CXX03___FUNCTIONAL_HASH_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/unary_function.h> -#include <__cxx03/__fwd/functional.h> -#include <__cxx03/__type_traits/conjunction.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_enum.h> -#include <__cxx03/__type_traits/underlying_type.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/__utility/swap.h> -#include <__cxx03/cstddef> -#include <__cxx03/cstdint> -#include <__cxx03/cstring> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI _Size __loadword(const void* __p) { - _Size __r; - std::memcpy(&__r, __p, sizeof(__r)); - return __r; -} - -// We use murmur2 when size_t is 32 bits, and cityhash64 when size_t -// is 64 bits. This is because cityhash64 uses 64bit x 64bit -// multiplication, which can be very slow on 32-bit systems. -template -struct __murmur2_or_cityhash; - -template -struct __murmur2_or_cityhash<_Size, 32> { - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK _Size - operator()(const void* __key, _Size __len) const { - // murmur2 - const _Size __m = 0x5bd1e995; - const _Size __r = 24; - _Size __h = __len; - const unsigned char* __data = static_cast(__key); - for (; __len >= 4; __data += 4, __len -= 4) { - _Size __k = std::__loadword<_Size>(__data); - __k *= __m; - __k ^= __k >> __r; - __k *= __m; - __h *= __m; - __h ^= __k; - } - switch (__len) { - case 3: - __h ^= static_cast<_Size>(__data[2] << 16); - _LIBCPP_FALLTHROUGH(); - case 2: - __h ^= static_cast<_Size>(__data[1] << 8); - _LIBCPP_FALLTHROUGH(); - case 1: - __h ^= __data[0]; - __h *= __m; - } - __h ^= __h >> 13; - __h *= __m; - __h ^= __h >> 15; - return __h; - } -}; - -template -struct __murmur2_or_cityhash<_Size, 64> { - // cityhash64 - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK _Size - operator()(const void* __key, _Size __len) const { - const char* __s = static_cast(__key); - if (__len <= 32) { - if (__len <= 16) { - return __hash_len_0_to_16(__s, __len); - } else { - return __hash_len_17_to_32(__s, __len); - } - } else if (__len <= 64) { - return __hash_len_33_to_64(__s, __len); - } - - // For strings over 64 bytes we hash the end first, and then as we - // loop we keep 56 bytes of state: v, w, x, y, and z. - _Size __x = std::__loadword<_Size>(__s + __len - 40); - _Size __y = std::__loadword<_Size>(__s + __len - 16) + std::__loadword<_Size>(__s + __len - 56); - _Size __z = - __hash_len_16(std::__loadword<_Size>(__s + __len - 48) + __len, std::__loadword<_Size>(__s + __len - 24)); - pair<_Size, _Size> __v = __weak_hash_len_32_with_seeds(__s + __len - 64, __len, __z); - pair<_Size, _Size> __w = __weak_hash_len_32_with_seeds(__s + __len - 32, __y + __k1, __x); - __x = __x * __k1 + std::__loadword<_Size>(__s); - - // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. - __len = (__len - 1) & ~static_cast<_Size>(63); - do { - __x = __rotate(__x + __y + __v.first + std::__loadword<_Size>(__s + 8), 37) * __k1; - __y = __rotate(__y + __v.second + std::__loadword<_Size>(__s + 48), 42) * __k1; - __x ^= __w.second; - __y += __v.first + std::__loadword<_Size>(__s + 40); - __z = __rotate(__z + __w.first, 33) * __k1; - __v = __weak_hash_len_32_with_seeds(__s, __v.second * __k1, __x + __w.first); - __w = __weak_hash_len_32_with_seeds(__s + 32, __z + __w.second, __y + std::__loadword<_Size>(__s + 16)); - std::swap(__z, __x); - __s += 64; - __len -= 64; - } while (__len != 0); - return __hash_len_16(__hash_len_16(__v.first, __w.first) + __shift_mix(__y) * __k1 + __z, - __hash_len_16(__v.second, __w.second) + __x); - } - -private: - // Some primes between 2^63 and 2^64. - static const _Size __k0 = 0xc3a5c85c97cb3127ULL; - static const _Size __k1 = 0xb492b66fbe98f273ULL; - static const _Size __k2 = 0x9ae16a3b2f90404fULL; - static const _Size __k3 = 0xc949d7c7509e6557ULL; - - _LIBCPP_HIDE_FROM_ABI static _Size __rotate(_Size __val, int __shift) { - return __shift == 0 ? __val : ((__val >> __shift) | (__val << (64 - __shift))); - } - - _LIBCPP_HIDE_FROM_ABI static _Size __rotate_by_at_least_1(_Size __val, int __shift) { - return (__val >> __shift) | (__val << (64 - __shift)); - } - - _LIBCPP_HIDE_FROM_ABI static _Size __shift_mix(_Size __val) { return __val ^ (__val >> 47); } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static _Size __hash_len_16(_Size __u, _Size __v) { - const _Size __mul = 0x9ddfea08eb382d69ULL; - _Size __a = (__u ^ __v) * __mul; - __a ^= (__a >> 47); - _Size __b = (__v ^ __a) * __mul; - __b ^= (__b >> 47); - __b *= __mul; - return __b; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static _Size - __hash_len_0_to_16(const char* __s, _Size __len) { - if (__len > 8) { - const _Size __a = std::__loadword<_Size>(__s); - const _Size __b = std::__loadword<_Size>(__s + __len - 8); - return __hash_len_16(__a, __rotate_by_at_least_1(__b + __len, __len)) ^ __b; - } - if (__len >= 4) { - const uint32_t __a = std::__loadword(__s); - const uint32_t __b = std::__loadword(__s + __len - 4); -#ifdef _LIBCPP_ABI_FIX_CITYHASH_IMPLEMENTATION - return __hash_len_16(__len + (static_cast<_Size>(__a) << 3), __b); -#else - return __hash_len_16(__len + (__a << 3), __b); -#endif - } - if (__len > 0) { - const unsigned char __a = static_cast(__s[0]); - const unsigned char __b = static_cast(__s[__len >> 1]); - const unsigned char __c = static_cast(__s[__len - 1]); - const uint32_t __y = static_cast(__a) + (static_cast(__b) << 8); - const uint32_t __z = __len + (static_cast(__c) << 2); - return __shift_mix(__y * __k2 ^ __z * __k3) * __k2; - } - return __k2; - } - - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static _Size - __hash_len_17_to_32(const char* __s, _Size __len) { - const _Size __a = std::__loadword<_Size>(__s) * __k1; - const _Size __b = std::__loadword<_Size>(__s + 8); - const _Size __c = std::__loadword<_Size>(__s + __len - 8) * __k2; - const _Size __d = std::__loadword<_Size>(__s + __len - 16) * __k0; - return __hash_len_16( - __rotate(__a - __b, 43) + __rotate(__c, 30) + __d, __a + __rotate(__b ^ __k3, 20) - __c + __len); - } - - // Return a 16-byte hash for 48 bytes. Quick and dirty. - // Callers do best to use "random-looking" values for a and b. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static pair<_Size, _Size> - __weak_hash_len_32_with_seeds(_Size __w, _Size __x, _Size __y, _Size __z, _Size __a, _Size __b) { - __a += __w; - __b = __rotate(__b + __a + __z, 21); - const _Size __c = __a; - __a += __x; - __a += __y; - __b += __rotate(__a, 44); - return pair<_Size, _Size>(__a + __z, __b + __c); - } - - // Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static pair<_Size, _Size> - __weak_hash_len_32_with_seeds(const char* __s, _Size __a, _Size __b) { - return __weak_hash_len_32_with_seeds( - std::__loadword<_Size>(__s), - std::__loadword<_Size>(__s + 8), - std::__loadword<_Size>(__s + 16), - std::__loadword<_Size>(__s + 24), - __a, - __b); - } - - // Return an 8-byte hash for 33 to 64 bytes. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK static _Size - __hash_len_33_to_64(const char* __s, size_t __len) { - _Size __z = std::__loadword<_Size>(__s + 24); - _Size __a = std::__loadword<_Size>(__s) + (__len + std::__loadword<_Size>(__s + __len - 16)) * __k0; - _Size __b = __rotate(__a + __z, 52); - _Size __c = __rotate(__a, 37); - __a += std::__loadword<_Size>(__s + 8); - __c += __rotate(__a, 7); - __a += std::__loadword<_Size>(__s + 16); - _Size __vf = __a + __z; - _Size __vs = __b + __rotate(__a, 31) + __c; - __a = std::__loadword<_Size>(__s + 16) + std::__loadword<_Size>(__s + __len - 32); - __z += std::__loadword<_Size>(__s + __len - 8); - __b = __rotate(__a + __z, 52); - __c = __rotate(__a, 37); - __a += std::__loadword<_Size>(__s + __len - 24); - __c += __rotate(__a, 7); - __a += std::__loadword<_Size>(__s + __len - 16); - _Size __wf = __a + __z; - _Size __ws = __b + __rotate(__a, 31) + __c; - _Size __r = __shift_mix((__vf + __ws) * __k2 + (__wf + __vs) * __k0); - return __shift_mix(__r * __k0 + __vs) * __k2; - } -}; - -template -struct __scalar_hash; - -template -struct __scalar_hash<_Tp, 0> : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - union { - _Tp __t; - size_t __a; - } __u; - __u.__a = 0; - __u.__t = __v; - return __u.__a; - } -}; - -template -struct __scalar_hash<_Tp, 1> : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - union { - _Tp __t; - size_t __a; - } __u; - __u.__t = __v; - return __u.__a; - } -}; - -template -struct __scalar_hash<_Tp, 2> : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - union { - _Tp __t; - struct { - size_t __a; - size_t __b; - } __s; - } __u; - __u.__t = __v; - return __murmur2_or_cityhash()(&__u, sizeof(__u)); - } -}; - -template -struct __scalar_hash<_Tp, 3> : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - union { - _Tp __t; - struct { - size_t __a; - size_t __b; - size_t __c; - } __s; - } __u; - __u.__t = __v; - return __murmur2_or_cityhash()(&__u, sizeof(__u)); - } -}; - -template -struct __scalar_hash<_Tp, 4> : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - union { - _Tp __t; - struct { - size_t __a; - size_t __b; - size_t __c; - size_t __d; - } __s; - } __u; - __u.__t = __v; - return __murmur2_or_cityhash()(&__u, sizeof(__u)); - } -}; - -struct _PairT { - size_t first; - size_t second; -}; - -_LIBCPP_HIDE_FROM_ABI inline size_t __hash_combine(size_t __lhs, size_t __rhs) _NOEXCEPT { - typedef __scalar_hash<_PairT> _HashT; - const _PairT __p = {__lhs, __rhs}; - return _HashT()(__p); -} - -template -struct _LIBCPP_TEMPLATE_VIS hash<_Tp*> : public __unary_function<_Tp*, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp* __v) const _NOEXCEPT { - union { - _Tp* __t; - size_t __a; - } __u; - __u.__t = __v; - return __murmur2_or_cityhash()(&__u, sizeof(__u)); - } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(bool __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(char __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(signed char __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned char __v) const _NOEXCEPT { return static_cast(__v); } -}; - -#ifndef _LIBCPP_HAS_NO_CHAR8_T -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(char8_t __v) const _NOEXCEPT { return static_cast(__v); } -}; -#endif // !_LIBCPP_HAS_NO_CHAR8_T - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(char16_t __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(char32_t __v) const _NOEXCEPT { return static_cast(__v); } -}; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(wchar_t __v) const _NOEXCEPT { return static_cast(__v); } -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(short __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned short __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(int __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned int __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(long __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __unary_function { - _LIBCPP_HIDE_FROM_ABI size_t operator()(unsigned long __v) const _NOEXCEPT { return static_cast(__v); } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __scalar_hash {}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __scalar_hash {}; - -#ifndef _LIBCPP_HAS_NO_INT128 - -template <> -struct _LIBCPP_TEMPLATE_VIS hash<__int128_t> : public __scalar_hash<__int128_t> {}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash<__uint128_t> : public __scalar_hash<__uint128_t> {}; - -#endif - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __scalar_hash { - _LIBCPP_HIDE_FROM_ABI size_t operator()(float __v) const _NOEXCEPT { - // -0.0 and 0.0 should return same hash - if (__v == 0.0f) - return 0; - return __scalar_hash::operator()(__v); - } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __scalar_hash { - _LIBCPP_HIDE_FROM_ABI size_t operator()(double __v) const _NOEXCEPT { - // -0.0 and 0.0 should return same hash - if (__v == 0.0) - return 0; - return __scalar_hash::operator()(__v); - } -}; - -template <> -struct _LIBCPP_TEMPLATE_VIS hash : public __scalar_hash { - _LIBCPP_HIDE_FROM_ABI size_t operator()(long double __v) const _NOEXCEPT { - // -0.0 and 0.0 should return same hash - if (__v == 0.0L) - return 0; -#if defined(__i386__) || (defined(__x86_64__) && defined(__ILP32__)) - // Zero out padding bits - union { - long double __t; - struct { - size_t __a; - size_t __b; - size_t __c; - size_t __d; - } __s; - } __u; - __u.__s.__a = 0; - __u.__s.__b = 0; - __u.__s.__c = 0; - __u.__s.__d = 0; - __u.__t = __v; - return __u.__s.__a ^ __u.__s.__b ^ __u.__s.__c ^ __u.__s.__d; -#elif defined(__x86_64__) - // Zero out padding bits - union { - long double __t; - struct { - size_t __a; - size_t __b; - } __s; - } __u; - __u.__s.__a = 0; - __u.__s.__b = 0; - __u.__t = __v; - return __u.__s.__a ^ __u.__s.__b; -#else - return __scalar_hash::operator()(__v); -#endif - } -}; - -template ::value> -struct _LIBCPP_TEMPLATE_VIS __enum_hash : public __unary_function<_Tp, size_t> { - _LIBCPP_HIDE_FROM_ABI size_t operator()(_Tp __v) const _NOEXCEPT { - typedef typename underlying_type<_Tp>::type type; - return hash()(static_cast(__v)); - } -}; -template -struct _LIBCPP_TEMPLATE_VIS __enum_hash<_Tp, false> { - __enum_hash() = delete; - __enum_hash(__enum_hash const&) = delete; - __enum_hash& operator=(__enum_hash const&) = delete; -}; - -template -struct _LIBCPP_TEMPLATE_VIS hash : public __enum_hash<_Tp> {}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_HASH_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/identity.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/identity.h deleted file mode 100644 index b5b8683..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/identity.h +++ /dev/null @@ -1,45 +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___CXX03___FUNCTIONAL_IDENTITY_H -#define _LIBCPP___CXX03___FUNCTIONAL_IDENTITY_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/functional.h> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __is_identity : false_type {}; - -struct __identity { - template - _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _Tp&& operator()(_Tp&& __t) const _NOEXCEPT { - return std::forward<_Tp>(__t); - } - - using is_transparent = void; -}; - -template <> -struct __is_identity<__identity> : true_type {}; -template <> -struct __is_identity > : true_type {}; -template <> -struct __is_identity > : true_type {}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_IDENTITY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fn.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fn.h deleted file mode 100644 index fb9ffcf..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fn.h +++ /dev/null @@ -1,51 +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___CXX03___FUNCTIONAL_MEM_FN_H -#define _LIBCPP___CXX03___FUNCTIONAL_MEM_FN_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> -#include <__cxx03/__functional/weak_result_type.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __mem_fn : public __weak_result_type<_Tp> { -public: - // types - typedef _Tp type; - -private: - type __f_; - -public: - _LIBCPP_HIDE_FROM_ABI __mem_fn(type __f) _NOEXCEPT : __f_(__f) {} - - // invoke - template - _LIBCPP_HIDE_FROM_ABI typename __invoke_return::type operator()(_ArgTypes&&... __args) const { - return std::__invoke(__f_, std::forward<_ArgTypes>(__args)...); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI __mem_fn<_Rp _Tp::*> mem_fn(_Rp _Tp::* __pm) _NOEXCEPT { - return __mem_fn<_Rp _Tp::*>(__pm); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_MEM_FN_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fun_ref.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fun_ref.h deleted file mode 100644 index 81497e9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/mem_fun_ref.h +++ /dev/null @@ -1,137 +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___CXX03___FUNCTIONAL_MEM_FUN_REF_H -#define _LIBCPP___CXX03___FUNCTIONAL_MEM_FUN_REF_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> -#include <__cxx03/__functional/unary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS mem_fun_t : public __unary_function<_Tp*, _Sp> { - _Sp (_Tp::*__p_)(); - -public: - _LIBCPP_HIDE_FROM_ABI explicit mem_fun_t(_Sp (_Tp::*__p)()) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(_Tp* __p) const { return (__p->*__p_)(); } -}; - -template -class _LIBCPP_TEMPLATE_VIS mem_fun1_t : public __binary_function<_Tp*, _Ap, _Sp> { - _Sp (_Tp::*__p_)(_Ap); - -public: - _LIBCPP_HIDE_FROM_ABI explicit mem_fun1_t(_Sp (_Tp::*__p)(_Ap)) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(_Tp* __p, _Ap __x) const { return (__p->*__p_)(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI mem_fun_t<_Sp, _Tp> mem_fun(_Sp (_Tp::*__f)()) { - return mem_fun_t<_Sp, _Tp>(__f); -} - -template -inline _LIBCPP_HIDE_FROM_ABI mem_fun1_t<_Sp, _Tp, _Ap> mem_fun(_Sp (_Tp::*__f)(_Ap)) { - return mem_fun1_t<_Sp, _Tp, _Ap>(__f); -} - -template -class _LIBCPP_TEMPLATE_VIS mem_fun_ref_t : public __unary_function<_Tp, _Sp> { - _Sp (_Tp::*__p_)(); - -public: - _LIBCPP_HIDE_FROM_ABI explicit mem_fun_ref_t(_Sp (_Tp::*__p)()) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(_Tp& __p) const { return (__p.*__p_)(); } -}; - -template -class _LIBCPP_TEMPLATE_VIS mem_fun1_ref_t : public __binary_function<_Tp, _Ap, _Sp> { - _Sp (_Tp::*__p_)(_Ap); - -public: - _LIBCPP_HIDE_FROM_ABI explicit mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap)) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(_Tp& __p, _Ap __x) const { return (__p.*__p_)(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI mem_fun_ref_t<_Sp, _Tp> mem_fun_ref(_Sp (_Tp::*__f)()) { - return mem_fun_ref_t<_Sp, _Tp>(__f); -} - -template -inline _LIBCPP_HIDE_FROM_ABI mem_fun1_ref_t<_Sp, _Tp, _Ap> mem_fun_ref(_Sp (_Tp::*__f)(_Ap)) { - return mem_fun1_ref_t<_Sp, _Tp, _Ap>(__f); -} - -template -class _LIBCPP_TEMPLATE_VIS const_mem_fun_t : public __unary_function { - _Sp (_Tp::*__p_)() const; - -public: - _LIBCPP_HIDE_FROM_ABI explicit const_mem_fun_t(_Sp (_Tp::*__p)() const) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(const _Tp* __p) const { return (__p->*__p_)(); } -}; - -template -class _LIBCPP_TEMPLATE_VIS const_mem_fun1_t : public __binary_function { - _Sp (_Tp::*__p_)(_Ap) const; - -public: - _LIBCPP_HIDE_FROM_ABI explicit const_mem_fun1_t(_Sp (_Tp::*__p)(_Ap) const) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(const _Tp* __p, _Ap __x) const { return (__p->*__p_)(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI const_mem_fun_t<_Sp, _Tp> mem_fun(_Sp (_Tp::*__f)() const) { - return const_mem_fun_t<_Sp, _Tp>(__f); -} - -template -inline _LIBCPP_HIDE_FROM_ABI const_mem_fun1_t<_Sp, _Tp, _Ap> mem_fun(_Sp (_Tp::*__f)(_Ap) const) { - return const_mem_fun1_t<_Sp, _Tp, _Ap>(__f); -} - -template -class _LIBCPP_TEMPLATE_VIS const_mem_fun_ref_t : public __unary_function<_Tp, _Sp> { - _Sp (_Tp::*__p_)() const; - -public: - _LIBCPP_HIDE_FROM_ABI explicit const_mem_fun_ref_t(_Sp (_Tp::*__p)() const) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(const _Tp& __p) const { return (__p.*__p_)(); } -}; - -template -class _LIBCPP_TEMPLATE_VIS const_mem_fun1_ref_t : public __binary_function<_Tp, _Ap, _Sp> { - _Sp (_Tp::*__p_)(_Ap) const; - -public: - _LIBCPP_HIDE_FROM_ABI explicit const_mem_fun1_ref_t(_Sp (_Tp::*__p)(_Ap) const) : __p_(__p) {} - _LIBCPP_HIDE_FROM_ABI _Sp operator()(const _Tp& __p, _Ap __x) const { return (__p.*__p_)(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI const_mem_fun_ref_t<_Sp, _Tp> mem_fun_ref(_Sp (_Tp::*__f)() const) { - return const_mem_fun_ref_t<_Sp, _Tp>(__f); -} - -template -inline _LIBCPP_HIDE_FROM_ABI const_mem_fun1_ref_t<_Sp, _Tp, _Ap> mem_fun_ref(_Sp (_Tp::*__f)(_Ap) const) { - return const_mem_fun1_ref_t<_Sp, _Tp, _Ap>(__f); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_MEM_FUN_REF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/operations.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/operations.h deleted file mode 100644 index 83840a2..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/operations.h +++ /dev/null @@ -1,181 +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___CXX03___FUNCTIONAL_OPERATIONS_H -#define _LIBCPP___CXX03___FUNCTIONAL_OPERATIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> -#include <__cxx03/__functional/unary_function.h> -#include <__cxx03/__type_traits/desugars_to.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Arithmetic operations - -template -struct _LIBCPP_TEMPLATE_VIS plus : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(plus); - -// The non-transparent std::plus specialization is only equivalent to a raw plus -// operator when we don't perform an implicit conversion when calling it. -template -inline const bool __desugars_to_v<__plus_tag, plus<_Tp>, _Tp, _Tp> = true; - -template -inline const bool __desugars_to_v<__plus_tag, plus, _Tp, _Up> = true; - -template -struct _LIBCPP_TEMPLATE_VIS minus : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(minus); - -template -struct _LIBCPP_TEMPLATE_VIS multiplies : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(multiplies); - -template -struct _LIBCPP_TEMPLATE_VIS divides : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(divides); - -template -struct _LIBCPP_TEMPLATE_VIS modulus : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(modulus); - -template -struct _LIBCPP_TEMPLATE_VIS negate : __unary_function<_Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x) const { return -__x; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(negate); - -// Bitwise operations - -template -struct _LIBCPP_TEMPLATE_VIS bit_and : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x & __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(bit_and); - -template -struct _LIBCPP_TEMPLATE_VIS bit_or : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x | __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(bit_or); - -template -struct _LIBCPP_TEMPLATE_VIS bit_xor : __binary_function<_Tp, _Tp, _Tp> { - typedef _Tp __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x ^ __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(bit_xor); - -// Comparison operations - -template -struct _LIBCPP_TEMPLATE_VIS equal_to : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(equal_to); - -// The non-transparent std::equal_to specialization is only equivalent to a raw equality -// comparison when we don't perform an implicit conversion when calling it. -template -inline const bool __desugars_to_v<__equal_tag, equal_to<_Tp>, _Tp, _Tp> = true; - -// In the transparent case, we do not enforce that -template -inline const bool __desugars_to_v<__equal_tag, equal_to, _Tp, _Up> = true; - -template -struct _LIBCPP_TEMPLATE_VIS not_equal_to : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(not_equal_to); - -template -struct _LIBCPP_TEMPLATE_VIS less : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(less); - -template -inline const bool __desugars_to_v<__less_tag, less<_Tp>, _Tp, _Tp> = true; - -template -struct _LIBCPP_TEMPLATE_VIS less_equal : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(less_equal); - -template -struct _LIBCPP_TEMPLATE_VIS greater_equal : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(greater_equal); - -template -struct _LIBCPP_TEMPLATE_VIS greater : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(greater); - -// Logical operations - -template -struct _LIBCPP_TEMPLATE_VIS logical_and : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(logical_and); - -template -struct _LIBCPP_TEMPLATE_VIS logical_not : __unary_function<_Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x) const { return !__x; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(logical_not); - -template -struct _LIBCPP_TEMPLATE_VIS logical_or : __binary_function<_Tp, _Tp, bool> { - typedef bool __result_type; // used by valarray - _LIBCPP_HIDE_FROM_ABI bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(logical_or); - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_OPERATIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_binary_function.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_binary_function.h deleted file mode 100644 index 3fe2f4c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_binary_function.h +++ /dev/null @@ -1,38 +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___CXX03___FUNCTIONAL_POINTER_TO_BINARY_FUNCTION_H -#define _LIBCPP___CXX03___FUNCTIONAL_POINTER_TO_BINARY_FUNCTION_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS pointer_to_binary_function : public __binary_function<_Arg1, _Arg2, _Result> { - _Result (*__f_)(_Arg1, _Arg2); - -public: - _LIBCPP_HIDE_FROM_ABI explicit pointer_to_binary_function(_Result (*__f)(_Arg1, _Arg2)) : __f_(__f) {} - _LIBCPP_HIDE_FROM_ABI _Result operator()(_Arg1 __x, _Arg2 __y) const { return __f_(__x, __y); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI pointer_to_binary_function<_Arg1, _Arg2, _Result> ptr_fun(_Result (*__f)(_Arg1, _Arg2)) { - return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__f); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_POINTER_TO_BINARY_FUNCTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_unary_function.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_unary_function.h deleted file mode 100644 index cf429b9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/pointer_to_unary_function.h +++ /dev/null @@ -1,38 +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___CXX03___FUNCTIONAL_POINTER_TO_UNARY_FUNCTION_H -#define _LIBCPP___CXX03___FUNCTIONAL_POINTER_TO_UNARY_FUNCTION_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/unary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS pointer_to_unary_function : public __unary_function<_Arg, _Result> { - _Result (*__f_)(_Arg); - -public: - _LIBCPP_HIDE_FROM_ABI explicit pointer_to_unary_function(_Result (*__f)(_Arg)) : __f_(__f) {} - _LIBCPP_HIDE_FROM_ABI _Result operator()(_Arg __x) const { return __f_(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__f)(_Arg)) { - return pointer_to_unary_function<_Arg, _Result>(__f); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_POINTER_TO_UNARY_FUNCTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/reference_wrapper.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/reference_wrapper.h deleted file mode 100644 index bbe8544..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/reference_wrapper.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___CXX03___FUNCTIONAL_REFERENCE_WRAPPER_H -#define _LIBCPP___CXX03___FUNCTIONAL_REFERENCE_WRAPPER_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/weak_result_type.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_const.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__type_traits/void_t.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS reference_wrapper : public __weak_result_type<_Tp> { -public: - // types - typedef _Tp type; - -private: - type* __f_; - - static void __fun(_Tp&) _NOEXCEPT; - static void __fun(_Tp&&) = delete; // NOLINT(modernize-use-equals-delete) ; This is llvm.org/PR54276 - -public: - template ()))>, - __enable_if_t::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI reference_wrapper(_Up&& __u) { - type& __f = static_cast<_Up&&>(__u); - __f_ = std::addressof(__f); - } - - // access - _LIBCPP_HIDE_FROM_ABI operator type&() const _NOEXCEPT { return *__f_; } - _LIBCPP_HIDE_FROM_ABI type& get() const _NOEXCEPT { return *__f_; } - - // invoke - template - _LIBCPP_HIDE_FROM_ABI typename __invoke_of::type operator()(_ArgTypes&&... __args) const { - return std::__invoke(get(), std::forward<_ArgTypes>(__args)...); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI reference_wrapper<_Tp> ref(_Tp& __t) _NOEXCEPT { - return reference_wrapper<_Tp>(__t); -} - -template -inline _LIBCPP_HIDE_FROM_ABI reference_wrapper<_Tp> ref(reference_wrapper<_Tp> __t) _NOEXCEPT { - return __t; -} - -template -inline _LIBCPP_HIDE_FROM_ABI reference_wrapper cref(const _Tp& __t) _NOEXCEPT { - return reference_wrapper(__t); -} - -template -inline _LIBCPP_HIDE_FROM_ABI reference_wrapper cref(reference_wrapper<_Tp> __t) _NOEXCEPT { - return __t; -} - -template -void ref(const _Tp&&) = delete; -template -void cref(const _Tp&&) = delete; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_REFERENCE_WRAPPER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_function.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_function.h deleted file mode 100644 index 72193c8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_function.h +++ /dev/null @@ -1,40 +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___CXX03___FUNCTIONAL_UNARY_FUNCTION_H -#define _LIBCPP___CXX03___FUNCTIONAL_UNARY_FUNCTION_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS unary_function { - typedef _Arg argument_type; - typedef _Result result_type; -}; - -template -struct __unary_function_keep_layout_base { - using argument_type = _Arg; - using result_type = _Result; -}; - -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") -template -using __unary_function = unary_function<_Arg, _Result>; -_LIBCPP_DIAGNOSTIC_POP - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_UNARY_FUNCTION_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_negate.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_negate.h deleted file mode 100644 index 3591b8e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/unary_negate.h +++ /dev/null @@ -1,38 +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___CXX03___FUNCTIONAL_UNARY_NEGATE_H -#define _LIBCPP___CXX03___FUNCTIONAL_UNARY_NEGATE_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/unary_function.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS unary_negate : public __unary_function { - _Predicate __pred_; - -public: - _LIBCPP_HIDE_FROM_ABI explicit unary_negate(const _Predicate& __pred) : __pred_(__pred) {} - _LIBCPP_HIDE_FROM_ABI bool operator()(const typename _Predicate::argument_type& __x) const { return !__pred_(__x); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI unary_negate<_Predicate> not1(const _Predicate& __pred) { - return unary_negate<_Predicate>(__pred); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_UNARY_NEGATE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__functional/weak_result_type.h b/third_party/libcxx/include/c++/v1/__cxx03/__functional/weak_result_type.h deleted file mode 100644 index e8c2c4d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__functional/weak_result_type.h +++ /dev/null @@ -1,209 +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___CXX03___FUNCTIONAL_WEAK_RESULT_TYPE_H -#define _LIBCPP___CXX03___FUNCTIONAL_WEAK_RESULT_TYPE_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/binary_function.h> -#include <__cxx03/__functional/unary_function.h> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__type_traits/invoke.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/declval.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __has_result_type { -private: - template - static false_type __test(...); - template - static true_type __test(typename _Up::result_type* = 0); - -public: - static const bool value = decltype(__test<_Tp>(0))::value; -}; - -// __weak_result_type - -template -struct __derives_from_unary_function { -private: - struct __two { - char __lx; - char __lxx; - }; - static __two __test(...); - template - static __unary_function<_Ap, _Rp> __test(const volatile __unary_function<_Ap, _Rp>*); - -public: - static const bool value = !is_same::value; - typedef decltype(__test((_Tp*)0)) type; -}; - -template -struct __derives_from_binary_function { -private: - struct __two { - char __lx; - char __lxx; - }; - static __two __test(...); - template - static __binary_function<_A1, _A2, _Rp> __test(const volatile __binary_function<_A1, _A2, _Rp>*); - -public: - static const bool value = !is_same::value; - typedef decltype(__test((_Tp*)0)) type; -}; - -template ::value> -struct __maybe_derive_from_unary_function // bool is true - : public __derives_from_unary_function<_Tp>::type {}; - -template -struct __maybe_derive_from_unary_function<_Tp, false> {}; - -template ::value> -struct __maybe_derive_from_binary_function // bool is true - : public __derives_from_binary_function<_Tp>::type {}; - -template -struct __maybe_derive_from_binary_function<_Tp, false> {}; - -template ::value> -struct __weak_result_type_imp // bool is true - : public __maybe_derive_from_unary_function<_Tp>, - public __maybe_derive_from_binary_function<_Tp> { - using result_type _LIBCPP_NODEBUG = typename _Tp::result_type; -}; - -template -struct __weak_result_type_imp<_Tp, false> - : public __maybe_derive_from_unary_function<_Tp>, public __maybe_derive_from_binary_function<_Tp> {}; - -template -struct __weak_result_type : public __weak_result_type_imp<_Tp> {}; - -// 0 argument case - -template -struct __weak_result_type<_Rp()> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (&)()> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (*)()> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -// 1 argument case - -template -struct __weak_result_type<_Rp(_A1)> : public __unary_function<_A1, _Rp> {}; - -template -struct __weak_result_type<_Rp (&)(_A1)> : public __unary_function<_A1, _Rp> {}; - -template -struct __weak_result_type<_Rp (*)(_A1)> : public __unary_function<_A1, _Rp> {}; - -template -struct __weak_result_type<_Rp (_Cp::*)()> : public __unary_function<_Cp*, _Rp> {}; - -template -struct __weak_result_type<_Rp (_Cp::*)() const> : public __unary_function {}; - -template -struct __weak_result_type<_Rp (_Cp::*)() volatile> : public __unary_function {}; - -template -struct __weak_result_type<_Rp (_Cp::*)() const volatile> : public __unary_function {}; - -// 2 argument case - -template -struct __weak_result_type<_Rp(_A1, _A2)> : public __binary_function<_A1, _A2, _Rp> {}; - -template -struct __weak_result_type<_Rp (*)(_A1, _A2)> : public __binary_function<_A1, _A2, _Rp> {}; - -template -struct __weak_result_type<_Rp (&)(_A1, _A2)> : public __binary_function<_A1, _A2, _Rp> {}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1)> : public __binary_function<_Cp*, _A1, _Rp> {}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1) const> : public __binary_function {}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1) volatile> : public __binary_function {}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1) const volatile> : public __binary_function { -}; - -// 3 or more arguments - -template -struct __weak_result_type<_Rp(_A1, _A2, _A3, _A4...)> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (&)(_A1, _A2, _A3, _A4...)> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (*)(_A1, _A2, _A3, _A4...)> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1, _A2, _A3...)> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1, _A2, _A3...) const> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1, _A2, _A3...) volatile> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __weak_result_type<_Rp (_Cp::*)(_A1, _A2, _A3...) const volatile> { - using result_type _LIBCPP_NODEBUG = _Rp; -}; - -template -struct __invoke_return { - typedef decltype(std::__invoke(std::declval<_Tp>(), std::declval<_Args>()...)) type; -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_WEAK_RESULT_TYPE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/array.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/array.h deleted file mode 100644 index 101faf8..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/array.h +++ /dev/null @@ -1,38 +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___CXX03___FWD_ARRAY_H -#define _LIBCPP___CXX03___FWD_ARRAY_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS array; - -template -_LIBCPP_HIDE_FROM_ABI _Tp& get(array<_Tp, _Size>&) _NOEXCEPT; - -template -_LIBCPP_HIDE_FROM_ABI const _Tp& get(const array<_Tp, _Size>&) _NOEXCEPT; - -template -struct __is_std_array : false_type {}; - -template -struct __is_std_array > : true_type {}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_ARRAY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/bit_reference.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/bit_reference.h deleted file mode 100644 index e04a47f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/bit_reference.h +++ /dev/null @@ -1,25 +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___CXX03___FWD_BIT_REFERENCE_H -#define _LIBCPP___CXX03___FWD_BIT_REFERENCE_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __bit_iterator; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_BIT_REFERENCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/complex.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/complex.h deleted file mode 100644 index 0959f94..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/complex.h +++ /dev/null @@ -1,26 +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___CXX03___FWD_COMPLEX_H -#define _LIBCPP___CXX03___FWD_COMPLEX_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS complex; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_COMPLEX_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/deque.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/deque.h deleted file mode 100644 index 7d1c6f7..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/deque.h +++ /dev/null @@ -1,26 +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___CXX03___FWD_DEQUE_H -#define _LIBCPP___CXX03___FWD_DEQUE_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/memory.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS deque; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_DEQUE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/fstream.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/fstream.h deleted file mode 100644 index 8cc5d2b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/fstream.h +++ /dev/null @@ -1,53 +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___CXX03___FWD_FSTREAM_H -#define _LIBCPP___CXX03___FWD_FSTREAM_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS basic_filebuf; -template > -class _LIBCPP_TEMPLATE_VIS basic_ifstream; -template > -class _LIBCPP_TEMPLATE_VIS basic_ofstream; -template > -class _LIBCPP_TEMPLATE_VIS basic_fstream; - -using filebuf = basic_filebuf; -using ifstream = basic_ifstream; -using ofstream = basic_ofstream; -using fstream = basic_fstream; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wfilebuf = basic_filebuf; -using wifstream = basic_ifstream; -using wofstream = basic_ofstream; -using wfstream = basic_fstream; -#endif - -template -class _LIBCPP_PREFERRED_NAME(filebuf) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wfilebuf)) basic_filebuf; -template -class _LIBCPP_PREFERRED_NAME(ifstream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wifstream)) basic_ifstream; -template -class _LIBCPP_PREFERRED_NAME(ofstream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wofstream)) basic_ofstream; -template -class _LIBCPP_PREFERRED_NAME(fstream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wfstream)) basic_fstream; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_FSTREAM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/functional.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/functional.h deleted file mode 100644 index 924874c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/functional.h +++ /dev/null @@ -1,28 +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___CXX03___FWD_FUNCTIONAL_H -#define _LIBCPP___CXX03___FWD_FUNCTIONAL_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS hash; - -template -class _LIBCPP_TEMPLATE_VIS reference_wrapper; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_FUNCTIONAL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ios.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ios.h deleted file mode 100644 index 3b33b25..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ios.h +++ /dev/null @@ -1,43 +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___CXX03___FWD_IOS_H -#define _LIBCPP___CXX03___FWD_IOS_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -class _LIBCPP_EXPORTED_FROM_ABI ios_base; - -template > -class _LIBCPP_TEMPLATE_VIS basic_ios; - -using ios = basic_ios; -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wios = basic_ios; -#endif - -template -class _LIBCPP_PREFERRED_NAME(ios) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wios)) basic_ios; - -#if _LIBCPP_LIBC_NEWLIB -// On newlib, off_t is 'long int' -using streamoff = long int; // for char_traits in -#else -using streamoff = long long; // for char_traits in -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_IOS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/istream.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/istream.h deleted file mode 100644 index f3edc78..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/istream.h +++ /dev/null @@ -1,43 +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___CXX03___FWD_ISTREAM_H -#define _LIBCPP___CXX03___FWD_ISTREAM_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS basic_istream; - -template > -class _LIBCPP_TEMPLATE_VIS basic_iostream; - -using istream = basic_istream; -using iostream = basic_iostream; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wistream = basic_istream; -using wiostream = basic_iostream; -#endif - -template -class _LIBCPP_PREFERRED_NAME(istream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wistream)) basic_istream; - -template -class _LIBCPP_PREFERRED_NAME(iostream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wiostream)) basic_iostream; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_ISTREAM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/memory.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/memory.h deleted file mode 100644 index df76b17..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/memory.h +++ /dev/null @@ -1,25 +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___CXX03___FWD_MEMORY_H -#define _LIBCPP___CXX03___FWD_MEMORY_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS allocator; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_MEMORY_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ostream.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ostream.h deleted file mode 100644 index b5061e6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/ostream.h +++ /dev/null @@ -1,35 +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___CXX03___FWD_OSTREAM_H -#define _LIBCPP___CXX03___FWD_OSTREAM_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS basic_ostream; - -using ostream = basic_ostream; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wostream = basic_ostream; -#endif - -template -class _LIBCPP_PREFERRED_NAME(ostream) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wostream)) basic_ostream; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_OSTREAM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/pair.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/pair.h deleted file mode 100644 index be2c862..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/pair.h +++ /dev/null @@ -1,33 +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___CXX03___FWD_PAIR_H -#define _LIBCPP___CXX03___FWD_PAIR_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/tuple.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS pair; - -template -_LIBCPP_HIDE_FROM_ABI typename tuple_element<_Ip, pair<_T1, _T2> >::type& get(pair<_T1, _T2>&) _NOEXCEPT; - -template -_LIBCPP_HIDE_FROM_ABI const typename tuple_element<_Ip, pair<_T1, _T2> >::type& get(const pair<_T1, _T2>&) _NOEXCEPT; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_PAIR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/queue.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/queue.h deleted file mode 100644 index c2f6808..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/queue.h +++ /dev/null @@ -1,31 +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___CXX03___FWD_QUEUE_H -#define _LIBCPP___CXX03___FWD_QUEUE_H - -#include <__cxx03/__config> -#include <__cxx03/__functional/operations.h> -#include <__cxx03/__fwd/deque.h> -#include <__cxx03/__fwd/vector.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS queue; - -template , class _Compare = less > -class _LIBCPP_TEMPLATE_VIS priority_queue; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_QUEUE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/sstream.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/sstream.h deleted file mode 100644 index 32ae42c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/sstream.h +++ /dev/null @@ -1,58 +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___CXX03___FWD_SSTREAM_H -#define _LIBCPP___CXX03___FWD_SSTREAM_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/memory.h> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template , class _Allocator = allocator<_CharT> > -class _LIBCPP_TEMPLATE_VIS basic_stringbuf; - -template , class _Allocator = allocator<_CharT> > -class _LIBCPP_TEMPLATE_VIS basic_istringstream; -template , class _Allocator = allocator<_CharT> > -class _LIBCPP_TEMPLATE_VIS basic_ostringstream; -template , class _Allocator = allocator<_CharT> > -class _LIBCPP_TEMPLATE_VIS basic_stringstream; - -using stringbuf = basic_stringbuf; -using istringstream = basic_istringstream; -using ostringstream = basic_ostringstream; -using stringstream = basic_stringstream; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wstringbuf = basic_stringbuf; -using wistringstream = basic_istringstream; -using wostringstream = basic_ostringstream; -using wstringstream = basic_stringstream; -#endif - -template -class _LIBCPP_PREFERRED_NAME(stringbuf) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wstringbuf)) basic_stringbuf; -template -class _LIBCPP_PREFERRED_NAME(istringstream) - _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wistringstream)) basic_istringstream; -template -class _LIBCPP_PREFERRED_NAME(ostringstream) - _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wostringstream)) basic_ostringstream; -template -class _LIBCPP_PREFERRED_NAME(stringstream) - _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wstringstream)) basic_stringstream; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_SSTREAM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/stack.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/stack.h deleted file mode 100644 index 715356e..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/stack.h +++ /dev/null @@ -1,26 +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___CXX03___FWD_STACK_H -#define _LIBCPP___CXX03___FWD_STACK_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/deque.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS stack; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_STACK_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/streambuf.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/streambuf.h deleted file mode 100644 index d22be50..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/streambuf.h +++ /dev/null @@ -1,35 +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___CXX03___FWD_STREAMBUF_H -#define _LIBCPP___CXX03___FWD_STREAMBUF_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS basic_streambuf; - -using streambuf = basic_streambuf; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wstreambuf = basic_streambuf; -#endif - -template -class _LIBCPP_PREFERRED_NAME(streambuf) _LIBCPP_IF_WIDE_CHARACTERS(_LIBCPP_PREFERRED_NAME(wstreambuf)) basic_streambuf; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_STREAMBUF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string.h deleted file mode 100644 index c0da201..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string.h +++ /dev/null @@ -1,73 +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___CXX03___FWD_STRING_H -#define _LIBCPP___CXX03___FWD_STRING_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/memory.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS char_traits; -template <> -struct char_traits; - -#ifndef _LIBCPP_HAS_NO_CHAR8_T -template <> -struct char_traits; -#endif - -template <> -struct char_traits; -template <> -struct char_traits; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -struct char_traits; -#endif - -template , class _Allocator = allocator<_CharT> > -class _LIBCPP_TEMPLATE_VIS basic_string; - -using string = basic_string; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -using wstring = basic_string; -#endif - -#ifndef _LIBCPP_HAS_NO_CHAR8_T -using u8string = basic_string; -#endif - -using u16string = basic_string; -using u32string = basic_string; - -// clang-format off -template -class _LIBCPP_PREFERRED_NAME(string) -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS - _LIBCPP_PREFERRED_NAME(wstring) -#endif -#ifndef _LIBCPP_HAS_NO_CHAR8_T - _LIBCPP_PREFERRED_NAME(u8string) -#endif - _LIBCPP_PREFERRED_NAME(u16string) - _LIBCPP_PREFERRED_NAME(u32string) - basic_string; -// clang-format on - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_STRING_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string_view.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string_view.h deleted file mode 100644 index 76c608b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/string_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___CXX03___FWD_STRING_VIEW_H -#define _LIBCPP___CXX03___FWD_STRING_VIEW_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/string.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS basic_string_view; - -typedef basic_string_view string_view; -#ifndef _LIBCPP_HAS_NO_CHAR8_T -typedef basic_string_view u8string_view; -#endif -typedef basic_string_view u16string_view; -typedef basic_string_view u32string_view; -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -typedef basic_string_view wstring_view; -#endif - -// clang-format off -template -class _LIBCPP_PREFERRED_NAME(string_view) -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS - _LIBCPP_PREFERRED_NAME(wstring_view) -#endif -#ifndef _LIBCPP_HAS_NO_CHAR8_T - _LIBCPP_PREFERRED_NAME(u8string_view) -#endif - _LIBCPP_PREFERRED_NAME(u16string_view) - _LIBCPP_PREFERRED_NAME(u32string_view) - basic_string_view; -// clang-format on -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_STRING_VIEW_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/tuple.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/tuple.h deleted file mode 100644 index 55b46ee..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/tuple.h +++ /dev/null @@ -1,26 +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___CXX03___FWD_TUPLE_H -#define _LIBCPP___CXX03___FWD_TUPLE_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS tuple_element; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_TUPLE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/vector.h b/third_party/libcxx/include/c++/v1/__cxx03/__fwd/vector.h deleted file mode 100644 index 4133173..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__fwd/vector.h +++ /dev/null @@ -1,26 +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___CXX03___FWD_VECTOR_H -#define _LIBCPP___CXX03___FWD_VECTOR_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/memory.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template > -class _LIBCPP_TEMPLATE_VIS vector; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FWD_VECTOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__hash_table b/third_party/libcxx/include/c++/v1/__cxx03/__hash_table deleted file mode 100644 index 30c0fbf..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__hash_table +++ /dev/null @@ -1,1842 +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___CXX03___HASH_TABLE -#define _LIBCPP___CXX03___HASH_TABLE - -#include <__cxx03/__algorithm/max.h> -#include <__cxx03/__algorithm/min.h> -#include <__cxx03/__assert> -#include <__cxx03/__bit/countl.h> -#include <__cxx03/__config> -#include <__cxx03/__functional/hash.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__memory/allocator_traits.h> -#include <__cxx03/__memory/compressed_pair.h> -#include <__cxx03/__memory/construct_at.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__memory/swap_allocator.h> -#include <__cxx03/__memory/unique_ptr.h> -#include <__cxx03/__type_traits/can_extract_key.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/is_const.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_nothrow_assignable.h> -#include <__cxx03/__type_traits/is_nothrow_constructible.h> -#include <__cxx03/__type_traits/is_pointer.h> -#include <__cxx03/__type_traits/is_reference.h> -#include <__cxx03/__type_traits/is_swappable.h> -#include <__cxx03/__type_traits/remove_const.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/__utility/swap.h> -#include <__cxx03/cmath> -#include <__cxx03/cstring> -#include <__cxx03/new> // __launder - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __hash_value_type; - -template -struct __is_hash_value_type_imp : false_type {}; - -template -struct __is_hash_value_type_imp<__hash_value_type<_Key, _Value> > : true_type {}; - -template -struct __is_hash_value_type : false_type {}; - -template -struct __is_hash_value_type<_One> : __is_hash_value_type_imp<__remove_cvref_t<_One> > {}; - -_LIBCPP_EXPORTED_FROM_ABI size_t __next_prime(size_t __n); - -template -struct __hash_node_base { - typedef typename pointer_traits<_NodePtr>::element_type __node_type; - typedef __hash_node_base __first_node; - typedef __rebind_pointer_t<_NodePtr, __first_node> __node_base_pointer; - typedef _NodePtr __node_pointer; - -#if defined(_LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB) - typedef __node_base_pointer __next_pointer; -#else - typedef __conditional_t::value, __node_base_pointer, __node_pointer> __next_pointer; -#endif - - __next_pointer __next_; - - _LIBCPP_HIDE_FROM_ABI __next_pointer __ptr() _NOEXCEPT { - return static_cast<__next_pointer>(pointer_traits<__node_base_pointer>::pointer_to(*this)); - } - - _LIBCPP_HIDE_FROM_ABI __node_pointer __upcast() _NOEXCEPT { - return static_cast<__node_pointer>(pointer_traits<__node_base_pointer>::pointer_to(*this)); - } - - _LIBCPP_HIDE_FROM_ABI size_t __hash() const _NOEXCEPT { return static_cast<__node_type const&>(*this).__hash_; } - - _LIBCPP_HIDE_FROM_ABI __hash_node_base() _NOEXCEPT : __next_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI explicit __hash_node_base(__next_pointer __next) _NOEXCEPT : __next_(__next) {} -}; - -template -struct __hash_node : public __hash_node_base< __rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > > { - typedef _Tp __node_value_type; - using _Base = __hash_node_base<__rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > >; - using __next_pointer = typename _Base::__next_pointer; - - size_t __hash_; - - // We allow starting the lifetime of nodes without initializing the value held by the node, - // since that is handled by the hash table itself in order to be allocator-aware. - -private: - _ALIGNAS_TYPE(_Tp) char __buffer_[sizeof(_Tp)]; - -public: - _LIBCPP_HIDE_FROM_ABI _Tp& __get_value() { return *std::__launder(reinterpret_cast<_Tp*>(&__buffer_)); } - - _LIBCPP_HIDE_FROM_ABI explicit __hash_node(__next_pointer __next, size_t __hash) : _Base(__next), __hash_(__hash) {} - _LIBCPP_HIDE_FROM_ABI ~__hash_node() {} -}; - -inline _LIBCPP_HIDE_FROM_ABI bool __is_hash_power2(size_t __bc) { return __bc > 2 && !(__bc & (__bc - 1)); } - -inline _LIBCPP_HIDE_FROM_ABI size_t __constrain_hash(size_t __h, size_t __bc) { - return !(__bc & (__bc - 1)) ? __h & (__bc - 1) : (__h < __bc ? __h : __h % __bc); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __next_hash_pow2(size_t __n) { - return __n < 2 ? __n : (size_t(1) << (numeric_limits::digits - __libcpp_clz(__n - 1))); -} - -template -class __hash_table; - -template -class _LIBCPP_TEMPLATE_VIS __hash_iterator; -template -class _LIBCPP_TEMPLATE_VIS __hash_const_iterator; -template -class _LIBCPP_TEMPLATE_VIS __hash_local_iterator; -template -class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator; -template -class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; -template -class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; - -template -struct __hash_key_value_types { - static_assert(!is_reference<_Tp>::value && !is_const<_Tp>::value, ""); - typedef _Tp key_type; - typedef _Tp __node_value_type; - typedef _Tp __container_value_type; - static const bool __is_map = false; - - _LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(_Tp const& __v) { return __v; } - _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(__node_value_type const& __v) { return __v; } - _LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__node_value_type& __n) { return std::addressof(__n); } - _LIBCPP_HIDE_FROM_ABI static __container_value_type&& __move(__node_value_type& __v) { return std::move(__v); } -}; - -template -struct __hash_key_value_types<__hash_value_type<_Key, _Tp> > { - typedef _Key key_type; - typedef _Tp mapped_type; - typedef __hash_value_type<_Key, _Tp> __node_value_type; - typedef pair __container_value_type; - typedef __container_value_type __map_value_type; - static const bool __is_map = true; - - _LIBCPP_HIDE_FROM_ABI static key_type const& __get_key(__container_value_type const& __v) { return __v.first; } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) { - return __t.__get_value(); - } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI static __container_value_type const& __get_value(_Up& __t) { - return __t; - } - - _LIBCPP_HIDE_FROM_ABI static __container_value_type* __get_ptr(__node_value_type& __n) { - return std::addressof(__n.__get_value()); - } - _LIBCPP_HIDE_FROM_ABI static pair __move(__node_value_type& __v) { return __v.__move(); } -}; - -template , bool = _KVTypes::__is_map> -struct __hash_map_pointer_types {}; - -template -struct __hash_map_pointer_types<_Tp, _AllocPtr, _KVTypes, true> { - typedef typename _KVTypes::__map_value_type _Mv; - typedef __rebind_pointer_t<_AllocPtr, _Mv> __map_value_type_pointer; - typedef __rebind_pointer_t<_AllocPtr, const _Mv> __const_map_value_type_pointer; -}; - -template ::element_type> -struct __hash_node_types; - -template -struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> > - : public __hash_key_value_types<_Tp>, - __hash_map_pointer_types<_Tp, _VoidPtr> - -{ - typedef __hash_key_value_types<_Tp> __base; - -public: - typedef ptrdiff_t difference_type; - typedef size_t size_type; - - typedef __rebind_pointer_t<_NodePtr, void> __void_pointer; - - typedef typename pointer_traits<_NodePtr>::element_type __node_type; - typedef _NodePtr __node_pointer; - - typedef __hash_node_base<__node_pointer> __node_base_type; - typedef __rebind_pointer_t<_NodePtr, __node_base_type> __node_base_pointer; - - typedef typename __node_base_type::__next_pointer __next_pointer; - - typedef _Tp __node_value_type; - typedef __rebind_pointer_t<_VoidPtr, __node_value_type> __node_value_type_pointer; - typedef __rebind_pointer_t<_VoidPtr, const __node_value_type> __const_node_value_type_pointer; - -private: - static_assert(!is_const<__node_type>::value, "_NodePtr should never be a pointer to const"); - static_assert(is_same::element_type, void>::value, - "_VoidPtr does not point to unqualified void type"); - static_assert(is_same<__rebind_pointer_t<_VoidPtr, __node_type>, _NodePtr>::value, - "_VoidPtr does not rebind to _NodePtr."); -}; - -template -struct __hash_node_types_from_iterator; -template -struct __hash_node_types_from_iterator<__hash_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {}; -template -struct __hash_node_types_from_iterator<__hash_const_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {}; -template -struct __hash_node_types_from_iterator<__hash_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {}; -template -struct __hash_node_types_from_iterator<__hash_const_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {}; - -template -struct __make_hash_node_types { - typedef __hash_node<_NodeValueTp, _VoidPtr> _NodeTp; - typedef __rebind_pointer_t<_VoidPtr, _NodeTp> _NodePtr; - typedef __hash_node_types<_NodePtr> type; -}; - -template -class _LIBCPP_TEMPLATE_VIS __hash_iterator { - typedef __hash_node_types<_NodePtr> _NodeTypes; - typedef _NodePtr __node_pointer; - typedef typename _NodeTypes::__next_pointer __next_pointer; - - __next_pointer __node_; - -public: - typedef forward_iterator_tag iterator_category; - typedef typename _NodeTypes::__node_value_type value_type; - typedef typename _NodeTypes::difference_type difference_type; - typedef value_type& reference; - typedef typename _NodeTypes::__node_value_type_pointer pointer; - - _LIBCPP_HIDE_FROM_ABI __hash_iterator() _NOEXCEPT : __node_(nullptr) {} - - _LIBCPP_HIDE_FROM_ABI reference operator*() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container iterator"); - return __node_->__upcast()->__get_value(); - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container iterator"); - return pointer_traits::pointer_to(__node_->__upcast()->__get_value()); - } - - _LIBCPP_HIDE_FROM_ABI __hash_iterator& operator++() { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to increment a non-incrementable unordered container iterator"); - __node_ = __node_->__next_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __hash_iterator operator++(int) { - __hash_iterator __t(*this); - ++(*this); - return __t; - } - - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __hash_iterator& __x, const __hash_iterator& __y) { - return __x.__node_ == __y.__node_; - } - friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __hash_iterator& __x, const __hash_iterator& __y) { - return !(__x == __y); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __hash_iterator(__next_pointer __node) _NOEXCEPT : __node_(__node) {} - - template - friend class __hash_table; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_const_iterator; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; - template - friend class _LIBCPP_TEMPLATE_VIS unordered_map; - template - friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; -}; - -template -class _LIBCPP_TEMPLATE_VIS __hash_const_iterator { - static_assert(!is_const::element_type>::value, ""); - typedef __hash_node_types<_NodePtr> _NodeTypes; - typedef _NodePtr __node_pointer; - typedef typename _NodeTypes::__next_pointer __next_pointer; - - __next_pointer __node_; - -public: - typedef __hash_iterator<_NodePtr> __non_const_iterator; - - typedef forward_iterator_tag iterator_category; - typedef typename _NodeTypes::__node_value_type value_type; - typedef typename _NodeTypes::difference_type difference_type; - typedef const value_type& reference; - typedef typename _NodeTypes::__const_node_value_type_pointer pointer; - - _LIBCPP_HIDE_FROM_ABI __hash_const_iterator() _NOEXCEPT : __node_(nullptr) {} - - _LIBCPP_HIDE_FROM_ABI __hash_const_iterator(const __non_const_iterator& __x) _NOEXCEPT : __node_(__x.__node_) {} - - _LIBCPP_HIDE_FROM_ABI reference operator*() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); - return __node_->__upcast()->__get_value(); - } - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_iterator"); - return pointer_traits::pointer_to(__node_->__upcast()->__get_value()); - } - - _LIBCPP_HIDE_FROM_ABI __hash_const_iterator& operator++() { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to increment a non-incrementable unordered container const_iterator"); - __node_ = __node_->__next_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __hash_const_iterator operator++(int) { - __hash_const_iterator __t(*this); - ++(*this); - return __t; - } - - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __hash_const_iterator& __x, const __hash_const_iterator& __y) { - return __x.__node_ == __y.__node_; - } - friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __hash_const_iterator& __x, const __hash_const_iterator& __y) { - return !(__x == __y); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __hash_const_iterator(__next_pointer __node) _NOEXCEPT : __node_(__node) {} - - template - friend class __hash_table; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; - template - friend class _LIBCPP_TEMPLATE_VIS unordered_map; - template - friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; -}; - -template -class _LIBCPP_TEMPLATE_VIS __hash_local_iterator { - typedef __hash_node_types<_NodePtr> _NodeTypes; - typedef _NodePtr __node_pointer; - typedef typename _NodeTypes::__next_pointer __next_pointer; - - __next_pointer __node_; - size_t __bucket_; - size_t __bucket_count_; - -public: - typedef forward_iterator_tag iterator_category; - typedef typename _NodeTypes::__node_value_type value_type; - typedef typename _NodeTypes::difference_type difference_type; - typedef value_type& reference; - typedef typename _NodeTypes::__node_value_type_pointer pointer; - - _LIBCPP_HIDE_FROM_ABI __hash_local_iterator() _NOEXCEPT : __node_(nullptr) {} - - _LIBCPP_HIDE_FROM_ABI reference operator*() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); - return __node_->__upcast()->__get_value(); - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container local_iterator"); - return pointer_traits::pointer_to(__node_->__upcast()->__get_value()); - } - - _LIBCPP_HIDE_FROM_ABI __hash_local_iterator& operator++() { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to increment a non-incrementable unordered container local_iterator"); - __node_ = __node_->__next_; - if (__node_ != nullptr && std::__constrain_hash(__node_->__hash(), __bucket_count_) != __bucket_) - __node_ = nullptr; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __hash_local_iterator operator++(int) { - __hash_local_iterator __t(*this); - ++(*this); - return __t; - } - - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const __hash_local_iterator& __x, const __hash_local_iterator& __y) { - return __x.__node_ == __y.__node_; - } - friend _LIBCPP_HIDE_FROM_ABI bool operator!=(const __hash_local_iterator& __x, const __hash_local_iterator& __y) { - return !(__x == __y); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __hash_local_iterator( - __next_pointer __node, size_t __bucket, size_t __bucket_count) _NOEXCEPT - : __node_(__node), - __bucket_(__bucket), - __bucket_count_(__bucket_count) { - if (__node_ != nullptr) - __node_ = __node_->__next_; - } - - template - friend class __hash_table; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_map_iterator; -}; - -template -class _LIBCPP_TEMPLATE_VIS __hash_const_local_iterator { - typedef __hash_node_types<_ConstNodePtr> _NodeTypes; - typedef _ConstNodePtr __node_pointer; - typedef typename _NodeTypes::__next_pointer __next_pointer; - - __next_pointer __node_; - size_t __bucket_; - size_t __bucket_count_; - - typedef pointer_traits<__node_pointer> __pointer_traits; - typedef typename __pointer_traits::element_type __node; - typedef __remove_const_t<__node> __non_const_node; - typedef __rebind_pointer_t<__node_pointer, __non_const_node> __non_const_node_pointer; - -public: - typedef __hash_local_iterator<__non_const_node_pointer> __non_const_iterator; - - typedef forward_iterator_tag iterator_category; - typedef typename _NodeTypes::__node_value_type value_type; - typedef typename _NodeTypes::difference_type difference_type; - typedef const value_type& reference; - typedef typename _NodeTypes::__const_node_value_type_pointer pointer; - - _LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator() _NOEXCEPT : __node_(nullptr) {} - - _LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator(const __non_const_iterator& __x) _NOEXCEPT - : __node_(__x.__node_), - __bucket_(__x.__bucket_), - __bucket_count_(__x.__bucket_count_) {} - - _LIBCPP_HIDE_FROM_ABI reference operator*() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); - return __node_->__upcast()->__get_value(); - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator"); - return pointer_traits::pointer_to(__node_->__upcast()->__get_value()); - } - - _LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator& operator++() { - _LIBCPP_ASSERT_NON_NULL( - __node_ != nullptr, "Attempted to increment a non-incrementable unordered container const_local_iterator"); - __node_ = __node_->__next_; - if (__node_ != nullptr && std::__constrain_hash(__node_->__hash(), __bucket_count_) != __bucket_) - __node_ = nullptr; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator operator++(int) { - __hash_const_local_iterator __t(*this); - ++(*this); - return __t; - } - - friend _LIBCPP_HIDE_FROM_ABI bool - operator==(const __hash_const_local_iterator& __x, const __hash_const_local_iterator& __y) { - return __x.__node_ == __y.__node_; - } - friend _LIBCPP_HIDE_FROM_ABI bool - operator!=(const __hash_const_local_iterator& __x, const __hash_const_local_iterator& __y) { - return !(__x == __y); - } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __hash_const_local_iterator( - __next_pointer __node_ptr, size_t __bucket, size_t __bucket_count) _NOEXCEPT - : __node_(__node_ptr), - __bucket_(__bucket), - __bucket_count_(__bucket_count) { - if (__node_ != nullptr) - __node_ = __node_->__next_; - } - - template - friend class __hash_table; - template - friend class _LIBCPP_TEMPLATE_VIS __hash_map_const_iterator; -}; - -template -class __bucket_list_deallocator { - typedef _Alloc allocator_type; - typedef allocator_traits __alloc_traits; - typedef typename __alloc_traits::size_type size_type; - - __compressed_pair __data_; - -public: - typedef typename __alloc_traits::pointer pointer; - - _LIBCPP_HIDE_FROM_ABI __bucket_list_deallocator() : __data_(0, __default_init_tag()) {} - - _LIBCPP_HIDE_FROM_ABI __bucket_list_deallocator(const allocator_type& __a, size_type __size) : __data_(__size, __a) {} - - _LIBCPP_HIDE_FROM_ABI __bucket_list_deallocator(__bucket_list_deallocator&& __x) : __data_(std::move(__x.__data_)) { - __x.size() = 0; - } - - _LIBCPP_HIDE_FROM_ABI size_type& size() _NOEXCEPT { return __data_.first(); } - _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __data_.first(); } - - _LIBCPP_HIDE_FROM_ABI allocator_type& __alloc() _NOEXCEPT { return __data_.second(); } - _LIBCPP_HIDE_FROM_ABI const allocator_type& __alloc() const _NOEXCEPT { return __data_.second(); } - - _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT { __alloc_traits::deallocate(__alloc(), __p, size()); } -}; - -template -class __hash_map_node_destructor; - -template -class __hash_node_destructor { - typedef _Alloc allocator_type; - typedef allocator_traits __alloc_traits; - -public: - typedef typename __alloc_traits::pointer pointer; - -private: - typedef __hash_node_types _NodeTypes; - - allocator_type& __na_; - -public: - bool __value_constructed; - - _LIBCPP_HIDE_FROM_ABI __hash_node_destructor(__hash_node_destructor const&) = default; - _LIBCPP_HIDE_FROM_ABI __hash_node_destructor& operator=(const __hash_node_destructor&) = delete; - - _LIBCPP_HIDE_FROM_ABI explicit __hash_node_destructor(allocator_type& __na, bool __constructed = false) _NOEXCEPT - : __na_(__na), - __value_constructed(__constructed) {} - - _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT { - if (__value_constructed) { - __alloc_traits::destroy(__na_, _NodeTypes::__get_ptr(__p->__get_value())); - std::__destroy_at(std::addressof(*__p)); - } - if (__p) - __alloc_traits::deallocate(__na_, __p, 1); - } - - template - friend class __hash_map_node_destructor; -}; - -template -struct __enforce_unordered_container_requirements { - typedef int type; -}; - -template -typename __enforce_unordered_container_requirements<_Key, _Hash, _Equal>::type -__diagnose_unordered_container_requirements(int); - -// This dummy overload is used so that the compiler won't emit a spurious -// "no matching function for call to __diagnose_unordered_xxx" diagnostic -// when the overload above causes a hard error. -template -int __diagnose_unordered_container_requirements(void*); - -template -class __hash_table { -public: - typedef _Tp value_type; - typedef _Hash hasher; - typedef _Equal key_equal; - typedef _Alloc allocator_type; - -private: - typedef allocator_traits __alloc_traits; - typedef typename __make_hash_node_types::type _NodeTypes; - -public: - typedef typename _NodeTypes::__node_value_type __node_value_type; - typedef typename _NodeTypes::__container_value_type __container_value_type; - typedef typename _NodeTypes::key_type key_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef typename __alloc_traits::pointer pointer; - typedef typename __alloc_traits::const_pointer const_pointer; -#ifndef _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE - typedef typename __alloc_traits::size_type size_type; -#else - typedef typename _NodeTypes::size_type size_type; -#endif - typedef typename _NodeTypes::difference_type difference_type; - -public: - // Create __node - - typedef typename _NodeTypes::__node_type __node; - typedef __rebind_alloc<__alloc_traits, __node> __node_allocator; - typedef allocator_traits<__node_allocator> __node_traits; - typedef typename _NodeTypes::__void_pointer __void_pointer; - typedef typename _NodeTypes::__node_pointer __node_pointer; - typedef typename _NodeTypes::__node_pointer __node_const_pointer; - typedef typename _NodeTypes::__node_base_type __first_node; - typedef typename _NodeTypes::__node_base_pointer __node_base_pointer; - typedef typename _NodeTypes::__next_pointer __next_pointer; - -private: - // check for sane allocator pointer rebinding semantics. Rebinding the - // allocator for a new pointer type should be exactly the same as rebinding - // the pointer using 'pointer_traits'. - static_assert(is_same<__node_pointer, typename __node_traits::pointer>::value, - "Allocator does not rebind pointers in a sane manner."); - typedef __rebind_alloc<__node_traits, __first_node> __node_base_allocator; - typedef allocator_traits<__node_base_allocator> __node_base_traits; - static_assert(is_same<__node_base_pointer, typename __node_base_traits::pointer>::value, - "Allocator does not rebind pointers in a sane manner."); - -private: - typedef __rebind_alloc<__node_traits, __next_pointer> __pointer_allocator; - typedef __bucket_list_deallocator<__pointer_allocator> __bucket_list_deleter; - typedef unique_ptr<__next_pointer[], __bucket_list_deleter> __bucket_list; - typedef allocator_traits<__pointer_allocator> __pointer_alloc_traits; - typedef typename __bucket_list_deleter::pointer __node_pointer_pointer; - - // --- Member data begin --- - __bucket_list __bucket_list_; - __compressed_pair<__first_node, __node_allocator> __p1_; - __compressed_pair __p2_; - __compressed_pair __p3_; - // --- Member data end --- - - _LIBCPP_HIDE_FROM_ABI size_type& size() _NOEXCEPT { return __p2_.first(); } - -public: - _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __p2_.first(); } - - _LIBCPP_HIDE_FROM_ABI hasher& hash_function() _NOEXCEPT { return __p2_.second(); } - _LIBCPP_HIDE_FROM_ABI const hasher& hash_function() const _NOEXCEPT { return __p2_.second(); } - - _LIBCPP_HIDE_FROM_ABI float& max_load_factor() _NOEXCEPT { return __p3_.first(); } - _LIBCPP_HIDE_FROM_ABI float max_load_factor() const _NOEXCEPT { return __p3_.first(); } - - _LIBCPP_HIDE_FROM_ABI key_equal& key_eq() _NOEXCEPT { return __p3_.second(); } - _LIBCPP_HIDE_FROM_ABI const key_equal& key_eq() const _NOEXCEPT { return __p3_.second(); } - - _LIBCPP_HIDE_FROM_ABI __node_allocator& __node_alloc() _NOEXCEPT { return __p1_.second(); } - _LIBCPP_HIDE_FROM_ABI const __node_allocator& __node_alloc() const _NOEXCEPT { return __p1_.second(); } - -public: - typedef __hash_iterator<__node_pointer> iterator; - typedef __hash_const_iterator<__node_pointer> const_iterator; - typedef __hash_local_iterator<__node_pointer> local_iterator; - typedef __hash_const_local_iterator<__node_pointer> const_local_iterator; - - _LIBCPP_HIDE_FROM_ABI __hash_table(); - _LIBCPP_HIDE_FROM_ABI __hash_table(const hasher& __hf, const key_equal& __eql); - _LIBCPP_HIDE_FROM_ABI __hash_table(const hasher& __hf, const key_equal& __eql, const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI explicit __hash_table(const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI __hash_table(const __hash_table& __u); - _LIBCPP_HIDE_FROM_ABI __hash_table(const __hash_table& __u, const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI __hash_table(__hash_table&& __u); - _LIBCPP_HIDE_FROM_ABI __hash_table(__hash_table&& __u, const allocator_type& __a); - _LIBCPP_HIDE_FROM_ABI ~__hash_table(); - - _LIBCPP_HIDE_FROM_ABI __hash_table& operator=(const __hash_table& __u); - _LIBCPP_HIDE_FROM_ABI __hash_table& operator=(__hash_table&& __u); - template - _LIBCPP_HIDE_FROM_ABI void __assign_unique(_InputIterator __first, _InputIterator __last); - template - _LIBCPP_HIDE_FROM_ABI void __assign_multi(_InputIterator __first, _InputIterator __last); - - _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { - return std::min(__node_traits::max_size(__node_alloc()), numeric_limits::max()); - } - -private: - _LIBCPP_HIDE_FROM_ABI __next_pointer __node_insert_multi_prepare(size_t __cp_hash, value_type& __cp_val); - _LIBCPP_HIDE_FROM_ABI void __node_insert_multi_perform(__node_pointer __cp, __next_pointer __pn) _NOEXCEPT; - - _LIBCPP_HIDE_FROM_ABI __next_pointer __node_insert_unique_prepare(size_t __nd_hash, value_type& __nd_val); - _LIBCPP_HIDE_FROM_ABI void __node_insert_unique_perform(__node_pointer __ptr) _NOEXCEPT; - -public: - _LIBCPP_HIDE_FROM_ABI pair __node_insert_unique(__node_pointer __nd); - _LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(__node_pointer __nd); - _LIBCPP_HIDE_FROM_ABI iterator __node_insert_multi(const_iterator __p, __node_pointer __nd); - - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique_key_args(_Key const& __k, _Args&&... __args); - - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique_impl(_Args&&... __args); - - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique(_Pp&& __x) { - return __emplace_unique_extract_key(std::forward<_Pp>(__x), __can_extract_key<_Pp, key_type>()); - } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique(_First&& __f, _Second&& __s) { - return __emplace_unique_key_args(__f, std::forward<_First>(__f), std::forward<_Second>(__s)); - } - - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique(_Args&&... __args) { - return __emplace_unique_impl(std::forward<_Args>(__args)...); - } - - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique_extract_key(_Pp&& __x, __extract_key_fail_tag) { - return __emplace_unique_impl(std::forward<_Pp>(__x)); - } - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique_extract_key(_Pp&& __x, __extract_key_self_tag) { - return __emplace_unique_key_args(__x, std::forward<_Pp>(__x)); - } - template - _LIBCPP_HIDE_FROM_ABI pair __emplace_unique_extract_key(_Pp&& __x, __extract_key_first_tag) { - return __emplace_unique_key_args(__x.first, std::forward<_Pp>(__x)); - } - - template - _LIBCPP_HIDE_FROM_ABI iterator __emplace_multi(_Args&&... __args); - template - _LIBCPP_HIDE_FROM_ABI iterator __emplace_hint_multi(const_iterator __p, _Args&&... __args); - - _LIBCPP_HIDE_FROM_ABI pair __insert_unique(__container_value_type&& __x) { - return __emplace_unique_key_args(_NodeTypes::__get_key(__x), std::move(__x)); - } - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI pair __insert_unique(_Pp&& __x) { - return __emplace_unique(std::forward<_Pp>(__x)); - } - - template - _LIBCPP_HIDE_FROM_ABI iterator __insert_multi(_Pp&& __x) { - return __emplace_multi(std::forward<_Pp>(__x)); - } - - template - _LIBCPP_HIDE_FROM_ABI iterator __insert_multi(const_iterator __p, _Pp&& __x) { - return __emplace_hint_multi(__p, std::forward<_Pp>(__x)); - } - - _LIBCPP_HIDE_FROM_ABI pair __insert_unique(const __container_value_type& __x) { - return __emplace_unique_key_args(_NodeTypes::__get_key(__x), __x); - } - - _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI void __rehash_unique(size_type __n) { __rehash(__n); } - _LIBCPP_HIDE_FROM_ABI void __rehash_multi(size_type __n) { __rehash(__n); } - _LIBCPP_HIDE_FROM_ABI void __reserve_unique(size_type __n) { - __rehash_unique(static_cast(std::ceil(__n / max_load_factor()))); - } - _LIBCPP_HIDE_FROM_ABI void __reserve_multi(size_type __n) { - __rehash_multi(static_cast(std::ceil(__n / max_load_factor()))); - } - - _LIBCPP_HIDE_FROM_ABI size_type bucket_count() const _NOEXCEPT { return __bucket_list_.get_deleter().size(); } - - _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT; - - template - _LIBCPP_HIDE_FROM_ABI size_type bucket(const _Key& __k) const { - _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( - bucket_count() > 0, "unordered container::bucket(key) called when bucket_count() == 0"); - return std::__constrain_hash(hash_function()(__k), bucket_count()); - } - - template - _LIBCPP_HIDE_FROM_ABI iterator find(const _Key& __x); - template - _LIBCPP_HIDE_FROM_ABI const_iterator find(const _Key& __x) const; - - typedef __hash_node_destructor<__node_allocator> _Dp; - typedef unique_ptr<__node, _Dp> __node_holder; - - _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p); - _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last); - template - _LIBCPP_HIDE_FROM_ABI size_type __erase_unique(const _Key& __k); - template - _LIBCPP_HIDE_FROM_ABI size_type __erase_multi(const _Key& __k); - _LIBCPP_HIDE_FROM_ABI __node_holder remove(const_iterator __p) _NOEXCEPT; - - template - _LIBCPP_HIDE_FROM_ABI size_type __count_unique(const _Key& __k) const; - template - _LIBCPP_HIDE_FROM_ABI size_type __count_multi(const _Key& __k) const; - - template - _LIBCPP_HIDE_FROM_ABI pair __equal_range_unique(const _Key& __k); - template - _LIBCPP_HIDE_FROM_ABI pair __equal_range_unique(const _Key& __k) const; - - template - _LIBCPP_HIDE_FROM_ABI pair __equal_range_multi(const _Key& __k); - template - _LIBCPP_HIDE_FROM_ABI pair __equal_range_multi(const _Key& __k) const; - - _LIBCPP_HIDE_FROM_ABI void swap(__hash_table& __u); - - _LIBCPP_HIDE_FROM_ABI size_type max_bucket_count() const _NOEXCEPT { return max_size(); } - _LIBCPP_HIDE_FROM_ABI size_type bucket_size(size_type __n) const; - _LIBCPP_HIDE_FROM_ABI float load_factor() const _NOEXCEPT { - size_type __bc = bucket_count(); - return __bc != 0 ? (float)size() / __bc : 0.f; - } - _LIBCPP_HIDE_FROM_ABI void max_load_factor(float __mlf) _NOEXCEPT { - // While passing a non-positive load factor is undefined behavior, in practice the result will be benign (the - // call will be equivalent to `max_load_factor(load_factor())`, which is also the case for passing a valid value - // less than the current `load_factor`). - _LIBCPP_ASSERT_PEDANTIC(__mlf > 0, "unordered container::max_load_factor(lf) called with lf <= 0"); - max_load_factor() = std::max(__mlf, load_factor()); - } - - _LIBCPP_HIDE_FROM_ABI local_iterator begin(size_type __n) { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < bucket_count(), "unordered container::begin(n) called with n >= bucket_count()"); - return local_iterator(__bucket_list_[__n], __n, bucket_count()); - } - - _LIBCPP_HIDE_FROM_ABI local_iterator end(size_type __n) { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < bucket_count(), "unordered container::end(n) called with n >= bucket_count()"); - return local_iterator(nullptr, __n, bucket_count()); - } - - _LIBCPP_HIDE_FROM_ABI const_local_iterator cbegin(size_type __n) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < bucket_count(), "unordered container::cbegin(n) called with n >= bucket_count()"); - return const_local_iterator(__bucket_list_[__n], __n, bucket_count()); - } - - _LIBCPP_HIDE_FROM_ABI const_local_iterator cend(size_type __n) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < bucket_count(), "unordered container::cend(n) called with n >= bucket_count()"); - return const_local_iterator(nullptr, __n, bucket_count()); - } - -private: - template - _LIBCPP_HIDE_FROM_ABI void __rehash(size_type __n); - template - _LIBCPP_HIDE_FROM_ABI void __do_rehash(size_type __n); - - template - _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node(_Args&&... __args); - - template - _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_hash(size_t __hash, _First&& __f, _Rest&&... __rest); - - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __hash_table& __u) { - __copy_assign_alloc(__u, integral_constant()); - } - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __hash_table& __u, true_type); - _LIBCPP_HIDE_FROM_ABI void __copy_assign_alloc(const __hash_table&, false_type) {} - - _LIBCPP_HIDE_FROM_ABI void __move_assign(__hash_table& __u, false_type); - _LIBCPP_HIDE_FROM_ABI void __move_assign(__hash_table& __u, true_type); - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__hash_table& __u) { - __move_assign_alloc(__u, integral_constant()); - } - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__hash_table& __u, true_type) { - __bucket_list_.get_deleter().__alloc() = std::move(__u.__bucket_list_.get_deleter().__alloc()); - __node_alloc() = std::move(__u.__node_alloc()); - } - _LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__hash_table&, false_type) _NOEXCEPT {} - - _LIBCPP_HIDE_FROM_ABI void __deallocate_node(__next_pointer __np) _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI __next_pointer __detach() _NOEXCEPT; - - template - friend class _LIBCPP_TEMPLATE_VIS unordered_map; - template - friend class _LIBCPP_TEMPLATE_VIS unordered_multimap; -}; - -template -inline __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table() - : __p2_(0, __default_init_tag()), __p3_(1.0f, __default_init_tag()) {} - -template -inline __hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const hasher& __hf, const key_equal& __eql) - : __bucket_list_(nullptr, __bucket_list_deleter()), __p1_(), __p2_(0, __hf), __p3_(1.0f, __eql) {} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table( - const hasher& __hf, const key_equal& __eql, const allocator_type& __a) - : __bucket_list_(nullptr, __bucket_list_deleter(__pointer_allocator(__a), 0)), - __p1_(__default_init_tag(), __node_allocator(__a)), - __p2_(0, __hf), - __p3_(1.0f, __eql) {} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const allocator_type& __a) - : __bucket_list_(nullptr, __bucket_list_deleter(__pointer_allocator(__a), 0)), - __p1_(__default_init_tag(), __node_allocator(__a)), - __p2_(0, __default_init_tag()), - __p3_(1.0f, __default_init_tag()) {} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __u) - : __bucket_list_(nullptr, - __bucket_list_deleter(allocator_traits<__pointer_allocator>::select_on_container_copy_construction( - __u.__bucket_list_.get_deleter().__alloc()), - 0)), - __p1_(__default_init_tag(), - allocator_traits<__node_allocator>::select_on_container_copy_construction(__u.__node_alloc())), - __p2_(0, __u.hash_function()), - __p3_(__u.__p3_) {} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(const __hash_table& __u, const allocator_type& __a) - : __bucket_list_(nullptr, __bucket_list_deleter(__pointer_allocator(__a), 0)), - __p1_(__default_init_tag(), __node_allocator(__a)), - __p2_(0, __u.hash_function()), - __p3_(__u.__p3_) {} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u) - : __bucket_list_(std::move(__u.__bucket_list_)), - __p1_(std::move(__u.__p1_)), - __p2_(std::move(__u.__p2_)), - __p3_(std::move(__u.__p3_)) { - if (size() > 0) { - __bucket_list_[std::__constrain_hash(__p1_.first().__next_->__hash(), bucket_count())] = __p1_.first().__ptr(); - __u.__p1_.first().__next_ = nullptr; - __u.size() = 0; - } -} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__hash_table(__hash_table&& __u, const allocator_type& __a) - : __bucket_list_(nullptr, __bucket_list_deleter(__pointer_allocator(__a), 0)), - __p1_(__default_init_tag(), __node_allocator(__a)), - __p2_(0, std::move(__u.hash_function())), - __p3_(std::move(__u.__p3_)) { - if (__a == allocator_type(__u.__node_alloc())) { - __bucket_list_.reset(__u.__bucket_list_.release()); - __bucket_list_.get_deleter().size() = __u.__bucket_list_.get_deleter().size(); - __u.__bucket_list_.get_deleter().size() = 0; - if (__u.size() > 0) { - __p1_.first().__next_ = __u.__p1_.first().__next_; - __u.__p1_.first().__next_ = nullptr; - __bucket_list_[std::__constrain_hash(__p1_.first().__next_->__hash(), bucket_count())] = __p1_.first().__ptr(); - size() = __u.size(); - __u.size() = 0; - } - } -} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>::~__hash_table() { - static_assert(is_copy_constructible::value, "Predicate must be copy-constructible."); - static_assert(is_copy_constructible::value, "Hasher must be copy-constructible."); - - __deallocate_node(__p1_.first().__next_); -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__copy_assign_alloc(const __hash_table& __u, true_type) { - if (__node_alloc() != __u.__node_alloc()) { - clear(); - __bucket_list_.reset(); - __bucket_list_.get_deleter().size() = 0; - } - __bucket_list_.get_deleter().__alloc() = __u.__bucket_list_.get_deleter().__alloc(); - __node_alloc() = __u.__node_alloc(); -} - -template -__hash_table<_Tp, _Hash, _Equal, _Alloc>& __hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(const __hash_table& __u) { - if (this != std::addressof(__u)) { - __copy_assign_alloc(__u); - hash_function() = __u.hash_function(); - key_eq() = __u.key_eq(); - max_load_factor() = __u.max_load_factor(); - __assign_multi(__u.begin(), __u.end()); - } - return *this; -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__deallocate_node(__next_pointer __np) _NOEXCEPT { - __node_allocator& __na = __node_alloc(); - while (__np != nullptr) { - __next_pointer __next = __np->__next_; - __node_pointer __real_np = __np->__upcast(); - __node_traits::destroy(__na, _NodeTypes::__get_ptr(__real_np->__get_value())); - std::__destroy_at(std::addressof(*__real_np)); - __node_traits::deallocate(__na, __real_np, 1); - __np = __next; - } -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__next_pointer -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__detach() _NOEXCEPT { - size_type __bc = bucket_count(); - for (size_type __i = 0; __i < __bc; ++__i) - __bucket_list_[__i] = nullptr; - size() = 0; - __next_pointer __cache = __p1_.first().__next_; - __p1_.first().__next_ = nullptr; - return __cache; -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(__hash_table& __u, true_type) { - clear(); - __bucket_list_.reset(__u.__bucket_list_.release()); - __bucket_list_.get_deleter().size() = __u.__bucket_list_.get_deleter().size(); - __u.__bucket_list_.get_deleter().size() = 0; - __move_assign_alloc(__u); - size() = __u.size(); - hash_function() = std::move(__u.hash_function()); - max_load_factor() = __u.max_load_factor(); - key_eq() = std::move(__u.key_eq()); - __p1_.first().__next_ = __u.__p1_.first().__next_; - if (size() > 0) { - __bucket_list_[std::__constrain_hash(__p1_.first().__next_->__hash(), bucket_count())] = __p1_.first().__ptr(); - __u.__p1_.first().__next_ = nullptr; - __u.size() = 0; - } -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__move_assign(__hash_table& __u, false_type) { - if (__node_alloc() == __u.__node_alloc()) - __move_assign(__u, true_type()); - else { - hash_function() = std::move(__u.hash_function()); - key_eq() = std::move(__u.key_eq()); - max_load_factor() = __u.max_load_factor(); - if (bucket_count() != 0) { - __next_pointer __cache = __detach(); -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - try { -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - const_iterator __i = __u.begin(); - while (__cache != nullptr && __u.size() != 0) { - __cache->__upcast()->__get_value() = std::move(__u.remove(__i++)->__get_value()); - __next_pointer __next = __cache->__next_; - __node_insert_multi(__cache->__upcast()); - __cache = __next; - } -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - } catch (...) { - __deallocate_node(__cache); - throw; - } -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - __deallocate_node(__cache); - } - const_iterator __i = __u.begin(); - while (__u.size() != 0) { - __node_holder __h = __construct_node(_NodeTypes::__move(__u.remove(__i++)->__get_value())); - __node_insert_multi(__h.get()); - __h.release(); - } - } -} - -template -inline __hash_table<_Tp, _Hash, _Equal, _Alloc>& -__hash_table<_Tp, _Hash, _Equal, _Alloc>::operator=(__hash_table&& __u) { - __move_assign(__u, integral_constant()); - return *this; -} - -template -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_unique(_InputIterator __first, _InputIterator __last) { - typedef iterator_traits<_InputIterator> _ITraits; - typedef typename _ITraits::value_type _ItValueType; - static_assert(is_same<_ItValueType, __container_value_type>::value, - "__assign_unique may only be called with the containers value type"); - - if (bucket_count() != 0) { - __next_pointer __cache = __detach(); -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - try { -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - for (; __cache != nullptr && __first != __last; ++__first) { - __cache->__upcast()->__get_value() = *__first; - __next_pointer __next = __cache->__next_; - __node_insert_unique(__cache->__upcast()); - __cache = __next; - } -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - } catch (...) { - __deallocate_node(__cache); - throw; - } -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - __deallocate_node(__cache); - } - for (; __first != __last; ++__first) - __insert_unique(*__first); -} - -template -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_multi(_InputIterator __first, _InputIterator __last) { - typedef iterator_traits<_InputIterator> _ITraits; - typedef typename _ITraits::value_type _ItValueType; - static_assert( - (is_same<_ItValueType, __container_value_type>::value || is_same<_ItValueType, __node_value_type>::value), - "__assign_multi may only be called with the containers value type" - " or the nodes value type"); - if (bucket_count() != 0) { - __next_pointer __cache = __detach(); -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - try { -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - for (; __cache != nullptr && __first != __last; ++__first) { - __cache->__upcast()->__get_value() = *__first; - __next_pointer __next = __cache->__next_; - __node_insert_multi(__cache->__upcast()); - __cache = __next; - } -#ifndef _LIBCPP_HAS_NO_EXCEPTIONS - } catch (...) { - __deallocate_node(__cache); - throw; - } -#endif // _LIBCPP_HAS_NO_EXCEPTIONS - __deallocate_node(__cache); - } - for (; __first != __last; ++__first) - __insert_multi(_NodeTypes::__get_value(*__first)); -} - -template -inline typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::begin() _NOEXCEPT { - return iterator(__p1_.first().__next_); -} - -template -inline typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::end() _NOEXCEPT { - return iterator(nullptr); -} - -template -inline typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::const_iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::begin() const _NOEXCEPT { - return const_iterator(__p1_.first().__next_); -} - -template -inline typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::const_iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::end() const _NOEXCEPT { - return const_iterator(nullptr); -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::clear() _NOEXCEPT { - if (size() > 0) { - __deallocate_node(__p1_.first().__next_); - __p1_.first().__next_ = nullptr; - size_type __bc = bucket_count(); - for (size_type __i = 0; __i < __bc; ++__i) - __bucket_list_[__i] = nullptr; - size() = 0; - } -} - -// Prepare the container for an insertion of the value __value with the hash -// __hash. This does a lookup into the container to see if __value is already -// present, and performs a rehash if necessary. Returns a pointer to the -// existing element if it exists, otherwise nullptr. -// -// Note that this function does forward exceptions if key_eq() throws, and never -// mutates __value or actually inserts into the map. -template -_LIBCPP_HIDE_FROM_ABI typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__next_pointer -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_unique_prepare(size_t __hash, value_type& __value) { - size_type __bc = bucket_count(); - - if (__bc != 0) { - size_t __chash = std::__constrain_hash(__hash, __bc); - __next_pointer __ndptr = __bucket_list_[__chash]; - if (__ndptr != nullptr) { - for (__ndptr = __ndptr->__next_; - __ndptr != nullptr && - (__ndptr->__hash() == __hash || std::__constrain_hash(__ndptr->__hash(), __bc) == __chash); - __ndptr = __ndptr->__next_) { - if ((__ndptr->__hash() == __hash) && key_eq()(__ndptr->__upcast()->__get_value(), __value)) - return __ndptr; - } - } - } - if (size() + 1 > __bc * max_load_factor() || __bc == 0) { - __rehash_unique(std::max( - 2 * __bc + !std::__is_hash_power2(__bc), size_type(std::ceil(float(size() + 1) / max_load_factor())))); - } - return nullptr; -} - -// Insert the node __nd into the container by pushing it into the right bucket, -// and updating size(). Assumes that __nd->__hash is up-to-date, and that -// rehashing has already occurred and that no element with the same key exists -// in the map. -template -_LIBCPP_HIDE_FROM_ABI void -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_unique_perform(__node_pointer __nd) _NOEXCEPT { - size_type __bc = bucket_count(); - size_t __chash = std::__constrain_hash(__nd->__hash(), __bc); - // insert_after __bucket_list_[__chash], or __first_node if bucket is null - __next_pointer __pn = __bucket_list_[__chash]; - if (__pn == nullptr) { - __pn = __p1_.first().__ptr(); - __nd->__next_ = __pn->__next_; - __pn->__next_ = __nd->__ptr(); - // fix up __bucket_list_ - __bucket_list_[__chash] = __pn; - if (__nd->__next_ != nullptr) - __bucket_list_[std::__constrain_hash(__nd->__next_->__hash(), __bc)] = __nd->__ptr(); - } else { - __nd->__next_ = __pn->__next_; - __pn->__next_ = __nd->__ptr(); - } - ++size(); -} - -template -pair::iterator, bool> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_unique(__node_pointer __nd) { - __nd->__hash_ = hash_function()(__nd->__get_value()); - __next_pointer __existing_node = __node_insert_unique_prepare(__nd->__hash(), __nd->__get_value()); - - // Insert the node, unless it already exists in the container. - bool __inserted = false; - if (__existing_node == nullptr) { - __node_insert_unique_perform(__nd); - __existing_node = __nd->__ptr(); - __inserted = true; - } - return pair(iterator(__existing_node), __inserted); -} - -// Prepare the container for an insertion of the value __cp_val with the hash -// __cp_hash. This does a lookup into the container to see if __cp_value is -// already present, and performs a rehash if necessary. Returns a pointer to the -// last occurrence of __cp_val in the map. -// -// Note that this function does forward exceptions if key_eq() throws, and never -// mutates __value or actually inserts into the map. -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__next_pointer -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi_prepare(size_t __cp_hash, value_type& __cp_val) { - size_type __bc = bucket_count(); - if (size() + 1 > __bc * max_load_factor() || __bc == 0) { - __rehash_multi(std::max( - 2 * __bc + !std::__is_hash_power2(__bc), size_type(std::ceil(float(size() + 1) / max_load_factor())))); - __bc = bucket_count(); - } - size_t __chash = std::__constrain_hash(__cp_hash, __bc); - __next_pointer __pn = __bucket_list_[__chash]; - if (__pn != nullptr) { - for (bool __found = false; - __pn->__next_ != nullptr && std::__constrain_hash(__pn->__next_->__hash(), __bc) == __chash; - __pn = __pn->__next_) { - // __found key_eq() action - // false false loop - // true true loop - // false true set __found to true - // true false break - if (__found != - (__pn->__next_->__hash() == __cp_hash && key_eq()(__pn->__next_->__upcast()->__get_value(), __cp_val))) { - if (!__found) - __found = true; - else - break; - } - } - } - return __pn; -} - -// Insert the node __cp into the container after __pn (which is the last node in -// the bucket that compares equal to __cp). Rehashing, and checking for -// uniqueness has already been performed (in __node_insert_multi_prepare), so -// all we need to do is update the bucket and size(). Assumes that __cp->__hash -// is up-to-date. -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi_perform( - __node_pointer __cp, __next_pointer __pn) _NOEXCEPT { - size_type __bc = bucket_count(); - size_t __chash = std::__constrain_hash(__cp->__hash_, __bc); - if (__pn == nullptr) { - __pn = __p1_.first().__ptr(); - __cp->__next_ = __pn->__next_; - __pn->__next_ = __cp->__ptr(); - // fix up __bucket_list_ - __bucket_list_[__chash] = __pn; - if (__cp->__next_ != nullptr) - __bucket_list_[std::__constrain_hash(__cp->__next_->__hash(), __bc)] = __cp->__ptr(); - } else { - __cp->__next_ = __pn->__next_; - __pn->__next_ = __cp->__ptr(); - if (__cp->__next_ != nullptr) { - size_t __nhash = std::__constrain_hash(__cp->__next_->__hash(), __bc); - if (__nhash != __chash) - __bucket_list_[__nhash] = __cp->__ptr(); - } - } - ++size(); -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(__node_pointer __cp) { - __cp->__hash_ = hash_function()(__cp->__get_value()); - __next_pointer __pn = __node_insert_multi_prepare(__cp->__hash(), __cp->__get_value()); - __node_insert_multi_perform(__cp, __pn); - - return iterator(__cp->__ptr()); -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_insert_multi(const_iterator __p, __node_pointer __cp) { - if (__p != end() && key_eq()(*__p, __cp->__get_value())) { - __next_pointer __np = __p.__node_; - __cp->__hash_ = __np->__hash(); - size_type __bc = bucket_count(); - if (size() + 1 > __bc * max_load_factor() || __bc == 0) { - __rehash_multi(std::max( - 2 * __bc + !std::__is_hash_power2(__bc), size_type(std::ceil(float(size() + 1) / max_load_factor())))); - __bc = bucket_count(); - } - size_t __chash = std::__constrain_hash(__cp->__hash_, __bc); - __next_pointer __pp = __bucket_list_[__chash]; - while (__pp->__next_ != __np) - __pp = __pp->__next_; - __cp->__next_ = __np; - __pp->__next_ = static_cast<__next_pointer>(__cp); - ++size(); - return iterator(static_cast<__next_pointer>(__cp)); - } - return __node_insert_multi(__cp); -} - -template -template -pair::iterator, bool> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_key_args(_Key const& __k, _Args&&... __args) { - size_t __hash = hash_function()(__k); - size_type __bc = bucket_count(); - bool __inserted = false; - __next_pointer __nd; - size_t __chash; - if (__bc != 0) { - __chash = std::__constrain_hash(__hash, __bc); - __nd = __bucket_list_[__chash]; - if (__nd != nullptr) { - for (__nd = __nd->__next_; - __nd != nullptr && (__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash); - __nd = __nd->__next_) { - if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __k)) - goto __done; - } - } - } - { - __node_holder __h = __construct_node_hash(__hash, std::forward<_Args>(__args)...); - if (size() + 1 > __bc * max_load_factor() || __bc == 0) { - __rehash_unique(std::max( - 2 * __bc + !std::__is_hash_power2(__bc), size_type(std::ceil(float(size() + 1) / max_load_factor())))); - __bc = bucket_count(); - __chash = std::__constrain_hash(__hash, __bc); - } - // insert_after __bucket_list_[__chash], or __first_node if bucket is null - __next_pointer __pn = __bucket_list_[__chash]; - if (__pn == nullptr) { - __pn = __p1_.first().__ptr(); - __h->__next_ = __pn->__next_; - __pn->__next_ = __h.get()->__ptr(); - // fix up __bucket_list_ - __bucket_list_[__chash] = __pn; - if (__h->__next_ != nullptr) - __bucket_list_[std::__constrain_hash(__h->__next_->__hash(), __bc)] = __h.get()->__ptr(); - } else { - __h->__next_ = __pn->__next_; - __pn->__next_ = static_cast<__next_pointer>(__h.get()); - } - __nd = static_cast<__next_pointer>(__h.release()); - // increment size - ++size(); - __inserted = true; - } -__done: - return pair(iterator(__nd), __inserted); -} - -template -template -pair::iterator, bool> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_unique_impl(_Args&&... __args) { - __node_holder __h = __construct_node(std::forward<_Args>(__args)...); - pair __r = __node_insert_unique(__h.get()); - if (__r.second) - __h.release(); - return __r; -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_multi(_Args&&... __args) { - __node_holder __h = __construct_node(std::forward<_Args>(__args)...); - iterator __r = __node_insert_multi(__h.get()); - __h.release(); - return __r; -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__emplace_hint_multi(const_iterator __p, _Args&&... __args) { - __node_holder __h = __construct_node(std::forward<_Args>(__args)...); - iterator __r = __node_insert_multi(__p, __h.get()); - __h.release(); - return __r; -} - -template -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__rehash(size_type __n) _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK { - if (__n == 1) - __n = 2; - else if (__n & (__n - 1)) - __n = std::__next_prime(__n); - size_type __bc = bucket_count(); - if (__n > __bc) - __do_rehash<_UniqueKeys>(__n); - else if (__n < __bc) { - __n = std::max( - __n, - std::__is_hash_power2(__bc) ? std::__next_hash_pow2(size_t(std::ceil(float(size()) / max_load_factor()))) - : std::__next_prime(size_t(std::ceil(float(size()) / max_load_factor())))); - if (__n < __bc) - __do_rehash<_UniqueKeys>(__n); - } -} - -template -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__do_rehash(size_type __nbc) { - __pointer_allocator& __npa = __bucket_list_.get_deleter().__alloc(); - __bucket_list_.reset(__nbc > 0 ? __pointer_alloc_traits::allocate(__npa, __nbc) : nullptr); - __bucket_list_.get_deleter().size() = __nbc; - if (__nbc > 0) { - for (size_type __i = 0; __i < __nbc; ++__i) - __bucket_list_[__i] = nullptr; - __next_pointer __pp = __p1_.first().__ptr(); - __next_pointer __cp = __pp->__next_; - if (__cp != nullptr) { - size_type __chash = std::__constrain_hash(__cp->__hash(), __nbc); - __bucket_list_[__chash] = __pp; - size_type __phash = __chash; - for (__pp = __cp, void(), __cp = __cp->__next_; __cp != nullptr; __cp = __pp->__next_) { - __chash = std::__constrain_hash(__cp->__hash(), __nbc); - if (__chash == __phash) - __pp = __cp; - else { - if (__bucket_list_[__chash] == nullptr) { - __bucket_list_[__chash] = __pp; - __pp = __cp; - __phash = __chash; - } else { - __next_pointer __np = __cp; - if (!_UniqueKeys) { - for (; __np->__next_ != nullptr && - key_eq()(__cp->__upcast()->__get_value(), __np->__next_->__upcast()->__get_value()); - __np = __np->__next_) - ; - } - __pp->__next_ = __np->__next_; - __np->__next_ = __bucket_list_[__chash]->__next_; - __bucket_list_[__chash]->__next_ = __cp; - } - } - } - } - } -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::find(const _Key& __k) { - size_t __hash = hash_function()(__k); - size_type __bc = bucket_count(); - if (__bc != 0) { - size_t __chash = std::__constrain_hash(__hash, __bc); - __next_pointer __nd = __bucket_list_[__chash]; - if (__nd != nullptr) { - for (__nd = __nd->__next_; - __nd != nullptr && (__nd->__hash() == __hash || std::__constrain_hash(__nd->__hash(), __bc) == __chash); - __nd = __nd->__next_) { - if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __k)) - return iterator(__nd); - } - } - } - return end(); -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::const_iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::find(const _Key& __k) const { - size_t __hash = hash_function()(__k); - size_type __bc = bucket_count(); - if (__bc != 0) { - size_t __chash = std::__constrain_hash(__hash, __bc); - __next_pointer __nd = __bucket_list_[__chash]; - if (__nd != nullptr) { - for (__nd = __nd->__next_; - __nd != nullptr && (__hash == __nd->__hash() || std::__constrain_hash(__nd->__hash(), __bc) == __chash); - __nd = __nd->__next_) { - if ((__nd->__hash() == __hash) && key_eq()(__nd->__upcast()->__get_value(), __k)) - return const_iterator(__nd); - } - } - } - return end(); -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node(_Args&&... __args) { - static_assert(!__is_hash_value_type<_Args...>::value, "Construct cannot be called with a hash value type"); - __node_allocator& __na = __node_alloc(); - __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na)); - - // Begin the lifetime of the node itself. Note that this doesn't begin the lifetime of the value - // held inside the node, since we need to use the allocator's construct() method for that. - // - // We don't use the allocator's construct() method to construct the node itself since the - // Cpp17FooInsertable named requirements don't require the allocator's construct() method - // to work on anything other than the value_type. - std::__construct_at(std::addressof(*__h), /* next = */ nullptr, /* hash = */ 0); - - // Now construct the value_type using the allocator's construct() method. - __node_traits::construct(__na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_Args>(__args)...); - __h.get_deleter().__value_constructed = true; - - __h->__hash_ = hash_function()(__h->__get_value()); - return __h; -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__construct_node_hash(size_t __hash, _First&& __f, _Rest&&... __rest) { - static_assert(!__is_hash_value_type<_First, _Rest...>::value, "Construct cannot be called with a hash value type"); - __node_allocator& __na = __node_alloc(); - __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na)); - std::__construct_at(std::addressof(*__h), /* next = */ nullptr, /* hash = */ __hash); - __node_traits::construct( - __na, _NodeTypes::__get_ptr(__h->__get_value()), std::forward<_First>(__f), std::forward<_Rest>(__rest)...); - __h.get_deleter().__value_constructed = true; - return __h; -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __p) { - __next_pointer __np = __p.__node_; - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __p != end(), "unordered container::erase(iterator) called with a non-dereferenceable iterator"); - iterator __r(__np); - ++__r; - remove(__p); - return __r; -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator -__hash_table<_Tp, _Hash, _Equal, _Alloc>::erase(const_iterator __first, const_iterator __last) { - for (const_iterator __p = __first; __first != __last; __p = __first) { - ++__first; - erase(__p); - } - __next_pointer __np = __last.__node_; - return iterator(__np); -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::size_type -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__erase_unique(const _Key& __k) { - iterator __i = find(__k); - if (__i == end()) - return 0; - erase(__i); - return 1; -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::size_type -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__erase_multi(const _Key& __k) { - size_type __r = 0; - iterator __i = find(__k); - if (__i != end()) { - iterator __e = end(); - do { - erase(__i++); - ++__r; - } while (__i != __e && key_eq()(*__i, __k)); - } - return __r; -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_holder -__hash_table<_Tp, _Hash, _Equal, _Alloc>::remove(const_iterator __p) _NOEXCEPT { - // current node - __next_pointer __cn = __p.__node_; - size_type __bc = bucket_count(); - size_t __chash = std::__constrain_hash(__cn->__hash(), __bc); - // find previous node - __next_pointer __pn = __bucket_list_[__chash]; - for (; __pn->__next_ != __cn; __pn = __pn->__next_) - ; - // Fix up __bucket_list_ - // if __pn is not in same bucket (before begin is not in same bucket) && - // if __cn->__next_ is not in same bucket (nullptr is not in same bucket) - if (__pn == __p1_.first().__ptr() || std::__constrain_hash(__pn->__hash(), __bc) != __chash) { - if (__cn->__next_ == nullptr || std::__constrain_hash(__cn->__next_->__hash(), __bc) != __chash) - __bucket_list_[__chash] = nullptr; - } - // if __cn->__next_ is not in same bucket (nullptr is in same bucket) - if (__cn->__next_ != nullptr) { - size_t __nhash = std::__constrain_hash(__cn->__next_->__hash(), __bc); - if (__nhash != __chash) - __bucket_list_[__nhash] = __pn; - } - // remove __cn - __pn->__next_ = __cn->__next_; - __cn->__next_ = nullptr; - --size(); - return __node_holder(__cn->__upcast(), _Dp(__node_alloc(), true)); -} - -template -template -inline typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::size_type -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__count_unique(const _Key& __k) const { - return static_cast(find(__k) != end()); -} - -template -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::size_type -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__count_multi(const _Key& __k) const { - size_type __r = 0; - const_iterator __i = find(__k); - if (__i != end()) { - const_iterator __e = end(); - do { - ++__i; - ++__r; - } while (__i != __e && key_eq()(*__i, __k)); - } - return __r; -} - -template -template -pair::iterator, - typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__equal_range_unique(const _Key& __k) { - iterator __i = find(__k); - iterator __j = __i; - if (__i != end()) - ++__j; - return pair(__i, __j); -} - -template -template -pair::const_iterator, - typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::const_iterator> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__equal_range_unique(const _Key& __k) const { - const_iterator __i = find(__k); - const_iterator __j = __i; - if (__i != end()) - ++__j; - return pair(__i, __j); -} - -template -template -pair::iterator, - typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__equal_range_multi(const _Key& __k) { - iterator __i = find(__k); - iterator __j = __i; - if (__i != end()) { - iterator __e = end(); - do { - ++__j; - } while (__j != __e && key_eq()(*__j, __k)); - } - return pair(__i, __j); -} - -template -template -pair::const_iterator, - typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::const_iterator> -__hash_table<_Tp, _Hash, _Equal, _Alloc>::__equal_range_multi(const _Key& __k) const { - const_iterator __i = find(__k); - const_iterator __j = __i; - if (__i != end()) { - const_iterator __e = end(); - do { - ++__j; - } while (__j != __e && key_eq()(*__j, __k)); - } - return pair(__i, __j); -} - -template -void __hash_table<_Tp, _Hash, _Equal, _Alloc>::swap(__hash_table& __u) { - _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR( - __node_traits::propagate_on_container_swap::value || this->__node_alloc() == __u.__node_alloc(), - "unordered container::swap: Either propagate_on_container_swap " - "must be true or the allocators must compare equal"); - { - __node_pointer_pointer __npp = __bucket_list_.release(); - __bucket_list_.reset(__u.__bucket_list_.release()); - __u.__bucket_list_.reset(__npp); - } - std::swap(__bucket_list_.get_deleter().size(), __u.__bucket_list_.get_deleter().size()); - std::__swap_allocator(__bucket_list_.get_deleter().__alloc(), __u.__bucket_list_.get_deleter().__alloc()); - std::__swap_allocator(__node_alloc(), __u.__node_alloc()); - std::swap(__p1_.first().__next_, __u.__p1_.first().__next_); - __p2_.swap(__u.__p2_); - __p3_.swap(__u.__p3_); - if (size() > 0) - __bucket_list_[std::__constrain_hash(__p1_.first().__next_->__hash(), bucket_count())] = __p1_.first().__ptr(); - if (__u.size() > 0) - __u.__bucket_list_[std::__constrain_hash(__u.__p1_.first().__next_->__hash(), __u.bucket_count())] = - __u.__p1_.first().__ptr(); -} - -template -typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::size_type -__hash_table<_Tp, _Hash, _Equal, _Alloc>::bucket_size(size_type __n) const { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < bucket_count(), "unordered container::bucket_size(n) called with n >= bucket_count()"); - __next_pointer __np = __bucket_list_[__n]; - size_type __bc = bucket_count(); - size_type __r = 0; - if (__np != nullptr) { - for (__np = __np->__next_; __np != nullptr && std::__constrain_hash(__np->__hash(), __bc) == __n; - __np = __np->__next_, (void)++__r) - ; - } - return __r; -} - -template -inline _LIBCPP_HIDE_FROM_ABI void -swap(__hash_table<_Tp, _Hash, _Equal, _Alloc>& __x, __hash_table<_Tp, _Hash, _Equal, _Alloc>& __y) { - __x.swap(__y); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___HASH_TABLE diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__ios/fpos.h b/third_party/libcxx/include/c++/v1/__cxx03/__ios/fpos.h deleted file mode 100644 index 5f16bfd..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__ios/fpos.h +++ /dev/null @@ -1,76 +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___CXX03___IOS_FPOS_H -#define _LIBCPP___CXX03___IOS_FPOS_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/ios.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS fpos { -private: - _StateT __st_; - streamoff __off_; - -public: - _LIBCPP_HIDE_FROM_ABI fpos(streamoff __off = streamoff()) : __st_(), __off_(__off) {} - - _LIBCPP_HIDE_FROM_ABI operator streamoff() const { return __off_; } - - _LIBCPP_HIDE_FROM_ABI _StateT state() const { return __st_; } - _LIBCPP_HIDE_FROM_ABI void state(_StateT __st) { __st_ = __st; } - - _LIBCPP_HIDE_FROM_ABI fpos& operator+=(streamoff __off) { - __off_ += __off; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI fpos operator+(streamoff __off) const { - fpos __t(*this); - __t += __off; - return __t; - } - - _LIBCPP_HIDE_FROM_ABI fpos& operator-=(streamoff __off) { - __off_ -= __off; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI fpos operator-(streamoff __off) const { - fpos __t(*this); - __t -= __off; - return __t; - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI streamoff operator-(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { - return streamoff(__x) - streamoff(__y); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator==(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { - return streamoff(__x) == streamoff(__y); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const fpos<_StateT>& __x, const fpos<_StateT>& __y) { - return streamoff(__x) != streamoff(__y); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___IOS_FPOS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/access.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/access.h deleted file mode 100644 index 52220a1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/access.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___CXX03___ITERATOR_ACCESS_H -#define _LIBCPP___CXX03___ITERATOR_ACCESS_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI _Tp* begin(_Tp (&__array)[_Np]) _NOEXCEPT { - return __array; -} - -template -_LIBCPP_HIDE_FROM_ABI _Tp* end(_Tp (&__array)[_Np]) _NOEXCEPT { - return __array + _Np; -} - -template -_LIBCPP_HIDE_FROM_ABI typename _Cp::iterator begin(_Cp& __c) { - return __c.begin(); -} - -template -_LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator begin(const _Cp& __c) { - return __c.begin(); -} - -template -_LIBCPP_HIDE_FROM_ABI typename _Cp::iterator end(_Cp& __c) { - return __c.end(); -} - -template -_LIBCPP_HIDE_FROM_ABI typename _Cp::const_iterator end(const _Cp& __c) { - return __c.end(); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ACCESS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/advance.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/advance.h deleted file mode 100644 index d49556a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/advance.h +++ /dev/null @@ -1,74 +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___CXX03___ITERATOR_ADVANCE_H -#define _LIBCPP___CXX03___ITERATOR_ADVANCE_H - -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__utility/convert_to_integral.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/__utility/unreachable.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI void -__advance(_InputIter& __i, typename iterator_traits<_InputIter>::difference_type __n, input_iterator_tag) { - for (; __n > 0; --__n) - ++__i; -} - -template -_LIBCPP_HIDE_FROM_ABI void -__advance(_BiDirIter& __i, typename iterator_traits<_BiDirIter>::difference_type __n, bidirectional_iterator_tag) { - if (__n >= 0) - for (; __n > 0; --__n) - ++__i; - else - for (; __n < 0; ++__n) - --__i; -} - -template -_LIBCPP_HIDE_FROM_ABI void -__advance(_RandIter& __i, typename iterator_traits<_RandIter>::difference_type __n, random_access_iterator_tag) { - __i += __n; -} - -template < class _InputIter, - class _Distance, - class _IntegralDistance = decltype(std::__convert_to_integral(std::declval<_Distance>())), - __enable_if_t::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI void advance(_InputIter& __i, _Distance __orig_n) { - typedef typename iterator_traits<_InputIter>::difference_type _Difference; - _Difference __n = static_cast<_Difference>(std::__convert_to_integral(__orig_n)); - // Calling `advance` with a negative value on a non-bidirectional iterator is a no-op in the current implementation. - _LIBCPP_ASSERT_PEDANTIC(__n >= 0 || __has_bidirectional_iterator_category<_InputIter>::value, - "Attempt to advance(it, n) with negative n on a non-bidirectional iterator"); - std::__advance(__i, __n, typename iterator_traits<_InputIter>::iterator_category()); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_ADVANCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/aliasing_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/aliasing_iterator.h deleted file mode 100644 index 93da1d2..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/aliasing_iterator.h +++ /dev/null @@ -1,127 +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___CXX03___ITERATOR_ALIASING_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_ALIASING_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/is_trivial.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// This iterator wrapper is used to type-pun an iterator to return a different type. This is done without UB by not -// actually punning the type, but instead inspecting the object representation of the base type and copying that into -// an instance of the alias type. For that reason the alias type has to be trivial. The alias is returned as a prvalue -// when derferencing the iterator, since it is temporary storage. This wrapper is used to vectorize some algorithms. - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __aliasing_iterator_wrapper { - class __iterator { - _BaseIter __base_ = nullptr; - - using __iter_traits = iterator_traits<_BaseIter>; - using __base_value_type = typename __iter_traits::value_type; - - static_assert(__has_random_access_iterator_category<_BaseIter>::value, - "The base iterator has to be a random access iterator!"); - - public: - using iterator_category = random_access_iterator_tag; - using value_type = _Alias; - using difference_type = ptrdiff_t; - using reference = value_type&; - using pointer = value_type*; - - static_assert(is_trivial::value); - static_assert(sizeof(__base_value_type) == sizeof(value_type)); - - _LIBCPP_HIDE_FROM_ABI __iterator() = default; - _LIBCPP_HIDE_FROM_ABI __iterator(_BaseIter __base) _NOEXCEPT : __base_(__base) {} - - _LIBCPP_HIDE_FROM_ABI __iterator& operator++() _NOEXCEPT { - ++__base_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __iterator operator++(int) _NOEXCEPT { - __iterator __tmp(*this); - ++__base_; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __iterator& operator--() _NOEXCEPT { - --__base_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI __iterator operator--(int) _NOEXCEPT { - __iterator __tmp(*this); - --__base_; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI friend __iterator operator+(__iterator __iter, difference_type __n) _NOEXCEPT { - return __iterator(__iter.__base_ + __n); - } - - _LIBCPP_HIDE_FROM_ABI friend __iterator operator+(difference_type __n, __iterator __iter) _NOEXCEPT { - return __iterator(__n + __iter.__base_); - } - - _LIBCPP_HIDE_FROM_ABI __iterator& operator+=(difference_type __n) _NOEXCEPT { - __base_ += __n; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI friend __iterator operator-(__iterator __iter, difference_type __n) _NOEXCEPT { - return __iterator(__iter.__base_ - __n); - } - - _LIBCPP_HIDE_FROM_ABI friend difference_type operator-(__iterator __lhs, __iterator __rhs) _NOEXCEPT { - return __lhs.__base_ - __rhs.__base_; - } - - _LIBCPP_HIDE_FROM_ABI __iterator& operator-=(difference_type __n) _NOEXCEPT { - __base_ -= __n; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _BaseIter __base() const _NOEXCEPT { return __base_; } - - _LIBCPP_HIDE_FROM_ABI _Alias operator*() const _NOEXCEPT { - _Alias __val; - __builtin_memcpy(&__val, std::__to_address(__base_), sizeof(value_type)); - return __val; - } - - _LIBCPP_HIDE_FROM_ABI value_type operator[](difference_type __n) const _NOEXCEPT { return *(*this + __n); } - - _LIBCPP_HIDE_FROM_ABI friend bool operator==(const __iterator& __lhs, const __iterator& __rhs) _NOEXCEPT { - return __lhs.__base_ == __rhs.__base_; - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator!=(const __iterator& __lhs, const __iterator& __rhs) _NOEXCEPT { - return __lhs.__base_ != __rhs.__base_; - } - }; -}; - -// This is required to avoid ADL instantiations on _BaseT -template -using __aliasing_iterator = typename __aliasing_iterator_wrapper<_BaseT, _Alias>::__iterator; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ALIASING_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/back_insert_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/back_insert_iterator.h deleted file mode 100644 index e9390a6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/back_insert_iterator.h +++ /dev/null @@ -1,67 +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___CXX03___ITERATOR_BACK_INSERT_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_BACK_INSERT_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS back_insert_iterator : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -protected: - _Container* container; - -public: - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - typedef _Container container_type; - - _LIBCPP_HIDE_FROM_ABI explicit back_insert_iterator(_Container& __x) : container(std::addressof(__x)) {} - _LIBCPP_HIDE_FROM_ABI back_insert_iterator& operator=(const typename _Container::value_type& __value) { - container->push_back(__value); - return *this; - } - _LIBCPP_HIDE_FROM_ABI back_insert_iterator& operator*() { return *this; } - _LIBCPP_HIDE_FROM_ABI back_insert_iterator& operator++() { return *this; } - _LIBCPP_HIDE_FROM_ABI back_insert_iterator operator++(int) { return *this; } - - _LIBCPP_HIDE_FROM_ABI _Container* __get_container() const { return container; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(back_insert_iterator); - -template -inline _LIBCPP_HIDE_FROM_ABI back_insert_iterator<_Container> back_inserter(_Container& __x) { - return back_insert_iterator<_Container>(__x); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_BACK_INSERT_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/bounded_iter.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/bounded_iter.h deleted file mode 100644 index 83296a4..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/bounded_iter.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___CXX03___ITERATOR_BOUNDED_ITER_H -#define _LIBCPP___CXX03___ITERATOR_BOUNDED_ITER_H - -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Iterator wrapper that carries the valid range it is allowed to access. -// -// This is a simple iterator wrapper for contiguous iterators that points -// within a [begin, end] range and carries these bounds with it. The iterator -// ensures that it is pointing within [begin, end) range when it is -// dereferenced. It also ensures that it is never iterated outside of -// [begin, end]. This is important for two reasons: -// -// 1. It allows `operator*` and `operator++` bounds checks to be `iter != end`. -// This is both less for the optimizer to prove, and aligns with how callers -// typically use iterators. -// -// 2. Advancing an iterator out of bounds is undefined behavior (see the table -// in [input.iterators]). In particular, when the underlying iterator is a -// pointer, it is undefined at the language level (see [expr.add]). If -// bounded iterators exhibited this undefined behavior, we risk compiler -// optimizations deleting non-redundant bounds checks. -template ::value > > -struct __bounded_iter { - using value_type = typename iterator_traits<_Iterator>::value_type; - using difference_type = typename iterator_traits<_Iterator>::difference_type; - using pointer = typename iterator_traits<_Iterator>::pointer; - using reference = typename iterator_traits<_Iterator>::reference; - using iterator_category = typename iterator_traits<_Iterator>::iterator_category; - - // Create a singular iterator. - // - // Such an iterator points past the end of an empty span, so it is not dereferenceable. - // Observing operations like comparison and assignment are valid. - _LIBCPP_HIDE_FROM_ABI __bounded_iter() = default; - - _LIBCPP_HIDE_FROM_ABI __bounded_iter(__bounded_iter const&) = default; - _LIBCPP_HIDE_FROM_ABI __bounded_iter(__bounded_iter&&) = default; - - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI __bounded_iter(__bounded_iter<_OtherIterator> const& __other) _NOEXCEPT - : __current_(__other.__current_), - __begin_(__other.__begin_), - __end_(__other.__end_) {} - - // Assign a bounded iterator to another one, rebinding the bounds of the iterator as well. - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator=(__bounded_iter const&) = default; - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator=(__bounded_iter&&) = default; - -private: - // Create an iterator wrapping the given iterator, and whose bounds are described - // by the provided [begin, end] range. - // - // The constructor does not check whether the resulting iterator is within its bounds. It is a - // responsibility of the container to ensure that the given bounds are valid. - // - // Since it is non-standard for iterators to have this constructor, __bounded_iter must - // be created via `std::__make_bounded_iter`. - _LIBCPP_HIDE_FROM_ABI explicit __bounded_iter(_Iterator __current, _Iterator __begin, _Iterator __end) - : __current_(__current), __begin_(__begin), __end_(__end) { - _LIBCPP_ASSERT_INTERNAL( - __begin <= __current, "__bounded_iter(current, begin, end): current and begin are inconsistent"); - _LIBCPP_ASSERT_INTERNAL( - __current <= __end, "__bounded_iter(current, begin, end): current and end are inconsistent"); - } - - template - friend __bounded_iter<_It> __make_bounded_iter(_It, _It, _It); - -public: - // Dereference and indexing operations. - // - // These operations check that the iterator is dereferenceable. Since the class invariant is - // that the iterator is always within `[begin, end]`, we only need to check it's not pointing to - // `end`. This is easier for the optimizer because it aligns with the `iter != container.end()` - // checks that typical callers already use (see - // https://github.com/llvm/llvm-project/issues/78829). - _LIBCPP_HIDE_FROM_ABI reference operator*() const _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __current_ != __end_, "__bounded_iter::operator*: Attempt to dereference an iterator at the end"); - return *__current_; - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __current_ != __end_, "__bounded_iter::operator->: Attempt to dereference an iterator at the end"); - return std::__to_address(__current_); - } - - _LIBCPP_HIDE_FROM_ABI reference operator[](difference_type __n) const _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n >= __begin_ - __current_, "__bounded_iter::operator[]: Attempt to index an iterator past the start"); - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n < __end_ - __current_, "__bounded_iter::operator[]: Attempt to index an iterator at or past the end"); - return __current_[__n]; - } - - // Arithmetic operations. - // - // These operations check that the iterator remains within `[begin, end]`. - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator++() _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __current_ != __end_, "__bounded_iter::operator++: Attempt to advance an iterator past the end"); - ++__current_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI __bounded_iter operator++(int) _NOEXCEPT { - __bounded_iter __tmp(*this); - ++*this; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator--() _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __current_ != __begin_, "__bounded_iter::operator--: Attempt to rewind an iterator past the start"); - --__current_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI __bounded_iter operator--(int) _NOEXCEPT { - __bounded_iter __tmp(*this); - --*this; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator+=(difference_type __n) _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n >= __begin_ - __current_, "__bounded_iter::operator+=: Attempt to rewind an iterator past the start"); - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n <= __end_ - __current_, "__bounded_iter::operator+=: Attempt to advance an iterator past the end"); - __current_ += __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI friend __bounded_iter operator+(__bounded_iter const& __self, difference_type __n) _NOEXCEPT { - __bounded_iter __tmp(__self); - __tmp += __n; - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI friend __bounded_iter operator+(difference_type __n, __bounded_iter const& __self) _NOEXCEPT { - __bounded_iter __tmp(__self); - __tmp += __n; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __bounded_iter& operator-=(difference_type __n) _NOEXCEPT { - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n <= __current_ - __begin_, "__bounded_iter::operator-=: Attempt to rewind an iterator past the start"); - _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS( - __n >= __current_ - __end_, "__bounded_iter::operator-=: Attempt to advance an iterator past the end"); - __current_ -= __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI friend __bounded_iter operator-(__bounded_iter const& __self, difference_type __n) _NOEXCEPT { - __bounded_iter __tmp(__self); - __tmp -= __n; - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI friend difference_type - operator-(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ - __y.__current_; - } - - // Comparison operations. - // - // These operations do not check whether the iterators are within their bounds. - // The valid range for each iterator is also not considered as part of the comparison, - // i.e. two iterators pointing to the same location will be considered equal even - // if they have different validity ranges. - _LIBCPP_HIDE_FROM_ABI friend bool operator==(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ == __y.__current_; - } - - _LIBCPP_HIDE_FROM_ABI friend bool operator!=(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ != __y.__current_; - } - - // TODO(mordante) disable these overloads in the LLVM 20 release. - _LIBCPP_HIDE_FROM_ABI friend bool operator<(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ < __y.__current_; - } - _LIBCPP_HIDE_FROM_ABI friend bool operator>(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ > __y.__current_; - } - _LIBCPP_HIDE_FROM_ABI friend bool operator<=(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ <= __y.__current_; - } - _LIBCPP_HIDE_FROM_ABI friend bool operator>=(__bounded_iter const& __x, __bounded_iter const& __y) _NOEXCEPT { - return __x.__current_ >= __y.__current_; - } - -private: - template - friend struct pointer_traits; - template - friend struct __bounded_iter; - _Iterator __current_; // current iterator - _Iterator __begin_, __end_; // valid range represented as [begin, end] -}; - -template -_LIBCPP_HIDE_FROM_ABI __bounded_iter<_It> __make_bounded_iter(_It __it, _It __begin, _It __end) { - return __bounded_iter<_It>(std::move(__it), std::move(__begin), std::move(__end)); -} - -template -struct __libcpp_is_contiguous_iterator<__bounded_iter<_Iterator> > : true_type {}; - -template -struct pointer_traits<__bounded_iter<_Iterator> > { - using pointer = __bounded_iter<_Iterator>; - using element_type = typename pointer_traits<_Iterator>::element_type; - using difference_type = typename pointer_traits<_Iterator>::difference_type; - - _LIBCPP_HIDE_FROM_ABI static element_type* to_address(pointer __it) _NOEXCEPT { - return std::__to_address(__it.__current_); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_BOUNDED_ITER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/distance.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/distance.h deleted file mode 100644 index 656b960..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/distance.h +++ /dev/null @@ -1,47 +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___CXX03___ITERATOR_DISTANCE_H -#define _LIBCPP___CXX03___ITERATOR_DISTANCE_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/decay.h> -#include <__cxx03/__type_traits/remove_cvref.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_HIDE_FROM_ABI typename iterator_traits<_InputIter>::difference_type -__distance(_InputIter __first, _InputIter __last, input_iterator_tag) { - typename iterator_traits<_InputIter>::difference_type __r(0); - for (; __first != __last; ++__first) - ++__r; - return __r; -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename iterator_traits<_RandIter>::difference_type -__distance(_RandIter __first, _RandIter __last, random_access_iterator_tag) { - return __last - __first; -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename iterator_traits<_InputIter>::difference_type -distance(_InputIter __first, _InputIter __last) { - return std::__distance(__first, __last, typename iterator_traits<_InputIter>::iterator_category()); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_DISTANCE_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/erase_if_container.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/erase_if_container.h deleted file mode 100644 index c83eccd..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/erase_if_container.h +++ /dev/null @@ -1,43 +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___CXX03___ITERATOR_ERASE_IF_CONTAINER_H -#define _LIBCPP___CXX03___ITERATOR_ERASE_IF_CONTAINER_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -_LIBCPP_HIDE_FROM_ABI typename _Container::size_type __libcpp_erase_if_container(_Container& __c, _Predicate& __pred) { - typename _Container::size_type __old_size = __c.size(); - - const typename _Container::iterator __last = __c.end(); - for (typename _Container::iterator __iter = __c.begin(); __iter != __last;) { - if (__pred(*__iter)) - __iter = __c.erase(__iter); - else - ++__iter; - } - - return __old_size - __c.size(); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_ERASE_IF_CONTAINER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/front_insert_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/front_insert_iterator.h deleted file mode 100644 index 347858f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/front_insert_iterator.h +++ /dev/null @@ -1,65 +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___CXX03___ITERATOR_FRONT_INSERT_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_FRONT_INSERT_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS front_insert_iterator : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -protected: - _Container* container; - -public: - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - typedef _Container container_type; - - _LIBCPP_HIDE_FROM_ABI explicit front_insert_iterator(_Container& __x) : container(std::addressof(__x)) {} - _LIBCPP_HIDE_FROM_ABI front_insert_iterator& operator=(const typename _Container::value_type& __value) { - container->push_front(__value); - return *this; - } - _LIBCPP_HIDE_FROM_ABI front_insert_iterator& operator*() { return *this; } - _LIBCPP_HIDE_FROM_ABI front_insert_iterator& operator++() { return *this; } - _LIBCPP_HIDE_FROM_ABI front_insert_iterator operator++(int) { return *this; } -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(front_insert_iterator); - -template -inline _LIBCPP_HIDE_FROM_ABI front_insert_iterator<_Container> front_inserter(_Container& __x) { - return front_insert_iterator<_Container>(__x); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_FRONT_INSERT_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/insert_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/insert_iterator.h deleted file mode 100644 index afb1f98..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/insert_iterator.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___CXX03___ITERATOR_INSERT_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_INSERT_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -using __insert_iterator_iter_t = typename _Container::iterator; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS insert_iterator : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -protected: - _Container* container; - __insert_iterator_iter_t<_Container> iter; - -public: - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - typedef _Container container_type; - - _LIBCPP_HIDE_FROM_ABI insert_iterator(_Container& __x, __insert_iterator_iter_t<_Container> __i) - : container(std::addressof(__x)), iter(__i) {} - _LIBCPP_HIDE_FROM_ABI insert_iterator& operator=(const typename _Container::value_type& __value) { - iter = container->insert(iter, __value); - ++iter; - return *this; - } - _LIBCPP_HIDE_FROM_ABI insert_iterator& operator*() { return *this; } - _LIBCPP_HIDE_FROM_ABI insert_iterator& operator++() { return *this; } - _LIBCPP_HIDE_FROM_ABI insert_iterator& operator++(int) { return *this; } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI insert_iterator<_Container> -inserter(_Container& __x, __insert_iterator_iter_t<_Container> __i) { - return insert_iterator<_Container>(__x, __i); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_INSERT_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istream_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istream_iterator.h deleted file mode 100644 index fb77c67..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istream_iterator.h +++ /dev/null @@ -1,86 +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___CXX03___ITERATOR_ISTREAM_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_ISTREAM_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/istream.h> -#include <__cxx03/__fwd/string.h> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template , class _Distance = ptrdiff_t> -class _LIBCPP_TEMPLATE_VIS istream_iterator - : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -public: - typedef input_iterator_tag iterator_category; - typedef _Tp value_type; - typedef _Distance difference_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_istream<_CharT, _Traits> istream_type; - -private: - istream_type* __in_stream_; - _Tp __value_; - -public: - _LIBCPP_HIDE_FROM_ABI istream_iterator() : __in_stream_(nullptr), __value_() {} - _LIBCPP_HIDE_FROM_ABI istream_iterator(istream_type& __s) : __in_stream_(std::addressof(__s)) { - if (!(*__in_stream_ >> __value_)) - __in_stream_ = nullptr; - } - - _LIBCPP_HIDE_FROM_ABI const _Tp& operator*() const { return __value_; } - _LIBCPP_HIDE_FROM_ABI const _Tp* operator->() const { return std::addressof((operator*())); } - _LIBCPP_HIDE_FROM_ABI istream_iterator& operator++() { - if (!(*__in_stream_ >> __value_)) - __in_stream_ = nullptr; - return *this; - } - _LIBCPP_HIDE_FROM_ABI istream_iterator operator++(int) { - istream_iterator __t(*this); - ++(*this); - return __t; - } - - template - friend _LIBCPP_HIDE_FROM_ABI bool operator==(const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __x, - const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __y); -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator==(const istream_iterator<_Tp, _CharT, _Traits, _Distance>& __x, - const istream_iterator<_Tp, _CharT, _Traits, _Distance>& __y) { - return __x.__in_stream_ == __y.__in_stream_; -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Distance>& __x, - const istream_iterator<_Tp, _CharT, _Traits, _Distance>& __y) { - return !(__x == __y); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ISTREAM_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istreambuf_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istreambuf_iterator.h deleted file mode 100644 index 37c81bb..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/istreambuf_iterator.h +++ /dev/null @@ -1,94 +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___CXX03___ITERATOR_ISTREAMBUF_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_ISTREAMBUF_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/istream.h> -#include <__cxx03/__fwd/streambuf.h> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS istreambuf_iterator - : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -public: - typedef input_iterator_tag iterator_category; - typedef _CharT value_type; - typedef typename _Traits::off_type difference_type; - typedef _CharT* pointer; - typedef _CharT reference; - typedef _CharT char_type; - typedef _Traits traits_type; - typedef typename _Traits::int_type int_type; - typedef basic_streambuf<_CharT, _Traits> streambuf_type; - typedef basic_istream<_CharT, _Traits> istream_type; - -private: - mutable streambuf_type* __sbuf_; - - class __proxy { - char_type __keep_; - streambuf_type* __sbuf_; - _LIBCPP_HIDE_FROM_ABI explicit __proxy(char_type __c, streambuf_type* __s) : __keep_(__c), __sbuf_(__s) {} - friend class istreambuf_iterator; - - public: - _LIBCPP_HIDE_FROM_ABI char_type operator*() const { return __keep_; } - }; - - _LIBCPP_HIDE_FROM_ABI bool __test_for_eof() const { - if (__sbuf_ && traits_type::eq_int_type(__sbuf_->sgetc(), traits_type::eof())) - __sbuf_ = nullptr; - return __sbuf_ == nullptr; - } - -public: - _LIBCPP_HIDE_FROM_ABI istreambuf_iterator() _NOEXCEPT : __sbuf_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI istreambuf_iterator(istream_type& __s) _NOEXCEPT : __sbuf_(__s.rdbuf()) {} - _LIBCPP_HIDE_FROM_ABI istreambuf_iterator(streambuf_type* __s) _NOEXCEPT : __sbuf_(__s) {} - _LIBCPP_HIDE_FROM_ABI istreambuf_iterator(const __proxy& __p) _NOEXCEPT : __sbuf_(__p.__sbuf_) {} - - _LIBCPP_HIDE_FROM_ABI char_type operator*() const { return static_cast(__sbuf_->sgetc()); } - _LIBCPP_HIDE_FROM_ABI istreambuf_iterator& operator++() { - __sbuf_->sbumpc(); - return *this; - } - _LIBCPP_HIDE_FROM_ABI __proxy operator++(int) { return __proxy(__sbuf_->sbumpc(), __sbuf_); } - - _LIBCPP_HIDE_FROM_ABI bool equal(const istreambuf_iterator& __b) const { - return __test_for_eof() == __b.__test_for_eof(); - } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator==(const istreambuf_iterator<_CharT, _Traits>& __a, const istreambuf_iterator<_CharT, _Traits>& __b) { - return __a.equal(__b); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool -operator!=(const istreambuf_iterator<_CharT, _Traits>& __a, const istreambuf_iterator<_CharT, _Traits>& __b) { - return !__a.equal(__b); -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ISTREAMBUF_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator.h deleted file mode 100644 index 8fbe973..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator.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___CXX03___ITERATOR_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS iterator { - typedef _Tp value_type; - typedef _Distance difference_type; - typedef _Pointer pointer; - typedef _Reference reference; - typedef _Category iterator_category; -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator_traits.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator_traits.h deleted file mode 100644 index 9b27911..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/iterator_traits.h +++ /dev/null @@ -1,246 +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___CXX03___ITERATOR_ITERATOR_TRAITS_H -#define _LIBCPP___CXX03___ITERATOR_ITERATOR_TRAITS_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/pair.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/disjunction.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__type_traits/is_object.h> -#include <__cxx03/__type_traits/is_primary_template.h> -#include <__cxx03/__type_traits/is_reference.h> -#include <__cxx03/__type_traits/is_valid_expansion.h> -#include <__cxx03/__type_traits/remove_const.h> -#include <__cxx03/__type_traits/remove_cv.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__type_traits/void_t.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct _LIBCPP_TEMPLATE_VIS iterator_traits; - -struct _LIBCPP_TEMPLATE_VIS input_iterator_tag {}; -struct _LIBCPP_TEMPLATE_VIS output_iterator_tag {}; -struct _LIBCPP_TEMPLATE_VIS forward_iterator_tag : public input_iterator_tag {}; -struct _LIBCPP_TEMPLATE_VIS bidirectional_iterator_tag : public forward_iterator_tag {}; -struct _LIBCPP_TEMPLATE_VIS random_access_iterator_tag : public bidirectional_iterator_tag {}; - -template -struct __iter_traits_cache { - using type = _If< __is_primary_template >::value, _Iter, iterator_traits<_Iter> >; -}; -template -using _ITER_TRAITS = typename __iter_traits_cache<_Iter>::type; - -struct __iter_concept_concept_test { - template - using _Apply = typename _ITER_TRAITS<_Iter>::iterator_concept; -}; -struct __iter_concept_category_test { - template - using _Apply = typename _ITER_TRAITS<_Iter>::iterator_category; -}; -struct __iter_concept_random_fallback { - template - using _Apply = __enable_if_t< __is_primary_template >::value, random_access_iterator_tag >; -}; - -template -struct __test_iter_concept : _IsValidExpansion<_Tester::template _Apply, _Iter>, _Tester {}; - -template -struct __iter_concept_cache { - using type = _Or< __test_iter_concept<_Iter, __iter_concept_concept_test>, - __test_iter_concept<_Iter, __iter_concept_category_test>, - __test_iter_concept<_Iter, __iter_concept_random_fallback> >; -}; - -template -using _ITER_CONCEPT = typename __iter_concept_cache<_Iter>::type::template _Apply<_Iter>; - -template -struct __has_iterator_typedefs { -private: - template - static false_type __test(...); - template - static true_type - __test(__void_t* = nullptr, - __void_t* = nullptr, - __void_t* = nullptr, - __void_t* = nullptr, - __void_t* = nullptr); - -public: - static const bool value = decltype(__test<_Tp>(nullptr, nullptr, nullptr, nullptr, nullptr))::value; -}; - -template -struct __has_iterator_category { -private: - template - static false_type __test(...); - template - static true_type __test(typename _Up::iterator_category* = nullptr); - -public: - static const bool value = decltype(__test<_Tp>(nullptr))::value; -}; - -template -struct __has_iterator_concept { -private: - template - static false_type __test(...); - template - static true_type __test(typename _Up::iterator_concept* = nullptr); - -public: - static const bool value = decltype(__test<_Tp>(nullptr))::value; -}; - -template -struct __iterator_traits {}; - -template -struct __iterator_traits_impl {}; - -template -struct __iterator_traits_impl<_Iter, true> { - typedef typename _Iter::difference_type difference_type; - typedef typename _Iter::value_type value_type; - typedef typename _Iter::pointer pointer; - typedef typename _Iter::reference reference; - typedef typename _Iter::iterator_category iterator_category; -}; - -template -struct __iterator_traits<_Iter, true> - : __iterator_traits_impl< _Iter, - is_convertible::value || - is_convertible::value > {}; - -// iterator_traits will only have the nested types if Iterator::iterator_category -// exists. Else iterator_traits will be an empty class. This is a -// conforming extension which allows some programs to compile and behave as -// the client expects instead of failing at compile time. - -template -struct _LIBCPP_TEMPLATE_VIS iterator_traits : __iterator_traits<_Iter, __has_iterator_typedefs<_Iter>::value> { - using __primary_template = iterator_traits; -}; - -template -struct _LIBCPP_TEMPLATE_VIS iterator_traits<_Tp*> { - typedef ptrdiff_t difference_type; - typedef __remove_cv_t<_Tp> value_type; - typedef _Tp* pointer; - typedef _Tp& reference; - typedef random_access_iterator_tag iterator_category; -}; - -template >::value> -struct __has_iterator_category_convertible_to : is_convertible::iterator_category, _Up> { -}; - -template -struct __has_iterator_category_convertible_to<_Tp, _Up, false> : false_type {}; - -template ::value> -struct __has_iterator_concept_convertible_to : is_convertible {}; - -template -struct __has_iterator_concept_convertible_to<_Tp, _Up, false> : false_type {}; - -template -using __has_input_iterator_category = __has_iterator_category_convertible_to<_Tp, input_iterator_tag>; - -template -using __has_forward_iterator_category = __has_iterator_category_convertible_to<_Tp, forward_iterator_tag>; - -template -using __has_bidirectional_iterator_category = __has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>; - -template -using __has_random_access_iterator_category = __has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>; - -// __libcpp_is_contiguous_iterator determines if an iterator is known by -// libc++ to be contiguous, either because it advertises itself as such -// (in C++20) or because it is a pointer type or a known trivial wrapper -// around a (possibly fancy) pointer type, such as __wrap_iter. -// Such iterators receive special "contiguous" optimizations in -// std::copy and std::sort. -// -template -struct __libcpp_is_contiguous_iterator : false_type {}; - -// Any native pointer which is an iterator is also a contiguous iterator. -template -struct __libcpp_is_contiguous_iterator<_Up*> : true_type {}; - -template -class __wrap_iter; - -template -using __has_exactly_input_iterator_category = - integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, forward_iterator_tag>::value>; - -template -using __has_exactly_forward_iterator_category = - integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>::value>; - -template -using __has_exactly_bidirectional_iterator_category = - integral_constant::value && - !__has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>::value>; - -template -using __iter_value_type = typename iterator_traits<_InputIterator>::value_type; - -template -using __iter_key_type = __remove_const_t::value_type::first_type>; - -template -using __iter_mapped_type = typename iterator_traits<_InputIterator>::value_type::second_type; - -template -using __iter_to_alloc_type = - pair::value_type::first_type, - typename iterator_traits<_InputIterator>::value_type::second_type>; - -template -using __iterator_category_type = typename iterator_traits<_Iter>::iterator_category; - -template -using __iterator_pointer_type = typename iterator_traits<_Iter>::pointer; - -template -using __iter_diff_t = typename iterator_traits<_Iter>::difference_type; - -template -using __iter_reference = typename iterator_traits<_Iter>::reference; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_ITERATOR_TRAITS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/move_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/move_iterator.h deleted file mode 100644 index c778bb3..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/move_iterator.h +++ /dev/null @@ -1,166 +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___CXX03___ITERATOR_MOVE_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_MOVE_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__type_traits/is_reference.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/remove_reference.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class _LIBCPP_TEMPLATE_VIS move_iterator { -public: - typedef _Iter iterator_type; - typedef _If< __has_random_access_iterator_category<_Iter>::value, - random_access_iterator_tag, - typename iterator_traits<_Iter>::iterator_category > - iterator_category; - typedef typename iterator_traits::value_type value_type; - typedef typename iterator_traits::difference_type difference_type; - typedef iterator_type pointer; - - typedef typename iterator_traits::reference __reference; - typedef __conditional_t::value, __libcpp_remove_reference_t<__reference>&&, __reference> - reference; - - _LIBCPP_HIDE_FROM_ABI explicit move_iterator(_Iter __i) : __current_(std::move(__i)) {} - - _LIBCPP_HIDE_FROM_ABI move_iterator& operator++() { - ++__current_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return __current_; } - - _LIBCPP_HIDE_FROM_ABI move_iterator() : __current_() {} - - template ::value && is_convertible::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI move_iterator(const move_iterator<_Up>& __u) : __current_(__u.base()) {} - - template ::value && is_convertible::value && - is_assignable<_Iter&, const _Up&>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI move_iterator& operator=(const move_iterator<_Up>& __u) { - __current_ = __u.base(); - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _Iter base() const { return __current_; } - - _LIBCPP_HIDE_FROM_ABI reference operator*() const { return static_cast(*__current_); } - _LIBCPP_HIDE_FROM_ABI reference operator[](difference_type __n) const { - return static_cast(__current_[__n]); - } - - _LIBCPP_HIDE_FROM_ABI move_iterator operator++(int) { - move_iterator __tmp(*this); - ++__current_; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI move_iterator& operator--() { - --__current_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI move_iterator operator--(int) { - move_iterator __tmp(*this); - --__current_; - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI move_iterator operator+(difference_type __n) const { return move_iterator(__current_ + __n); } - _LIBCPP_HIDE_FROM_ABI move_iterator& operator+=(difference_type __n) { - __current_ += __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI move_iterator operator-(difference_type __n) const { return move_iterator(__current_ - __n); } - _LIBCPP_HIDE_FROM_ABI move_iterator& operator-=(difference_type __n) { - __current_ -= __n; - return *this; - } - -private: - template - friend class move_iterator; - - _Iter __current_; -}; -_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(move_iterator); - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator==(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() == __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() != __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator<(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() < __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator>(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() > __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() <= __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator>=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() >= __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename move_iterator<_Iter1>::difference_type -operator-(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y) { - return __x.base() - __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI move_iterator<_Iter> -operator+(typename move_iterator<_Iter>::difference_type __n, const move_iterator<_Iter>& __x) { - return move_iterator<_Iter>(__x.base() + __n); -} - -template -inline _LIBCPP_HIDE_FROM_ABI move_iterator<_Iter> make_move_iterator(_Iter __i) { - return move_iterator<_Iter>(std::move(__i)); -} - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___ITERATOR_MOVE_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/next.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/next.h deleted file mode 100644 index 16ebaed..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/next.h +++ /dev/null @@ -1,39 +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___CXX03___ITERATOR_NEXT_H -#define _LIBCPP___CXX03___ITERATOR_NEXT_H - -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/enable_if.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _InputIter -next(_InputIter __x, typename iterator_traits<_InputIter>::difference_type __n = 1) { - // Calling `advance` with a negative value on a non-bidirectional iterator is a no-op in the current implementation. - // Note that this check duplicates the similar check in `std::advance`. - _LIBCPP_ASSERT_PEDANTIC(__n >= 0 || __has_bidirectional_iterator_category<_InputIter>::value, - "Attempt to next(it, n) with negative n on a non-bidirectional iterator"); - - std::advance(__x, __n); - return __x; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_NEXT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostream_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostream_iterator.h deleted file mode 100644 index 3e00ce2..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostream_iterator.h +++ /dev/null @@ -1,67 +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___CXX03___ITERATOR_OSTREAM_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_OSTREAM_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__fwd/ostream.h> -#include <__cxx03/__fwd/string.h> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template > -class _LIBCPP_TEMPLATE_VIS ostream_iterator : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -public: - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_ostream<_CharT, _Traits> ostream_type; - -private: - ostream_type* __out_stream_; - const char_type* __delim_; - -public: - _LIBCPP_HIDE_FROM_ABI ostream_iterator(ostream_type& __s) _NOEXCEPT - : __out_stream_(std::addressof(__s)), - __delim_(nullptr) {} - _LIBCPP_HIDE_FROM_ABI ostream_iterator(ostream_type& __s, const _CharT* __delimiter) _NOEXCEPT - : __out_stream_(std::addressof(__s)), - __delim_(__delimiter) {} - _LIBCPP_HIDE_FROM_ABI ostream_iterator& operator=(const _Tp& __value) { - *__out_stream_ << __value; - if (__delim_) - *__out_stream_ << __delim_; - return *this; - } - - _LIBCPP_HIDE_FROM_ABI ostream_iterator& operator*() { return *this; } - _LIBCPP_HIDE_FROM_ABI ostream_iterator& operator++() { return *this; } - _LIBCPP_HIDE_FROM_ABI ostream_iterator& operator++(int) { return *this; } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_OSTREAM_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostreambuf_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostreambuf_iterator.h deleted file mode 100644 index 27c8152..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/ostreambuf_iterator.h +++ /dev/null @@ -1,64 +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___CXX03___ITERATOR_OSTREAMBUF_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_OSTREAMBUF_ITERATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/cstddef> -#include <__cxx03/iosfwd> // for forward declaration of basic_streambuf - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS ostreambuf_iterator : public iterator { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -public: - typedef output_iterator_tag iterator_category; - typedef void value_type; - typedef void difference_type; - typedef void pointer; - typedef void reference; - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_streambuf<_CharT, _Traits> streambuf_type; - typedef basic_ostream<_CharT, _Traits> ostream_type; - -private: - streambuf_type* __sbuf_; - -public: - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator(ostream_type& __s) _NOEXCEPT : __sbuf_(__s.rdbuf()) {} - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator(streambuf_type* __s) _NOEXCEPT : __sbuf_(__s) {} - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator& operator=(_CharT __c) { - if (__sbuf_ && traits_type::eq_int_type(__sbuf_->sputc(__c), traits_type::eof())) - __sbuf_ = nullptr; - return *this; - } - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator& operator*() { return *this; } - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator& operator++() { return *this; } - _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator& operator++(int) { return *this; } - _LIBCPP_HIDE_FROM_ABI bool failed() const _NOEXCEPT { return __sbuf_ == nullptr; } - - template - friend _LIBCPP_HIDE_FROM_ABI ostreambuf_iterator<_Ch, _Tr> __pad_and_output( - ostreambuf_iterator<_Ch, _Tr> __s, const _Ch* __ob, const _Ch* __op, const _Ch* __oe, ios_base& __iob, _Ch __fl); -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_OSTREAMBUF_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/prev.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/prev.h deleted file mode 100644 index 32f6e66..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/prev.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___CXX03___ITERATOR_PREV_H -#define _LIBCPP___CXX03___ITERATOR_PREV_H - -#include <__cxx03/__assert> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI _InputIter -prev(_InputIter __x, typename iterator_traits<_InputIter>::difference_type __n) { - // Calling `advance` with a negative value on a non-bidirectional iterator is a no-op in the current implementation. - // Note that this check duplicates the similar check in `std::advance`. - _LIBCPP_ASSERT_PEDANTIC(__n <= 0 || __has_bidirectional_iterator_category<_InputIter>::value, - "Attempt to prev(it, n) with a positive n on a non-bidirectional iterator"); - std::advance(__x, -__n); - return __x; -} - -// LWG 3197 -// It is unclear what the implications of "BidirectionalIterator" in the standard are. -// However, calling std::prev(non-bidi-iterator) is obviously an error and we should catch it at compile time. -template ::value, int> = 0> -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _InputIter prev(_InputIter __it) { - static_assert(__has_bidirectional_iterator_category<_InputIter>::value, - "Attempt to prev(it) with a non-bidirectional iterator"); - return std::prev(std::move(__it), 1); -} - -_LIBCPP_POP_MACROS - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_PREV_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/reverse_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/reverse_iterator.h deleted file mode 100644 index b06dad1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/reverse_iterator.h +++ /dev/null @@ -1,203 +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___CXX03___ITERATOR_REVERSE_ITERATOR_H -#define _LIBCPP___CXX03___ITERATOR_REVERSE_ITERATOR_H - -#include <__cxx03/__algorithm/unwrap_iter.h> -#include <__cxx03/__config> -#include <__cxx03/__iterator/advance.h> -#include <__cxx03/__iterator/iterator.h> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__iterator/next.h> -#include <__cxx03/__iterator/prev.h> -#include <__cxx03/__iterator/segmented_iterator.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__type_traits/conditional.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_assignable.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/__type_traits/is_nothrow_constructible.h> -#include <__cxx03/__type_traits/is_pointer.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/move.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -class _LIBCPP_TEMPLATE_VIS reverse_iterator - : public iterator::iterator_category, - typename iterator_traits<_Iter>::value_type, - typename iterator_traits<_Iter>::difference_type, - typename iterator_traits<_Iter>::pointer, - typename iterator_traits<_Iter>::reference> { - _LIBCPP_SUPPRESS_DEPRECATED_POP - -private: -#ifndef _LIBCPP_ABI_NO_ITERATOR_BASES - _Iter __t_; // no longer used as of LWG #2360, not removed due to ABI break -#endif - -protected: - _Iter current; - -public: - using iterator_type = _Iter; - - using iterator_category = - _If<__has_random_access_iterator_category<_Iter>::value, - random_access_iterator_tag, - typename iterator_traits<_Iter>::iterator_category>; - using pointer = typename iterator_traits<_Iter>::pointer; - using value_type = typename iterator_traits<_Iter>::value_type; - using difference_type = typename iterator_traits<_Iter>::difference_type; - using reference = typename iterator_traits<_Iter>::reference; - -#ifndef _LIBCPP_ABI_NO_ITERATOR_BASES - _LIBCPP_HIDE_FROM_ABI reverse_iterator() : __t_(), current() {} - - _LIBCPP_HIDE_FROM_ABI explicit reverse_iterator(_Iter __x) : __t_(__x), current(__x) {} - - template ::value && is_convertible<_Up const&, _Iter>::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI reverse_iterator(const reverse_iterator<_Up>& __u) : __t_(__u.base()), current(__u.base()) {} - - template ::value && is_convertible<_Up const&, _Iter>::value && - is_assignable<_Iter&, _Up const&>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator=(const reverse_iterator<_Up>& __u) { - __t_ = current = __u.base(); - return *this; - } -#else - _LIBCPP_HIDE_FROM_ABI reverse_iterator() : current() {} - - _LIBCPP_HIDE_FROM_ABI explicit reverse_iterator(_Iter __x) : current(__x) {} - - template ::value && is_convertible<_Up const&, _Iter>::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI reverse_iterator(const reverse_iterator<_Up>& __u) : current(__u.base()) {} - - template ::value && is_convertible<_Up const&, _Iter>::value && - is_assignable<_Iter&, _Up const&>::value, - int> = 0> - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator=(const reverse_iterator<_Up>& __u) { - current = __u.base(); - return *this; - } -#endif - _LIBCPP_HIDE_FROM_ABI _Iter base() const { return current; } - _LIBCPP_HIDE_FROM_ABI reference operator*() const { - _Iter __tmp = current; - return *--__tmp; - } - - _LIBCPP_HIDE_FROM_ABI pointer operator->() const { return std::addressof(operator*()); } - - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator++() { - --current; - return *this; - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator operator++(int) { - reverse_iterator __tmp(*this); - --current; - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator--() { - ++current; - return *this; - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator operator--(int) { - reverse_iterator __tmp(*this); - ++current; - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator operator+(difference_type __n) const { - return reverse_iterator(current - __n); - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator+=(difference_type __n) { - current -= __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator operator-(difference_type __n) const { - return reverse_iterator(current + __n); - } - _LIBCPP_HIDE_FROM_ABI reverse_iterator& operator-=(difference_type __n) { - current += __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI reference operator[](difference_type __n) const { return *(*this + __n); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator==(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() == __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator<(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() > __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() != __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator>(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() < __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator>=(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() <= __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __x.base() >= __y.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI typename reverse_iterator<_Iter1>::difference_type -operator-(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) { - return __y.base() - __x.base(); -} - -template -inline _LIBCPP_HIDE_FROM_ABI reverse_iterator<_Iter> -operator+(typename reverse_iterator<_Iter>::difference_type __n, const reverse_iterator<_Iter>& __x) { - return reverse_iterator<_Iter>(__x.base() - __n); -} - -template -struct __unwrap_iter_impl >, __b> { - using _UnwrappedIter = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>())); - using _ReverseWrapper = reverse_iterator >; - - static _LIBCPP_HIDE_FROM_ABI _ReverseWrapper __rewrap(_ReverseWrapper __orig_iter, _UnwrappedIter __unwrapped_iter) { - return _ReverseWrapper( - reverse_iterator<_Iter>(__unwrap_iter_impl<_Iter>::__rewrap(__orig_iter.base().base(), __unwrapped_iter))); - } - - static _LIBCPP_HIDE_FROM_ABI _UnwrappedIter __unwrap(_ReverseWrapper __i) _NOEXCEPT { - return __unwrap_iter_impl<_Iter>::__unwrap(__i.base().base()); - } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_REVERSE_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/segmented_iterator.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/segmented_iterator.h deleted file mode 100644 index 7e353d6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/segmented_iterator.h +++ /dev/null @@ -1,79 +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___CXX03___SEGMENTED_ITERATOR_H -#define _LIBCPP___CXX03___SEGMENTED_ITERATOR_H - -// Segmented iterators are iterators over (not necessarily contiguous) sub-ranges. -// -// For example, std::deque stores its data into multiple blocks of contiguous memory, -// which are not stored contiguously themselves. The concept of segmented iterators -// allows algorithms to operate over these multi-level iterators natively, opening the -// door to various optimizations. See http://lafstern.org/matt/segmented.pdf for details. -// -// If __segmented_iterator_traits can be instantiated, the following functions and associated types must be provided: -// - Traits::__local_iterator -// The type of iterators used to iterate inside a segment. -// -// - Traits::__segment_iterator -// The type of iterators used to iterate over segments. -// Segment iterators can be forward iterators or bidirectional iterators, depending on the -// underlying data structure. -// -// - static __segment_iterator Traits::__segment(It __it) -// Returns an iterator to the segment that the provided iterator is in. -// -// - static __local_iterator Traits::__local(It __it) -// Returns the local iterator pointing to the element that the provided iterator points to. -// -// - static __local_iterator Traits::__begin(__segment_iterator __it) -// Returns the local iterator to the beginning of the segment that the provided iterator is pointing into. -// -// - static __local_iterator Traits::__end(__segment_iterator __it) -// Returns the one-past-the-end local iterator to the segment that the provided iterator is pointing into. -// -// - static It Traits::__compose(__segment_iterator, __local_iterator) -// Returns the iterator composed of the segment iterator and local iterator. - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __segmented_iterator_traits; -/* exposition-only: -{ - using __segment_iterator = ...; - using __local_iterator = ...; - - static __segment_iterator __segment(_Iterator); - static __local_iterator __local(_Iterator); - static __local_iterator __begin(__segment_iterator); - static __local_iterator __end(__segment_iterator); - static _Iterator __compose(__segment_iterator, __local_iterator); -}; -*/ - -template -struct __has_specialization : false_type {}; - -template -struct __has_specialization<_Tp, sizeof(_Tp) * 0> : true_type {}; - -template -using __is_segmented_iterator = __has_specialization<__segmented_iterator_traits<_Iterator> >; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___SEGMENTED_ITERATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/wrap_iter.h b/third_party/libcxx/include/c++/v1/__cxx03/__iterator/wrap_iter.h deleted file mode 100644 index 22c9e2d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__iterator/wrap_iter.h +++ /dev/null @@ -1,188 +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___CXX03___ITERATOR_WRAP_ITER_H -#define _LIBCPP___CXX03___ITERATOR_WRAP_ITER_H - -#include <__cxx03/__config> -#include <__cxx03/__iterator/iterator_traits.h> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_convertible.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __wrap_iter { -public: - typedef _Iter iterator_type; - typedef typename iterator_traits::value_type value_type; - typedef typename iterator_traits::difference_type difference_type; - typedef typename iterator_traits::pointer pointer; - typedef typename iterator_traits::reference reference; - typedef typename iterator_traits::iterator_category iterator_category; - -private: - iterator_type __i_; - -public: - _LIBCPP_HIDE_FROM_ABI __wrap_iter() _NOEXCEPT : __i_() {} - template ::value, int> = 0> - _LIBCPP_HIDE_FROM_ABI __wrap_iter(const __wrap_iter<_Up>& __u) _NOEXCEPT : __i_(__u.base()) {} - _LIBCPP_HIDE_FROM_ABI reference operator*() const _NOEXCEPT { return *__i_; } - _LIBCPP_HIDE_FROM_ABI pointer operator->() const _NOEXCEPT { return std::__to_address(__i_); } - _LIBCPP_HIDE_FROM_ABI __wrap_iter& operator++() _NOEXCEPT { - ++__i_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI __wrap_iter operator++(int) _NOEXCEPT { - __wrap_iter __tmp(*this); - ++(*this); - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI __wrap_iter& operator--() _NOEXCEPT { - --__i_; - return *this; - } - _LIBCPP_HIDE_FROM_ABI __wrap_iter operator--(int) _NOEXCEPT { - __wrap_iter __tmp(*this); - --(*this); - return __tmp; - } - _LIBCPP_HIDE_FROM_ABI __wrap_iter operator+(difference_type __n) const _NOEXCEPT { - __wrap_iter __w(*this); - __w += __n; - return __w; - } - _LIBCPP_HIDE_FROM_ABI __wrap_iter& operator+=(difference_type __n) _NOEXCEPT { - __i_ += __n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI __wrap_iter operator-(difference_type __n) const _NOEXCEPT { return *this + (-__n); } - _LIBCPP_HIDE_FROM_ABI __wrap_iter& operator-=(difference_type __n) _NOEXCEPT { - *this += -__n; - return *this; - } - _LIBCPP_HIDE_FROM_ABI reference operator[](difference_type __n) const _NOEXCEPT { return __i_[__n]; } - - _LIBCPP_HIDE_FROM_ABI iterator_type base() const _NOEXCEPT { return __i_; } - -private: - _LIBCPP_HIDE_FROM_ABI explicit __wrap_iter(iterator_type __x) _NOEXCEPT : __i_(__x) {} - - template - friend class __wrap_iter; - template - friend class basic_string; - template - friend class basic_string_view; - template - friend class _LIBCPP_TEMPLATE_VIS vector; - template - friend class _LIBCPP_TEMPLATE_VIS span; - template - friend struct array; -}; - -template -_LIBCPP_HIDE_FROM_ABI bool operator==(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return __x.base() == __y.base(); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator==(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return __x.base() == __y.base(); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return __x.base() < __y.base(); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return __x.base() < __y.base(); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return !(__x == __y); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return !(__x == __y); -} - -// TODO(mordante) disable these overloads in the LLVM 20 release. -template -_LIBCPP_HIDE_FROM_ABI bool operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return __y < __x; -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return __y < __x; -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return !(__x < __y); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return !(__x < __y); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT { - return !(__y < __x); -} - -template -_LIBCPP_HIDE_FROM_ABI bool operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return !(__y < __x); -} - -template -_LIBCPP_HIDE_FROM_ABI typename __wrap_iter<_Iter1>::difference_type -operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT { - return __x.base() - __y.base(); -} - -template -_LIBCPP_HIDE_FROM_ABI __wrap_iter<_Iter1> -operator+(typename __wrap_iter<_Iter1>::difference_type __n, __wrap_iter<_Iter1> __x) _NOEXCEPT { - __x += __n; - return __x; -} - -template -struct __libcpp_is_contiguous_iterator<__wrap_iter<_It> > : true_type {}; - -template -struct _LIBCPP_TEMPLATE_VIS pointer_traits<__wrap_iter<_It> > { - typedef __wrap_iter<_It> pointer; - typedef typename pointer_traits<_It>::element_type element_type; - typedef typename pointer_traits<_It>::difference_type difference_type; - - _LIBCPP_HIDE_FROM_ABI static element_type* to_address(pointer __w) _NOEXCEPT { return std::__to_address(__w.base()); } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___ITERATOR_WRAP_ITER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale b/third_party/libcxx/include/c++/v1/__cxx03/__locale deleted file mode 100644 index e9cbc1f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale +++ /dev/null @@ -1,1495 +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___CXX03___LOCALE -#define _LIBCPP___CXX03___LOCALE - -#include <__cxx03/__config> -#include <__cxx03/__locale_dir/locale_base_api.h> -#include <__cxx03/__memory/shared_ptr.h> // __shared_count -#include <__cxx03/__mutex/once_flag.h> -#include <__cxx03/__type_traits/make_unsigned.h> -#include <__cxx03/__utility/no_destroy.h> -#include <__cxx03/__utility/private_constructor_tag.h> -#include <__cxx03/cctype> -#include <__cxx03/clocale> -#include <__cxx03/cstdint> -#include <__cxx03/cstdlib> -#include <__cxx03/string> - -// Some platforms require more includes than others. Keep the includes on all plaforms for now. -#include <__cxx03/cstddef> -#include <__cxx03/cstring> - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -# include <__cxx03/cwchar> -#else -# include <__cxx03/__std_mbstate_t.h> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -class _LIBCPP_EXPORTED_FROM_ABI locale; - -template -_LIBCPP_HIDE_FROM_ABI bool has_facet(const locale&) _NOEXCEPT; - -template -_LIBCPP_HIDE_FROM_ABI const _Facet& use_facet(const locale&); - -class _LIBCPP_EXPORTED_FROM_ABI locale { -public: - // locale is essentially a shared_ptr that doesn't support weak_ptrs and never got a move constructor. - using __trivially_relocatable = locale; - - // types: - class _LIBCPP_EXPORTED_FROM_ABI facet; - class _LIBCPP_EXPORTED_FROM_ABI id; - - typedef int category; - - static const category // values assigned here are for exposition only - none = 0, - collate = LC_COLLATE_MASK, ctype = LC_CTYPE_MASK, monetary = LC_MONETARY_MASK, numeric = LC_NUMERIC_MASK, - time = LC_TIME_MASK, messages = LC_MESSAGES_MASK, all = collate | ctype | monetary | numeric | time | messages; - - // construct/copy/destroy: - locale() _NOEXCEPT; - locale(const locale&) _NOEXCEPT; - explicit locale(const char*); - explicit locale(const string&); - locale(const locale&, const char*, category); - locale(const locale&, const string&, category); - template - _LIBCPP_HIDE_FROM_ABI locale(const locale&, _Facet*); - locale(const locale&, const locale&, category); - - ~locale(); - - const locale& operator=(const locale&) _NOEXCEPT; - - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS locale combine(const locale&) const; - - // locale operations: - string name() const; - bool operator==(const locale&) const; - _LIBCPP_HIDE_FROM_ABI bool operator!=(const locale& __y) const { return !(*this == __y); } - template - _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS bool - operator()(const basic_string<_CharT, _Traits, _Allocator>&, const basic_string<_CharT, _Traits, _Allocator>&) const; - - // global locale objects: - static locale global(const locale&); - static const locale& classic(); - -private: - class __imp; - __imp* __locale_; - - template - friend struct __no_destroy; - _LIBCPP_HIDE_FROM_ABI explicit locale(__private_constructor_tag, __imp* __loc) : __locale_(__loc) {} - - void __install_ctor(const locale&, facet*, long); - static locale& __global(); - bool has_facet(id&) const; - const facet* use_facet(id&) const; - - template - friend bool has_facet(const locale&) _NOEXCEPT; - template - friend const _Facet& use_facet(const locale&); -}; - -class _LIBCPP_EXPORTED_FROM_ABI locale::facet : public __shared_count { -protected: - _LIBCPP_HIDE_FROM_ABI explicit facet(size_t __refs = 0) : __shared_count(static_cast(__refs) - 1) {} - - ~facet() override; - - // facet(const facet&) = delete; // effectively done in __shared_count - // void operator=(const facet&) = delete; - -private: - void __on_zero_shared() _NOEXCEPT override; -}; - -class _LIBCPP_EXPORTED_FROM_ABI locale::id { - once_flag __flag_; - int32_t __id_; - - static int32_t __next_id; - -public: - _LIBCPP_HIDE_FROM_ABI id() : __id_(0) {} - void operator=(const id&) = delete; - id(const id&) = delete; - -public: // only needed for tests - long __get(); - - friend class locale; - friend class locale::__imp; -}; - -template -inline _LIBCPP_HIDE_FROM_ABI locale::locale(const locale& __other, _Facet* __f) { - __install_ctor(__other, __f, __f ? __f->id.__get() : 0); -} - -template -locale locale::combine(const locale& __other) const { - if (!std::has_facet<_Facet>(__other)) - __throw_runtime_error("locale::combine: locale missing facet"); - - return locale(*this, &const_cast<_Facet&>(std::use_facet<_Facet>(__other))); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool has_facet(const locale& __l) _NOEXCEPT { - return __l.has_facet(_Facet::id); -} - -template -inline _LIBCPP_HIDE_FROM_ABI const _Facet& use_facet(const locale& __l) { - return static_cast(*__l.use_facet(_Facet::id)); -} - -// template class collate; - -template -class _LIBCPP_TEMPLATE_VIS collate : public locale::facet { -public: - typedef _CharT char_type; - typedef basic_string string_type; - - _LIBCPP_HIDE_FROM_ABI explicit collate(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI int - compare(const char_type* __lo1, const char_type* __hi1, const char_type* __lo2, const char_type* __hi2) const { - return do_compare(__lo1, __hi1, __lo2, __hi2); - } - - // FIXME(EricWF): The _LIBCPP_ALWAYS_INLINE is needed on Windows to work - // around a dllimport bug that expects an external instantiation. - _LIBCPP_HIDE_FROM_ABI _LIBCPP_ALWAYS_INLINE string_type - transform(const char_type* __lo, const char_type* __hi) const { - return do_transform(__lo, __hi); - } - - _LIBCPP_HIDE_FROM_ABI long hash(const char_type* __lo, const char_type* __hi) const { return do_hash(__lo, __hi); } - - static locale::id id; - -protected: - ~collate() override; - virtual int - do_compare(const char_type* __lo1, const char_type* __hi1, const char_type* __lo2, const char_type* __hi2) const; - virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const { - return string_type(__lo, __hi); - } - virtual long do_hash(const char_type* __lo, const char_type* __hi) const; -}; - -template -locale::id collate<_CharT>::id; - -template -collate<_CharT>::~collate() {} - -template -int collate<_CharT>::do_compare( - const char_type* __lo1, const char_type* __hi1, const char_type* __lo2, const char_type* __hi2) const { - for (; __lo2 != __hi2; ++__lo1, ++__lo2) { - if (__lo1 == __hi1 || *__lo1 < *__lo2) - return -1; - if (*__lo2 < *__lo1) - return 1; - } - return __lo1 != __hi1; -} - -template -long collate<_CharT>::do_hash(const char_type* __lo, const char_type* __hi) const { - size_t __h = 0; - const size_t __sr = __CHAR_BIT__ * sizeof(size_t) - 8; - const size_t __mask = size_t(0xF) << (__sr + 4); - for (const char_type* __p = __lo; __p != __hi; ++__p) { - __h = (__h << 4) + static_cast(*__p); - size_t __g = __h & __mask; - __h ^= __g | (__g >> __sr); - } - return static_cast(__h); -} - -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS collate; -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS collate; -#endif - -// template class collate_byname; - -template -class _LIBCPP_TEMPLATE_VIS collate_byname; - -template <> -class _LIBCPP_EXPORTED_FROM_ABI collate_byname : public collate { - locale_t __l_; - -public: - typedef char char_type; - typedef basic_string string_type; - - explicit collate_byname(const char* __n, size_t __refs = 0); - explicit collate_byname(const string& __n, size_t __refs = 0); - -protected: - ~collate_byname() override; - int do_compare( - const char_type* __lo1, const char_type* __hi1, const char_type* __lo2, const char_type* __hi2) const override; - string_type do_transform(const char_type* __lo, const char_type* __hi) const override; -}; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI collate_byname : public collate { - locale_t __l_; - -public: - typedef wchar_t char_type; - typedef basic_string string_type; - - explicit collate_byname(const char* __n, size_t __refs = 0); - explicit collate_byname(const string& __n, size_t __refs = 0); - -protected: - ~collate_byname() override; - - int do_compare( - const char_type* __lo1, const char_type* __hi1, const char_type* __lo2, const char_type* __hi2) const override; - string_type do_transform(const char_type* __lo, const char_type* __hi) const override; -}; -#endif - -template -bool locale::operator()(const basic_string<_CharT, _Traits, _Allocator>& __x, - const basic_string<_CharT, _Traits, _Allocator>& __y) const { - return std::use_facet >(*this).compare( - __x.data(), __x.data() + __x.size(), __y.data(), __y.data() + __y.size()) < 0; -} - -// template class ctype - -class _LIBCPP_EXPORTED_FROM_ABI ctype_base { -public: -#if defined(_LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE) - typedef unsigned long mask; - static const mask space = 1 << 0; - static const mask print = 1 << 1; - static const mask cntrl = 1 << 2; - static const mask upper = 1 << 3; - static const mask lower = 1 << 4; - static const mask alpha = 1 << 5; - static const mask digit = 1 << 6; - static const mask punct = 1 << 7; - static const mask xdigit = 1 << 8; - static const mask blank = 1 << 9; -# if defined(__BIONIC__) - // Historically this was a part of regex_traits rather than ctype_base. The - // historical value of the constant is preserved for ABI compatibility. - static const mask __regex_word = 0x8000; -# else - static const mask __regex_word = 1 << 10; -# endif // defined(__BIONIC__) -#elif defined(__GLIBC__) - typedef unsigned short mask; - static const mask space = _ISspace; - static const mask print = _ISprint; - static const mask cntrl = _IScntrl; - static const mask upper = _ISupper; - static const mask lower = _ISlower; - static const mask alpha = _ISalpha; - static const mask digit = _ISdigit; - static const mask punct = _ISpunct; - static const mask xdigit = _ISxdigit; - static const mask blank = _ISblank; -# if defined(__mips__) || (BYTE_ORDER == BIG_ENDIAN) - static const mask __regex_word = static_cast(_ISbit(15)); -# else - static const mask __regex_word = 0x80; -# endif -#elif defined(_LIBCPP_MSVCRT_LIKE) - typedef unsigned short mask; - static const mask space = _SPACE; - static const mask print = _BLANK | _PUNCT | _ALPHA | _DIGIT; - static const mask cntrl = _CONTROL; - static const mask upper = _UPPER; - static const mask lower = _LOWER; - static const mask alpha = _ALPHA; - static const mask digit = _DIGIT; - static const mask punct = _PUNCT; - static const mask xdigit = _HEX; - static const mask blank = _BLANK; - static const mask __regex_word = 0x4000; // 0x8000 and 0x0100 and 0x00ff are used -# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT -# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA -#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) -# ifdef __APPLE__ - typedef __uint32_t mask; -# elif defined(__FreeBSD__) - typedef unsigned long mask; -# elif defined(__NetBSD__) - typedef unsigned short mask; -# endif - static const mask space = _CTYPE_S; - static const mask print = _CTYPE_R; - static const mask cntrl = _CTYPE_C; - static const mask upper = _CTYPE_U; - static const mask lower = _CTYPE_L; - static const mask alpha = _CTYPE_A; - static const mask digit = _CTYPE_D; - static const mask punct = _CTYPE_P; - static const mask xdigit = _CTYPE_X; - -# if defined(__NetBSD__) - static const mask blank = _CTYPE_BL; - // NetBSD defines classes up to 0x2000 - // see sys/ctype_bits.h, _CTYPE_Q - static const mask __regex_word = 0x8000; -# else - static const mask blank = _CTYPE_B; - static const mask __regex_word = 0x80; -# endif -#elif defined(_AIX) - typedef unsigned int mask; - static const mask space = _ISSPACE; - static const mask print = _ISPRINT; - static const mask cntrl = _ISCNTRL; - static const mask upper = _ISUPPER; - static const mask lower = _ISLOWER; - static const mask alpha = _ISALPHA; - static const mask digit = _ISDIGIT; - static const mask punct = _ISPUNCT; - static const mask xdigit = _ISXDIGIT; - static const mask blank = _ISBLANK; - static const mask __regex_word = 0x8000; -#elif _LIBCPP_LIBC_NEWLIB - // Same type as Newlib's _ctype_ array in newlib/libc/include/ctype.h. - typedef char mask; - // In case char is signed, static_cast is needed to avoid warning on - // positive value becomming negative. - static const mask space = static_cast(_S); - static const mask print = static_cast(_P | _U | _L | _N | _B); - static const mask cntrl = static_cast(_C); - static const mask upper = static_cast(_U); - static const mask lower = static_cast(_L); - static const mask alpha = static_cast(_U | _L); - static const mask digit = static_cast(_N); - static const mask punct = static_cast(_P); - static const mask xdigit = static_cast(_X | _N); - static const mask blank = static_cast(_B); - // mask is already fully saturated, use a different type in regex_type_traits. - static const unsigned short __regex_word = 0x100; -# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT -# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA -# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_XDIGIT -#elif defined(__MVS__) -# if defined(__NATIVE_ASCII_F) - typedef unsigned int mask; - static const mask space = _ISSPACE_A; - static const mask print = _ISPRINT_A; - static const mask cntrl = _ISCNTRL_A; - static const mask upper = _ISUPPER_A; - static const mask lower = _ISLOWER_A; - static const mask alpha = _ISALPHA_A; - static const mask digit = _ISDIGIT_A; - static const mask punct = _ISPUNCT_A; - static const mask xdigit = _ISXDIGIT_A; - static const mask blank = _ISBLANK_A; -# else - typedef unsigned short mask; - static const mask space = __ISSPACE; - static const mask print = __ISPRINT; - static const mask cntrl = __ISCNTRL; - static const mask upper = __ISUPPER; - static const mask lower = __ISLOWER; - static const mask alpha = __ISALPHA; - static const mask digit = __ISDIGIT; - static const mask punct = __ISPUNCT; - static const mask xdigit = __ISXDIGIT; - static const mask blank = __ISBLANK; -# endif - static const mask __regex_word = 0x8000; -#else -# error unknown rune table for this platform -- do you mean to define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE? -#endif - static const mask alnum = alpha | digit; - static const mask graph = alnum | punct; - - _LIBCPP_HIDE_FROM_ABI ctype_base() {} - - static_assert((__regex_word & ~(std::make_unsigned::type)(space | print | cntrl | upper | lower | alpha | - digit | punct | xdigit | blank)) == __regex_word, - "__regex_word can't overlap other bits"); -}; - -template -class _LIBCPP_TEMPLATE_VIS ctype; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI ctype : public locale::facet, public ctype_base { -public: - typedef wchar_t char_type; - - _LIBCPP_HIDE_FROM_ABI explicit ctype(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI bool is(mask __m, char_type __c) const { return do_is(__m, __c); } - - _LIBCPP_HIDE_FROM_ABI const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const { - return do_is(__low, __high, __vec); - } - - _LIBCPP_HIDE_FROM_ABI const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const { - return do_scan_is(__m, __low, __high); - } - - _LIBCPP_HIDE_FROM_ABI const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const { - return do_scan_not(__m, __low, __high); - } - - _LIBCPP_HIDE_FROM_ABI char_type toupper(char_type __c) const { return do_toupper(__c); } - - _LIBCPP_HIDE_FROM_ABI const char_type* toupper(char_type* __low, const char_type* __high) const { - return do_toupper(__low, __high); - } - - _LIBCPP_HIDE_FROM_ABI char_type tolower(char_type __c) const { return do_tolower(__c); } - - _LIBCPP_HIDE_FROM_ABI const char_type* tolower(char_type* __low, const char_type* __high) const { - return do_tolower(__low, __high); - } - - _LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const { return do_widen(__c); } - - _LIBCPP_HIDE_FROM_ABI const char* widen(const char* __low, const char* __high, char_type* __to) const { - return do_widen(__low, __high, __to); - } - - _LIBCPP_HIDE_FROM_ABI char narrow(char_type __c, char __dfault) const { return do_narrow(__c, __dfault); } - - _LIBCPP_HIDE_FROM_ABI const char_type* - narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const { - return do_narrow(__low, __high, __dfault, __to); - } - - static locale::id id; - -protected: - ~ctype() override; - virtual bool do_is(mask __m, char_type __c) const; - virtual const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const; - virtual const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const; - virtual const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const; - virtual char_type do_toupper(char_type) const; - virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; - virtual char_type do_tolower(char_type) const; - virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; - virtual char_type do_widen(char) const; - virtual const char* do_widen(const char* __low, const char* __high, char_type* __dest) const; - virtual char do_narrow(char_type, char __dfault) const; - virtual const char_type* - do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const; -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -template <> -class _LIBCPP_EXPORTED_FROM_ABI ctype : public locale::facet, public ctype_base { - const mask* __tab_; - bool __del_; - -public: - typedef char char_type; - - explicit ctype(const mask* __tab = nullptr, bool __del = false, size_t __refs = 0); - - _LIBCPP_HIDE_FROM_ABI bool is(mask __m, char_type __c) const { - return isascii(__c) ? (__tab_[static_cast(__c)] & __m) != 0 : false; - } - - _LIBCPP_HIDE_FROM_ABI const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const { - for (; __low != __high; ++__low, ++__vec) - *__vec = isascii(*__low) ? __tab_[static_cast(*__low)] : 0; - return __low; - } - - _LIBCPP_HIDE_FROM_ABI const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const { - for (; __low != __high; ++__low) - if (isascii(*__low) && (__tab_[static_cast(*__low)] & __m)) - break; - return __low; - } - - _LIBCPP_HIDE_FROM_ABI const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const { - for (; __low != __high; ++__low) - if (!isascii(*__low) || !(__tab_[static_cast(*__low)] & __m)) - break; - return __low; - } - - _LIBCPP_HIDE_FROM_ABI char_type toupper(char_type __c) const { return do_toupper(__c); } - - _LIBCPP_HIDE_FROM_ABI const char_type* toupper(char_type* __low, const char_type* __high) const { - return do_toupper(__low, __high); - } - - _LIBCPP_HIDE_FROM_ABI char_type tolower(char_type __c) const { return do_tolower(__c); } - - _LIBCPP_HIDE_FROM_ABI const char_type* tolower(char_type* __low, const char_type* __high) const { - return do_tolower(__low, __high); - } - - _LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const { return do_widen(__c); } - - _LIBCPP_HIDE_FROM_ABI const char* widen(const char* __low, const char* __high, char_type* __to) const { - return do_widen(__low, __high, __to); - } - - _LIBCPP_HIDE_FROM_ABI char narrow(char_type __c, char __dfault) const { return do_narrow(__c, __dfault); } - - _LIBCPP_HIDE_FROM_ABI const char* - narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const { - return do_narrow(__low, __high, __dfault, __to); - } - - static locale::id id; - -#ifdef _CACHED_RUNES - static const size_t table_size = _CACHED_RUNES; -#else - static const size_t table_size = 256; -#endif - _LIBCPP_HIDE_FROM_ABI const mask* table() const _NOEXCEPT { return __tab_; } - static const mask* classic_table() _NOEXCEPT; - -protected: - ~ctype() override; - virtual char_type do_toupper(char_type __c) const; - virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; - virtual char_type do_tolower(char_type __c) const; - virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; - virtual char_type do_widen(char __c) const; - virtual const char* do_widen(const char* __low, const char* __high, char_type* __to) const; - virtual char do_narrow(char_type __c, char __dfault) const; - virtual const char* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const; -}; - -// template class ctype_byname; - -template -class _LIBCPP_TEMPLATE_VIS ctype_byname; - -template <> -class _LIBCPP_EXPORTED_FROM_ABI ctype_byname : public ctype { - locale_t __l_; - -public: - explicit ctype_byname(const char*, size_t = 0); - explicit ctype_byname(const string&, size_t = 0); - -protected: - ~ctype_byname() override; - char_type do_toupper(char_type) const override; - const char_type* do_toupper(char_type* __low, const char_type* __high) const override; - char_type do_tolower(char_type) const override; - const char_type* do_tolower(char_type* __low, const char_type* __high) const override; -}; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI ctype_byname : public ctype { - locale_t __l_; - -public: - explicit ctype_byname(const char*, size_t = 0); - explicit ctype_byname(const string&, size_t = 0); - -protected: - ~ctype_byname() override; - bool do_is(mask __m, char_type __c) const override; - const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const override; - const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const override; - const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const override; - char_type do_toupper(char_type) const override; - const char_type* do_toupper(char_type* __low, const char_type* __high) const override; - char_type do_tolower(char_type) const override; - const char_type* do_tolower(char_type* __low, const char_type* __high) const override; - char_type do_widen(char) const override; - const char* do_widen(const char* __low, const char* __high, char_type* __dest) const override; - char do_narrow(char_type, char __dfault) const override; - const char_type* - do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const override; -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -template -inline _LIBCPP_HIDE_FROM_ABI bool isspace(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::space, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isprint(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::print, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool iscntrl(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::cntrl, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isupper(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::upper, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool islower(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::lower, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isalpha(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::alpha, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isdigit(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::digit, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool ispunct(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::punct, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isxdigit(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::xdigit, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isalnum(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::alnum, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool isgraph(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::graph, __c); -} - -template -_LIBCPP_HIDE_FROM_ABI bool isblank(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).is(ctype_base::blank, __c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _CharT toupper(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).toupper(__c); -} - -template -inline _LIBCPP_HIDE_FROM_ABI _CharT tolower(_CharT __c, const locale& __loc) { - return std::use_facet >(__loc).tolower(__c); -} - -// codecvt_base - -class _LIBCPP_EXPORTED_FROM_ABI codecvt_base { -public: - _LIBCPP_HIDE_FROM_ABI codecvt_base() {} - enum result { ok, partial, error, noconv }; -}; - -// template class codecvt; - -template -class _LIBCPP_TEMPLATE_VIS codecvt; - -// template <> class codecvt - -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { -public: - typedef char intern_type; - typedef char extern_type; - typedef mbstate_t state_type; - - _LIBCPP_HIDE_FROM_ABI explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - _LIBCPP_HIDE_FROM_ABI explicit codecvt(const char*, size_t __refs = 0) : locale::facet(__refs) {} - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; - -// template <> class codecvt - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { - locale_t __l_; - -public: - typedef wchar_t intern_type; - typedef char extern_type; - typedef mbstate_t state_type; - - explicit codecvt(size_t __refs = 0); - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - explicit codecvt(const char*, size_t __refs = 0); - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -// template <> class codecvt // deprecated in C++20 - -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { -public: - typedef char16_t intern_type; - typedef char extern_type; - typedef mbstate_t state_type; - - _LIBCPP_HIDE_FROM_ABI explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - _LIBCPP_HIDE_FROM_ABI explicit codecvt(const char*, size_t __refs = 0) : locale::facet(__refs) {} - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; - -#ifndef _LIBCPP_HAS_NO_CHAR8_T - -// template <> class codecvt // C++20 - -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { -public: - typedef char16_t intern_type; - typedef char8_t extern_type; - typedef mbstate_t state_type; - - _LIBCPP_HIDE_FROM_ABI explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - _LIBCPP_HIDE_FROM_ABI explicit codecvt(const char*, size_t __refs = 0) : locale::facet(__refs) {} - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; - -#endif - -// template <> class codecvt // deprecated in C++20 - -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { -public: - typedef char32_t intern_type; - typedef char extern_type; - typedef mbstate_t state_type; - - _LIBCPP_HIDE_FROM_ABI explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - _LIBCPP_HIDE_FROM_ABI explicit codecvt(const char*, size_t __refs = 0) : locale::facet(__refs) {} - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; - -#ifndef _LIBCPP_HAS_NO_CHAR8_T - -// template <> class codecvt // C++20 - -template <> -class _LIBCPP_EXPORTED_FROM_ABI codecvt : public locale::facet, public codecvt_base { -public: - typedef char32_t intern_type; - typedef char8_t extern_type; - typedef mbstate_t state_type; - - _LIBCPP_HIDE_FROM_ABI explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - - _LIBCPP_HIDE_FROM_ABI result - out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const { - return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const { - return do_unshift(__st, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI result - in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const { - return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); - } - - _LIBCPP_HIDE_FROM_ABI int encoding() const _NOEXCEPT { return do_encoding(); } - - _LIBCPP_HIDE_FROM_ABI bool always_noconv() const _NOEXCEPT { return do_always_noconv(); } - - _LIBCPP_HIDE_FROM_ABI int - length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const { - return do_length(__st, __frm, __end, __mx); - } - - _LIBCPP_HIDE_FROM_ABI int max_length() const _NOEXCEPT { return do_max_length(); } - - static locale::id id; - -protected: - _LIBCPP_HIDE_FROM_ABI explicit codecvt(const char*, size_t __refs = 0) : locale::facet(__refs) {} - - ~codecvt() override; - - virtual result - do_out(state_type& __st, - const intern_type* __frm, - const intern_type* __frm_end, - const intern_type*& __frm_nxt, - extern_type* __to, - extern_type* __to_end, - extern_type*& __to_nxt) const; - virtual result - do_in(state_type& __st, - const extern_type* __frm, - const extern_type* __frm_end, - const extern_type*& __frm_nxt, - intern_type* __to, - intern_type* __to_end, - intern_type*& __to_nxt) const; - virtual result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; - virtual int do_encoding() const _NOEXCEPT; - virtual bool do_always_noconv() const _NOEXCEPT; - virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; - virtual int do_max_length() const _NOEXCEPT; -}; - -#endif - -// template class codecvt_byname - -template -class _LIBCPP_TEMPLATE_VIS codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> { -public: - _LIBCPP_HIDE_FROM_ABI explicit codecvt_byname(const char* __nm, size_t __refs = 0) - : codecvt<_InternT, _ExternT, _StateT>(__nm, __refs) {} - _LIBCPP_HIDE_FROM_ABI explicit codecvt_byname(const string& __nm, size_t __refs = 0) - : codecvt<_InternT, _ExternT, _StateT>(__nm.c_str(), __refs) {} - -protected: - ~codecvt_byname() override; -}; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -codecvt_byname<_InternT, _ExternT, _StateT>::~codecvt_byname() {} -_LIBCPP_SUPPRESS_DEPRECATED_POP - -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; -#endif -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; // deprecated in C++20 -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; // deprecated in C++20 -#ifndef _LIBCPP_HAS_NO_CHAR8_T -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; // C++20 -extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname; // C++20 -#endif - -template -struct __narrow_to_utf8 { - template - _OutputIterator operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const; -}; - -template <> -struct __narrow_to_utf8<8> { - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const { - for (; __wb < __we; ++__wb, ++__s) - *__s = *__wb; - return __s; - } -}; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template <> -struct _LIBCPP_EXPORTED_FROM_ABI __narrow_to_utf8<16> : public codecvt { - _LIBCPP_HIDE_FROM_ABI __narrow_to_utf8() : codecvt(1) {} - _LIBCPP_SUPPRESS_DEPRECATED_POP - - ~__narrow_to_utf8() override; - - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const { - result __r = ok; - mbstate_t __mb; - while (__wb < __we && __r != error) { - const int __sz = 32; - char __buf[__sz]; - char* __bn; - const char16_t* __wn = (const char16_t*)__wb; - __r = do_out(__mb, (const char16_t*)__wb, (const char16_t*)__we, __wn, __buf, __buf + __sz, __bn); - if (__r == codecvt_base::error || __wn == (const char16_t*)__wb) - __throw_runtime_error("locale not supported"); - for (const char* __p = __buf; __p < __bn; ++__p, ++__s) - *__s = *__p; - __wb = (const _CharT*)__wn; - } - return __s; - } -}; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template <> -struct _LIBCPP_EXPORTED_FROM_ABI __narrow_to_utf8<32> : public codecvt { - _LIBCPP_HIDE_FROM_ABI __narrow_to_utf8() : codecvt(1) {} - _LIBCPP_SUPPRESS_DEPRECATED_POP - - ~__narrow_to_utf8() override; - - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const { - result __r = ok; - mbstate_t __mb; - while (__wb < __we && __r != error) { - const int __sz = 32; - char __buf[__sz]; - char* __bn; - const char32_t* __wn = (const char32_t*)__wb; - __r = do_out(__mb, (const char32_t*)__wb, (const char32_t*)__we, __wn, __buf, __buf + __sz, __bn); - if (__r == codecvt_base::error || __wn == (const char32_t*)__wb) - __throw_runtime_error("locale not supported"); - for (const char* __p = __buf; __p < __bn; ++__p, ++__s) - *__s = *__p; - __wb = (const _CharT*)__wn; - } - return __s; - } -}; - -template -struct __widen_from_utf8 { - template - _OutputIterator operator()(_OutputIterator __s, const char* __nb, const char* __ne) const; -}; - -template <> -struct __widen_from_utf8<8> { - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const char* __nb, const char* __ne) const { - for (; __nb < __ne; ++__nb, ++__s) - *__s = *__nb; - return __s; - } -}; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template <> -struct _LIBCPP_EXPORTED_FROM_ABI __widen_from_utf8<16> : public codecvt { - _LIBCPP_HIDE_FROM_ABI __widen_from_utf8() : codecvt(1) {} - _LIBCPP_SUPPRESS_DEPRECATED_POP - - ~__widen_from_utf8() override; - - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const char* __nb, const char* __ne) const { - result __r = ok; - mbstate_t __mb; - while (__nb < __ne && __r != error) { - const int __sz = 32; - char16_t __buf[__sz]; - char16_t* __bn; - const char* __nn = __nb; - __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb + __sz : __ne, __nn, __buf, __buf + __sz, __bn); - if (__r == codecvt_base::error || __nn == __nb) - __throw_runtime_error("locale not supported"); - for (const char16_t* __p = __buf; __p < __bn; ++__p, ++__s) - *__s = *__p; - __nb = __nn; - } - return __s; - } -}; - -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template <> -struct _LIBCPP_EXPORTED_FROM_ABI __widen_from_utf8<32> : public codecvt { - _LIBCPP_HIDE_FROM_ABI __widen_from_utf8() : codecvt(1) {} - _LIBCPP_SUPPRESS_DEPRECATED_POP - - ~__widen_from_utf8() override; - - template - _LIBCPP_HIDE_FROM_ABI _OutputIterator operator()(_OutputIterator __s, const char* __nb, const char* __ne) const { - result __r = ok; - mbstate_t __mb; - while (__nb < __ne && __r != error) { - const int __sz = 32; - char32_t __buf[__sz]; - char32_t* __bn; - const char* __nn = __nb; - __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb + __sz : __ne, __nn, __buf, __buf + __sz, __bn); - if (__r == codecvt_base::error || __nn == __nb) - __throw_runtime_error("locale not supported"); - for (const char32_t* __p = __buf; __p < __bn; ++__p, ++__s) - *__s = *__p; - __nb = __nn; - } - return __s; - } -}; - -// template class numpunct - -template -class _LIBCPP_TEMPLATE_VIS numpunct; - -template <> -class _LIBCPP_EXPORTED_FROM_ABI numpunct : public locale::facet { -public: - typedef char char_type; - typedef basic_string string_type; - - explicit numpunct(size_t __refs = 0); - - _LIBCPP_HIDE_FROM_ABI char_type decimal_point() const { return do_decimal_point(); } - _LIBCPP_HIDE_FROM_ABI char_type thousands_sep() const { return do_thousands_sep(); } - _LIBCPP_HIDE_FROM_ABI string grouping() const { return do_grouping(); } - _LIBCPP_HIDE_FROM_ABI string_type truename() const { return do_truename(); } - _LIBCPP_HIDE_FROM_ABI string_type falsename() const { return do_falsename(); } - - static locale::id id; - -protected: - ~numpunct() override; - virtual char_type do_decimal_point() const; - virtual char_type do_thousands_sep() const; - virtual string do_grouping() const; - virtual string_type do_truename() const; - virtual string_type do_falsename() const; - - char_type __decimal_point_; - char_type __thousands_sep_; - string __grouping_; -}; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI numpunct : public locale::facet { -public: - typedef wchar_t char_type; - typedef basic_string string_type; - - explicit numpunct(size_t __refs = 0); - - _LIBCPP_HIDE_FROM_ABI char_type decimal_point() const { return do_decimal_point(); } - _LIBCPP_HIDE_FROM_ABI char_type thousands_sep() const { return do_thousands_sep(); } - _LIBCPP_HIDE_FROM_ABI string grouping() const { return do_grouping(); } - _LIBCPP_HIDE_FROM_ABI string_type truename() const { return do_truename(); } - _LIBCPP_HIDE_FROM_ABI string_type falsename() const { return do_falsename(); } - - static locale::id id; - -protected: - ~numpunct() override; - virtual char_type do_decimal_point() const; - virtual char_type do_thousands_sep() const; - virtual string do_grouping() const; - virtual string_type do_truename() const; - virtual string_type do_falsename() const; - - char_type __decimal_point_; - char_type __thousands_sep_; - string __grouping_; -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -// template class numpunct_byname - -template -class _LIBCPP_TEMPLATE_VIS numpunct_byname; - -template <> -class _LIBCPP_EXPORTED_FROM_ABI numpunct_byname : public numpunct { -public: - typedef char char_type; - typedef basic_string string_type; - - explicit numpunct_byname(const char* __nm, size_t __refs = 0); - explicit numpunct_byname(const string& __nm, size_t __refs = 0); - -protected: - ~numpunct_byname() override; - -private: - void __init(const char*); -}; - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -template <> -class _LIBCPP_EXPORTED_FROM_ABI numpunct_byname : public numpunct { -public: - typedef wchar_t char_type; - typedef basic_string string_type; - - explicit numpunct_byname(const char* __nm, size_t __refs = 0); - explicit numpunct_byname(const string& __nm, size_t __refs = 0); - -protected: - ~numpunct_byname() override; - -private: - void __init(const char*); -}; -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LOCALE diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api.h deleted file mode 100644 index 3dbce82..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api.h +++ /dev/null @@ -1,98 +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___CXX03___LOCALE_DIR_LOCALE_BASE_API_H -#define _LIBCPP___CXX03___LOCALE_DIR_LOCALE_BASE_API_H - -#if defined(_LIBCPP_MSVCRT_LIKE) -# include <__cxx03/__locale_dir/locale_base_api/win32.h> -#elif defined(_AIX) || defined(__MVS__) -# include <__cxx03/__locale_dir/locale_base_api/ibm.h> -#elif defined(__ANDROID__) -# include <__cxx03/__locale_dir/locale_base_api/android.h> -#elif defined(__sun__) -# include <__cxx03/__locale_dir/locale_base_api/solaris.h> -#elif _LIBCPP_LIBC_NEWLIB -# include <__cxx03/__locale_dir/locale_base_api/newlib.h> -#elif defined(__OpenBSD__) -# include <__cxx03/__locale_dir/locale_base_api/openbsd.h> -#elif defined(__Fuchsia__) -# include <__cxx03/__locale_dir/locale_base_api/fuchsia.h> -#elif defined(__wasi__) || defined(_LIBCPP_HAS_MUSL_LIBC) -# include <__cxx03/__locale_dir/locale_base_api/musl.h> -#elif defined(__APPLE__) || defined(__FreeBSD__) -# include <__cxx03/xlocale.h> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -/* -The platform-specific headers have to provide the following interface: - -// TODO: rename this to __libcpp_locale_t -using locale_t = implementation-defined; - -implementation-defined __libcpp_mb_cur_max_l(locale_t); -wint_t __libcpp_btowc_l(int, locale_t); -int __libcpp_wctob_l(wint_t, locale_t); -size_t __libcpp_wcsnrtombs_l(char* dest, const wchar_t** src, size_t wide_char_count, size_t len, mbstate_t, locale_t); -size_t __libcpp_wcrtomb_l(char* str, wchar_t wide_char, mbstate_t*, locale_t); -size_t __libcpp_mbsnrtowcs_l(wchar_t* dest, const char** src, size_t max_out, size_t len, mbstate_t*, locale_t); -size_t __libcpp_mbrtowc_l(wchar_t* dest, cosnt char* src, size_t count, mbstate_t*, locale_t); -int __libcpp_mbtowc_l(wchar_t* dest, const char* src, size_t count, locale_t); -size_t __libcpp_mbrlen_l(const char* str, size_t count, mbstate_t*, locale_t); -lconv* __libcpp_localeconv_l(locale_t); -size_t __libcpp_mbsrtowcs_l(wchar_t* dest, const char** src, size_t len, mbstate_t*, locale_t); -int __libcpp_snprintf_l(char* dest, size_t buff_size, locale_t, const char* format, ...); -int __libcpp_asprintf_l(char** dest, locale_t, const char* format, ...); -int __libcpp_sscanf_l(const char* dest, locale_t, const char* format, ...); - -// TODO: change these to reserved names -float strtof_l(const char* str, char** str_end, locale_t); -double strtod_l(const char* str, char** str_end, locale_t); -long double strtold_l(const char* str, char** str_end, locale_t); -long long strtoll_l(const char* str, char** str_end, locale_t); -unsigned long long strtoull_l(const char* str, char** str_end, locale_t); - -locale_t newlocale(int category_mask, const char* locale, locale_t base); -void freelocale(locale_t); - -int islower_l(int ch, locale_t); -int isupper_l(int ch, locale_t); -int isdigit_l(int ch, locale_t); -int isxdigit_l(int ch, locale_t); -int strcoll_l(const char* lhs, const char* rhs, locale_t); -size_t strxfrm_l(char* dst, const char* src, size_t n, locale_t); -int wcscoll_l(const char* lhs, const char* rhs, locale_t); -size_t wcsxfrm_l(wchar_t* dst, const wchar_t* src, size_t n, locale_t); -int toupper_l(int ch, locale_t); -int tolower_l(int ch, locale_t); -int iswspace_l(wint_t ch, locale_t); -int iswprint_l(wint_t ch, locale_t); -int iswcntrl_l(wint_t ch, locale_t); -int iswupper_l(wint_t ch, locale_t); -int iswlower_l(wint_t ch, locale_t); -int iswalpha_l(wint_t ch, locale_t); -int iswblank_l(wint_t ch, locale_t); -int iswdigit_l(wint_t ch, locale_t); -int iswpunct_l(wint_t ch, locale_t); -int iswxdigit_l(wint_t ch, locale_t); -wint_t towupper_l(wint_t ch, locale_t); -wint_t towlower_l(wint_t ch, locale_t); -size_t strftime_l(char* str, size_t len, const char* format, const tm*, locale_t); - - -These functions are equivalent to their C counterparts, -except that locale_t is used instead of the current global locale. - -The variadic functions may be implemented as templates with a parameter pack instead of variadic functions. -*/ - -#endif // _LIBCPP___CXX03___LOCALE_DIR_LOCALE_BASE_API_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/android.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/android.h deleted file mode 100644 index e96e64d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/android.h +++ /dev/null @@ -1,45 +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___CXX03___LOCALE_LOCALE_BASE_API_ANDROID_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_ANDROID_H - -#include <__cxx03/stdlib.h> - -// FIXME: Is this actually required? -extern "C" { -#include -} - -#include <__cxx03/android/api-level.h> - -// If we do not have this header, we are in a platform build rather than an NDK -// build, which will always be at least as new as the ToT NDK, in which case we -// don't need any of the inlines below since libc provides them. -#if __has_include() -# include -// In NDK versions later than 16, locale-aware functions are provided by -// legacy_stdlib_inlines.h -# if __NDK_MAJOR__ <= 16 -# if __ANDROID_API__ < 26 - -inline _LIBCPP_HIDE_FROM_ABI float strtof_l(const char* __nptr, char** __endptr, locale_t) { - return ::strtof(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI double strtod_l(const char* __nptr, char** __endptr, locale_t) { - return ::strtod(__nptr, __endptr); -} - -# endif // __ANDROID_API__ < 26 - -# endif // __NDK_MAJOR__ <= 16 -#endif // __has_include() - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_ANDROID_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_defaults.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_defaults.h deleted file mode 100644 index 35bf30c..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_defaults.h +++ /dev/null @@ -1,36 +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 -// -//===----------------------------------------------------------------------===// -// The BSDs have lots of *_l functions. We don't want to define those symbols -// on other platforms though, for fear of conflicts with user code. So here, -// we will define the mapping from an internal macro to the real BSD symbol. -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -#define __libcpp_mb_cur_max_l(loc) MB_CUR_MAX_L(loc) -#define __libcpp_btowc_l(ch, loc) btowc_l(ch, loc) -#define __libcpp_wctob_l(wch, loc) wctob_l(wch, loc) -#define __libcpp_wcsnrtombs_l(dst, src, nwc, len, ps, loc) wcsnrtombs_l(dst, src, nwc, len, ps, loc) -#define __libcpp_wcrtomb_l(src, wc, ps, loc) wcrtomb_l(src, wc, ps, loc) -#define __libcpp_mbsnrtowcs_l(dst, src, nms, len, ps, loc) mbsnrtowcs_l(dst, src, nms, len, ps, loc) -#define __libcpp_mbrtowc_l(pwc, s, n, ps, l) mbrtowc_l(pwc, s, n, ps, l) -#define __libcpp_mbtowc_l(pwc, pmb, max, l) mbtowc_l(pwc, pmb, max, l) -#define __libcpp_mbrlen_l(s, n, ps, l) mbrlen_l(s, n, ps, l) -#define __libcpp_localeconv_l(l) localeconv_l(l) -#define __libcpp_mbsrtowcs_l(dest, src, len, ps, l) mbsrtowcs_l(dest, src, len, ps, l) -#define __libcpp_snprintf_l(...) snprintf_l(__VA_ARGS__) -#define __libcpp_asprintf_l(...) asprintf_l(__VA_ARGS__) -#define __libcpp_sscanf_l(...) sscanf_l(__VA_ARGS__) - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_fallbacks.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_fallbacks.h deleted file mode 100644 index a73b724..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +++ /dev/null @@ -1,126 +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 -// -//===----------------------------------------------------------------------===// -// The BSDs have lots of *_l functions. This file provides reimplementations -// of those functions for non-BSD platforms. -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H - -#include <__cxx03/__locale_dir/locale_base_api/locale_guard.h> -#include <__cxx03/cstdio> -#include <__cxx03/stdlib.h> -#include - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -# include <__cxx03/cwchar> -#endif - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __l) { - __libcpp_locale_guard __current(__l); - return MB_CUR_MAX; -} - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -inline _LIBCPP_HIDE_FROM_ABI wint_t __libcpp_btowc_l(int __c, locale_t __l) { - __libcpp_locale_guard __current(__l); - return btowc(__c); -} - -inline _LIBCPP_HIDE_FROM_ABI int __libcpp_wctob_l(wint_t __c, locale_t __l) { - __libcpp_locale_guard __current(__l); - return wctob(__c); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_wcsnrtombs_l(char* __dest, const wchar_t** __src, size_t __nwc, size_t __len, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return wcsnrtombs(__dest, __src, __nwc, __len, __ps); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_wcrtomb_l(char* __s, wchar_t __wc, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return wcrtomb(__s, __wc, __ps); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_mbsnrtowcs_l(wchar_t* __dest, const char** __src, size_t __nms, size_t __len, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return mbsnrtowcs(__dest, __src, __nms, __len, __ps); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_mbrtowc_l(wchar_t* __pwc, const char* __s, size_t __n, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return mbrtowc(__pwc, __s, __n, __ps); -} - -inline _LIBCPP_HIDE_FROM_ABI int __libcpp_mbtowc_l(wchar_t* __pwc, const char* __pmb, size_t __max, locale_t __l) { - __libcpp_locale_guard __current(__l); - return mbtowc(__pwc, __pmb, __max); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_mbrlen_l(const char* __s, size_t __n, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return mbrlen(__s, __n, __ps); -} -#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS - -inline _LIBCPP_HIDE_FROM_ABI lconv* __libcpp_localeconv_l(locale_t __l) { - __libcpp_locale_guard __current(__l); - return localeconv(); -} - -#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps, locale_t __l) { - __libcpp_locale_guard __current(__l); - return mbsrtowcs(__dest, __src, __len, __ps); -} -#endif - -inline _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 4, 5) int __libcpp_snprintf_l( - char* __s, size_t __n, locale_t __l, const char* __format, ...) { - va_list __va; - va_start(__va, __format); - __libcpp_locale_guard __current(__l); - int __res = vsnprintf(__s, __n, __format, __va); - va_end(__va); - return __res; -} - -inline _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 3, 4) int __libcpp_asprintf_l( - char** __s, locale_t __l, const char* __format, ...) { - va_list __va; - va_start(__va, __format); - __libcpp_locale_guard __current(__l); - int __res = vasprintf(__s, __format, __va); - va_end(__va); - return __res; -} - -inline _LIBCPP_ATTRIBUTE_FORMAT(__scanf__, 3, 4) int __libcpp_sscanf_l( - const char* __s, locale_t __l, const char* __format, ...) { - va_list __va; - va_start(__va, __format); - __libcpp_locale_guard __current(__l); - int __res = vsscanf(__s, __format, __va); - va_end(__va); - return __res; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_BSD_LOCALE_FALLBACKS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/fuchsia.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/fuchsia.h deleted file mode 100644 index 6ee6a3a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/fuchsia.h +++ /dev/null @@ -1,18 +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___CXX03___LOCALE_LOCALE_BASE_API_FUCHSIA_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_FUCHSIA_H - -#include <__cxx03/__support/xlocale/__posix_l_fallback.h> -#include <__cxx03/__support/xlocale/__strtonum_fallback.h> -#include <__cxx03/cstdlib> -#include <__cxx03/cwchar> - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_FUCHSIA_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/ibm.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/ibm.h deleted file mode 100644 index a24d994..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/ibm.h +++ /dev/null @@ -1,108 +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___CXX03___LOCALE_LOCALE_BASE_API_IBM_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_IBM_H - -#if defined(__MVS__) -# include <__cxx03/__support/ibm/locale_mgmt_zos.h> -#endif // defined(__MVS__) - -#include <__cxx03/locale.h> -#include <__cxx03/stdarg.h> -#include <__cxx03/stdio.h> - -#include "cstdlib" - -#if defined(__MVS__) -# include <__cxx03/wctype.h> -// POSIX routines -# include <__cxx03/__support/xlocale/__posix_l_fallback.h> -#endif // defined(__MVS__) - -namespace { - -struct __setAndRestore { - explicit __setAndRestore(locale_t locale) { - if (locale == (locale_t)0) { - __cloc = newlocale(LC_ALL_MASK, "C", /* base */ (locale_t)0); - __stored = uselocale(__cloc); - } else { - __stored = uselocale(locale); - } - } - - ~__setAndRestore() { - uselocale(__stored); - if (__cloc) - freelocale(__cloc); - } - -private: - locale_t __stored = (locale_t)0; - locale_t __cloc = (locale_t)0; -}; - -} // namespace - -// The following are not POSIX routines. These are quick-and-dirty hacks -// to make things pretend to work -inline _LIBCPP_HIDE_FROM_ABI long long strtoll_l(const char* __nptr, char** __endptr, int __base, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtoll(__nptr, __endptr, __base); -} - -inline _LIBCPP_HIDE_FROM_ABI double strtod_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtod(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI float strtof_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtof(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI long double strtold_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtold(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI unsigned long long -strtoull_l(const char* __nptr, char** __endptr, int __base, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtoull(__nptr, __endptr, __base); -} - -inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_ATTRIBUTE_FORMAT(__printf__, 2, 0) int vasprintf(char** strp, const char* fmt, va_list ap) { - const size_t buff_size = 256; - if ((*strp = (char*)malloc(buff_size)) == NULL) { - return -1; - } - - va_list ap_copy; - // va_copy may not be provided by the C library in C++03 mode. -#if __has_builtin(__builtin_va_copy) - __builtin_va_copy(ap_copy, ap); -#else - va_copy(ap_copy, ap); -#endif - int str_size = vsnprintf(*strp, buff_size, fmt, ap_copy); - va_end(ap_copy); - - if ((size_t)str_size >= buff_size) { - if ((*strp = (char*)realloc(*strp, str_size + 1)) == NULL) { - return -1; - } - str_size = vsnprintf(*strp, str_size + 1, fmt, ap); - } - return str_size; -} - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_IBM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/locale_guard.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/locale_guard.h deleted file mode 100644 index e358363..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/locale_guard.h +++ /dev/null @@ -1,78 +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___CXX03___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H - -#include <__cxx03/__config> -#include <__cxx03/__locale> // for locale_t -#include <__cxx03/clocale> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#if !defined(_LIBCPP_LOCALE__L_EXTENSIONS) -struct __libcpp_locale_guard { - _LIBCPP_HIDE_FROM_ABI __libcpp_locale_guard(locale_t& __loc) : __old_loc_(uselocale(__loc)) {} - - _LIBCPP_HIDE_FROM_ABI ~__libcpp_locale_guard() { - if (__old_loc_) - uselocale(__old_loc_); - } - - locale_t __old_loc_; - - __libcpp_locale_guard(__libcpp_locale_guard const&) = delete; - __libcpp_locale_guard& operator=(__libcpp_locale_guard const&) = delete; -}; -#elif defined(_LIBCPP_MSVCRT_LIKE) -struct __libcpp_locale_guard { - __libcpp_locale_guard(locale_t __l) : __status(_configthreadlocale(_ENABLE_PER_THREAD_LOCALE)) { - // Setting the locale can be expensive even when the locale given is - // already the current locale, so do an explicit check to see if the - // current locale is already the one we want. - const char* __lc = __setlocale(nullptr); - // If every category is the same, the locale string will simply be the - // locale name, otherwise it will be a semicolon-separated string listing - // each category. In the second case, we know at least one category won't - // be what we want, so we only have to check the first case. - if (std::strcmp(__l.__get_locale(), __lc) != 0) { - __locale_all = _strdup(__lc); - if (__locale_all == nullptr) - __throw_bad_alloc(); - __setlocale(__l.__get_locale()); - } - } - ~__libcpp_locale_guard() { - // The CRT documentation doesn't explicitly say, but setlocale() does the - // right thing when given a semicolon-separated list of locale settings - // for the different categories in the same format as returned by - // setlocale(LC_ALL, nullptr). - if (__locale_all != nullptr) { - __setlocale(__locale_all); - free(__locale_all); - } - _configthreadlocale(__status); - } - static const char* __setlocale(const char* __locale) { - const char* __new_locale = setlocale(LC_ALL, __locale); - if (__new_locale == nullptr) - __throw_bad_alloc(); - return __new_locale; - } - int __status; - char* __locale_all = nullptr; -}; -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_LOCALE_GUARD_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/musl.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/musl.h deleted file mode 100644 index e2d23d4..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/musl.h +++ /dev/null @@ -1,31 +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 -// -//===----------------------------------------------------------------------===// -// This adds support for the extended locale functions that are currently -// missing from the Musl C library. -// -// This only works when the specified locale is "C" or "POSIX", but that's -// about as good as we can do without implementing full xlocale support -// in Musl. -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_MUSL_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_MUSL_H - -#include <__cxx03/cstdlib> -#include <__cxx03/cwchar> - -inline _LIBCPP_HIDE_FROM_ABI long long strtoll_l(const char* __nptr, char** __endptr, int __base, locale_t) { - return ::strtoll(__nptr, __endptr, __base); -} - -inline _LIBCPP_HIDE_FROM_ABI unsigned long long strtoull_l(const char* __nptr, char** __endptr, int __base, locale_t) { - return ::strtoull(__nptr, __endptr, __base); -} - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_MUSL_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/newlib.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/newlib.h deleted file mode 100644 index e52d907..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/newlib.h +++ /dev/null @@ -1,12 +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___CXX03___LOCALE_LOCALE_BASE_API_NEWLIB_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_NEWLIB_H - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_NEWLIB_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/openbsd.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/openbsd.h deleted file mode 100644 index 6b64607..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/openbsd.h +++ /dev/null @@ -1,19 +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___CXX03___LOCALE_LOCALE_BASE_API_OPENBSD_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_OPENBSD_H - -#include <__cxx03/__support/xlocale/__strtonum_fallback.h> -#include <__cxx03/clocale> -#include <__cxx03/cstdlib> -#include <__cxx03/ctype.h> -#include <__cxx03/cwctype> - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_OPENBSD_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/win32.h b/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/win32.h deleted file mode 100644 index 5f85acf..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__locale_dir/locale_base_api/win32.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___CXX03___LOCALE_LOCALE_BASE_API_WIN32_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_WIN32_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> -#include <__cxx03/locale.h> // _locale_t -#include <__cxx03/stdio.h> -#include <__cxx03/string> - -#define _X_ALL LC_ALL -#define _X_COLLATE LC_COLLATE -#define _X_CTYPE LC_CTYPE -#define _X_MONETARY LC_MONETARY -#define _X_NUMERIC LC_NUMERIC -#define _X_TIME LC_TIME -#define _X_MAX LC_MAX -#define _X_MESSAGES 6 -#define _NCAT (_X_MESSAGES + 1) - -#define _CATMASK(n) ((1 << (n)) >> 1) -#define _M_COLLATE _CATMASK(_X_COLLATE) -#define _M_CTYPE _CATMASK(_X_CTYPE) -#define _M_MONETARY _CATMASK(_X_MONETARY) -#define _M_NUMERIC _CATMASK(_X_NUMERIC) -#define _M_TIME _CATMASK(_X_TIME) -#define _M_MESSAGES _CATMASK(_X_MESSAGES) -#define _M_ALL (_CATMASK(_NCAT) - 1) - -#define LC_COLLATE_MASK _M_COLLATE -#define LC_CTYPE_MASK _M_CTYPE -#define LC_MONETARY_MASK _M_MONETARY -#define LC_NUMERIC_MASK _M_NUMERIC -#define LC_TIME_MASK _M_TIME -#define LC_MESSAGES_MASK _M_MESSAGES -#define LC_ALL_MASK \ - (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK) - -class __lconv_storage { -public: - __lconv_storage(const lconv* __lc_input) { - __lc_ = *__lc_input; - - __decimal_point_ = __lc_input->decimal_point; - __thousands_sep_ = __lc_input->thousands_sep; - __grouping_ = __lc_input->grouping; - __int_curr_symbol_ = __lc_input->int_curr_symbol; - __currency_symbol_ = __lc_input->currency_symbol; - __mon_decimal_point_ = __lc_input->mon_decimal_point; - __mon_thousands_sep_ = __lc_input->mon_thousands_sep; - __mon_grouping_ = __lc_input->mon_grouping; - __positive_sign_ = __lc_input->positive_sign; - __negative_sign_ = __lc_input->negative_sign; - - __lc_.decimal_point = const_cast(__decimal_point_.c_str()); - __lc_.thousands_sep = const_cast(__thousands_sep_.c_str()); - __lc_.grouping = const_cast(__grouping_.c_str()); - __lc_.int_curr_symbol = const_cast(__int_curr_symbol_.c_str()); - __lc_.currency_symbol = const_cast(__currency_symbol_.c_str()); - __lc_.mon_decimal_point = const_cast(__mon_decimal_point_.c_str()); - __lc_.mon_thousands_sep = const_cast(__mon_thousands_sep_.c_str()); - __lc_.mon_grouping = const_cast(__mon_grouping_.c_str()); - __lc_.positive_sign = const_cast(__positive_sign_.c_str()); - __lc_.negative_sign = const_cast(__negative_sign_.c_str()); - } - - lconv* __get() { return &__lc_; } - -private: - lconv __lc_; - std::string __decimal_point_; - std::string __thousands_sep_; - std::string __grouping_; - std::string __int_curr_symbol_; - std::string __currency_symbol_; - std::string __mon_decimal_point_; - std::string __mon_thousands_sep_; - std::string __mon_grouping_; - std::string __positive_sign_; - std::string __negative_sign_; -}; - -class locale_t { -public: - locale_t() : __locale_(nullptr), __locale_str_(nullptr), __lc_(nullptr) {} - locale_t(std::nullptr_t) : __locale_(nullptr), __locale_str_(nullptr), __lc_(nullptr) {} - locale_t(_locale_t __xlocale, const char* __xlocale_str) - : __locale_(__xlocale), __locale_str_(__xlocale_str), __lc_(nullptr) {} - locale_t(const locale_t& __l) : __locale_(__l.__locale_), __locale_str_(__l.__locale_str_), __lc_(nullptr) {} - - ~locale_t() { delete __lc_; } - - locale_t& operator=(const locale_t& __l) { - __locale_ = __l.__locale_; - __locale_str_ = __l.__locale_str_; - // __lc_ not copied - return *this; - } - - friend bool operator==(const locale_t& __left, const locale_t& __right) { - return __left.__locale_ == __right.__locale_; - } - - friend bool operator==(const locale_t& __left, int __right) { return __left.__locale_ == nullptr && __right == 0; } - - friend bool operator==(const locale_t& __left, long long __right) { - return __left.__locale_ == nullptr && __right == 0; - } - - friend bool operator==(const locale_t& __left, std::nullptr_t) { return __left.__locale_ == nullptr; } - - friend bool operator==(int __left, const locale_t& __right) { return __left == 0 && nullptr == __right.__locale_; } - - friend bool operator==(std::nullptr_t, const locale_t& __right) { return nullptr == __right.__locale_; } - - friend bool operator!=(const locale_t& __left, const locale_t& __right) { return !(__left == __right); } - - friend bool operator!=(const locale_t& __left, int __right) { return !(__left == __right); } - - friend bool operator!=(const locale_t& __left, long long __right) { return !(__left == __right); } - - friend bool operator!=(const locale_t& __left, std::nullptr_t __right) { return !(__left == __right); } - - friend bool operator!=(int __left, const locale_t& __right) { return !(__left == __right); } - - friend bool operator!=(std::nullptr_t __left, const locale_t& __right) { return !(__left == __right); } - - operator bool() const { return __locale_ != nullptr; } - - const char* __get_locale() const { return __locale_str_; } - - operator _locale_t() const { return __locale_; } - - lconv* __store_lconv(const lconv* __input_lc) { - delete __lc_; - __lc_ = new __lconv_storage(__input_lc); - return __lc_->__get(); - } - -private: - _locale_t __locale_; - const char* __locale_str_; - __lconv_storage* __lc_ = nullptr; -}; - -// Locale management functions -#define freelocale _free_locale -// FIXME: base currently unused. Needs manual work to construct the new locale -locale_t newlocale(int __mask, const char* __locale, locale_t __base); -// uselocale can't be implemented on Windows because Windows allows partial modification -// of thread-local locale and so _get_current_locale() returns a copy while uselocale does -// not create any copies. -// We can still implement raii even without uselocale though. - -lconv* localeconv_l(locale_t& __loc); -size_t mbrlen_l(const char* __restrict __s, size_t __n, mbstate_t* __restrict __ps, locale_t __loc); -size_t mbsrtowcs_l( - wchar_t* __restrict __dst, const char** __restrict __src, size_t __len, mbstate_t* __restrict __ps, locale_t __loc); -size_t wcrtomb_l(char* __restrict __s, wchar_t __wc, mbstate_t* __restrict __ps, locale_t __loc); -size_t mbrtowc_l( - wchar_t* __restrict __pwc, const char* __restrict __s, size_t __n, mbstate_t* __restrict __ps, locale_t __loc); -size_t mbsnrtowcs_l(wchar_t* __restrict __dst, - const char** __restrict __src, - size_t __nms, - size_t __len, - mbstate_t* __restrict __ps, - locale_t __loc); -size_t wcsnrtombs_l(char* __restrict __dst, - const wchar_t** __restrict __src, - size_t __nwc, - size_t __len, - mbstate_t* __restrict __ps, - locale_t __loc); -wint_t btowc_l(int __c, locale_t __loc); -int wctob_l(wint_t __c, locale_t __loc); - -decltype(MB_CUR_MAX) MB_CUR_MAX_L(locale_t __l); - -// the *_l functions are prefixed on Windows, only available for msvcr80+, VS2005+ -#define mbtowc_l _mbtowc_l -#define strtoll_l _strtoi64_l -#define strtoull_l _strtoui64_l -#define strtod_l _strtod_l -#if defined(_LIBCPP_MSVCRT) -# define strtof_l _strtof_l -# define strtold_l _strtold_l -#else -_LIBCPP_EXPORTED_FROM_ABI float strtof_l(const char*, char**, locale_t); -_LIBCPP_EXPORTED_FROM_ABI long double strtold_l(const char*, char**, locale_t); -#endif -inline _LIBCPP_HIDE_FROM_ABI int islower_l(int __c, _locale_t __loc) { return _islower_l((int)__c, __loc); } - -inline _LIBCPP_HIDE_FROM_ABI int isupper_l(int __c, _locale_t __loc) { return _isupper_l((int)__c, __loc); } - -#define isdigit_l _isdigit_l -#define isxdigit_l _isxdigit_l -#define strcoll_l _strcoll_l -#define strxfrm_l _strxfrm_l -#define wcscoll_l _wcscoll_l -#define wcsxfrm_l _wcsxfrm_l -#define toupper_l _toupper_l -#define tolower_l _tolower_l -#define iswspace_l _iswspace_l -#define iswprint_l _iswprint_l -#define iswcntrl_l _iswcntrl_l -#define iswupper_l _iswupper_l -#define iswlower_l _iswlower_l -#define iswalpha_l _iswalpha_l -#define iswdigit_l _iswdigit_l -#define iswpunct_l _iswpunct_l -#define iswxdigit_l _iswxdigit_l -#define towupper_l _towupper_l -#define towlower_l _towlower_l -#if defined(__MINGW32__) && __MSVCRT_VERSION__ < 0x0800 -_LIBCPP_EXPORTED_FROM_ABI size_t strftime_l(char* ret, size_t n, const char* format, const struct tm* tm, locale_t loc); -#else -# define strftime_l _strftime_l -#endif -#define sscanf_l(__s, __l, __f, ...) _sscanf_l(__s, __f, __l, __VA_ARGS__) -_LIBCPP_EXPORTED_FROM_ABI int snprintf_l(char* __ret, size_t __n, locale_t __loc, const char* __format, ...); -_LIBCPP_EXPORTED_FROM_ABI int asprintf_l(char** __ret, locale_t __loc, const char* __format, ...); -_LIBCPP_EXPORTED_FROM_ABI int vasprintf_l(char** __ret, locale_t __loc, const char* __format, va_list __ap); - -// not-so-pressing FIXME: use locale to determine blank characters -inline int iswblank_l(wint_t __c, locale_t /*loc*/) { return (__c == L' ' || __c == L'\t'); } - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_WIN32_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/abs.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/abs.h deleted file mode 100644 index 61fc58a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/abs.h +++ /dev/null @@ -1,46 +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___CXX03___MATH_ABS_H -#define _LIBCPP___CXX03___MATH_ABS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// fabs - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float fabs(float __x) _NOEXCEPT { return __builtin_fabsf(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double fabs(double __x) _NOEXCEPT { - return __builtin_fabs(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double fabs(long double __x) _NOEXCEPT { - return __builtin_fabsl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double fabs(_A1 __x) _NOEXCEPT { - return __builtin_fabs((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_ABS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/copysign.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/copysign.h deleted file mode 100644 index d209406..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/copysign.h +++ /dev/null @@ -1,45 +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___CXX03___MATH_COPYSIGN_H -#define _LIBCPP___CXX03___MATH_COPYSIGN_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/promote.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// copysign - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float copysign(float __x, float __y) _NOEXCEPT { - return ::__builtin_copysignf(__x, __y); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double copysign(long double __x, long double __y) _NOEXCEPT { - return ::__builtin_copysignl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type copysign(_A1 __x, _A2 __y) _NOEXCEPT { - return ::__builtin_copysign(__x, __y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_COPYSIGN_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/error_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/error_functions.h deleted file mode 100644 index 25cf059..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/error_functions.h +++ /dev/null @@ -1,60 +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___CXX03___MATH_ERROR_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_ERROR_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// erf - -inline _LIBCPP_HIDE_FROM_ABI float erf(float __x) _NOEXCEPT { return __builtin_erff(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double erf(double __x) _NOEXCEPT { - return __builtin_erf(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double erf(long double __x) _NOEXCEPT { return __builtin_erfl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double erf(_A1 __x) _NOEXCEPT { - return __builtin_erf((double)__x); -} - -// erfc - -inline _LIBCPP_HIDE_FROM_ABI float erfc(float __x) _NOEXCEPT { return __builtin_erfcf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double erfc(double __x) _NOEXCEPT { - return __builtin_erfc(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double erfc(long double __x) _NOEXCEPT { return __builtin_erfcl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double erfc(_A1 __x) _NOEXCEPT { - return __builtin_erfc((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_ERROR_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/exponential_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/exponential_functions.h deleted file mode 100644 index 452d5d2..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/exponential_functions.h +++ /dev/null @@ -1,171 +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___CXX03___MATH_EXPONENTIAL_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_EXPONENTIAL_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// exp - -inline _LIBCPP_HIDE_FROM_ABI float exp(float __x) _NOEXCEPT { return __builtin_expf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double exp(double __x) _NOEXCEPT { - return __builtin_exp(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double exp(long double __x) _NOEXCEPT { return __builtin_expl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double exp(_A1 __x) _NOEXCEPT { - return __builtin_exp((double)__x); -} - -// frexp - -inline _LIBCPP_HIDE_FROM_ABI float frexp(float __x, int* __e) _NOEXCEPT { return __builtin_frexpf(__x, __e); } - -template -_LIBCPP_HIDE_FROM_ABI double frexp(double __x, int* __e) _NOEXCEPT { - return __builtin_frexp(__x, __e); -} - -inline _LIBCPP_HIDE_FROM_ABI long double frexp(long double __x, int* __e) _NOEXCEPT { - return __builtin_frexpl(__x, __e); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double frexp(_A1 __x, int* __e) _NOEXCEPT { - return __builtin_frexp((double)__x, __e); -} - -// ldexp - -inline _LIBCPP_HIDE_FROM_ABI float ldexp(float __x, int __e) _NOEXCEPT { return __builtin_ldexpf(__x, __e); } - -template -_LIBCPP_HIDE_FROM_ABI double ldexp(double __x, int __e) _NOEXCEPT { - return __builtin_ldexp(__x, __e); -} - -inline _LIBCPP_HIDE_FROM_ABI long double ldexp(long double __x, int __e) _NOEXCEPT { - return __builtin_ldexpl(__x, __e); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double ldexp(_A1 __x, int __e) _NOEXCEPT { - return __builtin_ldexp((double)__x, __e); -} - -// exp2 - -inline _LIBCPP_HIDE_FROM_ABI float exp2(float __x) _NOEXCEPT { return __builtin_exp2f(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double exp2(double __x) _NOEXCEPT { - return __builtin_exp2(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double exp2(long double __x) _NOEXCEPT { return __builtin_exp2l(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double exp2(_A1 __x) _NOEXCEPT { - return __builtin_exp2((double)__x); -} - -// expm1 - -inline _LIBCPP_HIDE_FROM_ABI float expm1(float __x) _NOEXCEPT { return __builtin_expm1f(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double expm1(double __x) _NOEXCEPT { - return __builtin_expm1(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double expm1(long double __x) _NOEXCEPT { return __builtin_expm1l(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double expm1(_A1 __x) _NOEXCEPT { - return __builtin_expm1((double)__x); -} - -// scalbln - -inline _LIBCPP_HIDE_FROM_ABI float scalbln(float __x, long __y) _NOEXCEPT { return __builtin_scalblnf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double scalbln(double __x, long __y) _NOEXCEPT { - return __builtin_scalbln(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double scalbln(long double __x, long __y) _NOEXCEPT { - return __builtin_scalblnl(__x, __y); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double scalbln(_A1 __x, long __y) _NOEXCEPT { - return __builtin_scalbln((double)__x, __y); -} - -// scalbn - -inline _LIBCPP_HIDE_FROM_ABI float scalbn(float __x, int __y) _NOEXCEPT { return __builtin_scalbnf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double scalbn(double __x, int __y) _NOEXCEPT { - return __builtin_scalbn(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double scalbn(long double __x, int __y) _NOEXCEPT { - return __builtin_scalbnl(__x, __y); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double scalbn(_A1 __x, int __y) _NOEXCEPT { - return __builtin_scalbn((double)__x, __y); -} - -// pow - -inline _LIBCPP_HIDE_FROM_ABI float pow(float __x, float __y) _NOEXCEPT { return __builtin_powf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double pow(double __x, double __y) _NOEXCEPT { - return __builtin_pow(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double pow(long double __x, long double __y) _NOEXCEPT { - return __builtin_powl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type pow(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::pow((__result_type)__x, (__result_type)__y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_EXPONENTIAL_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/fdim.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/fdim.h deleted file mode 100644 index ac6fec4..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/fdim.h +++ /dev/null @@ -1,48 +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___CXX03___MATH_FDIM_H -#define _LIBCPP___CXX03___MATH_FDIM_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -inline _LIBCPP_HIDE_FROM_ABI float fdim(float __x, float __y) _NOEXCEPT { return __builtin_fdimf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double fdim(double __x, double __y) _NOEXCEPT { - return __builtin_fdim(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double fdim(long double __x, long double __y) _NOEXCEPT { - return __builtin_fdiml(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type fdim(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::fdim((__result_type)__x, (__result_type)__y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_FDIM_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/fma.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/fma.h deleted file mode 100644 index ce7e92a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/fma.h +++ /dev/null @@ -1,55 +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___CXX03___MATH_FMA_H -#define _LIBCPP___CXX03___MATH_FMA_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -inline _LIBCPP_HIDE_FROM_ABI float fma(float __x, float __y, float __z) _NOEXCEPT { - return __builtin_fmaf(__x, __y, __z); -} - -template -_LIBCPP_HIDE_FROM_ABI double fma(double __x, double __y, double __z) _NOEXCEPT { - return __builtin_fma(__x, __y, __z); -} - -inline _LIBCPP_HIDE_FROM_ABI long double fma(long double __x, long double __y, long double __z) _NOEXCEPT { - return __builtin_fmal(__x, __y, __z); -} - -template ::value && is_arithmetic<_A2>::value && is_arithmetic<_A3>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2, _A3>::type fma(_A1 __x, _A2 __y, _A3 __z) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2, _A3>::type; - static_assert( - !(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value && _IsSame<_A3, __result_type>::value), - ""); - return __builtin_fma((__result_type)__x, (__result_type)__y, (__result_type)__z); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_FMA_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/gamma.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/gamma.h deleted file mode 100644 index 4d10498..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/gamma.h +++ /dev/null @@ -1,62 +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___CXX03___MATH_GAMMA_H -#define _LIBCPP___CXX03___MATH_GAMMA_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// lgamma - -inline _LIBCPP_HIDE_FROM_ABI float lgamma(float __x) _NOEXCEPT { return __builtin_lgammaf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double lgamma(double __x) _NOEXCEPT { - return __builtin_lgamma(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double lgamma(long double __x) _NOEXCEPT { return __builtin_lgammal(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double lgamma(_A1 __x) _NOEXCEPT { - return __builtin_lgamma((double)__x); -} - -// nan - -// tgamma - -inline _LIBCPP_HIDE_FROM_ABI float tgamma(float __x) _NOEXCEPT { return __builtin_tgammaf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double tgamma(double __x) _NOEXCEPT { - return __builtin_tgamma(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double tgamma(long double __x) _NOEXCEPT { return __builtin_tgammal(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double tgamma(_A1 __x) _NOEXCEPT { - return __builtin_tgamma((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_GAMMA_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/hyperbolic_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/hyperbolic_functions.h deleted file mode 100644 index 2b765ca..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/hyperbolic_functions.h +++ /dev/null @@ -1,76 +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___CXX03___MATH_HYPERBOLIC_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_HYPERBOLIC_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// cosh - -inline _LIBCPP_HIDE_FROM_ABI float cosh(float __x) _NOEXCEPT { return __builtin_coshf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double cosh(double __x) _NOEXCEPT { - return __builtin_cosh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double cosh(long double __x) _NOEXCEPT { return __builtin_coshl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double cosh(_A1 __x) _NOEXCEPT { - return __builtin_cosh((double)__x); -} - -// sinh - -inline _LIBCPP_HIDE_FROM_ABI float sinh(float __x) _NOEXCEPT { return __builtin_sinhf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double sinh(double __x) _NOEXCEPT { - return __builtin_sinh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double sinh(long double __x) _NOEXCEPT { return __builtin_sinhl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double sinh(_A1 __x) _NOEXCEPT { - return __builtin_sinh((double)__x); -} - -// tanh - -inline _LIBCPP_HIDE_FROM_ABI float tanh(float __x) _NOEXCEPT { return __builtin_tanhf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double tanh(double __x) _NOEXCEPT { - return __builtin_tanh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double tanh(long double __x) _NOEXCEPT { return __builtin_tanhl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double tanh(_A1 __x) _NOEXCEPT { - return __builtin_tanh((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_HYPERBOLIC_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/hypot.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/hypot.h deleted file mode 100644 index 20b00f3..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/hypot.h +++ /dev/null @@ -1,58 +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___CXX03___MATH_HYPOT_H -#define _LIBCPP___CXX03___MATH_HYPOT_H - -#include <__cxx03/__algorithm/max.h> -#include <__cxx03/__config> -#include <__cxx03/__math/abs.h> -#include <__cxx03/__math/exponential_functions.h> -#include <__cxx03/__math/roots.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> -#include <__cxx03/__utility/pair.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -inline _LIBCPP_HIDE_FROM_ABI float hypot(float __x, float __y) _NOEXCEPT { return __builtin_hypotf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double hypot(double __x, double __y) _NOEXCEPT { - return __builtin_hypot(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double hypot(long double __x, long double __y) _NOEXCEPT { - return __builtin_hypotl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type hypot(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::hypot((__result_type)__x, (__result_type)__y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___MATH_HYPOT_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_hyperbolic_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_hyperbolic_functions.h deleted file mode 100644 index b48689d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_hyperbolic_functions.h +++ /dev/null @@ -1,76 +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___CXX03___MATH_INVERSE_HYPERBOLIC_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_INVERSE_HYPERBOLIC_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// acosh - -inline _LIBCPP_HIDE_FROM_ABI float acosh(float __x) _NOEXCEPT { return __builtin_acoshf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double acosh(double __x) _NOEXCEPT { - return __builtin_acosh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double acosh(long double __x) _NOEXCEPT { return __builtin_acoshl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double acosh(_A1 __x) _NOEXCEPT { - return __builtin_acosh((double)__x); -} - -// asinh - -inline _LIBCPP_HIDE_FROM_ABI float asinh(float __x) _NOEXCEPT { return __builtin_asinhf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double asinh(double __x) _NOEXCEPT { - return __builtin_asinh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double asinh(long double __x) _NOEXCEPT { return __builtin_asinhl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double asinh(_A1 __x) _NOEXCEPT { - return __builtin_asinh((double)__x); -} - -// atanh - -inline _LIBCPP_HIDE_FROM_ABI float atanh(float __x) _NOEXCEPT { return __builtin_atanhf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double atanh(double __x) _NOEXCEPT { - return __builtin_atanh(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double atanh(long double __x) _NOEXCEPT { return __builtin_atanhl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double atanh(_A1 __x) _NOEXCEPT { - return __builtin_atanh((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_INVERSE_HYPERBOLIC_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_trigonometric_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_trigonometric_functions.h deleted file mode 100644 index 573c9b1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/inverse_trigonometric_functions.h +++ /dev/null @@ -1,99 +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___CXX03___MATH_INVERSE_TRIGONOMETRIC_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_INVERSE_TRIGONOMETRIC_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// acos - -inline _LIBCPP_HIDE_FROM_ABI float acos(float __x) _NOEXCEPT { return __builtin_acosf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double acos(double __x) _NOEXCEPT { - return __builtin_acos(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double acos(long double __x) _NOEXCEPT { return __builtin_acosl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double acos(_A1 __x) _NOEXCEPT { - return __builtin_acos((double)__x); -} - -// asin - -inline _LIBCPP_HIDE_FROM_ABI float asin(float __x) _NOEXCEPT { return __builtin_asinf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double asin(double __x) _NOEXCEPT { - return __builtin_asin(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double asin(long double __x) _NOEXCEPT { return __builtin_asinl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double asin(_A1 __x) _NOEXCEPT { - return __builtin_asin((double)__x); -} - -// atan - -inline _LIBCPP_HIDE_FROM_ABI float atan(float __x) _NOEXCEPT { return __builtin_atanf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double atan(double __x) _NOEXCEPT { - return __builtin_atan(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double atan(long double __x) _NOEXCEPT { return __builtin_atanl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double atan(_A1 __x) _NOEXCEPT { - return __builtin_atan((double)__x); -} - -// atan2 - -inline _LIBCPP_HIDE_FROM_ABI float atan2(float __y, float __x) _NOEXCEPT { return __builtin_atan2f(__y, __x); } - -template -_LIBCPP_HIDE_FROM_ABI double atan2(double __x, double __y) _NOEXCEPT { - return __builtin_atan2(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double atan2(long double __y, long double __x) _NOEXCEPT { - return __builtin_atan2l(__y, __x); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type atan2(_A1 __y, _A2 __x) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::atan2((__result_type)__y, (__result_type)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_INVERSE_TRIGONOMETRIC_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/logarithms.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/logarithms.h deleted file mode 100644 index 9b9e59a..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/logarithms.h +++ /dev/null @@ -1,124 +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___CXX03___MATH_LOGARITHMS_H -#define _LIBCPP___CXX03___MATH_LOGARITHMS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// log - -inline _LIBCPP_HIDE_FROM_ABI float log(float __x) _NOEXCEPT { return __builtin_logf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double log(double __x) _NOEXCEPT { - return __builtin_log(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double log(long double __x) _NOEXCEPT { return __builtin_logl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double log(_A1 __x) _NOEXCEPT { - return __builtin_log((double)__x); -} - -// log10 - -inline _LIBCPP_HIDE_FROM_ABI float log10(float __x) _NOEXCEPT { return __builtin_log10f(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double log10(double __x) _NOEXCEPT { - return __builtin_log10(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double log10(long double __x) _NOEXCEPT { return __builtin_log10l(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double log10(_A1 __x) _NOEXCEPT { - return __builtin_log10((double)__x); -} - -// ilogb - -inline _LIBCPP_HIDE_FROM_ABI int ilogb(float __x) _NOEXCEPT { return __builtin_ilogbf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI int ilogb(double __x) _NOEXCEPT { - return __builtin_ilogb(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI int ilogb(long double __x) _NOEXCEPT { return __builtin_ilogbl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI int ilogb(_A1 __x) _NOEXCEPT { - return __builtin_ilogb((double)__x); -} - -// log1p - -inline _LIBCPP_HIDE_FROM_ABI float log1p(float __x) _NOEXCEPT { return __builtin_log1pf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double log1p(double __x) _NOEXCEPT { - return __builtin_log1p(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double log1p(long double __x) _NOEXCEPT { return __builtin_log1pl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double log1p(_A1 __x) _NOEXCEPT { - return __builtin_log1p((double)__x); -} - -// log2 - -inline _LIBCPP_HIDE_FROM_ABI float log2(float __x) _NOEXCEPT { return __builtin_log2f(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double log2(double __x) _NOEXCEPT { - return __builtin_log2(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double log2(long double __x) _NOEXCEPT { return __builtin_log2l(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double log2(_A1 __x) _NOEXCEPT { - return __builtin_log2((double)__x); -} - -// logb - -inline _LIBCPP_HIDE_FROM_ABI float logb(float __x) _NOEXCEPT { return __builtin_logbf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double logb(double __x) _NOEXCEPT { - return __builtin_logb(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double logb(long double __x) _NOEXCEPT { return __builtin_logbl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double logb(_A1 __x) _NOEXCEPT { - return __builtin_logb((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_LOGARITHMS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/min_max.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/min_max.h deleted file mode 100644 index 4df5bc1..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/min_max.h +++ /dev/null @@ -1,74 +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___CXX03___MATH_MIN_MAX_H -#define _LIBCPP___CXX03___MATH_MIN_MAX_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// fmax - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float fmax(float __x, float __y) _NOEXCEPT { - return __builtin_fmaxf(__x, __y); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double fmax(double __x, double __y) _NOEXCEPT { - return __builtin_fmax(__x, __y); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double fmax(long double __x, long double __y) _NOEXCEPT { - return __builtin_fmaxl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type fmax(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::fmax((__result_type)__x, (__result_type)__y); -} - -// fmin - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float fmin(float __x, float __y) _NOEXCEPT { - return __builtin_fminf(__x, __y); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double fmin(double __x, double __y) _NOEXCEPT { - return __builtin_fmin(__x, __y); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double fmin(long double __x, long double __y) _NOEXCEPT { - return __builtin_fminl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type fmin(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::fmin((__result_type)__x, (__result_type)__y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_MIN_MAX_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/modulo.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/modulo.h deleted file mode 100644 index 5a61241..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/modulo.h +++ /dev/null @@ -1,63 +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___CXX03___MATH_MODULO_H -#define _LIBCPP___CXX03___MATH_MODULO_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// fmod - -inline _LIBCPP_HIDE_FROM_ABI float fmod(float __x, float __y) _NOEXCEPT { return __builtin_fmodf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double fmod(double __x, double __y) _NOEXCEPT { - return __builtin_fmod(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double fmod(long double __x, long double __y) _NOEXCEPT { - return __builtin_fmodl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type fmod(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::fmod((__result_type)__x, (__result_type)__y); -} - -// modf - -inline _LIBCPP_HIDE_FROM_ABI float modf(float __x, float* __y) _NOEXCEPT { return __builtin_modff(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double modf(double __x, double* __y) _NOEXCEPT { - return __builtin_modf(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double modf(long double __x, long double* __y) _NOEXCEPT { - return __builtin_modfl(__x, __y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_MODULO_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/remainder.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/remainder.h deleted file mode 100644 index a9f750b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/remainder.h +++ /dev/null @@ -1,73 +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___CXX03___MATH_REMAINDER_H -#define _LIBCPP___CXX03___MATH_REMAINDER_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// remainder - -inline _LIBCPP_HIDE_FROM_ABI float remainder(float __x, float __y) _NOEXCEPT { return __builtin_remainderf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double remainder(double __x, double __y) _NOEXCEPT { - return __builtin_remainder(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double remainder(long double __x, long double __y) _NOEXCEPT { - return __builtin_remainderl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type remainder(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::remainder((__result_type)__x, (__result_type)__y); -} - -// remquo - -inline _LIBCPP_HIDE_FROM_ABI float remquo(float __x, float __y, int* __z) _NOEXCEPT { - return __builtin_remquof(__x, __y, __z); -} - -template -_LIBCPP_HIDE_FROM_ABI double remquo(double __x, double __y, int* __z) _NOEXCEPT { - return __builtin_remquo(__x, __y, __z); -} - -inline _LIBCPP_HIDE_FROM_ABI long double remquo(long double __x, long double __y, int* __z) _NOEXCEPT { - return __builtin_remquol(__x, __y, __z); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type remquo(_A1 __x, _A2 __y, int* __z) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::remquo((__result_type)__x, (__result_type)__y, __z); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_REMAINDER_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/roots.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/roots.h deleted file mode 100644 index 77d9eea..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/roots.h +++ /dev/null @@ -1,62 +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___CXX03___MATH_ROOTS_H -#define _LIBCPP___CXX03___MATH_ROOTS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// sqrt - -inline _LIBCPP_HIDE_FROM_ABI float sqrt(float __x) _NOEXCEPT { return __builtin_sqrtf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double sqrt(double __x) _NOEXCEPT { - return __builtin_sqrt(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double sqrt(long double __x) _NOEXCEPT { return __builtin_sqrtl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double sqrt(_A1 __x) _NOEXCEPT { - return __builtin_sqrt((double)__x); -} - -// cbrt - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float cbrt(float __x) _NOEXCEPT { return __builtin_cbrtf(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double cbrt(double __x) _NOEXCEPT { - return __builtin_cbrt(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double cbrt(long double __x) _NOEXCEPT { - return __builtin_cbrtl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double cbrt(_A1 __x) _NOEXCEPT { - return __builtin_cbrt((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_ROOTS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/rounding_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/rounding_functions.h deleted file mode 100644 index e146d74..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/rounding_functions.h +++ /dev/null @@ -1,245 +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___CXX03___MATH_ROUNDING_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_ROUNDING_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/promote.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// ceil - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float ceil(float __x) _NOEXCEPT { return __builtin_ceilf(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double ceil(double __x) _NOEXCEPT { - return __builtin_ceil(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double ceil(long double __x) _NOEXCEPT { - return __builtin_ceill(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double ceil(_A1 __x) _NOEXCEPT { - return __builtin_ceil((double)__x); -} - -// floor - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float floor(float __x) _NOEXCEPT { return __builtin_floorf(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double floor(double __x) _NOEXCEPT { - return __builtin_floor(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double floor(long double __x) _NOEXCEPT { - return __builtin_floorl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double floor(_A1 __x) _NOEXCEPT { - return __builtin_floor((double)__x); -} - -// llrint - -inline _LIBCPP_HIDE_FROM_ABI long long llrint(float __x) _NOEXCEPT { return __builtin_llrintf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI long long llrint(double __x) _NOEXCEPT { - return __builtin_llrint(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long long llrint(long double __x) _NOEXCEPT { return __builtin_llrintl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI long long llrint(_A1 __x) _NOEXCEPT { - return __builtin_llrint((double)__x); -} - -// llround - -inline _LIBCPP_HIDE_FROM_ABI long long llround(float __x) _NOEXCEPT { return __builtin_llroundf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI long long llround(double __x) _NOEXCEPT { - return __builtin_llround(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long long llround(long double __x) _NOEXCEPT { return __builtin_llroundl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI long long llround(_A1 __x) _NOEXCEPT { - return __builtin_llround((double)__x); -} - -// lrint - -inline _LIBCPP_HIDE_FROM_ABI long lrint(float __x) _NOEXCEPT { return __builtin_lrintf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI long lrint(double __x) _NOEXCEPT { - return __builtin_lrint(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long lrint(long double __x) _NOEXCEPT { return __builtin_lrintl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI long lrint(_A1 __x) _NOEXCEPT { - return __builtin_lrint((double)__x); -} - -// lround - -inline _LIBCPP_HIDE_FROM_ABI long lround(float __x) _NOEXCEPT { return __builtin_lroundf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI long lround(double __x) _NOEXCEPT { - return __builtin_lround(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long lround(long double __x) _NOEXCEPT { return __builtin_lroundl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI long lround(_A1 __x) _NOEXCEPT { - return __builtin_lround((double)__x); -} - -// nearbyint - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float nearbyint(float __x) _NOEXCEPT { - return __builtin_nearbyintf(__x); -} - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double nearbyint(double __x) _NOEXCEPT { - return __builtin_nearbyint(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double nearbyint(long double __x) _NOEXCEPT { - return __builtin_nearbyintl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double nearbyint(_A1 __x) _NOEXCEPT { - return __builtin_nearbyint((double)__x); -} - -// nextafter - -inline _LIBCPP_HIDE_FROM_ABI float nextafter(float __x, float __y) _NOEXCEPT { return __builtin_nextafterf(__x, __y); } - -template -_LIBCPP_HIDE_FROM_ABI double nextafter(double __x, double __y) _NOEXCEPT { - return __builtin_nextafter(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double nextafter(long double __x, long double __y) _NOEXCEPT { - return __builtin_nextafterl(__x, __y); -} - -template ::value && is_arithmetic<_A2>::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI typename __promote<_A1, _A2>::type nextafter(_A1 __x, _A2 __y) _NOEXCEPT { - using __result_type = typename __promote<_A1, _A2>::type; - static_assert(!(_IsSame<_A1, __result_type>::value && _IsSame<_A2, __result_type>::value), ""); - return __math::nextafter((__result_type)__x, (__result_type)__y); -} - -// nexttoward - -inline _LIBCPP_HIDE_FROM_ABI float nexttoward(float __x, long double __y) _NOEXCEPT { - return __builtin_nexttowardf(__x, __y); -} - -template -_LIBCPP_HIDE_FROM_ABI double nexttoward(double __x, long double __y) _NOEXCEPT { - return __builtin_nexttoward(__x, __y); -} - -inline _LIBCPP_HIDE_FROM_ABI long double nexttoward(long double __x, long double __y) _NOEXCEPT { - return __builtin_nexttowardl(__x, __y); -} - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double nexttoward(_A1 __x, long double __y) _NOEXCEPT { - return __builtin_nexttoward((double)__x, __y); -} - -// rint - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float rint(float __x) _NOEXCEPT { return __builtin_rintf(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double rint(double __x) _NOEXCEPT { - return __builtin_rint(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double rint(long double __x) _NOEXCEPT { - return __builtin_rintl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double rint(_A1 __x) _NOEXCEPT { - return __builtin_rint((double)__x); -} - -// round - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float round(float __x) _NOEXCEPT { return __builtin_round(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double round(double __x) _NOEXCEPT { - return __builtin_round(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double round(long double __x) _NOEXCEPT { - return __builtin_roundl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double round(_A1 __x) _NOEXCEPT { - return __builtin_round((double)__x); -} - -// trunc - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI float trunc(float __x) _NOEXCEPT { return __builtin_trunc(__x); } - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI double trunc(double __x) _NOEXCEPT { - return __builtin_trunc(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI long double trunc(long double __x) _NOEXCEPT { - return __builtin_truncl(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI double trunc(_A1 __x) _NOEXCEPT { - return __builtin_trunc((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_ROUNDING_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/traits.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/traits.h deleted file mode 100644 index 250e88b..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/traits.h +++ /dev/null @@ -1,189 +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___CXX03___MATH_TRAITS_H -#define _LIBCPP___CXX03___MATH_TRAITS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_arithmetic.h> -#include <__cxx03/__type_traits/is_integral.h> -#include <__cxx03/__type_traits/is_signed.h> -#include <__cxx03/__type_traits/promote.h> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// signbit - -// The universal C runtime (UCRT) in the WinSDK provides floating point overloads -// for std::signbit(). By defining our overloads as templates, we can work around -// this issue as templates are less preferred than non-template functions. -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool signbit(float __x) _NOEXCEPT { - return __builtin_signbit(__x); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool signbit(double __x) _NOEXCEPT { - return __builtin_signbit(__x); -} - -template -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool signbit(long double __x) _NOEXCEPT { - return __builtin_signbit(__x); -} - -template ::value && is_signed<_A1>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool signbit(_A1 __x) _NOEXCEPT { - return __x < 0; -} - -template ::value && !is_signed<_A1>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool signbit(_A1) _NOEXCEPT { - return false; -} - -// isfinite - -template ::value && numeric_limits<_A1>::has_infinity, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isfinite(_A1 __x) _NOEXCEPT { - return __builtin_isfinite((typename __promote<_A1>::type)__x); -} - -template ::value && !numeric_limits<_A1>::has_infinity, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isfinite(_A1) _NOEXCEPT { - return true; -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isfinite(float __x) _NOEXCEPT { return __builtin_isfinite(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isfinite(double __x) _NOEXCEPT { return __builtin_isfinite(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isfinite(long double __x) _NOEXCEPT { - return __builtin_isfinite(__x); -} - -// isinf - -template ::value && numeric_limits<_A1>::has_infinity, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isinf(_A1 __x) _NOEXCEPT { - return __builtin_isinf((typename __promote<_A1>::type)__x); -} - -template ::value && !numeric_limits<_A1>::has_infinity, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isinf(_A1) _NOEXCEPT { - return false; -} - -#ifdef _LIBCPP_PREFERRED_OVERLOAD -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isinf(float __x) _NOEXCEPT { return __builtin_isinf(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD bool isinf(double __x) _NOEXCEPT { - return __builtin_isinf(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isinf(long double __x) _NOEXCEPT { return __builtin_isinf(__x); } -#endif - -// isnan - -template ::value, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isnan(_A1 __x) _NOEXCEPT { - return __builtin_isnan(__x); -} - -template ::value, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isnan(_A1) _NOEXCEPT { - return false; -} - -#ifdef _LIBCPP_PREFERRED_OVERLOAD -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isnan(float __x) _NOEXCEPT { return __builtin_isnan(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD bool isnan(double __x) _NOEXCEPT { - return __builtin_isnan(__x); -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isnan(long double __x) _NOEXCEPT { return __builtin_isnan(__x); } -#endif - -// isnormal - -template ::value, int> = 0> -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool isnormal(_A1 __x) _NOEXCEPT { - return __x != 0; -} - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isnormal(float __x) _NOEXCEPT { return __builtin_isnormal(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isnormal(double __x) _NOEXCEPT { return __builtin_isnormal(__x); } - -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isnormal(long double __x) _NOEXCEPT { - return __builtin_isnormal(__x); -} - -// isgreater - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isgreater(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_isgreater((type)__x, (type)__y); -} - -// isgreaterequal - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isgreaterequal(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_isgreaterequal((type)__x, (type)__y); -} - -// isless - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isless(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_isless((type)__x, (type)__y); -} - -// islessequal - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool islessequal(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_islessequal((type)__x, (type)__y); -} - -// islessgreater - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool islessgreater(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_islessgreater((type)__x, (type)__y); -} - -// isunordered - -template ::value && is_arithmetic<_A2>::value, int> = 0> -_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI bool isunordered(_A1 __x, _A2 __y) _NOEXCEPT { - using type = typename __promote<_A1, _A2>::type; - return __builtin_isunordered((type)__x, (type)__y); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_TRAITS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__math/trigonometric_functions.h b/third_party/libcxx/include/c++/v1/__cxx03/__math/trigonometric_functions.h deleted file mode 100644 index 6c23ae6..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__math/trigonometric_functions.h +++ /dev/null @@ -1,76 +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___CXX03___MATH_TRIGONOMETRIC_FUNCTIONS_H -#define _LIBCPP___CXX03___MATH_TRIGONOMETRIC_FUNCTIONS_H - -#include <__cxx03/__config> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_integral.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -namespace __math { - -// cos - -inline _LIBCPP_HIDE_FROM_ABI float cos(float __x) _NOEXCEPT { return __builtin_cosf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double cos(double __x) _NOEXCEPT { - return __builtin_cos(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double cos(long double __x) _NOEXCEPT { return __builtin_cosl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double cos(_A1 __x) _NOEXCEPT { - return __builtin_cos((double)__x); -} - -// sin - -inline _LIBCPP_HIDE_FROM_ABI float sin(float __x) _NOEXCEPT { return __builtin_sinf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double sin(double __x) _NOEXCEPT { - return __builtin_sin(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double sin(long double __x) _NOEXCEPT { return __builtin_sinl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double sin(_A1 __x) _NOEXCEPT { - return __builtin_sin((double)__x); -} - -// tan - -inline _LIBCPP_HIDE_FROM_ABI float tan(float __x) _NOEXCEPT { return __builtin_tanf(__x); } - -template -_LIBCPP_HIDE_FROM_ABI double tan(double __x) _NOEXCEPT { - return __builtin_tan(__x); -} - -inline _LIBCPP_HIDE_FROM_ABI long double tan(long double __x) _NOEXCEPT { return __builtin_tanl(__x); } - -template ::value, int> = 0> -inline _LIBCPP_HIDE_FROM_ABI double tan(_A1 __x) _NOEXCEPT { - return __builtin_tan((double)__x); -} - -} // namespace __math - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MATH_TRIGONOMETRIC_FUNCTIONS_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__mbstate_t.h b/third_party/libcxx/include/c++/v1/__cxx03/__mbstate_t.h deleted file mode 100644 index 6c7cfaa..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__mbstate_t.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___CXX03___MBSTATE_T_H -#define _LIBCPP___CXX03___MBSTATE_T_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -// The goal of this header is to provide mbstate_t without requiring all of -// or . It's also used by the libc++ versions of -// and to get mbstate_t when the C library doesn't provide -// or , hence the #include_next of those headers instead of #include. -// (e.g. if isn't present in the C library, the libc++ -// will include this header. This header needs to not turn around and cyclically -// include <__cxx03/wchar.h>, but fall through to .) -// -// This does not define std::mbstate_t -- this only brings in the declaration -// in the global namespace. - -// We define this here to support older versions of glibc that do -// not define this for clang. This is also set in libc++'s header, -// and we need to do so here too to avoid a different function signature given -// a different include order. -#ifdef __cplusplus -# define __CORRECT_ISO_CPP_WCHAR_H_PROTO -#endif - -#if defined(_LIBCPP_HAS_MUSL_LIBC) -# define __NEED_mbstate_t -# include -# undef __NEED_mbstate_t -#elif __has_include() -# include // works on most Unixes -#elif __has_include() -# include // works on Darwin -#elif !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) && __has_include_next() -# include_next // fall back to the C standard provider of mbstate_t -#elif __has_include_next() -# include_next // is also required to make mbstate_t visible -#else -# error "We don't know how to get the definition of mbstate_t without on your platform." -#endif - -#endif // _LIBCPP___CXX03___MBSTATE_T_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/addressof.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/addressof.h deleted file mode 100644 index 9bb49ba..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/addressof.h +++ /dev/null @@ -1,56 +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___CXX03___MEMORY_ADDRESSOF_H -#define _LIBCPP___CXX03___MEMORY_ADDRESSOF_H - -#include <__cxx03/__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -inline _LIBCPP_NO_CFI _LIBCPP_HIDE_FROM_ABI _Tp* addressof(_Tp& __x) _NOEXCEPT { - return __builtin_addressof(__x); -} - -#if defined(_LIBCPP_HAS_OBJC_ARC) && !defined(_LIBCPP_PREDEFINED_OBJC_ARC_ADDRESSOF) -// Objective-C++ Automatic Reference Counting uses qualified pointers -// that require special addressof() signatures. When -// _LIBCPP_PREDEFINED_OBJC_ARC_ADDRESSOF is defined, the compiler -// itself is providing these definitions. Otherwise, we provide them. -template -inline _LIBCPP_HIDE_FROM_ABI __strong _Tp* addressof(__strong _Tp& __x) _NOEXCEPT { - return &__x; -} - -# ifdef _LIBCPP_HAS_OBJC_ARC_WEAK -template -inline _LIBCPP_HIDE_FROM_ABI __weak _Tp* addressof(__weak _Tp& __x) _NOEXCEPT { - return &__x; -} -# endif - -template -inline _LIBCPP_HIDE_FROM_ABI __autoreleasing _Tp* addressof(__autoreleasing _Tp& __x) _NOEXCEPT { - return &__x; -} - -template -inline _LIBCPP_HIDE_FROM_ABI __unsafe_unretained _Tp* addressof(__unsafe_unretained _Tp& __x) _NOEXCEPT { - return &__x; -} -#endif - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ADDRESSOF_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/align.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/align.h deleted file mode 100644 index 2b2085f..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/align.h +++ /dev/null @@ -1,25 +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___CXX03___MEMORY_ALIGN_H -#define _LIBCPP___CXX03___MEMORY_ALIGN_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -_LIBCPP_EXPORTED_FROM_ABI void* align(size_t __align, size_t __sz, void*& __ptr, size_t& __space); - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ALIGN_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/aligned_alloc.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/aligned_alloc.h deleted file mode 100644 index 1efffcc..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/aligned_alloc.h +++ /dev/null @@ -1,53 +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___CXX03___MEMORY_ALIGNED_ALLOC_H -#define _LIBCPP___CXX03___MEMORY_ALIGNED_ALLOC_H - -#include <__cxx03/__config> -#include <__cxx03/cstddef> -#include <__cxx03/cstdlib> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -#ifndef _LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION - -// Low-level helpers to call the aligned allocation and deallocation functions -// on the target platform. This is used to implement libc++'s own memory -// allocation routines -- if you need to allocate memory inside the library, -// chances are that you want to use `__libcpp_allocate` instead. -// -// Returns the allocated memory, or `nullptr` on failure. -inline _LIBCPP_HIDE_FROM_ABI void* __libcpp_aligned_alloc(std::size_t __alignment, std::size_t __size) { -# if defined(_LIBCPP_MSVCRT_LIKE) - return ::_aligned_malloc(__size, __alignment); -# else - void* __result = nullptr; - (void)::posix_memalign(&__result, __alignment, __size); - // If posix_memalign fails, __result is unmodified so we still return `nullptr`. - return __result; -# endif -} - -inline _LIBCPP_HIDE_FROM_ABI void __libcpp_aligned_free(void* __ptr) { -# if defined(_LIBCPP_MSVCRT_LIKE) - ::_aligned_free(__ptr); -# else - ::free(__ptr); -# endif -} - -#endif // !_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ALIGNED_ALLOC_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocate_at_least.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocate_at_least.h deleted file mode 100644 index 3a906c7..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocate_at_least.h +++ /dev/null @@ -1,36 +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___CXX03___MEMORY_ALLOCATE_AT_LEAST_H -#define _LIBCPP___CXX03___MEMORY_ALLOCATE_AT_LEAST_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/allocator_traits.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -struct __allocation_result { - _Pointer ptr; - size_t count; -}; - -template -_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI __allocation_result::pointer> -__allocate_at_least(_Alloc& __alloc, size_t __n) { - return {__alloc.allocate(__n), __n}; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ALLOCATE_AT_LEAST_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocation_guard.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocation_guard.h deleted file mode 100644 index 0a2712d..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocation_guard.h +++ /dev/null @@ -1,108 +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___CXX03___MEMORY_ALLOCATION_GUARD_H -#define _LIBCPP___CXX03___MEMORY_ALLOCATION_GUARD_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__memory/allocator_traits.h> -#include <__cxx03/__utility/move.h> -#include <__cxx03/cstddef> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Helper class to allocate memory using an Allocator in an exception safe -// manner. -// -// The intended usage of this class is as follows: -// -// 0 -// 1 __allocation_guard guard(alloc, 10); -// 2 do_some_initialization_that_may_throw(guard.__get()); -// 3 save_allocated_pointer_in_a_noexcept_operation(guard.__release_ptr()); -// 4 -// -// If line (2) throws an exception during initialization of the memory, the -// guard's destructor will be called, and the memory will be released using -// Allocator deallocation. Otherwise, we release the memory from the guard on -// line (3) in an operation that can't throw -- after that, the guard is not -// responsible for the memory anymore. -// -// This is similar to a unique_ptr, except it's easier to use with a -// custom allocator. -template -struct __allocation_guard { - using _Pointer = typename allocator_traits<_Alloc>::pointer; - using _Size = typename allocator_traits<_Alloc>::size_type; - - template // we perform the allocator conversion inside the constructor - _LIBCPP_HIDE_FROM_ABI explicit __allocation_guard(_AllocT __alloc, _Size __n) - : __alloc_(std::move(__alloc)), - __n_(__n), - __ptr_(allocator_traits<_Alloc>::allocate(__alloc_, __n_)) // initialization order is important - {} - - _LIBCPP_HIDE_FROM_ABI ~__allocation_guard() _NOEXCEPT { __destroy(); } - - _LIBCPP_HIDE_FROM_ABI __allocation_guard(const __allocation_guard&) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard(__allocation_guard&& __other) _NOEXCEPT - : __alloc_(std::move(__other.__alloc_)), - __n_(__other.__n_), - __ptr_(__other.__ptr_) { - __other.__ptr_ = nullptr; - } - - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(const __allocation_guard& __other) = delete; - _LIBCPP_HIDE_FROM_ABI __allocation_guard& operator=(__allocation_guard&& __other) _NOEXCEPT { - if (std::addressof(__other) != this) { - __destroy(); - - __alloc_ = std::move(__other.__alloc_); - __n_ = __other.__n_; - __ptr_ = __other.__ptr_; - __other.__ptr_ = nullptr; - } - - return *this; - } - - _LIBCPP_HIDE_FROM_ABI _Pointer - __release_ptr() _NOEXCEPT { // not called __release() because it's a keyword in objective-c++ - _Pointer __tmp = __ptr_; - __ptr_ = nullptr; - return __tmp; - } - - _LIBCPP_HIDE_FROM_ABI _Pointer __get() const _NOEXCEPT { return __ptr_; } - -private: - _LIBCPP_HIDE_FROM_ABI void __destroy() _NOEXCEPT { - if (__ptr_ != nullptr) { - allocator_traits<_Alloc>::deallocate(__alloc_, __ptr_, __n_); - } - } - - _Alloc __alloc_; - _Size __n_; - _Pointer __ptr_; -}; - -_LIBCPP_END_NAMESPACE_STD - -_LIBCPP_POP_MACROS - -#endif // _LIBCPP___CXX03___MEMORY_ALLOCATION_GUARD_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator.h deleted file mode 100644 index cd6f7d9..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator.h +++ /dev/null @@ -1,162 +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___CXX03___MEMORY_ALLOCATOR_H -#define _LIBCPP___CXX03___MEMORY_ALLOCATOR_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/addressof.h> -#include <__cxx03/__memory/allocate_at_least.h> -#include <__cxx03/__memory/allocator_traits.h> -#include <__cxx03/__type_traits/is_const.h> -#include <__cxx03/__type_traits/is_constant_evaluated.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/is_void.h> -#include <__cxx03/__type_traits/is_volatile.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/cstddef> -#include <__cxx03/new> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class allocator; - -template <> -class _LIBCPP_TEMPLATE_VIS allocator { -public: - typedef void* pointer; - typedef const void* const_pointer; - typedef void value_type; - - template - struct rebind { - typedef allocator<_Up> other; - }; -}; - -// TODO(LLVM 20): Remove the escape hatch -#ifdef _LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST -template <> -class _LIBCPP_TEMPLATE_VIS allocator { -public: - typedef const void* pointer; - typedef const void* const_pointer; - typedef const void value_type; - - template - struct rebind { - typedef allocator<_Up> other; - }; -}; -#endif // _LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST - -// This class provides a non-trivial default constructor to the class that derives from it -// if the condition is satisfied. -// -// The second template parameter exists to allow giving a unique type to __non_trivial_if, -// which makes it possible to avoid breaking the ABI when making this a base class of an -// existing class. Without that, imagine we have classes D1 and D2, both of which used to -// have no base classes, but which now derive from __non_trivial_if. The layout of a class -// that inherits from both D1 and D2 will change because the two __non_trivial_if base -// classes are not allowed to share the same address. -// -// By making those __non_trivial_if base classes unique, we work around this problem and -// it is safe to start deriving from __non_trivial_if in existing classes. -template -struct __non_trivial_if {}; - -template -struct __non_trivial_if { - _LIBCPP_HIDE_FROM_ABI __non_trivial_if() _NOEXCEPT {} -}; - -// allocator -// -// Note: For ABI compatibility between C++20 and previous standards, we make -// allocator trivial in C++20. - -template -class _LIBCPP_TEMPLATE_VIS allocator : private __non_trivial_if::value, allocator<_Tp> > { - static_assert(!is_const<_Tp>::value, "std::allocator does not support const types"); - static_assert(!is_volatile<_Tp>::value, "std::allocator does not support volatile types"); - -public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp value_type; - typedef true_type propagate_on_container_move_assignment; - typedef true_type is_always_equal; - - _LIBCPP_HIDE_FROM_ABI allocator() _NOEXCEPT = default; - - template - _LIBCPP_HIDE_FROM_ABI allocator(const allocator<_Up>&) _NOEXCEPT {} - - _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _Tp* allocate(size_t __n) { - if (__n > allocator_traits::max_size(*this)) - __throw_bad_array_new_length(); - if (__libcpp_is_constant_evaluated()) { - return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); - } else { - return static_cast<_Tp*>(std::__libcpp_allocate(__n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp))); - } - } - - _LIBCPP_HIDE_FROM_ABI void deallocate(_Tp* __p, size_t __n) _NOEXCEPT { - if (__libcpp_is_constant_evaluated()) { - ::operator delete(__p); - } else { - std::__libcpp_deallocate((void*)__p, __n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp)); - } - } - - // C++20 Removed members - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - - template - struct rebind { - typedef allocator<_Up> other; - }; - - _LIBCPP_HIDE_FROM_ABI pointer address(reference __x) const _NOEXCEPT { return std::addressof(__x); } - _LIBCPP_HIDE_FROM_ABI const_pointer address(const_reference __x) const _NOEXCEPT { return std::addressof(__x); } - - _LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _Tp* allocate(size_t __n, const void*) { return allocate(__n); } - - _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return size_type(~0) / sizeof(_Tp); } - - template - _LIBCPP_HIDE_FROM_ABI void construct(_Up* __p, _Args&&... __args) { - ::new ((void*)__p) _Up(std::forward<_Args>(__args)...); - } - - _LIBCPP_HIDE_FROM_ABI void destroy(pointer __p) { __p->~_Tp(); } -}; - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator==(const allocator<_Tp>&, const allocator<_Up>&) _NOEXCEPT { - return true; -} - -template -inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const allocator<_Tp>&, const allocator<_Up>&) _NOEXCEPT { - return false; -} - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ALLOCATOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_arg_t.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_arg_t.h deleted file mode 100644 index 1dbea06..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_arg_t.h +++ /dev/null @@ -1,32 +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___CXX03___FUNCTIONAL_ALLOCATOR_ARG_T_H -#define _LIBCPP___CXX03___FUNCTIONAL_ALLOCATOR_ARG_T_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/uses_allocator.h> -#include <__cxx03/__type_traits/integral_constant.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/remove_cvref.h> -#include <__cxx03/__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { - explicit allocator_arg_t() = default; -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___FUNCTIONAL_ALLOCATOR_ARG_T_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_destructor.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_destructor.h deleted file mode 100644 index 2c69c91..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_destructor.h +++ /dev/null @@ -1,40 +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___CXX03___MEMORY_ALLOCATOR_DESTRUCTOR_H -#define _LIBCPP___CXX03___MEMORY_ALLOCATOR_DESTRUCTOR_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/allocator_traits.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template -class __allocator_destructor { - typedef _LIBCPP_NODEBUG allocator_traits<_Alloc> __alloc_traits; - -public: - typedef _LIBCPP_NODEBUG typename __alloc_traits::pointer pointer; - typedef _LIBCPP_NODEBUG typename __alloc_traits::size_type size_type; - -private: - _Alloc& __alloc_; - size_type __s_; - -public: - _LIBCPP_HIDE_FROM_ABI __allocator_destructor(_Alloc& __a, size_type __s) _NOEXCEPT : __alloc_(__a), __s_(__s) {} - _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT { __alloc_traits::deallocate(__alloc_, __p, __s_); } -}; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___CXX03___MEMORY_ALLOCATOR_DESTRUCTOR_H diff --git a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_traits.h b/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_traits.h deleted file mode 100644 index 6e7b8ca..0000000 --- a/third_party/libcxx/include/c++/v1/__cxx03/__memory/allocator_traits.h +++ /dev/null @@ -1,371 +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___CXX03___MEMORY_ALLOCATOR_TRAITS_H -#define _LIBCPP___CXX03___MEMORY_ALLOCATOR_TRAITS_H - -#include <__cxx03/__config> -#include <__cxx03/__memory/construct_at.h> -#include <__cxx03/__memory/pointer_traits.h> -#include <__cxx03/__type_traits/enable_if.h> -#include <__cxx03/__type_traits/is_constructible.h> -#include <__cxx03/__type_traits/is_empty.h> -#include <__cxx03/__type_traits/is_same.h> -#include <__cxx03/__type_traits/make_unsigned.h> -#include <__cxx03/__type_traits/remove_reference.h> -#include <__cxx03/__type_traits/void_t.h> -#include <__cxx03/__utility/declval.h> -#include <__cxx03/__utility/forward.h> -#include <__cxx03/cstddef> -#include <__cxx03/limits> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_PUSH_MACROS -#include <__cxx03/__undef_macros> - -_LIBCPP_BEGIN_NAMESPACE_STD - -#define _LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(NAME, PROPERTY) \ - template \ - struct NAME : false_type {}; \ - template \ - struct NAME<_Tp, __void_t > : true_type {} - -// __pointer -template , - bool = __has_pointer<_RawAlloc>::value> -struct __pointer { - using type _LIBCPP_NODEBUG = typename _RawAlloc::pointer; -}; -template -struct __pointer<_Tp, _Alloc, _RawAlloc, false> { - using type _LIBCPP_NODEBUG = _Tp*; -}; - -// __const_pointer -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_const_pointer, const_pointer); -template ::value> -struct __const_pointer { - using type _LIBCPP_NODEBUG = typename _Alloc::const_pointer; -}; -template -struct __const_pointer<_Tp, _Ptr, _Alloc, false> { - using type = typename pointer_traits<_Ptr>::template rebind::other; -}; - -// __void_pointer -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_void_pointer, void_pointer); -template ::value> -struct __void_pointer { - using type _LIBCPP_NODEBUG = typename _Alloc::void_pointer; -}; -template -struct __void_pointer<_Ptr, _Alloc, false> { - using type _LIBCPP_NODEBUG = typename pointer_traits<_Ptr>::template rebind::other; -}; - -// __const_void_pointer -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_const_void_pointer, const_void_pointer); -template ::value> -struct __const_void_pointer { - using type _LIBCPP_NODEBUG = typename _Alloc::const_void_pointer; -}; -template -struct __const_void_pointer<_Ptr, _Alloc, false> { - using type _LIBCPP_NODEBUG = typename pointer_traits<_Ptr>::template rebind::other; -}; - -// __size_type -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_size_type, size_type); -template ::value> -struct __size_type : make_unsigned<_DiffType> {}; -template -struct __size_type<_Alloc, _DiffType, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::size_type; -}; - -// __alloc_traits_difference_type -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_alloc_traits_difference_type, difference_type); -template ::value> -struct __alloc_traits_difference_type { - using type _LIBCPP_NODEBUG = typename pointer_traits<_Ptr>::difference_type; -}; -template -struct __alloc_traits_difference_type<_Alloc, _Ptr, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::difference_type; -}; - -// __propagate_on_container_copy_assignment -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_propagate_on_container_copy_assignment, propagate_on_container_copy_assignment); -template ::value> -struct __propagate_on_container_copy_assignment : false_type {}; -template -struct __propagate_on_container_copy_assignment<_Alloc, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::propagate_on_container_copy_assignment; -}; - -// __propagate_on_container_move_assignment -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_propagate_on_container_move_assignment, propagate_on_container_move_assignment); -template ::value> -struct __propagate_on_container_move_assignment : false_type {}; -template -struct __propagate_on_container_move_assignment<_Alloc, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::propagate_on_container_move_assignment; -}; - -// __propagate_on_container_swap -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_propagate_on_container_swap, propagate_on_container_swap); -template ::value> -struct __propagate_on_container_swap : false_type {}; -template -struct __propagate_on_container_swap<_Alloc, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::propagate_on_container_swap; -}; - -// __is_always_equal -_LIBCPP_ALLOCATOR_TRAITS_HAS_XXX(__has_is_always_equal, is_always_equal); -template ::value> -struct __is_always_equal : is_empty<_Alloc> {}; -template -struct __is_always_equal<_Alloc, true> { - using type _LIBCPP_NODEBUG = typename _Alloc::is_always_equal; -}; - -// __allocator_traits_rebind -_LIBCPP_SUPPRESS_DEPRECATED_PUSH -template -struct __has_rebind_other : false_type {}; -template -struct __has_rebind_other<_Tp, _Up, __void_t::other> > : true_type {}; - -template ::value> -struct __allocator_traits_rebind { - static_assert(__has_rebind_other<_Tp, _Up>::value, "This allocator has to implement rebind"); - using type _LIBCPP_NODEBUG = typename _Tp::template rebind<_Up>::other; -}; -template