re2 1.23.0 → 1.23.2
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 +2 -0
- package/binding.gyp +3 -2
- package/package.json +5 -5
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
- package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
- package/vendor/abseil-cpp/CMakeLists.txt +2 -2
- package/vendor/abseil-cpp/MODULE.bazel +2 -2
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
- package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
- package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
- package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
- package/vendor/abseil-cpp/absl/base/casts.h +128 -2
- package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
- package/vendor/abseil-cpp/absl/base/config.h +13 -37
- package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
- package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
- package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
- package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
- package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
- package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
- package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
- package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
- package/vendor/abseil-cpp/absl/base/macros.h +40 -17
- package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
- package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
- package/vendor/abseil-cpp/absl/base/options.h +1 -27
- package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
- package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
- package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
- package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
- package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
- package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
- package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
- package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
- package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
- package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
- package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
- package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
- package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
- package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
- package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
- package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
- package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
- package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
- package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
- package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
- package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
- package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
- package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
- package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
- package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
- package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
- package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
- package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
- package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
- package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
- package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
- package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
- package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
- package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
- package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
- package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
- package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
- package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
- package/vendor/abseil-cpp/absl/log/log.h +2 -2
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
- package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
- package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
- package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
- package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
- package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
- package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
- package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
- package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
- package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
- package/vendor/abseil-cpp/absl/status/status.cc +4 -0
- package/vendor/abseil-cpp/absl/status/status.h +5 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
- package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
- package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
- package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
- package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
- package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
- package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
- package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
- package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
- package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
- package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
- package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
- package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
- package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
- package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
- package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
- package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
- package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
- package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
- package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
- package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
- package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
- package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
- package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
- package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
- package/vendor/abseil-cpp/absl/time/time.cc +4 -4
- package/vendor/abseil-cpp/absl/time/time.h +10 -10
- package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
- package/vendor/abseil-cpp/absl/types/compare.h +62 -61
- package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
- package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
- package/vendor/abseil-cpp/absl/types/optional.h +2 -2
- package/vendor/abseil-cpp/absl/types/span.h +10 -2
- package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
- package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
- package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
- package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
- package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
- package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
- package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
- package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
#include <cstdint>
|
|
18
18
|
|
|
19
19
|
#include "absl/base/config.h"
|
|
20
|
-
#include "absl/base/
|
|
20
|
+
#include "absl/base/const_init.h"
|
|
21
|
+
#include "absl/base/no_destructor.h"
|
|
21
22
|
#include "absl/container/inlined_vector.h"
|
|
22
23
|
#include "absl/debugging/stacktrace.h"
|
|
23
24
|
#include "absl/strings/internal/cord_internal.h"
|
|
@@ -34,8 +35,6 @@ namespace absl {
|
|
|
34
35
|
ABSL_NAMESPACE_BEGIN
|
|
35
36
|
namespace cord_internal {
|
|
36
37
|
|
|
37
|
-
ABSL_CONST_INIT CordzInfo::List CordzInfo::global_list_{absl::kConstInit};
|
|
38
|
-
|
|
39
38
|
namespace {
|
|
40
39
|
|
|
41
40
|
// CordRepAnalyzer performs the analysis of a cord.
|
|
@@ -221,24 +220,32 @@ class CordRepAnalyzer {
|
|
|
221
220
|
|
|
222
221
|
} // namespace
|
|
223
222
|
|
|
223
|
+
CordzInfo::List* CordzInfo::GlobalList() {
|
|
224
|
+
static absl::NoDestructor<CordzInfo::List> list;
|
|
225
|
+
return list.get();
|
|
226
|
+
}
|
|
227
|
+
|
|
224
228
|
CordzInfo* CordzInfo::Head(const CordzSnapshot& snapshot) {
|
|
225
229
|
ABSL_ASSERT(snapshot.is_snapshot());
|
|
226
230
|
|
|
227
|
-
// We
|
|
228
|
-
//
|
|
229
|
-
//
|
|
231
|
+
// We obtain the lock here as we must synchronize the first call into the list
|
|
232
|
+
// with any concurrent 'Untrack()` operation to avoid any read in the list to
|
|
233
|
+
// reorder before the observation of the thread 'untracking a cord' of the
|
|
234
|
+
// delete queue being empty or not. After this all next observations are safe
|
|
235
|
+
// as we have established all subsequent untracks will be queued for delete.
|
|
230
236
|
// We do enforce in DEBUG builds that the 'head' value is present in the
|
|
231
|
-
// delete queue: ODR violations may lead to 'snapshot' and '
|
|
237
|
+
// delete queue: ODR violations may lead to 'snapshot' and 'global_list'
|
|
232
238
|
// being in different libraries / modules.
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
239
|
+
auto global_list = GlobalList();
|
|
240
|
+
absl::MutexLock l(global_list->mutex);
|
|
241
|
+
ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(global_list->head));
|
|
242
|
+
return global_list->head;
|
|
236
243
|
}
|
|
237
244
|
|
|
238
245
|
CordzInfo* CordzInfo::Next(const CordzSnapshot& snapshot) const {
|
|
239
246
|
ABSL_ASSERT(snapshot.is_snapshot());
|
|
240
247
|
|
|
241
|
-
//
|
|
248
|
+
// We do not need a lock here. See also comments in Head().
|
|
242
249
|
CordzInfo* next = ci_next_.load(std::memory_order_acquire);
|
|
243
250
|
ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(this));
|
|
244
251
|
ABSL_ASSERT(snapshot.DiagnosticsHandleIsSafeToInspect(next));
|
|
@@ -327,22 +334,21 @@ CordzInfo::~CordzInfo() {
|
|
|
327
334
|
}
|
|
328
335
|
|
|
329
336
|
void CordzInfo::Track() {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
CordzInfo* const head = list_->head.load(std::memory_order_acquire);
|
|
337
|
+
absl::MutexLock l(list_->mutex);
|
|
338
|
+
CordzInfo* const head = list_->head;
|
|
333
339
|
if (head != nullptr) {
|
|
334
340
|
head->ci_prev_.store(this, std::memory_order_release);
|
|
335
341
|
}
|
|
336
342
|
ci_next_.store(head, std::memory_order_release);
|
|
337
|
-
list_->head
|
|
343
|
+
list_->head = this;
|
|
338
344
|
}
|
|
339
345
|
|
|
340
346
|
void CordzInfo::Untrack() {
|
|
341
347
|
ODRCheck();
|
|
342
348
|
{
|
|
343
|
-
|
|
349
|
+
absl::MutexLock l(list_->mutex);
|
|
344
350
|
|
|
345
|
-
CordzInfo* const head = list_->head
|
|
351
|
+
CordzInfo* const head = list_->head;
|
|
346
352
|
CordzInfo* const next = ci_next_.load(std::memory_order_acquire);
|
|
347
353
|
CordzInfo* const prev = ci_prev_.load(std::memory_order_acquire);
|
|
348
354
|
|
|
@@ -356,7 +362,7 @@ void CordzInfo::Untrack() {
|
|
|
356
362
|
prev->ci_next_.store(next, std::memory_order_release);
|
|
357
363
|
} else {
|
|
358
364
|
ABSL_ASSERT(head == this);
|
|
359
|
-
list_->head
|
|
365
|
+
list_->head = next;
|
|
360
366
|
}
|
|
361
367
|
}
|
|
362
368
|
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
#include <functional>
|
|
21
21
|
|
|
22
22
|
#include "absl/base/config.h"
|
|
23
|
+
#include "absl/base/const_init.h"
|
|
23
24
|
#include "absl/base/internal/raw_logging.h"
|
|
24
|
-
#include "absl/base/internal/spinlock.h"
|
|
25
25
|
#include "absl/base/thread_annotations.h"
|
|
26
26
|
#include "absl/strings/internal/cord_internal.h"
|
|
27
27
|
#include "absl/strings/internal/cordz_functions.h"
|
|
@@ -121,12 +121,10 @@ class ABSL_LOCKABLE CordzInfo : public CordzHandle {
|
|
|
121
121
|
CordzInfo& operator=(const CordzInfo&) = delete;
|
|
122
122
|
|
|
123
123
|
// Retrieves the oldest existing CordzInfo.
|
|
124
|
-
static CordzInfo* Head(const CordzSnapshot& snapshot)
|
|
125
|
-
ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
|
124
|
+
static CordzInfo* Head(const CordzSnapshot& snapshot);
|
|
126
125
|
|
|
127
126
|
// Retrieves the next oldest existing CordzInfo older than 'this' instance.
|
|
128
|
-
CordzInfo* Next(const CordzSnapshot& snapshot) const
|
|
129
|
-
ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
|
127
|
+
CordzInfo* Next(const CordzSnapshot& snapshot) const;
|
|
130
128
|
|
|
131
129
|
// Locks this instance for the update identified by `method`.
|
|
132
130
|
// Increases the count for `method` in `update_tracker`.
|
|
@@ -185,18 +183,15 @@ class ABSL_LOCKABLE CordzInfo : public CordzHandle {
|
|
|
185
183
|
int64_t sampling_stride() const { return sampling_stride_; }
|
|
186
184
|
|
|
187
185
|
private:
|
|
188
|
-
using SpinLock = absl::base_internal::SpinLock;
|
|
189
|
-
using SpinLockHolder = ::absl::base_internal::SpinLockHolder;
|
|
190
|
-
|
|
191
186
|
// Global cordz info list. CordzInfo stores a pointer to the global list
|
|
192
187
|
// instance to harden against ODR violations.
|
|
193
188
|
struct List {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
SpinLock mutex;
|
|
197
|
-
std::atomic<CordzInfo*> head ABSL_GUARDED_BY(mutex){nullptr};
|
|
189
|
+
absl::Mutex mutex;
|
|
190
|
+
CordzInfo* head ABSL_GUARDED_BY(mutex){nullptr};
|
|
198
191
|
};
|
|
199
192
|
|
|
193
|
+
static List* GlobalList();
|
|
194
|
+
|
|
200
195
|
static constexpr size_t kMaxStackDepth = 64;
|
|
201
196
|
|
|
202
197
|
explicit CordzInfo(CordRep* rep, const CordzInfo* src,
|
|
@@ -221,7 +216,7 @@ class ABSL_LOCKABLE CordzInfo : public CordzHandle {
|
|
|
221
216
|
|
|
222
217
|
void ODRCheck() const {
|
|
223
218
|
#ifndef NDEBUG
|
|
224
|
-
ABSL_RAW_CHECK(list_ ==
|
|
219
|
+
ABSL_RAW_CHECK(list_ == GlobalList(), "ODR violation in Cord");
|
|
225
220
|
#endif
|
|
226
221
|
}
|
|
227
222
|
|
|
@@ -231,12 +226,11 @@ class ABSL_LOCKABLE CordzInfo : public CordzHandle {
|
|
|
231
226
|
static void MaybeTrackCordImpl(InlineData& cord, const InlineData& src,
|
|
232
227
|
MethodIdentifier method);
|
|
233
228
|
|
|
234
|
-
|
|
235
|
-
List* const list_ = &global_list_;
|
|
229
|
+
List* const list_ = GlobalList();
|
|
236
230
|
|
|
237
231
|
// ci_prev_ and ci_next_ require the global list mutex to be held.
|
|
238
232
|
// Unfortunately we can't use thread annotations such that the thread safety
|
|
239
|
-
// analysis understands that list_ and
|
|
233
|
+
// analysis understands that list_ and GlobalList() are one and the same.
|
|
240
234
|
std::atomic<CordzInfo*> ci_prev_{nullptr};
|
|
241
235
|
std::atomic<CordzInfo*> ci_next_{nullptr};
|
|
242
236
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#include <cassert>
|
|
19
19
|
|
|
20
|
-
#include "absl/strings/
|
|
20
|
+
#include "absl/strings/resize_and_overwrite.h"
|
|
21
21
|
|
|
22
22
|
namespace absl {
|
|
23
23
|
ABSL_NAMESPACE_BEGIN
|
|
@@ -42,12 +42,14 @@ void Base64EscapeInternal(const unsigned char* src, size_t szsrc, String* dest,
|
|
|
42
42
|
bool do_padding, const char* base64_chars) {
|
|
43
43
|
const size_t calc_escaped_size =
|
|
44
44
|
CalculateBase64EscapedLenInternal(szsrc, do_padding);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
StringResizeAndOverwrite(
|
|
46
|
+
*dest, calc_escaped_size,
|
|
47
|
+
[src, szsrc, base64_chars, do_padding](char* buf, size_t buf_size) {
|
|
48
|
+
const size_t escaped_len = Base64EscapeInternal(
|
|
49
|
+
src, szsrc, buf, buf_size, base64_chars, do_padding);
|
|
50
|
+
assert(escaped_len == buf_size);
|
|
51
|
+
return escaped_len;
|
|
52
|
+
});
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
} // namespace strings_internal
|
|
@@ -0,0 +1,107 @@
|
|
|
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 "absl/strings/internal/generic_printer.h"
|
|
16
|
+
|
|
17
|
+
#include <cstddef>
|
|
18
|
+
#include <cstdlib>
|
|
19
|
+
#include <ostream>
|
|
20
|
+
#include <string>
|
|
21
|
+
|
|
22
|
+
#include "absl/base/config.h"
|
|
23
|
+
#include "absl/strings/ascii.h"
|
|
24
|
+
#include "absl/strings/escaping.h"
|
|
25
|
+
#include "absl/strings/str_format.h"
|
|
26
|
+
|
|
27
|
+
namespace absl {
|
|
28
|
+
ABSL_NAMESPACE_BEGIN
|
|
29
|
+
namespace internal_generic_printer {
|
|
30
|
+
|
|
31
|
+
// Out-of-line helper for PrintAsStringWithEscaping.
|
|
32
|
+
std::ostream& PrintEscapedString(std::ostream& os, absl::string_view v) {
|
|
33
|
+
return os << "\"" << absl::CHexEscape(v) << "\"";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Retuns a string representation of 'v', shortened if possible.
|
|
37
|
+
template <class T, class F>
|
|
38
|
+
std::string TryShorten(T v, F strtox) {
|
|
39
|
+
std::string printed =
|
|
40
|
+
absl::StrFormat("%.*g", std::numeric_limits<T>::max_digits10 / 2, v);
|
|
41
|
+
T parsed = strtox(printed.data());
|
|
42
|
+
if (parsed != v) {
|
|
43
|
+
printed =
|
|
44
|
+
absl::StrFormat("%.*g", std::numeric_limits<T>::max_digits10 + 1, v);
|
|
45
|
+
}
|
|
46
|
+
return printed;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Out-of-line helpers for floating point values. These don't necessarily
|
|
50
|
+
// ensure that values are precise, but rather that they are wide enough to
|
|
51
|
+
// represent distinct values. go/c++17std/numeric.limits.members.html
|
|
52
|
+
std::ostream& PrintPreciseFP(std::ostream& os, float v) {
|
|
53
|
+
return os << TryShorten(v, [](const char* buf) {
|
|
54
|
+
char* unused;
|
|
55
|
+
return std::strtof(buf, &unused);
|
|
56
|
+
}) << "f";
|
|
57
|
+
}
|
|
58
|
+
std::ostream& PrintPreciseFP(std::ostream& os, double v) {
|
|
59
|
+
return os << TryShorten(v, [](const char* buf) {
|
|
60
|
+
char* unused;
|
|
61
|
+
return std::strtod(buf, &unused);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
std::ostream& PrintPreciseFP(std::ostream& os, long double v) {
|
|
65
|
+
return os << TryShorten(v, [](const char* buf) {
|
|
66
|
+
char* unused;
|
|
67
|
+
return std::strtold(buf, &unused);
|
|
68
|
+
}) << "L";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Prints a nibble of 'v' in hexadecimal.
|
|
72
|
+
inline char hexnib(int v) {
|
|
73
|
+
return static_cast<char>((v < 10 ? '0' : ('a' - 10)) + v);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <typename T>
|
|
77
|
+
static std::ostream& PrintCharImpl(std::ostream& os, T v) {
|
|
78
|
+
// Specialization for chars: print as 'c' if printable, otherwise
|
|
79
|
+
// hex-escaped.
|
|
80
|
+
return (absl::ascii_isprint(static_cast<unsigned char>(v))
|
|
81
|
+
? (os << (v == '\'' ? "'\\" : "'") << v)
|
|
82
|
+
: (os << "'\\x" << hexnib((v >> 4) & 0xf) << hexnib(v & 0xf)))
|
|
83
|
+
<< "' (0x" << hexnib((v >> 4) & 0xf) << hexnib(v & 0xf) << " "
|
|
84
|
+
<< static_cast<int>(v) << ")";
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
std::ostream& PrintChar(std::ostream& os, char c) {
|
|
88
|
+
return PrintCharImpl(os, c);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
std::ostream& PrintChar(std::ostream& os, signed char c) {
|
|
92
|
+
return PrintCharImpl(os, c);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
std::ostream& PrintChar(std::ostream& os, unsigned char c) {
|
|
96
|
+
return PrintCharImpl(os, c);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
std::ostream& PrintByte(std::ostream& os, std::byte b) {
|
|
100
|
+
auto v = std::to_integer<int>(b);
|
|
101
|
+
os << "0x" << hexnib((v >> 4) & 0xf) << hexnib(v & 0xf);
|
|
102
|
+
return os;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
} // namespace internal_generic_printer
|
|
106
|
+
ABSL_NAMESPACE_END
|
|
107
|
+
} // namespace absl
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
#ifndef ABSL_STRINGS_INTERNAL_GENERIC_PRINTER_H_
|
|
16
|
+
#define ABSL_STRINGS_INTERNAL_GENERIC_PRINTER_H_
|
|
17
|
+
|
|
18
|
+
#include "absl/strings/internal/generic_printer_internal.h" // IWYU pragma: export
|
|
19
|
+
|
|
20
|
+
// Helpers for printing objects in generic code.
|
|
21
|
+
//
|
|
22
|
+
// These functions help with streaming in generic code. It may be desirable, for
|
|
23
|
+
// example, to log values from generic functions; however, operator<< may not be
|
|
24
|
+
// overloaded for all types.
|
|
25
|
+
//
|
|
26
|
+
// The helpers in this library use, in order of precedence:
|
|
27
|
+
//
|
|
28
|
+
// 1. std::string and std::string_view are quoted and escaped. (The specific
|
|
29
|
+
// format is not guaranteed to be stable.)
|
|
30
|
+
// 2. A defined AbslStringify() method.
|
|
31
|
+
// 3. absl::log_internal::LogContainer, if the object is a STL container.
|
|
32
|
+
// 4. For std::tuple, std::pair, and std::optional, recursively calls
|
|
33
|
+
// GenericPrint for each element.
|
|
34
|
+
// 5. Floating point values are printed with enough precision for round-trip.
|
|
35
|
+
// 6. char values are quoted, with non-printable values escaped, and the
|
|
36
|
+
// char's numeric value is included.
|
|
37
|
+
// 7. A defined operator<< overload (which should be found by ADL).
|
|
38
|
+
// 8. A defined DebugString() const method.
|
|
39
|
+
// 9. A fallback value with basic information otherwise.
|
|
40
|
+
//
|
|
41
|
+
// Note that the fallback value means that if no formatting conversion is
|
|
42
|
+
// defined, you will not see a compile-time error. This also means that
|
|
43
|
+
// GenericPrint() can safely be used in generic template contexts, and can
|
|
44
|
+
// format any types needed (even though the output will vary).
|
|
45
|
+
//
|
|
46
|
+
// Example usage:
|
|
47
|
+
//
|
|
48
|
+
// // All values after GenericPrint() are formatted:
|
|
49
|
+
// LOG(INFO) << GenericPrint()
|
|
50
|
+
// << int_var // <- printed normally
|
|
51
|
+
// << float_var // <- sufficient precision for round-trip
|
|
52
|
+
// << " unchanged literal text ";
|
|
53
|
+
//
|
|
54
|
+
// // Just one value is formatted:
|
|
55
|
+
// LOG(INFO) << GenericPrint(string("this is quoted and escaped\t\n"))
|
|
56
|
+
// << GenericPrint("but not this, ");
|
|
57
|
+
// << string("and not this.");
|
|
58
|
+
//
|
|
59
|
+
// To make a type loggable with GenericPrint, prefer defining operator<< as a
|
|
60
|
+
// friend function. For example:
|
|
61
|
+
//
|
|
62
|
+
// class TypeToLog {
|
|
63
|
+
// public:
|
|
64
|
+
// string ToString() const; // Many types already implement this.
|
|
65
|
+
// // Define out-of-line if it is complex.
|
|
66
|
+
// friend std::ostream& operator<<(std::ostream& os, const TypeToLog& v) {
|
|
67
|
+
// return os << v.ToString(); // OK to define in-line instead, if simple.
|
|
68
|
+
// }
|
|
69
|
+
// };
|
|
70
|
+
//
|
|
71
|
+
// (Defining operator<< as an inline friend free function allows it to be found
|
|
72
|
+
// by Argument-Dependent Lookup, or ADL, which is the mechanism typically used
|
|
73
|
+
// for operator overload resolution. An inline friend function is the tightest
|
|
74
|
+
// scope possible for overloading the left-hand side of an operator.)
|
|
75
|
+
|
|
76
|
+
#include <ostream>
|
|
77
|
+
#include <utility>
|
|
78
|
+
|
|
79
|
+
namespace absl {
|
|
80
|
+
ABSL_NAMESPACE_BEGIN
|
|
81
|
+
namespace strings_internal {
|
|
82
|
+
|
|
83
|
+
// Helper for logging values in generic code.
|
|
84
|
+
//
|
|
85
|
+
// Example usage:
|
|
86
|
+
//
|
|
87
|
+
// template <typename T>
|
|
88
|
+
// void GenericFunction() {
|
|
89
|
+
// T v1, v2;
|
|
90
|
+
// VLOG(1) << GenericPrint() << v1 << v2; // GenericPrint everything
|
|
91
|
+
// VLOG(1) << GenericPrint(v1) << v2; // GenericPrint just v1
|
|
92
|
+
// }
|
|
93
|
+
//
|
|
94
|
+
inline constexpr internal_generic_printer::GenericPrintAdapterFactory
|
|
95
|
+
GenericPrint{};
|
|
96
|
+
|
|
97
|
+
// Generic printer type: this class can be used, for example, as a template
|
|
98
|
+
// argument to allow users to provide alternative printing strategies.
|
|
99
|
+
//
|
|
100
|
+
// For example, to allow callers to provide a custom strategy:
|
|
101
|
+
//
|
|
102
|
+
// template <typename T, typename PrinterT = GenericPrinter<T>>
|
|
103
|
+
// void GenericFunction() {
|
|
104
|
+
// T value;
|
|
105
|
+
// VLOG(1) << PrinterT{value};
|
|
106
|
+
// }
|
|
107
|
+
//
|
|
108
|
+
template <typename T>
|
|
109
|
+
using GenericPrinter = internal_generic_printer::GenericPrinter<T>;
|
|
110
|
+
|
|
111
|
+
} // namespace strings_internal
|
|
112
|
+
ABSL_NAMESPACE_END
|
|
113
|
+
} // namespace absl
|
|
114
|
+
|
|
115
|
+
#endif // ABSL_STRINGS_INTERNAL_GENERIC_PRINTER_H_
|