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
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
|
|
66
66
|
#include "absl/base/attributes.h"
|
|
67
67
|
#include "absl/base/config.h"
|
|
68
|
-
#include "absl/base/internal/invoke.h"
|
|
69
68
|
#include "absl/base/macros.h"
|
|
69
|
+
#include "absl/base/nullability.h"
|
|
70
70
|
#include "absl/base/optimization.h"
|
|
71
71
|
#include "absl/meta/type_traits.h"
|
|
72
72
|
#include "absl/utility/utility.h"
|
|
@@ -74,18 +74,9 @@
|
|
|
74
74
|
namespace absl {
|
|
75
75
|
ABSL_NAMESPACE_BEGIN
|
|
76
76
|
|
|
77
|
-
// Helper macro used to prevent spelling `noexcept` in language versions older
|
|
78
|
-
// than C++17, where it is not part of the type system, in order to avoid
|
|
79
|
-
// compilation failures and internal compiler errors.
|
|
80
|
-
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
|
81
|
-
#define ABSL_INTERNAL_NOEXCEPT_SPEC(noex) noexcept(noex)
|
|
82
|
-
#else
|
|
83
|
-
#define ABSL_INTERNAL_NOEXCEPT_SPEC(noex)
|
|
84
|
-
#endif
|
|
85
|
-
|
|
86
77
|
// Defined in functional/any_invocable.h
|
|
87
78
|
template <class Sig>
|
|
88
|
-
class AnyInvocable;
|
|
79
|
+
class ABSL_NULLABILITY_COMPATIBLE AnyInvocable;
|
|
89
80
|
|
|
90
81
|
namespace internal_any_invocable {
|
|
91
82
|
|
|
@@ -107,44 +98,30 @@ struct IsAnyInvocable<AnyInvocable<Sig>> : std::true_type {};
|
|
|
107
98
|
//
|
|
108
99
|
////////////////////////////////////////////////////////////////////////////////
|
|
109
100
|
|
|
110
|
-
// A
|
|
101
|
+
// A metafunction that tells us whether or not a target function type should be
|
|
111
102
|
// stored locally in the small object optimization storage
|
|
112
103
|
template <class T>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
104
|
+
constexpr bool IsStoredLocally() {
|
|
105
|
+
if constexpr (sizeof(T) <= kStorageSize && alignof(T) <= kAlignment &&
|
|
106
|
+
kAlignment % alignof(T) == 0) {
|
|
107
|
+
return std::is_nothrow_move_constructible<T>::value;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
117
111
|
|
|
118
112
|
// An implementation of std::remove_cvref_t of C++20.
|
|
119
113
|
template <class T>
|
|
120
114
|
using RemoveCVRef =
|
|
121
115
|
typename std::remove_cv<typename std::remove_reference<T>::type>::type;
|
|
122
116
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// An implementation of the C++ standard INVOKE<R> pseudo-macro, operation is
|
|
126
|
-
// equivalent to std::invoke except that it forces an implicit conversion to the
|
|
127
|
-
// specified return type. If "R" is void, the function is executed and the
|
|
128
|
-
// return value is simply ignored.
|
|
129
|
-
template <class ReturnType, class F, class... P,
|
|
130
|
-
typename = absl::enable_if_t<std::is_void<ReturnType>::value>>
|
|
131
|
-
void InvokeR(F&& f, P&&... args) {
|
|
132
|
-
absl::base_internal::invoke(std::forward<F>(f), std::forward<P>(args)...);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
template <class ReturnType, class F, class... P,
|
|
136
|
-
absl::enable_if_t<!std::is_void<ReturnType>::value, int> = 0>
|
|
117
|
+
// An implementation of std::invoke_r of C++23.
|
|
118
|
+
template <class ReturnType, class F, class... P>
|
|
137
119
|
ReturnType InvokeR(F&& f, P&&... args) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
return absl::base_internal::invoke(std::forward<F>(f),
|
|
144
|
-
std::forward<P>(args)...);
|
|
145
|
-
#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(12, 0)
|
|
146
|
-
#pragma GCC diagnostic pop
|
|
147
|
-
#endif
|
|
120
|
+
if constexpr (std::is_void_v<ReturnType>) {
|
|
121
|
+
std::invoke(std::forward<F>(f), std::forward<P>(args)...);
|
|
122
|
+
} else {
|
|
123
|
+
return std::invoke(std::forward<F>(f), std::forward<P>(args)...);
|
|
124
|
+
}
|
|
148
125
|
}
|
|
149
126
|
|
|
150
127
|
//
|
|
@@ -198,32 +175,14 @@ union TypeErasedState {
|
|
|
198
175
|
} remote;
|
|
199
176
|
|
|
200
177
|
// Local-storage for the type-erased object when small and trivial enough
|
|
201
|
-
alignas(kAlignment) char storage[kStorageSize];
|
|
178
|
+
alignas(kAlignment) unsigned char storage[kStorageSize];
|
|
202
179
|
};
|
|
203
180
|
|
|
204
181
|
// A typed accessor for the object in `TypeErasedState` storage
|
|
205
182
|
template <class T>
|
|
206
183
|
T& ObjectInLocalStorage(TypeErasedState* const state) {
|
|
207
184
|
// We launder here because the storage may be reused with the same type.
|
|
208
|
-
#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
|
|
209
185
|
return *std::launder(reinterpret_cast<T*>(&state->storage));
|
|
210
|
-
#elif ABSL_HAVE_BUILTIN(__builtin_launder)
|
|
211
|
-
return *__builtin_launder(reinterpret_cast<T*>(&state->storage));
|
|
212
|
-
#else
|
|
213
|
-
|
|
214
|
-
// When `std::launder` or equivalent are not available, we rely on undefined
|
|
215
|
-
// behavior, which works as intended on Abseil's officially supported
|
|
216
|
-
// platforms as of Q2 2022.
|
|
217
|
-
#if !defined(__clang__) && defined(__GNUC__)
|
|
218
|
-
#pragma GCC diagnostic push
|
|
219
|
-
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
|
|
220
|
-
#endif
|
|
221
|
-
return *reinterpret_cast<T*>(&state->storage);
|
|
222
|
-
#if !defined(__clang__) && defined(__GNUC__)
|
|
223
|
-
#pragma GCC diagnostic pop
|
|
224
|
-
#endif
|
|
225
|
-
|
|
226
|
-
#endif
|
|
227
186
|
}
|
|
228
187
|
|
|
229
188
|
// The type for functions issuing lifetime-related operations: move and dispose
|
|
@@ -231,14 +190,14 @@ T& ObjectInLocalStorage(TypeErasedState* const state) {
|
|
|
231
190
|
// NOTE: When specifying `FunctionToCall::`dispose, the same state must be
|
|
232
191
|
// passed as both "from" and "to".
|
|
233
192
|
using ManagerType = void(FunctionToCall /*operation*/,
|
|
234
|
-
TypeErasedState* /*from*/,
|
|
235
|
-
|
|
193
|
+
TypeErasedState* /*from*/,
|
|
194
|
+
TypeErasedState* /*to*/) noexcept(true);
|
|
236
195
|
|
|
237
196
|
// The type for functions issuing the actual invocation of the object
|
|
238
197
|
// A pointer to such a function is contained in each AnyInvocable instance.
|
|
239
198
|
template <bool SigIsNoexcept, class ReturnType, class... P>
|
|
240
|
-
using InvokerType = ReturnType(
|
|
241
|
-
|
|
199
|
+
using InvokerType = ReturnType(
|
|
200
|
+
TypeErasedState*, ForwardedParameterType<P>...) noexcept(SigIsNoexcept);
|
|
242
201
|
|
|
243
202
|
// The manager that is used when AnyInvocable is empty
|
|
244
203
|
inline void EmptyManager(FunctionToCall /*operation*/,
|
|
@@ -275,7 +234,7 @@ template <class T>
|
|
|
275
234
|
void LocalManagerNontrivial(FunctionToCall operation,
|
|
276
235
|
TypeErasedState* const from,
|
|
277
236
|
TypeErasedState* const to) noexcept {
|
|
278
|
-
static_assert(IsStoredLocally<T
|
|
237
|
+
static_assert(IsStoredLocally<T>(),
|
|
279
238
|
"Local storage must only be used for supported types.");
|
|
280
239
|
static_assert(!std::is_trivially_copyable<T>::value,
|
|
281
240
|
"Locally stored types must be trivially copyable.");
|
|
@@ -303,7 +262,7 @@ ReturnType LocalInvoker(
|
|
|
303
262
|
ForwardedParameterType<P>... args) noexcept(SigIsNoexcept) {
|
|
304
263
|
using RawT = RemoveCVRef<QualTRef>;
|
|
305
264
|
static_assert(
|
|
306
|
-
IsStoredLocally<RawT
|
|
265
|
+
IsStoredLocally<RawT>(),
|
|
307
266
|
"Target object must be in local storage in order to be invoked from it.");
|
|
308
267
|
|
|
309
268
|
auto& f = (ObjectInLocalStorage<RawT>)(state);
|
|
@@ -338,7 +297,7 @@ template <class T>
|
|
|
338
297
|
void RemoteManagerNontrivial(FunctionToCall operation,
|
|
339
298
|
TypeErasedState* const from,
|
|
340
299
|
TypeErasedState* const to) noexcept {
|
|
341
|
-
static_assert(!IsStoredLocally<T
|
|
300
|
+
static_assert(!IsStoredLocally<T>(),
|
|
342
301
|
"Remote storage must only be used for types that do not "
|
|
343
302
|
"qualify for local storage.");
|
|
344
303
|
|
|
@@ -360,7 +319,7 @@ ReturnType RemoteInvoker(
|
|
|
360
319
|
TypeErasedState* const state,
|
|
361
320
|
ForwardedParameterType<P>... args) noexcept(SigIsNoexcept) {
|
|
362
321
|
using RawT = RemoveCVRef<QualTRef>;
|
|
363
|
-
static_assert(!IsStoredLocally<RawT
|
|
322
|
+
static_assert(!IsStoredLocally<RawT>(),
|
|
364
323
|
"Target object must be in remote storage in order to be "
|
|
365
324
|
"invoked from it.");
|
|
366
325
|
|
|
@@ -440,13 +399,6 @@ class CoreImpl {
|
|
|
440
399
|
|
|
441
400
|
CoreImpl() noexcept : manager_(EmptyManager), invoker_(nullptr) {}
|
|
442
401
|
|
|
443
|
-
enum class TargetType {
|
|
444
|
-
kPointer,
|
|
445
|
-
kCompatibleAnyInvocable,
|
|
446
|
-
kIncompatibleAnyInvocable,
|
|
447
|
-
kOther,
|
|
448
|
-
};
|
|
449
|
-
|
|
450
402
|
// Note: QualDecayedTRef here includes the cv-ref qualifiers associated with
|
|
451
403
|
// the invocation of the Invocable. The unqualified type is the target object
|
|
452
404
|
// type to be stored.
|
|
@@ -454,19 +406,47 @@ class CoreImpl {
|
|
|
454
406
|
explicit CoreImpl(TypedConversionConstruct<QualDecayedTRef>, F&& f) {
|
|
455
407
|
using DecayedT = RemoveCVRef<QualDecayedTRef>;
|
|
456
408
|
|
|
457
|
-
constexpr
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
409
|
+
if constexpr (std::is_pointer<DecayedT>::value ||
|
|
410
|
+
std::is_member_pointer<DecayedT>::value) {
|
|
411
|
+
// This condition handles types that decay into pointers. This includes
|
|
412
|
+
// function references, which cannot be null. GCC warns against comparing
|
|
413
|
+
// their decayed form with nullptr (https://godbolt.org/z/9r9TMTcPK).
|
|
414
|
+
// We could work around this warning with constexpr programming, using
|
|
415
|
+
// std::is_function_v<std::remove_reference_t<F>>, but we choose to ignore
|
|
416
|
+
// it instead of writing more code.
|
|
417
|
+
#if !defined(__clang__) && defined(__GNUC__)
|
|
418
|
+
#pragma GCC diagnostic push
|
|
419
|
+
#pragma GCC diagnostic ignored "-Wpragmas"
|
|
420
|
+
#pragma GCC diagnostic ignored "-Waddress"
|
|
421
|
+
#pragma GCC diagnostic ignored "-Wnonnull-compare"
|
|
422
|
+
#endif
|
|
423
|
+
if (static_cast<DecayedT>(f) == nullptr) {
|
|
424
|
+
#if !defined(__clang__) && defined(__GNUC__)
|
|
425
|
+
#pragma GCC diagnostic pop
|
|
426
|
+
#endif
|
|
427
|
+
manager_ = EmptyManager;
|
|
428
|
+
invoker_ = nullptr;
|
|
429
|
+
} else {
|
|
430
|
+
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
431
|
+
}
|
|
432
|
+
} else if constexpr (IsCompatibleAnyInvocable<DecayedT>::value) {
|
|
433
|
+
// In this case we can "steal the guts" of the other AnyInvocable.
|
|
434
|
+
f.manager_(FunctionToCall::relocate_from_to, &f.state_, &state_);
|
|
435
|
+
manager_ = f.manager_;
|
|
436
|
+
invoker_ = f.invoker_;
|
|
437
|
+
|
|
438
|
+
f.manager_ = EmptyManager;
|
|
439
|
+
f.invoker_ = nullptr;
|
|
440
|
+
} else if constexpr (IsAnyInvocable<DecayedT>::value) {
|
|
441
|
+
if (f.HasValue()) {
|
|
442
|
+
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
443
|
+
} else {
|
|
444
|
+
manager_ = EmptyManager;
|
|
445
|
+
invoker_ = nullptr;
|
|
446
|
+
}
|
|
447
|
+
} else {
|
|
448
|
+
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
449
|
+
}
|
|
470
450
|
}
|
|
471
451
|
|
|
472
452
|
// Note: QualTRef here includes the cv-ref qualifiers associated with the
|
|
@@ -517,122 +497,43 @@ class CoreImpl {
|
|
|
517
497
|
invoker_ = nullptr;
|
|
518
498
|
}
|
|
519
499
|
|
|
520
|
-
template <TargetType target_type, class QualDecayedTRef, class F,
|
|
521
|
-
absl::enable_if_t<target_type == TargetType::kPointer, int> = 0>
|
|
522
|
-
void Initialize(F&& f) {
|
|
523
|
-
// This condition handles types that decay into pointers, which includes
|
|
524
|
-
// function references. Since function references cannot be null, GCC warns
|
|
525
|
-
// against comparing their decayed form with nullptr.
|
|
526
|
-
// Since this is template-heavy code, we prefer to disable these warnings
|
|
527
|
-
// locally instead of adding yet another overload of this function.
|
|
528
|
-
#if !defined(__clang__) && defined(__GNUC__)
|
|
529
|
-
#pragma GCC diagnostic push
|
|
530
|
-
#pragma GCC diagnostic ignored "-Wpragmas"
|
|
531
|
-
#pragma GCC diagnostic ignored "-Waddress"
|
|
532
|
-
#pragma GCC diagnostic ignored "-Wnonnull-compare"
|
|
533
|
-
#endif
|
|
534
|
-
if (static_cast<RemoveCVRef<QualDecayedTRef>>(f) == nullptr) {
|
|
535
|
-
#if !defined(__clang__) && defined(__GNUC__)
|
|
536
|
-
#pragma GCC diagnostic pop
|
|
537
|
-
#endif
|
|
538
|
-
manager_ = EmptyManager;
|
|
539
|
-
invoker_ = nullptr;
|
|
540
|
-
return;
|
|
541
|
-
}
|
|
542
|
-
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
template <TargetType target_type, class QualDecayedTRef, class F,
|
|
546
|
-
absl::enable_if_t<
|
|
547
|
-
target_type == TargetType::kCompatibleAnyInvocable, int> = 0>
|
|
548
|
-
void Initialize(F&& f) {
|
|
549
|
-
// In this case we can "steal the guts" of the other AnyInvocable.
|
|
550
|
-
f.manager_(FunctionToCall::relocate_from_to, &f.state_, &state_);
|
|
551
|
-
manager_ = f.manager_;
|
|
552
|
-
invoker_ = f.invoker_;
|
|
553
|
-
|
|
554
|
-
f.manager_ = EmptyManager;
|
|
555
|
-
f.invoker_ = nullptr;
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
template <TargetType target_type, class QualDecayedTRef, class F,
|
|
559
|
-
absl::enable_if_t<
|
|
560
|
-
target_type == TargetType::kIncompatibleAnyInvocable, int> = 0>
|
|
561
|
-
void Initialize(F&& f) {
|
|
562
|
-
if (f.HasValue()) {
|
|
563
|
-
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
564
|
-
} else {
|
|
565
|
-
manager_ = EmptyManager;
|
|
566
|
-
invoker_ = nullptr;
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
template <TargetType target_type, class QualDecayedTRef, class F,
|
|
571
|
-
typename = absl::enable_if_t<target_type == TargetType::kOther>>
|
|
572
|
-
void Initialize(F&& f) {
|
|
573
|
-
InitializeStorage<QualDecayedTRef>(std::forward<F>(f));
|
|
574
|
-
}
|
|
575
|
-
|
|
576
500
|
// Use local (inline) storage for applicable target object types.
|
|
577
|
-
template <class QualTRef, class... Args
|
|
578
|
-
typename = absl::enable_if_t<
|
|
579
|
-
IsStoredLocally<RemoveCVRef<QualTRef>>::value>>
|
|
501
|
+
template <class QualTRef, class... Args>
|
|
580
502
|
void InitializeStorage(Args&&... args) {
|
|
581
503
|
using RawT = RemoveCVRef<QualTRef>;
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
invoker_ = RemoteInvoker<SigIsNoexcept, ReturnType, QualTRef, P...>;
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
template <class T,
|
|
602
|
-
typename = absl::enable_if_t<std::is_trivially_copyable<T>::value>>
|
|
603
|
-
void InitializeLocalManager() {
|
|
604
|
-
manager_ = LocalManagerTrivial;
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
template <class T,
|
|
608
|
-
absl::enable_if_t<!std::is_trivially_copyable<T>::value, int> = 0>
|
|
609
|
-
void InitializeLocalManager() {
|
|
610
|
-
manager_ = LocalManagerNontrivial<T>;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
template <class T>
|
|
614
|
-
using HasTrivialRemoteStorage =
|
|
615
|
-
std::integral_constant<bool, std::is_trivially_destructible<T>::value &&
|
|
616
|
-
alignof(T) <=
|
|
617
|
-
ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT>;
|
|
618
|
-
|
|
619
|
-
template <class T, class... Args,
|
|
620
|
-
typename = absl::enable_if_t<HasTrivialRemoteStorage<T>::value>>
|
|
621
|
-
void InitializeRemoteManager(Args&&... args) {
|
|
622
|
-
// unique_ptr is used for exception-safety in case construction throws.
|
|
623
|
-
std::unique_ptr<void, TrivialDeleter> uninitialized_target(
|
|
624
|
-
::operator new(sizeof(T)), TrivialDeleter(sizeof(T)));
|
|
625
|
-
::new (uninitialized_target.get()) T(std::forward<Args>(args)...);
|
|
626
|
-
state_.remote.target = uninitialized_target.release();
|
|
627
|
-
state_.remote.size = sizeof(T);
|
|
628
|
-
manager_ = RemoteManagerTrivial;
|
|
504
|
+
if constexpr (IsStoredLocally<RawT>()) {
|
|
505
|
+
::new (static_cast<void*>(&state_.storage))
|
|
506
|
+
RawT(std::forward<Args>(args)...);
|
|
507
|
+
invoker_ = LocalInvoker<SigIsNoexcept, ReturnType, QualTRef, P...>;
|
|
508
|
+
// We can simplify our manager if we know the type is trivially copyable.
|
|
509
|
+
if constexpr (std::is_trivially_copyable_v<RawT>) {
|
|
510
|
+
manager_ = LocalManagerTrivial;
|
|
511
|
+
} else {
|
|
512
|
+
manager_ = LocalManagerNontrivial<RawT>;
|
|
513
|
+
}
|
|
514
|
+
} else {
|
|
515
|
+
InitializeRemoteManager<RawT>(std::forward<Args>(args)...);
|
|
516
|
+
// This is set after everything else in case an exception is thrown in an
|
|
517
|
+
// earlier step of the initialization.
|
|
518
|
+
invoker_ = RemoteInvoker<SigIsNoexcept, ReturnType, QualTRef, P...>;
|
|
519
|
+
}
|
|
629
520
|
}
|
|
630
521
|
|
|
631
|
-
template <class T, class... Args
|
|
632
|
-
absl::enable_if_t<!HasTrivialRemoteStorage<T>::value, int> = 0>
|
|
522
|
+
template <class T, class... Args>
|
|
633
523
|
void InitializeRemoteManager(Args&&... args) {
|
|
634
|
-
|
|
635
|
-
|
|
524
|
+
if constexpr (std::is_trivially_destructible_v<T> &&
|
|
525
|
+
alignof(T) <= ABSL_INTERNAL_DEFAULT_NEW_ALIGNMENT) {
|
|
526
|
+
// unique_ptr is used for exception-safety in case construction throws.
|
|
527
|
+
std::unique_ptr<void, TrivialDeleter> uninitialized_target(
|
|
528
|
+
::operator new(sizeof(T)), TrivialDeleter(sizeof(T)));
|
|
529
|
+
::new (uninitialized_target.get()) T(std::forward<Args>(args)...);
|
|
530
|
+
state_.remote.target = uninitialized_target.release();
|
|
531
|
+
state_.remote.size = sizeof(T);
|
|
532
|
+
manager_ = RemoteManagerTrivial;
|
|
533
|
+
} else {
|
|
534
|
+
state_.remote.target = ::new T(std::forward<Args>(args)...);
|
|
535
|
+
manager_ = RemoteManagerNontrivial<T>;
|
|
536
|
+
}
|
|
636
537
|
}
|
|
637
538
|
|
|
638
539
|
//////////////////////////////////////////////////////////////////////////////
|
|
@@ -734,17 +635,12 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
734
635
|
absl::enable_if_t<Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<
|
|
735
636
|
std::reference_wrapper<F>>::value>>;
|
|
736
637
|
|
|
737
|
-
////////////////////////////////////////////////////////////////////////////////
|
|
738
|
-
//
|
|
739
638
|
// The constraint for checking whether or not a call meets the noexcept
|
|
740
|
-
// callability requirements.
|
|
639
|
+
// callability requirements. We use a preprocessor macro because specifying it
|
|
741
640
|
// this way as opposed to a disjunction/branch can improve the user-side error
|
|
742
641
|
// messages and avoids an instantiation of std::is_nothrow_invocable_r in the
|
|
743
642
|
// cases where the user did not specify a noexcept function type.
|
|
744
643
|
//
|
|
745
|
-
#define ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT(inv_quals, noex) \
|
|
746
|
-
ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_##noex(inv_quals)
|
|
747
|
-
|
|
748
644
|
// The disjunction below is because we can't rely on std::is_nothrow_invocable_r
|
|
749
645
|
// to give the right result when ReturnType is non-moveable in toolchains that
|
|
750
646
|
// don't treat non-moveable result types correctly. For example this was the
|
|
@@ -759,7 +655,7 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
759
655
|
UnwrapStdReferenceWrapper<absl::decay_t<F>> inv_quals, P...>, \
|
|
760
656
|
std::is_same< \
|
|
761
657
|
ReturnType, \
|
|
762
|
-
|
|
658
|
+
std::invoke_result_t< \
|
|
763
659
|
UnwrapStdReferenceWrapper<absl::decay_t<F>> inv_quals, \
|
|
764
660
|
P...>>>>::value>
|
|
765
661
|
|
|
@@ -775,13 +671,13 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
775
671
|
// noex is "true" if the function type is noexcept, or false if it is not.
|
|
776
672
|
//
|
|
777
673
|
// The CallIsValid condition is more complicated than simply using
|
|
778
|
-
//
|
|
779
|
-
//
|
|
780
|
-
//
|
|
781
|
-
//
|
|
674
|
+
// std::is_invocable_r because we can't rely on it to give the right result
|
|
675
|
+
// when ReturnType is non-moveable in toolchains that don't treat non-moveable
|
|
676
|
+
// result types correctly. For example this was the case in libc++ before commit
|
|
677
|
+
// c3a24882 (2022-05).
|
|
782
678
|
#define ABSL_INTERNAL_ANY_INVOCABLE_IMPL_(cv, ref, inv_quals, noex) \
|
|
783
679
|
template <class ReturnType, class... P> \
|
|
784
|
-
class Impl<ReturnType(P...) cv ref
|
|
680
|
+
class Impl<ReturnType(P...) cv ref noexcept(noex)> \
|
|
785
681
|
: public CoreImpl<noex, ReturnType, P...> { \
|
|
786
682
|
public: \
|
|
787
683
|
/*The base class, which contains the datamembers and core operations*/ \
|
|
@@ -790,17 +686,16 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
790
686
|
/*SFINAE constraint to check if F is invocable with the proper signature*/ \
|
|
791
687
|
template <class F> \
|
|
792
688
|
using CallIsValid = TrueAlias<absl::enable_if_t<absl::disjunction< \
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
absl::decay_t<F> inv_quals, P...>>>::value>>; \
|
|
689
|
+
std::is_invocable_r<ReturnType, absl::decay_t<F> inv_quals, P...>, \
|
|
690
|
+
std::is_same< \
|
|
691
|
+
ReturnType, \
|
|
692
|
+
std::invoke_result_t<absl::decay_t<F> inv_quals, P...>>>::value>>; \
|
|
798
693
|
\
|
|
799
694
|
/*SFINAE constraint to check if F is nothrow-invocable when necessary*/ \
|
|
800
695
|
template <class F> \
|
|
801
696
|
using CallIsNoexceptIfSigIsNoexcept = \
|
|
802
|
-
TrueAlias<
|
|
803
|
-
|
|
697
|
+
TrueAlias<ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_##noex( \
|
|
698
|
+
inv_quals)>; \
|
|
804
699
|
\
|
|
805
700
|
/*Put the AnyInvocable into an empty state.*/ \
|
|
806
701
|
Impl() = default; \
|
|
@@ -822,8 +717,7 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
822
717
|
\
|
|
823
718
|
/*Raises a fatal error when the AnyInvocable is invoked after a move*/ \
|
|
824
719
|
static ReturnType InvokedAfterMove( \
|
|
825
|
-
|
|
826
|
-
ForwardedParameterType<P>...) noexcept(noex) { \
|
|
720
|
+
TypeErasedState*, ForwardedParameterType<P>...) noexcept(noex) { \
|
|
827
721
|
ABSL_HARDENING_ASSERT(false && "AnyInvocable use-after-move"); \
|
|
828
722
|
std::terminate(); \
|
|
829
723
|
} \
|
|
@@ -851,18 +745,11 @@ using CanAssignReferenceWrapper = TrueAlias<
|
|
|
851
745
|
} \
|
|
852
746
|
}
|
|
853
747
|
|
|
854
|
-
// Define the `noexcept(true)` specialization only for C++17 and beyond, when
|
|
855
|
-
// `noexcept` is part of the type system.
|
|
856
|
-
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
|
857
748
|
// A convenience macro that defines specializations for the noexcept(true) and
|
|
858
749
|
// noexcept(false) forms, given the other properties.
|
|
859
750
|
#define ABSL_INTERNAL_ANY_INVOCABLE_IMPL(cv, ref, inv_quals) \
|
|
860
751
|
ABSL_INTERNAL_ANY_INVOCABLE_IMPL_(cv, ref, inv_quals, false); \
|
|
861
752
|
ABSL_INTERNAL_ANY_INVOCABLE_IMPL_(cv, ref, inv_quals, true)
|
|
862
|
-
#else
|
|
863
|
-
#define ABSL_INTERNAL_ANY_INVOCABLE_IMPL(cv, ref, inv_quals) \
|
|
864
|
-
ABSL_INTERNAL_ANY_INVOCABLE_IMPL_(cv, ref, inv_quals, false)
|
|
865
|
-
#endif
|
|
866
753
|
|
|
867
754
|
// Non-ref-qualified partial specializations
|
|
868
755
|
ABSL_INTERNAL_ANY_INVOCABLE_IMPL(, , &);
|
|
@@ -881,8 +768,6 @@ ABSL_INTERNAL_ANY_INVOCABLE_IMPL(const, &&, const&&);
|
|
|
881
768
|
#undef ABSL_INTERNAL_ANY_INVOCABLE_IMPL_
|
|
882
769
|
#undef ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_false
|
|
883
770
|
#undef ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_true
|
|
884
|
-
#undef ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT
|
|
885
|
-
#undef ABSL_INTERNAL_NOEXCEPT_SPEC
|
|
886
771
|
|
|
887
772
|
} // namespace internal_any_invocable
|
|
888
773
|
ABSL_NAMESPACE_END
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
#include <type_traits>
|
|
22
22
|
#include <utility>
|
|
23
23
|
|
|
24
|
-
#include "absl/base/internal/invoke.h"
|
|
25
24
|
#include "absl/container/internal/compressed_tuple.h"
|
|
26
25
|
#include "absl/meta/type_traits.h"
|
|
27
26
|
#include "absl/utility/utility.h"
|
|
@@ -33,9 +32,8 @@ namespace functional_internal {
|
|
|
33
32
|
// Invoke the method, expanding the tuple of bound arguments.
|
|
34
33
|
template <class R, class Tuple, size_t... Idx, class... Args>
|
|
35
34
|
R Apply(Tuple&& bound, absl::index_sequence<Idx...>, Args&&... free) {
|
|
36
|
-
return
|
|
37
|
-
|
|
38
|
-
std::forward<Args>(free)...);
|
|
35
|
+
return std::invoke(std::forward<Tuple>(bound).template get<Idx>()...,
|
|
36
|
+
std::forward<Args>(free)...);
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
template <class F, class... BoundArgs>
|
|
@@ -50,23 +48,23 @@ class FrontBinder {
|
|
|
50
48
|
constexpr explicit FrontBinder(absl::in_place_t, Ts&&... ts)
|
|
51
49
|
: bound_args_(std::forward<Ts>(ts)...) {}
|
|
52
50
|
|
|
53
|
-
template <class... FreeArgs,
|
|
54
|
-
|
|
51
|
+
template <class... FreeArgs,
|
|
52
|
+
class R = std::invoke_result_t<F&, BoundArgs&..., FreeArgs&&...>>
|
|
55
53
|
R operator()(FreeArgs&&... free_args) & {
|
|
56
54
|
return functional_internal::Apply<R>(bound_args_, Idx(),
|
|
57
55
|
std::forward<FreeArgs>(free_args)...);
|
|
58
56
|
}
|
|
59
57
|
|
|
60
58
|
template <class... FreeArgs,
|
|
61
|
-
class R =
|
|
62
|
-
|
|
59
|
+
class R = std::invoke_result_t<const F&, const BoundArgs&...,
|
|
60
|
+
FreeArgs&&...>>
|
|
63
61
|
R operator()(FreeArgs&&... free_args) const& {
|
|
64
62
|
return functional_internal::Apply<R>(bound_args_, Idx(),
|
|
65
63
|
std::forward<FreeArgs>(free_args)...);
|
|
66
64
|
}
|
|
67
65
|
|
|
68
|
-
template <class... FreeArgs,
|
|
69
|
-
|
|
66
|
+
template <class... FreeArgs,
|
|
67
|
+
class R = std::invoke_result_t<F&&, BoundArgs&&..., FreeArgs&&...>>
|
|
70
68
|
R operator()(FreeArgs&&... free_args) && {
|
|
71
69
|
// This overload is called when *this is an rvalue. If some of the bound
|
|
72
70
|
// arguments are stored by value or rvalue reference, we move them.
|
|
@@ -75,8 +73,8 @@ class FrontBinder {
|
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
template <class... FreeArgs,
|
|
78
|
-
class R =
|
|
79
|
-
|
|
76
|
+
class R = std::invoke_result_t<const F&&, const BoundArgs&&...,
|
|
77
|
+
FreeArgs&&...>>
|
|
80
78
|
R operator()(FreeArgs&&... free_args) const&& {
|
|
81
79
|
// This overload is called when *this is an rvalue. If some of the bound
|
|
82
80
|
// arguments are stored by value or rvalue reference, we move them.
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
#include <functional>
|
|
20
20
|
#include <type_traits>
|
|
21
21
|
|
|
22
|
-
#include "absl/base/internal/invoke.h"
|
|
23
22
|
#include "absl/functional/any_invocable.h"
|
|
24
23
|
#include "absl/meta/type_traits.h"
|
|
25
24
|
|
|
@@ -74,15 +73,13 @@ using Invoker = R (*)(VoidPtr, typename ForwardT<Args>::type...);
|
|
|
74
73
|
template <typename Obj, typename R, typename... Args>
|
|
75
74
|
R InvokeObject(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
|
76
75
|
auto o = static_cast<const Obj*>(ptr.obj);
|
|
77
|
-
return static_cast<R>(
|
|
78
|
-
absl::base_internal::invoke(*o, std::forward<Args>(args)...));
|
|
76
|
+
return static_cast<R>(std::invoke(*o, std::forward<Args>(args)...));
|
|
79
77
|
}
|
|
80
78
|
|
|
81
79
|
template <typename Fun, typename R, typename... Args>
|
|
82
80
|
R InvokeFunction(VoidPtr ptr, typename ForwardT<Args>::type... args) {
|
|
83
81
|
auto f = reinterpret_cast<Fun>(ptr.fun);
|
|
84
|
-
return static_cast<R>(
|
|
85
|
-
absl::base_internal::invoke(f, std::forward<Args>(args)...));
|
|
82
|
+
return static_cast<R>(std::invoke(f, std::forward<Args>(args)...));
|
|
86
83
|
}
|
|
87
84
|
|
|
88
85
|
template <typename Sig>
|
|
@@ -23,8 +23,6 @@
|
|
|
23
23
|
// Before using this function, consider whether named function overloads would
|
|
24
24
|
// be a better design.
|
|
25
25
|
//
|
|
26
|
-
// Note: absl::Overload requires C++17.
|
|
27
|
-
//
|
|
28
26
|
// Example:
|
|
29
27
|
//
|
|
30
28
|
// std::variant<std::string, int32_t, int64_t> v(int32_t{1});
|
|
@@ -46,9 +44,6 @@
|
|
|
46
44
|
namespace absl {
|
|
47
45
|
ABSL_NAMESPACE_BEGIN
|
|
48
46
|
|
|
49
|
-
#if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \
|
|
50
|
-
ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
|
51
|
-
|
|
52
47
|
template <typename... T>
|
|
53
48
|
struct Overload final : T... {
|
|
54
49
|
using T::operator()...;
|
|
@@ -71,21 +66,6 @@ struct Overload final : T... {
|
|
|
71
66
|
template <typename... T>
|
|
72
67
|
Overload(T...) -> Overload<T...>;
|
|
73
68
|
|
|
74
|
-
#else
|
|
75
|
-
|
|
76
|
-
namespace functional_internal {
|
|
77
|
-
template <typename T>
|
|
78
|
-
constexpr bool kDependentFalse = false;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
template <typename Dependent = int, typename... T>
|
|
82
|
-
auto Overload(T&&...) {
|
|
83
|
-
static_assert(functional_internal::kDependentFalse<Dependent>,
|
|
84
|
-
"Overload is only usable with C++17 or above.");
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
#endif
|
|
88
|
-
|
|
89
69
|
ABSL_NAMESPACE_END
|
|
90
70
|
} // namespace absl
|
|
91
71
|
|
|
@@ -18,16 +18,12 @@
|
|
|
18
18
|
#include <string>
|
|
19
19
|
#include <type_traits>
|
|
20
20
|
|
|
21
|
+
#include "gtest/gtest.h"
|
|
21
22
|
#include "absl/base/config.h"
|
|
22
23
|
#include "absl/strings/str_cat.h"
|
|
23
24
|
#include "absl/strings/string_view.h"
|
|
24
25
|
#include "absl/types/variant.h"
|
|
25
26
|
|
|
26
|
-
#if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \
|
|
27
|
-
ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
|
28
|
-
|
|
29
|
-
#include "gtest/gtest.h"
|
|
30
|
-
|
|
31
27
|
namespace {
|
|
32
28
|
|
|
33
29
|
TEST(OverloadTest, DispatchConsidersTypeWithAutoFallback) {
|
|
@@ -209,5 +205,3 @@ TEST(OverloadTest, HasConstexprConstructor) {
|
|
|
209
205
|
}
|
|
210
206
|
|
|
211
207
|
} // namespace
|
|
212
|
-
|
|
213
|
-
#endif
|