couchbase 3.0.0-universal-darwin-19 → 3.0.1-universal-darwin-19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/CMakeLists.txt +86 -169
  4. data/ext/build_version.hxx.in +3 -2
  5. data/ext/cmake/Backtrace.cmake +35 -0
  6. data/ext/cmake/BuildTracing.cmake +6 -0
  7. data/ext/cmake/Cache.cmake +29 -0
  8. data/ext/cmake/CompilerWarnings.cmake +78 -0
  9. data/ext/cmake/PreventInSourceBuilds.cmake +18 -0
  10. data/ext/cmake/Sanitizers.cmake +66 -0
  11. data/ext/cmake/StandardProjectSettings.cmake +40 -0
  12. data/ext/cmake/StaticAnalyzers.cmake +37 -0
  13. data/ext/cmake/Testing.cmake +52 -0
  14. data/ext/cmake/ThirdPartyDependencies.cmake +20 -0
  15. data/ext/cmake/VersionInfo.cmake +37 -0
  16. data/ext/couchbase/bucket.hxx +37 -12
  17. data/ext/couchbase/capabilities.hxx +117 -0
  18. data/ext/couchbase/cbcrypto/cbcrypto.cc +15 -15
  19. data/ext/couchbase/cluster.hxx +34 -2
  20. data/ext/couchbase/cluster_options.hxx +1 -0
  21. data/ext/couchbase/configuration.hxx +228 -52
  22. data/ext/couchbase/couchbase.cxx +914 -35
  23. data/ext/couchbase/diagnostics.hxx +251 -0
  24. data/ext/couchbase/document_id.hxx +3 -1
  25. data/ext/couchbase/errors.hxx +10 -1
  26. data/ext/couchbase/io/http_command.hxx +11 -7
  27. data/ext/couchbase/io/http_context.hxx +37 -0
  28. data/ext/couchbase/io/http_message.hxx +9 -0
  29. data/ext/couchbase/io/http_parser.hxx +2 -0
  30. data/ext/couchbase/io/http_session.hxx +100 -14
  31. data/ext/couchbase/io/http_session_manager.hxx +65 -5
  32. data/ext/couchbase/io/mcbp_command.hxx +16 -7
  33. data/ext/couchbase/io/mcbp_session.hxx +193 -51
  34. data/ext/couchbase/io/query_cache.hxx +61 -0
  35. data/ext/couchbase/io/retry_context.hxx +1 -2
  36. data/ext/couchbase/io/retry_orchestrator.hxx +16 -0
  37. data/ext/couchbase/io/retry_strategy.hxx +1 -1
  38. data/ext/couchbase/io/streams.hxx +61 -10
  39. data/ext/couchbase/operations.hxx +13 -0
  40. data/ext/couchbase/operations/analytics_dataset_create.hxx +1 -1
  41. data/ext/couchbase/operations/analytics_dataset_drop.hxx +1 -1
  42. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +1 -1
  43. data/ext/couchbase/operations/analytics_dataverse_create.hxx +1 -1
  44. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +1 -1
  45. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +1 -1
  46. data/ext/couchbase/operations/analytics_index_create.hxx +1 -1
  47. data/ext/couchbase/operations/analytics_index_drop.hxx +1 -1
  48. data/ext/couchbase/operations/analytics_index_get_all.hxx +1 -1
  49. data/ext/couchbase/operations/analytics_link_connect.hxx +1 -1
  50. data/ext/couchbase/operations/analytics_link_disconnect.hxx +1 -1
  51. data/ext/couchbase/operations/bucket_create.hxx +11 -5
  52. data/ext/couchbase/operations/bucket_drop.hxx +1 -1
  53. data/ext/couchbase/operations/bucket_flush.hxx +1 -1
  54. data/ext/couchbase/operations/bucket_get.hxx +1 -1
  55. data/ext/couchbase/operations/bucket_get_all.hxx +1 -1
  56. data/ext/couchbase/operations/bucket_settings.hxx +43 -4
  57. data/ext/couchbase/operations/bucket_update.hxx +11 -5
  58. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +1 -1
  59. data/ext/couchbase/operations/collection_create.hxx +3 -1
  60. data/ext/couchbase/operations/collection_drop.hxx +1 -1
  61. data/ext/couchbase/operations/collections_manifest_get.hxx +70 -0
  62. data/ext/couchbase/operations/document_analytics.hxx +6 -1
  63. data/ext/couchbase/operations/document_get_projected.hxx +1 -1
  64. data/ext/couchbase/operations/document_query.hxx +85 -8
  65. data/ext/couchbase/operations/document_search.hxx +14 -4
  66. data/ext/couchbase/operations/document_view.hxx +1 -1
  67. data/ext/couchbase/operations/group_drop.hxx +71 -0
  68. data/ext/couchbase/operations/group_get.hxx +75 -0
  69. data/ext/couchbase/operations/group_get_all.hxx +70 -0
  70. data/ext/couchbase/operations/group_upsert.hxx +118 -0
  71. data/ext/couchbase/operations/query_index_build_deferred.hxx +1 -1
  72. data/ext/couchbase/operations/query_index_create.hxx +1 -1
  73. data/ext/couchbase/operations/query_index_drop.hxx +1 -1
  74. data/ext/couchbase/operations/query_index_get_all.hxx +3 -2
  75. data/ext/couchbase/operations/rbac.hxx +276 -0
  76. data/ext/couchbase/operations/role_get_all.hxx +70 -0
  77. data/ext/couchbase/operations/scope_create.hxx +6 -2
  78. data/ext/couchbase/operations/scope_drop.hxx +1 -1
  79. data/ext/couchbase/operations/scope_get_all.hxx +1 -1
  80. data/ext/couchbase/operations/search_get_stats.hxx +59 -0
  81. data/ext/couchbase/operations/search_index_analyze_document.hxx +1 -1
  82. data/ext/couchbase/operations/search_index_control_ingest.hxx +1 -1
  83. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +1 -1
  84. data/ext/couchbase/operations/search_index_control_query.hxx +1 -1
  85. data/ext/couchbase/operations/search_index_drop.hxx +1 -1
  86. data/ext/couchbase/operations/search_index_get.hxx +1 -1
  87. data/ext/couchbase/operations/search_index_get_all.hxx +1 -1
  88. data/ext/couchbase/operations/search_index_get_documents_count.hxx +24 -16
  89. data/ext/couchbase/operations/search_index_get_stats.hxx +81 -0
  90. data/ext/couchbase/operations/search_index_upsert.hxx +1 -1
  91. data/ext/couchbase/operations/user_drop.hxx +72 -0
  92. data/ext/couchbase/operations/user_get.hxx +76 -0
  93. data/ext/couchbase/operations/user_get_all.hxx +71 -0
  94. data/ext/couchbase/operations/user_upsert.hxx +125 -0
  95. data/ext/couchbase/operations/view_index_drop.hxx +1 -1
  96. data/ext/couchbase/operations/view_index_get.hxx +1 -1
  97. data/ext/couchbase/operations/view_index_get_all.hxx +1 -1
  98. data/ext/couchbase/operations/view_index_upsert.hxx +1 -1
  99. data/ext/couchbase/origin.hxx +4 -4
  100. data/ext/couchbase/platform/terminate_handler.cc +5 -4
  101. data/ext/couchbase/protocol/client_opcode.hxx +38 -38
  102. data/ext/couchbase/protocol/client_response.hxx +2 -2
  103. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +6 -3
  104. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +3 -1
  105. data/ext/couchbase/protocol/magic.hxx +6 -6
  106. data/ext/couchbase/protocol/server_opcode.hxx +2 -2
  107. data/ext/couchbase/protocol/status.hxx +57 -57
  108. data/ext/couchbase/service_type.hxx +1 -1
  109. data/ext/couchbase/utils/connection_string.hxx +12 -3
  110. data/ext/couchbase/version.hxx +1 -1
  111. data/ext/extconf.rb +21 -9
  112. data/ext/test/test_helper.hxx +141 -0
  113. data/ext/test/test_helper_native.hxx +59 -0
  114. data/ext/test/test_helper_ruby.hxx +72 -0
  115. data/ext/test/test_native_diagnostics.cxx +385 -0
  116. data/ext/test/test_native_trivial_crud.cxx +83 -0
  117. data/ext/test/test_ruby_trivial_crud.cxx +35 -0
  118. data/ext/test/test_ruby_trivial_query.cxx +34 -0
  119. data/ext/third_party/asio/asio/include/asio.hpp +35 -0
  120. data/ext/third_party/asio/asio/include/asio/any_io_executor.hpp +71 -0
  121. data/ext/third_party/asio/asio/include/asio/associated_allocator.hpp +1 -7
  122. data/ext/third_party/asio/asio/include/asio/associated_executor.hpp +36 -19
  123. data/ext/third_party/asio/asio/include/asio/async_result.hpp +1 -8
  124. data/ext/third_party/asio/asio/include/asio/awaitable.hpp +14 -4
  125. data/ext/third_party/asio/asio/include/asio/basic_datagram_socket.hpp +12 -7
  126. data/ext/third_party/asio/asio/include/asio/basic_deadline_timer.hpp +4 -4
  127. data/ext/third_party/asio/asio/include/asio/basic_raw_socket.hpp +11 -7
  128. data/ext/third_party/asio/asio/include/asio/basic_seq_packet_socket.hpp +9 -4
  129. data/ext/third_party/asio/asio/include/asio/basic_serial_port.hpp +6 -6
  130. data/ext/third_party/asio/asio/include/asio/basic_signal_set.hpp +4 -4
  131. data/ext/third_party/asio/asio/include/asio/basic_socket.hpp +5 -5
  132. data/ext/third_party/asio/asio/include/asio/basic_socket_acceptor.hpp +13 -7
  133. data/ext/third_party/asio/asio/include/asio/basic_stream_socket.hpp +7 -3
  134. data/ext/third_party/asio/asio/include/asio/basic_waitable_timer.hpp +52 -4
  135. data/ext/third_party/asio/asio/include/asio/bind_executor.hpp +10 -15
  136. data/ext/third_party/asio/asio/include/asio/buffer.hpp +6 -4
  137. data/ext/third_party/asio/asio/include/asio/co_spawn.hpp +380 -9
  138. data/ext/third_party/asio/asio/include/asio/defer.hpp +4 -1
  139. data/ext/third_party/asio/asio/include/asio/detached.hpp +50 -0
  140. data/ext/third_party/asio/asio/include/asio/detail/atomic_count.hpp +19 -0
  141. data/ext/third_party/asio/asio/include/asio/detail/bind_handler.hpp +144 -26
  142. data/ext/third_party/asio/asio/include/asio/detail/blocking_executor_op.hpp +107 -0
  143. data/ext/third_party/asio/asio/include/asio/detail/buffer_sequence_adapter.hpp +106 -0
  144. data/ext/third_party/asio/asio/include/asio/detail/bulk_executor_op.hpp +88 -0
  145. data/ext/third_party/asio/asio/include/asio/detail/completion_handler.hpp +10 -5
  146. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_event.hpp +8 -0
  147. data/ext/third_party/asio/asio/include/asio/detail/config.hpp +360 -37
  148. data/ext/third_party/asio/asio/include/asio/detail/deadline_timer_service.hpp +17 -2
  149. data/ext/third_party/asio/asio/include/asio/detail/descriptor_ops.hpp +24 -6
  150. data/ext/third_party/asio/asio/include/asio/detail/descriptor_read_op.hpp +32 -14
  151. data/ext/third_party/asio/asio/include/asio/detail/descriptor_write_op.hpp +32 -14
  152. data/ext/third_party/asio/asio/include/asio/detail/executor_function.hpp +133 -34
  153. data/ext/third_party/asio/asio/include/asio/detail/handler_alloc_helpers.hpp +42 -0
  154. data/ext/third_party/asio/asio/include/asio/detail/handler_invoke_helpers.hpp +23 -0
  155. data/ext/third_party/asio/asio/include/asio/detail/handler_tracking.hpp +26 -0
  156. data/ext/third_party/asio/asio/include/asio/detail/handler_work.hpp +370 -45
  157. data/ext/third_party/asio/asio/include/asio/detail/impl/descriptor_ops.ipp +208 -74
  158. data/ext/third_party/asio/asio/include/asio/detail/impl/handler_tracking.ipp +39 -1
  159. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +12 -15
  160. data/ext/third_party/asio/asio/include/asio/detail/impl/scheduler.ipp +37 -0
  161. data/ext/third_party/asio/asio/include/asio/detail/impl/signal_set_service.ipp +2 -1
  162. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_ops.ipp +661 -274
  163. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.hpp +210 -4
  164. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.hpp +8 -9
  165. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.ipp +5 -4
  166. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp +15 -6
  167. data/ext/third_party/asio/asio/include/asio/detail/io_object_impl.hpp +32 -50
  168. data/ext/third_party/asio/asio/include/asio/detail/memory.hpp +3 -0
  169. data/ext/third_party/asio/asio/include/asio/detail/null_event.hpp +6 -0
  170. data/ext/third_party/asio/asio/include/asio/detail/pop_options.hpp +1 -1
  171. data/ext/third_party/asio/asio/include/asio/detail/posix_event.hpp +13 -0
  172. data/ext/third_party/asio/asio/include/asio/detail/push_options.hpp +1 -1
  173. data/ext/third_party/asio/asio/include/asio/detail/reactive_descriptor_service.hpp +38 -13
  174. data/ext/third_party/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp +12 -6
  175. data/ext/third_party/asio/asio/include/asio/detail/reactive_serial_port_service.hpp +2 -3
  176. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp +36 -24
  177. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp +17 -10
  178. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp +38 -16
  179. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp +36 -14
  180. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp +21 -11
  181. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_send_op.hpp +43 -17
  182. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp +39 -17
  183. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service.hpp +44 -21
  184. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service_base.hpp +41 -18
  185. data/ext/third_party/asio/asio/include/asio/detail/reactive_wait_op.hpp +12 -6
  186. data/ext/third_party/asio/asio/include/asio/detail/reactor_op.hpp +3 -1
  187. data/ext/third_party/asio/asio/include/asio/detail/resolve_endpoint_op.hpp +10 -8
  188. data/ext/third_party/asio/asio/include/asio/detail/resolve_query_op.hpp +11 -9
  189. data/ext/third_party/asio/asio/include/asio/detail/scheduler.hpp +8 -0
  190. data/ext/third_party/asio/asio/include/asio/detail/signal_handler.hpp +7 -5
  191. data/ext/third_party/asio/asio/include/asio/detail/socket_ops.hpp +46 -0
  192. data/ext/third_party/asio/asio/include/asio/detail/source_location.hpp +45 -0
  193. data/ext/third_party/asio/asio/include/asio/detail/std_event.hpp +12 -0
  194. data/ext/third_party/asio/asio/include/asio/detail/strand_executor_service.hpp +25 -1
  195. data/ext/third_party/asio/asio/include/asio/detail/strand_service.hpp +4 -1
  196. data/ext/third_party/asio/asio/include/asio/detail/thread_info_base.hpp +58 -0
  197. data/ext/third_party/asio/asio/include/asio/detail/type_traits.hpp +59 -0
  198. data/ext/third_party/asio/asio/include/asio/detail/variadic_templates.hpp +144 -1
  199. data/ext/third_party/asio/asio/include/asio/detail/wait_handler.hpp +9 -6
  200. data/ext/third_party/asio/asio/include/asio/detail/win_event.hpp +13 -0
  201. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp +9 -5
  202. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp +9 -5
  203. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_io_context.hpp +5 -1
  204. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp +10 -6
  205. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp +9 -5
  206. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp +18 -6
  207. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp +15 -11
  208. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp +10 -5
  209. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp +8 -4
  210. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp +8 -4
  211. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp +8 -4
  212. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp +8 -4
  213. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_wait_op.hpp +10 -5
  214. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolve_op.hpp +8 -4
  215. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp +8 -4
  216. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp +8 -4
  217. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_send_op.hpp +8 -4
  218. data/ext/third_party/asio/asio/include/asio/detail/work_dispatcher.hpp +81 -6
  219. data/ext/third_party/asio/asio/include/asio/detail/wrapped_handler.hpp +45 -9
  220. data/ext/third_party/asio/asio/include/asio/dispatch.hpp +4 -1
  221. data/ext/third_party/asio/asio/include/asio/execution.hpp +48 -0
  222. data/ext/third_party/asio/asio/include/asio/execution/allocator.hpp +249 -0
  223. data/ext/third_party/asio/asio/include/asio/execution/any_executor.hpp +2264 -0
  224. data/ext/third_party/asio/asio/include/asio/execution/bad_executor.hpp +47 -0
  225. data/ext/third_party/asio/asio/include/asio/execution/blocking.hpp +1351 -0
  226. data/ext/third_party/asio/asio/include/asio/execution/blocking_adaptation.hpp +1064 -0
  227. data/ext/third_party/asio/asio/include/asio/execution/bulk_execute.hpp +390 -0
  228. data/ext/third_party/asio/asio/include/asio/execution/bulk_guarantee.hpp +1018 -0
  229. data/ext/third_party/asio/asio/include/asio/execution/connect.hpp +486 -0
  230. data/ext/third_party/asio/asio/include/asio/execution/context.hpp +185 -0
  231. data/ext/third_party/asio/asio/include/asio/execution/context_as.hpp +201 -0
  232. data/ext/third_party/asio/asio/include/asio/execution/detail/as_invocable.hpp +152 -0
  233. data/ext/third_party/asio/asio/include/asio/execution/detail/as_operation.hpp +105 -0
  234. data/ext/third_party/asio/asio/include/asio/execution/detail/as_receiver.hpp +128 -0
  235. data/ext/third_party/asio/asio/include/asio/execution/detail/bulk_sender.hpp +261 -0
  236. data/ext/third_party/asio/asio/include/asio/execution/detail/submit_receiver.hpp +233 -0
  237. data/ext/third_party/asio/asio/include/asio/execution/detail/void_receiver.hpp +90 -0
  238. data/ext/third_party/asio/asio/include/asio/execution/execute.hpp +264 -0
  239. data/ext/third_party/asio/asio/include/asio/execution/executor.hpp +238 -0
  240. data/ext/third_party/asio/asio/include/asio/execution/impl/bad_executor.ipp +40 -0
  241. data/ext/third_party/asio/asio/include/asio/execution/impl/receiver_invocation_error.ipp +36 -0
  242. data/ext/third_party/asio/asio/include/asio/execution/invocable_archetype.hpp +71 -0
  243. data/ext/third_party/asio/asio/include/asio/execution/mapping.hpp +917 -0
  244. data/ext/third_party/asio/asio/include/asio/execution/occupancy.hpp +178 -0
  245. data/ext/third_party/asio/asio/include/asio/execution/operation_state.hpp +94 -0
  246. data/ext/third_party/asio/asio/include/asio/execution/outstanding_work.hpp +721 -0
  247. data/ext/third_party/asio/asio/include/asio/execution/prefer_only.hpp +327 -0
  248. data/ext/third_party/asio/asio/include/asio/execution/receiver.hpp +280 -0
  249. data/ext/third_party/asio/asio/include/asio/execution/receiver_invocation_error.hpp +48 -0
  250. data/ext/third_party/asio/asio/include/asio/execution/relationship.hpp +720 -0
  251. data/ext/third_party/asio/asio/include/asio/execution/schedule.hpp +290 -0
  252. data/ext/third_party/asio/asio/include/asio/execution/scheduler.hpp +86 -0
  253. data/ext/third_party/asio/asio/include/asio/execution/sender.hpp +311 -0
  254. data/ext/third_party/asio/asio/include/asio/execution/set_done.hpp +253 -0
  255. data/ext/third_party/asio/asio/include/asio/execution/set_error.hpp +253 -0
  256. data/ext/third_party/asio/asio/include/asio/execution/set_value.hpp +486 -0
  257. data/ext/third_party/asio/asio/include/asio/execution/start.hpp +250 -0
  258. data/ext/third_party/asio/asio/include/asio/execution/submit.hpp +450 -0
  259. data/ext/third_party/asio/asio/include/asio/executor.hpp +7 -1
  260. data/ext/third_party/asio/asio/include/asio/executor_work_guard.hpp +126 -9
  261. data/ext/third_party/asio/asio/include/asio/handler_alloc_hook.hpp +28 -5
  262. data/ext/third_party/asio/asio/include/asio/handler_invoke_hook.hpp +29 -3
  263. data/ext/third_party/asio/asio/include/asio/impl/awaitable.hpp +14 -0
  264. data/ext/third_party/asio/asio/include/asio/impl/buffered_read_stream.hpp +44 -8
  265. data/ext/third_party/asio/asio/include/asio/impl/buffered_write_stream.hpp +44 -8
  266. data/ext/third_party/asio/asio/include/asio/impl/co_spawn.hpp +145 -7
  267. data/ext/third_party/asio/asio/include/asio/impl/compose.hpp +124 -22
  268. data/ext/third_party/asio/asio/include/asio/impl/connect.hpp +52 -8
  269. data/ext/third_party/asio/asio/include/asio/impl/defer.hpp +147 -12
  270. data/ext/third_party/asio/asio/include/asio/impl/dispatch.hpp +142 -12
  271. data/ext/third_party/asio/asio/include/asio/impl/executor.hpp +15 -101
  272. data/ext/third_party/asio/asio/include/asio/impl/executor.ipp +5 -0
  273. data/ext/third_party/asio/asio/include/asio/impl/handler_alloc_hook.ipp +13 -4
  274. data/ext/third_party/asio/asio/include/asio/impl/io_context.hpp +144 -57
  275. data/ext/third_party/asio/asio/include/asio/impl/multiple_exceptions.ipp +49 -0
  276. data/ext/third_party/asio/asio/include/asio/impl/post.hpp +147 -12
  277. data/ext/third_party/asio/asio/include/asio/impl/read.hpp +85 -18
  278. data/ext/third_party/asio/asio/include/asio/impl/read_at.hpp +59 -14
  279. data/ext/third_party/asio/asio/include/asio/impl/read_until.hpp +241 -56
  280. data/ext/third_party/asio/asio/include/asio/impl/redirect_error.hpp +22 -4
  281. data/ext/third_party/asio/asio/include/asio/impl/spawn.hpp +58 -22
  282. data/ext/third_party/asio/asio/include/asio/impl/src.hpp +3 -0
  283. data/ext/third_party/asio/asio/include/asio/impl/system_context.ipp +16 -4
  284. data/ext/third_party/asio/asio/include/asio/impl/system_executor.hpp +113 -12
  285. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.hpp +260 -37
  286. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.ipp +61 -7
  287. data/ext/third_party/asio/asio/include/asio/impl/use_awaitable.hpp +5 -2
  288. data/ext/third_party/asio/asio/include/asio/impl/use_future.hpp +147 -6
  289. data/ext/third_party/asio/asio/include/asio/impl/write.hpp +75 -14
  290. data/ext/third_party/asio/asio/include/asio/impl/write_at.hpp +53 -11
  291. data/ext/third_party/asio/asio/include/asio/io_context.hpp +706 -48
  292. data/ext/third_party/asio/asio/include/asio/io_context_strand.hpp +3 -1
  293. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver.hpp +4 -4
  294. data/ext/third_party/asio/asio/include/asio/is_applicable_property.hpp +61 -0
  295. data/ext/third_party/asio/asio/include/asio/multiple_exceptions.hpp +58 -0
  296. data/ext/third_party/asio/asio/include/asio/posix/basic_descriptor.hpp +4 -4
  297. data/ext/third_party/asio/asio/include/asio/posix/basic_stream_descriptor.hpp +5 -5
  298. data/ext/third_party/asio/asio/include/asio/post.hpp +4 -1
  299. data/ext/third_party/asio/asio/include/asio/prefer.hpp +656 -0
  300. data/ext/third_party/asio/asio/include/asio/query.hpp +296 -0
  301. data/ext/third_party/asio/asio/include/asio/read_until.hpp +6 -6
  302. data/ext/third_party/asio/asio/include/asio/require.hpp +524 -0
  303. data/ext/third_party/asio/asio/include/asio/require_concept.hpp +310 -0
  304. data/ext/third_party/asio/asio/include/asio/spawn.hpp +12 -4
  305. data/ext/third_party/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp +5 -0
  306. data/ext/third_party/asio/asio/include/asio/ssl/detail/engine.hpp +5 -0
  307. data/ext/third_party/asio/asio/include/asio/ssl/detail/handshake_op.hpp +5 -0
  308. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/engine.ipp +16 -3
  309. data/ext/third_party/asio/asio/include/asio/ssl/detail/io.hpp +38 -4
  310. data/ext/third_party/asio/asio/include/asio/ssl/detail/read_op.hpp +5 -0
  311. data/ext/third_party/asio/asio/include/asio/ssl/detail/shutdown_op.hpp +5 -0
  312. data/ext/third_party/asio/asio/include/asio/ssl/detail/stream_core.hpp +36 -2
  313. data/ext/third_party/asio/asio/include/asio/ssl/detail/write_op.hpp +10 -1
  314. data/ext/third_party/asio/asio/include/asio/ssl/stream.hpp +15 -0
  315. data/ext/third_party/asio/asio/include/asio/static_thread_pool.hpp +31 -0
  316. data/ext/third_party/asio/asio/include/asio/strand.hpp +232 -9
  317. data/ext/third_party/asio/asio/include/asio/system_context.hpp +12 -3
  318. data/ext/third_party/asio/asio/include/asio/system_executor.hpp +557 -24
  319. data/ext/third_party/asio/asio/include/asio/thread_pool.hpp +913 -37
  320. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_free.hpp +114 -0
  321. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_member.hpp +114 -0
  322. data/ext/third_party/asio/asio/include/asio/traits/connect_free.hpp +112 -0
  323. data/ext/third_party/asio/asio/include/asio/traits/connect_member.hpp +112 -0
  324. data/ext/third_party/asio/asio/include/asio/traits/equality_comparable.hpp +100 -0
  325. data/ext/third_party/asio/asio/include/asio/traits/execute_free.hpp +108 -0
  326. data/ext/third_party/asio/asio/include/asio/traits/execute_member.hpp +108 -0
  327. data/ext/third_party/asio/asio/include/asio/traits/prefer_free.hpp +108 -0
  328. data/ext/third_party/asio/asio/include/asio/traits/prefer_member.hpp +108 -0
  329. data/ext/third_party/asio/asio/include/asio/traits/query_free.hpp +108 -0
  330. data/ext/third_party/asio/asio/include/asio/traits/query_member.hpp +108 -0
  331. data/ext/third_party/asio/asio/include/asio/traits/query_static_constexpr_member.hpp +108 -0
  332. data/ext/third_party/asio/asio/include/asio/traits/require_concept_free.hpp +108 -0
  333. data/ext/third_party/asio/asio/include/asio/traits/require_concept_member.hpp +108 -0
  334. data/ext/third_party/asio/asio/include/asio/traits/require_free.hpp +108 -0
  335. data/ext/third_party/asio/asio/include/asio/traits/require_member.hpp +108 -0
  336. data/ext/third_party/asio/asio/include/asio/traits/schedule_free.hpp +108 -0
  337. data/ext/third_party/asio/asio/include/asio/traits/schedule_member.hpp +108 -0
  338. data/ext/third_party/asio/asio/include/asio/traits/set_done_free.hpp +108 -0
  339. data/ext/third_party/asio/asio/include/asio/traits/set_done_member.hpp +108 -0
  340. data/ext/third_party/asio/asio/include/asio/traits/set_error_free.hpp +112 -0
  341. data/ext/third_party/asio/asio/include/asio/traits/set_error_member.hpp +112 -0
  342. data/ext/third_party/asio/asio/include/asio/traits/set_value_free.hpp +234 -0
  343. data/ext/third_party/asio/asio/include/asio/traits/set_value_member.hpp +234 -0
  344. data/ext/third_party/asio/asio/include/asio/traits/start_free.hpp +108 -0
  345. data/ext/third_party/asio/asio/include/asio/traits/start_member.hpp +108 -0
  346. data/ext/third_party/asio/asio/include/asio/traits/static_query.hpp +108 -0
  347. data/ext/third_party/asio/asio/include/asio/traits/static_require.hpp +123 -0
  348. data/ext/third_party/asio/asio/include/asio/traits/static_require_concept.hpp +123 -0
  349. data/ext/third_party/asio/asio/include/asio/traits/submit_free.hpp +112 -0
  350. data/ext/third_party/asio/asio/include/asio/traits/submit_member.hpp +112 -0
  351. data/ext/third_party/asio/asio/include/asio/ts/executor.hpp +1 -0
  352. data/ext/third_party/asio/asio/include/asio/ts/netfwd.hpp +67 -8
  353. data/ext/third_party/asio/asio/include/asio/use_awaitable.hpp +63 -4
  354. data/ext/third_party/asio/asio/include/asio/version.hpp +1 -1
  355. data/ext/third_party/asio/asio/include/asio/windows/basic_object_handle.hpp +4 -4
  356. data/ext/third_party/asio/asio/include/asio/windows/basic_overlapped_handle.hpp +2 -2
  357. data/ext/third_party/asio/asio/include/asio/windows/basic_random_access_handle.hpp +5 -5
  358. data/ext/third_party/asio/asio/include/asio/windows/basic_stream_handle.hpp +5 -5
  359. data/ext/third_party/asio/asio/include/asio/windows/overlapped_ptr.hpp +4 -2
  360. data/ext/third_party/gsl/CMakeLists.txt +13 -5
  361. data/ext/third_party/gsl/include/gsl/gsl_assert +1 -1
  362. data/ext/third_party/gsl/include/gsl/gsl_byte +3 -3
  363. data/ext/third_party/gsl/include/gsl/gsl_narrow +52 -0
  364. data/ext/third_party/gsl/include/gsl/gsl_util +8 -50
  365. data/ext/third_party/gsl/include/gsl/multi_span +0 -10
  366. data/ext/third_party/gsl/include/gsl/pointers +14 -28
  367. data/ext/third_party/gsl/include/gsl/span +98 -46
  368. data/ext/third_party/gsl/include/gsl/string_span +37 -47
  369. data/ext/third_party/http_parser/http_parser.c +17 -10
  370. data/ext/third_party/http_parser/http_parser.h +4 -2
  371. data/ext/third_party/json/include/tao/json/basic_value.hpp +3 -2
  372. data/ext/third_party/json/include/tao/json/binary.hpp +4 -4
  373. data/ext/third_party/json/include/tao/json/binary_view.hpp +2 -2
  374. data/ext/third_party/json/include/tao/json/binding.hpp +2 -2
  375. data/ext/third_party/json/include/tao/json/binding/factory.hpp +8 -7
  376. data/ext/third_party/json/include/tao/json/binding/internal/array.hpp +2 -1
  377. data/ext/third_party/json/include/tao/json/binding/internal/object.hpp +6 -5
  378. data/ext/third_party/json/include/tao/json/binding/versions.hpp +3 -1
  379. data/ext/third_party/json/include/tao/json/cbor.hpp +1 -0
  380. data/ext/third_party/json/include/tao/json/cbor/consume_file.hpp +7 -7
  381. data/ext/third_party/json/include/tao/json/cbor/events/from_binary.hpp +43 -0
  382. data/ext/third_party/json/include/tao/json/cbor/events/from_file.hpp +4 -4
  383. data/ext/third_party/json/include/tao/json/cbor/events/from_string.hpp +3 -3
  384. data/ext/third_party/json/include/tao/json/cbor/from_binary.hpp +32 -0
  385. data/ext/third_party/json/include/tao/json/cbor/from_file.hpp +5 -5
  386. data/ext/third_party/json/include/tao/json/cbor/internal/grammar.hpp +2 -1
  387. data/ext/third_party/json/include/tao/json/consume_file.hpp +7 -7
  388. data/ext/third_party/json/include/tao/json/contrib/internal/indirect_traits.hpp +13 -6
  389. data/ext/third_party/json/include/tao/json/contrib/position.hpp +15 -15
  390. data/ext/third_party/json/include/tao/json/contrib/reference.hpp +5 -7
  391. data/ext/third_party/json/include/tao/json/contrib/schema.hpp +58 -35
  392. data/ext/third_party/json/include/tao/json/contrib/shared_ptr_traits.hpp +12 -4
  393. data/ext/third_party/json/include/tao/json/contrib/unique_ptr_traits.hpp +12 -4
  394. data/ext/third_party/json/include/tao/json/contrib/unordered_map_traits.hpp +1 -1
  395. data/ext/third_party/json/include/tao/json/contrib/unordered_set_traits.hpp +2 -2
  396. data/ext/third_party/json/include/tao/json/events/compare.hpp +2 -12
  397. data/ext/third_party/json/include/tao/json/events/from_file.hpp +4 -4
  398. data/ext/third_party/json/include/tao/json/events/from_string.hpp +2 -2
  399. data/ext/third_party/json/include/tao/json/events/invalid_string_to_binary.hpp +1 -1
  400. data/ext/third_party/json/include/tao/json/events/key_camel_case_to_snake_case.hpp +3 -3
  401. data/ext/third_party/json/include/tao/json/events/key_snake_case_to_camel_case.hpp +1 -1
  402. data/ext/third_party/json/include/tao/json/events/tee.hpp +2 -2
  403. data/ext/third_party/json/include/tao/json/events/to_pretty_stream.hpp +1 -1
  404. data/ext/third_party/json/include/tao/json/events/to_stream.hpp +1 -1
  405. data/ext/third_party/json/include/tao/json/events/transformer.hpp +3 -3
  406. data/ext/third_party/json/include/tao/json/events/validate_event_order.hpp +3 -3
  407. data/ext/third_party/json/include/tao/json/events/virtual_ref.hpp +6 -0
  408. data/ext/third_party/json/include/tao/json/external/pegtl.hpp +4 -13
  409. data/ext/third_party/json/include/tao/json/external/pegtl/argv_input.hpp +3 -5
  410. data/ext/third_party/json/include/tao/json/external/pegtl/ascii.hpp +5 -18
  411. data/ext/third_party/json/include/tao/json/external/pegtl/buffer_input.hpp +3 -3
  412. data/ext/third_party/json/include/tao/json/external/pegtl/change_action.hpp +2 -2
  413. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_state.hpp +6 -6
  414. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_states.hpp +5 -5
  415. data/ext/third_party/json/include/tao/json/external/pegtl/change_control.hpp +2 -2
  416. data/ext/third_party/json/include/tao/json/external/pegtl/change_state.hpp +6 -6
  417. data/ext/third_party/json/include/tao/json/external/pegtl/change_states.hpp +5 -5
  418. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/alphabet.hpp +52 -52
  419. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze.hpp +176 -0
  420. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze_traits.hpp +275 -0
  421. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/control_action.hpp +77 -0
  422. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/coverage.hpp +151 -0
  423. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/forward.hpp +16 -0
  424. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/http.hpp +37 -18
  425. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/internal.hpp +20 -22
  426. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf16.hpp +6 -10
  427. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf32.hpp +6 -10
  428. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf8.hpp +2 -4
  429. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/if_then.hpp +11 -10
  430. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/integer.hpp +116 -131
  431. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian.hpp +4 -4
  432. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_gcc.hpp +2 -2
  433. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/endian_win.hpp +2 -2
  434. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint.hpp +9 -9
  435. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_mask_uint8.hpp +9 -10
  436. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint.hpp +9 -9
  437. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_uint8.hpp +9 -10
  438. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf16.hpp +10 -10
  439. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/peek_utf32.hpp +9 -9
  440. data/ext/third_party/json/include/tao/json/external/pegtl/{internal → contrib/internal}/read_uint.hpp +3 -3
  441. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/set_stack_guard.hpp +52 -0
  442. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree.hpp +80 -201
  443. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree_to_dot.hpp +11 -10
  444. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print.hpp +75 -0
  445. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print_coverage.hpp +53 -0
  446. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/raw_string.hpp +45 -36
  447. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_first_state.hpp +33 -50
  448. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_last_states.hpp +117 -0
  449. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_one_min_max.hpp +43 -11
  450. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_string.hpp +1 -2
  451. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/shuffle_states.hpp +193 -0
  452. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/state_control.hpp +118 -0
  453. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/trace.hpp +227 -0
  454. data/ext/third_party/json/include/tao/json/external/pegtl/{uint16.hpp → contrib/uint16.hpp} +5 -5
  455. data/ext/third_party/json/include/tao/json/external/pegtl/{uint32.hpp → contrib/uint32.hpp} +5 -5
  456. data/ext/third_party/json/include/tao/json/external/pegtl/{uint64.hpp → contrib/uint64.hpp} +5 -5
  457. data/ext/third_party/json/include/tao/json/external/pegtl/{uint8.hpp → contrib/uint8.hpp} +5 -5
  458. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/unescape.hpp +14 -14
  459. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uri.hpp +1 -1
  460. data/ext/third_party/json/include/tao/json/external/pegtl/{utf16.hpp → contrib/utf16.hpp} +5 -5
  461. data/ext/third_party/json/include/tao/json/external/pegtl/{utf32.hpp → contrib/utf32.hpp} +5 -5
  462. data/ext/third_party/json/include/tao/json/external/pegtl/cstream_input.hpp +2 -3
  463. data/ext/third_party/json/include/tao/json/external/pegtl/{internal/demangle.hpp → demangle.hpp} +12 -14
  464. data/ext/third_party/json/include/tao/json/external/pegtl/disable_action.hpp +2 -2
  465. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input.hpp +2 -2
  466. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_failure.hpp +2 -2
  467. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_success.hpp +2 -2
  468. data/ext/third_party/json/include/tao/json/external/pegtl/enable_action.hpp +2 -2
  469. data/ext/third_party/json/include/tao/json/external/pegtl/file_input.hpp +1 -1
  470. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action.hpp +19 -9
  471. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action_input.hpp +7 -8
  472. data/ext/third_party/json/include/tao/json/external/pegtl/internal/any.hpp +14 -14
  473. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply.hpp +9 -9
  474. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0.hpp +8 -7
  475. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply_single.hpp +4 -4
  476. data/ext/third_party/json/include/tao/json/external/pegtl/internal/at.hpp +17 -15
  477. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bof.hpp +7 -6
  478. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bol.hpp +8 -8
  479. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump.hpp +4 -4
  480. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump_help.hpp +3 -3
  481. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bytes.hpp +17 -10
  482. data/ext/third_party/json/include/tao/json/external/pegtl/internal/control.hpp +19 -9
  483. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_crlf_eol.hpp +2 -2
  484. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_eol.hpp +2 -2
  485. data/ext/third_party/json/include/tao/json/external/pegtl/internal/crlf_eol.hpp +2 -2
  486. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstream_reader.hpp +1 -1
  487. data/ext/third_party/json/include/tao/json/external/pegtl/internal/{always_false.hpp → dependent_false.hpp} +3 -8
  488. data/ext/third_party/json/include/tao/json/external/pegtl/internal/disable.hpp +19 -9
  489. data/ext/third_party/json/include/tao/json/external/pegtl/internal/discard.hpp +7 -6
  490. data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable.hpp +19 -9
  491. data/ext/third_party/json/include/tao/json/external/pegtl/internal/{skip_control.hpp → enable_control.hpp} +5 -5
  492. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eof.hpp +7 -6
  493. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eol.hpp +8 -7
  494. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eolf.hpp +8 -7
  495. data/ext/third_party/json/include/tao/json/external/pegtl/internal/failure.hpp +32 -0
  496. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_posix.hpp +61 -10
  497. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_win32.hpp +27 -33
  498. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +29 -26
  499. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply.hpp +3 -7
  500. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply0.hpp +3 -7
  501. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_match.hpp +4 -20
  502. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_unwind.hpp +21 -0
  503. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_apply.hpp +8 -7
  504. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must.hpp +8 -9
  505. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must_else.hpp +2 -0
  506. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_then_else.hpp +7 -7
  507. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istream_reader.hpp +1 -2
  508. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istring.hpp +11 -11
  509. data/ext/third_party/json/include/tao/json/external/pegtl/internal/iterator.hpp +7 -10
  510. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_crlf_eol.hpp +2 -2
  511. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_eol.hpp +2 -2
  512. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail.hpp +4 -2
  513. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail_pad.hpp +1 -1
  514. data/ext/third_party/json/include/tao/json/external/pegtl/internal/marker.hpp +3 -5
  515. data/ext/third_party/json/include/tao/json/external/pegtl/internal/minus.hpp +21 -0
  516. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply.hpp +5 -2
  517. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply0.hpp +5 -2
  518. data/ext/third_party/json/include/tao/json/external/pegtl/internal/must.hpp +16 -24
  519. data/ext/third_party/json/include/tao/json/external/pegtl/internal/not_at.hpp +17 -15
  520. data/ext/third_party/json/include/tao/json/external/pegtl/internal/one.hpp +23 -12
  521. data/ext/third_party/json/include/tao/json/external/pegtl/internal/opt.hpp +16 -16
  522. data/ext/third_party/json/include/tao/json/external/pegtl/internal/path_to_string.hpp +26 -0
  523. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_char.hpp +5 -5
  524. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf8.hpp +12 -13
  525. data/ext/third_party/json/include/tao/json/external/pegtl/internal/plus.hpp +18 -11
  526. data/ext/third_party/json/include/tao/json/external/pegtl/internal/raise.hpp +8 -17
  527. data/ext/third_party/json/include/tao/json/external/pegtl/internal/range.hpp +22 -17
  528. data/ext/third_party/json/include/tao/json/external/pegtl/internal/ranges.hpp +28 -18
  529. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rematch.hpp +12 -9
  530. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep.hpp +26 -25
  531. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min_max.hpp +23 -21
  532. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_opt.hpp +24 -9
  533. data/ext/third_party/json/include/tao/json/external/pegtl/internal/require.hpp +10 -10
  534. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rules.hpp +4 -4
  535. data/ext/third_party/json/include/tao/json/external/pegtl/internal/seq.hpp +18 -33
  536. data/ext/third_party/json/include/tao/json/external/pegtl/internal/sor.hpp +24 -17
  537. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star.hpp +13 -8
  538. data/ext/third_party/json/include/tao/json/external/pegtl/internal/state.hpp +21 -11
  539. data/ext/third_party/json/include/tao/json/external/pegtl/internal/string.hpp +11 -11
  540. data/ext/third_party/json/include/tao/json/external/pegtl/internal/success.hpp +32 -0
  541. data/ext/third_party/json/include/tao/json/external/pegtl/internal/try_catch_type.hpp +16 -16
  542. data/ext/third_party/json/include/tao/json/external/pegtl/internal/until.hpp +18 -14
  543. data/ext/third_party/json/include/tao/json/external/pegtl/istream_input.hpp +2 -3
  544. data/ext/third_party/json/include/tao/json/external/pegtl/match.hpp +125 -29
  545. data/ext/third_party/json/include/tao/json/external/pegtl/memory_input.hpp +32 -48
  546. data/ext/third_party/json/include/tao/json/external/pegtl/mmap_input.hpp +16 -16
  547. data/ext/third_party/json/include/tao/json/external/pegtl/must_if.hpp +64 -0
  548. data/ext/third_party/json/include/tao/json/external/pegtl/normal.hpp +25 -25
  549. data/ext/third_party/json/include/tao/json/external/pegtl/nothing.hpp +1 -2
  550. data/ext/third_party/json/include/tao/json/external/pegtl/parse.hpp +6 -8
  551. data/ext/third_party/json/include/tao/json/external/pegtl/parse_error.hpp +80 -35
  552. data/ext/third_party/json/include/tao/json/external/pegtl/position.hpp +18 -10
  553. data/ext/third_party/json/include/tao/json/external/pegtl/read_input.hpp +18 -38
  554. data/ext/third_party/json/include/tao/json/external/pegtl/rules.hpp +6 -5
  555. data/ext/third_party/json/include/tao/json/external/pegtl/string_input.hpp +3 -5
  556. data/ext/third_party/json/include/tao/json/external/pegtl/type_list.hpp +46 -0
  557. data/ext/third_party/json/include/tao/json/external/pegtl/visit.hpp +66 -0
  558. data/ext/third_party/json/include/tao/json/from_file.hpp +5 -5
  559. data/ext/third_party/json/include/tao/json/internal/action.hpp +3 -3
  560. data/ext/third_party/json/include/tao/json/internal/dependent_false.hpp +14 -0
  561. data/ext/third_party/json/include/tao/json/internal/errors.hpp +17 -17
  562. data/ext/third_party/json/include/tao/json/internal/format.hpp +0 -2
  563. data/ext/third_party/json/include/tao/json/internal/grammar.hpp +17 -17
  564. data/ext/third_party/json/include/tao/json/internal/pair.hpp +1 -1
  565. data/ext/third_party/json/include/tao/json/internal/sha256.hpp +8 -8
  566. data/ext/third_party/json/include/tao/json/internal/single.hpp +1 -1
  567. data/ext/third_party/json/include/tao/json/internal/type_traits.hpp +12 -29
  568. data/ext/third_party/json/include/tao/json/jaxn/consume_file.hpp +7 -7
  569. data/ext/third_party/json/include/tao/json/jaxn/events/from_file.hpp +4 -4
  570. data/ext/third_party/json/include/tao/json/jaxn/events/from_string.hpp +2 -2
  571. data/ext/third_party/json/include/tao/json/jaxn/from_file.hpp +5 -5
  572. data/ext/third_party/json/include/tao/json/jaxn/internal/action.hpp +6 -6
  573. data/ext/third_party/json/include/tao/json/jaxn/internal/bunescape_action.hpp +2 -2
  574. data/ext/third_party/json/include/tao/json/jaxn/internal/errors.hpp +43 -43
  575. data/ext/third_party/json/include/tao/json/jaxn/internal/grammar.hpp +36 -36
  576. data/ext/third_party/json/include/tao/json/jaxn/internal/integer.hpp +10 -11
  577. data/ext/third_party/json/include/tao/json/jaxn/is_identifier.hpp +2 -2
  578. data/ext/third_party/json/include/tao/json/jaxn/parts_parser.hpp +1 -3
  579. data/ext/third_party/json/include/tao/json/message_extension.hpp +2 -2
  580. data/ext/third_party/json/include/tao/json/msgpack.hpp +1 -0
  581. data/ext/third_party/json/include/tao/json/msgpack/consume_file.hpp +7 -7
  582. data/ext/third_party/json/include/tao/json/msgpack/events/from_binary.hpp +43 -0
  583. data/ext/third_party/json/include/tao/json/msgpack/events/from_file.hpp +4 -4
  584. data/ext/third_party/json/include/tao/json/msgpack/events/from_string.hpp +4 -4
  585. data/ext/third_party/json/include/tao/json/msgpack/events/to_stream.hpp +4 -4
  586. data/ext/third_party/json/include/tao/json/msgpack/from_binary.hpp +32 -0
  587. data/ext/third_party/json/include/tao/json/msgpack/from_file.hpp +5 -5
  588. data/ext/third_party/json/include/tao/json/msgpack/internal/grammar.hpp +2 -1
  589. data/ext/third_party/json/include/tao/json/operators.hpp +0 -4
  590. data/ext/third_party/json/include/tao/json/parts_parser.hpp +3 -7
  591. data/ext/third_party/json/include/tao/json/self_contained.hpp +6 -18
  592. data/ext/third_party/json/include/tao/json/span.hpp +94 -166
  593. data/ext/third_party/json/include/tao/json/ubjson.hpp +1 -0
  594. data/ext/third_party/json/include/tao/json/ubjson/consume_file.hpp +7 -7
  595. data/ext/third_party/json/include/tao/json/ubjson/events/from_binary.hpp +43 -0
  596. data/ext/third_party/json/include/tao/json/ubjson/events/from_file.hpp +4 -4
  597. data/ext/third_party/json/include/tao/json/ubjson/events/from_string.hpp +3 -3
  598. data/ext/third_party/json/include/tao/json/ubjson/from_binary.hpp +32 -0
  599. data/ext/third_party/json/include/tao/json/ubjson/from_file.hpp +5 -5
  600. data/ext/third_party/json/include/tao/json/ubjson/internal/grammar.hpp +5 -3
  601. data/ext/third_party/json/include/tao/json/utf8.hpp +1 -1
  602. data/ext/third_party/snappy/snappy.cc +6 -2
  603. data/ext/third_party/spdlog/CMakeLists.txt +24 -57
  604. data/ext/third_party/spdlog/cmake/version.rc.in +1 -1
  605. data/ext/third_party/spdlog/include/spdlog/async.h +3 -3
  606. data/ext/third_party/spdlog/include/spdlog/cfg/argv.h +3 -4
  607. data/ext/third_party/spdlog/include/spdlog/cfg/env.h +6 -4
  608. data/ext/third_party/spdlog/include/spdlog/cfg/helpers-inl.h +22 -6
  609. data/ext/third_party/spdlog/include/spdlog/cfg/helpers.h +3 -2
  610. data/ext/third_party/spdlog/include/spdlog/common.h +1 -2
  611. data/ext/third_party/spdlog/include/spdlog/details/fmt_helper.h +9 -1
  612. data/ext/third_party/spdlog/include/spdlog/details/os.h +1 -1
  613. data/ext/third_party/spdlog/include/spdlog/details/registry-inl.h +21 -7
  614. data/ext/third_party/spdlog/include/spdlog/details/registry.h +6 -3
  615. data/ext/third_party/spdlog/include/spdlog/details/synchronous_factory.h +1 -1
  616. data/ext/third_party/spdlog/include/spdlog/details/tcp_client-windows.h +1 -1
  617. data/ext/third_party/spdlog/include/spdlog/details/tcp_client.h +8 -7
  618. data/ext/third_party/spdlog/include/spdlog/fmt/bin_to_hex.h +2 -2
  619. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/chrono.h +66 -62
  620. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/color.h +35 -37
  621. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/compile.h +173 -103
  622. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/core.h +538 -445
  623. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format-inl.h +114 -64
  624. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format.h +1152 -1071
  625. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/locale.h +16 -16
  626. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/os.h +450 -0
  627. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ostream.h +37 -13
  628. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/posix.h +1 -1
  629. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/printf.h +93 -63
  630. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ranges.h +35 -36
  631. data/ext/third_party/spdlog/include/spdlog/fmt/chrono.h +20 -0
  632. data/ext/third_party/spdlog/include/spdlog/fmt/fmt.h +2 -0
  633. data/ext/third_party/spdlog/include/spdlog/logger-inl.h +5 -1
  634. data/ext/third_party/spdlog/include/spdlog/logger.h +50 -76
  635. data/ext/third_party/spdlog/include/spdlog/pattern_formatter-inl.h +23 -8
  636. data/ext/third_party/spdlog/include/spdlog/pattern_formatter.h +3 -3
  637. data/ext/third_party/spdlog/include/spdlog/sinks/daily_file_sink.h +1 -1
  638. data/ext/third_party/spdlog/include/spdlog/sinks/msvc_sink.h +5 -5
  639. data/ext/third_party/spdlog/include/spdlog/sinks/ringbuffer_sink.h +6 -4
  640. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks-inl.h +32 -3
  641. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks.h +7 -0
  642. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink-inl.h +4 -14
  643. data/ext/third_party/spdlog/include/spdlog/spdlog-inl.h +11 -1
  644. data/ext/third_party/spdlog/include/spdlog/spdlog.h +23 -68
  645. data/ext/third_party/spdlog/include/spdlog/stopwatch.h +61 -0
  646. data/ext/third_party/spdlog/include/spdlog/version.h +2 -2
  647. data/ext/third_party/spdlog/src/fmt.cpp +21 -147
  648. data/lib/couchbase/cluster.rb +111 -1
  649. data/lib/couchbase/collection_options.rb +18 -1
  650. data/lib/couchbase/errors.rb +3 -0
  651. data/lib/couchbase/libcouchbase.bundle +0 -0
  652. data/lib/couchbase/management/bucket_manager.rb +36 -3
  653. data/lib/couchbase/management/search_index_manager.rb +42 -1
  654. data/lib/couchbase/management/user_manager.rb +155 -48
  655. data/lib/couchbase/query_options.rb +7 -0
  656. data/lib/couchbase/scope.rb +1 -0
  657. data/lib/couchbase/search_options.rb +69 -1
  658. data/lib/couchbase/version.rb +1 -1
  659. metadata +171 -267
  660. data/.rubocop.yml +0 -227
  661. data/.rubocop_todo.yml +0 -47
  662. data/.yardopts +0 -1
  663. data/CONTRIBUTING.md +0 -110
  664. data/Gemfile +0 -37
  665. data/Rakefile +0 -51
  666. data/couchbase.gemspec +0 -79
  667. data/examples/analytics.rb +0 -236
  668. data/examples/auth.rb +0 -33
  669. data/examples/crud.rb +0 -34
  670. data/examples/managing_analytics_indexes.rb +0 -86
  671. data/examples/managing_buckets.rb +0 -61
  672. data/examples/managing_collections.rb +0 -71
  673. data/examples/managing_query_indexes.rb +0 -83
  674. data/examples/managing_search_indexes.rb +0 -77
  675. data/examples/managing_view_indexes.rb +0 -68
  676. data/examples/query.rb +0 -32
  677. data/examples/query_with_consistency.rb +0 -86
  678. data/examples/search.rb +0 -202
  679. data/examples/search_with_consistency.rb +0 -97
  680. data/examples/subdocument.rb +0 -63
  681. data/examples/view.rb +0 -59
  682. data/ext/.clang-format +0 -15
  683. data/ext/.clang-tidy +0 -22
  684. data/ext/.cmake-format.yaml +0 -8
  685. data/ext/.gitignore +0 -2
  686. data/ext/.idea/.name +0 -1
  687. data/ext/.idea/dictionaries/couchbase_terms.xml +0 -14
  688. data/ext/.idea/ext.iml +0 -2
  689. data/ext/.idea/misc.xml +0 -16
  690. data/ext/.idea/modules.xml +0 -8
  691. data/ext/.idea/vcs.xml +0 -12
  692. data/ext/test/main.cxx +0 -184
  693. data/ext/third_party/asio/.appveyor.yml +0 -107
  694. data/ext/third_party/asio/.cirrus.yml +0 -16
  695. data/ext/third_party/asio/.gitignore +0 -3
  696. data/ext/third_party/asio/.travis.yml +0 -323
  697. data/ext/third_party/asio/asio/.gitignore +0 -23
  698. data/ext/third_party/asio/asio/COPYING +0 -4
  699. data/ext/third_party/asio/asio/INSTALL +0 -5
  700. data/ext/third_party/asio/asio/LICENSE_1_0.txt +0 -23
  701. data/ext/third_party/asio/asio/Makefile.am +0 -19
  702. data/ext/third_party/asio/asio/README +0 -4
  703. data/ext/third_party/asio/asio/asio.manifest +0 -4865
  704. data/ext/third_party/asio/asio/autogen.sh +0 -55
  705. data/ext/third_party/asio/asio/boost_asio.manifest +0 -5193
  706. data/ext/third_party/asio/asio/boostify.pl +0 -603
  707. data/ext/third_party/asio/asio/configure.ac +0 -182
  708. data/ext/third_party/asio/asio/include/.gitignore +0 -2
  709. data/ext/third_party/asio/asio/include/Makefile.am +0 -484
  710. data/ext/third_party/asio/asio/include/asio/detail/io_object_executor.hpp +0 -167
  711. data/ext/third_party/asio/asio/include/asio/impl/src.cpp +0 -25
  712. data/ext/third_party/asio/asio/release.pl +0 -440
  713. data/ext/third_party/asio/asio/src/.gitignore +0 -11
  714. data/ext/third_party/asio/asio/src/Makefile.am +0 -23
  715. data/ext/third_party/asio/asio/src/Makefile.mgw +0 -204
  716. data/ext/third_party/asio/asio/src/Makefile.msc +0 -497
  717. data/ext/third_party/asio/asio/src/asio.cpp +0 -11
  718. data/ext/third_party/asio/asio/src/asio_ssl.cpp +0 -11
  719. data/ext/third_party/asio/asio/src/doc/.gitignore +0 -5
  720. data/ext/third_party/asio/asio/src/doc/Jamfile.v2 +0 -62
  721. data/ext/third_party/asio/asio/src/doc/asio.png +0 -0
  722. data/ext/third_party/asio/asio/src/doc/asio.qbk +0 -127
  723. data/ext/third_party/asio/asio/src/doc/asioref.sty +0 -90
  724. data/ext/third_party/asio/asio/src/doc/asioref.xsl +0 -94
  725. data/ext/third_party/asio/asio/src/doc/boost_bind_dox.txt +0 -5
  726. data/ext/third_party/asio/asio/src/doc/doxy2qbk.pl +0 -22
  727. data/ext/third_party/asio/asio/src/doc/examples.qbk +0 -564
  728. data/ext/third_party/asio/asio/src/doc/history.qbk +0 -1794
  729. data/ext/third_party/asio/asio/src/doc/index.xml +0 -13
  730. data/ext/third_party/asio/asio/src/doc/makepdf.pl +0 -26
  731. data/ext/third_party/asio/asio/src/doc/net_ts.qbk +0 -479
  732. data/ext/third_party/asio/asio/src/doc/noncopyable_dox.txt +0 -3
  733. data/ext/third_party/asio/asio/src/doc/overview.qbk +0 -103
  734. data/ext/third_party/asio/asio/src/doc/overview/allocation.qbk +0 -89
  735. data/ext/third_party/asio/asio/src/doc/overview/async.qbk +0 -185
  736. data/ext/third_party/asio/asio/src/doc/overview/async_op1.dot +0 -78
  737. data/ext/third_party/asio/asio/src/doc/overview/async_op1.png +0 -0
  738. data/ext/third_party/asio/asio/src/doc/overview/async_op2.dot +0 -78
  739. data/ext/third_party/asio/asio/src/doc/overview/async_op2.png +0 -0
  740. data/ext/third_party/asio/asio/src/doc/overview/basics.qbk +0 -106
  741. data/ext/third_party/asio/asio/src/doc/overview/bsd_sockets.qbk +0 -270
  742. data/ext/third_party/asio/asio/src/doc/overview/buffers.qbk +0 -163
  743. data/ext/third_party/asio/asio/src/doc/overview/concurrency_hint.qbk +0 -88
  744. data/ext/third_party/asio/asio/src/doc/overview/coroutine.qbk +0 -51
  745. data/ext/third_party/asio/asio/src/doc/overview/coroutines_ts.qbk +0 -97
  746. data/ext/third_party/asio/asio/src/doc/overview/cpp2011.qbk +0 -271
  747. data/ext/third_party/asio/asio/src/doc/overview/handler_tracking.qbk +0 -220
  748. data/ext/third_party/asio/asio/src/doc/overview/implementation.qbk +0 -305
  749. data/ext/third_party/asio/asio/src/doc/overview/iostreams.qbk +0 -72
  750. data/ext/third_party/asio/asio/src/doc/overview/line_based.qbk +0 -118
  751. data/ext/third_party/asio/asio/src/doc/overview/other_protocols.qbk +0 -94
  752. data/ext/third_party/asio/asio/src/doc/overview/posix.qbk +0 -152
  753. data/ext/third_party/asio/asio/src/doc/overview/proactor.dot +0 -100
  754. data/ext/third_party/asio/asio/src/doc/overview/proactor.png +0 -0
  755. data/ext/third_party/asio/asio/src/doc/overview/protocols.qbk +0 -149
  756. data/ext/third_party/asio/asio/src/doc/overview/rationale.qbk +0 -54
  757. data/ext/third_party/asio/asio/src/doc/overview/reactor.qbk +0 -44
  758. data/ext/third_party/asio/asio/src/doc/overview/serial_ports.qbk +0 -45
  759. data/ext/third_party/asio/asio/src/doc/overview/signals.qbk +0 -44
  760. data/ext/third_party/asio/asio/src/doc/overview/spawn.qbk +0 -102
  761. data/ext/third_party/asio/asio/src/doc/overview/ssl.qbk +0 -124
  762. data/ext/third_party/asio/asio/src/doc/overview/strands.qbk +0 -114
  763. data/ext/third_party/asio/asio/src/doc/overview/streams.qbk +0 -62
  764. data/ext/third_party/asio/asio/src/doc/overview/sync_op.dot +0 -67
  765. data/ext/third_party/asio/asio/src/doc/overview/sync_op.png +0 -0
  766. data/ext/third_party/asio/asio/src/doc/overview/threads.qbk +0 -67
  767. data/ext/third_party/asio/asio/src/doc/overview/timers.qbk +0 -52
  768. data/ext/third_party/asio/asio/src/doc/overview/windows.qbk +0 -126
  769. data/ext/third_party/asio/asio/src/doc/project-root.jam +0 -1
  770. data/ext/third_party/asio/asio/src/doc/quickref.xml +0 -561
  771. data/ext/third_party/asio/asio/src/doc/reference.dox +0 -264
  772. data/ext/third_party/asio/asio/src/doc/reference.qbk +0 -125973
  773. data/ext/third_party/asio/asio/src/doc/reference.xsl +0 -1831
  774. data/ext/third_party/asio/asio/src/doc/release_checklist.htm +0 -68
  775. data/ext/third_party/asio/asio/src/doc/requirements/AcceptHandler.qbk +0 -72
  776. data/ext/third_party/asio/asio/src/doc/requirements/AcceptableProtocol.qbk +0 -25
  777. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessReadDevice.qbk +0 -56
  778. data/ext/third_party/asio/asio/src/doc/requirements/AsyncRandomAccessWriteDevice.qbk +0 -57
  779. data/ext/third_party/asio/asio/src/doc/requirements/AsyncReadStream.qbk +0 -50
  780. data/ext/third_party/asio/asio/src/doc/requirements/AsyncWriteStream.qbk +0 -48
  781. data/ext/third_party/asio/asio/src/doc/requirements/BufferedHandshakeHandler.qbk +0 -55
  782. data/ext/third_party/asio/asio/src/doc/requirements/CompletionCondition.qbk +0 -42
  783. data/ext/third_party/asio/asio/src/doc/requirements/CompletionHandler.qbk +0 -63
  784. data/ext/third_party/asio/asio/src/doc/requirements/ConnectCondition.qbk +0 -34
  785. data/ext/third_party/asio/asio/src/doc/requirements/ConnectHandler.qbk +0 -72
  786. data/ext/third_party/asio/asio/src/doc/requirements/ConstBufferSequence.qbk +0 -53
  787. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer.qbk +0 -16
  788. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v1.qbk +0 -93
  789. data/ext/third_party/asio/asio/src/doc/requirements/DynamicBuffer_v2.qbk +0 -94
  790. data/ext/third_party/asio/asio/src/doc/requirements/Endpoint.qbk +0 -97
  791. data/ext/third_party/asio/asio/src/doc/requirements/EndpointSequence.qbk +0 -30
  792. data/ext/third_party/asio/asio/src/doc/requirements/ExecutionContext.qbk +0 -36
  793. data/ext/third_party/asio/asio/src/doc/requirements/Executor.qbk +0 -141
  794. data/ext/third_party/asio/asio/src/doc/requirements/GettableSerialPortOption.qbk +0 -33
  795. data/ext/third_party/asio/asio/src/doc/requirements/GettableSocketOption.qbk +0 -67
  796. data/ext/third_party/asio/asio/src/doc/requirements/Handler.qbk +0 -64
  797. data/ext/third_party/asio/asio/src/doc/requirements/HandshakeHandler.qbk +0 -72
  798. data/ext/third_party/asio/asio/src/doc/requirements/InternetProtocol.qbk +0 -47
  799. data/ext/third_party/asio/asio/src/doc/requirements/IoControlCommand.qbk +0 -34
  800. data/ext/third_party/asio/asio/src/doc/requirements/IoObjectService.qbk +0 -62
  801. data/ext/third_party/asio/asio/src/doc/requirements/IteratorConnectHandler.qbk +0 -81
  802. data/ext/third_party/asio/asio/src/doc/requirements/LegacyCompletionHandler.qbk +0 -65
  803. data/ext/third_party/asio/asio/src/doc/requirements/MoveAcceptHandler.qbk +0 -61
  804. data/ext/third_party/asio/asio/src/doc/requirements/MutableBufferSequence.qbk +0 -54
  805. data/ext/third_party/asio/asio/src/doc/requirements/ProtoAllocator.qbk +0 -19
  806. data/ext/third_party/asio/asio/src/doc/requirements/Protocol.qbk +0 -56
  807. data/ext/third_party/asio/asio/src/doc/requirements/RangeConnectHandler.qbk +0 -82
  808. data/ext/third_party/asio/asio/src/doc/requirements/ReadHandler.qbk +0 -79
  809. data/ext/third_party/asio/asio/src/doc/requirements/ResolveHandler.qbk +0 -82
  810. data/ext/third_party/asio/asio/src/doc/requirements/Service.qbk +0 -40
  811. data/ext/third_party/asio/asio/src/doc/requirements/SettableSerialPortOption.qbk +0 -33
  812. data/ext/third_party/asio/asio/src/doc/requirements/SettableSocketOption.qbk +0 -54
  813. data/ext/third_party/asio/asio/src/doc/requirements/ShutdownHandler.qbk +0 -72
  814. data/ext/third_party/asio/asio/src/doc/requirements/SignalHandler.qbk +0 -79
  815. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessReadDevice.qbk +0 -49
  816. data/ext/third_party/asio/asio/src/doc/requirements/SyncRandomAccessWriteDevice.qbk +0 -49
  817. data/ext/third_party/asio/asio/src/doc/requirements/SyncReadStream.qbk +0 -41
  818. data/ext/third_party/asio/asio/src/doc/requirements/SyncWriteStream.qbk +0 -39
  819. data/ext/third_party/asio/asio/src/doc/requirements/TimeTraits.qbk +0 -72
  820. data/ext/third_party/asio/asio/src/doc/requirements/WaitHandler.qbk +0 -72
  821. data/ext/third_party/asio/asio/src/doc/requirements/WaitTraits.qbk +0 -52
  822. data/ext/third_party/asio/asio/src/doc/requirements/WriteHandler.qbk +0 -79
  823. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_operations.qbk +0 -300
  824. data/ext/third_party/asio/asio/src/doc/requirements/asynchronous_socket_operations.qbk +0 -39
  825. data/ext/third_party/asio/asio/src/doc/requirements/read_write_operations.qbk +0 -34
  826. data/ext/third_party/asio/asio/src/doc/requirements/synchronous_socket_operations.qbk +0 -37
  827. data/ext/third_party/asio/asio/src/doc/std_exception_dox.txt +0 -7
  828. data/ext/third_party/asio/asio/src/doc/tutorial.dox +0 -226
  829. data/ext/third_party/asio/asio/src/doc/tutorial.qbk +0 -2387
  830. data/ext/third_party/asio/asio/src/doc/tutorial.xsl +0 -437
  831. data/ext/third_party/asio/asio/src/doc/using.qbk +0 -309
  832. data/ext/third_party/asio/asio/tsify.pl +0 -574
  833. data/ext/third_party/gsl/.clang-format +0 -34
  834. data/ext/third_party/gsl/.github/workflows/main.yml +0 -94
  835. data/ext/third_party/gsl/.gitignore +0 -16
  836. data/ext/third_party/gsl/.travis.yml +0 -551
  837. data/ext/third_party/gsl/CMakeSettings.json +0 -18
  838. data/ext/third_party/gsl/CONTRIBUTING.md +0 -29
  839. data/ext/third_party/gsl/GSL.natvis +0 -98
  840. data/ext/third_party/gsl/README.md +0 -124
  841. data/ext/third_party/gsl/appveyor.yml +0 -128
  842. data/ext/third_party/http_parser/.gitignore +0 -30
  843. data/ext/third_party/http_parser/.mailmap +0 -8
  844. data/ext/third_party/http_parser/.travis.yml +0 -13
  845. data/ext/third_party/http_parser/AUTHORS +0 -68
  846. data/ext/third_party/http_parser/Makefile +0 -160
  847. data/ext/third_party/http_parser/README.md +0 -246
  848. data/ext/third_party/http_parser/bench.c +0 -128
  849. data/ext/third_party/http_parser/http_parser.gyp +0 -111
  850. data/ext/third_party/http_parser/test.c +0 -4600
  851. data/ext/third_party/json/.appveyor.yml +0 -44
  852. data/ext/third_party/json/.clang-format +0 -84
  853. data/ext/third_party/json/.conan/build.py +0 -80
  854. data/ext/third_party/json/.conan/test_package/CMakeLists.txt +0 -12
  855. data/ext/third_party/json/.conan/test_package/conanfile.py +0 -24
  856. data/ext/third_party/json/.conan/test_package/test_package.cpp +0 -16
  857. data/ext/third_party/json/.gitignore +0 -3
  858. data/ext/third_party/json/.travis.yml +0 -173
  859. data/ext/third_party/json/Makefile +0 -77
  860. data/ext/third_party/json/README.md +0 -149
  861. data/ext/third_party/json/conanfile.py +0 -28
  862. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/analyze_cycles.hpp +0 -127
  863. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/counted.hpp +0 -23
  864. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/generic.hpp +0 -31
  865. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/grammar_info.hpp +0 -32
  866. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_guard.hpp +0 -51
  867. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/insert_rules.hpp +0 -25
  868. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_info.hpp +0 -29
  869. data/ext/third_party/json/include/tao/json/external/pegtl/analysis/rule_type.hpp +0 -21
  870. data/ext/third_party/json/include/tao/json/external/pegtl/analyze.hpp +0 -21
  871. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/counter.hpp +0 -54
  872. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/tracer.hpp +0 -158
  873. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alnum.hpp +0 -18
  874. data/ext/third_party/json/include/tao/json/external/pegtl/internal/alpha.hpp +0 -18
  875. data/ext/third_party/json/include/tao/json/external/pegtl/internal/dusel_mode.hpp +0 -23
  876. data/ext/third_party/json/include/tao/json/external/pegtl/internal/duseltronik.hpp +0 -187
  877. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_opener.hpp +0 -72
  878. data/ext/third_party/json/include/tao/json/external/pegtl/internal/trivial.hpp +0 -32
  879. data/ext/third_party/snappy/.appveyor.yml +0 -36
  880. data/ext/third_party/snappy/.gitignore +0 -8
  881. data/ext/third_party/snappy/.travis.yml +0 -98
  882. data/ext/third_party/snappy/AUTHORS +0 -1
  883. data/ext/third_party/snappy/CONTRIBUTING.md +0 -26
  884. data/ext/third_party/snappy/NEWS +0 -188
  885. data/ext/third_party/snappy/README.md +0 -148
  886. data/ext/third_party/snappy/docs/README.md +0 -72
  887. data/ext/third_party/snappy/format_description.txt +0 -110
  888. data/ext/third_party/snappy/framing_format.txt +0 -135
  889. data/ext/third_party/snappy/snappy-test.cc +0 -613
  890. data/ext/third_party/snappy/snappy-test.h +0 -526
  891. data/ext/third_party/snappy/snappy_compress_fuzzer.cc +0 -60
  892. data/ext/third_party/snappy/snappy_uncompress_fuzzer.cc +0 -58
  893. data/ext/third_party/snappy/snappy_unittest.cc +0 -1512
  894. data/ext/third_party/spdlog/.clang-format +0 -108
  895. data/ext/third_party/spdlog/.clang-tidy +0 -54
  896. data/ext/third_party/spdlog/.gitattributes +0 -1
  897. data/ext/third_party/spdlog/.gitignore +0 -83
  898. data/ext/third_party/spdlog/.travis.yml +0 -112
  899. data/ext/third_party/spdlog/INSTALL +0 -24
  900. data/ext/third_party/spdlog/README.md +0 -423
  901. data/ext/third_party/spdlog/appveyor.yml +0 -51
  902. data/ext/third_party/spdlog/include/spdlog/cfg/log_levels.h +0 -47
@@ -18,32 +18,7 @@
18
18
  #include <vector>
19
19
 
20
20
  // The fmt library version in the form major * 10000 + minor * 100 + patch.
21
- #define FMT_VERSION 60200
22
-
23
- #ifdef __has_feature
24
- # define FMT_HAS_FEATURE(x) __has_feature(x)
25
- #else
26
- # define FMT_HAS_FEATURE(x) 0
27
- #endif
28
-
29
- #if defined(__has_include) && !defined(__INTELLISENSE__) && \
30
- !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600)
31
- # define FMT_HAS_INCLUDE(x) __has_include(x)
32
- #else
33
- # define FMT_HAS_INCLUDE(x) 0
34
- #endif
35
-
36
- #ifdef __has_cpp_attribute
37
- # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
38
- #else
39
- # define FMT_HAS_CPP_ATTRIBUTE(x) 0
40
- #endif
41
-
42
- #define FMT_HAS_CPP14_ATTRIBUTE(attribute) \
43
- (__cplusplus >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute))
44
-
45
- #define FMT_HAS_CPP17_ATTRIBUTE(attribute) \
46
- (__cplusplus >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute))
21
+ #define FMT_VERSION 70003
47
22
 
48
23
  #ifdef __clang__
49
24
  # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
@@ -57,6 +32,12 @@
57
32
  # define FMT_GCC_VERSION 0
58
33
  #endif
59
34
 
35
+ #if defined(__INTEL_COMPILER)
36
+ # define FMT_ICC_VERSION __INTEL_COMPILER
37
+ #else
38
+ # define FMT_ICC_VERSION 0
39
+ #endif
40
+
60
41
  #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
61
42
  # define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION
62
43
  #else
@@ -71,17 +52,43 @@
71
52
 
72
53
  #ifdef _MSC_VER
73
54
  # define FMT_MSC_VER _MSC_VER
55
+ # define FMT_SUPPRESS_MSC_WARNING(n) __pragma(warning(suppress : n))
74
56
  #else
75
57
  # define FMT_MSC_VER 0
58
+ # define FMT_SUPPRESS_MSC_WARNING(n)
59
+ #endif
60
+ #ifdef __has_feature
61
+ # define FMT_HAS_FEATURE(x) __has_feature(x)
62
+ #else
63
+ # define FMT_HAS_FEATURE(x) 0
76
64
  #endif
77
65
 
66
+ #if defined(__has_include) && !defined(__INTELLISENSE__) && \
67
+ !(FMT_ICC_VERSION && FMT_ICC_VERSION < 1600)
68
+ # define FMT_HAS_INCLUDE(x) __has_include(x)
69
+ #else
70
+ # define FMT_HAS_INCLUDE(x) 0
71
+ #endif
72
+
73
+ #ifdef __has_cpp_attribute
74
+ # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
75
+ #else
76
+ # define FMT_HAS_CPP_ATTRIBUTE(x) 0
77
+ #endif
78
+
79
+ #define FMT_HAS_CPP14_ATTRIBUTE(attribute) \
80
+ (__cplusplus >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute))
81
+
82
+ #define FMT_HAS_CPP17_ATTRIBUTE(attribute) \
83
+ (__cplusplus >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute))
84
+
78
85
  // Check if relaxed C++14 constexpr is supported.
79
86
  // GCC doesn't allow throw in constexpr until version 6 (bug 67371).
80
87
  #ifndef FMT_USE_CONSTEXPR
81
88
  # define FMT_USE_CONSTEXPR \
82
89
  (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \
83
90
  (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) && \
84
- !FMT_NVCC
91
+ !FMT_NVCC && !FMT_ICC_VERSION
85
92
  #endif
86
93
  #if FMT_USE_CONSTEXPR
87
94
  # define FMT_CONSTEXPR constexpr
@@ -141,14 +148,6 @@
141
148
  # define FMT_NORETURN
142
149
  #endif
143
150
 
144
- #ifndef FMT_MAYBE_UNUSED
145
- # if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused)
146
- # define FMT_MAYBE_UNUSED [[maybe_unused]]
147
- # else
148
- # define FMT_MAYBE_UNUSED
149
- # endif
150
- #endif
151
-
152
151
  #ifndef FMT_DEPRECATED
153
152
  # if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900
154
153
  # define FMT_DEPRECATED [[deprecated]]
@@ -164,12 +163,20 @@
164
163
  #endif
165
164
 
166
165
  // Workaround broken [[deprecated]] in the Intel, PGI and NVCC compilers.
167
- #if defined(__INTEL_COMPILER) || defined(__PGI) || FMT_NVCC
166
+ #if FMT_ICC_VERSION || defined(__PGI) || FMT_NVCC
168
167
  # define FMT_DEPRECATED_ALIAS
169
168
  #else
170
169
  # define FMT_DEPRECATED_ALIAS FMT_DEPRECATED
171
170
  #endif
172
171
 
172
+ #ifndef FMT_INLINE
173
+ # if FMT_GCC_VERSION || FMT_CLANG_VERSION
174
+ # define FMT_INLINE inline __attribute__((always_inline))
175
+ # else
176
+ # define FMT_INLINE inline
177
+ # endif
178
+ #endif
179
+
173
180
  #ifndef FMT_BEGIN_NAMESPACE
174
181
  # if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \
175
182
  FMT_MSC_VER >= 1900
@@ -181,39 +188,29 @@
181
188
  # define FMT_INLINE_NAMESPACE namespace
182
189
  # define FMT_END_NAMESPACE \
183
190
  } \
184
- using namespace v6; \
191
+ using namespace v7; \
185
192
  }
186
193
  # endif
187
194
  # define FMT_BEGIN_NAMESPACE \
188
195
  namespace fmt { \
189
- FMT_INLINE_NAMESPACE v6 {
196
+ FMT_INLINE_NAMESPACE v7 {
190
197
  #endif
191
198
 
192
199
  #if !defined(FMT_HEADER_ONLY) && defined(_WIN32)
193
- # if FMT_MSC_VER
194
- # define FMT_NO_W4275 __pragma(warning(suppress : 4275))
195
- # else
196
- # define FMT_NO_W4275
197
- # endif
198
- # define FMT_CLASS_API FMT_NO_W4275
200
+ # define FMT_CLASS_API FMT_SUPPRESS_MSC_WARNING(4275)
199
201
  # ifdef FMT_EXPORT
200
202
  # define FMT_API __declspec(dllexport)
203
+ # define FMT_EXTERN_TEMPLATE_API FMT_API
204
+ # define FMT_EXPORTED
201
205
  # elif defined(FMT_SHARED)
202
206
  # define FMT_API __declspec(dllimport)
203
207
  # define FMT_EXTERN_TEMPLATE_API FMT_API
204
208
  # endif
205
- #endif
206
- #ifndef FMT_CLASS_API
209
+ #else
207
210
  # define FMT_CLASS_API
208
211
  #endif
209
212
  #ifndef FMT_API
210
- # if FMT_GCC_VERSION || FMT_CLANG_VERSION
211
- # define FMT_API __attribute__((visibility("default")))
212
- # define FMT_EXTERN_TEMPLATE_API FMT_API
213
- # define FMT_INSTANTIATION_DEF_API
214
- # else
215
- # define FMT_API
216
- # endif
213
+ # define FMT_API
217
214
  #endif
218
215
  #ifndef FMT_EXTERN_TEMPLATE_API
219
216
  # define FMT_EXTERN_TEMPLATE_API
@@ -270,14 +267,11 @@ struct monostate {};
270
267
  // to workaround a bug in MSVC 2019 (see #1140 and #1186).
271
268
  #define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0
272
269
 
273
- namespace internal {
270
+ namespace detail {
274
271
 
275
272
  // A helper function to suppress bogus "conditional expression is constant"
276
273
  // warnings.
277
- template <typename T> FMT_CONSTEXPR T const_check(T value) { return value; }
278
-
279
- // A workaround for gcc 4.8 to make void_t work in a SFINAE context.
280
- template <typename... Ts> struct void_t_impl { using type = void; };
274
+ template <typename T> constexpr T const_check(T value) { return value; }
281
275
 
282
276
  FMT_NORETURN FMT_API void assert_fail(const char* file, int line,
283
277
  const char* message);
@@ -290,7 +284,7 @@ FMT_NORETURN FMT_API void assert_fail(const char* file, int line,
290
284
  # define FMT_ASSERT(condition, message) \
291
285
  ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
292
286
  ? (void)0 \
293
- : ::fmt::internal::assert_fail(__FILE__, __LINE__, (message)))
287
+ : ::fmt::detail::assert_fail(__FILE__, __LINE__, (message)))
294
288
  # endif
295
289
  #endif
296
290
 
@@ -305,7 +299,7 @@ template <typename T> struct std_string_view {};
305
299
 
306
300
  #ifdef FMT_USE_INT128
307
301
  // Do nothing.
308
- #elif defined(__SIZEOF_INT128__) && !FMT_NVCC
302
+ #elif defined(__SIZEOF_INT128__) && !FMT_NVCC && !(FMT_CLANG_VERSION && FMT_MSC_VER)
309
303
  # define FMT_USE_INT128 1
310
304
  using int128_t = __int128_t;
311
305
  using uint128_t = __uint128_t;
@@ -324,7 +318,7 @@ FMT_CONSTEXPR typename std::make_unsigned<Int>::type to_unsigned(Int value) {
324
318
  return static_cast<typename std::make_unsigned<Int>::type>(value);
325
319
  }
326
320
 
327
- constexpr unsigned char micro[] = "\u00B5";
321
+ FMT_SUPPRESS_MSC_WARNING(4566) constexpr unsigned char micro[] = "\u00B5";
328
322
 
329
323
  template <typename Char> constexpr bool is_unicode() {
330
324
  return FMT_UNICODE || sizeof(Char) != 1 ||
@@ -336,10 +330,11 @@ using char8_type = char8_t;
336
330
  #else
337
331
  enum char8_type : unsigned char {};
338
332
  #endif
339
- } // namespace internal
333
+ } // namespace detail
340
334
 
341
- template <typename... Ts>
342
- using void_t = typename internal::void_t_impl<Ts...>::type;
335
+ #ifdef FMT_USE_INTERNAL
336
+ namespace internal = detail; // DEPRECATED
337
+ #endif
343
338
 
344
339
  /**
345
340
  An implementation of ``std::basic_string_view`` for pre-C++17. It provides a
@@ -354,14 +349,13 @@ template <typename Char> class basic_string_view {
354
349
  size_t size_;
355
350
 
356
351
  public:
357
- using char_type FMT_DEPRECATED_ALIAS = Char;
358
352
  using value_type = Char;
359
353
  using iterator = const Char*;
360
354
 
361
- FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {}
355
+ constexpr basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {}
362
356
 
363
357
  /** Constructs a string reference object from a C string and a size. */
364
- FMT_CONSTEXPR basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT
358
+ constexpr basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT
365
359
  : data_(s),
366
360
  size_(count) {}
367
361
 
@@ -384,22 +378,21 @@ template <typename Char> class basic_string_view {
384
378
  : data_(s.data()),
385
379
  size_(s.size()) {}
386
380
 
387
- template <
388
- typename S,
389
- FMT_ENABLE_IF(std::is_same<S, internal::std_string_view<Char>>::value)>
381
+ template <typename S, FMT_ENABLE_IF(std::is_same<
382
+ S, detail::std_string_view<Char>>::value)>
390
383
  FMT_CONSTEXPR basic_string_view(S s) FMT_NOEXCEPT : data_(s.data()),
391
384
  size_(s.size()) {}
392
385
 
393
386
  /** Returns a pointer to the string data. */
394
- FMT_CONSTEXPR const Char* data() const { return data_; }
387
+ constexpr const Char* data() const { return data_; }
395
388
 
396
389
  /** Returns the string size. */
397
- FMT_CONSTEXPR size_t size() const { return size_; }
390
+ constexpr size_t size() const { return size_; }
398
391
 
399
- FMT_CONSTEXPR iterator begin() const { return data_; }
400
- FMT_CONSTEXPR iterator end() const { return data_ + size_; }
392
+ constexpr iterator begin() const { return data_; }
393
+ constexpr iterator end() const { return data_ + size_; }
401
394
 
402
- FMT_CONSTEXPR const Char& operator[](size_t pos) const { return data_[pos]; }
395
+ constexpr const Char& operator[](size_t pos) const { return data_[pos]; }
403
396
 
404
397
  FMT_CONSTEXPR void remove_prefix(size_t n) {
405
398
  data_ += n;
@@ -438,16 +431,11 @@ template <typename Char> class basic_string_view {
438
431
  using string_view = basic_string_view<char>;
439
432
  using wstring_view = basic_string_view<wchar_t>;
440
433
 
441
- #ifndef __cpp_char8_t
442
- // char8_t is deprecated; use char instead.
443
- using char8_t FMT_DEPRECATED_ALIAS = internal::char8_type;
444
- #endif
445
-
446
434
  /** Specifies if ``T`` is a character type. Can be specialized by users. */
447
435
  template <typename T> struct is_char : std::false_type {};
448
436
  template <> struct is_char<char> : std::true_type {};
449
437
  template <> struct is_char<wchar_t> : std::true_type {};
450
- template <> struct is_char<internal::char8_type> : std::true_type {};
438
+ template <> struct is_char<detail::char8_type> : std::true_type {};
451
439
  template <> struct is_char<char16_t> : std::true_type {};
452
440
  template <> struct is_char<char32_t> : std::true_type {};
453
441
 
@@ -484,14 +472,13 @@ inline basic_string_view<Char> to_string_view(basic_string_view<Char> s) {
484
472
  }
485
473
 
486
474
  template <typename Char,
487
- FMT_ENABLE_IF(!std::is_empty<internal::std_string_view<Char>>::value)>
488
- inline basic_string_view<Char> to_string_view(
489
- internal::std_string_view<Char> s) {
475
+ FMT_ENABLE_IF(!std::is_empty<detail::std_string_view<Char>>::value)>
476
+ inline basic_string_view<Char> to_string_view(detail::std_string_view<Char> s) {
490
477
  return s;
491
478
  }
492
479
 
493
480
  // A base class for compile-time strings. It is defined in the fmt namespace to
494
- // make formatting functions visible via ADL, e.g. format(fmt("{}"), 42).
481
+ // make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42).
495
482
  struct compile_string {};
496
483
 
497
484
  template <typename S>
@@ -502,9 +489,9 @@ constexpr basic_string_view<typename S::char_type> to_string_view(const S& s) {
502
489
  return s;
503
490
  }
504
491
 
505
- namespace internal {
492
+ namespace detail {
506
493
  void to_string_view(...);
507
- using fmt::v6::to_string_view;
494
+ using fmt::v7::to_string_view;
508
495
 
509
496
  // Specifies whether S is a string type convertible to fmt::basic_string_view.
510
497
  // It should be a constexpr function but MSVC 2017 fails to compile it in
@@ -520,16 +507,16 @@ template <typename S> struct char_t_impl<S, enable_if_t<is_string<S>::value>> {
520
507
  };
521
508
 
522
509
  struct error_handler {
523
- FMT_CONSTEXPR error_handler() = default;
524
- FMT_CONSTEXPR error_handler(const error_handler&) = default;
510
+ constexpr error_handler() = default;
511
+ constexpr error_handler(const error_handler&) = default;
525
512
 
526
513
  // This function is intentionally not constexpr to give a compile-time error.
527
514
  FMT_NORETURN FMT_API void on_error(const char* message);
528
515
  };
529
- } // namespace internal
516
+ } // namespace detail
530
517
 
531
518
  /** String's character type. */
532
- template <typename S> using char_t = typename internal::char_t_impl<S>::type;
519
+ template <typename S> using char_t = typename detail::char_t_impl<S>::type;
533
520
 
534
521
  /**
535
522
  \rst
@@ -547,7 +534,7 @@ template <typename S> using char_t = typename internal::char_t_impl<S>::type;
547
534
  +-----------------------+-------------------------------------+
548
535
  \endrst
549
536
  */
550
- template <typename Char, typename ErrorHandler = internal::error_handler>
537
+ template <typename Char, typename ErrorHandler = detail::error_handler>
551
538
  class basic_format_parse_context : private ErrorHandler {
552
539
  private:
553
540
  basic_string_view<Char> format_str_;
@@ -557,26 +544,24 @@ class basic_format_parse_context : private ErrorHandler {
557
544
  using char_type = Char;
558
545
  using iterator = typename basic_string_view<Char>::iterator;
559
546
 
560
- explicit FMT_CONSTEXPR basic_format_parse_context(
561
- basic_string_view<Char> format_str, ErrorHandler eh = ErrorHandler())
547
+ explicit constexpr basic_format_parse_context(
548
+ basic_string_view<Char> format_str, ErrorHandler eh = {})
562
549
  : ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
563
550
 
564
551
  /**
565
552
  Returns an iterator to the beginning of the format string range being
566
553
  parsed.
567
554
  */
568
- FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT {
569
- return format_str_.begin();
570
- }
555
+ constexpr iterator begin() const FMT_NOEXCEPT { return format_str_.begin(); }
571
556
 
572
557
  /**
573
558
  Returns an iterator past the end of the format string range being parsed.
574
559
  */
575
- FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
560
+ constexpr iterator end() const FMT_NOEXCEPT { return format_str_.end(); }
576
561
 
577
562
  /** Advances the begin iterator to ``it``. */
578
563
  FMT_CONSTEXPR void advance_to(iterator it) {
579
- format_str_.remove_prefix(internal::to_unsigned(it - begin()));
564
+ format_str_.remove_prefix(detail::to_unsigned(it - begin()));
580
565
  }
581
566
 
582
567
  /**
@@ -584,6 +569,8 @@ class basic_format_parse_context : private ErrorHandler {
584
569
  the next argument index and switches to the automatic indexing.
585
570
  */
586
571
  FMT_CONSTEXPR int next_arg_id() {
572
+ // Don't check if the argument id is valid to avoid overhead and because it
573
+ // will be checked during formatting anyway.
587
574
  if (next_arg_id_ >= 0) return next_arg_id_++;
588
575
  on_error("cannot switch from manual to automatic argument indexing");
589
576
  return 0;
@@ -606,20 +593,15 @@ class basic_format_parse_context : private ErrorHandler {
606
593
  ErrorHandler::on_error(message);
607
594
  }
608
595
 
609
- FMT_CONSTEXPR ErrorHandler error_handler() const { return *this; }
596
+ constexpr ErrorHandler error_handler() const { return *this; }
610
597
  };
611
598
 
612
599
  using format_parse_context = basic_format_parse_context<char>;
613
600
  using wformat_parse_context = basic_format_parse_context<wchar_t>;
614
601
 
615
- template <typename Char, typename ErrorHandler = internal::error_handler>
616
- using basic_parse_context FMT_DEPRECATED_ALIAS =
617
- basic_format_parse_context<Char, ErrorHandler>;
618
- using parse_context FMT_DEPRECATED_ALIAS = basic_format_parse_context<char>;
619
- using wparse_context FMT_DEPRECATED_ALIAS = basic_format_parse_context<wchar_t>;
620
-
621
602
  template <typename Context> class basic_format_arg;
622
603
  template <typename Context> class basic_format_args;
604
+ template <typename Context> class dynamic_format_arg_store;
623
605
 
624
606
  // A formatter for objects of type T.
625
607
  template <typename T, typename Char = char, typename Enable = void>
@@ -628,43 +610,44 @@ struct formatter {
628
610
  formatter() = delete;
629
611
  };
630
612
 
631
- template <typename T, typename Char, typename Enable = void>
632
- struct FMT_DEPRECATED convert_to_int
633
- : bool_constant<!std::is_arithmetic<T>::value &&
634
- std::is_convertible<T, int>::value> {};
635
-
636
613
  // Specifies if T has an enabled formatter specialization. A type can be
637
614
  // formattable even if it doesn't have a formatter e.g. via a conversion.
638
615
  template <typename T, typename Context>
639
616
  using has_formatter =
640
617
  std::is_constructible<typename Context::template formatter_type<T>>;
641
618
 
642
- namespace internal {
619
+ namespace detail {
643
620
 
644
- /** A contiguous memory buffer with an optional growing ability. */
621
+ /**
622
+ \rst
623
+ A contiguous memory buffer with an optional growing ability. It is an internal
624
+ class and shouldn't be used directly, only via `~fmt::basic_memory_buffer`.
625
+ \endrst
626
+ */
645
627
  template <typename T> class buffer {
646
628
  private:
647
629
  T* ptr_;
648
- std::size_t size_;
649
- std::size_t capacity_;
630
+ size_t size_;
631
+ size_t capacity_;
650
632
 
651
633
  protected:
652
634
  // Don't initialize ptr_ since it is not accessed to save a few cycles.
653
- buffer(std::size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {}
635
+ FMT_SUPPRESS_MSC_WARNING(26495)
636
+ buffer(size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {}
654
637
 
655
- buffer(T* p = nullptr, std::size_t sz = 0, std::size_t cap = 0) FMT_NOEXCEPT
638
+ buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) FMT_NOEXCEPT
656
639
  : ptr_(p),
657
640
  size_(sz),
658
641
  capacity_(cap) {}
659
642
 
660
643
  /** Sets the buffer data and capacity. */
661
- void set(T* buf_data, std::size_t buf_capacity) FMT_NOEXCEPT {
644
+ void set(T* buf_data, size_t buf_capacity) FMT_NOEXCEPT {
662
645
  ptr_ = buf_data;
663
646
  capacity_ = buf_capacity;
664
647
  }
665
648
 
666
649
  /** Increases the buffer capacity to hold at least *capacity* elements. */
667
- virtual void grow(std::size_t capacity) = 0;
650
+ virtual void grow(size_t capacity) = 0;
668
651
 
669
652
  public:
670
653
  using value_type = T;
@@ -681,10 +664,10 @@ template <typename T> class buffer {
681
664
  const T* end() const FMT_NOEXCEPT { return ptr_ + size_; }
682
665
 
683
666
  /** Returns the size of this buffer. */
684
- std::size_t size() const FMT_NOEXCEPT { return size_; }
667
+ size_t size() const FMT_NOEXCEPT { return size_; }
685
668
 
686
669
  /** Returns the capacity of this buffer. */
687
- std::size_t capacity() const FMT_NOEXCEPT { return capacity_; }
670
+ size_t capacity() const FMT_NOEXCEPT { return capacity_; }
688
671
 
689
672
  /** Returns a pointer to the buffer data. */
690
673
  T* data() FMT_NOEXCEPT { return ptr_; }
@@ -695,7 +678,7 @@ template <typename T> class buffer {
695
678
  /**
696
679
  Resizes the buffer. If T is a POD type new elements may not be initialized.
697
680
  */
698
- void resize(std::size_t new_size) {
681
+ void resize(size_t new_size) {
699
682
  reserve(new_size);
700
683
  size_ = new_size;
701
684
  }
@@ -704,7 +687,7 @@ template <typename T> class buffer {
704
687
  void clear() { size_ = 0; }
705
688
 
706
689
  /** Reserves space to store at least *capacity* elements. */
707
- void reserve(std::size_t new_capacity) {
690
+ void reserve(size_t new_capacity) {
708
691
  if (new_capacity > capacity_) grow(new_capacity);
709
692
  }
710
693
 
@@ -729,7 +712,7 @@ class container_buffer : public buffer<typename Container::value_type> {
729
712
  Container& container_;
730
713
 
731
714
  protected:
732
- void grow(std::size_t capacity) FMT_OVERRIDE {
715
+ void grow(size_t capacity) FMT_OVERRIDE {
733
716
  container_.resize(capacity);
734
717
  this->set(&container_[0], capacity);
735
718
  }
@@ -760,12 +743,78 @@ template <typename T, typename Context>
760
743
  using has_fallback_formatter =
761
744
  std::is_constructible<fallback_formatter<T, typename Context::char_type>>;
762
745
 
763
- template <typename Char> struct named_arg_base;
764
- template <typename T, typename Char> struct named_arg;
746
+ struct view {};
747
+
748
+ template <typename Char, typename T> struct named_arg : view {
749
+ const Char* name;
750
+ const T& value;
751
+ named_arg(const Char* n, const T& v) : name(n), value(v) {}
752
+ };
753
+
754
+ template <typename Char> struct named_arg_info {
755
+ const Char* name;
756
+ int id;
757
+ };
758
+
759
+ template <typename T, typename Char, size_t NUM_ARGS, size_t NUM_NAMED_ARGS>
760
+ struct arg_data {
761
+ // args_[0].named_args points to named_args_ to avoid bloating format_args.
762
+ T args_[1 + (NUM_ARGS != 0 ? NUM_ARGS : 1)];
763
+ named_arg_info<Char> named_args_[NUM_NAMED_ARGS];
764
+
765
+ template <typename... U>
766
+ arg_data(const U&... init) : args_{T(named_args_, NUM_NAMED_ARGS), init...} {}
767
+ arg_data(const arg_data& other) = delete;
768
+ const T* args() const { return args_ + 1; }
769
+ named_arg_info<Char>* named_args() { return named_args_; }
770
+ };
771
+
772
+ template <typename T, typename Char, size_t NUM_ARGS>
773
+ struct arg_data<T, Char, NUM_ARGS, 0> {
774
+ T args_[NUM_ARGS != 0 ? NUM_ARGS : 1];
775
+
776
+ template <typename... U>
777
+ FMT_INLINE arg_data(const U&... init) : args_{init...} {}
778
+ FMT_INLINE const T* args() const { return args_; }
779
+ FMT_INLINE std::nullptr_t named_args() { return nullptr; }
780
+ };
781
+
782
+ template <typename Char>
783
+ inline void init_named_args(named_arg_info<Char>*, int, int) {}
784
+
785
+ template <typename Char, typename T, typename... Tail>
786
+ void init_named_args(named_arg_info<Char>* named_args, int arg_count,
787
+ int named_arg_count, const T&, const Tail&... args) {
788
+ init_named_args(named_args, arg_count + 1, named_arg_count, args...);
789
+ }
790
+
791
+ template <typename Char, typename T, typename... Tail>
792
+ void init_named_args(named_arg_info<Char>* named_args, int arg_count,
793
+ int named_arg_count, const named_arg<Char, T>& arg,
794
+ const Tail&... args) {
795
+ named_args[named_arg_count++] = {arg.name, arg_count};
796
+ init_named_args(named_args, arg_count + 1, named_arg_count, args...);
797
+ }
798
+
799
+ template <typename... Args>
800
+ FMT_INLINE void init_named_args(std::nullptr_t, int, int, const Args&...) {}
801
+
802
+ template <typename T> struct is_named_arg : std::false_type {};
803
+
804
+ template <typename T, typename Char>
805
+ struct is_named_arg<named_arg<Char, T>> : std::true_type {};
806
+
807
+ template <bool B = false> constexpr size_t count() { return B ? 1 : 0; }
808
+ template <bool B1, bool B2, bool... Tail> constexpr size_t count() {
809
+ return (B1 ? 1 : 0) + count<B2, Tail...>();
810
+ }
811
+
812
+ template <typename... Args> constexpr size_t count_named_args() {
813
+ return count<is_named_arg<Args>::value...>();
814
+ }
765
815
 
766
816
  enum class type {
767
817
  none_type,
768
- named_arg_type,
769
818
  // Integer types should go first,
770
819
  int_type,
771
820
  uint_type,
@@ -796,7 +845,6 @@ struct type_constant : std::integral_constant<type, type::custom_type> {};
796
845
  struct type_constant<Type, Char> \
797
846
  : std::integral_constant<type, type::constant> {}
798
847
 
799
- FMT_TYPE_CONSTANT(const named_arg_base<Char>&, named_arg_type);
800
848
  FMT_TYPE_CONSTANT(int, int_type);
801
849
  FMT_TYPE_CONSTANT(unsigned, uint_type);
802
850
  FMT_TYPE_CONSTANT(long long, long_long_type);
@@ -812,23 +860,26 @@ FMT_TYPE_CONSTANT(const Char*, cstring_type);
812
860
  FMT_TYPE_CONSTANT(basic_string_view<Char>, string_type);
813
861
  FMT_TYPE_CONSTANT(const void*, pointer_type);
814
862
 
815
- FMT_CONSTEXPR bool is_integral_type(type t) {
816
- FMT_ASSERT(t != type::named_arg_type, "invalid argument type");
863
+ constexpr bool is_integral_type(type t) {
817
864
  return t > type::none_type && t <= type::last_integer_type;
818
865
  }
819
866
 
820
- FMT_CONSTEXPR bool is_arithmetic_type(type t) {
821
- FMT_ASSERT(t != type::named_arg_type, "invalid argument type");
867
+ constexpr bool is_arithmetic_type(type t) {
822
868
  return t > type::none_type && t <= type::last_numeric_type;
823
869
  }
824
870
 
825
871
  template <typename Char> struct string_value {
826
872
  const Char* data;
827
- std::size_t size;
873
+ size_t size;
874
+ };
875
+
876
+ template <typename Char> struct named_arg_value {
877
+ const named_arg_info<Char>* data;
878
+ size_t size;
828
879
  };
829
880
 
830
881
  template <typename Context> struct custom_value {
831
- using parse_context = basic_format_parse_context<typename Context::char_type>;
882
+ using parse_context = typename Context::parse_context_type;
832
883
  const void* value;
833
884
  void (*format)(const void* arg, parse_context& parse_ctx, Context& ctx);
834
885
  };
@@ -853,28 +904,30 @@ template <typename Context> class value {
853
904
  const void* pointer;
854
905
  string_value<char_type> string;
855
906
  custom_value<Context> custom;
856
- const named_arg_base<char_type>* named_arg;
907
+ named_arg_value<char_type> named_args;
857
908
  };
858
909
 
859
- FMT_CONSTEXPR value(int val = 0) : int_value(val) {}
860
- FMT_CONSTEXPR value(unsigned val) : uint_value(val) {}
861
- value(long long val) : long_long_value(val) {}
862
- value(unsigned long long val) : ulong_long_value(val) {}
863
- value(int128_t val) : int128_value(val) {}
864
- value(uint128_t val) : uint128_value(val) {}
865
- value(float val) : float_value(val) {}
866
- value(double val) : double_value(val) {}
867
- value(long double val) : long_double_value(val) {}
868
- value(bool val) : bool_value(val) {}
869
- value(char_type val) : char_value(val) {}
870
- value(const char_type* val) { string.data = val; }
871
- value(basic_string_view<char_type> val) {
910
+ constexpr FMT_INLINE value(int val = 0) : int_value(val) {}
911
+ constexpr FMT_INLINE value(unsigned val) : uint_value(val) {}
912
+ FMT_INLINE value(long long val) : long_long_value(val) {}
913
+ FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {}
914
+ FMT_INLINE value(int128_t val) : int128_value(val) {}
915
+ FMT_INLINE value(uint128_t val) : uint128_value(val) {}
916
+ FMT_INLINE value(float val) : float_value(val) {}
917
+ FMT_INLINE value(double val) : double_value(val) {}
918
+ FMT_INLINE value(long double val) : long_double_value(val) {}
919
+ FMT_INLINE value(bool val) : bool_value(val) {}
920
+ FMT_INLINE value(char_type val) : char_value(val) {}
921
+ FMT_INLINE value(const char_type* val) { string.data = val; }
922
+ FMT_INLINE value(basic_string_view<char_type> val) {
872
923
  string.data = val.data();
873
924
  string.size = val.size();
874
925
  }
875
- value(const void* val) : pointer(val) {}
926
+ FMT_INLINE value(const void* val) : pointer(val) {}
927
+ FMT_INLINE value(const named_arg_info<char_type>* args, size_t size)
928
+ : named_args{args, size} {}
876
929
 
877
- template <typename T> value(const T& val) {
930
+ template <typename T> FMT_INLINE value(const T& val) {
878
931
  custom.value = &val;
879
932
  // Get the formatter type through the context to allow different contexts
880
933
  // have different extension points, e.g. `formatter<T>` for `format` and
@@ -885,14 +938,12 @@ template <typename Context> class value {
885
938
  fallback_formatter<T, char_type>>>;
886
939
  }
887
940
 
888
- value(const named_arg_base<char_type>& val) { named_arg = &val; }
889
-
890
941
  private:
891
942
  // Formats an argument of a custom type, such as a user-defined class.
892
943
  template <typename T, typename Formatter>
893
- static void format_custom_arg(
894
- const void* arg, basic_format_parse_context<char_type>& parse_ctx,
895
- Context& ctx) {
944
+ static void format_custom_arg(const void* arg,
945
+ typename Context::parse_context_type& parse_ctx,
946
+ Context& ctx) {
896
947
  Formatter f;
897
948
  parse_ctx.advance_to(f.parse(parse_ctx));
898
949
  ctx.advance_to(f.format(*static_cast<const T*>(arg), ctx));
@@ -972,6 +1023,14 @@ template <typename Context> struct arg_mapper {
972
1023
  static_assert(std::is_same<char_type, char>::value, "invalid string type");
973
1024
  return reinterpret_cast<const char*>(val);
974
1025
  }
1026
+ FMT_CONSTEXPR const char* map(signed char* val) {
1027
+ const auto* const_val = val;
1028
+ return map(const_val);
1029
+ }
1030
+ FMT_CONSTEXPR const char* map(unsigned char* val) {
1031
+ const auto* const_val = val;
1032
+ return map(const_val);
1033
+ }
975
1034
 
976
1035
  FMT_CONSTEXPR const void* map(void* val) { return val; }
977
1036
  FMT_CONSTEXPR const void* map(const void* val) { return val; }
@@ -1003,11 +1062,9 @@ template <typename Context> struct arg_mapper {
1003
1062
  }
1004
1063
 
1005
1064
  template <typename T>
1006
- FMT_CONSTEXPR const named_arg_base<char_type>& map(
1007
- const named_arg<T, char_type>& val) {
1008
- auto arg = make_arg<Context>(val.value);
1009
- std::memcpy(val.data, &arg, sizeof(arg));
1010
- return val;
1065
+ FMT_CONSTEXPR auto map(const named_arg<char_type, T>& val)
1066
+ -> decltype(std::declval<arg_mapper>().map(val.value)) {
1067
+ return map(val.value);
1011
1068
  }
1012
1069
 
1013
1070
  int map(...) {
@@ -1027,23 +1084,22 @@ using mapped_type_constant =
1027
1084
  type_constant<decltype(arg_mapper<Context>().map(std::declval<const T&>())),
1028
1085
  typename Context::char_type>;
1029
1086
 
1030
- enum { packed_arg_bits = 5 };
1087
+ enum { packed_arg_bits = 4 };
1031
1088
  // Maximum number of arguments with packed types.
1032
- enum { max_packed_args = 63 / packed_arg_bits };
1089
+ enum { max_packed_args = 62 / packed_arg_bits };
1033
1090
  enum : unsigned long long { is_unpacked_bit = 1ULL << 63 };
1034
-
1035
- template <typename Context> class arg_map;
1036
- } // namespace internal
1091
+ enum : unsigned long long { has_named_args_bit = 1ULL << 62 };
1092
+ } // namespace detail
1037
1093
 
1038
1094
  // A formatting argument. It is a trivially copyable/constructible type to
1039
1095
  // allow storage in basic_memory_buffer.
1040
1096
  template <typename Context> class basic_format_arg {
1041
1097
  private:
1042
- internal::value<Context> value_;
1043
- internal::type type_;
1098
+ detail::value<Context> value_;
1099
+ detail::type type_;
1044
1100
 
1045
1101
  template <typename ContextType, typename T>
1046
- friend FMT_CONSTEXPR basic_format_arg<ContextType> internal::make_arg(
1102
+ friend FMT_CONSTEXPR basic_format_arg<ContextType> detail::make_arg(
1047
1103
  const T& value);
1048
1104
 
1049
1105
  template <typename Visitor, typename Ctx>
@@ -1052,34 +1108,40 @@ template <typename Context> class basic_format_arg {
1052
1108
  -> decltype(vis(0));
1053
1109
 
1054
1110
  friend class basic_format_args<Context>;
1055
- friend class internal::arg_map<Context>;
1111
+ friend class dynamic_format_arg_store<Context>;
1056
1112
 
1057
1113
  using char_type = typename Context::char_type;
1058
1114
 
1115
+ template <typename T, typename Char, size_t NUM_ARGS, size_t NUM_NAMED_ARGS>
1116
+ friend struct detail::arg_data;
1117
+
1118
+ basic_format_arg(const detail::named_arg_info<char_type>* args, size_t size)
1119
+ : value_(args, size) {}
1120
+
1059
1121
  public:
1060
1122
  class handle {
1061
1123
  public:
1062
- explicit handle(internal::custom_value<Context> custom) : custom_(custom) {}
1124
+ explicit handle(detail::custom_value<Context> custom) : custom_(custom) {}
1063
1125
 
1064
- void format(basic_format_parse_context<char_type>& parse_ctx,
1126
+ void format(typename Context::parse_context_type& parse_ctx,
1065
1127
  Context& ctx) const {
1066
1128
  custom_.format(custom_.value, parse_ctx, ctx);
1067
1129
  }
1068
1130
 
1069
1131
  private:
1070
- internal::custom_value<Context> custom_;
1132
+ detail::custom_value<Context> custom_;
1071
1133
  };
1072
1134
 
1073
- FMT_CONSTEXPR basic_format_arg() : type_(internal::type::none_type) {}
1135
+ constexpr basic_format_arg() : type_(detail::type::none_type) {}
1074
1136
 
1075
- FMT_CONSTEXPR explicit operator bool() const FMT_NOEXCEPT {
1076
- return type_ != internal::type::none_type;
1137
+ constexpr explicit operator bool() const FMT_NOEXCEPT {
1138
+ return type_ != detail::type::none_type;
1077
1139
  }
1078
1140
 
1079
- internal::type type() const { return type_; }
1141
+ detail::type type() const { return type_; }
1080
1142
 
1081
- bool is_integral() const { return internal::is_integral_type(type_); }
1082
- bool is_arithmetic() const { return internal::is_arithmetic_type(type_); }
1143
+ bool is_integral() const { return detail::is_integral_type(type_); }
1144
+ bool is_arithmetic() const { return detail::is_arithmetic_type(type_); }
1083
1145
  };
1084
1146
 
1085
1147
  /**
@@ -1090,92 +1152,73 @@ template <typename Context> class basic_format_arg {
1090
1152
  \endrst
1091
1153
  */
1092
1154
  template <typename Visitor, typename Context>
1093
- FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis,
1094
- const basic_format_arg<Context>& arg)
1095
- -> decltype(vis(0)) {
1155
+ FMT_CONSTEXPR_DECL FMT_INLINE auto visit_format_arg(
1156
+ Visitor&& vis, const basic_format_arg<Context>& arg) -> decltype(vis(0)) {
1096
1157
  using char_type = typename Context::char_type;
1097
1158
  switch (arg.type_) {
1098
- case internal::type::none_type:
1159
+ case detail::type::none_type:
1099
1160
  break;
1100
- case internal::type::named_arg_type:
1101
- FMT_ASSERT(false, "invalid argument type");
1102
- break;
1103
- case internal::type::int_type:
1161
+ case detail::type::int_type:
1104
1162
  return vis(arg.value_.int_value);
1105
- case internal::type::uint_type:
1163
+ case detail::type::uint_type:
1106
1164
  return vis(arg.value_.uint_value);
1107
- case internal::type::long_long_type:
1165
+ case detail::type::long_long_type:
1108
1166
  return vis(arg.value_.long_long_value);
1109
- case internal::type::ulong_long_type:
1167
+ case detail::type::ulong_long_type:
1110
1168
  return vis(arg.value_.ulong_long_value);
1111
1169
  #if FMT_USE_INT128
1112
- case internal::type::int128_type:
1170
+ case detail::type::int128_type:
1113
1171
  return vis(arg.value_.int128_value);
1114
- case internal::type::uint128_type:
1172
+ case detail::type::uint128_type:
1115
1173
  return vis(arg.value_.uint128_value);
1116
1174
  #else
1117
- case internal::type::int128_type:
1118
- case internal::type::uint128_type:
1175
+ case detail::type::int128_type:
1176
+ case detail::type::uint128_type:
1119
1177
  break;
1120
1178
  #endif
1121
- case internal::type::bool_type:
1179
+ case detail::type::bool_type:
1122
1180
  return vis(arg.value_.bool_value);
1123
- case internal::type::char_type:
1181
+ case detail::type::char_type:
1124
1182
  return vis(arg.value_.char_value);
1125
- case internal::type::float_type:
1183
+ case detail::type::float_type:
1126
1184
  return vis(arg.value_.float_value);
1127
- case internal::type::double_type:
1185
+ case detail::type::double_type:
1128
1186
  return vis(arg.value_.double_value);
1129
- case internal::type::long_double_type:
1187
+ case detail::type::long_double_type:
1130
1188
  return vis(arg.value_.long_double_value);
1131
- case internal::type::cstring_type:
1189
+ case detail::type::cstring_type:
1132
1190
  return vis(arg.value_.string.data);
1133
- case internal::type::string_type:
1191
+ case detail::type::string_type:
1134
1192
  return vis(basic_string_view<char_type>(arg.value_.string.data,
1135
1193
  arg.value_.string.size));
1136
- case internal::type::pointer_type:
1194
+ case detail::type::pointer_type:
1137
1195
  return vis(arg.value_.pointer);
1138
- case internal::type::custom_type:
1196
+ case detail::type::custom_type:
1139
1197
  return vis(typename basic_format_arg<Context>::handle(arg.value_.custom));
1140
1198
  }
1141
1199
  return vis(monostate());
1142
1200
  }
1143
1201
 
1144
- namespace internal {
1145
- // A map from argument names to their values for named arguments.
1146
- template <typename Context> class arg_map {
1147
- private:
1148
- using char_type = typename Context::char_type;
1149
-
1150
- struct entry {
1151
- basic_string_view<char_type> name;
1152
- basic_format_arg<Context> arg;
1153
- };
1202
+ // Checks whether T is a container with contiguous storage.
1203
+ template <typename T> struct is_contiguous : std::false_type {};
1204
+ template <typename Char>
1205
+ struct is_contiguous<std::basic_string<Char>> : std::true_type {};
1206
+ template <typename Char>
1207
+ struct is_contiguous<detail::buffer<Char>> : std::true_type {};
1154
1208
 
1155
- entry* map_;
1156
- unsigned size_;
1209
+ namespace detail {
1157
1210
 
1158
- void push_back(value<Context> val) {
1159
- const auto& named = *val.named_arg;
1160
- map_[size_] = {named.name, named.template deserialize<Context>()};
1161
- ++size_;
1162
- }
1211
+ template <typename OutputIt>
1212
+ struct is_back_insert_iterator : std::false_type {};
1213
+ template <typename Container>
1214
+ struct is_back_insert_iterator<std::back_insert_iterator<Container>>
1215
+ : std::true_type {};
1163
1216
 
1164
- public:
1165
- arg_map(const arg_map&) = delete;
1166
- void operator=(const arg_map&) = delete;
1167
- arg_map() : map_(nullptr), size_(0) {}
1168
- void init(const basic_format_args<Context>& args);
1169
- ~arg_map() { delete[] map_; }
1170
-
1171
- basic_format_arg<Context> find(basic_string_view<char_type> name) const {
1172
- // The list is unsorted, so just return the first matching name.
1173
- for (entry *it = map_, *end = map_ + size_; it != end; ++it) {
1174
- if (it->name == name) return it->arg;
1175
- }
1176
- return {};
1177
- }
1178
- };
1217
+ template <typename OutputIt>
1218
+ struct is_contiguous_back_insert_iterator : std::false_type {};
1219
+ template <typename Container>
1220
+ struct is_contiguous_back_insert_iterator<std::back_insert_iterator<Container>>
1221
+ : is_contiguous<Container> {};
1179
1222
 
1180
1223
  // A type-erased reference to an std::locale to avoid heavy <locale> include.
1181
1224
  class locale_ref {
@@ -1207,23 +1250,30 @@ FMT_CONSTEXPR basic_format_arg<Context> make_arg(const T& value) {
1207
1250
  return arg;
1208
1251
  }
1209
1252
 
1210
- template <bool IS_PACKED, typename Context, typename T,
1253
+ // The type template parameter is there to avoid an ODR violation when using
1254
+ // a fallback formatter in one translation unit and an implicit conversion in
1255
+ // another (not recommended).
1256
+ template <bool IS_PACKED, typename Context, type, typename T,
1211
1257
  FMT_ENABLE_IF(IS_PACKED)>
1212
1258
  inline value<Context> make_arg(const T& val) {
1213
1259
  return arg_mapper<Context>().map(val);
1214
1260
  }
1215
1261
 
1216
- template <bool IS_PACKED, typename Context, typename T,
1262
+ template <bool IS_PACKED, typename Context, type, typename T,
1217
1263
  FMT_ENABLE_IF(!IS_PACKED)>
1218
1264
  inline basic_format_arg<Context> make_arg(const T& value) {
1219
1265
  return make_arg<Context>(value);
1220
1266
  }
1221
1267
 
1222
1268
  template <typename T> struct is_reference_wrapper : std::false_type {};
1223
-
1224
1269
  template <typename T>
1225
1270
  struct is_reference_wrapper<std::reference_wrapper<T>> : std::true_type {};
1226
1271
 
1272
+ template <typename T> const T& unwrap(const T& v) { return v; }
1273
+ template <typename T> const T& unwrap(const std::reference_wrapper<T>& v) {
1274
+ return static_cast<const T&>(v);
1275
+ }
1276
+
1227
1277
  class dynamic_arg_list {
1228
1278
  // Workaround for clang's -Wweak-vtables. Unlike for regular classes, for
1229
1279
  // templates it doesn't complain about inability to deduce single translation
@@ -1248,14 +1298,14 @@ class dynamic_arg_list {
1248
1298
 
1249
1299
  public:
1250
1300
  template <typename T, typename Arg> const T& push(const Arg& arg) {
1251
- auto node = std::unique_ptr<typed_node<T>>(new typed_node<T>(arg));
1252
- auto& value = node->value;
1253
- node->next = std::move(head_);
1254
- head_ = std::move(node);
1301
+ auto new_node = std::unique_ptr<typed_node<T>>(new typed_node<T>(arg));
1302
+ auto& value = new_node->value;
1303
+ new_node->next = std::move(head_);
1304
+ head_ = std::move(new_node);
1255
1305
  return value;
1256
1306
  }
1257
1307
  };
1258
- } // namespace internal
1308
+ } // namespace detail
1259
1309
 
1260
1310
  // Formatting context.
1261
1311
  template <typename OutputIt, typename Char> class basic_format_context {
@@ -1266,12 +1316,12 @@ template <typename OutputIt, typename Char> class basic_format_context {
1266
1316
  private:
1267
1317
  OutputIt out_;
1268
1318
  basic_format_args<basic_format_context> args_;
1269
- internal::arg_map<basic_format_context> map_;
1270
- internal::locale_ref loc_;
1319
+ detail::locale_ref loc_;
1271
1320
 
1272
1321
  public:
1273
1322
  using iterator = OutputIt;
1274
1323
  using format_arg = basic_format_arg<basic_format_context>;
1324
+ using parse_context_type = basic_format_parse_context<Char>;
1275
1325
  template <typename T> using formatter_type = formatter<T, char_type>;
1276
1326
 
1277
1327
  basic_format_context(const basic_format_context&) = delete;
@@ -1282,34 +1332,38 @@ template <typename OutputIt, typename Char> class basic_format_context {
1282
1332
  */
1283
1333
  basic_format_context(OutputIt out,
1284
1334
  basic_format_args<basic_format_context> ctx_args,
1285
- internal::locale_ref loc = internal::locale_ref())
1335
+ detail::locale_ref loc = detail::locale_ref())
1286
1336
  : out_(out), args_(ctx_args), loc_(loc) {}
1287
1337
 
1288
1338
  format_arg arg(int id) const { return args_.get(id); }
1339
+ format_arg arg(basic_string_view<char_type> name) { return args_.get(name); }
1340
+ int arg_id(basic_string_view<char_type> name) { return args_.get_id(name); }
1341
+ const basic_format_args<basic_format_context>& args() const { return args_; }
1289
1342
 
1290
- // Checks if manual indexing is used and returns the argument with the
1291
- // specified name.
1292
- format_arg arg(basic_string_view<char_type> name);
1293
-
1294
- internal::error_handler error_handler() { return {}; }
1343
+ detail::error_handler error_handler() { return {}; }
1295
1344
  void on_error(const char* message) { error_handler().on_error(message); }
1296
1345
 
1297
1346
  // Returns an iterator to the beginning of the output range.
1298
1347
  iterator out() { return out_; }
1299
1348
 
1300
1349
  // Advances the begin iterator to ``it``.
1301
- void advance_to(iterator it) { out_ = it; }
1350
+ void advance_to(iterator it) {
1351
+ if (!detail::is_back_insert_iterator<iterator>()) out_ = it;
1352
+ }
1302
1353
 
1303
- internal::locale_ref locale() { return loc_; }
1354
+ detail::locale_ref locale() { return loc_; }
1304
1355
  };
1305
1356
 
1306
1357
  template <typename Char>
1307
1358
  using buffer_context =
1308
- basic_format_context<std::back_insert_iterator<internal::buffer<Char>>,
1309
- Char>;
1359
+ basic_format_context<std::back_insert_iterator<detail::buffer<Char>>, Char>;
1310
1360
  using format_context = buffer_context<char>;
1311
1361
  using wformat_context = buffer_context<wchar_t>;
1312
1362
 
1363
+ // Workaround a bug in gcc: https://stackoverflow.com/q/62767544/471164.
1364
+ #define FMT_BUFFER_CONTEXT(Char) \
1365
+ basic_format_context<std::back_insert_iterator<detail::buffer<Char>>, Char>
1366
+
1313
1367
  /**
1314
1368
  \rst
1315
1369
  An array of references to arguments. It can be implicitly converted into
@@ -1326,27 +1380,35 @@ class format_arg_store
1326
1380
  {
1327
1381
  private:
1328
1382
  static const size_t num_args = sizeof...(Args);
1329
- static const bool is_packed = num_args < internal::max_packed_args;
1383
+ static const size_t num_named_args = detail::count_named_args<Args...>();
1384
+ static const bool is_packed = num_args <= detail::max_packed_args;
1330
1385
 
1331
- using value_type = conditional_t<is_packed, internal::value<Context>,
1386
+ using value_type = conditional_t<is_packed, detail::value<Context>,
1332
1387
  basic_format_arg<Context>>;
1333
1388
 
1334
- // If the arguments are not packed, add one more element to mark the end.
1335
- value_type data_[num_args + (num_args == 0 ? 1 : 0)];
1389
+ detail::arg_data<value_type, typename Context::char_type, num_args,
1390
+ num_named_args>
1391
+ data_;
1336
1392
 
1337
1393
  friend class basic_format_args<Context>;
1338
1394
 
1339
- public:
1340
- static constexpr unsigned long long types =
1341
- is_packed ? internal::encode_types<Context, Args...>()
1342
- : internal::is_unpacked_bit | num_args;
1395
+ static constexpr unsigned long long desc =
1396
+ (is_packed ? detail::encode_types<Context, Args...>()
1397
+ : detail::is_unpacked_bit | num_args) |
1398
+ (num_named_args != 0
1399
+ ? static_cast<unsigned long long>(detail::has_named_args_bit)
1400
+ : 0);
1343
1401
 
1402
+ public:
1344
1403
  format_arg_store(const Args&... args)
1345
1404
  :
1346
1405
  #if FMT_GCC_VERSION && FMT_GCC_VERSION < 409
1347
1406
  basic_format_args<Context>(*this),
1348
1407
  #endif
1349
- data_{internal::make_arg<is_packed, Context>(args)...} {
1408
+ data_{detail::make_arg<
1409
+ is_packed, Context,
1410
+ detail::mapped_type_constant<Args, Context>::value>(args)...} {
1411
+ detail::init_named_args(data_.named_args(), 0, 0, args...);
1350
1412
  }
1351
1413
  };
1352
1414
 
@@ -1366,8 +1428,24 @@ inline format_arg_store<Context, Args...> make_format_args(
1366
1428
 
1367
1429
  /**
1368
1430
  \rst
1369
- A dynamic version of `fmt::format_arg_store<>`.
1370
- It's equipped with a storage to potentially temporary objects which lifetime
1431
+ Returns a named argument to be used in a formatting function. It should only
1432
+ be used in a call to a formatting function.
1433
+
1434
+ **Example**::
1435
+
1436
+ fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23));
1437
+ \endrst
1438
+ */
1439
+ template <typename Char, typename T>
1440
+ inline detail::named_arg<Char, T> arg(const Char* name, const T& arg) {
1441
+ static_assert(!detail::is_named_arg<T>(), "nested named arguments");
1442
+ return {name, arg};
1443
+ }
1444
+
1445
+ /**
1446
+ \rst
1447
+ A dynamic version of `fmt::format_arg_store`.
1448
+ It's equipped with a storage to potentially temporary objects which lifetimes
1371
1449
  could be shorter than the format arguments object.
1372
1450
 
1373
1451
  It can be implicitly converted into `~fmt::basic_format_args` for passing
@@ -1385,49 +1463,73 @@ class dynamic_format_arg_store
1385
1463
  using char_type = typename Context::char_type;
1386
1464
 
1387
1465
  template <typename T> struct need_copy {
1388
- static constexpr internal::type mapped_type =
1389
- internal::mapped_type_constant<T, Context>::value;
1466
+ static constexpr detail::type mapped_type =
1467
+ detail::mapped_type_constant<T, Context>::value;
1390
1468
 
1391
1469
  enum {
1392
- value = !(internal::is_reference_wrapper<T>::value ||
1470
+ value = !(detail::is_reference_wrapper<T>::value ||
1393
1471
  std::is_same<T, basic_string_view<char_type>>::value ||
1394
- std::is_same<T, internal::std_string_view<char_type>>::value ||
1395
- (mapped_type != internal::type::cstring_type &&
1396
- mapped_type != internal::type::string_type &&
1397
- mapped_type != internal::type::custom_type &&
1398
- mapped_type != internal::type::named_arg_type))
1472
+ std::is_same<T, detail::std_string_view<char_type>>::value ||
1473
+ (mapped_type != detail::type::cstring_type &&
1474
+ mapped_type != detail::type::string_type &&
1475
+ mapped_type != detail::type::custom_type))
1399
1476
  };
1400
1477
  };
1401
1478
 
1402
1479
  template <typename T>
1403
- using stored_type = conditional_t<internal::is_string<T>::value,
1480
+ using stored_type = conditional_t<detail::is_string<T>::value,
1404
1481
  std::basic_string<char_type>, T>;
1405
1482
 
1406
1483
  // Storage of basic_format_arg must be contiguous.
1407
1484
  std::vector<basic_format_arg<Context>> data_;
1485
+ std::vector<detail::named_arg_info<char_type>> named_info_;
1408
1486
 
1409
1487
  // Storage of arguments not fitting into basic_format_arg must grow
1410
1488
  // without relocation because items in data_ refer to it.
1411
- internal::dynamic_arg_list dynamic_args_;
1489
+ detail::dynamic_arg_list dynamic_args_;
1412
1490
 
1413
1491
  friend class basic_format_args<Context>;
1414
1492
 
1415
1493
  unsigned long long get_types() const {
1416
- return internal::is_unpacked_bit | data_.size();
1494
+ return detail::is_unpacked_bit | data_.size() |
1495
+ (named_info_.empty()
1496
+ ? 0ULL
1497
+ : static_cast<unsigned long long>(detail::has_named_args_bit));
1498
+ }
1499
+
1500
+ const basic_format_arg<Context>* data() const {
1501
+ return named_info_.empty() ? data_.data() : data_.data() + 1;
1417
1502
  }
1418
1503
 
1419
1504
  template <typename T> void emplace_arg(const T& arg) {
1420
- data_.emplace_back(internal::make_arg<Context>(arg));
1505
+ data_.emplace_back(detail::make_arg<Context>(arg));
1506
+ }
1507
+
1508
+ template <typename T>
1509
+ void emplace_arg(const detail::named_arg<char_type, T>& arg) {
1510
+ if (named_info_.empty()) {
1511
+ constexpr const detail::named_arg_info<char_type>* zero_ptr{nullptr};
1512
+ data_.insert(data_.begin(), {zero_ptr, 0});
1513
+ }
1514
+ data_.emplace_back(detail::make_arg<Context>(detail::unwrap(arg.value)));
1515
+ auto pop_one = [](std::vector<basic_format_arg<Context>>* data) {
1516
+ data->pop_back();
1517
+ };
1518
+ std::unique_ptr<std::vector<basic_format_arg<Context>>, decltype(pop_one)>
1519
+ guard{&data_, pop_one};
1520
+ named_info_.push_back({arg.name, static_cast<int>(data_.size() - 2u)});
1521
+ data_[0].value_.named_args = {named_info_.data(), named_info_.size()};
1522
+ guard.release();
1421
1523
  }
1422
1524
 
1423
1525
  public:
1424
1526
  /**
1425
1527
  \rst
1426
- Adds an argument into the dynamic store for later passing to a formating
1528
+ Adds an argument into the dynamic store for later passing to a formatting
1427
1529
  function.
1428
1530
 
1429
- Note that custom types and string types (but not string views!) are copied
1430
- into the store with dynamic memory (in addition to resizing vector).
1531
+ Note that custom types and string types (but not string views) are copied
1532
+ into the store dynamically allocating memory if necessary.
1431
1533
 
1432
1534
  **Example**::
1433
1535
 
@@ -1439,25 +1541,78 @@ class dynamic_format_arg_store
1439
1541
  \endrst
1440
1542
  */
1441
1543
  template <typename T> void push_back(const T& arg) {
1442
- static_assert(
1443
- !std::is_base_of<internal::named_arg_base<char_type>, T>::value,
1444
- "named arguments are not supported yet");
1445
- if (internal::const_check(need_copy<T>::value))
1544
+ if (detail::const_check(need_copy<T>::value))
1446
1545
  emplace_arg(dynamic_args_.push<stored_type<T>>(arg));
1447
1546
  else
1448
- emplace_arg(arg);
1547
+ emplace_arg(detail::unwrap(arg));
1449
1548
  }
1450
1549
 
1451
1550
  /**
1551
+ \rst
1452
1552
  Adds a reference to the argument into the dynamic store for later passing to
1453
- a formating function.
1553
+ a formatting function. Supports named arguments wrapped in
1554
+ ``std::reference_wrapper`` via ``std::ref()``/``std::cref()``.
1555
+
1556
+ **Example**::
1557
+
1558
+ fmt::dynamic_format_arg_store<fmt::format_context> store;
1559
+ char str[] = "1234567890";
1560
+ store.push_back(std::cref(str));
1561
+ int a1_val{42};
1562
+ auto a1 = fmt::arg("a1_", a1_val);
1563
+ store.push_back(std::cref(a1));
1564
+
1565
+ // Changing str affects the output but only for string and custom types.
1566
+ str[0] = 'X';
1567
+
1568
+ std::string result = fmt::vformat("{} and {a1_}");
1569
+ assert(result == "X234567890 and 42");
1570
+ \endrst
1454
1571
  */
1455
1572
  template <typename T> void push_back(std::reference_wrapper<T> arg) {
1456
1573
  static_assert(
1457
- need_copy<T>::value,
1574
+ detail::is_named_arg<typename std::remove_cv<T>::type>::value ||
1575
+ need_copy<T>::value,
1458
1576
  "objects of built-in types and string views are always copied");
1459
1577
  emplace_arg(arg.get());
1460
1578
  }
1579
+
1580
+ /**
1581
+ Adds named argument into the dynamic store for later passing to a formatting
1582
+ function. ``std::reference_wrapper`` is supported to avoid copying of the
1583
+ argument.
1584
+ */
1585
+ template <typename T>
1586
+ void push_back(const detail::named_arg<char_type, T>& arg) {
1587
+ const char_type* arg_name =
1588
+ dynamic_args_.push<std::basic_string<char_type>>(arg.name).c_str();
1589
+ if (detail::const_check(need_copy<T>::value)) {
1590
+ emplace_arg(
1591
+ fmt::arg(arg_name, dynamic_args_.push<stored_type<T>>(arg.value)));
1592
+ } else {
1593
+ emplace_arg(fmt::arg(arg_name, arg.value));
1594
+ }
1595
+ }
1596
+
1597
+ /** Erase all elements from the store */
1598
+ void clear() {
1599
+ data_.clear();
1600
+ named_info_.clear();
1601
+ dynamic_args_ = detail::dynamic_arg_list();
1602
+ }
1603
+
1604
+ /**
1605
+ \rst
1606
+ Reserves space to store at least *new_cap* arguments including
1607
+ *new_cap_named* named arguments.
1608
+ \endrst
1609
+ */
1610
+ void reserve(size_t new_cap, size_t new_cap_named) {
1611
+ FMT_ASSERT(new_cap >= new_cap_named,
1612
+ "Set of arguments includes set of named arguments");
1613
+ data_.reserve(new_cap);
1614
+ named_info_.reserve(new_cap_named);
1615
+ }
1461
1616
  };
1462
1617
 
1463
1618
  /**
@@ -1476,49 +1631,40 @@ template <typename Context> class basic_format_args {
1476
1631
  using format_arg = basic_format_arg<Context>;
1477
1632
 
1478
1633
  private:
1479
- // To reduce compiled code size per formatting function call, types of first
1480
- // max_packed_args arguments are passed in the types_ field.
1481
- unsigned long long types_;
1634
+ // A descriptor that contains information about formatting arguments.
1635
+ // If the number of arguments is less or equal to max_packed_args then
1636
+ // argument types are passed in the descriptor. This reduces binary code size
1637
+ // per formatting function call.
1638
+ unsigned long long desc_;
1482
1639
  union {
1483
- // If the number of arguments is less than max_packed_args, the argument
1484
- // values are stored in values_, otherwise they are stored in args_.
1485
- // This is done to reduce compiled code size as storing larger objects
1640
+ // If is_packed() returns true then argument values are stored in values_;
1641
+ // otherwise they are stored in args_. This is done to improve cache
1642
+ // locality and reduce compiled code size since storing larger objects
1486
1643
  // may require more code (at least on x86-64) even if the same amount of
1487
1644
  // data is actually copied to stack. It saves ~10% on the bloat test.
1488
- const internal::value<Context>* values_;
1645
+ const detail::value<Context>* values_;
1489
1646
  const format_arg* args_;
1490
1647
  };
1491
1648
 
1492
- bool is_packed() const { return (types_ & internal::is_unpacked_bit) == 0; }
1493
-
1494
- internal::type type(int index) const {
1495
- int shift = index * internal::packed_arg_bits;
1496
- unsigned int mask = (1 << internal::packed_arg_bits) - 1;
1497
- return static_cast<internal::type>((types_ >> shift) & mask);
1649
+ bool is_packed() const { return (desc_ & detail::is_unpacked_bit) == 0; }
1650
+ bool has_named_args() const {
1651
+ return (desc_ & detail::has_named_args_bit) != 0;
1498
1652
  }
1499
1653
 
1500
- friend class internal::arg_map<Context>;
1501
-
1502
- void set_data(const internal::value<Context>* values) { values_ = values; }
1503
- void set_data(const format_arg* args) { args_ = args; }
1504
-
1505
- format_arg do_get(int index) const {
1506
- format_arg arg;
1507
- if (!is_packed()) {
1508
- auto num_args = max_size();
1509
- if (index < num_args) arg = args_[index];
1510
- return arg;
1511
- }
1512
- if (index > internal::max_packed_args) return arg;
1513
- arg.type_ = type(index);
1514
- if (arg.type_ == internal::type::none_type) return arg;
1515
- internal::value<Context>& val = arg.value_;
1516
- val = values_[index];
1517
- return arg;
1654
+ detail::type type(int index) const {
1655
+ int shift = index * detail::packed_arg_bits;
1656
+ unsigned int mask = (1 << detail::packed_arg_bits) - 1;
1657
+ return static_cast<detail::type>((desc_ >> shift) & mask);
1518
1658
  }
1519
1659
 
1660
+ basic_format_args(unsigned long long desc,
1661
+ const detail::value<Context>* values)
1662
+ : desc_(desc), values_(values) {}
1663
+ basic_format_args(unsigned long long desc, const format_arg* args)
1664
+ : desc_(desc), args_(args) {}
1665
+
1520
1666
  public:
1521
- basic_format_args() : types_(0) {}
1667
+ basic_format_args() : desc_(0) {}
1522
1668
 
1523
1669
  /**
1524
1670
  \rst
@@ -1526,10 +1672,8 @@ template <typename Context> class basic_format_args {
1526
1672
  \endrst
1527
1673
  */
1528
1674
  template <typename... Args>
1529
- basic_format_args(const format_arg_store<Context, Args...>& store)
1530
- : types_(store.types) {
1531
- set_data(store.data_);
1532
- }
1675
+ FMT_INLINE basic_format_args(const format_arg_store<Context, Args...>& store)
1676
+ : basic_format_args(store.desc, store.data_.args()) {}
1533
1677
 
1534
1678
  /**
1535
1679
  \rst
@@ -1537,10 +1681,8 @@ template <typename Context> class basic_format_args {
1537
1681
  `~fmt::dynamic_format_arg_store`.
1538
1682
  \endrst
1539
1683
  */
1540
- basic_format_args(const dynamic_format_arg_store<Context>& store)
1541
- : types_(store.get_types()) {
1542
- set_data(store.data_.data());
1543
- }
1684
+ FMT_INLINE basic_format_args(const dynamic_format_arg_store<Context>& store)
1685
+ : basic_format_args(store.get_types(), store.data()) {}
1544
1686
 
1545
1687
  /**
1546
1688
  \rst
@@ -1548,22 +1690,42 @@ template <typename Context> class basic_format_args {
1548
1690
  \endrst
1549
1691
  */
1550
1692
  basic_format_args(const format_arg* args, int count)
1551
- : types_(internal::is_unpacked_bit | internal::to_unsigned(count)) {
1552
- set_data(args);
1553
- }
1693
+ : basic_format_args(detail::is_unpacked_bit | detail::to_unsigned(count),
1694
+ args) {}
1554
1695
 
1555
- /** Returns the argument at specified index. */
1556
- format_arg get(int index) const {
1557
- format_arg arg = do_get(index);
1558
- if (arg.type_ == internal::type::named_arg_type)
1559
- arg = arg.value_.named_arg->template deserialize<Context>();
1696
+ /** Returns the argument with the specified id. */
1697
+ format_arg get(int id) const {
1698
+ format_arg arg;
1699
+ if (!is_packed()) {
1700
+ if (id < max_size()) arg = args_[id];
1701
+ return arg;
1702
+ }
1703
+ if (id >= detail::max_packed_args) return arg;
1704
+ arg.type_ = type(id);
1705
+ if (arg.type_ == detail::type::none_type) return arg;
1706
+ arg.value_ = values_[id];
1560
1707
  return arg;
1561
1708
  }
1562
1709
 
1710
+ template <typename Char> format_arg get(basic_string_view<Char> name) const {
1711
+ int id = get_id(name);
1712
+ return id >= 0 ? get(id) : format_arg();
1713
+ }
1714
+
1715
+ template <typename Char> int get_id(basic_string_view<Char> name) const {
1716
+ if (!has_named_args()) return -1;
1717
+ const auto& named_args =
1718
+ (is_packed() ? values_[-1] : args_[-1].value_).named_args;
1719
+ for (size_t i = 0; i < named_args.size; ++i) {
1720
+ if (named_args.data[i].name == name) return named_args.data[i].id;
1721
+ }
1722
+ return -1;
1723
+ }
1724
+
1563
1725
  int max_size() const {
1564
- unsigned long long max_packed = internal::max_packed_args;
1726
+ unsigned long long max_packed = detail::max_packed_args;
1565
1727
  return static_cast<int>(is_packed() ? max_packed
1566
- : types_ & ~internal::is_unpacked_bit);
1728
+ : desc_ & ~detail::is_unpacked_bit);
1567
1729
  }
1568
1730
  };
1569
1731
 
@@ -1571,93 +1733,48 @@ template <typename Context> class basic_format_args {
1571
1733
  // It is a separate type rather than an alias to make symbols readable.
1572
1734
  struct format_args : basic_format_args<format_context> {
1573
1735
  template <typename... Args>
1574
- format_args(Args&&... args)
1575
- : basic_format_args<format_context>(static_cast<Args&&>(args)...) {}
1736
+ FMT_INLINE format_args(const Args&... args) : basic_format_args(args...) {}
1576
1737
  };
1577
1738
  struct wformat_args : basic_format_args<wformat_context> {
1578
- template <typename... Args>
1579
- wformat_args(Args&&... args)
1580
- : basic_format_args<wformat_context>(static_cast<Args&&>(args)...) {}
1739
+ using basic_format_args::basic_format_args;
1581
1740
  };
1582
1741
 
1583
- template <typename Container> struct is_contiguous : std::false_type {};
1584
-
1585
- template <typename Char>
1586
- struct is_contiguous<std::basic_string<Char>> : std::true_type {};
1587
-
1588
- template <typename Char>
1589
- struct is_contiguous<internal::buffer<Char>> : std::true_type {};
1590
-
1591
- namespace internal {
1592
-
1593
- template <typename OutputIt>
1594
- struct is_contiguous_back_insert_iterator : std::false_type {};
1595
- template <typename Container>
1596
- struct is_contiguous_back_insert_iterator<std::back_insert_iterator<Container>>
1597
- : is_contiguous<Container> {};
1598
-
1599
- template <typename Char> struct named_arg_base {
1600
- basic_string_view<Char> name;
1601
-
1602
- // Serialized value<context>.
1603
- mutable char data[sizeof(basic_format_arg<buffer_context<Char>>)];
1604
-
1605
- named_arg_base(basic_string_view<Char> nm) : name(nm) {}
1606
-
1607
- template <typename Context> basic_format_arg<Context> deserialize() const {
1608
- basic_format_arg<Context> arg;
1609
- std::memcpy(&arg, data, sizeof(basic_format_arg<Context>));
1610
- return arg;
1611
- }
1612
- };
1613
-
1614
- struct view {};
1615
-
1616
- template <typename T, typename Char>
1617
- struct named_arg : view, named_arg_base<Char> {
1618
- const T& value;
1619
-
1620
- named_arg(basic_string_view<Char> name, const T& val)
1621
- : named_arg_base<Char>(name), value(val) {}
1622
- };
1742
+ namespace detail {
1623
1743
 
1744
+ // Reports a compile-time error if S is not a valid format string.
1624
1745
  template <typename..., typename S, FMT_ENABLE_IF(!is_compile_string<S>::value)>
1625
- inline void check_format_string(const S&) {
1626
- #if defined(FMT_ENFORCE_COMPILE_STRING)
1746
+ FMT_INLINE void check_format_string(const S&) {
1747
+ #ifdef FMT_ENFORCE_COMPILE_STRING
1627
1748
  static_assert(is_compile_string<S>::value,
1628
- "FMT_ENFORCE_COMPILE_STRING requires all format strings to "
1629
- "utilize FMT_STRING() or fmt().");
1749
+ "FMT_ENFORCE_COMPILE_STRING requires all format strings to use "
1750
+ "FMT_STRING.");
1630
1751
  #endif
1631
1752
  }
1632
1753
  template <typename..., typename S, FMT_ENABLE_IF(is_compile_string<S>::value)>
1633
1754
  void check_format_string(S);
1634
1755
 
1635
- template <bool...> struct bool_pack;
1636
- template <bool... Args>
1637
- using all_true =
1638
- std::is_same<bool_pack<Args..., true>, bool_pack<true, Args...>>;
1639
-
1640
1756
  template <typename... Args, typename S, typename Char = char_t<S>>
1641
1757
  inline format_arg_store<buffer_context<Char>, remove_reference_t<Args>...>
1642
1758
  make_args_checked(const S& format_str,
1643
1759
  const remove_reference_t<Args>&... args) {
1644
- static_assert(
1645
- all_true<(!std::is_base_of<view, remove_reference_t<Args>>::value ||
1646
- !std::is_reference<Args>::value)...>::value,
1647
- "passing views as lvalues is disallowed");
1760
+ static_assert(count<(std::is_base_of<view, remove_reference_t<Args>>::value &&
1761
+ std::is_reference<Args>::value)...>() == 0,
1762
+ "passing views as lvalues is disallowed");
1648
1763
  check_format_string<Args...>(format_str);
1649
1764
  return {args...};
1650
1765
  }
1651
1766
 
1652
- template <typename Char>
1767
+ template <typename Char, FMT_ENABLE_IF(!std::is_same<Char, char>::value)>
1653
1768
  std::basic_string<Char> vformat(
1654
1769
  basic_string_view<Char> format_str,
1655
1770
  basic_format_args<buffer_context<type_identity_t<Char>>> args);
1656
1771
 
1772
+ FMT_API std::string vformat(string_view format_str, format_args args);
1773
+
1657
1774
  template <typename Char>
1658
- typename buffer_context<Char>::iterator vformat_to(
1775
+ typename FMT_BUFFER_CONTEXT(Char)::iterator vformat_to(
1659
1776
  buffer<Char>& buf, basic_string_view<Char> format_str,
1660
- basic_format_args<buffer_context<type_identity_t<Char>>> args);
1777
+ basic_format_args<FMT_BUFFER_CONTEXT(type_identity_t<Char>)> args);
1661
1778
 
1662
1779
  template <typename Char, typename Args,
1663
1780
  FMT_ENABLE_IF(!std::is_same<Char, char>::value)>
@@ -1667,58 +1784,38 @@ FMT_API void vprint_mojibake(std::FILE*, string_view, format_args);
1667
1784
  #ifndef _WIN32
1668
1785
  inline void vprint_mojibake(std::FILE*, string_view, format_args) {}
1669
1786
  #endif
1670
- } // namespace internal
1671
-
1672
- /**
1673
- \rst
1674
- Returns a named argument to be used in a formatting function. It should only
1675
- be used in a call to a formatting function.
1676
-
1677
- **Example**::
1678
-
1679
- fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23));
1680
- \endrst
1681
- */
1682
- template <typename S, typename T, typename Char = char_t<S>>
1683
- inline internal::named_arg<T, Char> arg(const S& name, const T& arg) {
1684
- static_assert(internal::is_string<S>::value, "");
1685
- return {name, arg};
1686
- }
1687
-
1688
- // Disable nested named arguments, e.g. ``arg("a", arg("b", 42))``.
1689
- template <typename S, typename T, typename Char>
1690
- void arg(S, internal::named_arg<T, Char>) = delete;
1787
+ } // namespace detail
1691
1788
 
1692
1789
  /** Formats a string and writes the output to ``out``. */
1693
1790
  // GCC 8 and earlier cannot handle std::back_insert_iterator<Container> with
1694
1791
  // vformat_to<ArgFormatter>(...) overload, so SFINAE on iterator type instead.
1695
- template <typename OutputIt, typename S, typename Char = char_t<S>,
1696
- FMT_ENABLE_IF(
1697
- internal::is_contiguous_back_insert_iterator<OutputIt>::value)>
1792
+ template <
1793
+ typename OutputIt, typename S, typename Char = char_t<S>,
1794
+ FMT_ENABLE_IF(detail::is_contiguous_back_insert_iterator<OutputIt>::value)>
1698
1795
  OutputIt vformat_to(
1699
1796
  OutputIt out, const S& format_str,
1700
1797
  basic_format_args<buffer_context<type_identity_t<Char>>> args) {
1701
- using container = remove_reference_t<decltype(internal::get_container(out))>;
1702
- internal::container_buffer<container> buf((internal::get_container(out)));
1703
- internal::vformat_to(buf, to_string_view(format_str), args);
1798
+ auto& c = detail::get_container(out);
1799
+ detail::container_buffer<remove_reference_t<decltype(c)>> buf(c);
1800
+ detail::vformat_to(buf, to_string_view(format_str), args);
1704
1801
  return out;
1705
1802
  }
1706
1803
 
1707
1804
  template <typename Container, typename S, typename... Args,
1708
1805
  FMT_ENABLE_IF(
1709
- is_contiguous<Container>::value&& internal::is_string<S>::value)>
1806
+ is_contiguous<Container>::value&& detail::is_string<S>::value)>
1710
1807
  inline std::back_insert_iterator<Container> format_to(
1711
1808
  std::back_insert_iterator<Container> out, const S& format_str,
1712
1809
  Args&&... args) {
1713
1810
  return vformat_to(out, to_string_view(format_str),
1714
- internal::make_args_checked<Args...>(format_str, args...));
1811
+ detail::make_args_checked<Args...>(format_str, args...));
1715
1812
  }
1716
1813
 
1717
1814
  template <typename S, typename Char = char_t<S>>
1718
- inline std::basic_string<Char> vformat(
1815
+ FMT_INLINE std::basic_string<Char> vformat(
1719
1816
  const S& format_str,
1720
1817
  basic_format_args<buffer_context<type_identity_t<Char>>> args) {
1721
- return internal::vformat(to_string_view(format_str), args);
1818
+ return detail::vformat(to_string_view(format_str), args);
1722
1819
  }
1723
1820
 
1724
1821
  /**
@@ -1734,10 +1831,9 @@ inline std::basic_string<Char> vformat(
1734
1831
  // Pass char_t as a default template parameter instead of using
1735
1832
  // std::basic_string<char_t<S>> to reduce the symbol size.
1736
1833
  template <typename S, typename... Args, typename Char = char_t<S>>
1737
- inline std::basic_string<Char> format(const S& format_str, Args&&... args) {
1738
- return internal::vformat(
1739
- to_string_view(format_str),
1740
- internal::make_args_checked<Args...>(format_str, args...));
1834
+ FMT_INLINE std::basic_string<Char> format(const S& format_str, Args&&... args) {
1835
+ const auto& vargs = detail::make_args_checked<Args...>(format_str, args...);
1836
+ return detail::vformat(to_string_view(format_str), vargs);
1741
1837
  }
1742
1838
 
1743
1839
  FMT_API void vprint(string_view, format_args);
@@ -1756,12 +1852,10 @@ FMT_API void vprint(std::FILE*, string_view, format_args);
1756
1852
  */
1757
1853
  template <typename S, typename... Args, typename Char = char_t<S>>
1758
1854
  inline void print(std::FILE* f, const S& format_str, Args&&... args) {
1759
- return internal::is_unicode<Char>()
1760
- ? vprint(f, to_string_view(format_str),
1761
- internal::make_args_checked<Args...>(format_str, args...))
1762
- : internal::vprint_mojibake(
1763
- f, to_string_view(format_str),
1764
- internal::make_args_checked<Args...>(format_str, args...));
1855
+ const auto& vargs = detail::make_args_checked<Args...>(format_str, args...);
1856
+ return detail::is_unicode<Char>()
1857
+ ? vprint(f, to_string_view(format_str), vargs)
1858
+ : detail::vprint_mojibake(f, to_string_view(format_str), vargs);
1765
1859
  }
1766
1860
 
1767
1861
  /**
@@ -1777,12 +1871,11 @@ inline void print(std::FILE* f, const S& format_str, Args&&... args) {
1777
1871
  */
1778
1872
  template <typename S, typename... Args, typename Char = char_t<S>>
1779
1873
  inline void print(const S& format_str, Args&&... args) {
1780
- return internal::is_unicode<Char>()
1781
- ? vprint(to_string_view(format_str),
1782
- internal::make_args_checked<Args...>(format_str, args...))
1783
- : internal::vprint_mojibake(
1784
- stdout, to_string_view(format_str),
1785
- internal::make_args_checked<Args...>(format_str, args...));
1874
+ const auto& vargs = detail::make_args_checked<Args...>(format_str, args...);
1875
+ return detail::is_unicode<Char>()
1876
+ ? vprint(to_string_view(format_str), vargs)
1877
+ : detail::vprint_mojibake(stdout, to_string_view(format_str),
1878
+ vargs);
1786
1879
  }
1787
1880
  FMT_END_NAMESPACE
1788
1881