grpc 1.37.1 → 1.38.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -0,0 +1,64 @@
1
+ // Copyright 2020 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_
16
+ #define ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_
17
+
18
+ #include "absl/meta/type_traits.h"
19
+ #include "absl/strings/string_view.h"
20
+
21
+ namespace absl {
22
+ ABSL_NAMESPACE_BEGIN
23
+ namespace strings_internal {
24
+
25
+ // StringConstant<T> represents a compile time string constant.
26
+ // It can be accessed via its `absl::string_view value` static member.
27
+ // It is guaranteed that the `string_view` returned has constant `.data()`,
28
+ // constant `.size()` and constant `value[i]` for all `0 <= i < .size()`
29
+ //
30
+ // The `T` is an opaque type. It is guaranteed that different string constants
31
+ // will have different values of `T`. This allows users to associate the string
32
+ // constant with other static state at compile time.
33
+ //
34
+ // Instances should be made using the `MakeStringConstant()` factory function
35
+ // below.
36
+ template <typename T>
37
+ struct StringConstant {
38
+ static constexpr absl::string_view value = T{}();
39
+ constexpr absl::string_view operator()() const { return value; }
40
+
41
+ // Check to be sure `view` points to constant data.
42
+ // Otherwise, it can't be constant evaluated.
43
+ static_assert(value.empty() || 2 * value[0] != 1,
44
+ "The input string_view must point to constant data.");
45
+ };
46
+
47
+ template <typename T>
48
+ constexpr absl::string_view StringConstant<T>::value; // NOLINT
49
+
50
+ // Factory function for `StringConstant` instances.
51
+ // It supports callables that have a constexpr default constructor and a
52
+ // constexpr operator().
53
+ // It must return an `absl::string_view` or `const char*` pointing to constant
54
+ // data. This is validated at compile time.
55
+ template <typename T>
56
+ constexpr StringConstant<T> MakeStringConstant(T) {
57
+ return {};
58
+ }
59
+
60
+ } // namespace strings_internal
61
+ ABSL_NAMESPACE_END
62
+ } // namespace absl
63
+
64
+ #endif // ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_
@@ -19,19 +19,22 @@
19
19
  namespace absl {
20
20
  ABSL_NAMESPACE_BEGIN
21
21
 
22
- bool EqualsIgnoreCase(absl::string_view piece1, absl::string_view piece2) {
22
+ bool EqualsIgnoreCase(absl::string_view piece1,
23
+ absl::string_view piece2) noexcept {
23
24
  return (piece1.size() == piece2.size() &&
24
25
  0 == absl::strings_internal::memcasecmp(piece1.data(), piece2.data(),
25
26
  piece1.size()));
26
27
  // memcasecmp uses absl::ascii_tolower().
27
28
  }
28
29
 
29
- bool StartsWithIgnoreCase(absl::string_view text, absl::string_view prefix) {
30
+ bool StartsWithIgnoreCase(absl::string_view text,
31
+ absl::string_view prefix) noexcept {
30
32
  return (text.size() >= prefix.size()) &&
31
33
  EqualsIgnoreCase(text.substr(0, prefix.size()), prefix);
32
34
  }
33
35
 
34
- bool EndsWithIgnoreCase(absl::string_view text, absl::string_view suffix) {
36
+ bool EndsWithIgnoreCase(absl::string_view text,
37
+ absl::string_view suffix) noexcept {
35
38
  return (text.size() >= suffix.size()) &&
36
39
  EqualsIgnoreCase(text.substr(text.size() - suffix.size()), suffix);
37
40
  }
@@ -43,14 +43,20 @@ ABSL_NAMESPACE_BEGIN
43
43
  // StrContains()
44
44
  //
45
45
  // Returns whether a given string `haystack` contains the substring `needle`.
46
- inline bool StrContains(absl::string_view haystack, absl::string_view needle) {
46
+ inline bool StrContains(absl::string_view haystack,
47
+ absl::string_view needle) noexcept {
47
48
  return haystack.find(needle, 0) != haystack.npos;
48
49
  }
49
50
 
51
+ inline bool StrContains(absl::string_view haystack, char needle) noexcept {
52
+ return haystack.find(needle) != haystack.npos;
53
+ }
54
+
50
55
  // StartsWith()
51
56
  //
52
57
  // Returns whether a given string `text` begins with `prefix`.
53
- inline bool StartsWith(absl::string_view text, absl::string_view prefix) {
58
+ inline bool StartsWith(absl::string_view text,
59
+ absl::string_view prefix) noexcept {
54
60
  return prefix.empty() ||
55
61
  (text.size() >= prefix.size() &&
56
62
  memcmp(text.data(), prefix.data(), prefix.size()) == 0);
@@ -59,7 +65,8 @@ inline bool StartsWith(absl::string_view text, absl::string_view prefix) {
59
65
  // EndsWith()
60
66
  //
61
67
  // Returns whether a given string `text` ends with `suffix`.
62
- inline bool EndsWith(absl::string_view text, absl::string_view suffix) {
68
+ inline bool EndsWith(absl::string_view text,
69
+ absl::string_view suffix) noexcept {
63
70
  return suffix.empty() ||
64
71
  (text.size() >= suffix.size() &&
65
72
  memcmp(text.data() + (text.size() - suffix.size()), suffix.data(),
@@ -70,19 +77,22 @@ inline bool EndsWith(absl::string_view text, absl::string_view suffix) {
70
77
  //
71
78
  // Returns whether given ASCII strings `piece1` and `piece2` are equal, ignoring
72
79
  // case in the comparison.
73
- bool EqualsIgnoreCase(absl::string_view piece1, absl::string_view piece2);
80
+ bool EqualsIgnoreCase(absl::string_view piece1,
81
+ absl::string_view piece2) noexcept;
74
82
 
75
83
  // StartsWithIgnoreCase()
76
84
  //
77
85
  // Returns whether a given ASCII string `text` starts with `prefix`,
78
86
  // ignoring case in the comparison.
79
- bool StartsWithIgnoreCase(absl::string_view text, absl::string_view prefix);
87
+ bool StartsWithIgnoreCase(absl::string_view text,
88
+ absl::string_view prefix) noexcept;
80
89
 
81
90
  // EndsWithIgnoreCase()
82
91
  //
83
92
  // Returns whether a given ASCII string `text` ends with `suffix`, ignoring
84
93
  // case in the comparison.
85
- bool EndsWithIgnoreCase(absl::string_view text, absl::string_view suffix);
94
+ bool EndsWithIgnoreCase(absl::string_view text,
95
+ absl::string_view suffix) noexcept;
86
96
 
87
97
  ABSL_NAMESPACE_END
88
98
  } // namespace absl
@@ -31,8 +31,8 @@
31
31
  #include <utility>
32
32
 
33
33
  #include "absl/base/attributes.h"
34
- #include "absl/base/internal/bits.h"
35
34
  #include "absl/base/internal/raw_logging.h"
35
+ #include "absl/numeric/bits.h"
36
36
  #include "absl/strings/ascii.h"
37
37
  #include "absl/strings/charconv.h"
38
38
  #include "absl/strings/escaping.h"
@@ -46,8 +46,13 @@ ABSL_NAMESPACE_BEGIN
46
46
  bool SimpleAtof(absl::string_view str, float* out) {
47
47
  *out = 0.0;
48
48
  str = StripAsciiWhitespace(str);
49
+ // std::from_chars doesn't accept an initial +, but SimpleAtof does, so if one
50
+ // is present, skip it, while avoiding accepting "+-0" as valid.
49
51
  if (!str.empty() && str[0] == '+') {
50
52
  str.remove_prefix(1);
53
+ if (!str.empty() && str[0] == '-') {
54
+ return false;
55
+ }
51
56
  }
52
57
  auto result = absl::from_chars(str.data(), str.data() + str.size(), *out);
53
58
  if (result.ec == std::errc::invalid_argument) {
@@ -72,8 +77,13 @@ bool SimpleAtof(absl::string_view str, float* out) {
72
77
  bool SimpleAtod(absl::string_view str, double* out) {
73
78
  *out = 0.0;
74
79
  str = StripAsciiWhitespace(str);
80
+ // std::from_chars doesn't accept an initial +, but SimpleAtod does, so if one
81
+ // is present, skip it, while avoiding accepting "+-0" as valid.
75
82
  if (!str.empty() && str[0] == '+') {
76
83
  str.remove_prefix(1);
84
+ if (!str.empty() && str[0] == '-') {
85
+ return false;
86
+ }
77
87
  }
78
88
  auto result = absl::from_chars(str.data(), str.data() + str.size(), *out);
79
89
  if (result.ec == std::errc::invalid_argument) {
@@ -303,7 +313,7 @@ static std::pair<uint64_t, uint64_t> Mul32(std::pair<uint64_t, uint64_t> num,
303
313
  uint64_t bits128_up = (bits96_127 >> 32) + (bits64_127 < bits64_95);
304
314
  if (bits128_up == 0) return {bits64_127, bits0_63};
305
315
 
306
- int shift = 64 - base_internal::CountLeadingZeros64(bits128_up);
316
+ auto shift = static_cast<unsigned>(bit_width(bits128_up));
307
317
  uint64_t lo = (bits0_63 >> shift) + (bits64_127 << (64 - shift));
308
318
  uint64_t hi = (bits64_127 >> shift) + (bits128_up << (64 - shift));
309
319
  return {hi, lo};
@@ -334,7 +344,7 @@ static std::pair<uint64_t, uint64_t> PowFive(uint64_t num, int expfive) {
334
344
  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5,
335
345
  5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5};
336
346
  result = Mul32(result, powers_of_five[expfive & 15]);
337
- int shift = base_internal::CountLeadingZeros64(result.first);
347
+ int shift = countl_zero(result.first);
338
348
  if (shift != 0) {
339
349
  result.first = (result.first << shift) + (result.second >> (64 - shift));
340
350
  result.second = (result.second << shift);
@@ -736,9 +746,18 @@ struct LookupTables {
736
746
  X / 35, X / 36, \
737
747
  }
738
748
 
749
+ // This kVmaxOverBase is generated with
750
+ // for (int base = 2; base < 37; ++base) {
751
+ // absl::uint128 max = std::numeric_limits<absl::uint128>::max();
752
+ // auto result = max / base;
753
+ // std::cout << " MakeUint128(" << absl::Uint128High64(result) << "u, "
754
+ // << absl::Uint128Low64(result) << "u),\n";
755
+ // }
756
+ // See https://godbolt.org/z/aneYsb
757
+ //
739
758
  // uint128& operator/=(uint128) is not constexpr, so hardcode the resulting
740
759
  // array to avoid a static initializer.
741
- template <>
760
+ template<>
742
761
  const uint128 LookupTables<uint128>::kVmaxOverBase[] = {
743
762
  0,
744
763
  0,
@@ -779,6 +798,111 @@ const uint128 LookupTables<uint128>::kVmaxOverBase[] = {
779
798
  MakeUint128(512409557603043100u, 8198552921648689607u),
780
799
  };
781
800
 
801
+ // This kVmaxOverBase generated with
802
+ // for (int base = 2; base < 37; ++base) {
803
+ // absl::int128 max = std::numeric_limits<absl::int128>::max();
804
+ // auto result = max / base;
805
+ // std::cout << "\tMakeInt128(" << absl::Int128High64(result) << ", "
806
+ // << absl::Int128Low64(result) << "u),\n";
807
+ // }
808
+ // See https://godbolt.org/z/7djYWz
809
+ //
810
+ // int128& operator/=(int128) is not constexpr, so hardcode the resulting array
811
+ // to avoid a static initializer.
812
+ template<>
813
+ const int128 LookupTables<int128>::kVmaxOverBase[] = {
814
+ 0,
815
+ 0,
816
+ MakeInt128(4611686018427387903, 18446744073709551615u),
817
+ MakeInt128(3074457345618258602, 12297829382473034410u),
818
+ MakeInt128(2305843009213693951, 18446744073709551615u),
819
+ MakeInt128(1844674407370955161, 11068046444225730969u),
820
+ MakeInt128(1537228672809129301, 6148914691236517205u),
821
+ MakeInt128(1317624576693539401, 2635249153387078802u),
822
+ MakeInt128(1152921504606846975, 18446744073709551615u),
823
+ MakeInt128(1024819115206086200, 16397105843297379214u),
824
+ MakeInt128(922337203685477580, 14757395258967641292u),
825
+ MakeInt128(838488366986797800, 13415813871788764811u),
826
+ MakeInt128(768614336404564650, 12297829382473034410u),
827
+ MakeInt128(709490156681136600, 11351842506898185609u),
828
+ MakeInt128(658812288346769700, 10540996613548315209u),
829
+ MakeInt128(614891469123651720, 9838263505978427528u),
830
+ MakeInt128(576460752303423487, 18446744073709551615u),
831
+ MakeInt128(542551296285575047, 9765923333140350855u),
832
+ MakeInt128(512409557603043100, 8198552921648689607u),
833
+ MakeInt128(485440633518672410, 17475862806672206794u),
834
+ MakeInt128(461168601842738790, 7378697629483820646u),
835
+ MakeInt128(439208192231179800, 7027331075698876806u),
836
+ MakeInt128(419244183493398900, 6707906935894382405u),
837
+ MakeInt128(401016175515425035, 2406097053092550210u),
838
+ MakeInt128(384307168202282325, 6148914691236517205u),
839
+ MakeInt128(368934881474191032, 5902958103587056517u),
840
+ MakeInt128(354745078340568300, 5675921253449092804u),
841
+ MakeInt128(341606371735362066, 17763531330238827482u),
842
+ MakeInt128(329406144173384850, 5270498306774157604u),
843
+ MakeInt128(318047311615681924, 7633135478776366185u),
844
+ MakeInt128(307445734561825860, 4919131752989213764u),
845
+ MakeInt128(297528130221121800, 4760450083537948804u),
846
+ MakeInt128(288230376151711743, 18446744073709551615u),
847
+ MakeInt128(279496122328932600, 4471937957262921603u),
848
+ MakeInt128(271275648142787523, 14106333703424951235u),
849
+ MakeInt128(263524915338707880, 4216398645419326083u),
850
+ MakeInt128(256204778801521550, 4099276460824344803u),
851
+ };
852
+
853
+ // This kVminOverBase generated with
854
+ // for (int base = 2; base < 37; ++base) {
855
+ // absl::int128 min = std::numeric_limits<absl::int128>::min();
856
+ // auto result = min / base;
857
+ // std::cout << "\tMakeInt128(" << absl::Int128High64(result) << ", "
858
+ // << absl::Int128Low64(result) << "u),\n";
859
+ // }
860
+ //
861
+ // See https://godbolt.org/z/7djYWz
862
+ //
863
+ // int128& operator/=(int128) is not constexpr, so hardcode the resulting array
864
+ // to avoid a static initializer.
865
+ template<>
866
+ const int128 LookupTables<int128>::kVminOverBase[] = {
867
+ 0,
868
+ 0,
869
+ MakeInt128(-4611686018427387904, 0u),
870
+ MakeInt128(-3074457345618258603, 6148914691236517206u),
871
+ MakeInt128(-2305843009213693952, 0u),
872
+ MakeInt128(-1844674407370955162, 7378697629483820647u),
873
+ MakeInt128(-1537228672809129302, 12297829382473034411u),
874
+ MakeInt128(-1317624576693539402, 15811494920322472814u),
875
+ MakeInt128(-1152921504606846976, 0u),
876
+ MakeInt128(-1024819115206086201, 2049638230412172402u),
877
+ MakeInt128(-922337203685477581, 3689348814741910324u),
878
+ MakeInt128(-838488366986797801, 5030930201920786805u),
879
+ MakeInt128(-768614336404564651, 6148914691236517206u),
880
+ MakeInt128(-709490156681136601, 7094901566811366007u),
881
+ MakeInt128(-658812288346769701, 7905747460161236407u),
882
+ MakeInt128(-614891469123651721, 8608480567731124088u),
883
+ MakeInt128(-576460752303423488, 0u),
884
+ MakeInt128(-542551296285575048, 8680820740569200761u),
885
+ MakeInt128(-512409557603043101, 10248191152060862009u),
886
+ MakeInt128(-485440633518672411, 970881267037344822u),
887
+ MakeInt128(-461168601842738791, 11068046444225730970u),
888
+ MakeInt128(-439208192231179801, 11419412998010674810u),
889
+ MakeInt128(-419244183493398901, 11738837137815169211u),
890
+ MakeInt128(-401016175515425036, 16040647020617001406u),
891
+ MakeInt128(-384307168202282326, 12297829382473034411u),
892
+ MakeInt128(-368934881474191033, 12543785970122495099u),
893
+ MakeInt128(-354745078340568301, 12770822820260458812u),
894
+ MakeInt128(-341606371735362067, 683212743470724134u),
895
+ MakeInt128(-329406144173384851, 13176245766935394012u),
896
+ MakeInt128(-318047311615681925, 10813608594933185431u),
897
+ MakeInt128(-307445734561825861, 13527612320720337852u),
898
+ MakeInt128(-297528130221121801, 13686293990171602812u),
899
+ MakeInt128(-288230376151711744, 0u),
900
+ MakeInt128(-279496122328932601, 13974806116446630013u),
901
+ MakeInt128(-271275648142787524, 4340410370284600381u),
902
+ MakeInt128(-263524915338707881, 14230345428290225533u),
903
+ MakeInt128(-256204778801521551, 14347467612885206813u),
904
+ };
905
+
782
906
  template <typename IntType>
783
907
  const IntType LookupTables<IntType>::kVmaxOverBase[] =
784
908
  X_OVER_BASE_INITIALIZER(std::numeric_limits<IntType>::max());
@@ -948,6 +1072,10 @@ bool safe_strto64_base(absl::string_view text, int64_t* value, int base) {
948
1072
  return safe_int_internal<int64_t>(text, value, base);
949
1073
  }
950
1074
 
1075
+ bool safe_strto128_base(absl::string_view text, int128* value, int base) {
1076
+ return safe_int_internal<absl::int128>(text, value, base);
1077
+ }
1078
+
951
1079
  bool safe_strtou32_base(absl::string_view text, uint32_t* value, int base) {
952
1080
  return safe_uint_internal<uint32_t>(text, value, base);
953
1081
  }
@@ -1,4 +1,3 @@
1
- //
2
1
  // Copyright 2017 The Abseil Authors.
3
2
  //
4
3
  // Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,7 +36,6 @@
37
36
  #include <type_traits>
38
37
 
39
38
  #include "absl/base/config.h"
40
- #include "absl/base/internal/bits.h"
41
39
  #ifdef __SSE4_2__
42
40
  // TODO(jorg): Remove this when we figure out the right way
43
41
  // to swap bytes on SSE 4.2 that works with the compilers
@@ -48,6 +46,7 @@
48
46
  #endif
49
47
  #include "absl/base/macros.h"
50
48
  #include "absl/base/port.h"
49
+ #include "absl/numeric/bits.h"
51
50
  #include "absl/numeric/int128.h"
52
51
  #include "absl/strings/string_view.h"
53
52
 
@@ -125,8 +124,11 @@ inline void PutTwoDigits(size_t i, char* buf) {
125
124
  }
126
125
 
127
126
  // safe_strto?() functions for implementing SimpleAtoi()
127
+
128
128
  bool safe_strto32_base(absl::string_view text, int32_t* value, int base);
129
129
  bool safe_strto64_base(absl::string_view text, int64_t* value, int base);
130
+ bool safe_strto128_base(absl::string_view text, absl::int128* value,
131
+ int base);
130
132
  bool safe_strtou32_base(absl::string_view text, uint32_t* value, int base);
131
133
  bool safe_strtou64_base(absl::string_view text, uint64_t* value, int base);
132
134
  bool safe_strtou128_base(absl::string_view text, absl::uint128* value,
@@ -238,23 +240,21 @@ inline size_t FastHexToBufferZeroPad16(uint64_t val, char* out) {
238
240
  }
239
241
  #endif
240
242
  // | 0x1 so that even 0 has 1 digit.
241
- return 16 - absl::base_internal::CountLeadingZeros64(val | 0x1) / 4;
243
+ return 16 - countl_zero(val | 0x1) / 4;
242
244
  }
243
245
 
244
246
  } // namespace numbers_internal
245
247
 
246
- // SimpleAtoi()
247
- //
248
- // Converts a string to an integer, using `safe_strto?()` functions for actual
249
- // parsing, returning `true` if successful. The `safe_strto?()` functions apply
250
- // strict checking; the string must be a base-10 integer, optionally followed or
251
- // preceded by ASCII whitespace, with a value in the range of the corresponding
252
- // integer type.
253
248
  template <typename int_type>
254
249
  ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view str, int_type* out) {
255
250
  return numbers_internal::safe_strtoi_base(str, out, 10);
256
251
  }
257
252
 
253
+ ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str,
254
+ absl::int128* out) {
255
+ return numbers_internal::safe_strto128_base(str, out, 10);
256
+ }
257
+
258
258
  ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str,
259
259
  absl::uint128* out) {
260
260
  return numbers_internal::safe_strtou128_base(str, out, 10);
@@ -144,7 +144,7 @@ strings_internal::DereferenceFormatterImpl<Formatter> DereferenceFormatter(
144
144
  std::forward<Formatter>(f));
145
145
  }
146
146
 
147
- // Function overload of `DererefenceFormatter()` for using a default
147
+ // Function overload of `DereferenceFormatter()` for using a default
148
148
  // `AlphaNumFormatter()`.
149
149
  inline strings_internal::DereferenceFormatterImpl<
150
150
  strings_internal::AlphaNumFormatterImpl>
@@ -369,6 +369,12 @@ struct SkipWhitespace {
369
369
  }
370
370
  };
371
371
 
372
+ template <typename T>
373
+ using EnableSplitIfString =
374
+ typename std::enable_if<std::is_same<T, std::string>::value ||
375
+ std::is_same<T, const std::string>::value,
376
+ int>::type;
377
+
372
378
  //------------------------------------------------------------------------------
373
379
  // StrSplit()
374
380
  //------------------------------------------------------------------------------
@@ -489,22 +495,50 @@ struct SkipWhitespace {
489
495
  // Try not to depend on this distinction because the bug may one day be fixed.
490
496
  template <typename Delimiter>
491
497
  strings_internal::Splitter<
492
- typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty>
498
+ typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty,
499
+ absl::string_view>
493
500
  StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d) {
494
501
  using DelimiterType =
495
502
  typename strings_internal::SelectDelimiter<Delimiter>::type;
496
- return strings_internal::Splitter<DelimiterType, AllowEmpty>(
503
+ return strings_internal::Splitter<DelimiterType, AllowEmpty,
504
+ absl::string_view>(
505
+ text.value(), DelimiterType(d), AllowEmpty());
506
+ }
507
+
508
+ template <typename Delimiter, typename StringType,
509
+ EnableSplitIfString<StringType> = 0>
510
+ strings_internal::Splitter<
511
+ typename strings_internal::SelectDelimiter<Delimiter>::type, AllowEmpty,
512
+ std::string>
513
+ StrSplit(StringType&& text, Delimiter d) {
514
+ using DelimiterType =
515
+ typename strings_internal::SelectDelimiter<Delimiter>::type;
516
+ return strings_internal::Splitter<DelimiterType, AllowEmpty, std::string>(
497
517
  std::move(text), DelimiterType(d), AllowEmpty());
498
518
  }
499
519
 
500
520
  template <typename Delimiter, typename Predicate>
501
521
  strings_internal::Splitter<
502
- typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate>
522
+ typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate,
523
+ absl::string_view>
503
524
  StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d,
504
525
  Predicate p) {
505
526
  using DelimiterType =
506
527
  typename strings_internal::SelectDelimiter<Delimiter>::type;
507
- return strings_internal::Splitter<DelimiterType, Predicate>(
528
+ return strings_internal::Splitter<DelimiterType, Predicate,
529
+ absl::string_view>(
530
+ text.value(), DelimiterType(d), std::move(p));
531
+ }
532
+
533
+ template <typename Delimiter, typename Predicate, typename StringType,
534
+ EnableSplitIfString<StringType> = 0>
535
+ strings_internal::Splitter<
536
+ typename strings_internal::SelectDelimiter<Delimiter>::type, Predicate,
537
+ std::string>
538
+ StrSplit(StringType&& text, Delimiter d, Predicate p) {
539
+ using DelimiterType =
540
+ typename strings_internal::SelectDelimiter<Delimiter>::type;
541
+ return strings_internal::Splitter<DelimiterType, Predicate, std::string>(
508
542
  std::move(text), DelimiterType(d), std::move(p));
509
543
  }
510
544