grpc 1.73.0 → 1.74.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.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -26,6 +26,7 @@
26
26
  #include <cstring>
27
27
  #include <cwchar>
28
28
  #include <string>
29
+ #include <string_view>
29
30
  #include <type_traits>
30
31
 
31
32
  #include "absl/base/config.h"
@@ -34,13 +35,10 @@
34
35
  #include "absl/numeric/int128.h"
35
36
  #include "absl/strings/internal/str_format/extension.h"
36
37
  #include "absl/strings/internal/str_format/float_conversion.h"
38
+ #include "absl/strings/internal/utf8.h"
37
39
  #include "absl/strings/numbers.h"
38
40
  #include "absl/strings/string_view.h"
39
41
 
40
- #if defined(ABSL_HAVE_STD_STRING_VIEW)
41
- #include <string_view>
42
- #endif
43
-
44
42
  namespace absl {
45
43
  ABSL_NAMESPACE_BEGIN
46
44
  namespace str_format_internal {
@@ -311,68 +309,16 @@ inline bool ConvertStringArg(string_view v, const FormatConversionSpecImpl conv,
311
309
  conv.has_left_flag());
312
310
  }
313
311
 
314
- struct ShiftState {
315
- bool saw_high_surrogate = false;
316
- uint8_t bits = 0;
317
- };
318
-
319
- // Converts `v` from UTF-16 or UTF-32 to UTF-8 and writes to `buf`. `buf` is
320
- // assumed to have enough space for the output. `s` is used to carry state
321
- // between successive calls with a UTF-16 surrogate pair. Returns the number of
322
- // chars written, or `static_cast<size_t>(-1)` on failure.
323
- //
324
- // This is basically std::wcrtomb(), but always outputting UTF-8 instead of
325
- // respecting the current locale.
326
- inline size_t WideToUtf8(wchar_t wc, char *buf, ShiftState &s) {
327
- const auto v = static_cast<uint32_t>(wc);
328
- if (v < 0x80) {
329
- *buf = static_cast<char>(v);
330
- return 1;
331
- } else if (v < 0x800) {
332
- *buf++ = static_cast<char>(0xc0 | (v >> 6));
333
- *buf = static_cast<char>(0x80 | (v & 0x3f));
334
- return 2;
335
- } else if (v < 0xd800 || (v - 0xe000) < 0x2000) {
336
- *buf++ = static_cast<char>(0xe0 | (v >> 12));
337
- *buf++ = static_cast<char>(0x80 | ((v >> 6) & 0x3f));
338
- *buf = static_cast<char>(0x80 | (v & 0x3f));
339
- return 3;
340
- } else if ((v - 0x10000) < 0x100000) {
341
- *buf++ = static_cast<char>(0xf0 | (v >> 18));
342
- *buf++ = static_cast<char>(0x80 | ((v >> 12) & 0x3f));
343
- *buf++ = static_cast<char>(0x80 | ((v >> 6) & 0x3f));
344
- *buf = static_cast<char>(0x80 | (v & 0x3f));
345
- return 4;
346
- } else if (v < 0xdc00) {
347
- s.saw_high_surrogate = true;
348
- s.bits = static_cast<uint8_t>(v & 0x3);
349
- const uint8_t high_bits = ((v >> 6) & 0xf) + 1;
350
- *buf++ = static_cast<char>(0xf0 | (high_bits >> 2));
351
- *buf =
352
- static_cast<char>(0x80 | static_cast<uint8_t>((high_bits & 0x3) << 4) |
353
- static_cast<uint8_t>((v >> 2) & 0xf));
354
- return 2;
355
- } else if (v < 0xe000 && s.saw_high_surrogate) {
356
- *buf++ = static_cast<char>(0x80 | static_cast<uint8_t>(s.bits << 4) |
357
- static_cast<uint8_t>((v >> 6) & 0xf));
358
- *buf = static_cast<char>(0x80 | (v & 0x3f));
359
- s.saw_high_surrogate = false;
360
- s.bits = 0;
361
- return 2;
362
- } else {
363
- return static_cast<size_t>(-1);
364
- }
365
- }
366
-
367
312
  inline bool ConvertStringArg(const wchar_t *v,
368
313
  size_t len,
369
314
  const FormatConversionSpecImpl conv,
370
315
  FormatSinkImpl *sink) {
371
316
  FixedArray<char> mb(len * 4);
372
- ShiftState s;
317
+ strings_internal::ShiftState s;
373
318
  size_t chars_written = 0;
374
319
  for (size_t i = 0; i < len; ++i) {
375
- const size_t chars = WideToUtf8(v[i], &mb[chars_written], s);
320
+ const size_t chars =
321
+ strings_internal::WideToUtf8(v[i], &mb[chars_written], s);
376
322
  if (chars == static_cast<size_t>(-1)) { return false; }
377
323
  chars_written += chars;
378
324
  }
@@ -382,8 +328,8 @@ inline bool ConvertStringArg(const wchar_t *v,
382
328
  bool ConvertWCharTImpl(wchar_t v, const FormatConversionSpecImpl conv,
383
329
  FormatSinkImpl *sink) {
384
330
  char mb[4];
385
- ShiftState s;
386
- const size_t chars_written = WideToUtf8(v, mb, s);
331
+ strings_internal::ShiftState s;
332
+ const size_t chars_written = strings_internal::WideToUtf8(v, mb, s);
387
333
  return chars_written != static_cast<size_t>(-1) && !s.saw_high_surrogate &&
388
334
  ConvertStringArg(string_view(mb, chars_written), conv, sink);
389
335
  }
@@ -510,13 +456,11 @@ StringConvertResult FormatConvertImpl(string_view v,
510
456
  return {ConvertStringArg(v, conv, sink)};
511
457
  }
512
458
 
513
- #if defined(ABSL_HAVE_STD_STRING_VIEW)
514
459
  StringConvertResult FormatConvertImpl(std::wstring_view v,
515
460
  const FormatConversionSpecImpl conv,
516
461
  FormatSinkImpl* sink) {
517
462
  return {ConvertStringArg(v.data(), v.size(), conv, sink)};
518
463
  }
519
- #endif
520
464
 
521
465
  StringPtrConvertResult FormatConvertImpl(const char* v,
522
466
  const FormatConversionSpecImpl conv,
@@ -26,6 +26,7 @@
26
26
  #include <memory>
27
27
  #include <sstream>
28
28
  #include <string>
29
+ #include <string_view>
29
30
  #include <type_traits>
30
31
  #include <utility>
31
32
 
@@ -37,10 +38,6 @@
37
38
  #include "absl/strings/internal/str_format/extension.h"
38
39
  #include "absl/strings/string_view.h"
39
40
 
40
- #if defined(ABSL_HAVE_STD_STRING_VIEW)
41
- #include <string_view>
42
- #endif
43
-
44
41
  namespace absl {
45
42
  ABSL_NAMESPACE_BEGIN
46
43
 
@@ -228,7 +225,6 @@ StringConvertResult FormatConvertImpl(const std::wstring& v,
228
225
  StringConvertResult FormatConvertImpl(string_view v,
229
226
  FormatConversionSpecImpl conv,
230
227
  FormatSinkImpl* sink);
231
- #if defined(ABSL_HAVE_STD_STRING_VIEW)
232
228
  StringConvertResult FormatConvertImpl(std::wstring_view v,
233
229
  FormatConversionSpecImpl conv,
234
230
  FormatSinkImpl* sink);
@@ -239,7 +235,6 @@ inline StringConvertResult FormatConvertImpl(std::string_view v,
239
235
  return FormatConvertImpl(absl::string_view(v.data(), v.size()), conv, sink);
240
236
  }
241
237
  #endif // !ABSL_USES_STD_STRING_VIEW
242
- #endif // ABSL_HAVE_STD_STRING_VIEW
243
238
 
244
239
  using StringPtrConvertResult = ArgConvertResult<FormatConversionCharSetUnion(
245
240
  FormatConversionCharSetInternal::s,
@@ -651,15 +646,10 @@ class FormatArgImpl {
651
646
  ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(const wchar_t*, __VA_ARGS__); \
652
647
  ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(std::wstring, __VA_ARGS__)
653
648
 
654
- #if defined(ABSL_HAVE_STD_STRING_VIEW)
655
649
  #define ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(...) \
656
650
  ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_NO_WSTRING_VIEW_( \
657
651
  __VA_ARGS__); \
658
652
  ABSL_INTERNAL_FORMAT_DISPATCH_INSTANTIATE_(std::wstring_view, __VA_ARGS__)
659
- #else
660
- #define ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(...) \
661
- ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_NO_WSTRING_VIEW_(__VA_ARGS__)
662
- #endif
663
653
 
664
654
  ABSL_INTERNAL_FORMAT_DISPATCH_OVERLOADS_EXPAND_(extern);
665
655
 
@@ -33,28 +33,6 @@ std::string FlagsToString(Flags v) {
33
33
  return s;
34
34
  }
35
35
 
36
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
37
-
38
- #define ABSL_INTERNAL_X_VAL(id) \
39
- constexpr absl::FormatConversionChar FormatConversionCharInternal::id;
40
- ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(ABSL_INTERNAL_X_VAL, )
41
- #undef ABSL_INTERNAL_X_VAL
42
- // NOLINTNEXTLINE(readability-redundant-declaration)
43
- constexpr absl::FormatConversionChar FormatConversionCharInternal::kNone;
44
-
45
- #define ABSL_INTERNAL_CHAR_SET_CASE(c) \
46
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::c;
47
- ABSL_INTERNAL_CONVERSION_CHARS_EXPAND_(ABSL_INTERNAL_CHAR_SET_CASE, )
48
- #undef ABSL_INTERNAL_CHAR_SET_CASE
49
-
50
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::kStar;
51
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::kIntegral;
52
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::kFloating;
53
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::kNumeric;
54
- constexpr FormatConversionCharSet FormatConversionCharSetInternal::kPointer;
55
-
56
- #endif // ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
57
-
58
36
  bool FormatSinkImpl::PutPaddedString(string_view value, int width,
59
37
  int precision, bool left) {
60
38
  size_t space_remaining = 0;
@@ -33,9 +33,11 @@ struct ClearErrnoGuard {
33
33
 
34
34
  void BufferRawSink::Write(string_view v) {
35
35
  size_t to_write = std::min(v.size(), size_);
36
- std::memcpy(buffer_, v.data(), to_write);
37
- buffer_ += to_write;
38
- size_ -= to_write;
36
+ if (to_write > 0) {
37
+ std::memcpy(buffer_, v.data(), to_write);
38
+ buffer_ += to_write;
39
+ size_ -= to_write;
40
+ }
39
41
  total_written_ += v.size();
40
42
  }
41
43
 
@@ -132,8 +132,10 @@ class ParsedFormatBase {
132
132
  has_error_ = other.has_error_;
133
133
  items_ = other.items_;
134
134
  size_t text_size = items_.empty() ? 0 : items_.back().text_end;
135
- data_.reset(new char[text_size]);
136
- memcpy(data_.get(), other.data_.get(), text_size);
135
+ data_ = std::make_unique<char[]>(text_size);
136
+ if (text_size > 0) {
137
+ memcpy(data_.get(), other.data_.get(), text_size);
138
+ }
137
139
  return *this;
138
140
  }
139
141
 
@@ -43,6 +43,7 @@
43
43
  #include <utility>
44
44
 
45
45
  #include "absl/base/config.h"
46
+ #include "absl/base/internal/iterator_traits.h"
46
47
  #include "absl/base/internal/raw_logging.h"
47
48
  #include "absl/strings/internal/ostringstream.h"
48
49
  #include "absl/strings/internal/resize_uninitialized.h"
@@ -228,9 +229,8 @@ std::string JoinAlgorithm(Iterator start, Iterator end, absl::string_view s,
228
229
  // range will be traversed twice: once to calculate the total needed size, and
229
230
  // then again to copy the elements and delimiters to the output string.
230
231
  template <typename Iterator,
231
- typename = typename std::enable_if<std::is_convertible<
232
- typename std::iterator_traits<Iterator>::iterator_category,
233
- std::forward_iterator_tag>::value>::type>
232
+ typename = std::enable_if_t<
233
+ base_internal::IsAtLeastForwardIterator<Iterator>::value>>
234
234
  std::string JoinAlgorithm(Iterator start, Iterator end, absl::string_view s,
235
235
  NoFormatter) {
236
236
  std::string result;
@@ -50,11 +50,6 @@ struct StringConstant {
50
50
  "The input string_view must point to constant data.");
51
51
  };
52
52
 
53
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
54
- template <typename T>
55
- constexpr absl::string_view StringConstant<T>::value;
56
- #endif
57
-
58
53
  // Factory function for `StringConstant` instances.
59
54
  // It supports callables that have a constexpr default constructor and a
60
55
  // constexpr operator().
@@ -16,11 +16,17 @@
16
16
 
17
17
  #include "absl/strings/internal/utf8.h"
18
18
 
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+ #include <limits>
22
+
23
+ #include "absl/base/config.h"
24
+
19
25
  namespace absl {
20
26
  ABSL_NAMESPACE_BEGIN
21
27
  namespace strings_internal {
22
28
 
23
- size_t EncodeUTF8Char(char *buffer, char32_t utf8_char) {
29
+ size_t EncodeUTF8Char(char* buffer, char32_t utf8_char) {
24
30
  if (utf8_char <= 0x7F) {
25
31
  *buffer = static_cast<char>(utf8_char);
26
32
  return 1;
@@ -48,6 +54,95 @@ size_t EncodeUTF8Char(char *buffer, char32_t utf8_char) {
48
54
  }
49
55
  }
50
56
 
57
+ size_t WideToUtf8(wchar_t wc, char* buf, ShiftState& s) {
58
+ // Reinterpret the output buffer `buf` as `unsigned char*` for subsequent
59
+ // bitwise operations. This ensures well-defined behavior for bit
60
+ // manipulations (avoiding issues with signed `char`) and is safe under C++
61
+ // aliasing rules, as `unsigned char` can alias any type.
62
+ auto* ubuf = reinterpret_cast<unsigned char*>(buf);
63
+ const uint32_t v = static_cast<uint32_t>(wc);
64
+ constexpr size_t kError = static_cast<size_t>(-1);
65
+
66
+ if (v <= 0x007F) {
67
+ // 1-byte sequence (U+0000 to U+007F).
68
+ // 0xxxxxxx.
69
+ ubuf[0] = (0b0111'1111 & v);
70
+ s = {}; // Reset surrogate state.
71
+ return 1;
72
+ } else if (0x0080 <= v && v <= 0x07FF) {
73
+ // 2-byte sequence (U+0080 to U+07FF).
74
+ // 110xxxxx 10xxxxxx.
75
+ ubuf[0] = 0b1100'0000 | (0b0001'1111 & (v >> 6));
76
+ ubuf[1] = 0b1000'0000 | (0b0011'1111 & v);
77
+ s = {}; // Reset surrogate state.
78
+ return 2;
79
+ } else if ((0x0800 <= v && v <= 0xD7FF) || (0xE000 <= v && v <= 0xFFFF)) {
80
+ // 3-byte sequence (U+0800 to U+D7FF or U+E000 to U+FFFF).
81
+ // Excludes surrogate code points U+D800-U+DFFF.
82
+ // 1110xxxx 10xxxxxx 10xxxxxx.
83
+ ubuf[0] = 0b1110'0000 | (0b0000'1111 & (v >> 12));
84
+ ubuf[1] = 0b1000'0000 | (0b0011'1111 & (v >> 6));
85
+ ubuf[2] = 0b1000'0000 | (0b0011'1111 & v);
86
+ s = {}; // Reset surrogate state.
87
+ return 3;
88
+ } else if (0xD800 <= v && v <= 0xDBFF) {
89
+ // High Surrogate (U+D800 to U+DBFF).
90
+ // This part forms the first two bytes of an eventual 4-byte UTF-8 sequence.
91
+ const unsigned char high_bits_val = (0b0000'1111 & (v >> 6)) + 1;
92
+
93
+ // First byte of the 4-byte UTF-8 sequence (11110xxx).
94
+ ubuf[0] = 0b1111'0000 | (0b0000'0111 & (high_bits_val >> 2));
95
+ // Second byte of the 4-byte UTF-8 sequence (10xxxxxx).
96
+ ubuf[1] = 0b1000'0000 | //
97
+ (0b0011'0000 & (high_bits_val << 4)) | //
98
+ (0b0000'1111 & (v >> 2));
99
+ // Set state for high surrogate after writing to buffer.
100
+ s = {true, static_cast<unsigned char>(0b0000'0011 & v)};
101
+ return 2; // Wrote 2 bytes, expecting 2 more from a low surrogate.
102
+ } else if (0xDC00 <= v && v <= 0xDFFF) {
103
+ // Low Surrogate (U+DC00 to U+DFFF).
104
+ // This part forms the last two bytes of a 4-byte UTF-8 sequence,
105
+ // using state from a preceding high surrogate.
106
+ if (!s.saw_high_surrogate) {
107
+ // Error: Isolated low surrogate without a preceding high surrogate.
108
+ // s remains in its current (problematic) state.
109
+ // Caller should handle error.
110
+ return kError;
111
+ }
112
+
113
+ // Third byte of the 4-byte UTF-8 sequence (10xxxxxx).
114
+ ubuf[0] = 0b1000'0000 | //
115
+ (0b0011'0000 & (s.bits << 4)) | //
116
+ (0b0000'1111 & (v >> 6));
117
+ // Fourth byte of the 4-byte UTF-8 sequence (10xxxxxx).
118
+ ubuf[1] = 0b1000'0000 | (0b0011'1111 & v);
119
+
120
+ s = {}; // Reset surrogate state, pair complete.
121
+ return 2; // Wrote 2 more bytes, completing the 4-byte sequence.
122
+ } else if constexpr (0xFFFF < std::numeric_limits<wchar_t>::max()) {
123
+ // Conditionally compile the 4-byte direct conversion branch.
124
+ // This block is compiled only if wchar_t can represent values > 0xFFFF.
125
+ // It's placed after surrogate checks to ensure surrogates are handled by
126
+ // their specific logic. This inner 'if' is the runtime check for the 4-byte
127
+ // range. At this point, v is known not to be in the 1, 2, or 3-byte BMP
128
+ // ranges, nor is it a surrogate code point.
129
+ if (0x10000 <= v && v <= 0x10FFFF) {
130
+ // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.
131
+ ubuf[0] = 0b1111'0000 | (0b0000'0111 & (v >> 18));
132
+ ubuf[1] = 0b1000'0000 | (0b0011'1111 & (v >> 12));
133
+ ubuf[2] = 0b1000'0000 | (0b0011'1111 & (v >> 6));
134
+ ubuf[3] = 0b1000'0000 | (0b0011'1111 & v);
135
+ s = {}; // Reset surrogate state.
136
+ return 4;
137
+ }
138
+ }
139
+
140
+ // Invalid wchar_t value (e.g., out of Unicode range, or unhandled after all
141
+ // checks).
142
+ s = {}; // Reset surrogate state.
143
+ return kError;
144
+ }
145
+
51
146
  } // namespace strings_internal
52
147
  ABSL_NAMESPACE_END
53
148
  } // namespace absl
@@ -41,7 +41,21 @@ namespace strings_internal {
41
41
  // characters into buffer, however never will more than kMaxEncodedUTF8Size
42
42
  // bytes be written, regardless of the value of utf8_char.
43
43
  enum { kMaxEncodedUTF8Size = 4 };
44
- size_t EncodeUTF8Char(char *buffer, char32_t utf8_char);
44
+ size_t EncodeUTF8Char(char* buffer, char32_t utf8_char);
45
+
46
+ struct ShiftState {
47
+ bool saw_high_surrogate = false;
48
+ unsigned char bits = 0;
49
+ };
50
+
51
+ // Converts `wc` from UTF-16 or UTF-32 to UTF-8 and writes to `buf`. `buf` is
52
+ // assumed to have enough space for the output. `s` is used to carry state
53
+ // between successive calls with a UTF-16 surrogate pair. Returns the number of
54
+ // chars written, or `static_cast<size_t>(-1)` on failure.
55
+ //
56
+ // This is basically std::wcrtomb(), but always outputting UTF-8 instead of
57
+ // respecting the current locale.
58
+ size_t WideToUtf8(wchar_t wc, char* buf, ShiftState& s);
45
59
 
46
60
  } // namespace strings_internal
47
61
  ABSL_NAMESPACE_END
@@ -47,7 +47,7 @@
47
47
  namespace absl {
48
48
  ABSL_NAMESPACE_BEGIN
49
49
 
50
- bool SimpleAtof(absl::string_view str, absl::Nonnull<float*> out) {
50
+ bool SimpleAtof(absl::string_view str, float* absl_nonnull out) {
51
51
  *out = 0.0;
52
52
  str = StripAsciiWhitespace(str);
53
53
  // std::from_chars doesn't accept an initial +, but SimpleAtof does, so if one
@@ -78,7 +78,7 @@ bool SimpleAtof(absl::string_view str, absl::Nonnull<float*> out) {
78
78
  return true;
79
79
  }
80
80
 
81
- bool SimpleAtod(absl::string_view str, absl::Nonnull<double*> out) {
81
+ bool SimpleAtod(absl::string_view str, double* absl_nonnull out) {
82
82
  *out = 0.0;
83
83
  str = StripAsciiWhitespace(str);
84
84
  // std::from_chars doesn't accept an initial +, but SimpleAtod does, so if one
@@ -109,7 +109,7 @@ bool SimpleAtod(absl::string_view str, absl::Nonnull<double*> out) {
109
109
  return true;
110
110
  }
111
111
 
112
- bool SimpleAtob(absl::string_view str, absl::Nonnull<bool*> out) {
112
+ bool SimpleAtob(absl::string_view str, bool* absl_nonnull out) {
113
113
  ABSL_RAW_CHECK(out != nullptr, "Output pointer must not be nullptr.");
114
114
  if (EqualsIgnoreCase(str, "true") || EqualsIgnoreCase(str, "t") ||
115
115
  EqualsIgnoreCase(str, "yes") || EqualsIgnoreCase(str, "y") ||
@@ -168,7 +168,7 @@ constexpr uint64_t kDivisionBy100Mul = 10486u;
168
168
  constexpr uint64_t kDivisionBy100Div = 1 << 20;
169
169
 
170
170
  // Encode functions write the ASCII output of input `n` to `out_str`.
171
- inline char* EncodeHundred(uint32_t n, absl::Nonnull<char*> out_str) {
171
+ inline char* EncodeHundred(uint32_t n, char* absl_nonnull out_str) {
172
172
  int num_digits = static_cast<int>(n - 10) >> 8;
173
173
  uint32_t div10 = (n * kDivisionBy10Mul) / kDivisionBy10Div;
174
174
  uint32_t mod10 = n - 10u * div10;
@@ -178,7 +178,7 @@ inline char* EncodeHundred(uint32_t n, absl::Nonnull<char*> out_str) {
178
178
  return out_str + 2 + num_digits;
179
179
  }
180
180
 
181
- inline char* EncodeTenThousand(uint32_t n, absl::Nonnull<char*> out_str) {
181
+ inline char* EncodeTenThousand(uint32_t n, char* absl_nonnull out_str) {
182
182
  // We split lower 2 digits and upper 2 digits of n into 2 byte consecutive
183
183
  // blocks. 123 -> [\0\1][\0\23]. We divide by 10 both blocks
184
184
  // (it's 1 division + zeroing upper bits), and compute modulo 10 as well "in
@@ -234,8 +234,8 @@ inline uint64_t PrepareEightDigits(uint32_t i) {
234
234
  return tens;
235
235
  }
236
236
 
237
- inline ABSL_ATTRIBUTE_ALWAYS_INLINE absl::Nonnull<char*> EncodeFullU32(
238
- uint32_t n, absl::Nonnull<char*> out_str) {
237
+ inline ABSL_ATTRIBUTE_ALWAYS_INLINE char* absl_nonnull EncodeFullU32(
238
+ uint32_t n, char* absl_nonnull out_str) {
239
239
  if (n < 10) {
240
240
  *out_str = static_cast<char>('0' + n);
241
241
  return out_str + 1;
@@ -284,7 +284,7 @@ inline ABSL_ATTRIBUTE_ALWAYS_INLINE char* EncodeFullU64(uint64_t i,
284
284
 
285
285
  } // namespace
286
286
 
287
- void numbers_internal::PutTwoDigits(uint32_t i, absl::Nonnull<char*> buf) {
287
+ void numbers_internal::PutTwoDigits(uint32_t i, char* absl_nonnull buf) {
288
288
  assert(i < 100);
289
289
  uint32_t base = kTwoZeroBytes;
290
290
  uint32_t div10 = (i * kDivisionBy10Mul) / kDivisionBy10Div;
@@ -293,15 +293,15 @@ void numbers_internal::PutTwoDigits(uint32_t i, absl::Nonnull<char*> buf) {
293
293
  little_endian::Store16(buf, static_cast<uint16_t>(base));
294
294
  }
295
295
 
296
- absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
297
- uint32_t n, absl::Nonnull<char*> out_str) {
296
+ char* absl_nonnull numbers_internal::FastIntToBuffer(
297
+ uint32_t n, char* absl_nonnull out_str) {
298
298
  out_str = EncodeFullU32(n, out_str);
299
299
  *out_str = '\0';
300
300
  return out_str;
301
301
  }
302
302
 
303
- absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
304
- int32_t i, absl::Nonnull<char*> buffer) {
303
+ char* absl_nonnull numbers_internal::FastIntToBuffer(
304
+ int32_t i, char* absl_nonnull buffer) {
305
305
  uint32_t u = static_cast<uint32_t>(i);
306
306
  if (i < 0) {
307
307
  *buffer++ = '-';
@@ -315,15 +315,15 @@ absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
315
315
  return buffer;
316
316
  }
317
317
 
318
- absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
319
- uint64_t i, absl::Nonnull<char*> buffer) {
318
+ char* absl_nonnull numbers_internal::FastIntToBuffer(
319
+ uint64_t i, char* absl_nonnull buffer) {
320
320
  buffer = EncodeFullU64(i, buffer);
321
321
  *buffer = '\0';
322
322
  return buffer;
323
323
  }
324
324
 
325
- absl::Nonnull<char*> numbers_internal::FastIntToBuffer(
326
- int64_t i, absl::Nonnull<char*> buffer) {
325
+ char* absl_nonnull numbers_internal::FastIntToBuffer(
326
+ int64_t i, char* absl_nonnull buffer) {
327
327
  uint64_t u = static_cast<uint64_t>(i);
328
328
  if (i < 0) {
329
329
  *buffer++ = '-';
@@ -464,7 +464,7 @@ static ExpDigits SplitToSix(const double value) {
464
464
  // Since we'd like to know if the fractional part of d is close to a half,
465
465
  // we multiply it by 65536 and see if the fractional part is close to 32768.
466
466
  // (The number doesn't have to be a power of two,but powers of two are faster)
467
- uint64_t d64k = d * 65536;
467
+ uint64_t d64k = static_cast<uint64_t>(d * 65536);
468
468
  uint32_t dddddd; // A 6-digit decimal integer.
469
469
  if ((d64k % 65536) == 32767 || (d64k % 65536) == 32768) {
470
470
  // OK, it's fairly likely that precision was lost above, which is
@@ -478,7 +478,8 @@ static ExpDigits SplitToSix(const double value) {
478
478
  // value we're representing, of course, is M.mmm... * 2^exp2.
479
479
  int exp2;
480
480
  double m = std::frexp(value, &exp2);
481
- uint64_t mantissa = m * (32768.0 * 65536.0 * 65536.0 * 65536.0);
481
+ uint64_t mantissa =
482
+ static_cast<uint64_t>(m * (32768.0 * 65536.0 * 65536.0 * 65536.0));
482
483
  // std::frexp returns an m value in the range [0.5, 1.0), however we
483
484
  // can't multiply it by 2^64 and convert to an integer because some FPUs
484
485
  // throw an exception when converting an number higher than 2^63 into an
@@ -545,7 +546,7 @@ static ExpDigits SplitToSix(const double value) {
545
546
  // Helper function for fast formatting of floating-point.
546
547
  // The result is the same as "%g", a.k.a. "%.6g".
547
548
  size_t numbers_internal::SixDigitsToBuffer(double d,
548
- absl::Nonnull<char*> const buffer) {
549
+ char* absl_nonnull const buffer) {
549
550
  static_assert(std::numeric_limits<float>::is_iec559,
550
551
  "IEEE-754/IEC-559 support only");
551
552
 
@@ -693,9 +694,9 @@ static constexpr std::array<int8_t, 256> kAsciiToInt = {
693
694
 
694
695
  // Parse the sign and optional hex or oct prefix in text.
695
696
  inline bool safe_parse_sign_and_base(
696
- absl::Nonnull<absl::string_view*> text /*inout*/,
697
- absl::Nonnull<int*> base_ptr /*inout*/,
698
- absl::Nonnull<bool*> negative_ptr /*output*/) {
697
+ absl::string_view* absl_nonnull text /*inout*/,
698
+ int* absl_nonnull base_ptr /*inout*/,
699
+ bool* absl_nonnull negative_ptr /*output*/) {
699
700
  if (text->data() == nullptr) {
700
701
  return false;
701
702
  }
@@ -980,7 +981,7 @@ ABSL_CONST_INIT const IntType LookupTables<IntType>::kVminOverBase[] =
980
981
 
981
982
  template <typename IntType>
982
983
  inline bool safe_parse_positive_int(absl::string_view text, int base,
983
- absl::Nonnull<IntType*> value_p) {
984
+ IntType* absl_nonnull value_p) {
984
985
  IntType value = 0;
985
986
  const IntType vmax = std::numeric_limits<IntType>::max();
986
987
  assert(vmax > 0);
@@ -1017,7 +1018,7 @@ inline bool safe_parse_positive_int(absl::string_view text, int base,
1017
1018
 
1018
1019
  template <typename IntType>
1019
1020
  inline bool safe_parse_negative_int(absl::string_view text, int base,
1020
- absl::Nonnull<IntType*> value_p) {
1021
+ IntType* absl_nonnull value_p) {
1021
1022
  IntType value = 0;
1022
1023
  const IntType vmin = std::numeric_limits<IntType>::min();
1023
1024
  assert(vmin < 0);
@@ -1062,7 +1063,7 @@ inline bool safe_parse_negative_int(absl::string_view text, int base,
1062
1063
  // http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html
1063
1064
  template <typename IntType>
1064
1065
  inline bool safe_int_internal(absl::string_view text,
1065
- absl::Nonnull<IntType*> value_p, int base) {
1066
+ IntType* absl_nonnull value_p, int base) {
1066
1067
  *value_p = 0;
1067
1068
  bool negative;
1068
1069
  if (!safe_parse_sign_and_base(&text, &base, &negative)) {
@@ -1077,7 +1078,7 @@ inline bool safe_int_internal(absl::string_view text,
1077
1078
 
1078
1079
  template <typename IntType>
1079
1080
  inline bool safe_uint_internal(absl::string_view text,
1080
- absl::Nonnull<IntType*> value_p, int base) {
1081
+ IntType* absl_nonnull value_p, int base) {
1081
1082
  *value_p = 0;
1082
1083
  bool negative;
1083
1084
  if (!safe_parse_sign_and_base(&text, &base, &negative) || negative) {
@@ -1111,32 +1112,52 @@ ABSL_CONST_INIT ABSL_DLL const char kHexTable[513] =
1111
1112
  "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
1112
1113
  "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
1113
1114
 
1114
- bool safe_strto32_base(absl::string_view text, absl::Nonnull<int32_t*> value,
1115
+ bool safe_strto8_base(absl::string_view text, int8_t* absl_nonnull value,
1116
+ int base) {
1117
+ return safe_int_internal<int8_t>(text, value, base);
1118
+ }
1119
+
1120
+ bool safe_strto16_base(absl::string_view text, int16_t* absl_nonnull value,
1121
+ int base) {
1122
+ return safe_int_internal<int16_t>(text, value, base);
1123
+ }
1124
+
1125
+ bool safe_strto32_base(absl::string_view text, int32_t* absl_nonnull value,
1115
1126
  int base) {
1116
1127
  return safe_int_internal<int32_t>(text, value, base);
1117
1128
  }
1118
1129
 
1119
- bool safe_strto64_base(absl::string_view text, absl::Nonnull<int64_t*> value,
1130
+ bool safe_strto64_base(absl::string_view text, int64_t* absl_nonnull value,
1120
1131
  int base) {
1121
1132
  return safe_int_internal<int64_t>(text, value, base);
1122
1133
  }
1123
1134
 
1124
- bool safe_strto128_base(absl::string_view text, absl::Nonnull<int128*> value,
1135
+ bool safe_strto128_base(absl::string_view text, int128* absl_nonnull value,
1125
1136
  int base) {
1126
1137
  return safe_int_internal<absl::int128>(text, value, base);
1127
1138
  }
1128
1139
 
1129
- bool safe_strtou32_base(absl::string_view text, absl::Nonnull<uint32_t*> value,
1140
+ bool safe_strtou8_base(absl::string_view text, uint8_t* absl_nonnull value,
1141
+ int base) {
1142
+ return safe_uint_internal<uint8_t>(text, value, base);
1143
+ }
1144
+
1145
+ bool safe_strtou16_base(absl::string_view text, uint16_t* absl_nonnull value,
1146
+ int base) {
1147
+ return safe_uint_internal<uint16_t>(text, value, base);
1148
+ }
1149
+
1150
+ bool safe_strtou32_base(absl::string_view text, uint32_t* absl_nonnull value,
1130
1151
  int base) {
1131
1152
  return safe_uint_internal<uint32_t>(text, value, base);
1132
1153
  }
1133
1154
 
1134
- bool safe_strtou64_base(absl::string_view text, absl::Nonnull<uint64_t*> value,
1155
+ bool safe_strtou64_base(absl::string_view text, uint64_t* absl_nonnull value,
1135
1156
  int base) {
1136
1157
  return safe_uint_internal<uint64_t>(text, value, base);
1137
1158
  }
1138
1159
 
1139
- bool safe_strtou128_base(absl::string_view text, absl::Nonnull<uint128*> value,
1160
+ bool safe_strtou128_base(absl::string_view text, uint128* absl_nonnull value,
1140
1161
  int base) {
1141
1162
  return safe_uint_internal<absl::uint128>(text, value, base);
1142
1163
  }