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
|
@@ -93,7 +93,7 @@ class BadStatusOrAccess : public std::exception {
|
|
|
93
93
|
//
|
|
94
94
|
// The pointer of this string is guaranteed to be valid until any non-const
|
|
95
95
|
// function is invoked on the exception object.
|
|
96
|
-
|
|
96
|
+
const char* absl_nonnull what() const noexcept override;
|
|
97
97
|
|
|
98
98
|
// BadStatusOrAccess::status()
|
|
99
99
|
//
|
|
@@ -189,14 +189,22 @@ class ABSL_MUST_USE_RESULT StatusOr;
|
|
|
189
189
|
// return Foo(arg);
|
|
190
190
|
// }
|
|
191
191
|
template <typename T>
|
|
192
|
-
class StatusOr : private internal_statusor::
|
|
192
|
+
class StatusOr : private internal_statusor::OperatorBase<T>,
|
|
193
|
+
private internal_statusor::StatusOrData<T>,
|
|
193
194
|
private internal_statusor::CopyCtorBase<T>,
|
|
194
195
|
private internal_statusor::MoveCtorBase<T>,
|
|
195
196
|
private internal_statusor::CopyAssignBase<T>,
|
|
196
197
|
private internal_statusor::MoveAssignBase<T> {
|
|
198
|
+
#ifndef SWIG
|
|
199
|
+
static_assert(!std::is_rvalue_reference_v<T>,
|
|
200
|
+
"rvalue references are not yet supported.");
|
|
201
|
+
#endif // SWIG
|
|
202
|
+
|
|
197
203
|
template <typename U>
|
|
198
204
|
friend class StatusOr;
|
|
199
205
|
|
|
206
|
+
friend internal_statusor::OperatorBase<T>;
|
|
207
|
+
|
|
200
208
|
typedef internal_statusor::StatusOrData<T> Base;
|
|
201
209
|
|
|
202
210
|
public:
|
|
@@ -397,7 +405,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
397
405
|
typename std::enable_if<
|
|
398
406
|
internal_statusor::IsAssignmentValid<T, U, true>::value,
|
|
399
407
|
int>::type = 0>
|
|
400
|
-
StatusOr& operator=(U&& v
|
|
408
|
+
StatusOr& operator=(U&& v ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)) {
|
|
401
409
|
this->Assign(std::forward<U>(v));
|
|
402
410
|
return *this;
|
|
403
411
|
}
|
|
@@ -464,7 +472,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
464
472
|
// Returns a reference to the current `absl::Status` contained within the
|
|
465
473
|
// `absl::StatusOr<T>`. If `absl::StatusOr<T>` contains a `T`, then this
|
|
466
474
|
// function returns `absl::OkStatus()`.
|
|
467
|
-
const Status& status() const&;
|
|
475
|
+
ABSL_MUST_USE_RESULT const Status& status() const&;
|
|
468
476
|
Status status() &&;
|
|
469
477
|
|
|
470
478
|
// StatusOr<T>::value()
|
|
@@ -493,10 +501,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
493
501
|
//
|
|
494
502
|
// The `std::move` on statusor instead of on the whole expression enables
|
|
495
503
|
// warnings about possible uses of the statusor object after the move.
|
|
496
|
-
|
|
497
|
-
T& value() & ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
498
|
-
const T&& value() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
499
|
-
T&& value() && ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
504
|
+
using StatusOr::OperatorBase::value;
|
|
500
505
|
|
|
501
506
|
// StatusOr<T>:: operator*()
|
|
502
507
|
//
|
|
@@ -508,10 +513,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
508
513
|
// `absl::StatusOr<T>`. Alternatively, see the `value()` member function for a
|
|
509
514
|
// similar API that guarantees crashing or throwing an exception if there is
|
|
510
515
|
// no current value.
|
|
511
|
-
|
|
512
|
-
T& operator*() & ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
513
|
-
const T&& operator*() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
514
|
-
T&& operator*() && ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
516
|
+
using StatusOr::OperatorBase::operator*;
|
|
515
517
|
|
|
516
518
|
// StatusOr<T>::operator->()
|
|
517
519
|
//
|
|
@@ -520,8 +522,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
520
522
|
// REQUIRES: `this->ok() == true`, otherwise the behavior is undefined.
|
|
521
523
|
//
|
|
522
524
|
// Use `this->ok()` to verify that there is a current value.
|
|
523
|
-
|
|
524
|
-
T* operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND;
|
|
525
|
+
using StatusOr::OperatorBase::operator->;
|
|
525
526
|
|
|
526
527
|
// StatusOr<T>::value_or()
|
|
527
528
|
//
|
|
@@ -536,10 +537,34 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
536
537
|
//
|
|
537
538
|
// Unlike with `value`, calling `std::move()` on the result of `value_or` will
|
|
538
539
|
// still trigger a copy.
|
|
539
|
-
template <
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
540
|
+
template <
|
|
541
|
+
typename U,
|
|
542
|
+
std::enable_if_t<internal_statusor::IsValueOrValid<T, U&&, false>::value,
|
|
543
|
+
int> = 0>
|
|
544
|
+
T value_or(U&& default_value) const& {
|
|
545
|
+
return this->ValueOrImpl(std::forward<U>(default_value));
|
|
546
|
+
}
|
|
547
|
+
template <
|
|
548
|
+
typename U,
|
|
549
|
+
std::enable_if_t<internal_statusor::IsValueOrValid<T, U&&, false>::value,
|
|
550
|
+
int> = 0>
|
|
551
|
+
T value_or(U&& default_value) && {
|
|
552
|
+
return std::move(*this).ValueOrImpl(std::forward<U>(default_value));
|
|
553
|
+
}
|
|
554
|
+
template <
|
|
555
|
+
typename U,
|
|
556
|
+
std::enable_if_t<internal_statusor::IsValueOrValid<T, U&&, true>::value,
|
|
557
|
+
int> = 0>
|
|
558
|
+
T value_or(U&& default_value ABSL_ATTRIBUTE_LIFETIME_BOUND) const& {
|
|
559
|
+
return this->ValueOrImpl(std::forward<U>(default_value));
|
|
560
|
+
}
|
|
561
|
+
template <
|
|
562
|
+
typename U,
|
|
563
|
+
std::enable_if_t<internal_statusor::IsValueOrValid<T, U&&, true>::value,
|
|
564
|
+
int> = 0>
|
|
565
|
+
T value_or(U&& default_value ABSL_ATTRIBUTE_LIFETIME_BOUND) && {
|
|
566
|
+
return std::move(*this).ValueOrImpl(std::forward<U>(default_value));
|
|
567
|
+
}
|
|
543
568
|
|
|
544
569
|
// StatusOr<T>::IgnoreError()
|
|
545
570
|
//
|
|
@@ -607,7 +632,9 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
|
|
|
607
632
|
// operator==()
|
|
608
633
|
//
|
|
609
634
|
// This operator checks the equality of two `absl::StatusOr<T>` objects.
|
|
610
|
-
template <typename T
|
|
635
|
+
template <typename T,
|
|
636
|
+
std::enable_if_t<internal_statusor::IsEqualityComparable<T>::value,
|
|
637
|
+
int> = 0>
|
|
611
638
|
bool operator==(const StatusOr<T>& lhs, const StatusOr<T>& rhs) {
|
|
612
639
|
if (lhs.ok() && rhs.ok()) return *lhs == *rhs;
|
|
613
640
|
return lhs.status() == rhs.status();
|
|
@@ -616,7 +643,9 @@ bool operator==(const StatusOr<T>& lhs, const StatusOr<T>& rhs) {
|
|
|
616
643
|
// operator!=()
|
|
617
644
|
//
|
|
618
645
|
// This operator checks the inequality of two `absl::StatusOr<T>` objects.
|
|
619
|
-
template <typename T
|
|
646
|
+
template <typename T,
|
|
647
|
+
std::enable_if_t<internal_statusor::IsEqualityComparable<T>::value,
|
|
648
|
+
int> = 0>
|
|
620
649
|
bool operator!=(const StatusOr<T>& lhs, const StatusOr<T>& rhs) {
|
|
621
650
|
return !(lhs == rhs);
|
|
622
651
|
}
|
|
@@ -703,88 +732,6 @@ Status StatusOr<T>::status() && {
|
|
|
703
732
|
return ok() ? OkStatus() : std::move(this->status_);
|
|
704
733
|
}
|
|
705
734
|
|
|
706
|
-
template <typename T>
|
|
707
|
-
const T& StatusOr<T>::value() const& {
|
|
708
|
-
if (!this->ok()) internal_statusor::ThrowBadStatusOrAccess(this->status_);
|
|
709
|
-
return this->data_;
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
template <typename T>
|
|
713
|
-
T& StatusOr<T>::value() & {
|
|
714
|
-
if (!this->ok()) internal_statusor::ThrowBadStatusOrAccess(this->status_);
|
|
715
|
-
return this->data_;
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
template <typename T>
|
|
719
|
-
const T&& StatusOr<T>::value() const&& {
|
|
720
|
-
if (!this->ok()) {
|
|
721
|
-
internal_statusor::ThrowBadStatusOrAccess(std::move(this->status_));
|
|
722
|
-
}
|
|
723
|
-
return std::move(this->data_);
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
template <typename T>
|
|
727
|
-
T&& StatusOr<T>::value() && {
|
|
728
|
-
if (!this->ok()) {
|
|
729
|
-
internal_statusor::ThrowBadStatusOrAccess(std::move(this->status_));
|
|
730
|
-
}
|
|
731
|
-
return std::move(this->data_);
|
|
732
|
-
}
|
|
733
|
-
|
|
734
|
-
template <typename T>
|
|
735
|
-
const T& StatusOr<T>::operator*() const& {
|
|
736
|
-
this->EnsureOk();
|
|
737
|
-
return this->data_;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
template <typename T>
|
|
741
|
-
T& StatusOr<T>::operator*() & {
|
|
742
|
-
this->EnsureOk();
|
|
743
|
-
return this->data_;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
template <typename T>
|
|
747
|
-
const T&& StatusOr<T>::operator*() const&& {
|
|
748
|
-
this->EnsureOk();
|
|
749
|
-
return std::move(this->data_);
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
template <typename T>
|
|
753
|
-
T&& StatusOr<T>::operator*() && {
|
|
754
|
-
this->EnsureOk();
|
|
755
|
-
return std::move(this->data_);
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
template <typename T>
|
|
759
|
-
absl::Nonnull<const T*> StatusOr<T>::operator->() const {
|
|
760
|
-
this->EnsureOk();
|
|
761
|
-
return &this->data_;
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
template <typename T>
|
|
765
|
-
absl::Nonnull<T*> StatusOr<T>::operator->() {
|
|
766
|
-
this->EnsureOk();
|
|
767
|
-
return &this->data_;
|
|
768
|
-
}
|
|
769
|
-
|
|
770
|
-
template <typename T>
|
|
771
|
-
template <typename U>
|
|
772
|
-
T StatusOr<T>::value_or(U&& default_value) const& {
|
|
773
|
-
if (ok()) {
|
|
774
|
-
return this->data_;
|
|
775
|
-
}
|
|
776
|
-
return std::forward<U>(default_value);
|
|
777
|
-
}
|
|
778
|
-
|
|
779
|
-
template <typename T>
|
|
780
|
-
template <typename U>
|
|
781
|
-
T StatusOr<T>::value_or(U&& default_value) && {
|
|
782
|
-
if (ok()) {
|
|
783
|
-
return std::move(this->data_);
|
|
784
|
-
}
|
|
785
|
-
return std::forward<U>(default_value);
|
|
786
|
-
}
|
|
787
|
-
|
|
788
735
|
template <typename T>
|
|
789
736
|
void StatusOr<T>::IgnoreError() const {
|
|
790
737
|
// no-op
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
// Copyright 2025 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 <string>
|
|
16
|
+
|
|
17
|
+
#include "absl/status/status.h"
|
|
18
|
+
#include "absl/status/statusor.h"
|
|
19
|
+
#include "benchmark/benchmark.h"
|
|
20
|
+
|
|
21
|
+
namespace {
|
|
22
|
+
|
|
23
|
+
void BM_StatusOrInt_CtorStatus(benchmark::State& state) {
|
|
24
|
+
for (auto _ : state) {
|
|
25
|
+
absl::StatusOr<int> status(absl::CancelledError());
|
|
26
|
+
benchmark::DoNotOptimize(status);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
BENCHMARK(BM_StatusOrInt_CtorStatus);
|
|
30
|
+
|
|
31
|
+
void BM_StatusOrInt_CtorStatusWithMessage(benchmark::State& state) {
|
|
32
|
+
for (auto _ : state) {
|
|
33
|
+
absl::StatusOr<int> status(
|
|
34
|
+
absl::UnknownError("This string is 28 characters"));
|
|
35
|
+
benchmark::DoNotOptimize(status);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
BENCHMARK(BM_StatusOrInt_CtorStatusWithMessage);
|
|
39
|
+
|
|
40
|
+
void BM_StatusOrInt_CopyCtor_Error(benchmark::State& state) {
|
|
41
|
+
for (auto _ : state) {
|
|
42
|
+
absl::StatusOr<int> original(
|
|
43
|
+
absl::UnknownError("This string is 28 characters"));
|
|
44
|
+
benchmark::DoNotOptimize(original);
|
|
45
|
+
absl::StatusOr<int> status(original);
|
|
46
|
+
benchmark::DoNotOptimize(status);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
BENCHMARK(BM_StatusOrInt_CopyCtor_Error);
|
|
50
|
+
|
|
51
|
+
void BM_StatusOrInt_CopyCtor_Ok(benchmark::State& state) {
|
|
52
|
+
for (auto _ : state) {
|
|
53
|
+
absl::StatusOr<int> original(42);
|
|
54
|
+
benchmark::DoNotOptimize(original);
|
|
55
|
+
absl::StatusOr<int> status(original);
|
|
56
|
+
benchmark::DoNotOptimize(status);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
BENCHMARK(BM_StatusOrInt_CopyCtor_Ok);
|
|
60
|
+
|
|
61
|
+
void BM_StatusOrInt_MoveCtor_Error(benchmark::State& state) {
|
|
62
|
+
for (auto _ : state) {
|
|
63
|
+
absl::StatusOr<int> original(
|
|
64
|
+
absl::UnknownError("This string is 28 characters"));
|
|
65
|
+
benchmark::DoNotOptimize(original);
|
|
66
|
+
absl::StatusOr<int> status(std::move(original));
|
|
67
|
+
benchmark::DoNotOptimize(status);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
BENCHMARK(BM_StatusOrInt_MoveCtor_Error);
|
|
71
|
+
|
|
72
|
+
void BM_StatusOrInt_MoveCtor_Ok(benchmark::State& state) {
|
|
73
|
+
for (auto _ : state) {
|
|
74
|
+
absl::StatusOr<int> original(42);
|
|
75
|
+
benchmark::DoNotOptimize(original);
|
|
76
|
+
absl::StatusOr<int> status(std::move(original));
|
|
77
|
+
benchmark::DoNotOptimize(status);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
BENCHMARK(BM_StatusOrInt_MoveCtor_Ok);
|
|
81
|
+
|
|
82
|
+
void BM_StatusOrInt_CopyAssign_Error(benchmark::State& state) {
|
|
83
|
+
for (auto _ : state) {
|
|
84
|
+
absl::StatusOr<int> original(
|
|
85
|
+
absl::UnknownError("This string is 28 characters"));
|
|
86
|
+
benchmark::DoNotOptimize(original);
|
|
87
|
+
absl::StatusOr<int> status(42);
|
|
88
|
+
benchmark::DoNotOptimize(status);
|
|
89
|
+
benchmark::DoNotOptimize(status = original);
|
|
90
|
+
benchmark::DoNotOptimize(status);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
BENCHMARK(BM_StatusOrInt_CopyAssign_Error);
|
|
94
|
+
|
|
95
|
+
void BM_StatusOrInt_CopyAssign_Ok(benchmark::State& state) {
|
|
96
|
+
for (auto _ : state) {
|
|
97
|
+
absl::StatusOr<int> original(42);
|
|
98
|
+
benchmark::DoNotOptimize(original);
|
|
99
|
+
absl::StatusOr<int> status(42);
|
|
100
|
+
benchmark::DoNotOptimize(status);
|
|
101
|
+
benchmark::DoNotOptimize(status = original);
|
|
102
|
+
benchmark::DoNotOptimize(status);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
BENCHMARK(BM_StatusOrInt_CopyAssign_Ok);
|
|
106
|
+
|
|
107
|
+
void BM_StatusOrInt_MoveAssign_Error(benchmark::State& state) {
|
|
108
|
+
for (auto _ : state) {
|
|
109
|
+
absl::StatusOr<int> original(
|
|
110
|
+
absl::UnknownError("This string is 28 characters"));
|
|
111
|
+
benchmark::DoNotOptimize(original);
|
|
112
|
+
absl::StatusOr<int> status(42);
|
|
113
|
+
benchmark::DoNotOptimize(status);
|
|
114
|
+
benchmark::DoNotOptimize(status = std::move(original));
|
|
115
|
+
benchmark::DoNotOptimize(status);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
BENCHMARK(BM_StatusOrInt_MoveAssign_Error);
|
|
119
|
+
|
|
120
|
+
void BM_StatusOrInt_MoveAssign_Ok(benchmark::State& state) {
|
|
121
|
+
for (auto _ : state) {
|
|
122
|
+
absl::StatusOr<int> original(42);
|
|
123
|
+
benchmark::DoNotOptimize(original);
|
|
124
|
+
absl::StatusOr<int> status(42);
|
|
125
|
+
benchmark::DoNotOptimize(status);
|
|
126
|
+
benchmark::DoNotOptimize(status = std::move(original));
|
|
127
|
+
benchmark::DoNotOptimize(status);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
BENCHMARK(BM_StatusOrInt_MoveAssign_Ok);
|
|
131
|
+
|
|
132
|
+
void BM_StatusOrInt_OkMethod_Error(benchmark::State& state) {
|
|
133
|
+
absl::StatusOr<int> status(
|
|
134
|
+
absl::UnknownError("This string is 28 characters"));
|
|
135
|
+
for (auto _ : state) {
|
|
136
|
+
benchmark::DoNotOptimize(status);
|
|
137
|
+
benchmark::DoNotOptimize(status.ok());
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
BENCHMARK(BM_StatusOrInt_OkMethod_Error);
|
|
141
|
+
|
|
142
|
+
void BM_StatusOrInt_OkMethod_Ok(benchmark::State& state) {
|
|
143
|
+
absl::StatusOr<int> status(42);
|
|
144
|
+
for (auto _ : state) {
|
|
145
|
+
benchmark::DoNotOptimize(status);
|
|
146
|
+
benchmark::DoNotOptimize(status.ok());
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
BENCHMARK(BM_StatusOrInt_OkMethod_Ok);
|
|
150
|
+
|
|
151
|
+
void BM_StatusOrInt_StatusMethod_Error(benchmark::State& state) {
|
|
152
|
+
for (auto _ : state) {
|
|
153
|
+
absl::StatusOr<int> status(
|
|
154
|
+
absl::UnknownError("This string is 28 characters"));
|
|
155
|
+
benchmark::DoNotOptimize(status);
|
|
156
|
+
benchmark::DoNotOptimize(status.status().ok());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
BENCHMARK(BM_StatusOrInt_StatusMethod_Error);
|
|
160
|
+
|
|
161
|
+
void BM_StatusOrInt_StatusMethod_Ok(benchmark::State& state) {
|
|
162
|
+
for (auto _ : state) {
|
|
163
|
+
absl::StatusOr<int> status(42);
|
|
164
|
+
benchmark::DoNotOptimize(status);
|
|
165
|
+
benchmark::DoNotOptimize(std::move(status).status().ok());
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
BENCHMARK(BM_StatusOrInt_StatusMethod_Ok);
|
|
169
|
+
|
|
170
|
+
void BM_StatusOrInt_StatusMethodRvalue_Error(benchmark::State& state) {
|
|
171
|
+
for (auto _ : state) {
|
|
172
|
+
absl::StatusOr<int> status(
|
|
173
|
+
absl::UnknownError("This string is 28 characters"));
|
|
174
|
+
benchmark::DoNotOptimize(status);
|
|
175
|
+
benchmark::DoNotOptimize(std::move(status).status().ok());
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
BENCHMARK(BM_StatusOrInt_StatusMethodRvalue_Error);
|
|
179
|
+
|
|
180
|
+
void BM_StatusOrInt_StatusMethodRvalue_Ok(benchmark::State& state) {
|
|
181
|
+
for (auto _ : state) {
|
|
182
|
+
absl::StatusOr<int> status(42);
|
|
183
|
+
benchmark::DoNotOptimize(status);
|
|
184
|
+
benchmark::DoNotOptimize(std::move(status).status());
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
BENCHMARK(BM_StatusOrInt_StatusMethodRvalue_Ok);
|
|
188
|
+
|
|
189
|
+
void BM_StatusOrString_CtorStatus(benchmark::State& state) {
|
|
190
|
+
for (auto _ : state) {
|
|
191
|
+
absl::StatusOr<std::string> status(absl::CancelledError());
|
|
192
|
+
benchmark::DoNotOptimize(status);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
BENCHMARK(BM_StatusOrString_CtorStatus);
|
|
196
|
+
|
|
197
|
+
void BM_StatusOrString_CtorStatusWithMessage(benchmark::State& state) {
|
|
198
|
+
for (auto _ : state) {
|
|
199
|
+
absl::StatusOr<std::string> status(
|
|
200
|
+
absl::UnknownError("This string is 28 characters"));
|
|
201
|
+
benchmark::DoNotOptimize(status);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
BENCHMARK(BM_StatusOrString_CtorStatusWithMessage);
|
|
205
|
+
|
|
206
|
+
void BM_StatusOrString_CopyCtor_Error(benchmark::State& state) {
|
|
207
|
+
for (auto _ : state) {
|
|
208
|
+
absl::StatusOr<std::string> original(
|
|
209
|
+
absl::UnknownError("This string is 28 characters"));
|
|
210
|
+
benchmark::DoNotOptimize(original);
|
|
211
|
+
absl::StatusOr<std::string> status(original);
|
|
212
|
+
benchmark::DoNotOptimize(status);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
BENCHMARK(BM_StatusOrString_CopyCtor_Error);
|
|
216
|
+
|
|
217
|
+
void BM_StatusOrString_CopyCtor_Ok(benchmark::State& state) {
|
|
218
|
+
for (auto _ : state) {
|
|
219
|
+
absl::StatusOr<std::string> original("This string is 28 characters");
|
|
220
|
+
benchmark::DoNotOptimize(original);
|
|
221
|
+
absl::StatusOr<std::string> status(original);
|
|
222
|
+
benchmark::DoNotOptimize(status);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
BENCHMARK(BM_StatusOrString_CopyCtor_Ok);
|
|
226
|
+
|
|
227
|
+
void BM_StatusOrString_MoveCtor_Error(benchmark::State& state) {
|
|
228
|
+
for (auto _ : state) {
|
|
229
|
+
absl::StatusOr<std::string> original(
|
|
230
|
+
absl::UnknownError("This string is 28 characters"));
|
|
231
|
+
benchmark::DoNotOptimize(original);
|
|
232
|
+
absl::StatusOr<std::string> status(std::move(original));
|
|
233
|
+
benchmark::DoNotOptimize(status);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
BENCHMARK(BM_StatusOrString_MoveCtor_Error);
|
|
237
|
+
|
|
238
|
+
void BM_StatusOrString_MoveCtor_Ok(benchmark::State& state) {
|
|
239
|
+
for (auto _ : state) {
|
|
240
|
+
absl::StatusOr<std::string> original("This string is 28 characters");
|
|
241
|
+
benchmark::DoNotOptimize(original);
|
|
242
|
+
absl::StatusOr<std::string> status(std::move(original));
|
|
243
|
+
benchmark::DoNotOptimize(status);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
BENCHMARK(BM_StatusOrString_MoveCtor_Ok);
|
|
247
|
+
|
|
248
|
+
void BM_StatusOrString_CopyAssign_Error(benchmark::State& state) {
|
|
249
|
+
for (auto _ : state) {
|
|
250
|
+
absl::StatusOr<std::string> original(
|
|
251
|
+
absl::UnknownError("This string is 28 characters"));
|
|
252
|
+
benchmark::DoNotOptimize(original);
|
|
253
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
254
|
+
benchmark::DoNotOptimize(status);
|
|
255
|
+
benchmark::DoNotOptimize(status = original);
|
|
256
|
+
benchmark::DoNotOptimize(status);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
BENCHMARK(BM_StatusOrString_CopyAssign_Error);
|
|
260
|
+
|
|
261
|
+
void BM_StatusOrString_CopyAssign_Ok(benchmark::State& state) {
|
|
262
|
+
for (auto _ : state) {
|
|
263
|
+
absl::StatusOr<std::string> original("This string is 28 characters");
|
|
264
|
+
benchmark::DoNotOptimize(original);
|
|
265
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
266
|
+
benchmark::DoNotOptimize(status);
|
|
267
|
+
benchmark::DoNotOptimize(status = original);
|
|
268
|
+
benchmark::DoNotOptimize(status);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
BENCHMARK(BM_StatusOrString_CopyAssign_Ok);
|
|
272
|
+
|
|
273
|
+
void BM_StatusOrString_MoveAssign_Error(benchmark::State& state) {
|
|
274
|
+
for (auto _ : state) {
|
|
275
|
+
absl::StatusOr<std::string> original(
|
|
276
|
+
absl::UnknownError("This string is 28 characters"));
|
|
277
|
+
benchmark::DoNotOptimize(original);
|
|
278
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
279
|
+
benchmark::DoNotOptimize(status);
|
|
280
|
+
benchmark::DoNotOptimize(status = std::move(original));
|
|
281
|
+
benchmark::DoNotOptimize(status);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
BENCHMARK(BM_StatusOrString_MoveAssign_Error);
|
|
285
|
+
|
|
286
|
+
void BM_StatusOrString_MoveAssign_Ok(benchmark::State& state) {
|
|
287
|
+
for (auto _ : state) {
|
|
288
|
+
absl::StatusOr<std::string> original("This string is 28 characters");
|
|
289
|
+
benchmark::DoNotOptimize(original);
|
|
290
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
291
|
+
benchmark::DoNotOptimize(status);
|
|
292
|
+
benchmark::DoNotOptimize(status = std::move(original));
|
|
293
|
+
benchmark::DoNotOptimize(status);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
BENCHMARK(BM_StatusOrString_MoveAssign_Ok);
|
|
297
|
+
|
|
298
|
+
void BM_StatusOrString_OkMethod_Error(benchmark::State& state) {
|
|
299
|
+
for (auto _ : state) {
|
|
300
|
+
absl::StatusOr<std::string> status(
|
|
301
|
+
absl::UnknownError("This string is 28 characters"));
|
|
302
|
+
benchmark::DoNotOptimize(status);
|
|
303
|
+
benchmark::DoNotOptimize(status.ok());
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
BENCHMARK(BM_StatusOrString_OkMethod_Error);
|
|
307
|
+
|
|
308
|
+
void BM_StatusOrString_OkMethod_Ok(benchmark::State& state) {
|
|
309
|
+
for (auto _ : state) {
|
|
310
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
311
|
+
benchmark::DoNotOptimize(status);
|
|
312
|
+
benchmark::DoNotOptimize(status.ok());
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
BENCHMARK(BM_StatusOrString_OkMethod_Ok);
|
|
316
|
+
|
|
317
|
+
void BM_StatusOrString_StatusMethod_Error(benchmark::State& state) {
|
|
318
|
+
for (auto _ : state) {
|
|
319
|
+
absl::StatusOr<std::string> status(
|
|
320
|
+
absl::UnknownError("This string is 28 characters"));
|
|
321
|
+
benchmark::DoNotOptimize(status);
|
|
322
|
+
benchmark::DoNotOptimize(status.status().ok());
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
BENCHMARK(BM_StatusOrString_StatusMethod_Error);
|
|
326
|
+
|
|
327
|
+
void BM_StatusOrString_StatusMethod_Ok(benchmark::State& state) {
|
|
328
|
+
for (auto _ : state) {
|
|
329
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
330
|
+
benchmark::DoNotOptimize(status);
|
|
331
|
+
benchmark::DoNotOptimize(status.status().ok());
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
BENCHMARK(BM_StatusOrString_StatusMethod_Ok);
|
|
335
|
+
|
|
336
|
+
void BM_StatusOrString_StatusMethodRvalue_Error(benchmark::State& state) {
|
|
337
|
+
for (auto _ : state) {
|
|
338
|
+
absl::StatusOr<std::string> status(
|
|
339
|
+
absl::UnknownError("This string is 28 characters"));
|
|
340
|
+
benchmark::DoNotOptimize(status);
|
|
341
|
+
benchmark::DoNotOptimize(std::move(status).status());
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
BENCHMARK(BM_StatusOrString_StatusMethodRvalue_Error);
|
|
345
|
+
|
|
346
|
+
void BM_StatusOrString_StatusMethodRvalue_Ok(benchmark::State& state) {
|
|
347
|
+
for (auto _ : state) {
|
|
348
|
+
absl::StatusOr<std::string> status("This string is 28 characters");
|
|
349
|
+
benchmark::DoNotOptimize(status);
|
|
350
|
+
benchmark::DoNotOptimize(std::move(status).status());
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
BENCHMARK(BM_StatusOrString_StatusMethodRvalue_Ok);
|
|
354
|
+
|
|
355
|
+
// Benchmarks comparing a few alternative ways of structuring an interface
|
|
356
|
+
// for returning an int64 on success or an error. See (a), (b), (c), (d)
|
|
357
|
+
// below for the variants.
|
|
358
|
+
bool bm_cond = true;
|
|
359
|
+
|
|
360
|
+
bool SimpleIntInterface(int64_t* v) ABSL_ATTRIBUTE_NOINLINE;
|
|
361
|
+
bool SimpleIntInterfaceWithErrorMessage(int64_t* v, std::string* msg)
|
|
362
|
+
ABSL_ATTRIBUTE_NOINLINE;
|
|
363
|
+
absl::Status SimpleIntInterfaceWithErrorStatus(int64_t* v)
|
|
364
|
+
ABSL_ATTRIBUTE_NOINLINE;
|
|
365
|
+
absl::StatusOr<int64_t> SimpleIntStatusOrInterface() ABSL_ATTRIBUTE_NOINLINE;
|
|
366
|
+
|
|
367
|
+
// (a): Just a boolean return value with an out int64* parameter
|
|
368
|
+
bool SimpleIntInterface(int64_t* v) {
|
|
369
|
+
benchmark::DoNotOptimize(bm_cond);
|
|
370
|
+
if (bm_cond) {
|
|
371
|
+
*v = 42;
|
|
372
|
+
return true;
|
|
373
|
+
} else {
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// (b): A boolean return value and a string error message filled in on failure
|
|
379
|
+
// and an out int64* parameter filled on success
|
|
380
|
+
bool SimpleIntInterfaceWithErrorMessage(int64_t* v, std::string* msg) {
|
|
381
|
+
benchmark::DoNotOptimize(bm_cond);
|
|
382
|
+
if (bm_cond) {
|
|
383
|
+
*v = 42;
|
|
384
|
+
return true;
|
|
385
|
+
} else {
|
|
386
|
+
*msg = "This is an error message";
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// (c): A Status return value with an out int64* parameter on success
|
|
392
|
+
absl::Status SimpleIntInterfaceWithErrorStatus(int64_t* v) {
|
|
393
|
+
benchmark::DoNotOptimize(bm_cond);
|
|
394
|
+
if (bm_cond) {
|
|
395
|
+
*v = 42;
|
|
396
|
+
return absl::OkStatus();
|
|
397
|
+
} else {
|
|
398
|
+
return absl::UnknownError("This is an error message");
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// (d): A StatusOr<int64> return value
|
|
403
|
+
absl::StatusOr<int64_t> SimpleIntStatusOrInterface() {
|
|
404
|
+
benchmark::DoNotOptimize(bm_cond);
|
|
405
|
+
if (bm_cond) {
|
|
406
|
+
return 42;
|
|
407
|
+
} else {
|
|
408
|
+
return absl::StatusOr<int64_t>(
|
|
409
|
+
absl::UnknownError("This is an error message"));
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
void SetCondition(benchmark::State& state) {
|
|
414
|
+
bm_cond = (state.range(0) == 0);
|
|
415
|
+
state.SetLabel(bm_cond ? "Success" : "Failure");
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
void BM_SimpleIntInterface(benchmark::State& state) {
|
|
419
|
+
SetCondition(state);
|
|
420
|
+
int64_t sum = 0;
|
|
421
|
+
for (auto s : state) {
|
|
422
|
+
int64_t v;
|
|
423
|
+
if (SimpleIntInterface(&v)) {
|
|
424
|
+
sum += v;
|
|
425
|
+
}
|
|
426
|
+
benchmark::DoNotOptimize(sum);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
void BM_SimpleIntInterfaceMsg(benchmark::State& state) {
|
|
431
|
+
SetCondition(state);
|
|
432
|
+
int64_t sum = 0;
|
|
433
|
+
std::string msg;
|
|
434
|
+
for (auto s : state) {
|
|
435
|
+
int64_t v;
|
|
436
|
+
if (SimpleIntInterfaceWithErrorMessage(&v, &msg)) {
|
|
437
|
+
sum += v;
|
|
438
|
+
}
|
|
439
|
+
benchmark::DoNotOptimize(sum);
|
|
440
|
+
benchmark::DoNotOptimize(msg);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
void BM_SimpleIntInterfaceStatus(benchmark::State& state) {
|
|
445
|
+
SetCondition(state);
|
|
446
|
+
int64_t sum = 0;
|
|
447
|
+
for (auto s : state) {
|
|
448
|
+
int64_t v;
|
|
449
|
+
auto result = SimpleIntInterfaceWithErrorStatus(&v);
|
|
450
|
+
if (result.ok()) {
|
|
451
|
+
sum += v;
|
|
452
|
+
}
|
|
453
|
+
benchmark::DoNotOptimize(sum);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
void BM_SimpleIntStatusOrInterface(benchmark::State& state) {
|
|
458
|
+
SetCondition(state);
|
|
459
|
+
int64_t sum = 0;
|
|
460
|
+
for (auto s : state) {
|
|
461
|
+
auto v_s = SimpleIntStatusOrInterface();
|
|
462
|
+
if (v_s.ok()) {
|
|
463
|
+
sum += *v_s;
|
|
464
|
+
}
|
|
465
|
+
benchmark::DoNotOptimize(sum);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Ordered like this so all the success path benchmarks (Arg(0)) show up,
|
|
470
|
+
// then all the failure benchmarks (Arg(1))
|
|
471
|
+
BENCHMARK(BM_SimpleIntInterface)->Arg(0);
|
|
472
|
+
BENCHMARK(BM_SimpleIntInterfaceMsg)->Arg(0);
|
|
473
|
+
BENCHMARK(BM_SimpleIntInterfaceStatus)->Arg(0);
|
|
474
|
+
BENCHMARK(BM_SimpleIntStatusOrInterface)->Arg(0);
|
|
475
|
+
BENCHMARK(BM_SimpleIntInterface)->Arg(1);
|
|
476
|
+
BENCHMARK(BM_SimpleIntInterfaceMsg)->Arg(1);
|
|
477
|
+
BENCHMARK(BM_SimpleIntInterfaceStatus)->Arg(1);
|
|
478
|
+
BENCHMARK(BM_SimpleIntStatusOrInterface)->Arg(1);
|
|
479
|
+
|
|
480
|
+
} // namespace
|