grpc 1.24.0 → 1.25.0

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 (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -77,12 +77,11 @@ struct HandshakerArgs {
77
77
  class Handshaker : public RefCounted<Handshaker> {
78
78
  public:
79
79
  virtual ~Handshaker() = default;
80
- virtual void Shutdown(grpc_error* why) GRPC_ABSTRACT;
80
+ virtual void Shutdown(grpc_error* why) = 0;
81
81
  virtual void DoHandshake(grpc_tcp_server_acceptor* acceptor,
82
82
  grpc_closure* on_handshake_done,
83
- HandshakerArgs* args) GRPC_ABSTRACT;
84
- virtual const char* name() const GRPC_ABSTRACT;
85
- GRPC_ABSTRACT_BASE_CLASS
83
+ HandshakerArgs* args) = 0;
84
+ virtual const char* name() const = 0;
86
85
  };
87
86
 
88
87
  //
@@ -33,10 +33,8 @@ class HandshakerFactory {
33
33
  public:
34
34
  virtual void AddHandshakers(const grpc_channel_args* args,
35
35
  grpc_pollset_set* interested_parties,
36
- HandshakeManager* handshake_mgr) GRPC_ABSTRACT;
36
+ HandshakeManager* handshake_mgr) = 0;
37
37
  virtual ~HandshakerFactory() = default;
38
-
39
- GRPC_ABSTRACT_BASE_CLASS
40
38
  };
41
39
 
42
40
  } // namespace grpc_core
@@ -116,12 +116,13 @@ typedef TraceFlag DebugOnlyTraceFlag;
116
116
  #else
117
117
  class DebugOnlyTraceFlag {
118
118
  public:
119
- constexpr DebugOnlyTraceFlag(bool default_enabled, const char* name) {}
119
+ constexpr DebugOnlyTraceFlag(bool /*default_enabled*/, const char* /*name*/) {
120
+ }
120
121
  constexpr bool enabled() const { return false; }
121
122
  constexpr const char* name() const { return "DebugOnlyTraceFlag"; }
122
123
 
123
124
  private:
124
- void set_enabled(bool enabled) {}
125
+ void set_enabled(bool /*enabled*/) {}
125
126
  };
126
127
  #endif
127
128
 
@@ -64,14 +64,14 @@ Arena* Arena::Create(size_t initial_size) {
64
64
  return new (ArenaStorage(initial_size)) Arena(initial_size);
65
65
  }
66
66
 
67
- Pair<Arena*, void*> Arena::CreateWithAlloc(size_t initial_size,
68
- size_t alloc_size) {
67
+ std::pair<Arena*, void*> Arena::CreateWithAlloc(size_t initial_size,
68
+ size_t alloc_size) {
69
69
  static constexpr size_t base_size =
70
70
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(Arena));
71
71
  auto* new_arena =
72
72
  new (ArenaStorage(initial_size)) Arena(initial_size, alloc_size);
73
73
  void* first_alloc = reinterpret_cast<char*>(new_arena) + base_size;
74
- return MakePair(new_arena, first_alloc);
74
+ return std::make_pair(new_arena, first_alloc);
75
75
  }
76
76
 
77
77
  size_t Arena::Destroy() {
@@ -36,7 +36,6 @@
36
36
  #include "src/core/lib/gpr/alloc.h"
37
37
  #include "src/core/lib/gpr/spinlock.h"
38
38
  #include "src/core/lib/gprpp/atomic.h"
39
- #include "src/core/lib/gprpp/pair.h"
40
39
 
41
40
  #include <stddef.h>
42
41
 
@@ -50,8 +49,8 @@ class Arena {
50
49
  // Create an arena, with \a initial_size bytes in the first allocated buffer,
51
50
  // and return both a void pointer to the returned arena and a void* with the
52
51
  // first allocation.
53
- static Pair<Arena*, void*> CreateWithAlloc(size_t initial_size,
54
- size_t alloc_size);
52
+ static std::pair<Arena*, void*> CreateWithAlloc(size_t initial_size,
53
+ size_t alloc_size);
55
54
 
56
55
  // Destroy an arena, returning the total number of bytes allocated.
57
56
  size_t Destroy();
@@ -107,6 +107,10 @@ class InlinedVector {
107
107
  return true;
108
108
  }
109
109
 
110
+ bool operator!=(const InlinedVector& other) const {
111
+ return !(*this == other);
112
+ }
113
+
110
114
  void reserve(size_t capacity) {
111
115
  if (capacity > capacity_) {
112
116
  T* new_dynamic =
@@ -121,6 +125,11 @@ class InlinedVector {
121
125
  }
122
126
  }
123
127
 
128
+ void resize(size_t new_size) {
129
+ while (new_size > size_) emplace_back();
130
+ while (new_size < size_) pop_back();
131
+ }
132
+
124
133
  template <typename... Args>
125
134
  void emplace_back(Args&&... args) {
126
135
  if (size_ == capacity_) {
@@ -26,19 +26,18 @@
26
26
  #include <algorithm>
27
27
  #include <functional>
28
28
  #include <iterator>
29
-
30
- #if GRPC_USE_CPP_STD_LIB
31
29
  #include <map>
32
- #endif
33
30
 
34
31
  #include "src/core/lib/gpr/useful.h"
35
32
  #include "src/core/lib/gprpp/memory.h"
36
- #include "src/core/lib/gprpp/pair.h"
37
33
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
38
34
  #include "src/core/lib/gprpp/string_view.h"
39
35
 
40
36
  namespace grpc_core {
41
37
 
38
+ template <class Key, class T, class Compare = std::less<Key>>
39
+ using Map = std::map<Key, T, Compare, Allocator<std::pair<const Key, T>>>;
40
+
42
41
  struct StringLess {
43
42
  bool operator()(const char* a, const char* b) const {
44
43
  return strcmp(a, b) < 0;
@@ -62,503 +61,6 @@ struct RefCountedPtrLess {
62
61
  }
63
62
  };
64
63
 
65
- #if GRPC_USE_CPP_STD_LIB
66
-
67
- template <class Key, class T, class Compare = std::less<Key>>
68
- using Map = std::map<Key, T, Compare>;
69
-
70
- #else // GRPC_USE_CPP_STD_LIB
71
-
72
- namespace testing {
73
- class MapTest;
74
- }
75
-
76
- // Alternative map implementation for grpc_core
77
- template <class Key, class T, class Compare = std::less<Key>>
78
- class Map {
79
- public:
80
- typedef Key key_type;
81
- typedef T mapped_type;
82
- typedef Pair<key_type, mapped_type> value_type;
83
- typedef Compare key_compare;
84
- class iterator;
85
- class const_iterator;
86
-
87
- Map() = default;
88
- ~Map() { clear(); }
89
-
90
- // Movable.
91
- Map(Map&& other) : root_(other.root_), size_(other.size_) {
92
- other.root_ = nullptr;
93
- other.size_ = 0;
94
- }
95
- Map& operator=(Map&& other) {
96
- if (this != &other) {
97
- clear();
98
- root_ = other.root_;
99
- size_ = other.size_;
100
- other.root_ = nullptr;
101
- other.size_ = 0;
102
- }
103
- return *this;
104
- }
105
-
106
- // Copyable.
107
- Map(const Map& other) {
108
- for (const auto& p : other) {
109
- emplace(p);
110
- }
111
- }
112
- Map& operator=(const Map& other) {
113
- if (this != &other) {
114
- clear();
115
- for (const auto& p : other) {
116
- emplace(p);
117
- }
118
- }
119
- return *this;
120
- }
121
-
122
- T& operator[](key_type&& key);
123
- T& operator[](const key_type& key);
124
- iterator find(const key_type& k);
125
- size_t erase(const key_type& key);
126
- // Removes the current entry and points to the next one
127
- iterator erase(iterator iter);
128
-
129
- size_t size() const { return size_; }
130
-
131
- template <class... Args>
132
- Pair<iterator, bool> emplace(Args&&... args);
133
-
134
- Pair<iterator, bool> insert(value_type&& pair) {
135
- return emplace(std::move(pair));
136
- }
137
-
138
- Pair<iterator, bool> insert(const value_type& pair) { return emplace(pair); }
139
-
140
- bool empty() const { return root_ == nullptr; }
141
-
142
- void clear() {
143
- auto iter = begin();
144
- while (!empty()) {
145
- iter = erase(iter);
146
- }
147
- }
148
-
149
- iterator begin() {
150
- Entry* curr = GetMinEntry(root_);
151
- return iterator(this, curr);
152
- }
153
-
154
- iterator end() { return iterator(this, nullptr); }
155
-
156
- const_iterator begin() const {
157
- Entry* curr = GetMinEntry(root_);
158
- return const_iterator(this, curr);
159
- }
160
-
161
- const_iterator end() const { return const_iterator(this, nullptr); }
162
-
163
- iterator lower_bound(const Key& k) {
164
- // This is a workaround for "const key_compare compare;"
165
- // because some versions of compilers cannot build this by requiring
166
- // a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
167
- key_compare compare_tmp;
168
- const key_compare& compare = compare_tmp;
169
- return std::find_if(begin(), end(), [&k, &compare](const value_type& v) {
170
- return !compare(v.first, k);
171
- });
172
- }
173
-
174
- private:
175
- friend class testing::MapTest;
176
- struct Entry {
177
- explicit Entry(value_type&& pair) : pair(std::move(pair)) {}
178
- value_type pair;
179
- Entry* left = nullptr;
180
- Entry* right = nullptr;
181
- int32_t height = 1;
182
- };
183
-
184
- static int32_t EntryHeight(const Entry* e) {
185
- return e == nullptr ? 0 : e->height;
186
- }
187
-
188
- static Entry* GetMinEntry(Entry* e);
189
- Entry* InOrderSuccessor(const Entry* e) const;
190
- static Entry* RotateLeft(Entry* e);
191
- static Entry* RotateRight(Entry* e);
192
- static Entry* RebalanceTreeAfterInsertion(Entry* root, const key_type& k);
193
- static Entry* RebalanceTreeAfterDeletion(Entry* root);
194
- // Returns a pair with the first value being an iterator pointing to the
195
- // inserted entry and the second value being the new root of the subtree
196
- // after a rebalance
197
- Pair<iterator, Entry*> InsertRecursive(Entry* root, value_type&& p);
198
- // Returns a pair with the first value being an iterator pointing to the
199
- // successor of the deleted entry and the second value being the new root of
200
- // the subtree after a rebalance
201
- Pair<iterator, Entry*> RemoveRecursive(Entry* root, const key_type& k);
202
- // Return 0 if lhs = rhs
203
- // 1 if lhs > rhs
204
- // -1 if lhs < rhs
205
- static int CompareKeys(const Key& lhs, const Key& rhs);
206
-
207
- Entry* root_ = nullptr;
208
- size_t size_ = 0;
209
- };
210
-
211
- template <class Key, class T, class Compare>
212
- class Map<Key, T, Compare>::iterator
213
- : public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
214
- Pair<Key, T>*, Pair<Key, T>&> {
215
- public:
216
- iterator(const iterator& iter) : curr_(iter.curr_), map_(iter.map_) {}
217
- bool operator==(const iterator& rhs) const { return (curr_ == rhs.curr_); }
218
- bool operator!=(const iterator& rhs) const { return (curr_ != rhs.curr_); }
219
-
220
- iterator& operator++() {
221
- curr_ = map_->InOrderSuccessor(curr_);
222
- return *this;
223
- }
224
-
225
- iterator operator++(int) {
226
- Entry* prev = curr_;
227
- curr_ = map_->InOrderSuccessor(curr_);
228
- return iterator(map_, prev);
229
- }
230
-
231
- iterator& operator=(const iterator& other) {
232
- if (this != &other) {
233
- this->curr_ = other.curr_;
234
- this->map_ = other.map_;
235
- }
236
- return *this;
237
- }
238
-
239
- // operator*()
240
- value_type& operator*() { return curr_->pair; }
241
- const value_type& operator*() const { return curr_->pair; }
242
-
243
- // operator->()
244
- value_type* operator->() { return &curr_->pair; }
245
- value_type const* operator->() const { return &curr_->pair; }
246
-
247
- private:
248
- friend class Map<key_type, mapped_type, key_compare>;
249
- using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
250
- iterator(GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
251
- Entry* curr_;
252
- GrpcMap* map_;
253
- };
254
-
255
- template <class Key, class T, class Compare>
256
- class Map<Key, T, Compare>::const_iterator
257
- : public std::iterator<std::input_iterator_tag, Pair<Key, T>, int32_t,
258
- Pair<Key, T>*, Pair<Key, T>&> {
259
- public:
260
- const_iterator(const const_iterator& iter)
261
- : curr_(iter.curr_), map_(iter.map_) {}
262
- bool operator==(const const_iterator& rhs) const {
263
- return (curr_ == rhs.curr_);
264
- }
265
- bool operator!=(const const_iterator& rhs) const {
266
- return (curr_ != rhs.curr_);
267
- }
268
-
269
- const_iterator& operator++() {
270
- curr_ = map_->InOrderSuccessor(curr_);
271
- return *this;
272
- }
273
-
274
- const_iterator operator++(int) {
275
- Entry* prev = curr_;
276
- curr_ = map_->InOrderSuccessor(curr_);
277
- return const_iterator(map_, prev);
278
- }
279
-
280
- const_iterator& operator=(const const_iterator& other) {
281
- if (this != &other) {
282
- this->curr_ = other.curr_;
283
- this->map_ = other.map_;
284
- }
285
- return *this;
286
- }
287
-
288
- // operator*()
289
- const value_type& operator*() const { return curr_->pair; }
290
-
291
- // operator->()
292
- const value_type* operator->() const { return &curr_->pair; }
293
-
294
- private:
295
- friend class Map<key_type, mapped_type, key_compare>;
296
- using GrpcMap = typename ::grpc_core::Map<Key, T, Compare>;
297
- const_iterator(const GrpcMap* map, Entry* curr) : curr_(curr), map_(map) {}
298
- Entry* curr_;
299
- const GrpcMap* map_;
300
- };
301
-
302
- template <class Key, class T, class Compare>
303
- T& Map<Key, T, Compare>::operator[](key_type&& key) {
304
- auto iter = find(key);
305
- if (iter == end()) {
306
- return emplace(std::move(key), T()).first->second;
307
- }
308
- return iter->second;
309
- }
310
-
311
- template <class Key, class T, class Compare>
312
- T& Map<Key, T, Compare>::operator[](const key_type& key) {
313
- auto iter = find(key);
314
- if (iter == end()) {
315
- return emplace(key, T()).first->second;
316
- }
317
- return iter->second;
318
- }
319
-
320
- template <class Key, class T, class Compare>
321
- typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::find(
322
- const key_type& k) {
323
- Entry* iter = root_;
324
- while (iter != nullptr) {
325
- int comp = CompareKeys(iter->pair.first, k);
326
- if (comp == 0) {
327
- return iterator(this, iter);
328
- } else if (comp < 0) {
329
- iter = iter->right;
330
- } else {
331
- iter = iter->left;
332
- }
333
- }
334
- return end();
335
- }
336
-
337
- template <class Key, class T, class Compare>
338
- template <class... Args>
339
- typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator, bool>
340
- Map<Key, T, Compare>::emplace(Args&&... args) {
341
- Pair<key_type, mapped_type> pair(std::forward<Args>(args)...);
342
- iterator ret = find(pair.first);
343
- bool insertion = false;
344
- if (ret == end()) {
345
- Pair<iterator, Entry*> p = InsertRecursive(root_, std::move(pair));
346
- root_ = p.second;
347
- ret = p.first;
348
- insertion = true;
349
- size_++;
350
- }
351
- return MakePair(ret, insertion);
352
- }
353
-
354
- template <class Key, class T, class Compare>
355
- size_t Map<Key, T, Compare>::erase(const key_type& key) {
356
- iterator it = find(key);
357
- if (it == end()) return 0;
358
- erase(it);
359
- return 1;
360
- }
361
-
362
- // TODO(mhaidry): Modify erase to use the iterator location
363
- // to create an efficient erase method
364
- template <class Key, class T, class Compare>
365
- typename Map<Key, T, Compare>::iterator Map<Key, T, Compare>::erase(
366
- iterator iter) {
367
- if (iter == end()) return iter;
368
- key_type& del_key = iter->first;
369
- Pair<iterator, Entry*> ret = RemoveRecursive(root_, del_key);
370
- root_ = ret.second;
371
- size_--;
372
- return ret.first;
373
- }
374
-
375
- template <class Key, class T, class Compare>
376
- typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::InOrderSuccessor(
377
- const Entry* e) const {
378
- if (e->right != nullptr) {
379
- return GetMinEntry(e->right);
380
- }
381
- Entry* successor = nullptr;
382
- Entry* iter = root_;
383
- while (iter != nullptr) {
384
- int comp = CompareKeys(iter->pair.first, e->pair.first);
385
- if (comp > 0) {
386
- successor = iter;
387
- iter = iter->left;
388
- } else if (comp < 0) {
389
- iter = iter->right;
390
- } else
391
- break;
392
- }
393
- return successor;
394
- }
395
-
396
- // Returns a pair with the first value being an iterator pointing to the
397
- // inserted entry and the second value being the new root of the subtree
398
- // after a rebalance
399
- template <class Key, class T, class Compare>
400
- typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
401
- typename Map<Key, T, Compare>::Entry*>
402
- Map<Key, T, Compare>::InsertRecursive(Entry* root, value_type&& p) {
403
- if (root == nullptr) {
404
- Entry* e = New<Entry>(std::move(p));
405
- return MakePair(iterator(this, e), e);
406
- }
407
- int comp = CompareKeys(root->pair.first, p.first);
408
- if (comp > 0) {
409
- Pair<iterator, Entry*> ret = InsertRecursive(root->left, std::move(p));
410
- root->left = ret.second;
411
- ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
412
- return ret;
413
- } else if (comp < 0) {
414
- Pair<iterator, Entry*> ret = InsertRecursive(root->right, std::move(p));
415
- root->right = ret.second;
416
- ret.second = RebalanceTreeAfterInsertion(root, ret.first->first);
417
- return ret;
418
- } else {
419
- root->pair = std::move(p);
420
- return MakePair(iterator(this, root), root);
421
- }
422
- }
423
-
424
- template <class Key, class T, class Compare>
425
- typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::GetMinEntry(
426
- Entry* e) {
427
- if (e != nullptr) {
428
- while (e->left != nullptr) {
429
- e = e->left;
430
- }
431
- }
432
- return e;
433
- }
434
-
435
- template <class Key, class T, class Compare>
436
- typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateLeft(
437
- Entry* e) {
438
- Entry* rightChild = e->right;
439
- Entry* rightLeftChild = rightChild->left;
440
- rightChild->left = e;
441
- e->right = rightLeftChild;
442
- e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
443
- rightChild->height = 1 + GPR_MAX(EntryHeight(rightChild->left),
444
- EntryHeight(rightChild->right));
445
- return rightChild;
446
- }
447
-
448
- template <class Key, class T, class Compare>
449
- typename Map<Key, T, Compare>::Entry* Map<Key, T, Compare>::RotateRight(
450
- Entry* e) {
451
- Entry* leftChild = e->left;
452
- Entry* leftRightChild = leftChild->right;
453
- leftChild->right = e;
454
- e->left = leftRightChild;
455
- e->height = 1 + GPR_MAX(EntryHeight(e->left), EntryHeight(e->right));
456
- leftChild->height =
457
- 1 + GPR_MAX(EntryHeight(leftChild->left), EntryHeight(leftChild->right));
458
- return leftChild;
459
- }
460
-
461
- template <class Key, class T, class Compare>
462
- typename Map<Key, T, Compare>::Entry*
463
- Map<Key, T, Compare>::RebalanceTreeAfterInsertion(Entry* root,
464
- const key_type& k) {
465
- root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
466
- int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
467
- if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) > 0) {
468
- return RotateRight(root);
469
- }
470
- if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) < 0) {
471
- return RotateLeft(root);
472
- }
473
- if (heightDifference > 1 && CompareKeys(root->left->pair.first, k) < 0) {
474
- root->left = RotateLeft(root->left);
475
- return RotateRight(root);
476
- }
477
- if (heightDifference < -1 && CompareKeys(root->right->pair.first, k) > 0) {
478
- root->right = RotateRight(root->right);
479
- return RotateLeft(root);
480
- }
481
- return root;
482
- }
483
-
484
- template <class Key, class T, class Compare>
485
- typename Map<Key, T, Compare>::Entry*
486
- Map<Key, T, Compare>::RebalanceTreeAfterDeletion(Entry* root) {
487
- root->height = 1 + GPR_MAX(EntryHeight(root->left), EntryHeight(root->right));
488
- int32_t heightDifference = EntryHeight(root->left) - EntryHeight(root->right);
489
- if (heightDifference > 1) {
490
- int leftHeightDifference =
491
- EntryHeight(root->left->left) - EntryHeight(root->left->right);
492
- if (leftHeightDifference < 0) {
493
- root->left = RotateLeft(root->left);
494
- }
495
- return RotateRight(root);
496
- }
497
- if (heightDifference < -1) {
498
- int rightHeightDifference =
499
- EntryHeight(root->right->left) - EntryHeight(root->right->right);
500
- if (rightHeightDifference > 0) {
501
- root->right = RotateRight(root->right);
502
- }
503
- return RotateLeft(root);
504
- }
505
- return root;
506
- }
507
-
508
- template <class Key, class T, class Compare>
509
- typename ::grpc_core::Pair<typename Map<Key, T, Compare>::iterator,
510
- typename Map<Key, T, Compare>::Entry*>
511
- Map<Key, T, Compare>::RemoveRecursive(Entry* root, const key_type& k) {
512
- Pair<iterator, Entry*> ret = MakePair(end(), root);
513
- if (root == nullptr) return ret;
514
- int comp = CompareKeys(root->pair.first, k);
515
- if (comp > 0) {
516
- ret = RemoveRecursive(root->left, k);
517
- root->left = ret.second;
518
- } else if (comp < 0) {
519
- ret = RemoveRecursive(root->right, k);
520
- root->right = ret.second;
521
- } else {
522
- Entry* entry;
523
- Entry* successor = InOrderSuccessor(root);
524
- if (root->left == nullptr) {
525
- entry = root->right;
526
- Delete(root);
527
- return MakePair(iterator(this, successor), entry);
528
- } else if (root->right == nullptr) {
529
- entry = root->left;
530
- Delete(root);
531
- return MakePair(iterator(this, successor), entry);
532
- } else {
533
- entry = successor;
534
- root->pair.swap(entry->pair);
535
- ret = RemoveRecursive(root->right, entry->pair.first);
536
- root->right = ret.second;
537
- ret.first = iterator(this, root);
538
- }
539
- }
540
- return MakePair(ret.first, RebalanceTreeAfterDeletion(root));
541
- }
542
-
543
- template <class Key, class T, class Compare>
544
- int Map<Key, T, Compare>::CompareKeys(const key_type& lhs,
545
- const key_type& rhs) {
546
- // This is a workaround for "const key_compare compare;"
547
- // because some versions of compilers cannot build this by requiring
548
- // a user-provided constructor. (ref: https://stackoverflow.com/q/7411515)
549
- key_compare compare_tmp;
550
- const key_compare& compare = compare_tmp;
551
- bool left_comparison = compare(lhs, rhs);
552
- bool right_comparison = compare(rhs, lhs);
553
- // Both values are equal
554
- if (!left_comparison && !right_comparison) {
555
- return 0;
556
- }
557
- return left_comparison ? -1 : 1;
558
- }
559
-
560
- #endif // GRPC_USE_CPP_STD_LIB
561
-
562
64
  } // namespace grpc_core
563
65
 
564
66
  #endif /* GRPC_CORE_LIB_GPRPP_MAP_H */