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
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
// Copyright 2017 The Abseil Authors.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#include "absl/base/internal/invoke.h"
|
|
16
|
-
|
|
17
|
-
#include <functional>
|
|
18
|
-
#include <memory>
|
|
19
|
-
#include <string>
|
|
20
|
-
#include <utility>
|
|
21
|
-
|
|
22
|
-
#include "gmock/gmock.h"
|
|
23
|
-
#include "gtest/gtest.h"
|
|
24
|
-
#include "absl/memory/memory.h"
|
|
25
|
-
#include "absl/strings/str_cat.h"
|
|
26
|
-
|
|
27
|
-
namespace absl {
|
|
28
|
-
ABSL_NAMESPACE_BEGIN
|
|
29
|
-
namespace base_internal {
|
|
30
|
-
namespace {
|
|
31
|
-
|
|
32
|
-
int Function(int a, int b) { return a - b; }
|
|
33
|
-
|
|
34
|
-
void VoidFunction(int& a, int& b) {
|
|
35
|
-
a += b;
|
|
36
|
-
b = a - b;
|
|
37
|
-
a -= b;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
int ZeroArgFunction() { return -1937; }
|
|
41
|
-
|
|
42
|
-
int Sink(std::unique_ptr<int> p) {
|
|
43
|
-
return *p;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
std::unique_ptr<int> Factory(int n) {
|
|
47
|
-
return make_unique<int>(n);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
void NoOp() {}
|
|
51
|
-
|
|
52
|
-
struct ConstFunctor {
|
|
53
|
-
int operator()(int a, int b) const { return a - b; }
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
struct MutableFunctor {
|
|
57
|
-
int operator()(int a, int b) { return a - b; }
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
struct EphemeralFunctor {
|
|
61
|
-
int operator()(int a, int b) && { return a - b; }
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
struct OverloadedFunctor {
|
|
65
|
-
template <typename... Args>
|
|
66
|
-
std::string operator()(const Args&... args) & {
|
|
67
|
-
return StrCat("&", args...);
|
|
68
|
-
}
|
|
69
|
-
template <typename... Args>
|
|
70
|
-
std::string operator()(const Args&... args) const& {
|
|
71
|
-
return StrCat("const&", args...);
|
|
72
|
-
}
|
|
73
|
-
template <typename... Args>
|
|
74
|
-
std::string operator()(const Args&... args) && {
|
|
75
|
-
return StrCat("&&", args...);
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
struct Class {
|
|
80
|
-
int Method(int a, int b) { return a - b; }
|
|
81
|
-
int ConstMethod(int a, int b) const { return a - b; }
|
|
82
|
-
int RefMethod(int a, int b) & { return a - b; }
|
|
83
|
-
int RefRefMethod(int a, int b) && { return a - b; }
|
|
84
|
-
int NoExceptMethod(int a, int b) noexcept { return a - b; }
|
|
85
|
-
int VolatileMethod(int a, int b) volatile { return a - b; }
|
|
86
|
-
|
|
87
|
-
int member;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
struct FlipFlop {
|
|
91
|
-
int ConstMethod() const { return member; }
|
|
92
|
-
FlipFlop operator*() const { return {-member}; }
|
|
93
|
-
|
|
94
|
-
int member;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
// CallMaybeWithArg(f) resolves either to invoke(f) or invoke(f, 42), depending
|
|
98
|
-
// on which one is valid.
|
|
99
|
-
template <typename F>
|
|
100
|
-
decltype(base_internal::invoke(std::declval<const F&>())) CallMaybeWithArg(
|
|
101
|
-
const F& f) {
|
|
102
|
-
return base_internal::invoke(f);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
template <typename F>
|
|
106
|
-
decltype(base_internal::invoke(std::declval<const F&>(), 42)) CallMaybeWithArg(
|
|
107
|
-
const F& f) {
|
|
108
|
-
return base_internal::invoke(f, 42);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
TEST(InvokeTest, Function) {
|
|
112
|
-
EXPECT_EQ(1, base_internal::invoke(Function, 3, 2));
|
|
113
|
-
EXPECT_EQ(1, base_internal::invoke(&Function, 3, 2));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
TEST(InvokeTest, NonCopyableArgument) {
|
|
117
|
-
EXPECT_EQ(42, base_internal::invoke(Sink, make_unique<int>(42)));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
TEST(InvokeTest, NonCopyableResult) {
|
|
121
|
-
EXPECT_THAT(base_internal::invoke(Factory, 42), ::testing::Pointee(42));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
TEST(InvokeTest, VoidResult) { base_internal::invoke(NoOp); }
|
|
125
|
-
|
|
126
|
-
TEST(InvokeTest, ConstFunctor) {
|
|
127
|
-
EXPECT_EQ(1, base_internal::invoke(ConstFunctor(), 3, 2));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
TEST(InvokeTest, MutableFunctor) {
|
|
131
|
-
MutableFunctor f;
|
|
132
|
-
EXPECT_EQ(1, base_internal::invoke(f, 3, 2));
|
|
133
|
-
EXPECT_EQ(1, base_internal::invoke(MutableFunctor(), 3, 2));
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
TEST(InvokeTest, EphemeralFunctor) {
|
|
137
|
-
EphemeralFunctor f;
|
|
138
|
-
EXPECT_EQ(1, base_internal::invoke(std::move(f), 3, 2));
|
|
139
|
-
EXPECT_EQ(1, base_internal::invoke(EphemeralFunctor(), 3, 2));
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
TEST(InvokeTest, OverloadedFunctor) {
|
|
143
|
-
OverloadedFunctor f;
|
|
144
|
-
const OverloadedFunctor& cf = f;
|
|
145
|
-
|
|
146
|
-
EXPECT_EQ("&", base_internal::invoke(f));
|
|
147
|
-
EXPECT_EQ("& 42", base_internal::invoke(f, " 42"));
|
|
148
|
-
|
|
149
|
-
EXPECT_EQ("const&", base_internal::invoke(cf));
|
|
150
|
-
EXPECT_EQ("const& 42", base_internal::invoke(cf, " 42"));
|
|
151
|
-
|
|
152
|
-
EXPECT_EQ("&&", base_internal::invoke(std::move(f)));
|
|
153
|
-
|
|
154
|
-
OverloadedFunctor f2;
|
|
155
|
-
EXPECT_EQ("&& 42", base_internal::invoke(std::move(f2), " 42"));
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
TEST(InvokeTest, ReferenceWrapper) {
|
|
159
|
-
ConstFunctor cf;
|
|
160
|
-
MutableFunctor mf;
|
|
161
|
-
EXPECT_EQ(1, base_internal::invoke(std::cref(cf), 3, 2));
|
|
162
|
-
EXPECT_EQ(1, base_internal::invoke(std::ref(cf), 3, 2));
|
|
163
|
-
EXPECT_EQ(1, base_internal::invoke(std::ref(mf), 3, 2));
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
TEST(InvokeTest, MemberFunction) {
|
|
167
|
-
std::unique_ptr<Class> p(new Class);
|
|
168
|
-
std::unique_ptr<const Class> cp(new Class);
|
|
169
|
-
std::unique_ptr<volatile Class> vp(new Class);
|
|
170
|
-
|
|
171
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::Method, p, 3, 2));
|
|
172
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::Method, p.get(), 3, 2));
|
|
173
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::Method, *p, 3, 2));
|
|
174
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::RefMethod, p, 3, 2));
|
|
175
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::RefMethod, p.get(), 3, 2));
|
|
176
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::RefMethod, *p, 3, 2));
|
|
177
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::RefRefMethod, std::move(*p), 3,
|
|
178
|
-
2)); // NOLINT
|
|
179
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::NoExceptMethod, p, 3, 2));
|
|
180
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::NoExceptMethod, p.get(), 3, 2));
|
|
181
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::NoExceptMethod, *p, 3, 2));
|
|
182
|
-
|
|
183
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, p, 3, 2));
|
|
184
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, p.get(), 3, 2));
|
|
185
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, *p, 3, 2));
|
|
186
|
-
|
|
187
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, cp, 3, 2));
|
|
188
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, cp.get(), 3, 2));
|
|
189
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, *cp, 3, 2));
|
|
190
|
-
|
|
191
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, p, 3, 2));
|
|
192
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, p.get(), 3, 2));
|
|
193
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, *p, 3, 2));
|
|
194
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, vp, 3, 2));
|
|
195
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, vp.get(), 3, 2));
|
|
196
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::VolatileMethod, *vp, 3, 2));
|
|
197
|
-
|
|
198
|
-
EXPECT_EQ(1,
|
|
199
|
-
base_internal::invoke(&Class::Method, make_unique<Class>(), 3, 2));
|
|
200
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod, make_unique<Class>(),
|
|
201
|
-
3, 2));
|
|
202
|
-
EXPECT_EQ(1, base_internal::invoke(&Class::ConstMethod,
|
|
203
|
-
make_unique<const Class>(), 3, 2));
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
TEST(InvokeTest, DataMember) {
|
|
207
|
-
std::unique_ptr<Class> p(new Class{42});
|
|
208
|
-
std::unique_ptr<const Class> cp(new Class{42});
|
|
209
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, p));
|
|
210
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, *p));
|
|
211
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, p.get()));
|
|
212
|
-
|
|
213
|
-
base_internal::invoke(&Class::member, p) = 42;
|
|
214
|
-
base_internal::invoke(&Class::member, p.get()) = 42;
|
|
215
|
-
|
|
216
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, cp));
|
|
217
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, *cp));
|
|
218
|
-
EXPECT_EQ(42, base_internal::invoke(&Class::member, cp.get()));
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
TEST(InvokeTest, FlipFlop) {
|
|
222
|
-
FlipFlop obj = {42};
|
|
223
|
-
// This call could resolve to (obj.*&FlipFlop::ConstMethod)() or
|
|
224
|
-
// ((*obj).*&FlipFlop::ConstMethod)(). We verify that it's the former.
|
|
225
|
-
EXPECT_EQ(42, base_internal::invoke(&FlipFlop::ConstMethod, obj));
|
|
226
|
-
EXPECT_EQ(42, base_internal::invoke(&FlipFlop::member, obj));
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
TEST(InvokeTest, SfinaeFriendly) {
|
|
230
|
-
CallMaybeWithArg(NoOp);
|
|
231
|
-
EXPECT_THAT(CallMaybeWithArg(Factory), ::testing::Pointee(42));
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
TEST(IsInvocableRTest, CallableExactMatch) {
|
|
235
|
-
static_assert(
|
|
236
|
-
base_internal::is_invocable_r<int, decltype(Function), int, int>::value,
|
|
237
|
-
"Should be true for exact match of types on a free function");
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
TEST(IsInvocableRTest, CallableArgumentConversionMatch) {
|
|
241
|
-
static_assert(
|
|
242
|
-
base_internal::is_invocable_r<int, decltype(Function), char, int>::value,
|
|
243
|
-
"Should be true for convertible argument type");
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
TEST(IsInvocableRTest, CallableReturnConversionMatch) {
|
|
247
|
-
static_assert(base_internal::is_invocable_r<double, decltype(Function), int,
|
|
248
|
-
int>::value,
|
|
249
|
-
"Should be true for convertible return type");
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
TEST(IsInvocableRTest, CallableReturnVoid) {
|
|
253
|
-
static_assert(base_internal::is_invocable_r<void, decltype(VoidFunction),
|
|
254
|
-
int&, int&>::value,
|
|
255
|
-
"Should be true for void expected and actual return types");
|
|
256
|
-
static_assert(
|
|
257
|
-
base_internal::is_invocable_r<void, decltype(Function), int, int>::value,
|
|
258
|
-
"Should be true for void expected and non-void actual return types");
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
TEST(IsInvocableRTest, CallableRefQualifierMismatch) {
|
|
262
|
-
static_assert(!base_internal::is_invocable_r<void, decltype(VoidFunction),
|
|
263
|
-
int&, const int&>::value,
|
|
264
|
-
"Should be false for reference constness mismatch");
|
|
265
|
-
static_assert(!base_internal::is_invocable_r<void, decltype(VoidFunction),
|
|
266
|
-
int&&, int&>::value,
|
|
267
|
-
"Should be false for reference value category mismatch");
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
TEST(IsInvocableRTest, CallableArgumentTypeMismatch) {
|
|
271
|
-
static_assert(!base_internal::is_invocable_r<int, decltype(Function),
|
|
272
|
-
std::string, int>::value,
|
|
273
|
-
"Should be false for argument type mismatch");
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
TEST(IsInvocableRTest, CallableReturnTypeMismatch) {
|
|
277
|
-
static_assert(!base_internal::is_invocable_r<std::string, decltype(Function),
|
|
278
|
-
int, int>::value,
|
|
279
|
-
"Should be false for return type mismatch");
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
TEST(IsInvocableRTest, CallableTooFewArgs) {
|
|
283
|
-
static_assert(
|
|
284
|
-
!base_internal::is_invocable_r<int, decltype(Function), int>::value,
|
|
285
|
-
"Should be false for too few arguments");
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
TEST(IsInvocableRTest, CallableTooManyArgs) {
|
|
289
|
-
static_assert(!base_internal::is_invocable_r<int, decltype(Function), int,
|
|
290
|
-
int, int>::value,
|
|
291
|
-
"Should be false for too many arguments");
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
TEST(IsInvocableRTest, MemberFunctionAndReference) {
|
|
295
|
-
static_assert(base_internal::is_invocable_r<int, decltype(&Class::Method),
|
|
296
|
-
Class&, int, int>::value,
|
|
297
|
-
"Should be true for exact match of types on a member function "
|
|
298
|
-
"and class reference");
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
TEST(IsInvocableRTest, MemberFunctionAndPointer) {
|
|
302
|
-
static_assert(base_internal::is_invocable_r<int, decltype(&Class::Method),
|
|
303
|
-
Class*, int, int>::value,
|
|
304
|
-
"Should be true for exact match of types on a member function "
|
|
305
|
-
"and class pointer");
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
TEST(IsInvocableRTest, DataMemberAndReference) {
|
|
309
|
-
static_assert(base_internal::is_invocable_r<int, decltype(&Class::member),
|
|
310
|
-
Class&>::value,
|
|
311
|
-
"Should be true for exact match of types on a data member and "
|
|
312
|
-
"class reference");
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
TEST(IsInvocableRTest, DataMemberAndPointer) {
|
|
316
|
-
static_assert(base_internal::is_invocable_r<int, decltype(&Class::member),
|
|
317
|
-
Class*>::value,
|
|
318
|
-
"Should be true for exact match of types on a data member and "
|
|
319
|
-
"class pointer");
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
TEST(IsInvocableRTest, CallableZeroArgs) {
|
|
323
|
-
static_assert(
|
|
324
|
-
base_internal::is_invocable_r<int, decltype(ZeroArgFunction)>::value,
|
|
325
|
-
"Should be true for exact match for a zero-arg free function");
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
} // namespace
|
|
329
|
-
} // namespace base_internal
|
|
330
|
-
ABSL_NAMESPACE_END
|
|
331
|
-
} // namespace absl
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
// Copyright 2020 The Abseil Authors
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#include "absl/hash/internal/low_level_hash.h"
|
|
16
|
-
|
|
17
|
-
#include <cstddef>
|
|
18
|
-
#include <cstdint>
|
|
19
|
-
|
|
20
|
-
#include "absl/base/internal/unaligned_access.h"
|
|
21
|
-
#include "absl/base/prefetch.h"
|
|
22
|
-
#include "absl/numeric/int128.h"
|
|
23
|
-
|
|
24
|
-
namespace absl {
|
|
25
|
-
ABSL_NAMESPACE_BEGIN
|
|
26
|
-
namespace hash_internal {
|
|
27
|
-
|
|
28
|
-
static uint64_t Mix(uint64_t v0, uint64_t v1) {
|
|
29
|
-
absl::uint128 p = v0;
|
|
30
|
-
p *= v1;
|
|
31
|
-
return absl::Uint128Low64(p) ^ absl::Uint128High64(p);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
uint64_t LowLevelHashLenGt16(const void* data, size_t len, uint64_t seed,
|
|
35
|
-
const uint64_t salt[5]) {
|
|
36
|
-
const uint8_t* ptr = static_cast<const uint8_t*>(data);
|
|
37
|
-
uint64_t starting_length = static_cast<uint64_t>(len);
|
|
38
|
-
const uint8_t* last_16_ptr = ptr + starting_length - 16;
|
|
39
|
-
uint64_t current_state = seed ^ salt[0];
|
|
40
|
-
|
|
41
|
-
if (len > 64) {
|
|
42
|
-
// If we have more than 64 bytes, we're going to handle chunks of 64
|
|
43
|
-
// bytes at a time. We're going to build up four separate hash states
|
|
44
|
-
// which we will then hash together. This avoids short dependency chains.
|
|
45
|
-
uint64_t duplicated_state0 = current_state;
|
|
46
|
-
uint64_t duplicated_state1 = current_state;
|
|
47
|
-
uint64_t duplicated_state2 = current_state;
|
|
48
|
-
|
|
49
|
-
do {
|
|
50
|
-
// Always prefetch the next cacheline.
|
|
51
|
-
PrefetchToLocalCache(ptr + ABSL_CACHELINE_SIZE);
|
|
52
|
-
|
|
53
|
-
uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
|
|
54
|
-
uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
|
|
55
|
-
uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
|
|
56
|
-
uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
|
|
57
|
-
uint64_t e = absl::base_internal::UnalignedLoad64(ptr + 32);
|
|
58
|
-
uint64_t f = absl::base_internal::UnalignedLoad64(ptr + 40);
|
|
59
|
-
uint64_t g = absl::base_internal::UnalignedLoad64(ptr + 48);
|
|
60
|
-
uint64_t h = absl::base_internal::UnalignedLoad64(ptr + 56);
|
|
61
|
-
|
|
62
|
-
current_state = Mix(a ^ salt[1], b ^ current_state);
|
|
63
|
-
duplicated_state0 = Mix(c ^ salt[2], d ^ duplicated_state0);
|
|
64
|
-
|
|
65
|
-
duplicated_state1 = Mix(e ^ salt[3], f ^ duplicated_state1);
|
|
66
|
-
duplicated_state2 = Mix(g ^ salt[4], h ^ duplicated_state2);
|
|
67
|
-
|
|
68
|
-
ptr += 64;
|
|
69
|
-
len -= 64;
|
|
70
|
-
} while (len > 64);
|
|
71
|
-
|
|
72
|
-
current_state = (current_state ^ duplicated_state0) ^
|
|
73
|
-
(duplicated_state1 + duplicated_state2);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// We now have a data `ptr` with at most 64 bytes and the current state
|
|
77
|
-
// of the hashing state machine stored in current_state.
|
|
78
|
-
if (len > 32) {
|
|
79
|
-
uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
|
|
80
|
-
uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
|
|
81
|
-
uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
|
|
82
|
-
uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
|
|
83
|
-
|
|
84
|
-
uint64_t cs0 = Mix(a ^ salt[1], b ^ current_state);
|
|
85
|
-
uint64_t cs1 = Mix(c ^ salt[2], d ^ current_state);
|
|
86
|
-
current_state = cs0 ^ cs1;
|
|
87
|
-
|
|
88
|
-
ptr += 32;
|
|
89
|
-
len -= 32;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// We now have a data `ptr` with at most 32 bytes and the current state
|
|
93
|
-
// of the hashing state machine stored in current_state.
|
|
94
|
-
if (len > 16) {
|
|
95
|
-
uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
|
|
96
|
-
uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
|
|
97
|
-
|
|
98
|
-
current_state = Mix(a ^ salt[1], b ^ current_state);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// We now have a data `ptr` with at least 1 and at most 16 bytes. But we can
|
|
102
|
-
// safely read from `ptr + len - 16`.
|
|
103
|
-
uint64_t a = absl::base_internal::UnalignedLoad64(last_16_ptr);
|
|
104
|
-
uint64_t b = absl::base_internal::UnalignedLoad64(last_16_ptr + 8);
|
|
105
|
-
|
|
106
|
-
return Mix(a ^ salt[1] ^ starting_length, b ^ current_state);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
uint64_t LowLevelHash(const void* data, size_t len, uint64_t seed,
|
|
110
|
-
const uint64_t salt[5]) {
|
|
111
|
-
if (len > 16) return LowLevelHashLenGt16(data, len, seed, salt);
|
|
112
|
-
|
|
113
|
-
// Prefetch the cacheline that data resides in.
|
|
114
|
-
PrefetchToLocalCache(data);
|
|
115
|
-
const uint8_t* ptr = static_cast<const uint8_t*>(data);
|
|
116
|
-
uint64_t starting_length = static_cast<uint64_t>(len);
|
|
117
|
-
uint64_t current_state = seed ^ salt[0];
|
|
118
|
-
if (len == 0) return current_state;
|
|
119
|
-
|
|
120
|
-
uint64_t a = 0;
|
|
121
|
-
uint64_t b = 0;
|
|
122
|
-
|
|
123
|
-
// We now have a data `ptr` with at least 1 and at most 16 bytes.
|
|
124
|
-
if (len > 8) {
|
|
125
|
-
// When we have at least 9 and at most 16 bytes, set A to the first 64
|
|
126
|
-
// bits of the input and B to the last 64 bits of the input. Yes, they
|
|
127
|
-
// will overlap in the middle if we are working with less than the full 16
|
|
128
|
-
// bytes.
|
|
129
|
-
a = absl::base_internal::UnalignedLoad64(ptr);
|
|
130
|
-
b = absl::base_internal::UnalignedLoad64(ptr + len - 8);
|
|
131
|
-
} else if (len > 3) {
|
|
132
|
-
// If we have at least 4 and at most 8 bytes, set A to the first 32
|
|
133
|
-
// bits and B to the last 32 bits.
|
|
134
|
-
a = absl::base_internal::UnalignedLoad32(ptr);
|
|
135
|
-
b = absl::base_internal::UnalignedLoad32(ptr + len - 4);
|
|
136
|
-
} else {
|
|
137
|
-
// If we have at least 1 and at most 3 bytes, read 2 bytes into A and the
|
|
138
|
-
// other byte into B, with some adjustments.
|
|
139
|
-
a = static_cast<uint64_t>((ptr[0] << 8) | ptr[len - 1]);
|
|
140
|
-
b = static_cast<uint64_t>(ptr[len >> 1]);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
return Mix(a ^ salt[1] ^ starting_length, b ^ current_state);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
} // namespace hash_internal
|
|
147
|
-
ABSL_NAMESPACE_END
|
|
148
|
-
} // namespace absl
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Copyright 2020 The Abseil Authors
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
//
|
|
15
|
-
// This file provides the Google-internal implementation of LowLevelHash.
|
|
16
|
-
//
|
|
17
|
-
// LowLevelHash is a fast hash function for hash tables, the fastest we've
|
|
18
|
-
// currently (late 2020) found that passes the SMHasher tests. The algorithm
|
|
19
|
-
// relies on intrinsic 128-bit multiplication for speed. This is not meant to be
|
|
20
|
-
// secure - just fast.
|
|
21
|
-
//
|
|
22
|
-
// It is closely based on a version of wyhash, but does not maintain or
|
|
23
|
-
// guarantee future compatibility with it.
|
|
24
|
-
|
|
25
|
-
#ifndef ABSL_HASH_INTERNAL_LOW_LEVEL_HASH_H_
|
|
26
|
-
#define ABSL_HASH_INTERNAL_LOW_LEVEL_HASH_H_
|
|
27
|
-
|
|
28
|
-
#include <stdint.h>
|
|
29
|
-
#include <stdlib.h>
|
|
30
|
-
|
|
31
|
-
#include "absl/base/config.h"
|
|
32
|
-
|
|
33
|
-
namespace absl {
|
|
34
|
-
ABSL_NAMESPACE_BEGIN
|
|
35
|
-
namespace hash_internal {
|
|
36
|
-
|
|
37
|
-
// Hash function for a byte array. A 64-bit seed and a set of five 64-bit
|
|
38
|
-
// integers are hashed into the result.
|
|
39
|
-
//
|
|
40
|
-
// To allow all hashable types (including string_view and Span) to depend on
|
|
41
|
-
// this algorithm, we keep the API low-level, with as few dependencies as
|
|
42
|
-
// possible.
|
|
43
|
-
uint64_t LowLevelHash(const void* data, size_t len, uint64_t seed,
|
|
44
|
-
const uint64_t salt[5]);
|
|
45
|
-
|
|
46
|
-
// Same as above except the length must be greater than 16.
|
|
47
|
-
uint64_t LowLevelHashLenGt16(const void* data, size_t len, uint64_t seed,
|
|
48
|
-
const uint64_t salt[5]);
|
|
49
|
-
|
|
50
|
-
} // namespace hash_internal
|
|
51
|
-
ABSL_NAMESPACE_END
|
|
52
|
-
} // namespace absl
|
|
53
|
-
|
|
54
|
-
#endif // ABSL_HASH_INTERNAL_LOW_LEVEL_HASH_H_
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
// Copyright 2017 The Abseil Authors.
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
|
|
15
|
-
#ifndef ABSL_RANDOM_INTERNAL_POOL_URBG_H_
|
|
16
|
-
#define ABSL_RANDOM_INTERNAL_POOL_URBG_H_
|
|
17
|
-
|
|
18
|
-
#include <cinttypes>
|
|
19
|
-
#include <limits>
|
|
20
|
-
|
|
21
|
-
#include "absl/random/internal/traits.h"
|
|
22
|
-
#include "absl/types/span.h"
|
|
23
|
-
|
|
24
|
-
namespace absl {
|
|
25
|
-
ABSL_NAMESPACE_BEGIN
|
|
26
|
-
namespace random_internal {
|
|
27
|
-
|
|
28
|
-
// RandenPool is a thread-safe random number generator [random.req.urbg] that
|
|
29
|
-
// uses an underlying pool of Randen generators to generate values. Each thread
|
|
30
|
-
// has affinity to one instance of the underlying pool generators. Concurrent
|
|
31
|
-
// access is guarded by a spin-lock.
|
|
32
|
-
template <typename T>
|
|
33
|
-
class RandenPool {
|
|
34
|
-
public:
|
|
35
|
-
using result_type = T;
|
|
36
|
-
static_assert(std::is_unsigned<result_type>::value,
|
|
37
|
-
"RandenPool template argument must be a built-in unsigned "
|
|
38
|
-
"integer type");
|
|
39
|
-
|
|
40
|
-
static constexpr result_type(min)() {
|
|
41
|
-
return (std::numeric_limits<result_type>::min)();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
static constexpr result_type(max)() {
|
|
45
|
-
return (std::numeric_limits<result_type>::max)();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
RandenPool() {}
|
|
49
|
-
|
|
50
|
-
// Returns a single value.
|
|
51
|
-
inline result_type operator()() { return Generate(); }
|
|
52
|
-
|
|
53
|
-
// Fill data with random values.
|
|
54
|
-
static void Fill(absl::Span<result_type> data);
|
|
55
|
-
|
|
56
|
-
protected:
|
|
57
|
-
// Generate returns a single value.
|
|
58
|
-
static result_type Generate();
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
extern template class RandenPool<uint8_t>;
|
|
62
|
-
extern template class RandenPool<uint16_t>;
|
|
63
|
-
extern template class RandenPool<uint32_t>;
|
|
64
|
-
extern template class RandenPool<uint64_t>;
|
|
65
|
-
|
|
66
|
-
// PoolURBG uses an underlying pool of random generators to implement a
|
|
67
|
-
// thread-compatible [random.req.urbg] interface with an internal cache of
|
|
68
|
-
// values.
|
|
69
|
-
template <typename T, size_t kBufferSize>
|
|
70
|
-
class PoolURBG {
|
|
71
|
-
// Inheritance to access the protected static members of RandenPool.
|
|
72
|
-
using unsigned_type = typename make_unsigned_bits<T>::type;
|
|
73
|
-
using PoolType = RandenPool<unsigned_type>;
|
|
74
|
-
using SpanType = absl::Span<unsigned_type>;
|
|
75
|
-
|
|
76
|
-
static constexpr size_t kInitialBuffer = kBufferSize + 1;
|
|
77
|
-
static constexpr size_t kHalfBuffer = kBufferSize / 2;
|
|
78
|
-
|
|
79
|
-
public:
|
|
80
|
-
using result_type = T;
|
|
81
|
-
|
|
82
|
-
static_assert(std::is_unsigned<result_type>::value,
|
|
83
|
-
"PoolURBG must be parameterized by an unsigned integer type");
|
|
84
|
-
|
|
85
|
-
static_assert(kBufferSize > 1,
|
|
86
|
-
"PoolURBG must be parameterized by a buffer-size > 1");
|
|
87
|
-
|
|
88
|
-
static_assert(kBufferSize <= 256,
|
|
89
|
-
"PoolURBG must be parameterized by a buffer-size <= 256");
|
|
90
|
-
|
|
91
|
-
static constexpr result_type(min)() {
|
|
92
|
-
return (std::numeric_limits<result_type>::min)();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static constexpr result_type(max)() {
|
|
96
|
-
return (std::numeric_limits<result_type>::max)();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
PoolURBG() : next_(kInitialBuffer) {}
|
|
100
|
-
|
|
101
|
-
// copy-constructor does not copy cache.
|
|
102
|
-
PoolURBG(const PoolURBG&) : next_(kInitialBuffer) {}
|
|
103
|
-
const PoolURBG& operator=(const PoolURBG&) {
|
|
104
|
-
next_ = kInitialBuffer;
|
|
105
|
-
return *this;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// move-constructor does move cache.
|
|
109
|
-
PoolURBG(PoolURBG&&) = default;
|
|
110
|
-
PoolURBG& operator=(PoolURBG&&) = default;
|
|
111
|
-
|
|
112
|
-
inline result_type operator()() {
|
|
113
|
-
if (next_ >= kBufferSize) {
|
|
114
|
-
next_ = (kBufferSize > 2 && next_ > kBufferSize) ? kHalfBuffer : 0;
|
|
115
|
-
PoolType::Fill(SpanType(reinterpret_cast<unsigned_type*>(state_ + next_),
|
|
116
|
-
kBufferSize - next_));
|
|
117
|
-
}
|
|
118
|
-
return state_[next_++];
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
private:
|
|
122
|
-
// Buffer size.
|
|
123
|
-
size_t next_; // index within state_
|
|
124
|
-
result_type state_[kBufferSize];
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
} // namespace random_internal
|
|
128
|
-
ABSL_NAMESPACE_END
|
|
129
|
-
} // namespace absl
|
|
130
|
-
|
|
131
|
-
#endif // ABSL_RANDOM_INTERNAL_POOL_URBG_H_
|