re2 1.24.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -23,16 +23,6 @@ namespace absl {
|
|
|
23
23
|
ABSL_NAMESPACE_BEGIN
|
|
24
24
|
namespace strings_internal {
|
|
25
25
|
|
|
26
|
-
// The two strings below provide maps from normal 6-bit characters to their
|
|
27
|
-
// base64-escaped equivalent.
|
|
28
|
-
// For the inverse case, see kUn(WebSafe)Base64 in the external
|
|
29
|
-
// escaping.cc.
|
|
30
|
-
ABSL_CONST_INIT const char kBase64Chars[] =
|
|
31
|
-
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
32
|
-
|
|
33
|
-
ABSL_CONST_INIT const char kWebSafeBase64Chars[] =
|
|
34
|
-
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
35
|
-
|
|
36
26
|
size_t CalculateBase64EscapedLenInternal(size_t input_len, bool do_padding) {
|
|
37
27
|
// Base64 encodes three bytes of input at a time. If the input is not
|
|
38
28
|
// divisible by three, we pad as appropriate.
|
|
@@ -73,137 +63,6 @@ size_t CalculateBase64EscapedLenInternal(size_t input_len, bool do_padding) {
|
|
|
73
63
|
return len;
|
|
74
64
|
}
|
|
75
65
|
|
|
76
|
-
// ----------------------------------------------------------------------
|
|
77
|
-
// Take the input in groups of 4 characters and turn each
|
|
78
|
-
// character into a code 0 to 63 thus:
|
|
79
|
-
// A-Z map to 0 to 25
|
|
80
|
-
// a-z map to 26 to 51
|
|
81
|
-
// 0-9 map to 52 to 61
|
|
82
|
-
// +(- for WebSafe) maps to 62
|
|
83
|
-
// /(_ for WebSafe) maps to 63
|
|
84
|
-
// There will be four numbers, all less than 64 which can be represented
|
|
85
|
-
// by a 6 digit binary number (aaaaaa, bbbbbb, cccccc, dddddd respectively).
|
|
86
|
-
// Arrange the 6 digit binary numbers into three bytes as such:
|
|
87
|
-
// aaaaaabb bbbbcccc ccdddddd
|
|
88
|
-
// Equals signs (one or two) are used at the end of the encoded block to
|
|
89
|
-
// indicate that the text was not an integer multiple of three bytes long.
|
|
90
|
-
// ----------------------------------------------------------------------
|
|
91
|
-
size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
92
|
-
size_t szdest, const char* base64,
|
|
93
|
-
bool do_padding) {
|
|
94
|
-
static const char kPad64 = '=';
|
|
95
|
-
|
|
96
|
-
if (szsrc * 4 > szdest * 3) return 0;
|
|
97
|
-
|
|
98
|
-
char* cur_dest = dest;
|
|
99
|
-
const unsigned char* cur_src = src;
|
|
100
|
-
|
|
101
|
-
char* const limit_dest = dest + szdest;
|
|
102
|
-
const unsigned char* const limit_src = src + szsrc;
|
|
103
|
-
|
|
104
|
-
// (from https://tools.ietf.org/html/rfc3548)
|
|
105
|
-
// Special processing is performed if fewer than 24 bits are available
|
|
106
|
-
// at the end of the data being encoded. A full encoding quantum is
|
|
107
|
-
// always completed at the end of a quantity. When fewer than 24 input
|
|
108
|
-
// bits are available in an input group, zero bits are added (on the
|
|
109
|
-
// right) to form an integral number of 6-bit groups.
|
|
110
|
-
//
|
|
111
|
-
// If do_padding is true, padding at the end of the data is performed. This
|
|
112
|
-
// output padding uses the '=' character.
|
|
113
|
-
|
|
114
|
-
// Three bytes of data encodes to four characters of cyphertext.
|
|
115
|
-
// So we can pump through three-byte chunks atomically.
|
|
116
|
-
if (szsrc >= 3) { // "limit_src - 3" is UB if szsrc < 3.
|
|
117
|
-
while (cur_src < limit_src - 3) { // While we have >= 32 bits.
|
|
118
|
-
uint32_t in = absl::big_endian::Load32(cur_src) >> 8;
|
|
119
|
-
|
|
120
|
-
cur_dest[0] = base64[in >> 18];
|
|
121
|
-
in &= 0x3FFFF;
|
|
122
|
-
cur_dest[1] = base64[in >> 12];
|
|
123
|
-
in &= 0xFFF;
|
|
124
|
-
cur_dest[2] = base64[in >> 6];
|
|
125
|
-
in &= 0x3F;
|
|
126
|
-
cur_dest[3] = base64[in];
|
|
127
|
-
|
|
128
|
-
cur_dest += 4;
|
|
129
|
-
cur_src += 3;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// To save time, we didn't update szdest or szsrc in the loop. So do it now.
|
|
133
|
-
szdest = static_cast<size_t>(limit_dest - cur_dest);
|
|
134
|
-
szsrc = static_cast<size_t>(limit_src - cur_src);
|
|
135
|
-
|
|
136
|
-
/* now deal with the tail (<=3 bytes) */
|
|
137
|
-
switch (szsrc) {
|
|
138
|
-
case 0:
|
|
139
|
-
// Nothing left; nothing more to do.
|
|
140
|
-
break;
|
|
141
|
-
case 1: {
|
|
142
|
-
// One byte left: this encodes to two characters, and (optionally)
|
|
143
|
-
// two pad characters to round out the four-character cypherblock.
|
|
144
|
-
if (szdest < 2) return 0;
|
|
145
|
-
uint32_t in = cur_src[0];
|
|
146
|
-
cur_dest[0] = base64[in >> 2];
|
|
147
|
-
in &= 0x3;
|
|
148
|
-
cur_dest[1] = base64[in << 4];
|
|
149
|
-
cur_dest += 2;
|
|
150
|
-
szdest -= 2;
|
|
151
|
-
if (do_padding) {
|
|
152
|
-
if (szdest < 2) return 0;
|
|
153
|
-
cur_dest[0] = kPad64;
|
|
154
|
-
cur_dest[1] = kPad64;
|
|
155
|
-
cur_dest += 2;
|
|
156
|
-
szdest -= 2;
|
|
157
|
-
}
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
case 2: {
|
|
161
|
-
// Two bytes left: this encodes to three characters, and (optionally)
|
|
162
|
-
// one pad character to round out the four-character cypherblock.
|
|
163
|
-
if (szdest < 3) return 0;
|
|
164
|
-
uint32_t in = absl::big_endian::Load16(cur_src);
|
|
165
|
-
cur_dest[0] = base64[in >> 10];
|
|
166
|
-
in &= 0x3FF;
|
|
167
|
-
cur_dest[1] = base64[in >> 4];
|
|
168
|
-
in &= 0x00F;
|
|
169
|
-
cur_dest[2] = base64[in << 2];
|
|
170
|
-
cur_dest += 3;
|
|
171
|
-
szdest -= 3;
|
|
172
|
-
if (do_padding) {
|
|
173
|
-
if (szdest < 1) return 0;
|
|
174
|
-
cur_dest[0] = kPad64;
|
|
175
|
-
cur_dest += 1;
|
|
176
|
-
szdest -= 1;
|
|
177
|
-
}
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
case 3: {
|
|
181
|
-
// Three bytes left: same as in the big loop above. We can't do this in
|
|
182
|
-
// the loop because the loop above always reads 4 bytes, and the fourth
|
|
183
|
-
// byte is past the end of the input.
|
|
184
|
-
if (szdest < 4) return 0;
|
|
185
|
-
uint32_t in =
|
|
186
|
-
(uint32_t{cur_src[0]} << 16) + absl::big_endian::Load16(cur_src + 1);
|
|
187
|
-
cur_dest[0] = base64[in >> 18];
|
|
188
|
-
in &= 0x3FFFF;
|
|
189
|
-
cur_dest[1] = base64[in >> 12];
|
|
190
|
-
in &= 0xFFF;
|
|
191
|
-
cur_dest[2] = base64[in >> 6];
|
|
192
|
-
in &= 0x3F;
|
|
193
|
-
cur_dest[3] = base64[in];
|
|
194
|
-
cur_dest += 4;
|
|
195
|
-
szdest -= 4;
|
|
196
|
-
break;
|
|
197
|
-
}
|
|
198
|
-
default:
|
|
199
|
-
// Should not be reached: blocks of 4 bytes are handled
|
|
200
|
-
// in the while loop before this switch statement.
|
|
201
|
-
ABSL_RAW_LOG(FATAL, "Logic problem? szsrc = %zu", szsrc);
|
|
202
|
-
break;
|
|
203
|
-
}
|
|
204
|
-
return static_cast<size_t>(cur_dest - dest);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
66
|
} // namespace strings_internal
|
|
208
67
|
ABSL_NAMESPACE_END
|
|
209
68
|
} // namespace absl
|
|
@@ -15,43 +15,19 @@
|
|
|
15
15
|
#ifndef ABSL_STRINGS_INTERNAL_ESCAPING_H_
|
|
16
16
|
#define ABSL_STRINGS_INTERNAL_ESCAPING_H_
|
|
17
17
|
|
|
18
|
-
#include <
|
|
18
|
+
#include <cstddef>
|
|
19
19
|
|
|
20
|
-
#include "absl/
|
|
20
|
+
#include "absl/base/config.h"
|
|
21
21
|
|
|
22
22
|
namespace absl {
|
|
23
23
|
ABSL_NAMESPACE_BEGIN
|
|
24
24
|
namespace strings_internal {
|
|
25
25
|
|
|
26
|
-
ABSL_CONST_INIT extern const char kBase64Chars[];
|
|
27
|
-
ABSL_CONST_INIT extern const char kWebSafeBase64Chars[];
|
|
28
|
-
|
|
29
26
|
// Calculates the length of a Base64 encoding (RFC 4648) of a string of length
|
|
30
27
|
// `input_len`, with or without padding per `do_padding`. Note that 'web-safe'
|
|
31
28
|
// encoding (section 5 of the RFC) does not change this length.
|
|
32
29
|
size_t CalculateBase64EscapedLenInternal(size_t input_len, bool do_padding);
|
|
33
30
|
|
|
34
|
-
// Base64-encodes `src` using the alphabet provided in `base64` (which
|
|
35
|
-
// determines whether to do web-safe encoding or not) and writes the result to
|
|
36
|
-
// `dest`. If `do_padding` is true, `dest` is padded with '=' chars until its
|
|
37
|
-
// length is a multiple of 3. Returns the length of `dest`.
|
|
38
|
-
size_t Base64EscapeInternal(const unsigned char* src, size_t szsrc, char* dest,
|
|
39
|
-
size_t szdest, const char* base64, bool do_padding);
|
|
40
|
-
template <typename String>
|
|
41
|
-
void Base64EscapeInternal(const unsigned char* src, size_t szsrc, String* dest,
|
|
42
|
-
bool do_padding, const char* base64_chars) {
|
|
43
|
-
const size_t calc_escaped_size =
|
|
44
|
-
CalculateBase64EscapedLenInternal(szsrc, do_padding);
|
|
45
|
-
StringResizeAndOverwrite(
|
|
46
|
-
*dest, calc_escaped_size,
|
|
47
|
-
[src, szsrc, base64_chars, do_padding](char* buf, size_t buf_size) {
|
|
48
|
-
const size_t escaped_len = Base64EscapeInternal(
|
|
49
|
-
src, szsrc, buf, buf_size, base64_chars, do_padding);
|
|
50
|
-
assert(escaped_len == buf_size);
|
|
51
|
-
return escaped_len;
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
31
|
} // namespace strings_internal
|
|
56
32
|
ABSL_NAMESPACE_END
|
|
57
33
|
} // namespace absl
|
|
@@ -112,6 +112,23 @@ inline constexpr bool is_supported_ptr<
|
|
|
112
112
|
// would be a fork.
|
|
113
113
|
decltype(T().~ArenaSafeUniquePtr())> = true;
|
|
114
114
|
|
|
115
|
+
// `proto2::Arena::UniquePtr` is at least as safe as `std::unique_ptr`.
|
|
116
|
+
template <class T>
|
|
117
|
+
inline constexpr bool is_supported_ptr<
|
|
118
|
+
T,
|
|
119
|
+
// Check for `proto2::Arena::UniquePtr` without having to include its
|
|
120
|
+
// header here. This does match any type named `UniquePtr`, regardless
|
|
121
|
+
// of the scope it is defined in, but we try to restrict by probing some
|
|
122
|
+
// methods.
|
|
123
|
+
std::void_t<decltype(
|
|
124
|
+
// Check the class name using the destructor.
|
|
125
|
+
T().~UniquePtr(),
|
|
126
|
+
// Check some other members, to try to duck type into the right class.
|
|
127
|
+
T().get(), T().reset(), T().try_heap_release(),
|
|
128
|
+
T().GetOwningArena()
|
|
129
|
+
->template MakeUnique<int>(nullptr)
|
|
130
|
+
.~UniquePtr())>> = true;
|
|
131
|
+
|
|
115
132
|
// Specialization for floats: print floating point types using their
|
|
116
133
|
// max_digits10 precision. This ensures each distinct underlying values
|
|
117
134
|
// can be represented uniquely, even though it's not (strictly speaking)
|
|
@@ -220,6 +237,8 @@ std::ostream& GenericPrintImpl(std::ostream& os, const T& v) {
|
|
|
220
237
|
if constexpr (is_any_string<T> || std::is_same_v<T, absl::string_view>) {
|
|
221
238
|
// Specialization for strings: prints with plausible quoting and escaping.
|
|
222
239
|
return PrintEscapedString(os, v);
|
|
240
|
+
} else if constexpr (is_supported_ptr<T>) {
|
|
241
|
+
return (PrintSmartPointerContents)(os, v);
|
|
223
242
|
} else if constexpr (absl::HasAbslStringify<T>::value) {
|
|
224
243
|
// If someone has specified `AbslStringify`, we should prefer that.
|
|
225
244
|
return os << absl::StrCat(v);
|
|
@@ -246,8 +265,6 @@ std::ostream& GenericPrintImpl(std::ostream& os, const T& v) {
|
|
|
246
265
|
w)) {})) {
|
|
247
266
|
// For std::variant, use `std::visit(v)`
|
|
248
267
|
return (PrintVariant)(os, v);
|
|
249
|
-
} else if constexpr (is_supported_ptr<T>) {
|
|
250
|
-
return (PrintSmartPointerContents)(os, v);
|
|
251
268
|
} else if constexpr (meta_internal::Requires<const T>(
|
|
252
269
|
[&](auto&& w) -> decltype(w.ok(), w.status(), *w) {
|
|
253
270
|
})) {
|
|
@@ -263,6 +280,10 @@ std::ostream& GenericPrintImpl(std::ostream& os, const T& v) {
|
|
|
263
280
|
// Specialization for nullptr.
|
|
264
281
|
return os << "nullptr";
|
|
265
282
|
|
|
283
|
+
} else if constexpr (std::is_same_v<T, std::monostate>) {
|
|
284
|
+
// Specialization for `std::monostate`.
|
|
285
|
+
return os << "monostate";
|
|
286
|
+
|
|
266
287
|
} else if constexpr (std::is_floating_point_v<T>) {
|
|
267
288
|
// For floating point print with enough precision for a roundtrip.
|
|
268
289
|
return PrintPreciseFP(os, v);
|
|
@@ -373,6 +373,10 @@ TEST(GenericPrinterTest, Optional) {
|
|
|
373
373
|
generic_logging_test::Streamable{3})));
|
|
374
374
|
}
|
|
375
375
|
|
|
376
|
+
TEST(GenericPrinterTest, Monostate) {
|
|
377
|
+
EXPECT_EQ("monostate", GenericPrintToString(std::monostate{}));
|
|
378
|
+
}
|
|
379
|
+
|
|
376
380
|
TEST(GenericPrinterTest, Tuple) {
|
|
377
381
|
EXPECT_EQ("<1, two, 3>", GenericPrintToString(std::make_tuple(1, "two", 3)));
|
|
378
382
|
}
|
|
@@ -396,8 +400,8 @@ TEST(GenericPrinterTest, Variant) {
|
|
|
396
400
|
}
|
|
397
401
|
|
|
398
402
|
TEST(GenericPrinterTest, VariantMonostate) {
|
|
399
|
-
|
|
400
|
-
|
|
403
|
+
EXPECT_EQ("('(index = 0)' monostate)",
|
|
404
|
+
GenericPrintToString(std::variant<std::monostate, std::string>()));
|
|
401
405
|
}
|
|
402
406
|
|
|
403
407
|
TEST(GenericPrinterTest, VariantNonStreamable) {
|
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
#include <type_traits>
|
|
23
23
|
#include <utility>
|
|
24
24
|
|
|
25
|
+
#include "absl/base/optimization.h"
|
|
25
26
|
#include "absl/base/port.h"
|
|
26
|
-
#include "absl/
|
|
27
|
+
#include "absl/strings/resize_and_overwrite.h"
|
|
27
28
|
|
|
28
29
|
namespace absl {
|
|
29
30
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -41,8 +42,8 @@ struct ResizeUninitializedTraits {
|
|
|
41
42
|
// __resize_default_init is provided by libc++ >= 8.0
|
|
42
43
|
template <typename string_type>
|
|
43
44
|
struct ResizeUninitializedTraits<
|
|
44
|
-
string_type,
|
|
45
|
-
|
|
45
|
+
string_type, std::void_t<decltype(std::declval<string_type&>()
|
|
46
|
+
.__resize_default_init(237))> > {
|
|
46
47
|
using HasMember = std::true_type;
|
|
47
48
|
static void Resize(string_type* s, size_t new_size) {
|
|
48
49
|
s->__resize_default_init(new_size);
|
|
@@ -68,33 +69,39 @@ inline void STLStringResizeUninitialized(string_type* s, size_t new_size) {
|
|
|
68
69
|
ResizeUninitializedTraits<string_type>::Resize(s, new_size);
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
// In this type trait, we look for an __append_default_init member function, and
|
|
72
|
-
// we use it if available, otherwise, we use append.
|
|
73
|
-
template <typename string_type, typename = void>
|
|
74
|
-
struct AppendUninitializedTraits {
|
|
75
|
-
static void Append(string_type* s, size_t n) {
|
|
76
|
-
s->append(n, typename string_type::value_type());
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
template <typename string_type>
|
|
81
|
-
struct AppendUninitializedTraits<
|
|
82
|
-
string_type, absl::void_t<decltype(std::declval<string_type&>()
|
|
83
|
-
.__append_default_init(237))> > {
|
|
84
|
-
static void Append(string_type* s, size_t n) {
|
|
85
|
-
s->__append_default_init(n);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
72
|
// Like STLStringResizeUninitialized(str, new_size), except guaranteed to use
|
|
90
73
|
// exponential growth so that the amortized complexity of increasing the string
|
|
91
74
|
// size by a small amount is O(1), in contrast to O(str->size()) in the case of
|
|
92
75
|
// precise growth.
|
|
76
|
+
//
|
|
77
|
+
// TODO: b/446221957 - Delete this function.
|
|
93
78
|
template <typename string_type>
|
|
79
|
+
[[deprecated]]
|
|
94
80
|
void STLStringResizeUninitializedAmortized(string_type* s, size_t new_size) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
81
|
+
if (new_size > s->size()) {
|
|
82
|
+
if (new_size > s->capacity()) {
|
|
83
|
+
// Make sure to always grow by at least a factor of 2x. Change min_growth
|
|
84
|
+
// if you want to experiment with other growth strategies.
|
|
85
|
+
const auto min_growth = s->capacity();
|
|
86
|
+
if (ABSL_PREDICT_FALSE(s->capacity() > s->max_size() - min_growth)) {
|
|
87
|
+
s->reserve(s->max_size());
|
|
88
|
+
} else if (new_size < s->capacity() + min_growth) {
|
|
89
|
+
s->reserve(s->capacity() + min_growth);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// This calls absl::strings_internal::StringResizeAndOverwriteImpl() because
|
|
93
|
+
// the public API absl::StringResizeAndOverwrite() verifies that the
|
|
94
|
+
// required range has been initialized. No other code should be calling
|
|
95
|
+
// absl::strings_internal::StringResizeAndOverwriteImpl(). Instead it should
|
|
96
|
+
// be implemented correctly with absl::StringResizeAndOverwrite().
|
|
97
|
+
absl::strings_internal::StringResizeAndOverwriteImpl(
|
|
98
|
+
*s, new_size, [](typename string_type::value_type*, size_t buf_size) {
|
|
99
|
+
// TODO: b/446221957 - It is undefined behavior if any character in
|
|
100
|
+
// the range [0, return_value) is uninitialized, but we rely on this
|
|
101
|
+
// here to implement the old STLStringResizeUninitializedAmortized()
|
|
102
|
+
// API.
|
|
103
|
+
return buf_size;
|
|
104
|
+
});
|
|
98
105
|
} else {
|
|
99
106
|
s->erase(new_size);
|
|
100
107
|
}
|
|
@@ -14,106 +14,81 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/strings/internal/resize_uninitialized.h"
|
|
16
16
|
|
|
17
|
+
#include <cstddef>
|
|
18
|
+
#include <limits>
|
|
19
|
+
|
|
17
20
|
#include "gtest/gtest.h"
|
|
18
21
|
|
|
19
22
|
namespace {
|
|
20
23
|
|
|
21
24
|
int resize_call_count = 0;
|
|
22
|
-
int append_call_count = 0;
|
|
23
25
|
|
|
24
26
|
// A mock string class whose only purpose is to track how many times its
|
|
25
|
-
// resize()
|
|
27
|
+
// resize() method has been called.
|
|
26
28
|
struct resizable_string {
|
|
27
29
|
using value_type = char;
|
|
30
|
+
using size_type = size_t;
|
|
28
31
|
size_t size() const { return 0; }
|
|
29
32
|
size_t capacity() const { return 0; }
|
|
30
|
-
char
|
|
31
|
-
|
|
32
|
-
return c;
|
|
33
|
-
}
|
|
33
|
+
char* data() { return buffer; }
|
|
34
|
+
char& operator[](size_t) { return buffer[0]; }
|
|
34
35
|
void resize(size_t) { resize_call_count += 1; }
|
|
35
|
-
void append(size_t, value_type) { append_call_count += 1; }
|
|
36
36
|
void reserve(size_t) {}
|
|
37
37
|
resizable_string& erase(size_t = 0, size_t = 0) { return *this; }
|
|
38
|
+
size_t max_size() const { return std::numeric_limits<size_t>::max(); }
|
|
39
|
+
char buffer[1] = {};
|
|
38
40
|
};
|
|
39
41
|
|
|
40
42
|
int resize_default_init_call_count = 0;
|
|
41
|
-
int append_default_init_call_count = 0;
|
|
42
43
|
|
|
43
44
|
// A mock string class whose only purpose is to track how many times its
|
|
44
|
-
// resize()/__resize_default_init()
|
|
45
|
-
// have been called.
|
|
45
|
+
// resize()/__resize_default_init() methods have been called.
|
|
46
46
|
struct default_init_string {
|
|
47
|
+
using value_type = char;
|
|
48
|
+
using size_type = size_t;
|
|
47
49
|
size_t size() const { return 0; }
|
|
48
50
|
size_t capacity() const { return 0; }
|
|
49
|
-
char
|
|
50
|
-
|
|
51
|
-
return c;
|
|
52
|
-
}
|
|
51
|
+
char* data() { return buffer; }
|
|
52
|
+
char& operator[](size_t) { return buffer[0]; }
|
|
53
53
|
void resize(size_t) { resize_call_count += 1; }
|
|
54
54
|
void __resize_default_init(size_t) { resize_default_init_call_count += 1; }
|
|
55
|
-
void __append_default_init(size_t) { append_default_init_call_count += 1; }
|
|
56
55
|
void reserve(size_t) {}
|
|
57
56
|
default_init_string& erase(size_t = 0, size_t = 0) { return *this; }
|
|
57
|
+
size_t max_size() const { return std::numeric_limits<size_t>::max(); }
|
|
58
|
+
char buffer[1];
|
|
58
59
|
};
|
|
59
60
|
|
|
60
61
|
TEST(ResizeUninit, WithAndWithout) {
|
|
61
62
|
resize_call_count = 0;
|
|
62
|
-
append_call_count = 0;
|
|
63
63
|
resize_default_init_call_count = 0;
|
|
64
|
-
append_default_init_call_count = 0;
|
|
65
64
|
{
|
|
66
65
|
resizable_string rs;
|
|
67
66
|
|
|
68
67
|
EXPECT_EQ(resize_call_count, 0);
|
|
69
|
-
EXPECT_EQ(append_call_count, 0);
|
|
70
68
|
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
71
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
72
69
|
EXPECT_FALSE(
|
|
73
70
|
absl::strings_internal::STLStringSupportsNontrashingResize(&rs));
|
|
74
71
|
EXPECT_EQ(resize_call_count, 0);
|
|
75
|
-
EXPECT_EQ(append_call_count, 0);
|
|
76
72
|
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
77
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
78
73
|
absl::strings_internal::STLStringResizeUninitialized(&rs, 237);
|
|
79
74
|
EXPECT_EQ(resize_call_count, 1);
|
|
80
|
-
EXPECT_EQ(append_call_count, 0);
|
|
81
75
|
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
82
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
83
|
-
absl::strings_internal::STLStringResizeUninitializedAmortized(&rs, 1000);
|
|
84
|
-
EXPECT_EQ(resize_call_count, 1);
|
|
85
|
-
EXPECT_EQ(append_call_count, 1);
|
|
86
|
-
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
87
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
88
76
|
}
|
|
89
77
|
|
|
90
78
|
resize_call_count = 0;
|
|
91
|
-
append_call_count = 0;
|
|
92
79
|
resize_default_init_call_count = 0;
|
|
93
|
-
append_default_init_call_count = 0;
|
|
94
80
|
{
|
|
95
81
|
default_init_string rus;
|
|
96
82
|
|
|
97
83
|
EXPECT_EQ(resize_call_count, 0);
|
|
98
|
-
EXPECT_EQ(append_call_count, 0);
|
|
99
84
|
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
100
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
101
85
|
EXPECT_TRUE(
|
|
102
86
|
absl::strings_internal::STLStringSupportsNontrashingResize(&rus));
|
|
103
87
|
EXPECT_EQ(resize_call_count, 0);
|
|
104
|
-
EXPECT_EQ(append_call_count, 0);
|
|
105
88
|
EXPECT_EQ(resize_default_init_call_count, 0);
|
|
106
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
107
89
|
absl::strings_internal::STLStringResizeUninitialized(&rus, 237);
|
|
108
90
|
EXPECT_EQ(resize_call_count, 0);
|
|
109
|
-
EXPECT_EQ(append_call_count, 0);
|
|
110
|
-
EXPECT_EQ(resize_default_init_call_count, 1);
|
|
111
|
-
EXPECT_EQ(append_default_init_call_count, 0);
|
|
112
|
-
absl::strings_internal::STLStringResizeUninitializedAmortized(&rus, 1000);
|
|
113
|
-
EXPECT_EQ(resize_call_count, 0);
|
|
114
|
-
EXPECT_EQ(append_call_count, 0);
|
|
115
91
|
EXPECT_EQ(resize_default_init_call_count, 1);
|
|
116
|
-
EXPECT_EQ(append_default_init_call_count, 1);
|
|
117
92
|
}
|
|
118
93
|
}
|
|
119
94
|
|