re2 1.22.2 → 1.23.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/README.md +60 -4
- package/binding.gyp +5 -1
- package/lib/addon.cc +4 -0
- package/lib/new.cc +1 -246
- package/lib/pattern.cc +252 -0
- package/lib/pattern.h +10 -0
- package/lib/set.cc +777 -0
- package/lib/wrapped_re2_set.h +42 -0
- package/package.json +21 -9
- package/re2.d.ts +46 -9
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
- package/vendor/abseil-cpp/CMake/README.md +2 -2
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/MODULE.bazel +6 -9
- package/vendor/abseil-cpp/README.md +6 -8
- package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
- package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
- package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
- package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
- package/vendor/abseil-cpp/absl/base/config.h +22 -129
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
- package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
- package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
- package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
- package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
- package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
- package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
- package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
- package/vendor/abseil-cpp/absl/base/options.h +3 -80
- package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
- package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
- package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
- package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
- package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
- package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
- package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
- package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
- package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
- package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
- package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
- package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
- package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
- package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
- package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
- package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
- package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
- package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
- package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
- package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
- package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
- package/vendor/abseil-cpp/absl/log/check.h +2 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
- package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
- package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
- package/vendor/abseil-cpp/absl/log/globals.h +4 -5
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
- package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
- package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
- package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
- package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
- package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
- package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
- package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
- package/vendor/abseil-cpp/absl/log/log.h +48 -35
- package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
- package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
- package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
- package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
- package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
- package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
- package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
- package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
- package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
- package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
- package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
- package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
- package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
- package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
- package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
- package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
- package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
- package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
- package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
- package/vendor/abseil-cpp/absl/random/random.h +88 -53
- package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
- package/vendor/abseil-cpp/absl/status/status.cc +4 -8
- package/vendor/abseil-cpp/absl/status/status.h +8 -8
- package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
- package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
- package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
- package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
- package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
- package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
- package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
- package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
- package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
- package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
- package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
- package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
- package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
- package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
- package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
- package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
- package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
- package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
- package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
- package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
- package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
- package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
- package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
- package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
- package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
- package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
- package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
- package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
- package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
- package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
- package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
- package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
- package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
- package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
- package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
- package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
- package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
- package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
- package/vendor/abseil-cpp/absl/time/time.h +24 -18
- package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
- package/vendor/abseil-cpp/absl/types/any.h +9 -484
- package/vendor/abseil-cpp/absl/types/optional.h +7 -747
- package/vendor/abseil-cpp/absl/types/span.h +46 -19
- package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
- package/vendor/abseil-cpp/absl/types/variant.h +5 -784
- package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
- package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
- package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
- package/vendor/re2/.bazelrc +4 -4
- package/vendor/re2/.bcr/metadata.template.json +16 -0
- package/vendor/re2/.bcr/presubmit.yml +57 -0
- package/vendor/re2/.bcr/source.template.json +5 -0
- package/vendor/re2/.github/bazel.sh +1 -7
- package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
- package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
- package/vendor/re2/.github/workflows/ci.yml +5 -6
- package/vendor/re2/.github/workflows/pages.yml +3 -3
- package/vendor/re2/.github/workflows/python.yml +29 -24
- package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
- package/vendor/re2/.github/workflows/release.yml +15 -4
- package/vendor/re2/BUILD.bazel +25 -0
- package/vendor/re2/CMakeLists.txt +100 -85
- package/vendor/re2/CONTRIBUTING.md +0 -1
- package/vendor/re2/MODULE.bazel +10 -10
- package/vendor/re2/Makefile +1 -1
- package/vendor/re2/README.md +259 -0
- package/vendor/re2/python/BUILD.bazel +8 -0
- package/vendor/re2/python/re2.py +1 -1
- package/vendor/re2/python/re2_test.py +6 -0
- package/vendor/re2/python/setup.py +3 -3
- package/vendor/re2/re2/bitmap256.cc +3 -4
- package/vendor/re2/re2/bitstate.cc +15 -10
- package/vendor/re2/re2/dfa.cc +1 -2
- package/vendor/re2/re2/parse.cc +3 -4
- package/vendor/re2/re2/prog.cc +1 -2
- package/vendor/re2/re2/prog.h +1 -0
- package/vendor/re2/re2/re2.cc +5 -0
- package/vendor/re2/re2/re2.h +9 -9
- package/vendor/re2/re2/set.cc +6 -0
- package/vendor/re2/re2/set.h +5 -0
- package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
- package/vendor/re2/re2/testing/re2_test.cc +8 -0
- package/vendor/re2/re2/testing/set_test.cc +5 -0
- package/vendor/re2/re2/walker-inl.h +1 -1
- package/vendor/abseil-cpp/WORKSPACE +0 -76
- package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
- package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
- package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
- package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
- package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
- package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
- package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
- package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
- package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
- package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
- package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
- package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
- package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
- package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
- package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
- package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
- package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
- package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
- package/vendor/re2/.github/workflows/pr.yml +0 -34
- package/vendor/re2/README +0 -47
|
@@ -64,24 +64,24 @@ struct Elem<CompressedTuple<B...>, I>
|
|
|
64
64
|
template <typename D, size_t I>
|
|
65
65
|
using ElemT = typename Elem<D, I>::type;
|
|
66
66
|
|
|
67
|
-
// We can't use EBCO on other CompressedTuples because that would mean that we
|
|
68
|
-
// derive from multiple Storage<> instantiations with the same I parameter,
|
|
69
|
-
// and potentially from multiple identical Storage<> instantiations. So anytime
|
|
70
|
-
// we use type inheritance rather than encapsulation, we mark
|
|
71
|
-
// CompressedTupleImpl, to make this easy to detect.
|
|
72
|
-
struct uses_inheritance {};
|
|
73
67
|
|
|
74
68
|
template <typename T>
|
|
75
69
|
constexpr bool ShouldUseBase() {
|
|
76
70
|
return std::is_class<T>::value && std::is_empty<T>::value &&
|
|
77
|
-
!std::is_final<T>::value
|
|
78
|
-
!std::is_base_of<uses_inheritance, T>::value;
|
|
71
|
+
!std::is_final<T>::value;
|
|
79
72
|
}
|
|
80
73
|
|
|
74
|
+
// Tag type used to disambiguate Storage types for different CompresseedTuples.
|
|
75
|
+
// Without it, CompressedTuple<T, CompressedTuple<T>> would inherit from
|
|
76
|
+
// Storage<T, 0> twice.
|
|
77
|
+
template <typename... Ts>
|
|
78
|
+
struct StorageTag;
|
|
79
|
+
|
|
81
80
|
// The storage class provides two specializations:
|
|
82
81
|
// - For empty classes, it stores T as a base class.
|
|
83
82
|
// - For everything else, it stores T as a member.
|
|
84
|
-
|
|
83
|
+
// Tag should be set to StorageTag<Ts...>.
|
|
84
|
+
template <typename T, size_t I, typename Tag, bool UseBase = ShouldUseBase<T>()>
|
|
85
85
|
struct Storage {
|
|
86
86
|
T value;
|
|
87
87
|
constexpr Storage() = default;
|
|
@@ -94,8 +94,8 @@ struct Storage {
|
|
|
94
94
|
constexpr T&& get() && { return std::move(*this).value; }
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
template <typename T, size_t I>
|
|
98
|
-
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<T, I, true> : T {
|
|
97
|
+
template <typename T, size_t I, typename Tag>
|
|
98
|
+
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC Storage<T, I, Tag, true> : T {
|
|
99
99
|
constexpr Storage() = default;
|
|
100
100
|
|
|
101
101
|
template <typename V>
|
|
@@ -111,30 +111,35 @@ template <typename D, typename I, bool ShouldAnyUseBase>
|
|
|
111
111
|
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTupleImpl;
|
|
112
112
|
|
|
113
113
|
template <typename... Ts, size_t... I, bool ShouldAnyUseBase>
|
|
114
|
-
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
|
|
115
|
-
CompressedTuple<Ts...>, absl::index_sequence<I...>,
|
|
114
|
+
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
|
|
115
|
+
CompressedTupleImpl<CompressedTuple<Ts...>, absl::index_sequence<I...>,
|
|
116
|
+
ShouldAnyUseBase>
|
|
116
117
|
// We use the dummy identity function through std::integral_constant to
|
|
117
118
|
// convince MSVC of accepting and expanding I in that context. Without it
|
|
118
119
|
// you would get:
|
|
119
120
|
// error C3548: 'I': parameter pack cannot be used in this context
|
|
120
|
-
:
|
|
121
|
-
|
|
121
|
+
: Storage<Ts, std::integral_constant<size_t, I>::value,
|
|
122
|
+
StorageTag<Ts...>>... {
|
|
122
123
|
constexpr CompressedTupleImpl() = default;
|
|
123
124
|
template <typename... Vs>
|
|
124
125
|
explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
|
|
125
|
-
: Storage<Ts, I
|
|
126
|
+
: Storage<Ts, I, StorageTag<Ts...>>(absl::in_place,
|
|
127
|
+
std::forward<Vs>(args))... {}
|
|
126
128
|
friend CompressedTuple<Ts...>;
|
|
127
129
|
};
|
|
128
130
|
|
|
129
131
|
template <typename... Ts, size_t... I>
|
|
130
|
-
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
|
|
131
|
-
CompressedTuple<Ts...>, absl::index_sequence<I...>,
|
|
132
|
+
struct ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC
|
|
133
|
+
CompressedTupleImpl<CompressedTuple<Ts...>, absl::index_sequence<I...>,
|
|
134
|
+
false>
|
|
132
135
|
// We use the dummy identity function as above...
|
|
133
|
-
: Storage<Ts, std::integral_constant<size_t, I>::value,
|
|
136
|
+
: Storage<Ts, std::integral_constant<size_t, I>::value, StorageTag<Ts...>,
|
|
137
|
+
false>... {
|
|
134
138
|
constexpr CompressedTupleImpl() = default;
|
|
135
139
|
template <typename... Vs>
|
|
136
140
|
explicit constexpr CompressedTupleImpl(absl::in_place_t, Vs&&... args)
|
|
137
|
-
: Storage<Ts, I, false>(absl::in_place,
|
|
141
|
+
: Storage<Ts, I, StorageTag<Ts...>, false>(absl::in_place,
|
|
142
|
+
std::forward<Vs>(args))... {}
|
|
138
143
|
friend CompressedTuple<Ts...>;
|
|
139
144
|
};
|
|
140
145
|
|
|
@@ -183,9 +188,7 @@ struct TupleItemsMoveConstructible
|
|
|
183
188
|
// Helper class to perform the Empty Base Class Optimization.
|
|
184
189
|
// Ts can contain classes and non-classes, empty or not. For the ones that
|
|
185
190
|
// are empty classes, we perform the CompressedTuple. If all types in Ts are
|
|
186
|
-
// empty classes, then CompressedTuple<Ts...> is itself an empty class.
|
|
187
|
-
// does not apply when one or more of those empty classes is itself an empty
|
|
188
|
-
// CompressedTuple.)
|
|
191
|
+
// empty classes, then CompressedTuple<Ts...> is itself an empty class.
|
|
189
192
|
//
|
|
190
193
|
// To access the members, use member .get<N>() function.
|
|
191
194
|
//
|
|
@@ -208,7 +211,8 @@ class ABSL_INTERNAL_COMPRESSED_TUPLE_DECLSPEC CompressedTuple
|
|
|
208
211
|
using ElemT = internal_compressed_tuple::ElemT<CompressedTuple, I>;
|
|
209
212
|
|
|
210
213
|
template <int I>
|
|
211
|
-
using StorageT = internal_compressed_tuple::Storage<
|
|
214
|
+
using StorageT = internal_compressed_tuple::Storage<
|
|
215
|
+
ElemT<I>, I, internal_compressed_tuple::StorageTag<Ts...>>;
|
|
212
216
|
|
|
213
217
|
public:
|
|
214
218
|
// There seems to be a bug in MSVC dealing in which using '=default' here will
|
|
@@ -386,20 +386,6 @@ TEST(CompressedTupleTest, Constexpr) {
|
|
|
386
386
|
|
|
387
387
|
using Tuple = CompressedTuple<int, double, CompressedTuple<int>, Empty<0>>;
|
|
388
388
|
|
|
389
|
-
constexpr int r0 =
|
|
390
|
-
AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<0>();
|
|
391
|
-
constexpr double r1 =
|
|
392
|
-
AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<1>();
|
|
393
|
-
constexpr int r2 =
|
|
394
|
-
AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<2>().get<0>();
|
|
395
|
-
constexpr CallType r3 =
|
|
396
|
-
AsLValue(Tuple(1, 0.75, CompressedTuple<int>(9), {})).get<3>().value();
|
|
397
|
-
|
|
398
|
-
EXPECT_EQ(r0, 1);
|
|
399
|
-
EXPECT_EQ(r1, 0.75);
|
|
400
|
-
EXPECT_EQ(r2, 9);
|
|
401
|
-
EXPECT_EQ(r3, CallType::kMutableRef);
|
|
402
|
-
|
|
403
389
|
constexpr Tuple x(7, 1.25, CompressedTuple<int>(5), {});
|
|
404
390
|
constexpr int x0 = x.get<0>();
|
|
405
391
|
constexpr double x1 = x.get<1>();
|
|
@@ -466,14 +452,15 @@ TEST(CompressedTupleTest, EmptyFinalClass) {
|
|
|
466
452
|
}
|
|
467
453
|
#endif
|
|
468
454
|
|
|
469
|
-
|
|
470
|
-
TEST(CompressedTupleTest, DISABLED_NestedEbo) {
|
|
455
|
+
TEST(CompressedTupleTest, NestedEbo) {
|
|
471
456
|
struct Empty1 {};
|
|
472
457
|
struct Empty2 {};
|
|
473
458
|
CompressedTuple<Empty1, CompressedTuple<Empty2>, int> x;
|
|
474
459
|
CompressedTuple<Empty1, Empty2, int> y;
|
|
475
|
-
// Currently fails with sizeof(x) == 8, sizeof(y) == 4.
|
|
476
460
|
EXPECT_EQ(sizeof(x), sizeof(y));
|
|
461
|
+
|
|
462
|
+
using NestedEmpty = CompressedTuple<Empty1, CompressedTuple<Empty2>>;
|
|
463
|
+
EXPECT_TRUE(std::is_empty_v<NestedEmpty>);
|
|
477
464
|
}
|
|
478
465
|
|
|
479
466
|
} // namespace
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
#include <utility>
|
|
27
27
|
|
|
28
28
|
#include "absl/base/config.h"
|
|
29
|
+
#include "absl/hash/hash.h"
|
|
29
30
|
#include "absl/memory/memory.h"
|
|
30
31
|
#include "absl/meta/type_traits.h"
|
|
31
32
|
#include "absl/utility/utility.h"
|
|
@@ -374,9 +375,6 @@ struct map_slot_policy {
|
|
|
374
375
|
return slot->value;
|
|
375
376
|
}
|
|
376
377
|
|
|
377
|
-
// When C++17 is available, we can use std::launder to provide mutable
|
|
378
|
-
// access to the key for use in node handle.
|
|
379
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
|
|
380
378
|
static K& mutable_key(slot_type* slot) {
|
|
381
379
|
// Still check for kMutableKeys so that we can avoid calling std::launder
|
|
382
380
|
// unless necessary because it can interfere with optimizations.
|
|
@@ -384,9 +382,6 @@ struct map_slot_policy {
|
|
|
384
382
|
: *std::launder(const_cast<K*>(
|
|
385
383
|
std::addressof(slot->value.first)));
|
|
386
384
|
}
|
|
387
|
-
#else // !(defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606)
|
|
388
|
-
static const K& mutable_key(slot_type* slot) { return key(slot); }
|
|
389
|
-
#endif
|
|
390
385
|
|
|
391
386
|
static const K& key(const slot_type* slot) {
|
|
392
387
|
return kMutableKeys::value ? slot->key : slot->value.first;
|
|
@@ -439,11 +434,17 @@ struct map_slot_policy {
|
|
|
439
434
|
template <class Allocator>
|
|
440
435
|
static auto transfer(Allocator* alloc, slot_type* new_slot,
|
|
441
436
|
slot_type* old_slot) {
|
|
442
|
-
|
|
443
|
-
|
|
437
|
+
// This should really just be
|
|
438
|
+
// typename absl::is_trivially_relocatable<value_type>::type()
|
|
439
|
+
// but std::pair is not trivially copyable in C++23 in some standard
|
|
440
|
+
// library versions.
|
|
441
|
+
// See https://github.com/llvm/llvm-project/pull/95444 for instance.
|
|
442
|
+
auto is_relocatable = typename std::conjunction<
|
|
443
|
+
absl::is_trivially_relocatable<typename value_type::first_type>,
|
|
444
|
+
absl::is_trivially_relocatable<typename value_type::second_type>>::
|
|
445
|
+
type();
|
|
444
446
|
|
|
445
447
|
emplace(new_slot);
|
|
446
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
|
|
447
448
|
if (is_relocatable) {
|
|
448
449
|
// TODO(b/247130232,b/251814870): remove casts after fixing warnings.
|
|
449
450
|
std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
|
|
@@ -451,7 +452,6 @@ struct map_slot_policy {
|
|
|
451
452
|
sizeof(value_type));
|
|
452
453
|
return is_relocatable;
|
|
453
454
|
}
|
|
454
|
-
#endif
|
|
455
455
|
|
|
456
456
|
if (kMutableKeys::value) {
|
|
457
457
|
absl::allocator_traits<Allocator>::construct(
|
|
@@ -465,24 +465,87 @@ struct map_slot_policy {
|
|
|
465
465
|
}
|
|
466
466
|
};
|
|
467
467
|
|
|
468
|
+
// Suppress erroneous uninitialized memory errors on GCC. For example, GCC
|
|
469
|
+
// thinks that the call to slot_array() in find_or_prepare_insert() is reading
|
|
470
|
+
// uninitialized memory, but slot_array is only called there when the table is
|
|
471
|
+
// non-empty and this memory is initialized when the table is non-empty.
|
|
472
|
+
#if !defined(__clang__) && defined(__GNUC__)
|
|
473
|
+
#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(x) \
|
|
474
|
+
_Pragma("GCC diagnostic push") \
|
|
475
|
+
_Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") \
|
|
476
|
+
_Pragma("GCC diagnostic ignored \"-Wuninitialized\"") x; \
|
|
477
|
+
_Pragma("GCC diagnostic pop")
|
|
478
|
+
#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) \
|
|
479
|
+
ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(return x)
|
|
480
|
+
#else
|
|
481
|
+
#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(x) x
|
|
482
|
+
#define ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(x) return x
|
|
483
|
+
#endif
|
|
484
|
+
|
|
485
|
+
// Variadic arguments hash function that ignore the rest of the arguments.
|
|
486
|
+
// Useful for usage with policy traits.
|
|
487
|
+
template <class Hash, bool kIsDefault>
|
|
488
|
+
struct HashElement {
|
|
489
|
+
HashElement(const Hash& h, size_t s) : hash(h), seed(s) {}
|
|
490
|
+
|
|
491
|
+
template <class K, class... Args>
|
|
492
|
+
size_t operator()(const K& key, Args&&...) const {
|
|
493
|
+
if constexpr (kIsDefault) {
|
|
494
|
+
// TODO(b/384509507): resolve `no header providing
|
|
495
|
+
// "absl::hash_internal::SupportsHashWithSeed" is directly included`.
|
|
496
|
+
// Maybe we should make "internal/hash.h" be a separate library.
|
|
497
|
+
return absl::hash_internal::HashWithSeed().hash(hash, key, seed);
|
|
498
|
+
}
|
|
499
|
+
// NOLINTNEXTLINE(clang-diagnostic-sign-conversion)
|
|
500
|
+
return hash(key) ^ seed;
|
|
501
|
+
}
|
|
502
|
+
const Hash& hash;
|
|
503
|
+
size_t seed;
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
// No arguments function hash function for a specific key.
|
|
507
|
+
template <class Hash, class Key, bool kIsDefault>
|
|
508
|
+
struct HashKey {
|
|
509
|
+
HashKey(const Hash& h, const Key& k) : hash(h), key(k) {}
|
|
510
|
+
|
|
511
|
+
size_t operator()(size_t seed) const {
|
|
512
|
+
return HashElement<Hash, kIsDefault>{hash, seed}(key);
|
|
513
|
+
}
|
|
514
|
+
const Hash& hash;
|
|
515
|
+
const Key& key;
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
// Variadic arguments equality function that ignore the rest of the arguments.
|
|
519
|
+
// Useful for usage with policy traits.
|
|
520
|
+
template <class K1, class KeyEqual>
|
|
521
|
+
struct EqualElement {
|
|
522
|
+
template <class K2, class... Args>
|
|
523
|
+
bool operator()(const K2& lhs, Args&&...) const {
|
|
524
|
+
ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN(eq(lhs, rhs));
|
|
525
|
+
}
|
|
526
|
+
const K1& rhs;
|
|
527
|
+
const KeyEqual& eq;
|
|
528
|
+
};
|
|
529
|
+
|
|
468
530
|
// Type erased function for computing hash of the slot.
|
|
469
|
-
using HashSlotFn = size_t (*)(const void* hash_fn, void* slot);
|
|
531
|
+
using HashSlotFn = size_t (*)(const void* hash_fn, void* slot, size_t seed);
|
|
470
532
|
|
|
471
533
|
// Type erased function to apply `Fn` to data inside of the `slot`.
|
|
472
534
|
// The data is expected to have type `T`.
|
|
473
|
-
template <class Fn, class T>
|
|
474
|
-
size_t TypeErasedApplyToSlotFn(const void* fn, void* slot) {
|
|
535
|
+
template <class Fn, class T, bool kIsDefault>
|
|
536
|
+
size_t TypeErasedApplyToSlotFn(const void* fn, void* slot, size_t seed) {
|
|
475
537
|
const auto* f = static_cast<const Fn*>(fn);
|
|
476
|
-
return
|
|
538
|
+
return HashElement<Fn, kIsDefault>{*f, seed}(*static_cast<const T*>(slot));
|
|
477
539
|
}
|
|
478
540
|
|
|
479
541
|
// Type erased function to apply `Fn` to data inside of the `*slot_ptr`.
|
|
480
542
|
// The data is expected to have type `T`.
|
|
481
|
-
template <class Fn, class T>
|
|
482
|
-
size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr
|
|
543
|
+
template <class Fn, class T, bool kIsDefault>
|
|
544
|
+
size_t TypeErasedDerefAndApplyToSlotFn(const void* fn, void* slot_ptr,
|
|
545
|
+
size_t seed) {
|
|
483
546
|
const auto* f = static_cast<const Fn*>(fn);
|
|
484
547
|
const T* slot = *static_cast<const T**>(slot_ptr);
|
|
485
|
-
return
|
|
548
|
+
return HashElement<Fn, kIsDefault>{*f, seed}(*slot);
|
|
486
549
|
}
|
|
487
550
|
|
|
488
551
|
} // namespace container_internal
|
|
@@ -300,16 +300,46 @@ TEST(MapSlotPolicy, DestroyReturnsTrue) {
|
|
|
300
300
|
|
|
301
301
|
TEST(ApplyTest, TypeErasedApplyToSlotFn) {
|
|
302
302
|
size_t x = 7;
|
|
303
|
+
size_t seed = 100;
|
|
303
304
|
auto fn = [](size_t v) { return v * 2; };
|
|
304
|
-
EXPECT_EQ(
|
|
305
|
+
EXPECT_EQ(
|
|
306
|
+
(TypeErasedApplyToSlotFn<decltype(fn), size_t, /*kIsDefault=*/false>(
|
|
307
|
+
&fn, &x, seed)),
|
|
308
|
+
(HashElement<decltype(fn), /*kIsDefault=*/false>(fn, seed)(x)));
|
|
305
309
|
}
|
|
306
310
|
|
|
307
311
|
TEST(ApplyTest, TypeErasedDerefAndApplyToSlotFn) {
|
|
308
312
|
size_t x = 7;
|
|
313
|
+
size_t seed = 100;
|
|
309
314
|
auto fn = [](size_t v) { return v * 2; };
|
|
310
315
|
size_t* x_ptr = &x;
|
|
316
|
+
EXPECT_EQ((TypeErasedDerefAndApplyToSlotFn<decltype(fn), size_t,
|
|
317
|
+
/*kIsDefault=*/false>(&fn, &x_ptr,
|
|
318
|
+
seed)),
|
|
319
|
+
(HashElement<decltype(fn), /*kIsDefault=*/false>(fn, seed)(x)));
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
TEST(HashElement, DefaultHash) {
|
|
323
|
+
size_t x = 7;
|
|
324
|
+
size_t seed = 100;
|
|
325
|
+
struct HashWithSeed {
|
|
326
|
+
size_t operator()(size_t v) const { return v * 2; }
|
|
327
|
+
size_t hash_with_seed(size_t v, size_t seed) const {
|
|
328
|
+
return v * 2 + seed * 3;
|
|
329
|
+
}
|
|
330
|
+
} hash;
|
|
331
|
+
EXPECT_EQ((HashElement<HashWithSeed, /*kIsDefault=*/true>(hash, seed)(x)),
|
|
332
|
+
hash.hash_with_seed(x, seed));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
TEST(HashElement, NonDefaultHash) {
|
|
336
|
+
size_t x = 7;
|
|
337
|
+
size_t seed = 100;
|
|
338
|
+
auto fn = [](size_t v) { return v * 2; };
|
|
311
339
|
EXPECT_EQ(
|
|
312
|
-
(
|
|
340
|
+
(HashElement<decltype(fn), /*kIsDefault=*/false>(
|
|
341
|
+
fn, seed)(x)),
|
|
342
|
+
fn(x) ^ seed);
|
|
313
343
|
}
|
|
314
344
|
|
|
315
345
|
} // namespace
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
#include <functional>
|
|
50
50
|
#include <memory>
|
|
51
51
|
#include <string>
|
|
52
|
+
#include <string_view>
|
|
52
53
|
#include <type_traits>
|
|
53
54
|
|
|
54
55
|
#include "absl/base/config.h"
|
|
@@ -58,10 +59,6 @@
|
|
|
58
59
|
#include "absl/strings/cord.h"
|
|
59
60
|
#include "absl/strings/string_view.h"
|
|
60
61
|
|
|
61
|
-
#ifdef ABSL_HAVE_STD_STRING_VIEW
|
|
62
|
-
#include <string_view>
|
|
63
|
-
#endif
|
|
64
|
-
|
|
65
62
|
namespace absl {
|
|
66
63
|
ABSL_NAMESPACE_BEGIN
|
|
67
64
|
namespace container_internal {
|
|
@@ -82,6 +79,18 @@ struct StringHash {
|
|
|
82
79
|
size_t operator()(const absl::Cord& v) const {
|
|
83
80
|
return absl::Hash<absl::Cord>{}(v);
|
|
84
81
|
}
|
|
82
|
+
|
|
83
|
+
private:
|
|
84
|
+
friend struct absl::hash_internal::HashWithSeed;
|
|
85
|
+
|
|
86
|
+
size_t hash_with_seed(absl::string_view v, size_t seed) const {
|
|
87
|
+
return absl::hash_internal::HashWithSeed().hash(
|
|
88
|
+
absl::Hash<absl::string_view>{}, v, seed);
|
|
89
|
+
}
|
|
90
|
+
size_t hash_with_seed(const absl::Cord& v, size_t seed) const {
|
|
91
|
+
return absl::hash_internal::HashWithSeed().hash(absl::Hash<absl::Cord>{}, v,
|
|
92
|
+
seed);
|
|
93
|
+
}
|
|
85
94
|
};
|
|
86
95
|
|
|
87
96
|
struct StringEq {
|
|
@@ -113,8 +122,6 @@ struct HashEq<absl::string_view> : StringHashEq {};
|
|
|
113
122
|
template <>
|
|
114
123
|
struct HashEq<absl::Cord> : StringHashEq {};
|
|
115
124
|
|
|
116
|
-
#ifdef ABSL_HAVE_STD_STRING_VIEW
|
|
117
|
-
|
|
118
125
|
template <typename TChar>
|
|
119
126
|
struct BasicStringHash {
|
|
120
127
|
using is_transparent = void;
|
|
@@ -153,8 +160,6 @@ struct HashEq<std::u32string> : BasicStringHashEq<char32_t> {};
|
|
|
153
160
|
template <>
|
|
154
161
|
struct HashEq<std::u32string_view> : BasicStringHashEq<char32_t> {};
|
|
155
162
|
|
|
156
|
-
#endif // ABSL_HAVE_STD_STRING_VIEW
|
|
157
|
-
|
|
158
163
|
// Supports heterogeneous lookup for pointers and smart pointers.
|
|
159
164
|
template <class T>
|
|
160
165
|
struct HashEq<T*> {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
#include <cstddef>
|
|
18
18
|
#include <functional>
|
|
19
|
+
#include <string_view>
|
|
19
20
|
#include <type_traits>
|
|
20
21
|
#include <utility>
|
|
21
22
|
|
|
@@ -28,10 +29,6 @@
|
|
|
28
29
|
#include "absl/strings/cord_test_helpers.h"
|
|
29
30
|
#include "absl/strings/string_view.h"
|
|
30
31
|
|
|
31
|
-
#ifdef ABSL_HAVE_STD_STRING_VIEW
|
|
32
|
-
#include <string_view>
|
|
33
|
-
#endif
|
|
34
|
-
|
|
35
32
|
namespace absl {
|
|
36
33
|
ABSL_NAMESPACE_BEGIN
|
|
37
34
|
namespace container_internal {
|
|
@@ -118,9 +115,6 @@ TYPED_TEST(HashString, Works) {
|
|
|
118
115
|
}
|
|
119
116
|
|
|
120
117
|
TEST(BasicStringViewTest, WStringEqWorks) {
|
|
121
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
122
|
-
GTEST_SKIP();
|
|
123
|
-
#else
|
|
124
118
|
hash_default_eq<std::wstring> eq;
|
|
125
119
|
EXPECT_TRUE(eq(L"a", L"a"));
|
|
126
120
|
EXPECT_TRUE(eq(L"a", std::wstring_view(L"a")));
|
|
@@ -128,13 +122,9 @@ TEST(BasicStringViewTest, WStringEqWorks) {
|
|
|
128
122
|
EXPECT_FALSE(eq(L"a", L"b"));
|
|
129
123
|
EXPECT_FALSE(eq(L"a", std::wstring_view(L"b")));
|
|
130
124
|
EXPECT_FALSE(eq(L"a", std::wstring(L"b")));
|
|
131
|
-
#endif
|
|
132
125
|
}
|
|
133
126
|
|
|
134
127
|
TEST(BasicStringViewTest, WStringViewEqWorks) {
|
|
135
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
136
|
-
GTEST_SKIP();
|
|
137
|
-
#else
|
|
138
128
|
hash_default_eq<std::wstring_view> eq;
|
|
139
129
|
EXPECT_TRUE(eq(L"a", L"a"));
|
|
140
130
|
EXPECT_TRUE(eq(L"a", std::wstring_view(L"a")));
|
|
@@ -142,13 +132,9 @@ TEST(BasicStringViewTest, WStringViewEqWorks) {
|
|
|
142
132
|
EXPECT_FALSE(eq(L"a", L"b"));
|
|
143
133
|
EXPECT_FALSE(eq(L"a", std::wstring_view(L"b")));
|
|
144
134
|
EXPECT_FALSE(eq(L"a", std::wstring(L"b")));
|
|
145
|
-
#endif
|
|
146
135
|
}
|
|
147
136
|
|
|
148
137
|
TEST(BasicStringViewTest, U16StringEqWorks) {
|
|
149
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
150
|
-
GTEST_SKIP();
|
|
151
|
-
#else
|
|
152
138
|
hash_default_eq<std::u16string> eq;
|
|
153
139
|
EXPECT_TRUE(eq(u"a", u"a"));
|
|
154
140
|
EXPECT_TRUE(eq(u"a", std::u16string_view(u"a")));
|
|
@@ -156,13 +142,9 @@ TEST(BasicStringViewTest, U16StringEqWorks) {
|
|
|
156
142
|
EXPECT_FALSE(eq(u"a", u"b"));
|
|
157
143
|
EXPECT_FALSE(eq(u"a", std::u16string_view(u"b")));
|
|
158
144
|
EXPECT_FALSE(eq(u"a", std::u16string(u"b")));
|
|
159
|
-
#endif
|
|
160
145
|
}
|
|
161
146
|
|
|
162
147
|
TEST(BasicStringViewTest, U16StringViewEqWorks) {
|
|
163
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
164
|
-
GTEST_SKIP();
|
|
165
|
-
#else
|
|
166
148
|
hash_default_eq<std::u16string_view> eq;
|
|
167
149
|
EXPECT_TRUE(eq(u"a", u"a"));
|
|
168
150
|
EXPECT_TRUE(eq(u"a", std::u16string_view(u"a")));
|
|
@@ -170,13 +152,9 @@ TEST(BasicStringViewTest, U16StringViewEqWorks) {
|
|
|
170
152
|
EXPECT_FALSE(eq(u"a", u"b"));
|
|
171
153
|
EXPECT_FALSE(eq(u"a", std::u16string_view(u"b")));
|
|
172
154
|
EXPECT_FALSE(eq(u"a", std::u16string(u"b")));
|
|
173
|
-
#endif
|
|
174
155
|
}
|
|
175
156
|
|
|
176
157
|
TEST(BasicStringViewTest, U32StringEqWorks) {
|
|
177
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
178
|
-
GTEST_SKIP();
|
|
179
|
-
#else
|
|
180
158
|
hash_default_eq<std::u32string> eq;
|
|
181
159
|
EXPECT_TRUE(eq(U"a", U"a"));
|
|
182
160
|
EXPECT_TRUE(eq(U"a", std::u32string_view(U"a")));
|
|
@@ -184,13 +162,9 @@ TEST(BasicStringViewTest, U32StringEqWorks) {
|
|
|
184
162
|
EXPECT_FALSE(eq(U"a", U"b"));
|
|
185
163
|
EXPECT_FALSE(eq(U"a", std::u32string_view(U"b")));
|
|
186
164
|
EXPECT_FALSE(eq(U"a", std::u32string(U"b")));
|
|
187
|
-
#endif
|
|
188
165
|
}
|
|
189
166
|
|
|
190
167
|
TEST(BasicStringViewTest, U32StringViewEqWorks) {
|
|
191
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
192
|
-
GTEST_SKIP();
|
|
193
|
-
#else
|
|
194
168
|
hash_default_eq<std::u32string_view> eq;
|
|
195
169
|
EXPECT_TRUE(eq(U"a", U"a"));
|
|
196
170
|
EXPECT_TRUE(eq(U"a", std::u32string_view(U"a")));
|
|
@@ -198,85 +172,60 @@ TEST(BasicStringViewTest, U32StringViewEqWorks) {
|
|
|
198
172
|
EXPECT_FALSE(eq(U"a", U"b"));
|
|
199
173
|
EXPECT_FALSE(eq(U"a", std::u32string_view(U"b")));
|
|
200
174
|
EXPECT_FALSE(eq(U"a", std::u32string(U"b")));
|
|
201
|
-
#endif
|
|
202
175
|
}
|
|
203
176
|
|
|
204
177
|
TEST(BasicStringViewTest, WStringHashWorks) {
|
|
205
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
206
|
-
GTEST_SKIP();
|
|
207
|
-
#else
|
|
208
178
|
hash_default_hash<std::wstring> hash;
|
|
209
179
|
auto h = hash(L"a");
|
|
210
180
|
EXPECT_EQ(h, hash(std::wstring_view(L"a")));
|
|
211
181
|
EXPECT_EQ(h, hash(std::wstring(L"a")));
|
|
212
182
|
EXPECT_NE(h, hash(std::wstring_view(L"b")));
|
|
213
183
|
EXPECT_NE(h, hash(std::wstring(L"b")));
|
|
214
|
-
#endif
|
|
215
184
|
}
|
|
216
185
|
|
|
217
186
|
TEST(BasicStringViewTest, WStringViewHashWorks) {
|
|
218
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
219
|
-
GTEST_SKIP();
|
|
220
|
-
#else
|
|
221
187
|
hash_default_hash<std::wstring_view> hash;
|
|
222
188
|
auto h = hash(L"a");
|
|
223
189
|
EXPECT_EQ(h, hash(std::wstring_view(L"a")));
|
|
224
190
|
EXPECT_EQ(h, hash(std::wstring(L"a")));
|
|
225
191
|
EXPECT_NE(h, hash(std::wstring_view(L"b")));
|
|
226
192
|
EXPECT_NE(h, hash(std::wstring(L"b")));
|
|
227
|
-
#endif
|
|
228
193
|
}
|
|
229
194
|
|
|
230
195
|
TEST(BasicStringViewTest, U16StringHashWorks) {
|
|
231
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
232
|
-
GTEST_SKIP();
|
|
233
|
-
#else
|
|
234
196
|
hash_default_hash<std::u16string> hash;
|
|
235
197
|
auto h = hash(u"a");
|
|
236
198
|
EXPECT_EQ(h, hash(std::u16string_view(u"a")));
|
|
237
199
|
EXPECT_EQ(h, hash(std::u16string(u"a")));
|
|
238
200
|
EXPECT_NE(h, hash(std::u16string_view(u"b")));
|
|
239
201
|
EXPECT_NE(h, hash(std::u16string(u"b")));
|
|
240
|
-
#endif
|
|
241
202
|
}
|
|
242
203
|
|
|
243
204
|
TEST(BasicStringViewTest, U16StringViewHashWorks) {
|
|
244
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
245
|
-
GTEST_SKIP();
|
|
246
|
-
#else
|
|
247
205
|
hash_default_hash<std::u16string_view> hash;
|
|
248
206
|
auto h = hash(u"a");
|
|
249
207
|
EXPECT_EQ(h, hash(std::u16string_view(u"a")));
|
|
250
208
|
EXPECT_EQ(h, hash(std::u16string(u"a")));
|
|
251
209
|
EXPECT_NE(h, hash(std::u16string_view(u"b")));
|
|
252
210
|
EXPECT_NE(h, hash(std::u16string(u"b")));
|
|
253
|
-
#endif
|
|
254
211
|
}
|
|
255
212
|
|
|
256
213
|
TEST(BasicStringViewTest, U32StringHashWorks) {
|
|
257
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
258
|
-
GTEST_SKIP();
|
|
259
|
-
#else
|
|
260
214
|
hash_default_hash<std::u32string> hash;
|
|
261
215
|
auto h = hash(U"a");
|
|
262
216
|
EXPECT_EQ(h, hash(std::u32string_view(U"a")));
|
|
263
217
|
EXPECT_EQ(h, hash(std::u32string(U"a")));
|
|
264
218
|
EXPECT_NE(h, hash(std::u32string_view(U"b")));
|
|
265
219
|
EXPECT_NE(h, hash(std::u32string(U"b")));
|
|
266
|
-
#endif
|
|
267
220
|
}
|
|
268
221
|
|
|
269
222
|
TEST(BasicStringViewTest, U32StringViewHashWorks) {
|
|
270
|
-
#ifndef ABSL_HAVE_STD_STRING_VIEW
|
|
271
|
-
GTEST_SKIP();
|
|
272
|
-
#else
|
|
273
223
|
hash_default_hash<std::u32string_view> hash;
|
|
274
224
|
auto h = hash(U"a");
|
|
275
225
|
EXPECT_EQ(h, hash(std::u32string_view(U"a")));
|
|
276
226
|
EXPECT_EQ(h, hash(std::u32string(U"a")));
|
|
277
227
|
EXPECT_NE(h, hash(std::u32string_view(U"b")));
|
|
278
228
|
EXPECT_NE(h, hash(std::u32string(U"b")));
|
|
279
|
-
#endif
|
|
280
229
|
}
|
|
281
230
|
|
|
282
231
|
struct NoDeleter {
|
|
@@ -14,61 +14,39 @@
|
|
|
14
14
|
|
|
15
15
|
#include "absl/container/internal/hash_generator_testing.h"
|
|
16
16
|
|
|
17
|
+
#include <algorithm>
|
|
17
18
|
#include <deque>
|
|
19
|
+
#include <random>
|
|
20
|
+
#include <string>
|
|
18
21
|
|
|
19
22
|
#include "absl/base/no_destructor.h"
|
|
23
|
+
#include "absl/random/random.h"
|
|
24
|
+
#include "absl/strings/string_view.h"
|
|
20
25
|
|
|
21
26
|
namespace absl {
|
|
22
27
|
ABSL_NAMESPACE_BEGIN
|
|
23
28
|
namespace container_internal {
|
|
24
29
|
namespace hash_internal {
|
|
25
|
-
namespace {
|
|
26
|
-
|
|
27
|
-
class RandomDeviceSeedSeq {
|
|
28
|
-
public:
|
|
29
|
-
using result_type = typename std::random_device::result_type;
|
|
30
|
-
|
|
31
|
-
template <class Iterator>
|
|
32
|
-
void generate(Iterator start, Iterator end) {
|
|
33
|
-
while (start != end) {
|
|
34
|
-
*start = gen_();
|
|
35
|
-
++start;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
private:
|
|
40
|
-
std::random_device gen_;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
} // namespace
|
|
44
|
-
|
|
45
|
-
std::mt19937_64* GetSharedRng() {
|
|
46
|
-
static absl::NoDestructor<std::mt19937_64> rng([] {
|
|
47
|
-
RandomDeviceSeedSeq seed_seq;
|
|
48
|
-
return std::mt19937_64(seed_seq);
|
|
49
|
-
}());
|
|
50
|
-
return rng.get();
|
|
51
|
-
}
|
|
52
30
|
|
|
53
31
|
std::string Generator<std::string>::operator()() const {
|
|
32
|
+
absl::InsecureBitGen gen;
|
|
54
33
|
// NOLINTNEXTLINE(runtime/int)
|
|
55
34
|
std::uniform_int_distribution<short> chars(0x20, 0x7E);
|
|
56
35
|
std::string res;
|
|
57
36
|
res.resize(32);
|
|
58
|
-
std::generate(res.begin(), res.end(),
|
|
59
|
-
[&]() { return chars(*GetSharedRng()); });
|
|
37
|
+
std::generate(res.begin(), res.end(), [&]() { return chars(gen); });
|
|
60
38
|
return res;
|
|
61
39
|
}
|
|
62
40
|
|
|
63
41
|
absl::string_view Generator<absl::string_view>::operator()() const {
|
|
64
42
|
static absl::NoDestructor<std::deque<std::string>> arena;
|
|
43
|
+
absl::InsecureBitGen gen;
|
|
65
44
|
// NOLINTNEXTLINE(runtime/int)
|
|
66
45
|
std::uniform_int_distribution<short> chars(0x20, 0x7E);
|
|
67
46
|
arena->emplace_back();
|
|
68
47
|
auto& res = arena->back();
|
|
69
48
|
res.resize(32);
|
|
70
|
-
std::generate(res.begin(), res.end(),
|
|
71
|
-
[&]() { return chars(*GetSharedRng()); });
|
|
49
|
+
std::generate(res.begin(), res.end(), [&]() { return chars(gen); });
|
|
72
50
|
return res;
|
|
73
51
|
}
|
|
74
52
|
|