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
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
#include <unordered_set>
|
|
27
27
|
#include <vector>
|
|
28
28
|
|
|
29
|
-
#include "benchmark/benchmark.h"
|
|
30
29
|
#include "absl/algorithm/container.h"
|
|
31
30
|
#include "absl/base/internal/raw_logging.h"
|
|
32
31
|
#include "absl/container/btree_map.h"
|
|
@@ -42,6 +41,7 @@
|
|
|
42
41
|
#include "absl/strings/cord.h"
|
|
43
42
|
#include "absl/strings/str_format.h"
|
|
44
43
|
#include "absl/time/time.h"
|
|
44
|
+
#include "benchmark/benchmark.h"
|
|
45
45
|
|
|
46
46
|
namespace absl {
|
|
47
47
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -406,22 +406,18 @@ void BM_Fifo(benchmark::State& state) {
|
|
|
406
406
|
template <typename T>
|
|
407
407
|
void BM_FwdIter(benchmark::State& state) {
|
|
408
408
|
using V = typename remove_pair_const<typename T::value_type>::type;
|
|
409
|
-
using R = typename T::value_type const*;
|
|
410
409
|
|
|
411
410
|
std::vector<V> values = GenerateValues<V>(kBenchmarkValues);
|
|
412
411
|
T container(values.begin(), values.end());
|
|
413
412
|
|
|
414
413
|
auto iter = container.end();
|
|
415
414
|
|
|
416
|
-
R r = nullptr;
|
|
417
|
-
|
|
418
415
|
while (state.KeepRunning()) {
|
|
419
416
|
if (iter == container.end()) iter = container.begin();
|
|
420
|
-
|
|
421
|
-
|
|
417
|
+
auto *v = &(*iter);
|
|
418
|
+
benchmark::DoNotOptimize(v);
|
|
419
|
+
benchmark::DoNotOptimize(++iter);
|
|
422
420
|
}
|
|
423
|
-
|
|
424
|
-
benchmark::DoNotOptimize(r);
|
|
425
421
|
}
|
|
426
422
|
|
|
427
423
|
// Benchmark random range-construction of a container.
|
|
@@ -735,7 +731,7 @@ double ContainerInfo(const btree_map<int, BigTypePtr<Size>>& b) {
|
|
|
735
731
|
|
|
736
732
|
BIG_TYPE_PTR_BENCHMARKS(32);
|
|
737
733
|
|
|
738
|
-
void
|
|
734
|
+
void BM_BtreeSet_IteratorDifference(benchmark::State& state) {
|
|
739
735
|
absl::InsecureBitGen bitgen;
|
|
740
736
|
std::vector<int> vec;
|
|
741
737
|
// Randomize the set's insertion order so the nodes aren't all full.
|
|
@@ -756,6 +752,52 @@ void BM_BtreeSet_IteratorSubtraction(benchmark::State& state) {
|
|
|
756
752
|
}
|
|
757
753
|
}
|
|
758
754
|
|
|
755
|
+
BENCHMARK(BM_BtreeSet_IteratorDifference)->Range(1 << 10, 1 << 20);
|
|
756
|
+
|
|
757
|
+
void BM_BtreeSet_IteratorAddition(benchmark::State& state) {
|
|
758
|
+
absl::InsecureBitGen bitgen;
|
|
759
|
+
std::vector<int> vec;
|
|
760
|
+
// Randomize the set's insertion order so the nodes aren't all full.
|
|
761
|
+
vec.reserve(static_cast<size_t>(state.range(0)));
|
|
762
|
+
for (int i = 0; i < state.range(0); ++i) vec.push_back(i);
|
|
763
|
+
absl::c_shuffle(vec, bitgen);
|
|
764
|
+
|
|
765
|
+
absl::btree_set<int> set;
|
|
766
|
+
for (int i : vec) set.insert(i);
|
|
767
|
+
|
|
768
|
+
size_t distance = absl::Uniform(bitgen, 0u, set.size());
|
|
769
|
+
while (state.KeepRunningBatch(distance)) {
|
|
770
|
+
// Let the increment go all the way to the `end` iterator.
|
|
771
|
+
const size_t begin =
|
|
772
|
+
absl::Uniform(absl::IntervalClosed, bitgen, 0u, set.size() - distance);
|
|
773
|
+
auto it = set.find(static_cast<int>(begin));
|
|
774
|
+
benchmark::DoNotOptimize(it += static_cast<int>(distance));
|
|
775
|
+
distance = absl::Uniform(bitgen, 0u, set.size());
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
BENCHMARK(BM_BtreeSet_IteratorAddition)->Range(1 << 10, 1 << 20);
|
|
780
|
+
|
|
781
|
+
void BM_BtreeSet_IteratorSubtraction(benchmark::State& state) {
|
|
782
|
+
absl::InsecureBitGen bitgen;
|
|
783
|
+
std::vector<int> vec;
|
|
784
|
+
// Randomize the set's insertion order so the nodes aren't all full.
|
|
785
|
+
vec.reserve(static_cast<size_t>(state.range(0)));
|
|
786
|
+
for (int i = 0; i < state.range(0); ++i) vec.push_back(i);
|
|
787
|
+
absl::c_shuffle(vec, bitgen);
|
|
788
|
+
|
|
789
|
+
absl::btree_set<int> set;
|
|
790
|
+
for (int i : vec) set.insert(i);
|
|
791
|
+
|
|
792
|
+
size_t distance = absl::Uniform(bitgen, 0u, set.size());
|
|
793
|
+
while (state.KeepRunningBatch(distance)) {
|
|
794
|
+
size_t end = absl::Uniform(bitgen, distance, set.size());
|
|
795
|
+
auto it = set.find(static_cast<int>(end));
|
|
796
|
+
benchmark::DoNotOptimize(it -= static_cast<int>(distance));
|
|
797
|
+
distance = absl::Uniform(bitgen, 0u, set.size());
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
|
|
759
801
|
BENCHMARK(BM_BtreeSet_IteratorSubtraction)->Range(1 << 10, 1 << 20);
|
|
760
802
|
|
|
761
803
|
} // namespace
|
|
@@ -47,8 +47,10 @@
|
|
|
47
47
|
// iterator at the current position. Another important difference is that
|
|
48
48
|
// key-types must be copy-constructible.
|
|
49
49
|
//
|
|
50
|
-
//
|
|
51
|
-
// is faster than using std::distance
|
|
50
|
+
// There are other API differences: first, btree iterators can be subtracted,
|
|
51
|
+
// and this is faster than using `std::distance`. Additionally, btree
|
|
52
|
+
// iterators can be advanced via `operator+=` and `operator-=`, which is faster
|
|
53
|
+
// than using `std::advance`.
|
|
52
54
|
//
|
|
53
55
|
// B-tree maps are not exception-safe.
|
|
54
56
|
|
|
@@ -115,8 +117,8 @@ class ABSL_ATTRIBUTE_OWNER btree_map
|
|
|
115
117
|
//
|
|
116
118
|
// * Copy assignment operator
|
|
117
119
|
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
+
// absl::btree_map<int, std::string> map4;
|
|
121
|
+
// map4 = map3;
|
|
120
122
|
//
|
|
121
123
|
// * Move constructor
|
|
122
124
|
//
|
|
@@ -553,8 +555,8 @@ class ABSL_ATTRIBUTE_OWNER btree_multimap
|
|
|
553
555
|
//
|
|
554
556
|
// * Copy assignment operator
|
|
555
557
|
//
|
|
556
|
-
//
|
|
557
|
-
//
|
|
558
|
+
// absl::btree_multimap<int, std::string> map4;
|
|
559
|
+
// map4 = map3;
|
|
558
560
|
//
|
|
559
561
|
// * Move constructor
|
|
560
562
|
//
|
|
@@ -46,8 +46,10 @@
|
|
|
46
46
|
// reason, `insert()`, `erase()`, and `extract_and_get_next()` return a valid
|
|
47
47
|
// iterator at the current position.
|
|
48
48
|
//
|
|
49
|
-
//
|
|
50
|
-
// is faster than using std::distance
|
|
49
|
+
// There are other API differences: first, btree iterators can be subtracted,
|
|
50
|
+
// and this is faster than using `std::distance`. Additionally, btree
|
|
51
|
+
// iterators can be advanced via `operator+=` and `operator-=`, which is faster
|
|
52
|
+
// than using `std::advance`.
|
|
51
53
|
//
|
|
52
54
|
// B-tree sets are not exception-safe.
|
|
53
55
|
|
|
@@ -117,8 +119,8 @@ class ABSL_ATTRIBUTE_OWNER btree_set
|
|
|
117
119
|
//
|
|
118
120
|
// * Copy assignment operator
|
|
119
121
|
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
+
// absl::btree_set<std::string> set4;
|
|
123
|
+
// set4 = set3;
|
|
122
124
|
//
|
|
123
125
|
// * Move constructor
|
|
124
126
|
//
|
|
@@ -473,8 +475,8 @@ class ABSL_ATTRIBUTE_OWNER btree_multiset
|
|
|
473
475
|
//
|
|
474
476
|
// * Copy assignment operator
|
|
475
477
|
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
+
// absl::btree_multiset<std::string> set4;
|
|
479
|
+
// set4 = set3;
|
|
478
480
|
//
|
|
479
481
|
// * Move constructor
|
|
480
482
|
//
|
|
@@ -2674,8 +2674,6 @@ TEST(Btree, HeterogeneousInsertOrAssign) {
|
|
|
2674
2674
|
}
|
|
2675
2675
|
#endif
|
|
2676
2676
|
|
|
2677
|
-
// This test requires std::launder for mutable key access in node handles.
|
|
2678
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
|
|
2679
2677
|
TEST(Btree, NodeHandleMutableKeyAccess) {
|
|
2680
2678
|
{
|
|
2681
2679
|
absl::btree_map<std::string, std::string> map;
|
|
@@ -2701,7 +2699,6 @@ TEST(Btree, NodeHandleMutableKeyAccess) {
|
|
|
2701
2699
|
EXPECT_THAT(map, ElementsAre(Pair("key", "mapped")));
|
|
2702
2700
|
}
|
|
2703
2701
|
}
|
|
2704
|
-
#endif
|
|
2705
2702
|
|
|
2706
2703
|
struct MultiKey {
|
|
2707
2704
|
int i1;
|
|
@@ -3354,7 +3351,7 @@ TEST(Btree, ReusePoisonMemory) {
|
|
|
3354
3351
|
set.insert(0);
|
|
3355
3352
|
}
|
|
3356
3353
|
|
|
3357
|
-
TEST(Btree,
|
|
3354
|
+
TEST(Btree, IteratorDifference) {
|
|
3358
3355
|
absl::BitGen bitgen;
|
|
3359
3356
|
std::vector<int> vec;
|
|
3360
3357
|
// Randomize the set's insertion order so the nodes aren't all full.
|
|
@@ -3372,6 +3369,94 @@ TEST(Btree, IteratorSubtraction) {
|
|
|
3372
3369
|
}
|
|
3373
3370
|
}
|
|
3374
3371
|
|
|
3372
|
+
TEST(Btree, IteratorAddition) {
|
|
3373
|
+
absl::BitGen bitgen;
|
|
3374
|
+
std::vector<int> vec;
|
|
3375
|
+
|
|
3376
|
+
// Randomize the set's insertion order so the nodes aren't all full.
|
|
3377
|
+
constexpr int kSetSize = 1000000;
|
|
3378
|
+
for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
|
|
3379
|
+
absl::c_shuffle(vec, bitgen);
|
|
3380
|
+
|
|
3381
|
+
absl::btree_set<int> set;
|
|
3382
|
+
for (int i : vec) set.insert(i);
|
|
3383
|
+
|
|
3384
|
+
for (int i = 0; i < 1000; ++i) {
|
|
3385
|
+
int begin = absl::Uniform(bitgen, 0, kSetSize);
|
|
3386
|
+
int end = absl::Uniform(bitgen, begin, kSetSize);
|
|
3387
|
+
ASSERT_LE(begin, end);
|
|
3388
|
+
|
|
3389
|
+
auto it = set.find(begin);
|
|
3390
|
+
it += end - begin;
|
|
3391
|
+
ASSERT_EQ(it, set.find(end)) << end;
|
|
3392
|
+
|
|
3393
|
+
it += begin - end;
|
|
3394
|
+
ASSERT_EQ(it, set.find(begin)) << begin;
|
|
3395
|
+
}
|
|
3396
|
+
}
|
|
3397
|
+
|
|
3398
|
+
TEST(Btree, IteratorAdditionOutOfBounds) {
|
|
3399
|
+
const absl::btree_set<int> set({5});
|
|
3400
|
+
|
|
3401
|
+
auto it = set.find(5);
|
|
3402
|
+
|
|
3403
|
+
auto forward = it;
|
|
3404
|
+
forward += 1;
|
|
3405
|
+
EXPECT_EQ(forward, set.end());
|
|
3406
|
+
|
|
3407
|
+
auto backward = it;
|
|
3408
|
+
EXPECT_EQ(backward, set.begin());
|
|
3409
|
+
|
|
3410
|
+
if (IsAssertEnabled()) {
|
|
3411
|
+
EXPECT_DEATH(forward += 1, "n == 0");
|
|
3412
|
+
EXPECT_DEATH(backward += -1, "position >= node->start");
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3415
|
+
|
|
3416
|
+
TEST(Btree, IteratorSubtraction) {
|
|
3417
|
+
absl::BitGen bitgen;
|
|
3418
|
+
std::vector<int> vec;
|
|
3419
|
+
|
|
3420
|
+
// Randomize the set's insertion order so the nodes aren't all full.
|
|
3421
|
+
constexpr int kSetSize = 1000000;
|
|
3422
|
+
for (int i = 0; i < kSetSize; ++i) vec.push_back(i);
|
|
3423
|
+
absl::c_shuffle(vec, bitgen);
|
|
3424
|
+
|
|
3425
|
+
absl::btree_set<int> set;
|
|
3426
|
+
for (int i : vec) set.insert(i);
|
|
3427
|
+
|
|
3428
|
+
for (int i = 0; i < 1000; ++i) {
|
|
3429
|
+
int begin = absl::Uniform(bitgen, 0, kSetSize);
|
|
3430
|
+
int end = absl::Uniform(bitgen, begin, kSetSize);
|
|
3431
|
+
ASSERT_LE(begin, end);
|
|
3432
|
+
|
|
3433
|
+
auto it = set.find(end);
|
|
3434
|
+
it -= end - begin;
|
|
3435
|
+
ASSERT_EQ(it, set.find(begin)) << begin;
|
|
3436
|
+
|
|
3437
|
+
it -= begin - end;
|
|
3438
|
+
ASSERT_EQ(it, set.find(end)) << end;
|
|
3439
|
+
}
|
|
3440
|
+
}
|
|
3441
|
+
|
|
3442
|
+
TEST(Btree, IteratorSubtractionOutOfBounds) {
|
|
3443
|
+
const absl::btree_set<int> set({5});
|
|
3444
|
+
|
|
3445
|
+
auto it = set.find(5);
|
|
3446
|
+
|
|
3447
|
+
auto backward = it;
|
|
3448
|
+
EXPECT_EQ(backward, set.begin());
|
|
3449
|
+
|
|
3450
|
+
auto forward = it;
|
|
3451
|
+
forward -= -1;
|
|
3452
|
+
EXPECT_EQ(forward, set.end());
|
|
3453
|
+
|
|
3454
|
+
if (IsAssertEnabled()) {
|
|
3455
|
+
EXPECT_DEATH(backward -= 1, "position >= node->start");
|
|
3456
|
+
EXPECT_DEATH(forward -= -1, "n == 0");
|
|
3457
|
+
}
|
|
3458
|
+
}
|
|
3459
|
+
|
|
3375
3460
|
TEST(Btree, DereferencingEndIterator) {
|
|
3376
3461
|
if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
|
|
3377
3462
|
|
|
@@ -44,11 +44,13 @@
|
|
|
44
44
|
#include "absl/base/attributes.h"
|
|
45
45
|
#include "absl/base/config.h"
|
|
46
46
|
#include "absl/base/dynamic_annotations.h"
|
|
47
|
+
#include "absl/base/internal/iterator_traits.h"
|
|
47
48
|
#include "absl/base/internal/throw_delegate.h"
|
|
48
49
|
#include "absl/base/macros.h"
|
|
49
50
|
#include "absl/base/optimization.h"
|
|
50
51
|
#include "absl/base/port.h"
|
|
51
52
|
#include "absl/container/internal/compressed_tuple.h"
|
|
53
|
+
#include "absl/hash/internal/weakly_mixed_integer.h"
|
|
52
54
|
#include "absl/memory/memory.h"
|
|
53
55
|
|
|
54
56
|
namespace absl {
|
|
@@ -85,9 +87,8 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
|
|
|
85
87
|
// std::iterator_traits isn't guaranteed to be SFINAE-friendly until C++17,
|
|
86
88
|
// but this seems to be mostly pedantic.
|
|
87
89
|
template <typename Iterator>
|
|
88
|
-
using EnableIfForwardIterator =
|
|
89
|
-
|
|
90
|
-
std::forward_iterator_tag>::value>;
|
|
90
|
+
using EnableIfForwardIterator = std::enable_if_t<
|
|
91
|
+
base_internal::IsAtLeastForwardIterator<Iterator>::value>;
|
|
91
92
|
static constexpr bool NoexceptCopyable() {
|
|
92
93
|
return std::is_nothrow_copy_constructible<StorageElement>::value &&
|
|
93
94
|
absl::allocator_is_nothrow<allocator_type>::value;
|
|
@@ -391,8 +392,7 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
|
|
|
391
392
|
|
|
392
393
|
template <typename H>
|
|
393
394
|
friend H AbslHashValue(H h, const FixedArray& v) {
|
|
394
|
-
return H::
|
|
395
|
-
v.size());
|
|
395
|
+
return H::combine_contiguous(std::move(h), v.data(), v.size());
|
|
396
396
|
}
|
|
397
397
|
|
|
398
398
|
private:
|
|
@@ -447,7 +447,8 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
|
|
|
447
447
|
|
|
448
448
|
private:
|
|
449
449
|
ABSL_ADDRESS_SANITIZER_REDZONE(redzone_begin_);
|
|
450
|
-
alignas(StorageElement) char buff_[sizeof(
|
|
450
|
+
alignas(StorageElement) unsigned char buff_[sizeof(
|
|
451
|
+
StorageElement[inline_elements])];
|
|
451
452
|
ABSL_ADDRESS_SANITIZER_REDZONE(redzone_end_);
|
|
452
453
|
};
|
|
453
454
|
|
|
@@ -517,15 +518,6 @@ class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray {
|
|
|
517
518
|
Storage storage_;
|
|
518
519
|
};
|
|
519
520
|
|
|
520
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
|
521
|
-
template <typename T, size_t N, typename A>
|
|
522
|
-
constexpr size_t FixedArray<T, N, A>::kInlineBytesDefault;
|
|
523
|
-
|
|
524
|
-
template <typename T, size_t N, typename A>
|
|
525
|
-
constexpr typename FixedArray<T, N, A>::size_type
|
|
526
|
-
FixedArray<T, N, A>::inline_elements;
|
|
527
|
-
#endif
|
|
528
|
-
|
|
529
521
|
template <typename T, size_t N, typename A>
|
|
530
522
|
void FixedArray<T, N, A>::NonEmptyInlinedStorage::AnnotateConstruct(
|
|
531
523
|
typename FixedArray<T, N, A>::size_type n) {
|
|
@@ -17,18 +17,21 @@
|
|
|
17
17
|
#include <stdio.h>
|
|
18
18
|
|
|
19
19
|
#include <cstring>
|
|
20
|
+
#include <forward_list>
|
|
20
21
|
#include <list>
|
|
21
22
|
#include <memory>
|
|
22
23
|
#include <numeric>
|
|
23
24
|
#include <scoped_allocator>
|
|
24
25
|
#include <stdexcept>
|
|
25
26
|
#include <string>
|
|
27
|
+
#include <utility>
|
|
26
28
|
#include <vector>
|
|
27
29
|
|
|
28
30
|
#include "gmock/gmock.h"
|
|
29
31
|
#include "gtest/gtest.h"
|
|
30
32
|
#include "absl/base/config.h"
|
|
31
33
|
#include "absl/base/internal/exception_testing.h"
|
|
34
|
+
#include "absl/base/internal/iterator_traits_test_helper.h"
|
|
32
35
|
#include "absl/base/options.h"
|
|
33
36
|
#include "absl/container/internal/test_allocator.h"
|
|
34
37
|
#include "absl/hash/hash_testing.h"
|
|
@@ -409,6 +412,20 @@ TEST(IteratorConstructorTest, FromBidirectionalIteratorRange) {
|
|
|
409
412
|
EXPECT_THAT(fixed, testing::ElementsAreArray(kInput));
|
|
410
413
|
}
|
|
411
414
|
|
|
415
|
+
TEST(IteratorConstructorTest, FromCpp20ForwardIteratorRange) {
|
|
416
|
+
std::forward_list<int> const kUnzippedInput = {2, 3, 5, 7, 11, 13, 17};
|
|
417
|
+
absl::base_internal::Cpp20ForwardZipIterator<
|
|
418
|
+
std::forward_list<int>::const_iterator> const
|
|
419
|
+
begin(std::begin(kUnzippedInput), std::begin(kUnzippedInput));
|
|
420
|
+
absl::base_internal::
|
|
421
|
+
Cpp20ForwardZipIterator<std::forward_list<int>::const_iterator> const end(
|
|
422
|
+
std::end(kUnzippedInput), std::end(kUnzippedInput));
|
|
423
|
+
|
|
424
|
+
std::forward_list<std::pair<int, int>> const items(begin, end);
|
|
425
|
+
absl::FixedArray<std::pair<int, int>> const fixed(begin, end);
|
|
426
|
+
EXPECT_THAT(fixed, testing::ElementsAreArray(items));
|
|
427
|
+
}
|
|
428
|
+
|
|
412
429
|
TEST(InitListConstructorTest, InitListConstruction) {
|
|
413
430
|
absl::FixedArray<int> fixed = {1, 2, 3};
|
|
414
431
|
EXPECT_THAT(fixed, testing::ElementsAreArray({1, 2, 3}));
|
|
@@ -104,24 +104,29 @@ struct FlatHashMapPolicy;
|
|
|
104
104
|
// If your types are not moveable or you require pointer stability for keys,
|
|
105
105
|
// consider `absl::node_hash_map`.
|
|
106
106
|
//
|
|
107
|
+
// PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
|
|
108
|
+
// * Iteration takes O(capacity) time, not O(size).
|
|
109
|
+
// * erase() slows down begin() and ++iterator.
|
|
110
|
+
// * Capacity only shrinks on rehash() or clear() -- not on erase().
|
|
111
|
+
//
|
|
107
112
|
// Example:
|
|
108
113
|
//
|
|
109
114
|
// // Create a flat hash map of three strings (that map to strings)
|
|
110
115
|
// absl::flat_hash_map<std::string, std::string> ducks =
|
|
111
116
|
// {{"a", "huey"}, {"b", "dewey"}, {"c", "louie"}};
|
|
112
117
|
//
|
|
113
|
-
//
|
|
114
|
-
//
|
|
118
|
+
// // Insert a new element into the flat hash map
|
|
119
|
+
// ducks.insert({"d", "donald"});
|
|
115
120
|
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
121
|
+
// // Force a rehash of the flat hash map
|
|
122
|
+
// ducks.rehash(0);
|
|
118
123
|
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
//
|
|
124
|
+
// // Find the element with the key "b"
|
|
125
|
+
// std::string search_key = "b";
|
|
126
|
+
// auto result = ducks.find(search_key);
|
|
127
|
+
// if (result != ducks.end()) {
|
|
128
|
+
// std::cout << "Result: " << result->second << std::endl;
|
|
129
|
+
// }
|
|
125
130
|
template <class K, class V, class Hash = DefaultHashContainerHash<K>,
|
|
126
131
|
class Eq = DefaultHashContainerEq<K>,
|
|
127
132
|
class Allocator = std::allocator<std::pair<const K, V>>>
|
|
@@ -153,9 +158,9 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_map
|
|
|
153
158
|
//
|
|
154
159
|
// * Copy assignment operator
|
|
155
160
|
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
161
|
+
// // Hash functor and Comparator are copied as well
|
|
162
|
+
// absl::flat_hash_map<int, std::string> map4;
|
|
163
|
+
// map4 = map3;
|
|
159
164
|
//
|
|
160
165
|
// * Move constructor
|
|
161
166
|
//
|
|
@@ -655,10 +660,10 @@ struct FlatHashMapPolicy {
|
|
|
655
660
|
std::forward<Args>(args)...);
|
|
656
661
|
}
|
|
657
662
|
|
|
658
|
-
template <class Hash>
|
|
663
|
+
template <class Hash, bool kIsDefault>
|
|
659
664
|
static constexpr HashSlotFn get_hash_slot_fn() {
|
|
660
665
|
return memory_internal::IsLayoutCompatible<K, V>::value
|
|
661
|
-
? &TypeErasedApplyToSlotFn<Hash, K>
|
|
666
|
+
? &TypeErasedApplyToSlotFn<Hash, K, kIsDefault>
|
|
662
667
|
: nullptr;
|
|
663
668
|
}
|
|
664
669
|
|
|
@@ -115,23 +115,20 @@ TEST(FlatHashMap, StandardLayout) {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
TEST(FlatHashMap, Relocatability) {
|
|
118
|
-
static_assert(absl::is_trivially_relocatable<int>::value
|
|
119
|
-
static_assert(
|
|
120
|
-
absl::is_trivially_relocatable<std::pair<const int, int>>::value, "");
|
|
118
|
+
static_assert(absl::is_trivially_relocatable<int>::value);
|
|
121
119
|
static_assert(
|
|
122
120
|
std::is_same<decltype(absl::container_internal::FlatHashMapPolicy<
|
|
123
121
|
int, int>::transfer<std::allocator<char>>(nullptr,
|
|
124
122
|
nullptr,
|
|
125
123
|
nullptr)),
|
|
126
|
-
std::true_type>::value
|
|
127
|
-
"");
|
|
124
|
+
std::true_type>::value);
|
|
128
125
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
struct NonRelocatable {
|
|
127
|
+
NonRelocatable() = default;
|
|
128
|
+
NonRelocatable(NonRelocatable&&) {}
|
|
129
|
+
NonRelocatable& operator=(NonRelocatable&&) { return *this; }
|
|
130
|
+
void* self = nullptr;
|
|
131
|
+
};
|
|
135
132
|
|
|
136
133
|
EXPECT_FALSE(absl::is_trivially_relocatable<NonRelocatable>::value);
|
|
137
134
|
EXPECT_TRUE(
|
|
@@ -360,8 +357,6 @@ TEST(FlatHashMap, CForEachMutate) {
|
|
|
360
357
|
}
|
|
361
358
|
}
|
|
362
359
|
|
|
363
|
-
// This test requires std::launder for mutable key access in node handles.
|
|
364
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
|
|
365
360
|
TEST(FlatHashMap, NodeHandleMutableKeyAccess) {
|
|
366
361
|
flat_hash_map<std::string, std::string> map;
|
|
367
362
|
|
|
@@ -373,7 +368,6 @@ TEST(FlatHashMap, NodeHandleMutableKeyAccess) {
|
|
|
373
368
|
|
|
374
369
|
EXPECT_THAT(map, testing::ElementsAre(Pair("key", "mapped")));
|
|
375
370
|
}
|
|
376
|
-
#endif
|
|
377
371
|
|
|
378
372
|
TEST(FlatHashMap, Reserve) {
|
|
379
373
|
// Verify that if we reserve(size() + n) then we can perform n insertions
|
|
@@ -62,7 +62,7 @@ struct FlatHashSetPolicy;
|
|
|
62
62
|
// Its interface is similar to that of `std::unordered_set<T>` with the
|
|
63
63
|
// following notable differences:
|
|
64
64
|
//
|
|
65
|
-
// * Requires keys that are
|
|
65
|
+
// * Requires keys that are MoveConstructible
|
|
66
66
|
// * Supports heterogeneous lookup, through `find()` and `insert()`, provided
|
|
67
67
|
// that the set is provided a compatible heterogeneous hashing function and
|
|
68
68
|
// equality operator. See below for details.
|
|
@@ -103,22 +103,27 @@ struct FlatHashSetPolicy;
|
|
|
103
103
|
// `absl::flat_hash_set<std::unique_ptr<T>>`. If your type is not moveable and
|
|
104
104
|
// you require pointer stability, consider `absl::node_hash_set` instead.
|
|
105
105
|
//
|
|
106
|
+
// PERFORMANCE WARNING: Erasure & sparsity can negatively affect performance:
|
|
107
|
+
// * Iteration takes O(capacity) time, not O(size).
|
|
108
|
+
// * erase() slows down begin() and ++iterator.
|
|
109
|
+
// * Capacity only shrinks on rehash() or clear() -- not on erase().
|
|
110
|
+
//
|
|
106
111
|
// Example:
|
|
107
112
|
//
|
|
108
113
|
// // Create a flat hash set of three strings
|
|
109
114
|
// absl::flat_hash_set<std::string> ducks =
|
|
110
115
|
// {"huey", "dewey", "louie"};
|
|
111
116
|
//
|
|
112
|
-
//
|
|
113
|
-
//
|
|
117
|
+
// // Insert a new element into the flat hash set
|
|
118
|
+
// ducks.insert("donald");
|
|
114
119
|
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
120
|
+
// // Force a rehash of the flat hash set
|
|
121
|
+
// ducks.rehash(0);
|
|
117
122
|
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
123
|
+
// // See if "dewey" is present
|
|
124
|
+
// if (ducks.contains("dewey")) {
|
|
125
|
+
// std::cout << "We found dewey!" << std::endl;
|
|
126
|
+
// }
|
|
122
127
|
template <class T, class Hash = DefaultHashContainerHash<T>,
|
|
123
128
|
class Eq = DefaultHashContainerEq<T>,
|
|
124
129
|
class Allocator = std::allocator<T>>
|
|
@@ -149,9 +154,9 @@ class ABSL_ATTRIBUTE_OWNER flat_hash_set
|
|
|
149
154
|
//
|
|
150
155
|
// * Copy assignment operator
|
|
151
156
|
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
157
|
+
// // Hash functor and Comparator are copied as well
|
|
158
|
+
// absl::flat_hash_set<std::string> set4;
|
|
159
|
+
// set4 = set3;
|
|
155
160
|
//
|
|
156
161
|
// * Move constructor
|
|
157
162
|
//
|
|
@@ -553,9 +558,9 @@ struct FlatHashSetPolicy {
|
|
|
553
558
|
|
|
554
559
|
static size_t space_used(const T*) { return 0; }
|
|
555
560
|
|
|
556
|
-
template <class Hash>
|
|
561
|
+
template <class Hash, bool kIsDefault>
|
|
557
562
|
static constexpr HashSlotFn get_hash_slot_fn() {
|
|
558
|
-
return &TypeErasedApplyToSlotFn<Hash, T>;
|
|
563
|
+
return &TypeErasedApplyToSlotFn<Hash, T, kIsDefault>;
|
|
559
564
|
}
|
|
560
565
|
};
|
|
561
566
|
} // namespace container_internal
|
|
@@ -351,6 +351,52 @@ TEST(FlatHashSet, Equality) {
|
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
353
|
|
|
354
|
+
class MoveOnlyInt {
|
|
355
|
+
public:
|
|
356
|
+
explicit MoveOnlyInt(int value) : value_(value) {}
|
|
357
|
+
|
|
358
|
+
MoveOnlyInt(const MoveOnlyInt& other) = delete;
|
|
359
|
+
MoveOnlyInt& operator=(const MoveOnlyInt& other) = delete;
|
|
360
|
+
|
|
361
|
+
MoveOnlyInt(MoveOnlyInt&& other) = default;
|
|
362
|
+
MoveOnlyInt& operator=(MoveOnlyInt&& other) = default;
|
|
363
|
+
|
|
364
|
+
bool operator==(const MoveOnlyInt& other) const {
|
|
365
|
+
return value_ == other.value_;
|
|
366
|
+
}
|
|
367
|
+
bool operator==(int other) const { return value_ == other; }
|
|
368
|
+
|
|
369
|
+
private:
|
|
370
|
+
template <typename H>
|
|
371
|
+
friend H AbslHashValue(H h, const MoveOnlyInt& m) {
|
|
372
|
+
return H::combine(std::move(h), m.value_);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
int value_;
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
TEST(FlatHashSet, MoveOnlyKey) {
|
|
379
|
+
flat_hash_set<MoveOnlyInt> s;
|
|
380
|
+
s.insert(MoveOnlyInt(1));
|
|
381
|
+
s.insert(MoveOnlyInt(2));
|
|
382
|
+
s.insert(MoveOnlyInt(3));
|
|
383
|
+
EXPECT_THAT(s, UnorderedElementsAre(1, 2, 3));
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
TEST(FlatHashSet, IsDefaultHash) {
|
|
387
|
+
using absl::container_internal::hashtable_debug_internal::
|
|
388
|
+
HashtableDebugAccess;
|
|
389
|
+
EXPECT_EQ(HashtableDebugAccess<flat_hash_set<int>>::kIsDefaultHash, true);
|
|
390
|
+
EXPECT_EQ(HashtableDebugAccess<flat_hash_set<std::string>>::kIsDefaultHash,
|
|
391
|
+
true);
|
|
392
|
+
|
|
393
|
+
struct Hash {
|
|
394
|
+
size_t operator()(size_t i) const { return i; }
|
|
395
|
+
};
|
|
396
|
+
EXPECT_EQ((HashtableDebugAccess<flat_hash_set<size_t, Hash>>::kIsDefaultHash),
|
|
397
|
+
false);
|
|
398
|
+
}
|
|
399
|
+
|
|
354
400
|
} // namespace
|
|
355
401
|
} // namespace container_internal
|
|
356
402
|
ABSL_NAMESPACE_END
|
|
@@ -47,11 +47,13 @@
|
|
|
47
47
|
|
|
48
48
|
#include "absl/algorithm/algorithm.h"
|
|
49
49
|
#include "absl/base/attributes.h"
|
|
50
|
+
#include "absl/base/internal/iterator_traits.h"
|
|
50
51
|
#include "absl/base/internal/throw_delegate.h"
|
|
51
52
|
#include "absl/base/macros.h"
|
|
52
53
|
#include "absl/base/optimization.h"
|
|
53
54
|
#include "absl/base/port.h"
|
|
54
55
|
#include "absl/container/internal/inlined_vector.h"
|
|
56
|
+
#include "absl/hash/internal/weakly_mixed_integer.h"
|
|
55
57
|
#include "absl/memory/memory.h"
|
|
56
58
|
#include "absl/meta/type_traits.h"
|
|
57
59
|
|
|
@@ -90,11 +92,11 @@ class ABSL_ATTRIBUTE_WARN_UNUSED InlinedVector {
|
|
|
90
92
|
inlined_vector_internal::DefaultValueAdapter<TheA>;
|
|
91
93
|
|
|
92
94
|
template <typename Iterator>
|
|
93
|
-
using EnableIfAtLeastForwardIterator =
|
|
94
|
-
|
|
95
|
+
using EnableIfAtLeastForwardIterator = std::enable_if_t<
|
|
96
|
+
base_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
|
|
95
97
|
template <typename Iterator>
|
|
96
|
-
using DisableIfAtLeastForwardIterator =
|
|
97
|
-
!
|
|
98
|
+
using DisableIfAtLeastForwardIterator = std::enable_if_t<
|
|
99
|
+
!base_internal::IsAtLeastForwardIterator<Iterator>::value, int>;
|
|
98
100
|
|
|
99
101
|
using MemcpyPolicy = typename Storage::MemcpyPolicy;
|
|
100
102
|
using ElementwiseAssignPolicy = typename Storage::ElementwiseAssignPolicy;
|
|
@@ -1006,8 +1008,7 @@ bool operator>=(const absl::InlinedVector<T, N, A>& a,
|
|
|
1006
1008
|
// call this directly.
|
|
1007
1009
|
template <typename H, typename T, size_t N, typename A>
|
|
1008
1010
|
H AbslHashValue(H h, const absl::InlinedVector<T, N, A>& a) {
|
|
1009
|
-
|
|
1010
|
-
return H::combine(H::combine_contiguous(std::move(h), a.data(), size), size);
|
|
1011
|
+
return H::combine_contiguous(std::move(h), a.data(), a.size());
|
|
1011
1012
|
}
|
|
1012
1013
|
|
|
1013
1014
|
ABSL_NAMESPACE_END
|