couchbase 3.0.3-universal-darwin-20

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 (1353) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +202 -0
  3. data/README.md +131 -0
  4. data/ext/CMakeLists.txt +130 -0
  5. data/ext/LICENSE.txt +202 -0
  6. data/ext/build_config.hxx.in +22 -0
  7. data/ext/build_version.hxx.in +30 -0
  8. data/ext/cmake/Backtrace.cmake +35 -0
  9. data/ext/cmake/BuildTracing.cmake +6 -0
  10. data/ext/cmake/Cache.cmake +29 -0
  11. data/ext/cmake/CompilerWarnings.cmake +84 -0
  12. data/ext/cmake/PreventInSourceBuilds.cmake +21 -0
  13. data/ext/cmake/Sanitizers.cmake +66 -0
  14. data/ext/cmake/StandardProjectSettings.cmake +40 -0
  15. data/ext/cmake/StaticAnalyzers.cmake +37 -0
  16. data/ext/cmake/Testing.cmake +49 -0
  17. data/ext/cmake/ThirdPartyDependencies.cmake +20 -0
  18. data/ext/cmake/VersionInfo.cmake +37 -0
  19. data/ext/couchbase/bucket.hxx +372 -0
  20. data/ext/couchbase/capabilities.hxx +117 -0
  21. data/ext/couchbase/cbcrypto/cbcrypto.cc +888 -0
  22. data/ext/couchbase/cbcrypto/cbcrypto.h +89 -0
  23. data/ext/couchbase/cbsasl/client.cc +48 -0
  24. data/ext/couchbase/cbsasl/client.h +127 -0
  25. data/ext/couchbase/cbsasl/context.cc +33 -0
  26. data/ext/couchbase/cbsasl/context.h +52 -0
  27. data/ext/couchbase/cbsasl/error.h +72 -0
  28. data/ext/couchbase/cbsasl/mechanism.cc +48 -0
  29. data/ext/couchbase/cbsasl/mechanism.h +55 -0
  30. data/ext/couchbase/cbsasl/plain/plain.cc +36 -0
  31. data/ext/couchbase/cbsasl/plain/plain.h +53 -0
  32. data/ext/couchbase/cbsasl/scram-sha/scram-sha.cc +390 -0
  33. data/ext/couchbase/cbsasl/scram-sha/scram-sha.h +185 -0
  34. data/ext/couchbase/cbsasl/scram-sha/stringutils.cc +81 -0
  35. data/ext/couchbase/cbsasl/scram-sha/stringutils.h +48 -0
  36. data/ext/couchbase/cluster.hxx +356 -0
  37. data/ext/couchbase/cluster_options.hxx +54 -0
  38. data/ext/couchbase/collections_manifest.hxx +88 -0
  39. data/ext/couchbase/configuration.hxx +652 -0
  40. data/ext/couchbase/couchbase.cxx +8015 -0
  41. data/ext/couchbase/diagnostics.hxx +248 -0
  42. data/ext/couchbase/document_id.hxx +40 -0
  43. data/ext/couchbase/error_context/analytics.hxx +46 -0
  44. data/ext/couchbase/error_context/http.hxx +44 -0
  45. data/ext/couchbase/error_context/key_value.hxx +47 -0
  46. data/ext/couchbase/error_context/query.hxx +46 -0
  47. data/ext/couchbase/error_context/search.hxx +47 -0
  48. data/ext/couchbase/error_context/view.hxx +47 -0
  49. data/ext/couchbase/error_map.hxx +261 -0
  50. data/ext/couchbase/errors.hxx +706 -0
  51. data/ext/couchbase/io/dns_client.hxx +217 -0
  52. data/ext/couchbase/io/dns_codec.hxx +206 -0
  53. data/ext/couchbase/io/dns_config.hxx +116 -0
  54. data/ext/couchbase/io/dns_message.hxx +555 -0
  55. data/ext/couchbase/io/http_command.hxx +111 -0
  56. data/ext/couchbase/io/http_context.hxx +37 -0
  57. data/ext/couchbase/io/http_message.hxx +47 -0
  58. data/ext/couchbase/io/http_parser.hxx +176 -0
  59. data/ext/couchbase/io/http_session.hxx +444 -0
  60. data/ext/couchbase/io/http_session_manager.hxx +264 -0
  61. data/ext/couchbase/io/mcbp_command.hxx +249 -0
  62. data/ext/couchbase/io/mcbp_context.hxx +37 -0
  63. data/ext/couchbase/io/mcbp_message.hxx +63 -0
  64. data/ext/couchbase/io/mcbp_parser.hxx +101 -0
  65. data/ext/couchbase/io/mcbp_session.hxx +1350 -0
  66. data/ext/couchbase/io/query_cache.hxx +61 -0
  67. data/ext/couchbase/io/retry_action.hxx +30 -0
  68. data/ext/couchbase/io/retry_context.hxx +38 -0
  69. data/ext/couchbase/io/retry_orchestrator.hxx +112 -0
  70. data/ext/couchbase/io/retry_reason.hxx +235 -0
  71. data/ext/couchbase/io/retry_strategy.hxx +156 -0
  72. data/ext/couchbase/io/streams.hxx +216 -0
  73. data/ext/couchbase/mutation_token.hxx +38 -0
  74. data/ext/couchbase/operations.hxx +109 -0
  75. data/ext/couchbase/operations/analytics_dataset_create.hxx +125 -0
  76. data/ext/couchbase/operations/analytics_dataset_drop.hxx +112 -0
  77. data/ext/couchbase/operations/analytics_dataset_get_all.hxx +114 -0
  78. data/ext/couchbase/operations/analytics_dataverse_create.hxx +112 -0
  79. data/ext/couchbase/operations/analytics_dataverse_drop.hxx +111 -0
  80. data/ext/couchbase/operations/analytics_get_pending_mutations.hxx +99 -0
  81. data/ext/couchbase/operations/analytics_index_create.hxx +135 -0
  82. data/ext/couchbase/operations/analytics_index_drop.hxx +117 -0
  83. data/ext/couchbase/operations/analytics_index_get_all.hxx +113 -0
  84. data/ext/couchbase/operations/analytics_link_connect.hxx +109 -0
  85. data/ext/couchbase/operations/analytics_link_disconnect.hxx +108 -0
  86. data/ext/couchbase/operations/bucket_create.hxx +171 -0
  87. data/ext/couchbase/operations/bucket_drop.hxx +70 -0
  88. data/ext/couchbase/operations/bucket_flush.hxx +69 -0
  89. data/ext/couchbase/operations/bucket_get.hxx +78 -0
  90. data/ext/couchbase/operations/bucket_get_all.hxx +73 -0
  91. data/ext/couchbase/operations/bucket_settings.hxx +166 -0
  92. data/ext/couchbase/operations/bucket_update.hxx +147 -0
  93. data/ext/couchbase/operations/cluster_developer_preview_enable.hxx +64 -0
  94. data/ext/couchbase/operations/collection_create.hxx +102 -0
  95. data/ext/couchbase/operations/collection_drop.hxx +92 -0
  96. data/ext/couchbase/operations/collections_manifest_get.hxx +66 -0
  97. data/ext/couchbase/operations/design_document.hxx +59 -0
  98. data/ext/couchbase/operations/document_analytics.hxx +316 -0
  99. data/ext/couchbase/operations/document_append.hxx +72 -0
  100. data/ext/couchbase/operations/document_decrement.hxx +83 -0
  101. data/ext/couchbase/operations/document_exists.hxx +83 -0
  102. data/ext/couchbase/operations/document_get.hxx +66 -0
  103. data/ext/couchbase/operations/document_get_and_lock.hxx +67 -0
  104. data/ext/couchbase/operations/document_get_and_touch.hxx +67 -0
  105. data/ext/couchbase/operations/document_get_projected.hxx +257 -0
  106. data/ext/couchbase/operations/document_increment.hxx +85 -0
  107. data/ext/couchbase/operations/document_insert.hxx +77 -0
  108. data/ext/couchbase/operations/document_lookup_in.hxx +112 -0
  109. data/ext/couchbase/operations/document_mutate_in.hxx +151 -0
  110. data/ext/couchbase/operations/document_prepend.hxx +72 -0
  111. data/ext/couchbase/operations/document_query.hxx +440 -0
  112. data/ext/couchbase/operations/document_remove.hxx +72 -0
  113. data/ext/couchbase/operations/document_replace.hxx +79 -0
  114. data/ext/couchbase/operations/document_search.hxx +392 -0
  115. data/ext/couchbase/operations/document_touch.hxx +63 -0
  116. data/ext/couchbase/operations/document_unlock.hxx +63 -0
  117. data/ext/couchbase/operations/document_upsert.hxx +77 -0
  118. data/ext/couchbase/operations/document_view.hxx +245 -0
  119. data/ext/couchbase/operations/group_drop.hxx +72 -0
  120. data/ext/couchbase/operations/group_get.hxx +80 -0
  121. data/ext/couchbase/operations/group_get_all.hxx +77 -0
  122. data/ext/couchbase/operations/group_upsert.hxx +125 -0
  123. data/ext/couchbase/operations/http_noop.hxx +78 -0
  124. data/ext/couchbase/operations/mcbp_noop.hxx +55 -0
  125. data/ext/couchbase/operations/query_index_build_deferred.hxx +93 -0
  126. data/ext/couchbase/operations/query_index_create.hxx +152 -0
  127. data/ext/couchbase/operations/query_index_drop.hxx +126 -0
  128. data/ext/couchbase/operations/query_index_get_all.hxx +124 -0
  129. data/ext/couchbase/operations/rbac.hxx +276 -0
  130. data/ext/couchbase/operations/role_get_all.hxx +77 -0
  131. data/ext/couchbase/operations/scope_create.hxx +95 -0
  132. data/ext/couchbase/operations/scope_drop.hxx +89 -0
  133. data/ext/couchbase/operations/scope_get_all.hxx +82 -0
  134. data/ext/couchbase/operations/search_get_stats.hxx +60 -0
  135. data/ext/couchbase/operations/search_index.hxx +79 -0
  136. data/ext/couchbase/operations/search_index_analyze_document.hxx +105 -0
  137. data/ext/couchbase/operations/search_index_control_ingest.hxx +93 -0
  138. data/ext/couchbase/operations/search_index_control_plan_freeze.hxx +93 -0
  139. data/ext/couchbase/operations/search_index_control_query.hxx +93 -0
  140. data/ext/couchbase/operations/search_index_drop.hxx +90 -0
  141. data/ext/couchbase/operations/search_index_get.hxx +93 -0
  142. data/ext/couchbase/operations/search_index_get_all.hxx +89 -0
  143. data/ext/couchbase/operations/search_index_get_documents_count.hxx +101 -0
  144. data/ext/couchbase/operations/search_index_get_stats.hxx +88 -0
  145. data/ext/couchbase/operations/search_index_upsert.hxx +119 -0
  146. data/ext/couchbase/operations/user_drop.hxx +73 -0
  147. data/ext/couchbase/operations/user_get.hxx +81 -0
  148. data/ext/couchbase/operations/user_get_all.hxx +78 -0
  149. data/ext/couchbase/operations/user_upsert.hxx +132 -0
  150. data/ext/couchbase/operations/view_index_drop.hxx +68 -0
  151. data/ext/couchbase/operations/view_index_get.hxx +97 -0
  152. data/ext/couchbase/operations/view_index_get_all.hxx +132 -0
  153. data/ext/couchbase/operations/view_index_upsert.hxx +88 -0
  154. data/ext/couchbase/origin.hxx +179 -0
  155. data/ext/couchbase/platform/backtrace.c +189 -0
  156. data/ext/couchbase/platform/backtrace.h +54 -0
  157. data/ext/couchbase/platform/base64.cc +234 -0
  158. data/ext/couchbase/platform/base64.h +47 -0
  159. data/ext/couchbase/platform/random.cc +119 -0
  160. data/ext/couchbase/platform/random.h +39 -0
  161. data/ext/couchbase/platform/string_hex.cc +99 -0
  162. data/ext/couchbase/platform/string_hex.h +50 -0
  163. data/ext/couchbase/platform/terminate_handler.cc +130 -0
  164. data/ext/couchbase/platform/terminate_handler.h +36 -0
  165. data/ext/couchbase/platform/uuid.cc +96 -0
  166. data/ext/couchbase/platform/uuid.h +56 -0
  167. data/ext/couchbase/protocol/client_opcode.hxx +632 -0
  168. data/ext/couchbase/protocol/client_request.hxx +161 -0
  169. data/ext/couchbase/protocol/client_response.hxx +221 -0
  170. data/ext/couchbase/protocol/cmd_append.hxx +145 -0
  171. data/ext/couchbase/protocol/cmd_cluster_map_change_notification.hxx +79 -0
  172. data/ext/couchbase/protocol/cmd_decrement.hxx +187 -0
  173. data/ext/couchbase/protocol/cmd_exists.hxx +172 -0
  174. data/ext/couchbase/protocol/cmd_get.hxx +122 -0
  175. data/ext/couchbase/protocol/cmd_get_and_lock.hxx +142 -0
  176. data/ext/couchbase/protocol/cmd_get_and_touch.hxx +142 -0
  177. data/ext/couchbase/protocol/cmd_get_cluster_config.hxx +126 -0
  178. data/ext/couchbase/protocol/cmd_get_collection_id.hxx +117 -0
  179. data/ext/couchbase/protocol/cmd_get_collections_manifest.hxx +99 -0
  180. data/ext/couchbase/protocol/cmd_get_error_map.hxx +126 -0
  181. data/ext/couchbase/protocol/cmd_hello.hxx +157 -0
  182. data/ext/couchbase/protocol/cmd_increment.hxx +187 -0
  183. data/ext/couchbase/protocol/cmd_info.hxx +25 -0
  184. data/ext/couchbase/protocol/cmd_insert.hxx +172 -0
  185. data/ext/couchbase/protocol/cmd_lookup_in.hxx +227 -0
  186. data/ext/couchbase/protocol/cmd_mutate_in.hxx +406 -0
  187. data/ext/couchbase/protocol/cmd_noop.hxx +82 -0
  188. data/ext/couchbase/protocol/cmd_prepend.hxx +145 -0
  189. data/ext/couchbase/protocol/cmd_remove.hxx +134 -0
  190. data/ext/couchbase/protocol/cmd_replace.hxx +172 -0
  191. data/ext/couchbase/protocol/cmd_sasl_auth.hxx +106 -0
  192. data/ext/couchbase/protocol/cmd_sasl_list_mechs.hxx +100 -0
  193. data/ext/couchbase/protocol/cmd_sasl_step.hxx +104 -0
  194. data/ext/couchbase/protocol/cmd_select_bucket.hxx +85 -0
  195. data/ext/couchbase/protocol/cmd_touch.hxx +102 -0
  196. data/ext/couchbase/protocol/cmd_unlock.hxx +95 -0
  197. data/ext/couchbase/protocol/cmd_upsert.hxx +172 -0
  198. data/ext/couchbase/protocol/datatype.hxx +48 -0
  199. data/ext/couchbase/protocol/durability_level.hxx +83 -0
  200. data/ext/couchbase/protocol/enhanced_error_info.hxx +28 -0
  201. data/ext/couchbase/protocol/frame_info_id.hxx +187 -0
  202. data/ext/couchbase/protocol/hello_feature.hxx +264 -0
  203. data/ext/couchbase/protocol/magic.hxx +83 -0
  204. data/ext/couchbase/protocol/server_opcode.hxx +57 -0
  205. data/ext/couchbase/protocol/server_request.hxx +122 -0
  206. data/ext/couchbase/protocol/status.hxx +343 -0
  207. data/ext/couchbase/protocol/unsigned_leb128.h +195 -0
  208. data/ext/couchbase/service_type.hxx +60 -0
  209. data/ext/couchbase/timeout_defaults.hxx +41 -0
  210. data/ext/couchbase/utils/byteswap.hxx +33 -0
  211. data/ext/couchbase/utils/connection_string.hxx +379 -0
  212. data/ext/couchbase/utils/crc32.hxx +48 -0
  213. data/ext/couchbase/utils/url_codec.hxx +225 -0
  214. data/ext/couchbase/version.hxx +38 -0
  215. data/ext/extconf.rb +98 -0
  216. data/ext/test/CMakeLists.txt +5 -0
  217. data/ext/test/test_helper.hxx +141 -0
  218. data/ext/test/test_helper_native.hxx +56 -0
  219. data/ext/test/test_helper_ruby.hxx +72 -0
  220. data/ext/test/test_native_binary_operations.cxx +186 -0
  221. data/ext/test/test_native_diagnostics.cxx +436 -0
  222. data/ext/test/test_native_trivial_crud.cxx +83 -0
  223. data/ext/test/test_ruby_trivial_crud.cxx +35 -0
  224. data/ext/test/test_ruby_trivial_query.cxx +34 -0
  225. data/ext/third_party/asio/asio/include/asio.hpp +182 -0
  226. data/ext/third_party/asio/asio/include/asio/any_io_executor.hpp +71 -0
  227. data/ext/third_party/asio/asio/include/asio/associated_allocator.hpp +125 -0
  228. data/ext/third_party/asio/asio/include/asio/associated_executor.hpp +166 -0
  229. data/ext/third_party/asio/asio/include/asio/async_result.hpp +582 -0
  230. data/ext/third_party/asio/asio/include/asio/awaitable.hpp +133 -0
  231. data/ext/third_party/asio/asio/include/asio/basic_datagram_socket.hpp +1215 -0
  232. data/ext/third_party/asio/asio/include/asio/basic_deadline_timer.hpp +693 -0
  233. data/ext/third_party/asio/asio/include/asio/basic_io_object.hpp +290 -0
  234. data/ext/third_party/asio/asio/include/asio/basic_raw_socket.hpp +1206 -0
  235. data/ext/third_party/asio/asio/include/asio/basic_seq_packet_socket.hpp +761 -0
  236. data/ext/third_party/asio/asio/include/asio/basic_serial_port.hpp +907 -0
  237. data/ext/third_party/asio/asio/include/asio/basic_signal_set.hpp +568 -0
  238. data/ext/third_party/asio/asio/include/asio/basic_socket.hpp +1894 -0
  239. data/ext/third_party/asio/asio/include/asio/basic_socket_acceptor.hpp +2501 -0
  240. data/ext/third_party/asio/asio/include/asio/basic_socket_iostream.hpp +407 -0
  241. data/ext/third_party/asio/asio/include/asio/basic_socket_streambuf.hpp +687 -0
  242. data/ext/third_party/asio/asio/include/asio/basic_stream_socket.hpp +1053 -0
  243. data/ext/third_party/asio/asio/include/asio/basic_streambuf.hpp +452 -0
  244. data/ext/third_party/asio/asio/include/asio/basic_streambuf_fwd.hpp +36 -0
  245. data/ext/third_party/asio/asio/include/asio/basic_waitable_timer.hpp +811 -0
  246. data/ext/third_party/asio/asio/include/asio/bind_executor.hpp +575 -0
  247. data/ext/third_party/asio/asio/include/asio/buffer.hpp +2496 -0
  248. data/ext/third_party/asio/asio/include/asio/buffered_read_stream.hpp +253 -0
  249. data/ext/third_party/asio/asio/include/asio/buffered_read_stream_fwd.hpp +25 -0
  250. data/ext/third_party/asio/asio/include/asio/buffered_stream.hpp +279 -0
  251. data/ext/third_party/asio/asio/include/asio/buffered_stream_fwd.hpp +25 -0
  252. data/ext/third_party/asio/asio/include/asio/buffered_write_stream.hpp +245 -0
  253. data/ext/third_party/asio/asio/include/asio/buffered_write_stream_fwd.hpp +25 -0
  254. data/ext/third_party/asio/asio/include/asio/buffers_iterator.hpp +521 -0
  255. data/ext/third_party/asio/asio/include/asio/co_spawn.hpp +471 -0
  256. data/ext/third_party/asio/asio/include/asio/completion_condition.hpp +218 -0
  257. data/ext/third_party/asio/asio/include/asio/compose.hpp +136 -0
  258. data/ext/third_party/asio/asio/include/asio/connect.hpp +1076 -0
  259. data/ext/third_party/asio/asio/include/asio/coroutine.hpp +328 -0
  260. data/ext/third_party/asio/asio/include/asio/deadline_timer.hpp +38 -0
  261. data/ext/third_party/asio/asio/include/asio/defer.hpp +130 -0
  262. data/ext/third_party/asio/asio/include/asio/detached.hpp +112 -0
  263. data/ext/third_party/asio/asio/include/asio/detail/array.hpp +38 -0
  264. data/ext/third_party/asio/asio/include/asio/detail/array_fwd.hpp +34 -0
  265. data/ext/third_party/asio/asio/include/asio/detail/assert.hpp +32 -0
  266. data/ext/third_party/asio/asio/include/asio/detail/atomic_count.hpp +64 -0
  267. data/ext/third_party/asio/asio/include/asio/detail/base_from_completion_cond.hpp +69 -0
  268. data/ext/third_party/asio/asio/include/asio/detail/bind_handler.hpp +934 -0
  269. data/ext/third_party/asio/asio/include/asio/detail/blocking_executor_op.hpp +107 -0
  270. data/ext/third_party/asio/asio/include/asio/detail/buffer_resize_guard.hpp +66 -0
  271. data/ext/third_party/asio/asio/include/asio/detail/buffer_sequence_adapter.hpp +650 -0
  272. data/ext/third_party/asio/asio/include/asio/detail/buffered_stream_storage.hpp +126 -0
  273. data/ext/third_party/asio/asio/include/asio/detail/bulk_executor_op.hpp +88 -0
  274. data/ext/third_party/asio/asio/include/asio/detail/call_stack.hpp +125 -0
  275. data/ext/third_party/asio/asio/include/asio/detail/chrono.hpp +66 -0
  276. data/ext/third_party/asio/asio/include/asio/detail/chrono_time_traits.hpp +190 -0
  277. data/ext/third_party/asio/asio/include/asio/detail/completion_handler.hpp +88 -0
  278. data/ext/third_party/asio/asio/include/asio/detail/concurrency_hint.hpp +94 -0
  279. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_event.hpp +120 -0
  280. data/ext/third_party/asio/asio/include/asio/detail/conditionally_enabled_mutex.hpp +149 -0
  281. data/ext/third_party/asio/asio/include/asio/detail/config.hpp +1822 -0
  282. data/ext/third_party/asio/asio/include/asio/detail/consuming_buffers.hpp +414 -0
  283. data/ext/third_party/asio/asio/include/asio/detail/cstddef.hpp +31 -0
  284. data/ext/third_party/asio/asio/include/asio/detail/cstdint.hpp +60 -0
  285. data/ext/third_party/asio/asio/include/asio/detail/date_time_fwd.hpp +34 -0
  286. data/ext/third_party/asio/asio/include/asio/detail/deadline_timer_service.hpp +295 -0
  287. data/ext/third_party/asio/asio/include/asio/detail/dependent_type.hpp +36 -0
  288. data/ext/third_party/asio/asio/include/asio/detail/descriptor_ops.hpp +139 -0
  289. data/ext/third_party/asio/asio/include/asio/detail/descriptor_read_op.hpp +148 -0
  290. data/ext/third_party/asio/asio/include/asio/detail/descriptor_write_op.hpp +148 -0
  291. data/ext/third_party/asio/asio/include/asio/detail/dev_poll_reactor.hpp +218 -0
  292. data/ext/third_party/asio/asio/include/asio/detail/epoll_reactor.hpp +266 -0
  293. data/ext/third_party/asio/asio/include/asio/detail/event.hpp +48 -0
  294. data/ext/third_party/asio/asio/include/asio/detail/eventfd_select_interrupter.hpp +83 -0
  295. data/ext/third_party/asio/asio/include/asio/detail/executor_function.hpp +203 -0
  296. data/ext/third_party/asio/asio/include/asio/detail/executor_op.hpp +84 -0
  297. data/ext/third_party/asio/asio/include/asio/detail/fd_set_adapter.hpp +39 -0
  298. data/ext/third_party/asio/asio/include/asio/detail/fenced_block.hpp +80 -0
  299. data/ext/third_party/asio/asio/include/asio/detail/functional.hpp +38 -0
  300. data/ext/third_party/asio/asio/include/asio/detail/future.hpp +33 -0
  301. data/ext/third_party/asio/asio/include/asio/detail/gcc_arm_fenced_block.hpp +91 -0
  302. data/ext/third_party/asio/asio/include/asio/detail/gcc_hppa_fenced_block.hpp +68 -0
  303. data/ext/third_party/asio/asio/include/asio/detail/gcc_sync_fenced_block.hpp +65 -0
  304. data/ext/third_party/asio/asio/include/asio/detail/gcc_x86_fenced_block.hpp +99 -0
  305. data/ext/third_party/asio/asio/include/asio/detail/global.hpp +52 -0
  306. data/ext/third_party/asio/asio/include/asio/detail/handler_alloc_helpers.hpp +284 -0
  307. data/ext/third_party/asio/asio/include/asio/detail/handler_cont_helpers.hpp +45 -0
  308. data/ext/third_party/asio/asio/include/asio/detail/handler_invoke_helpers.hpp +80 -0
  309. data/ext/third_party/asio/asio/include/asio/detail/handler_tracking.hpp +264 -0
  310. data/ext/third_party/asio/asio/include/asio/detail/handler_type_requirements.hpp +556 -0
  311. data/ext/third_party/asio/asio/include/asio/detail/handler_work.hpp +438 -0
  312. data/ext/third_party/asio/asio/include/asio/detail/hash_map.hpp +331 -0
  313. data/ext/third_party/asio/asio/include/asio/detail/impl/buffer_sequence_adapter.ipp +118 -0
  314. data/ext/third_party/asio/asio/include/asio/detail/impl/descriptor_ops.ipp +608 -0
  315. data/ext/third_party/asio/asio/include/asio/detail/impl/dev_poll_reactor.hpp +91 -0
  316. data/ext/third_party/asio/asio/include/asio/detail/impl/dev_poll_reactor.ipp +446 -0
  317. data/ext/third_party/asio/asio/include/asio/detail/impl/epoll_reactor.hpp +89 -0
  318. data/ext/third_party/asio/asio/include/asio/detail/impl/epoll_reactor.ipp +787 -0
  319. data/ext/third_party/asio/asio/include/asio/detail/impl/eventfd_select_interrupter.ipp +169 -0
  320. data/ext/third_party/asio/asio/include/asio/detail/impl/handler_tracking.ipp +396 -0
  321. data/ext/third_party/asio/asio/include/asio/detail/impl/kqueue_reactor.hpp +93 -0
  322. data/ext/third_party/asio/asio/include/asio/detail/impl/kqueue_reactor.ipp +570 -0
  323. data/ext/third_party/asio/asio/include/asio/detail/impl/null_event.ipp +74 -0
  324. data/ext/third_party/asio/asio/include/asio/detail/impl/pipe_select_interrupter.ipp +129 -0
  325. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_event.ipp +59 -0
  326. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_mutex.ipp +46 -0
  327. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_thread.ipp +84 -0
  328. data/ext/third_party/asio/asio/include/asio/detail/impl/posix_tss_ptr.ipp +46 -0
  329. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_descriptor_service.ipp +223 -0
  330. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_serial_port_service.ipp +149 -0
  331. data/ext/third_party/asio/asio/include/asio/detail/impl/reactive_socket_service_base.ipp +300 -0
  332. data/ext/third_party/asio/asio/include/asio/detail/impl/resolver_service_base.ipp +158 -0
  333. data/ext/third_party/asio/asio/include/asio/detail/impl/scheduler.ipp +654 -0
  334. data/ext/third_party/asio/asio/include/asio/detail/impl/select_reactor.hpp +100 -0
  335. data/ext/third_party/asio/asio/include/asio/detail/impl/select_reactor.ipp +338 -0
  336. data/ext/third_party/asio/asio/include/asio/detail/impl/service_registry.hpp +94 -0
  337. data/ext/third_party/asio/asio/include/asio/detail/impl/service_registry.ipp +197 -0
  338. data/ext/third_party/asio/asio/include/asio/detail/impl/signal_set_service.ipp +668 -0
  339. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_ops.ipp +3962 -0
  340. data/ext/third_party/asio/asio/include/asio/detail/impl/socket_select_interrupter.ipp +185 -0
  341. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.hpp +385 -0
  342. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_executor_service.ipp +134 -0
  343. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.hpp +117 -0
  344. data/ext/third_party/asio/asio/include/asio/detail/impl/strand_service.ipp +178 -0
  345. data/ext/third_party/asio/asio/include/asio/detail/impl/throw_error.ipp +60 -0
  346. data/ext/third_party/asio/asio/include/asio/detail/impl/timer_queue_ptime.ipp +91 -0
  347. data/ext/third_party/asio/asio/include/asio/detail/impl/timer_queue_set.ipp +101 -0
  348. data/ext/third_party/asio/asio/include/asio/detail/impl/win_event.ipp +76 -0
  349. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_handle_service.ipp +525 -0
  350. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.hpp +103 -0
  351. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_io_context.ipp +603 -0
  352. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_serial_port_service.ipp +192 -0
  353. data/ext/third_party/asio/asio/include/asio/detail/impl/win_iocp_socket_service_base.ipp +801 -0
  354. data/ext/third_party/asio/asio/include/asio/detail/impl/win_mutex.ipp +84 -0
  355. data/ext/third_party/asio/asio/include/asio/detail/impl/win_object_handle_service.ipp +448 -0
  356. data/ext/third_party/asio/asio/include/asio/detail/impl/win_static_mutex.ipp +136 -0
  357. data/ext/third_party/asio/asio/include/asio/detail/impl/win_thread.ipp +150 -0
  358. data/ext/third_party/asio/asio/include/asio/detail/impl/win_tss_ptr.ipp +57 -0
  359. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_ssocket_service_base.ipp +626 -0
  360. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.hpp +92 -0
  361. data/ext/third_party/asio/asio/include/asio/detail/impl/winrt_timer_scheduler.ipp +121 -0
  362. data/ext/third_party/asio/asio/include/asio/detail/impl/winsock_init.ipp +82 -0
  363. data/ext/third_party/asio/asio/include/asio/detail/io_control.hpp +84 -0
  364. data/ext/third_party/asio/asio/include/asio/detail/io_object_impl.hpp +175 -0
  365. data/ext/third_party/asio/asio/include/asio/detail/is_buffer_sequence.hpp +312 -0
  366. data/ext/third_party/asio/asio/include/asio/detail/is_executor.hpp +126 -0
  367. data/ext/third_party/asio/asio/include/asio/detail/keyword_tss_ptr.hpp +70 -0
  368. data/ext/third_party/asio/asio/include/asio/detail/kqueue_reactor.hpp +242 -0
  369. data/ext/third_party/asio/asio/include/asio/detail/limits.hpp +26 -0
  370. data/ext/third_party/asio/asio/include/asio/detail/local_free_on_block_exit.hpp +59 -0
  371. data/ext/third_party/asio/asio/include/asio/detail/macos_fenced_block.hpp +62 -0
  372. data/ext/third_party/asio/asio/include/asio/detail/memory.hpp +73 -0
  373. data/ext/third_party/asio/asio/include/asio/detail/mutex.hpp +48 -0
  374. data/ext/third_party/asio/asio/include/asio/detail/non_const_lvalue.hpp +54 -0
  375. data/ext/third_party/asio/asio/include/asio/detail/noncopyable.hpp +43 -0
  376. data/ext/third_party/asio/asio/include/asio/detail/null_event.hpp +106 -0
  377. data/ext/third_party/asio/asio/include/asio/detail/null_fenced_block.hpp +47 -0
  378. data/ext/third_party/asio/asio/include/asio/detail/null_global.hpp +59 -0
  379. data/ext/third_party/asio/asio/include/asio/detail/null_mutex.hpp +64 -0
  380. data/ext/third_party/asio/asio/include/asio/detail/null_reactor.hpp +68 -0
  381. data/ext/third_party/asio/asio/include/asio/detail/null_signal_blocker.hpp +69 -0
  382. data/ext/third_party/asio/asio/include/asio/detail/null_socket_service.hpp +519 -0
  383. data/ext/third_party/asio/asio/include/asio/detail/null_static_mutex.hpp +60 -0
  384. data/ext/third_party/asio/asio/include/asio/detail/null_thread.hpp +67 -0
  385. data/ext/third_party/asio/asio/include/asio/detail/null_tss_ptr.hpp +68 -0
  386. data/ext/third_party/asio/asio/include/asio/detail/object_pool.hpp +171 -0
  387. data/ext/third_party/asio/asio/include/asio/detail/old_win_sdk_compat.hpp +214 -0
  388. data/ext/third_party/asio/asio/include/asio/detail/op_queue.hpp +162 -0
  389. data/ext/third_party/asio/asio/include/asio/detail/operation.hpp +38 -0
  390. data/ext/third_party/asio/asio/include/asio/detail/pipe_select_interrupter.hpp +89 -0
  391. data/ext/third_party/asio/asio/include/asio/detail/pop_options.hpp +141 -0
  392. data/ext/third_party/asio/asio/include/asio/detail/posix_event.hpp +175 -0
  393. data/ext/third_party/asio/asio/include/asio/detail/posix_fd_set_adapter.hpp +118 -0
  394. data/ext/third_party/asio/asio/include/asio/detail/posix_global.hpp +80 -0
  395. data/ext/third_party/asio/asio/include/asio/detail/posix_mutex.hpp +76 -0
  396. data/ext/third_party/asio/asio/include/asio/detail/posix_signal_blocker.hpp +85 -0
  397. data/ext/third_party/asio/asio/include/asio/detail/posix_static_mutex.hpp +64 -0
  398. data/ext/third_party/asio/asio/include/asio/detail/posix_thread.hpp +109 -0
  399. data/ext/third_party/asio/asio/include/asio/detail/posix_tss_ptr.hpp +79 -0
  400. data/ext/third_party/asio/asio/include/asio/detail/push_options.hpp +185 -0
  401. data/ext/third_party/asio/asio/include/asio/detail/reactive_descriptor_service.hpp +416 -0
  402. data/ext/third_party/asio/asio/include/asio/detail/reactive_null_buffers_op.hpp +98 -0
  403. data/ext/third_party/asio/asio/include/asio/detail/reactive_serial_port_service.hpp +237 -0
  404. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_accept_op.hpp +242 -0
  405. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_connect_op.hpp +123 -0
  406. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recv_op.hpp +159 -0
  407. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvfrom_op.hpp +164 -0
  408. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_recvmsg_op.hpp +145 -0
  409. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_send_op.hpp +162 -0
  410. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_sendto_op.hpp +156 -0
  411. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service.hpp +528 -0
  412. data/ext/third_party/asio/asio/include/asio/detail/reactive_socket_service_base.hpp +541 -0
  413. data/ext/third_party/asio/asio/include/asio/detail/reactive_wait_op.hpp +98 -0
  414. data/ext/third_party/asio/asio/include/asio/detail/reactor.hpp +32 -0
  415. data/ext/third_party/asio/asio/include/asio/detail/reactor_fwd.hpp +40 -0
  416. data/ext/third_party/asio/asio/include/asio/detail/reactor_op.hpp +67 -0
  417. data/ext/third_party/asio/asio/include/asio/detail/reactor_op_queue.hpp +168 -0
  418. data/ext/third_party/asio/asio/include/asio/detail/recycling_allocator.hpp +106 -0
  419. data/ext/third_party/asio/asio/include/asio/detail/regex_fwd.hpp +35 -0
  420. data/ext/third_party/asio/asio/include/asio/detail/resolve_endpoint_op.hpp +140 -0
  421. data/ext/third_party/asio/asio/include/asio/detail/resolve_op.hpp +45 -0
  422. data/ext/third_party/asio/asio/include/asio/detail/resolve_query_op.hpp +150 -0
  423. data/ext/third_party/asio/asio/include/asio/detail/resolver_service.hpp +145 -0
  424. data/ext/third_party/asio/asio/include/asio/detail/resolver_service_base.hpp +143 -0
  425. data/ext/third_party/asio/asio/include/asio/detail/scheduler.hpp +232 -0
  426. data/ext/third_party/asio/asio/include/asio/detail/scheduler_operation.hpp +78 -0
  427. data/ext/third_party/asio/asio/include/asio/detail/scheduler_thread_info.hpp +40 -0
  428. data/ext/third_party/asio/asio/include/asio/detail/scoped_lock.hpp +101 -0
  429. data/ext/third_party/asio/asio/include/asio/detail/scoped_ptr.hpp +87 -0
  430. data/ext/third_party/asio/asio/include/asio/detail/select_interrupter.hpp +46 -0
  431. data/ext/third_party/asio/asio/include/asio/detail/select_reactor.hpp +238 -0
  432. data/ext/third_party/asio/asio/include/asio/detail/service_registry.hpp +164 -0
  433. data/ext/third_party/asio/asio/include/asio/detail/signal_blocker.hpp +44 -0
  434. data/ext/third_party/asio/asio/include/asio/detail/signal_handler.hpp +90 -0
  435. data/ext/third_party/asio/asio/include/asio/detail/signal_init.hpp +47 -0
  436. data/ext/third_party/asio/asio/include/asio/detail/signal_op.hpp +49 -0
  437. data/ext/third_party/asio/asio/include/asio/detail/signal_set_service.hpp +229 -0
  438. data/ext/third_party/asio/asio/include/asio/detail/socket_holder.hpp +98 -0
  439. data/ext/third_party/asio/asio/include/asio/detail/socket_ops.hpp +383 -0
  440. data/ext/third_party/asio/asio/include/asio/detail/socket_option.hpp +316 -0
  441. data/ext/third_party/asio/asio/include/asio/detail/socket_select_interrupter.hpp +91 -0
  442. data/ext/third_party/asio/asio/include/asio/detail/socket_types.hpp +416 -0
  443. data/ext/third_party/asio/asio/include/asio/detail/solaris_fenced_block.hpp +62 -0
  444. data/ext/third_party/asio/asio/include/asio/detail/source_location.hpp +45 -0
  445. data/ext/third_party/asio/asio/include/asio/detail/static_mutex.hpp +52 -0
  446. data/ext/third_party/asio/asio/include/asio/detail/std_event.hpp +188 -0
  447. data/ext/third_party/asio/asio/include/asio/detail/std_fenced_block.hpp +62 -0
  448. data/ext/third_party/asio/asio/include/asio/detail/std_global.hpp +70 -0
  449. data/ext/third_party/asio/asio/include/asio/detail/std_mutex.hpp +73 -0
  450. data/ext/third_party/asio/asio/include/asio/detail/std_static_mutex.hpp +81 -0
  451. data/ext/third_party/asio/asio/include/asio/detail/std_thread.hpp +71 -0
  452. data/ext/third_party/asio/asio/include/asio/detail/strand_executor_service.hpp +166 -0
  453. data/ext/third_party/asio/asio/include/asio/detail/strand_service.hpp +145 -0
  454. data/ext/third_party/asio/asio/include/asio/detail/string_view.hpp +47 -0
  455. data/ext/third_party/asio/asio/include/asio/detail/thread.hpp +60 -0
  456. data/ext/third_party/asio/asio/include/asio/detail/thread_context.hpp +42 -0
  457. data/ext/third_party/asio/asio/include/asio/detail/thread_group.hpp +95 -0
  458. data/ext/third_party/asio/asio/include/asio/detail/thread_info_base.hpp +183 -0
  459. data/ext/third_party/asio/asio/include/asio/detail/throw_error.hpp +53 -0
  460. data/ext/third_party/asio/asio/include/asio/detail/throw_exception.hpp +51 -0
  461. data/ext/third_party/asio/asio/include/asio/detail/timer_queue.hpp +360 -0
  462. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_base.hpp +68 -0
  463. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_ptime.hpp +99 -0
  464. data/ext/third_party/asio/asio/include/asio/detail/timer_queue_set.hpp +66 -0
  465. data/ext/third_party/asio/asio/include/asio/detail/timer_scheduler.hpp +35 -0
  466. data/ext/third_party/asio/asio/include/asio/detail/timer_scheduler_fwd.hpp +40 -0
  467. data/ext/third_party/asio/asio/include/asio/detail/tss_ptr.hpp +69 -0
  468. data/ext/third_party/asio/asio/include/asio/detail/type_traits.hpp +148 -0
  469. data/ext/third_party/asio/asio/include/asio/detail/variadic_templates.hpp +294 -0
  470. data/ext/third_party/asio/asio/include/asio/detail/wait_handler.hpp +90 -0
  471. data/ext/third_party/asio/asio/include/asio/detail/wait_op.hpp +45 -0
  472. data/ext/third_party/asio/asio/include/asio/detail/win_event.hpp +164 -0
  473. data/ext/third_party/asio/asio/include/asio/detail/win_fd_set_adapter.hpp +149 -0
  474. data/ext/third_party/asio/asio/include/asio/detail/win_fenced_block.hpp +90 -0
  475. data/ext/third_party/asio/asio/include/asio/detail/win_global.hpp +71 -0
  476. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_read_op.hpp +117 -0
  477. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_service.hpp +335 -0
  478. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_handle_write_op.hpp +110 -0
  479. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_io_context.hpp +342 -0
  480. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_null_buffers_op.hpp +127 -0
  481. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_operation.hpp +96 -0
  482. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_op.hpp +96 -0
  483. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_overlapped_ptr.hpp +171 -0
  484. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_serial_port_service.hpp +232 -0
  485. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_accept_op.hpp +312 -0
  486. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_connect_op.hpp +135 -0
  487. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recv_op.hpp +124 -0
  488. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvfrom_op.hpp +133 -0
  489. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_recvmsg_op.hpp +125 -0
  490. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_send_op.hpp +118 -0
  491. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_service.hpp +581 -0
  492. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_socket_service_base.hpp +600 -0
  493. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_thread_info.hpp +34 -0
  494. data/ext/third_party/asio/asio/include/asio/detail/win_iocp_wait_op.hpp +128 -0
  495. data/ext/third_party/asio/asio/include/asio/detail/win_mutex.hpp +78 -0
  496. data/ext/third_party/asio/asio/include/asio/detail/win_object_handle_service.hpp +195 -0
  497. data/ext/third_party/asio/asio/include/asio/detail/win_static_mutex.hpp +74 -0
  498. data/ext/third_party/asio/asio/include/asio/detail/win_thread.hpp +147 -0
  499. data/ext/third_party/asio/asio/include/asio/detail/win_tss_ptr.hpp +79 -0
  500. data/ext/third_party/asio/asio/include/asio/detail/winapp_thread.hpp +124 -0
  501. data/ext/third_party/asio/asio/include/asio/detail/wince_thread.hpp +124 -0
  502. data/ext/third_party/asio/asio/include/asio/detail/winrt_async_manager.hpp +305 -0
  503. data/ext/third_party/asio/asio/include/asio/detail/winrt_async_op.hpp +65 -0
  504. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolve_op.hpp +125 -0
  505. data/ext/third_party/asio/asio/include/asio/detail/winrt_resolver_service.hpp +212 -0
  506. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_connect_op.hpp +98 -0
  507. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_recv_op.hpp +119 -0
  508. data/ext/third_party/asio/asio/include/asio/detail/winrt_socket_send_op.hpp +110 -0
  509. data/ext/third_party/asio/asio/include/asio/detail/winrt_ssocket_service.hpp +250 -0
  510. data/ext/third_party/asio/asio/include/asio/detail/winrt_ssocket_service_base.hpp +362 -0
  511. data/ext/third_party/asio/asio/include/asio/detail/winrt_timer_scheduler.hpp +147 -0
  512. data/ext/third_party/asio/asio/include/asio/detail/winrt_utils.hpp +106 -0
  513. data/ext/third_party/asio/asio/include/asio/detail/winsock_init.hpp +128 -0
  514. data/ext/third_party/asio/asio/include/asio/detail/work_dispatcher.hpp +148 -0
  515. data/ext/third_party/asio/asio/include/asio/detail/wrapped_handler.hpp +327 -0
  516. data/ext/third_party/asio/asio/include/asio/dispatch.hpp +121 -0
  517. data/ext/third_party/asio/asio/include/asio/error.hpp +356 -0
  518. data/ext/third_party/asio/asio/include/asio/error_code.hpp +202 -0
  519. data/ext/third_party/asio/asio/include/asio/execution.hpp +48 -0
  520. data/ext/third_party/asio/asio/include/asio/execution/allocator.hpp +249 -0
  521. data/ext/third_party/asio/asio/include/asio/execution/any_executor.hpp +2264 -0
  522. data/ext/third_party/asio/asio/include/asio/execution/bad_executor.hpp +47 -0
  523. data/ext/third_party/asio/asio/include/asio/execution/blocking.hpp +1351 -0
  524. data/ext/third_party/asio/asio/include/asio/execution/blocking_adaptation.hpp +1064 -0
  525. data/ext/third_party/asio/asio/include/asio/execution/bulk_execute.hpp +390 -0
  526. data/ext/third_party/asio/asio/include/asio/execution/bulk_guarantee.hpp +1018 -0
  527. data/ext/third_party/asio/asio/include/asio/execution/connect.hpp +486 -0
  528. data/ext/third_party/asio/asio/include/asio/execution/context.hpp +185 -0
  529. data/ext/third_party/asio/asio/include/asio/execution/context_as.hpp +201 -0
  530. data/ext/third_party/asio/asio/include/asio/execution/detail/as_invocable.hpp +152 -0
  531. data/ext/third_party/asio/asio/include/asio/execution/detail/as_operation.hpp +105 -0
  532. data/ext/third_party/asio/asio/include/asio/execution/detail/as_receiver.hpp +128 -0
  533. data/ext/third_party/asio/asio/include/asio/execution/detail/bulk_sender.hpp +261 -0
  534. data/ext/third_party/asio/asio/include/asio/execution/detail/submit_receiver.hpp +233 -0
  535. data/ext/third_party/asio/asio/include/asio/execution/detail/void_receiver.hpp +90 -0
  536. data/ext/third_party/asio/asio/include/asio/execution/execute.hpp +264 -0
  537. data/ext/third_party/asio/asio/include/asio/execution/executor.hpp +238 -0
  538. data/ext/third_party/asio/asio/include/asio/execution/impl/bad_executor.ipp +40 -0
  539. data/ext/third_party/asio/asio/include/asio/execution/impl/receiver_invocation_error.ipp +36 -0
  540. data/ext/third_party/asio/asio/include/asio/execution/invocable_archetype.hpp +71 -0
  541. data/ext/third_party/asio/asio/include/asio/execution/mapping.hpp +917 -0
  542. data/ext/third_party/asio/asio/include/asio/execution/occupancy.hpp +178 -0
  543. data/ext/third_party/asio/asio/include/asio/execution/operation_state.hpp +94 -0
  544. data/ext/third_party/asio/asio/include/asio/execution/outstanding_work.hpp +721 -0
  545. data/ext/third_party/asio/asio/include/asio/execution/prefer_only.hpp +327 -0
  546. data/ext/third_party/asio/asio/include/asio/execution/receiver.hpp +280 -0
  547. data/ext/third_party/asio/asio/include/asio/execution/receiver_invocation_error.hpp +48 -0
  548. data/ext/third_party/asio/asio/include/asio/execution/relationship.hpp +720 -0
  549. data/ext/third_party/asio/asio/include/asio/execution/schedule.hpp +290 -0
  550. data/ext/third_party/asio/asio/include/asio/execution/scheduler.hpp +86 -0
  551. data/ext/third_party/asio/asio/include/asio/execution/sender.hpp +311 -0
  552. data/ext/third_party/asio/asio/include/asio/execution/set_done.hpp +253 -0
  553. data/ext/third_party/asio/asio/include/asio/execution/set_error.hpp +253 -0
  554. data/ext/third_party/asio/asio/include/asio/execution/set_value.hpp +486 -0
  555. data/ext/third_party/asio/asio/include/asio/execution/start.hpp +250 -0
  556. data/ext/third_party/asio/asio/include/asio/execution/submit.hpp +450 -0
  557. data/ext/third_party/asio/asio/include/asio/execution_context.hpp +412 -0
  558. data/ext/third_party/asio/asio/include/asio/executor.hpp +347 -0
  559. data/ext/third_party/asio/asio/include/asio/executor_work_guard.hpp +287 -0
  560. data/ext/third_party/asio/asio/include/asio/generic/basic_endpoint.hpp +193 -0
  561. data/ext/third_party/asio/asio/include/asio/generic/datagram_protocol.hpp +123 -0
  562. data/ext/third_party/asio/asio/include/asio/generic/detail/endpoint.hpp +133 -0
  563. data/ext/third_party/asio/asio/include/asio/generic/detail/impl/endpoint.ipp +110 -0
  564. data/ext/third_party/asio/asio/include/asio/generic/raw_protocol.hpp +121 -0
  565. data/ext/third_party/asio/asio/include/asio/generic/seq_packet_protocol.hpp +122 -0
  566. data/ext/third_party/asio/asio/include/asio/generic/stream_protocol.hpp +127 -0
  567. data/ext/third_party/asio/asio/include/asio/handler_alloc_hook.hpp +104 -0
  568. data/ext/third_party/asio/asio/include/asio/handler_continuation_hook.hpp +54 -0
  569. data/ext/third_party/asio/asio/include/asio/handler_invoke_hook.hpp +111 -0
  570. data/ext/third_party/asio/asio/include/asio/high_resolution_timer.hpp +44 -0
  571. data/ext/third_party/asio/asio/include/asio/impl/awaitable.hpp +436 -0
  572. data/ext/third_party/asio/asio/include/asio/impl/buffered_read_stream.hpp +527 -0
  573. data/ext/third_party/asio/asio/include/asio/impl/buffered_write_stream.hpp +507 -0
  574. data/ext/third_party/asio/asio/include/asio/impl/co_spawn.hpp +298 -0
  575. data/ext/third_party/asio/asio/include/asio/impl/compose.hpp +635 -0
  576. data/ext/third_party/asio/asio/include/asio/impl/connect.hpp +916 -0
  577. data/ext/third_party/asio/asio/include/asio/impl/defer.hpp +248 -0
  578. data/ext/third_party/asio/asio/include/asio/impl/detached.hpp +130 -0
  579. data/ext/third_party/asio/asio/include/asio/impl/dispatch.hpp +243 -0
  580. data/ext/third_party/asio/asio/include/asio/impl/error.ipp +128 -0
  581. data/ext/third_party/asio/asio/include/asio/impl/error_code.ipp +206 -0
  582. data/ext/third_party/asio/asio/include/asio/impl/execution_context.hpp +109 -0
  583. data/ext/third_party/asio/asio/include/asio/impl/execution_context.ipp +82 -0
  584. data/ext/third_party/asio/asio/include/asio/impl/executor.hpp +301 -0
  585. data/ext/third_party/asio/asio/include/asio/impl/executor.ipp +43 -0
  586. data/ext/third_party/asio/asio/include/asio/impl/handler_alloc_hook.ipp +61 -0
  587. data/ext/third_party/asio/asio/include/asio/impl/io_context.hpp +440 -0
  588. data/ext/third_party/asio/asio/include/asio/impl/io_context.ipp +175 -0
  589. data/ext/third_party/asio/asio/include/asio/impl/multiple_exceptions.ipp +49 -0
  590. data/ext/third_party/asio/asio/include/asio/impl/post.hpp +248 -0
  591. data/ext/third_party/asio/asio/include/asio/impl/read.hpp +1202 -0
  592. data/ext/third_party/asio/asio/include/asio/impl/read_at.hpp +744 -0
  593. data/ext/third_party/asio/asio/include/asio/impl/read_until.hpp +3335 -0
  594. data/ext/third_party/asio/asio/include/asio/impl/redirect_error.hpp +390 -0
  595. data/ext/third_party/asio/asio/include/asio/impl/serial_port_base.hpp +59 -0
  596. data/ext/third_party/asio/asio/include/asio/impl/serial_port_base.ipp +554 -0
  597. data/ext/third_party/asio/asio/include/asio/impl/spawn.hpp +526 -0
  598. data/ext/third_party/asio/asio/include/asio/impl/src.hpp +85 -0
  599. data/ext/third_party/asio/asio/include/asio/impl/system_context.hpp +34 -0
  600. data/ext/third_party/asio/asio/include/asio/impl/system_context.ipp +92 -0
  601. data/ext/third_party/asio/asio/include/asio/impl/system_executor.hpp +186 -0
  602. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.hpp +350 -0
  603. data/ext/third_party/asio/asio/include/asio/impl/thread_pool.ipp +141 -0
  604. data/ext/third_party/asio/asio/include/asio/impl/use_awaitable.hpp +279 -0
  605. data/ext/third_party/asio/asio/include/asio/impl/use_future.hpp +1028 -0
  606. data/ext/third_party/asio/asio/include/asio/impl/write.hpp +1104 -0
  607. data/ext/third_party/asio/asio/include/asio/impl/write_at.hpp +666 -0
  608. data/ext/third_party/asio/asio/include/asio/io_context.hpp +1530 -0
  609. data/ext/third_party/asio/asio/include/asio/io_context_strand.hpp +376 -0
  610. data/ext/third_party/asio/asio/include/asio/io_service.hpp +33 -0
  611. data/ext/third_party/asio/asio/include/asio/io_service_strand.hpp +20 -0
  612. data/ext/third_party/asio/asio/include/asio/ip/address.hpp +268 -0
  613. data/ext/third_party/asio/asio/include/asio/ip/address_v4.hpp +335 -0
  614. data/ext/third_party/asio/asio/include/asio/ip/address_v4_iterator.hpp +162 -0
  615. data/ext/third_party/asio/asio/include/asio/ip/address_v4_range.hpp +134 -0
  616. data/ext/third_party/asio/asio/include/asio/ip/address_v6.hpp +341 -0
  617. data/ext/third_party/asio/asio/include/asio/ip/address_v6_iterator.hpp +183 -0
  618. data/ext/third_party/asio/asio/include/asio/ip/address_v6_range.hpp +129 -0
  619. data/ext/third_party/asio/asio/include/asio/ip/bad_address_cast.hpp +53 -0
  620. data/ext/third_party/asio/asio/include/asio/ip/basic_endpoint.hpp +264 -0
  621. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver.hpp +1030 -0
  622. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_entry.hpp +113 -0
  623. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_iterator.hpp +192 -0
  624. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_query.hpp +244 -0
  625. data/ext/third_party/asio/asio/include/asio/ip/basic_resolver_results.hpp +311 -0
  626. data/ext/third_party/asio/asio/include/asio/ip/detail/endpoint.hpp +141 -0
  627. data/ext/third_party/asio/asio/include/asio/ip/detail/impl/endpoint.ipp +199 -0
  628. data/ext/third_party/asio/asio/include/asio/ip/detail/socket_option.hpp +566 -0
  629. data/ext/third_party/asio/asio/include/asio/ip/host_name.hpp +42 -0
  630. data/ext/third_party/asio/asio/include/asio/ip/icmp.hpp +115 -0
  631. data/ext/third_party/asio/asio/include/asio/ip/impl/address.hpp +67 -0
  632. data/ext/third_party/asio/asio/include/asio/ip/impl/address.ipp +239 -0
  633. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v4.hpp +67 -0
  634. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v4.ipp +210 -0
  635. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v6.hpp +67 -0
  636. data/ext/third_party/asio/asio/include/asio/ip/impl/address_v6.ipp +350 -0
  637. data/ext/third_party/asio/asio/include/asio/ip/impl/basic_endpoint.hpp +43 -0
  638. data/ext/third_party/asio/asio/include/asio/ip/impl/host_name.ipp +54 -0
  639. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v4.hpp +54 -0
  640. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v4.ipp +216 -0
  641. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v6.hpp +53 -0
  642. data/ext/third_party/asio/asio/include/asio/ip/impl/network_v6.ipp +185 -0
  643. data/ext/third_party/asio/asio/include/asio/ip/multicast.hpp +191 -0
  644. data/ext/third_party/asio/asio/include/asio/ip/network_v4.hpp +261 -0
  645. data/ext/third_party/asio/asio/include/asio/ip/network_v6.hpp +235 -0
  646. data/ext/third_party/asio/asio/include/asio/ip/resolver_base.hpp +129 -0
  647. data/ext/third_party/asio/asio/include/asio/ip/resolver_query_base.hpp +43 -0
  648. data/ext/third_party/asio/asio/include/asio/ip/tcp.hpp +155 -0
  649. data/ext/third_party/asio/asio/include/asio/ip/udp.hpp +111 -0
  650. data/ext/third_party/asio/asio/include/asio/ip/unicast.hpp +70 -0
  651. data/ext/third_party/asio/asio/include/asio/ip/v6_only.hpp +69 -0
  652. data/ext/third_party/asio/asio/include/asio/is_applicable_property.hpp +61 -0
  653. data/ext/third_party/asio/asio/include/asio/is_executor.hpp +46 -0
  654. data/ext/third_party/asio/asio/include/asio/is_read_buffered.hpp +59 -0
  655. data/ext/third_party/asio/asio/include/asio/is_write_buffered.hpp +59 -0
  656. data/ext/third_party/asio/asio/include/asio/local/basic_endpoint.hpp +247 -0
  657. data/ext/third_party/asio/asio/include/asio/local/connect_pair.hpp +101 -0
  658. data/ext/third_party/asio/asio/include/asio/local/datagram_protocol.hpp +80 -0
  659. data/ext/third_party/asio/asio/include/asio/local/detail/endpoint.hpp +139 -0
  660. data/ext/third_party/asio/asio/include/asio/local/detail/impl/endpoint.ipp +136 -0
  661. data/ext/third_party/asio/asio/include/asio/local/stream_protocol.hpp +90 -0
  662. data/ext/third_party/asio/asio/include/asio/multiple_exceptions.hpp +58 -0
  663. data/ext/third_party/asio/asio/include/asio/packaged_task.hpp +126 -0
  664. data/ext/third_party/asio/asio/include/asio/placeholders.hpp +151 -0
  665. data/ext/third_party/asio/asio/include/asio/posix/basic_descriptor.hpp +697 -0
  666. data/ext/third_party/asio/asio/include/asio/posix/basic_stream_descriptor.hpp +470 -0
  667. data/ext/third_party/asio/asio/include/asio/posix/descriptor.hpp +37 -0
  668. data/ext/third_party/asio/asio/include/asio/posix/descriptor_base.hpp +90 -0
  669. data/ext/third_party/asio/asio/include/asio/posix/stream_descriptor.hpp +37 -0
  670. data/ext/third_party/asio/asio/include/asio/post.hpp +126 -0
  671. data/ext/third_party/asio/asio/include/asio/prefer.hpp +656 -0
  672. data/ext/third_party/asio/asio/include/asio/query.hpp +296 -0
  673. data/ext/third_party/asio/asio/include/asio/read.hpp +1288 -0
  674. data/ext/third_party/asio/asio/include/asio/read_at.hpp +694 -0
  675. data/ext/third_party/asio/asio/include/asio/read_until.hpp +2863 -0
  676. data/ext/third_party/asio/asio/include/asio/redirect_error.hpp +66 -0
  677. data/ext/third_party/asio/asio/include/asio/require.hpp +524 -0
  678. data/ext/third_party/asio/asio/include/asio/require_concept.hpp +310 -0
  679. data/ext/third_party/asio/asio/include/asio/serial_port.hpp +36 -0
  680. data/ext/third_party/asio/asio/include/asio/serial_port_base.hpp +167 -0
  681. data/ext/third_party/asio/asio/include/asio/signal_set.hpp +28 -0
  682. data/ext/third_party/asio/asio/include/asio/socket_base.hpp +559 -0
  683. data/ext/third_party/asio/asio/include/asio/spawn.hpp +344 -0
  684. data/ext/third_party/asio/asio/include/asio/ssl.hpp +28 -0
  685. data/ext/third_party/asio/asio/include/asio/ssl/context.hpp +761 -0
  686. data/ext/third_party/asio/asio/include/asio/ssl/context_base.hpp +209 -0
  687. data/ext/third_party/asio/asio/include/asio/ssl/detail/buffered_handshake_op.hpp +119 -0
  688. data/ext/third_party/asio/asio/include/asio/ssl/detail/engine.hpp +165 -0
  689. data/ext/third_party/asio/asio/include/asio/ssl/detail/handshake_op.hpp +67 -0
  690. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/engine.ipp +349 -0
  691. data/ext/third_party/asio/asio/include/asio/ssl/detail/impl/openssl_init.ipp +165 -0
  692. data/ext/third_party/asio/asio/include/asio/ssl/detail/io.hpp +415 -0
  693. data/ext/third_party/asio/asio/include/asio/ssl/detail/openssl_init.hpp +101 -0
  694. data/ext/third_party/asio/asio/include/asio/ssl/detail/openssl_types.hpp +34 -0
  695. data/ext/third_party/asio/asio/include/asio/ssl/detail/password_callback.hpp +66 -0
  696. data/ext/third_party/asio/asio/include/asio/ssl/detail/read_op.hpp +72 -0
  697. data/ext/third_party/asio/asio/include/asio/ssl/detail/shutdown_op.hpp +69 -0
  698. data/ext/third_party/asio/asio/include/asio/ssl/detail/stream_core.hpp +169 -0
  699. data/ext/third_party/asio/asio/include/asio/ssl/detail/verify_callback.hpp +62 -0
  700. data/ext/third_party/asio/asio/include/asio/ssl/detail/write_op.hpp +76 -0
  701. data/ext/third_party/asio/asio/include/asio/ssl/error.hpp +125 -0
  702. data/ext/third_party/asio/asio/include/asio/ssl/host_name_verification.hpp +90 -0
  703. data/ext/third_party/asio/asio/include/asio/ssl/impl/context.hpp +67 -0
  704. data/ext/third_party/asio/asio/include/asio/ssl/impl/context.ipp +1238 -0
  705. data/ext/third_party/asio/asio/include/asio/ssl/impl/error.ipp +102 -0
  706. data/ext/third_party/asio/asio/include/asio/ssl/impl/host_name_verification.ipp +73 -0
  707. data/ext/third_party/asio/asio/include/asio/ssl/impl/rfc2818_verification.ipp +164 -0
  708. data/ext/third_party/asio/asio/include/asio/ssl/impl/src.hpp +29 -0
  709. data/ext/third_party/asio/asio/include/asio/ssl/rfc2818_verification.hpp +98 -0
  710. data/ext/third_party/asio/asio/include/asio/ssl/stream.hpp +900 -0
  711. data/ext/third_party/asio/asio/include/asio/ssl/stream_base.hpp +52 -0
  712. data/ext/third_party/asio/asio/include/asio/ssl/verify_context.hpp +67 -0
  713. data/ext/third_party/asio/asio/include/asio/ssl/verify_mode.hpp +63 -0
  714. data/ext/third_party/asio/asio/include/asio/static_thread_pool.hpp +31 -0
  715. data/ext/third_party/asio/asio/include/asio/steady_timer.hpp +42 -0
  716. data/ext/third_party/asio/asio/include/asio/strand.hpp +537 -0
  717. data/ext/third_party/asio/asio/include/asio/streambuf.hpp +33 -0
  718. data/ext/third_party/asio/asio/include/asio/system_context.hpp +90 -0
  719. data/ext/third_party/asio/asio/include/asio/system_error.hpp +131 -0
  720. data/ext/third_party/asio/asio/include/asio/system_executor.hpp +662 -0
  721. data/ext/third_party/asio/asio/include/asio/system_timer.hpp +42 -0
  722. data/ext/third_party/asio/asio/include/asio/this_coro.hpp +45 -0
  723. data/ext/third_party/asio/asio/include/asio/thread.hpp +92 -0
  724. data/ext/third_party/asio/asio/include/asio/thread_pool.hpp +1111 -0
  725. data/ext/third_party/asio/asio/include/asio/time_traits.hpp +86 -0
  726. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_free.hpp +114 -0
  727. data/ext/third_party/asio/asio/include/asio/traits/bulk_execute_member.hpp +114 -0
  728. data/ext/third_party/asio/asio/include/asio/traits/connect_free.hpp +112 -0
  729. data/ext/third_party/asio/asio/include/asio/traits/connect_member.hpp +112 -0
  730. data/ext/third_party/asio/asio/include/asio/traits/equality_comparable.hpp +100 -0
  731. data/ext/third_party/asio/asio/include/asio/traits/execute_free.hpp +108 -0
  732. data/ext/third_party/asio/asio/include/asio/traits/execute_member.hpp +108 -0
  733. data/ext/third_party/asio/asio/include/asio/traits/prefer_free.hpp +108 -0
  734. data/ext/third_party/asio/asio/include/asio/traits/prefer_member.hpp +108 -0
  735. data/ext/third_party/asio/asio/include/asio/traits/query_free.hpp +108 -0
  736. data/ext/third_party/asio/asio/include/asio/traits/query_member.hpp +108 -0
  737. data/ext/third_party/asio/asio/include/asio/traits/query_static_constexpr_member.hpp +108 -0
  738. data/ext/third_party/asio/asio/include/asio/traits/require_concept_free.hpp +108 -0
  739. data/ext/third_party/asio/asio/include/asio/traits/require_concept_member.hpp +108 -0
  740. data/ext/third_party/asio/asio/include/asio/traits/require_free.hpp +108 -0
  741. data/ext/third_party/asio/asio/include/asio/traits/require_member.hpp +108 -0
  742. data/ext/third_party/asio/asio/include/asio/traits/schedule_free.hpp +108 -0
  743. data/ext/third_party/asio/asio/include/asio/traits/schedule_member.hpp +108 -0
  744. data/ext/third_party/asio/asio/include/asio/traits/set_done_free.hpp +108 -0
  745. data/ext/third_party/asio/asio/include/asio/traits/set_done_member.hpp +108 -0
  746. data/ext/third_party/asio/asio/include/asio/traits/set_error_free.hpp +112 -0
  747. data/ext/third_party/asio/asio/include/asio/traits/set_error_member.hpp +112 -0
  748. data/ext/third_party/asio/asio/include/asio/traits/set_value_free.hpp +234 -0
  749. data/ext/third_party/asio/asio/include/asio/traits/set_value_member.hpp +234 -0
  750. data/ext/third_party/asio/asio/include/asio/traits/start_free.hpp +108 -0
  751. data/ext/third_party/asio/asio/include/asio/traits/start_member.hpp +108 -0
  752. data/ext/third_party/asio/asio/include/asio/traits/static_query.hpp +108 -0
  753. data/ext/third_party/asio/asio/include/asio/traits/static_require.hpp +123 -0
  754. data/ext/third_party/asio/asio/include/asio/traits/static_require_concept.hpp +123 -0
  755. data/ext/third_party/asio/asio/include/asio/traits/submit_free.hpp +112 -0
  756. data/ext/third_party/asio/asio/include/asio/traits/submit_member.hpp +112 -0
  757. data/ext/third_party/asio/asio/include/asio/ts/buffer.hpp +24 -0
  758. data/ext/third_party/asio/asio/include/asio/ts/executor.hpp +35 -0
  759. data/ext/third_party/asio/asio/include/asio/ts/internet.hpp +40 -0
  760. data/ext/third_party/asio/asio/include/asio/ts/io_context.hpp +20 -0
  761. data/ext/third_party/asio/asio/include/asio/ts/net.hpp +26 -0
  762. data/ext/third_party/asio/asio/include/asio/ts/netfwd.hpp +262 -0
  763. data/ext/third_party/asio/asio/include/asio/ts/socket.hpp +27 -0
  764. data/ext/third_party/asio/asio/include/asio/ts/timer.hpp +26 -0
  765. data/ext/third_party/asio/asio/include/asio/unyield.hpp +21 -0
  766. data/ext/third_party/asio/asio/include/asio/use_awaitable.hpp +169 -0
  767. data/ext/third_party/asio/asio/include/asio/use_future.hpp +160 -0
  768. data/ext/third_party/asio/asio/include/asio/uses_executor.hpp +71 -0
  769. data/ext/third_party/asio/asio/include/asio/version.hpp +23 -0
  770. data/ext/third_party/asio/asio/include/asio/wait_traits.hpp +56 -0
  771. data/ext/third_party/asio/asio/include/asio/windows/basic_object_handle.hpp +435 -0
  772. data/ext/third_party/asio/asio/include/asio/windows/basic_overlapped_handle.hpp +361 -0
  773. data/ext/third_party/asio/asio/include/asio/windows/basic_random_access_handle.hpp +490 -0
  774. data/ext/third_party/asio/asio/include/asio/windows/basic_stream_handle.hpp +474 -0
  775. data/ext/third_party/asio/asio/include/asio/windows/object_handle.hpp +38 -0
  776. data/ext/third_party/asio/asio/include/asio/windows/overlapped_handle.hpp +39 -0
  777. data/ext/third_party/asio/asio/include/asio/windows/overlapped_ptr.hpp +145 -0
  778. data/ext/third_party/asio/asio/include/asio/windows/random_access_handle.hpp +37 -0
  779. data/ext/third_party/asio/asio/include/asio/windows/stream_handle.hpp +37 -0
  780. data/ext/third_party/asio/asio/include/asio/write.hpp +1246 -0
  781. data/ext/third_party/asio/asio/include/asio/write_at.hpp +702 -0
  782. data/ext/third_party/asio/asio/include/asio/yield.hpp +23 -0
  783. data/ext/third_party/gsl/CMakeLists.txt +127 -0
  784. data/ext/third_party/gsl/LICENSE +21 -0
  785. data/ext/third_party/gsl/ThirdPartyNotices.txt +41 -0
  786. data/ext/third_party/gsl/include/gsl/gsl +29 -0
  787. data/ext/third_party/gsl/include/gsl/gsl_algorithm +61 -0
  788. data/ext/third_party/gsl/include/gsl/gsl_assert +133 -0
  789. data/ext/third_party/gsl/include/gsl/gsl_byte +209 -0
  790. data/ext/third_party/gsl/include/gsl/gsl_narrow +52 -0
  791. data/ext/third_party/gsl/include/gsl/gsl_util +129 -0
  792. data/ext/third_party/gsl/include/gsl/multi_span +2263 -0
  793. data/ext/third_party/gsl/include/gsl/pointers +287 -0
  794. data/ext/third_party/gsl/include/gsl/span +816 -0
  795. data/ext/third_party/gsl/include/gsl/span_ext +198 -0
  796. data/ext/third_party/gsl/include/gsl/string_span +706 -0
  797. data/ext/third_party/http_parser/LICENSE-MIT +19 -0
  798. data/ext/third_party/http_parser/http_parser.c +2575 -0
  799. data/ext/third_party/http_parser/http_parser.h +449 -0
  800. data/ext/third_party/json/CMakeLists.txt +44 -0
  801. data/ext/third_party/json/LICENSE +21 -0
  802. data/ext/third_party/json/LICENSE.double-conversion +32 -0
  803. data/ext/third_party/json/LICENSE.itoa +19 -0
  804. data/ext/third_party/json/LICENSE.ryu +201 -0
  805. data/ext/third_party/json/include/tao/json.hpp +45 -0
  806. data/ext/third_party/json/include/tao/json/basic_value.hpp +942 -0
  807. data/ext/third_party/json/include/tao/json/binary.hpp +103 -0
  808. data/ext/third_party/json/include/tao/json/binary_view.hpp +31 -0
  809. data/ext/third_party/json/include/tao/json/binding.hpp +71 -0
  810. data/ext/third_party/json/include/tao/json/binding/constant.hpp +232 -0
  811. data/ext/third_party/json/include/tao/json/binding/element.hpp +182 -0
  812. data/ext/third_party/json/include/tao/json/binding/factory.hpp +251 -0
  813. data/ext/third_party/json/include/tao/json/binding/for_nothing_value.hpp +17 -0
  814. data/ext/third_party/json/include/tao/json/binding/for_unknown_key.hpp +17 -0
  815. data/ext/third_party/json/include/tao/json/binding/inherit.hpp +14 -0
  816. data/ext/third_party/json/include/tao/json/binding/internal/array.hpp +104 -0
  817. data/ext/third_party/json/include/tao/json/binding/internal/inherit.hpp +45 -0
  818. data/ext/third_party/json/include/tao/json/binding/internal/object.hpp +268 -0
  819. data/ext/third_party/json/include/tao/json/binding/internal/type_key.hpp +54 -0
  820. data/ext/third_party/json/include/tao/json/binding/member.hpp +32 -0
  821. data/ext/third_party/json/include/tao/json/binding/member_kind.hpp +17 -0
  822. data/ext/third_party/json/include/tao/json/binding/versions.hpp +129 -0
  823. data/ext/third_party/json/include/tao/json/cbor.hpp +19 -0
  824. data/ext/third_party/json/include/tao/json/cbor/consume_file.hpp +34 -0
  825. data/ext/third_party/json/include/tao/json/cbor/consume_string.hpp +32 -0
  826. data/ext/third_party/json/include/tao/json/cbor/events/from_binary.hpp +43 -0
  827. data/ext/third_party/json/include/tao/json/cbor/events/from_file.hpp +27 -0
  828. data/ext/third_party/json/include/tao/json/cbor/events/from_input.hpp +43 -0
  829. data/ext/third_party/json/include/tao/json/cbor/events/from_string.hpp +37 -0
  830. data/ext/third_party/json/include/tao/json/cbor/events/to_stream.hpp +161 -0
  831. data/ext/third_party/json/include/tao/json/cbor/events/to_string.hpp +31 -0
  832. data/ext/third_party/json/include/tao/json/cbor/from_binary.hpp +32 -0
  833. data/ext/third_party/json/include/tao/json/cbor/from_file.hpp +33 -0
  834. data/ext/third_party/json/include/tao/json/cbor/from_input.hpp +33 -0
  835. data/ext/third_party/json/include/tao/json/cbor/from_string.hpp +32 -0
  836. data/ext/third_party/json/include/tao/json/cbor/internal/grammar.hpp +418 -0
  837. data/ext/third_party/json/include/tao/json/cbor/internal/major.hpp +28 -0
  838. data/ext/third_party/json/include/tao/json/cbor/parts_parser.hpp +392 -0
  839. data/ext/third_party/json/include/tao/json/cbor/to_stream.hpp +27 -0
  840. data/ext/third_party/json/include/tao/json/cbor/to_string.hpp +28 -0
  841. data/ext/third_party/json/include/tao/json/consume.hpp +43 -0
  842. data/ext/third_party/json/include/tao/json/consume_file.hpp +33 -0
  843. data/ext/third_party/json/include/tao/json/consume_string.hpp +31 -0
  844. data/ext/third_party/json/include/tao/json/contrib/array_traits.hpp +43 -0
  845. data/ext/third_party/json/include/tao/json/contrib/deque_traits.hpp +41 -0
  846. data/ext/third_party/json/include/tao/json/contrib/diff.hpp +106 -0
  847. data/ext/third_party/json/include/tao/json/contrib/get.hpp +152 -0
  848. data/ext/third_party/json/include/tao/json/contrib/internal/array_traits.hpp +92 -0
  849. data/ext/third_party/json/include/tao/json/contrib/internal/indirect_traits.hpp +76 -0
  850. data/ext/third_party/json/include/tao/json/contrib/internal/object_traits.hpp +105 -0
  851. data/ext/third_party/json/include/tao/json/contrib/internal/type_traits.hpp +36 -0
  852. data/ext/third_party/json/include/tao/json/contrib/list_traits.hpp +41 -0
  853. data/ext/third_party/json/include/tao/json/contrib/map_traits.hpp +43 -0
  854. data/ext/third_party/json/include/tao/json/contrib/multimap_traits.hpp +43 -0
  855. data/ext/third_party/json/include/tao/json/contrib/multiset_traits.hpp +41 -0
  856. data/ext/third_party/json/include/tao/json/contrib/pair_traits.hpp +21 -0
  857. data/ext/third_party/json/include/tao/json/contrib/patch.hpp +105 -0
  858. data/ext/third_party/json/include/tao/json/contrib/pointer_traits.hpp +59 -0
  859. data/ext/third_party/json/include/tao/json/contrib/position.hpp +166 -0
  860. data/ext/third_party/json/include/tao/json/contrib/reference.hpp +113 -0
  861. data/ext/third_party/json/include/tao/json/contrib/schema.hpp +1874 -0
  862. data/ext/third_party/json/include/tao/json/contrib/set_traits.hpp +41 -0
  863. data/ext/third_party/json/include/tao/json/contrib/shared_ptr_traits.hpp +98 -0
  864. data/ext/third_party/json/include/tao/json/contrib/traits.hpp +121 -0
  865. data/ext/third_party/json/include/tao/json/contrib/tuple_traits.hpp +51 -0
  866. data/ext/third_party/json/include/tao/json/contrib/unique_ptr_traits.hpp +97 -0
  867. data/ext/third_party/json/include/tao/json/contrib/unordered_map_traits.hpp +43 -0
  868. data/ext/third_party/json/include/tao/json/contrib/unordered_set_traits.hpp +41 -0
  869. data/ext/third_party/json/include/tao/json/contrib/vector_bool_traits.hpp +45 -0
  870. data/ext/third_party/json/include/tao/json/contrib/vector_traits.hpp +51 -0
  871. data/ext/third_party/json/include/tao/json/events.hpp +47 -0
  872. data/ext/third_party/json/include/tao/json/events/apply.hpp +20 -0
  873. data/ext/third_party/json/include/tao/json/events/binary_to_base64.hpp +26 -0
  874. data/ext/third_party/json/include/tao/json/events/binary_to_base64url.hpp +28 -0
  875. data/ext/third_party/json/include/tao/json/events/binary_to_exception.hpp +27 -0
  876. data/ext/third_party/json/include/tao/json/events/binary_to_hex.hpp +26 -0
  877. data/ext/third_party/json/include/tao/json/events/compare.hpp +255 -0
  878. data/ext/third_party/json/include/tao/json/events/debug.hpp +145 -0
  879. data/ext/third_party/json/include/tao/json/events/discard.hpp +43 -0
  880. data/ext/third_party/json/include/tao/json/events/from_file.hpp +28 -0
  881. data/ext/third_party/json/include/tao/json/events/from_input.hpp +45 -0
  882. data/ext/third_party/json/include/tao/json/events/from_stream.hpp +33 -0
  883. data/ext/third_party/json/include/tao/json/events/from_string.hpp +38 -0
  884. data/ext/third_party/json/include/tao/json/events/from_value.hpp +202 -0
  885. data/ext/third_party/json/include/tao/json/events/hash.hpp +174 -0
  886. data/ext/third_party/json/include/tao/json/events/invalid_string_to_binary.hpp +50 -0
  887. data/ext/third_party/json/include/tao/json/events/invalid_string_to_exception.hpp +49 -0
  888. data/ext/third_party/json/include/tao/json/events/invalid_string_to_hex.hpp +48 -0
  889. data/ext/third_party/json/include/tao/json/events/key_camel_case_to_snake_case.hpp +62 -0
  890. data/ext/third_party/json/include/tao/json/events/key_snake_case_to_camel_case.hpp +57 -0
  891. data/ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp +82 -0
  892. data/ext/third_party/json/include/tao/json/events/limit_value_count.hpp +46 -0
  893. data/ext/third_party/json/include/tao/json/events/non_finite_to_exception.hpp +31 -0
  894. data/ext/third_party/json/include/tao/json/events/non_finite_to_null.hpp +32 -0
  895. data/ext/third_party/json/include/tao/json/events/non_finite_to_string.hpp +40 -0
  896. data/ext/third_party/json/include/tao/json/events/prefer_signed.hpp +32 -0
  897. data/ext/third_party/json/include/tao/json/events/prefer_unsigned.hpp +32 -0
  898. data/ext/third_party/json/include/tao/json/events/produce.hpp +22 -0
  899. data/ext/third_party/json/include/tao/json/events/ref.hpp +111 -0
  900. data/ext/third_party/json/include/tao/json/events/statistics.hpp +112 -0
  901. data/ext/third_party/json/include/tao/json/events/tee.hpp +386 -0
  902. data/ext/third_party/json/include/tao/json/events/to_pretty_stream.hpp +172 -0
  903. data/ext/third_party/json/include/tao/json/events/to_stream.hpp +142 -0
  904. data/ext/third_party/json/include/tao/json/events/to_string.hpp +33 -0
  905. data/ext/third_party/json/include/tao/json/events/to_value.hpp +137 -0
  906. data/ext/third_party/json/include/tao/json/events/transformer.hpp +70 -0
  907. data/ext/third_party/json/include/tao/json/events/validate_event_order.hpp +411 -0
  908. data/ext/third_party/json/include/tao/json/events/validate_keys.hpp +51 -0
  909. data/ext/third_party/json/include/tao/json/events/virtual_base.hpp +192 -0
  910. data/ext/third_party/json/include/tao/json/events/virtual_ref.hpp +176 -0
  911. data/ext/third_party/json/include/tao/json/external/double.hpp +1313 -0
  912. data/ext/third_party/json/include/tao/json/external/itoa.hpp +149 -0
  913. data/ext/third_party/json/include/tao/json/external/pegtl.hpp +44 -0
  914. data/ext/third_party/json/include/tao/json/external/pegtl/apply_mode.hpp +19 -0
  915. data/ext/third_party/json/include/tao/json/external/pegtl/argv_input.hpp +49 -0
  916. data/ext/third_party/json/include/tao/json/external/pegtl/ascii.hpp +54 -0
  917. data/ext/third_party/json/include/tao/json/external/pegtl/buffer_input.hpp +212 -0
  918. data/ext/third_party/json/include/tao/json/external/pegtl/change_action.hpp +38 -0
  919. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_state.hpp +53 -0
  920. data/ext/third_party/json/include/tao/json/external/pegtl/change_action_and_states.hpp +62 -0
  921. data/ext/third_party/json/include/tao/json/external/pegtl/change_control.hpp +36 -0
  922. data/ext/third_party/json/include/tao/json/external/pegtl/change_state.hpp +50 -0
  923. data/ext/third_party/json/include/tao/json/external/pegtl/change_states.hpp +61 -0
  924. data/ext/third_party/json/include/tao/json/external/pegtl/config.hpp +11 -0
  925. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/abnf.hpp +35 -0
  926. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/alphabet.hpp +67 -0
  927. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze.hpp +176 -0
  928. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/analyze_traits.hpp +275 -0
  929. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/control_action.hpp +77 -0
  930. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/coverage.hpp +151 -0
  931. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/forward.hpp +16 -0
  932. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/http.hpp +272 -0
  933. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/internal.hpp +66 -0
  934. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf16.hpp +196 -0
  935. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf32.hpp +196 -0
  936. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/icu/utf8.hpp +103 -0
  937. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/if_then.hpp +56 -0
  938. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/integer.hpp +431 -0
  939. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/endian.hpp +62 -0
  940. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/endian_gcc.hpp +206 -0
  941. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/endian_win.hpp +106 -0
  942. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_mask_uint.hpp +54 -0
  943. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_mask_uint8.hpp +33 -0
  944. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_uint.hpp +45 -0
  945. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_uint8.hpp +32 -0
  946. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_utf16.hpp +54 -0
  947. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/peek_utf32.hpp +43 -0
  948. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/read_uint.hpp +77 -0
  949. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/internal/set_stack_guard.hpp +52 -0
  950. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/json.hpp +88 -0
  951. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/json_pointer.hpp +33 -0
  952. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree.hpp +440 -0
  953. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/parse_tree_to_dot.hpp +105 -0
  954. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print.hpp +75 -0
  955. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/print_coverage.hpp +53 -0
  956. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/raw_string.hpp +234 -0
  957. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_first_state.hpp +69 -0
  958. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/remove_last_states.hpp +117 -0
  959. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_one_min_max.hpp +94 -0
  960. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/rep_string.hpp +43 -0
  961. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/shuffle_states.hpp +193 -0
  962. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/state_control.hpp +118 -0
  963. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/to_string.hpp +38 -0
  964. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/trace.hpp +227 -0
  965. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uint16.hpp +62 -0
  966. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uint32.hpp +62 -0
  967. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uint64.hpp +63 -0
  968. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uint8.hpp +36 -0
  969. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/unescape.hpp +199 -0
  970. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/uri.hpp +106 -0
  971. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/utf16.hpp +49 -0
  972. data/ext/third_party/json/include/tao/json/external/pegtl/contrib/utf32.hpp +49 -0
  973. data/ext/third_party/json/include/tao/json/external/pegtl/cstream_input.hpp +32 -0
  974. data/ext/third_party/json/include/tao/json/external/pegtl/demangle.hpp +138 -0
  975. data/ext/third_party/json/include/tao/json/external/pegtl/disable_action.hpp +35 -0
  976. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input.hpp +37 -0
  977. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_failure.hpp +39 -0
  978. data/ext/third_party/json/include/tao/json/external/pegtl/discard_input_on_success.hpp +39 -0
  979. data/ext/third_party/json/include/tao/json/external/pegtl/enable_action.hpp +35 -0
  980. data/ext/third_party/json/include/tao/json/external/pegtl/eol.hpp +37 -0
  981. data/ext/third_party/json/include/tao/json/external/pegtl/eol_pair.hpp +18 -0
  982. data/ext/third_party/json/include/tao/json/external/pegtl/file_input.hpp +44 -0
  983. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action.hpp +54 -0
  984. data/ext/third_party/json/include/tao/json/external/pegtl/internal/action_input.hpp +106 -0
  985. data/ext/third_party/json/include/tao/json/external/pegtl/internal/any.hpp +58 -0
  986. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply.hpp +53 -0
  987. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0.hpp +51 -0
  988. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply0_single.hpp +34 -0
  989. data/ext/third_party/json/include/tao/json/external/pegtl/internal/apply_single.hpp +34 -0
  990. data/ext/third_party/json/include/tao/json/external/pegtl/internal/at.hpp +55 -0
  991. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bof.hpp +32 -0
  992. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bol.hpp +31 -0
  993. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump.hpp +45 -0
  994. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bump_help.hpp +29 -0
  995. data/ext/third_party/json/include/tao/json/external/pegtl/internal/bytes.hpp +43 -0
  996. data/ext/third_party/json/include/tao/json/external/pegtl/internal/control.hpp +54 -0
  997. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_crlf_eol.hpp +32 -0
  998. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cr_eol.hpp +32 -0
  999. data/ext/third_party/json/include/tao/json/external/pegtl/internal/crlf_eol.hpp +32 -0
  1000. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstream_reader.hpp +49 -0
  1001. data/ext/third_party/json/include/tao/json/external/pegtl/internal/cstring_reader.hpp +40 -0
  1002. data/ext/third_party/json/include/tao/json/external/pegtl/internal/dependent_false.hpp +16 -0
  1003. data/ext/third_party/json/include/tao/json/external/pegtl/internal/disable.hpp +54 -0
  1004. data/ext/third_party/json/include/tao/json/external/pegtl/internal/discard.hpp +34 -0
  1005. data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable.hpp +54 -0
  1006. data/ext/third_party/json/include/tao/json/external/pegtl/internal/enable_control.hpp +25 -0
  1007. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eof.hpp +32 -0
  1008. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eol.hpp +32 -0
  1009. data/ext/third_party/json/include/tao/json/external/pegtl/internal/eolf.hpp +33 -0
  1010. data/ext/third_party/json/include/tao/json/external/pegtl/internal/failure.hpp +32 -0
  1011. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_posix.hpp +134 -0
  1012. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_mapper_win32.hpp +213 -0
  1013. data/ext/third_party/json/include/tao/json/external/pegtl/internal/file_reader.hpp +113 -0
  1014. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply.hpp +21 -0
  1015. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_apply0.hpp +21 -0
  1016. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_match.hpp +40 -0
  1017. data/ext/third_party/json/include/tao/json/external/pegtl/internal/has_unwind.hpp +21 -0
  1018. data/ext/third_party/json/include/tao/json/external/pegtl/internal/identifier.hpp +22 -0
  1019. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_apply.hpp +54 -0
  1020. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must.hpp +47 -0
  1021. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_must_else.hpp +21 -0
  1022. data/ext/third_party/json/include/tao/json/external/pegtl/internal/if_then_else.hpp +51 -0
  1023. data/ext/third_party/json/include/tao/json/external/pegtl/internal/input_pair.hpp +29 -0
  1024. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istream_reader.hpp +39 -0
  1025. data/ext/third_party/json/include/tao/json/external/pegtl/internal/istring.hpp +72 -0
  1026. data/ext/third_party/json/include/tao/json/external/pegtl/internal/iterator.hpp +49 -0
  1027. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_crlf_eol.hpp +37 -0
  1028. data/ext/third_party/json/include/tao/json/external/pegtl/internal/lf_eol.hpp +32 -0
  1029. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list.hpp +19 -0
  1030. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_must.hpp +20 -0
  1031. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail.hpp +22 -0
  1032. data/ext/third_party/json/include/tao/json/external/pegtl/internal/list_tail_pad.hpp +22 -0
  1033. data/ext/third_party/json/include/tao/json/external/pegtl/internal/marker.hpp +80 -0
  1034. data/ext/third_party/json/include/tao/json/external/pegtl/internal/minus.hpp +21 -0
  1035. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply.hpp +28 -0
  1036. data/ext/third_party/json/include/tao/json/external/pegtl/internal/missing_apply0.hpp +26 -0
  1037. data/ext/third_party/json/include/tao/json/external/pegtl/internal/must.hpp +64 -0
  1038. data/ext/third_party/json/include/tao/json/external/pegtl/internal/not_at.hpp +55 -0
  1039. data/ext/third_party/json/include/tao/json/external/pegtl/internal/one.hpp +55 -0
  1040. data/ext/third_party/json/include/tao/json/external/pegtl/internal/opt.hpp +57 -0
  1041. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pad.hpp +19 -0
  1042. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pad_opt.hpp +20 -0
  1043. data/ext/third_party/json/include/tao/json/external/pegtl/internal/path_to_string.hpp +26 -0
  1044. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_char.hpp +32 -0
  1045. data/ext/third_party/json/include/tao/json/external/pegtl/internal/peek_utf8.hpp +89 -0
  1046. data/ext/third_party/json/include/tao/json/external/pegtl/internal/pegtl_string.hpp +90 -0
  1047. data/ext/third_party/json/include/tao/json/external/pegtl/internal/plus.hpp +60 -0
  1048. data/ext/third_party/json/include/tao/json/external/pegtl/internal/raise.hpp +44 -0
  1049. data/ext/third_party/json/include/tao/json/external/pegtl/internal/range.hpp +56 -0
  1050. data/ext/third_party/json/include/tao/json/external/pegtl/internal/ranges.hpp +103 -0
  1051. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rematch.hpp +72 -0
  1052. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep.hpp +67 -0
  1053. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min.hpp +20 -0
  1054. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_min_max.hpp +81 -0
  1055. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rep_opt.hpp +61 -0
  1056. data/ext/third_party/json/include/tao/json/external/pegtl/internal/require.hpp +42 -0
  1057. data/ext/third_party/json/include/tao/json/external/pegtl/internal/result_on_found.hpp +19 -0
  1058. data/ext/third_party/json/include/tao/json/external/pegtl/internal/rules.hpp +61 -0
  1059. data/ext/third_party/json/include/tao/json/external/pegtl/internal/seq.hpp +58 -0
  1060. data/ext/third_party/json/include/tao/json/external/pegtl/internal/sor.hpp +67 -0
  1061. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star.hpp +52 -0
  1062. data/ext/third_party/json/include/tao/json/external/pegtl/internal/star_must.hpp +19 -0
  1063. data/ext/third_party/json/include/tao/json/external/pegtl/internal/state.hpp +59 -0
  1064. data/ext/third_party/json/include/tao/json/external/pegtl/internal/string.hpp +58 -0
  1065. data/ext/third_party/json/include/tao/json/external/pegtl/internal/success.hpp +32 -0
  1066. data/ext/third_party/json/include/tao/json/external/pegtl/internal/try_catch_type.hpp +64 -0
  1067. data/ext/third_party/json/include/tao/json/external/pegtl/internal/until.hpp +88 -0
  1068. data/ext/third_party/json/include/tao/json/external/pegtl/istream_input.hpp +32 -0
  1069. data/ext/third_party/json/include/tao/json/external/pegtl/match.hpp +169 -0
  1070. data/ext/third_party/json/include/tao/json/external/pegtl/memory_input.hpp +365 -0
  1071. data/ext/third_party/json/include/tao/json/external/pegtl/mmap_input.hpp +79 -0
  1072. data/ext/third_party/json/include/tao/json/external/pegtl/must_if.hpp +64 -0
  1073. data/ext/third_party/json/include/tao/json/external/pegtl/normal.hpp +87 -0
  1074. data/ext/third_party/json/include/tao/json/external/pegtl/nothing.hpp +19 -0
  1075. data/ext/third_party/json/include/tao/json/external/pegtl/parse.hpp +51 -0
  1076. data/ext/third_party/json/include/tao/json/external/pegtl/parse_error.hpp +114 -0
  1077. data/ext/third_party/json/include/tao/json/external/pegtl/position.hpp +83 -0
  1078. data/ext/third_party/json/include/tao/json/external/pegtl/read_input.hpp +54 -0
  1079. data/ext/third_party/json/include/tao/json/external/pegtl/require_apply.hpp +16 -0
  1080. data/ext/third_party/json/include/tao/json/external/pegtl/require_apply0.hpp +16 -0
  1081. data/ext/third_party/json/include/tao/json/external/pegtl/rewind_mode.hpp +20 -0
  1082. data/ext/third_party/json/include/tao/json/external/pegtl/rules.hpp +68 -0
  1083. data/ext/third_party/json/include/tao/json/external/pegtl/string_input.hpp +64 -0
  1084. data/ext/third_party/json/include/tao/json/external/pegtl/tracking_mode.hpp +19 -0
  1085. data/ext/third_party/json/include/tao/json/external/pegtl/type_list.hpp +46 -0
  1086. data/ext/third_party/json/include/tao/json/external/pegtl/utf8.hpp +28 -0
  1087. data/ext/third_party/json/include/tao/json/external/pegtl/version.hpp +13 -0
  1088. data/ext/third_party/json/include/tao/json/external/pegtl/visit.hpp +66 -0
  1089. data/ext/third_party/json/include/tao/json/external/ryu.hpp +1216 -0
  1090. data/ext/third_party/json/include/tao/json/forward.hpp +44 -0
  1091. data/ext/third_party/json/include/tao/json/from_file.hpp +32 -0
  1092. data/ext/third_party/json/include/tao/json/from_input.hpp +32 -0
  1093. data/ext/third_party/json/include/tao/json/from_stream.hpp +45 -0
  1094. data/ext/third_party/json/include/tao/json/from_string.hpp +41 -0
  1095. data/ext/third_party/json/include/tao/json/internal/action.hpp +268 -0
  1096. data/ext/third_party/json/include/tao/json/internal/base64.hpp +55 -0
  1097. data/ext/third_party/json/include/tao/json/internal/base64url.hpp +53 -0
  1098. data/ext/third_party/json/include/tao/json/internal/dependent_false.hpp +14 -0
  1099. data/ext/third_party/json/include/tao/json/internal/endian.hpp +60 -0
  1100. data/ext/third_party/json/include/tao/json/internal/endian_gcc.hpp +198 -0
  1101. data/ext/third_party/json/include/tao/json/internal/endian_win.hpp +103 -0
  1102. data/ext/third_party/json/include/tao/json/internal/errors.hpp +85 -0
  1103. data/ext/third_party/json/include/tao/json/internal/escape.hpp +77 -0
  1104. data/ext/third_party/json/include/tao/json/internal/format.hpp +57 -0
  1105. data/ext/third_party/json/include/tao/json/internal/grammar.hpp +229 -0
  1106. data/ext/third_party/json/include/tao/json/internal/hexdump.hpp +31 -0
  1107. data/ext/third_party/json/include/tao/json/internal/identity.hpp +22 -0
  1108. data/ext/third_party/json/include/tao/json/internal/number_state.hpp +80 -0
  1109. data/ext/third_party/json/include/tao/json/internal/number_traits.hpp +267 -0
  1110. data/ext/third_party/json/include/tao/json/internal/pair.hpp +42 -0
  1111. data/ext/third_party/json/include/tao/json/internal/parse_util.hpp +112 -0
  1112. data/ext/third_party/json/include/tao/json/internal/sha256.hpp +218 -0
  1113. data/ext/third_party/json/include/tao/json/internal/single.hpp +40 -0
  1114. data/ext/third_party/json/include/tao/json/internal/string_t.hpp +35 -0
  1115. data/ext/third_party/json/include/tao/json/internal/type_traits.hpp +96 -0
  1116. data/ext/third_party/json/include/tao/json/internal/unescape_action.hpp +24 -0
  1117. data/ext/third_party/json/include/tao/json/internal/uri_fragment.hpp +182 -0
  1118. data/ext/third_party/json/include/tao/json/jaxn.hpp +19 -0
  1119. data/ext/third_party/json/include/tao/json/jaxn/consume_file.hpp +34 -0
  1120. data/ext/third_party/json/include/tao/json/jaxn/consume_string.hpp +32 -0
  1121. data/ext/third_party/json/include/tao/json/jaxn/events/from_file.hpp +28 -0
  1122. data/ext/third_party/json/include/tao/json/jaxn/events/from_input.hpp +45 -0
  1123. data/ext/third_party/json/include/tao/json/jaxn/events/from_stream.hpp +33 -0
  1124. data/ext/third_party/json/include/tao/json/jaxn/events/from_string.hpp +39 -0
  1125. data/ext/third_party/json/include/tao/json/jaxn/events/to_pretty_stream.hpp +69 -0
  1126. data/ext/third_party/json/include/tao/json/jaxn/events/to_stream.hpp +67 -0
  1127. data/ext/third_party/json/include/tao/json/jaxn/events/to_string.hpp +33 -0
  1128. data/ext/third_party/json/include/tao/json/jaxn/from_file.hpp +33 -0
  1129. data/ext/third_party/json/include/tao/json/jaxn/from_input.hpp +33 -0
  1130. data/ext/third_party/json/include/tao/json/jaxn/from_stream.hpp +48 -0
  1131. data/ext/third_party/json/include/tao/json/jaxn/from_string.hpp +42 -0
  1132. data/ext/third_party/json/include/tao/json/jaxn/internal/action.hpp +355 -0
  1133. data/ext/third_party/json/include/tao/json/jaxn/internal/bunescape_action.hpp +114 -0
  1134. data/ext/third_party/json/include/tao/json/jaxn/internal/errors.hpp +108 -0
  1135. data/ext/third_party/json/include/tao/json/jaxn/internal/grammar.hpp +375 -0
  1136. data/ext/third_party/json/include/tao/json/jaxn/internal/integer.hpp +255 -0
  1137. data/ext/third_party/json/include/tao/json/jaxn/internal/unescape_action.hpp +28 -0
  1138. data/ext/third_party/json/include/tao/json/jaxn/is_identifier.hpp +27 -0
  1139. data/ext/third_party/json/include/tao/json/jaxn/parts_parser.hpp +261 -0
  1140. data/ext/third_party/json/include/tao/json/jaxn/to_stream.hpp +36 -0
  1141. data/ext/third_party/json/include/tao/json/jaxn/to_string.hpp +33 -0
  1142. data/ext/third_party/json/include/tao/json/message_extension.hpp +49 -0
  1143. data/ext/third_party/json/include/tao/json/msgpack.hpp +19 -0
  1144. data/ext/third_party/json/include/tao/json/msgpack/consume_file.hpp +34 -0
  1145. data/ext/third_party/json/include/tao/json/msgpack/consume_string.hpp +32 -0
  1146. data/ext/third_party/json/include/tao/json/msgpack/events/from_binary.hpp +43 -0
  1147. data/ext/third_party/json/include/tao/json/msgpack/events/from_file.hpp +27 -0
  1148. data/ext/third_party/json/include/tao/json/msgpack/events/from_input.hpp +43 -0
  1149. data/ext/third_party/json/include/tao/json/msgpack/events/from_string.hpp +37 -0
  1150. data/ext/third_party/json/include/tao/json/msgpack/events/to_stream.hpp +214 -0
  1151. data/ext/third_party/json/include/tao/json/msgpack/events/to_string.hpp +31 -0
  1152. data/ext/third_party/json/include/tao/json/msgpack/from_binary.hpp +32 -0
  1153. data/ext/third_party/json/include/tao/json/msgpack/from_file.hpp +33 -0
  1154. data/ext/third_party/json/include/tao/json/msgpack/from_input.hpp +33 -0
  1155. data/ext/third_party/json/include/tao/json/msgpack/from_string.hpp +32 -0
  1156. data/ext/third_party/json/include/tao/json/msgpack/internal/format.hpp +57 -0
  1157. data/ext/third_party/json/include/tao/json/msgpack/internal/grammar.hpp +250 -0
  1158. data/ext/third_party/json/include/tao/json/msgpack/parts_parser.hpp +311 -0
  1159. data/ext/third_party/json/include/tao/json/msgpack/to_stream.hpp +27 -0
  1160. data/ext/third_party/json/include/tao/json/msgpack/to_string.hpp +28 -0
  1161. data/ext/third_party/json/include/tao/json/operators.hpp +490 -0
  1162. data/ext/third_party/json/include/tao/json/parts_parser.hpp +302 -0
  1163. data/ext/third_party/json/include/tao/json/pointer.hpp +432 -0
  1164. data/ext/third_party/json/include/tao/json/produce.hpp +61 -0
  1165. data/ext/third_party/json/include/tao/json/self_contained.hpp +131 -0
  1166. data/ext/third_party/json/include/tao/json/span.hpp +496 -0
  1167. data/ext/third_party/json/include/tao/json/stream.hpp +38 -0
  1168. data/ext/third_party/json/include/tao/json/to_stream.hpp +42 -0
  1169. data/ext/third_party/json/include/tao/json/to_string.hpp +23 -0
  1170. data/ext/third_party/json/include/tao/json/traits.hpp +971 -0
  1171. data/ext/third_party/json/include/tao/json/type.hpp +112 -0
  1172. data/ext/third_party/json/include/tao/json/ubjson.hpp +19 -0
  1173. data/ext/third_party/json/include/tao/json/ubjson/consume_file.hpp +34 -0
  1174. data/ext/third_party/json/include/tao/json/ubjson/consume_string.hpp +32 -0
  1175. data/ext/third_party/json/include/tao/json/ubjson/events/from_binary.hpp +43 -0
  1176. data/ext/third_party/json/include/tao/json/ubjson/events/from_file.hpp +27 -0
  1177. data/ext/third_party/json/include/tao/json/ubjson/events/from_input.hpp +43 -0
  1178. data/ext/third_party/json/include/tao/json/ubjson/events/from_string.hpp +37 -0
  1179. data/ext/third_party/json/include/tao/json/ubjson/events/to_stream.hpp +174 -0
  1180. data/ext/third_party/json/include/tao/json/ubjson/events/to_string.hpp +31 -0
  1181. data/ext/third_party/json/include/tao/json/ubjson/from_binary.hpp +32 -0
  1182. data/ext/third_party/json/include/tao/json/ubjson/from_file.hpp +33 -0
  1183. data/ext/third_party/json/include/tao/json/ubjson/from_input.hpp +33 -0
  1184. data/ext/third_party/json/include/tao/json/ubjson/from_string.hpp +32 -0
  1185. data/ext/third_party/json/include/tao/json/ubjson/internal/grammar.hpp +415 -0
  1186. data/ext/third_party/json/include/tao/json/ubjson/internal/marker.hpp +46 -0
  1187. data/ext/third_party/json/include/tao/json/ubjson/parts_parser.hpp +393 -0
  1188. data/ext/third_party/json/include/tao/json/ubjson/to_stream.hpp +28 -0
  1189. data/ext/third_party/json/include/tao/json/ubjson/to_string.hpp +29 -0
  1190. data/ext/third_party/json/include/tao/json/utf8.hpp +57 -0
  1191. data/ext/third_party/json/include/tao/json/value.hpp +12 -0
  1192. data/ext/third_party/snappy/CMakeLists.txt +345 -0
  1193. data/ext/third_party/snappy/COPYING +54 -0
  1194. data/ext/third_party/snappy/cmake/SnappyConfig.cmake.in +33 -0
  1195. data/ext/third_party/snappy/cmake/config.h.in +59 -0
  1196. data/ext/third_party/snappy/snappy-c.cc +90 -0
  1197. data/ext/third_party/snappy/snappy-c.h +138 -0
  1198. data/ext/third_party/snappy/snappy-internal.h +315 -0
  1199. data/ext/third_party/snappy/snappy-sinksource.cc +121 -0
  1200. data/ext/third_party/snappy/snappy-sinksource.h +182 -0
  1201. data/ext/third_party/snappy/snappy-stubs-internal.cc +42 -0
  1202. data/ext/third_party/snappy/snappy-stubs-internal.h +493 -0
  1203. data/ext/third_party/snappy/snappy-stubs-public.h.in +63 -0
  1204. data/ext/third_party/snappy/snappy.cc +1774 -0
  1205. data/ext/third_party/snappy/snappy.h +209 -0
  1206. data/ext/third_party/spdlog/CMakeLists.txt +291 -0
  1207. data/ext/third_party/spdlog/LICENSE +26 -0
  1208. data/ext/third_party/spdlog/cmake/ide.cmake +18 -0
  1209. data/ext/third_party/spdlog/cmake/pch.h.in +258 -0
  1210. data/ext/third_party/spdlog/cmake/spdlog.pc.in +13 -0
  1211. data/ext/third_party/spdlog/cmake/spdlogCPack.cmake +46 -0
  1212. data/ext/third_party/spdlog/cmake/spdlogConfig.cmake.in +15 -0
  1213. data/ext/third_party/spdlog/cmake/utils.cmake +61 -0
  1214. data/ext/third_party/spdlog/cmake/version.rc.in +42 -0
  1215. data/ext/third_party/spdlog/include/spdlog/async.h +93 -0
  1216. data/ext/third_party/spdlog/include/spdlog/async_logger-inl.h +92 -0
  1217. data/ext/third_party/spdlog/include/spdlog/async_logger.h +68 -0
  1218. data/ext/third_party/spdlog/include/spdlog/cfg/argv.h +44 -0
  1219. data/ext/third_party/spdlog/include/spdlog/cfg/env.h +38 -0
  1220. data/ext/third_party/spdlog/include/spdlog/cfg/helpers-inl.h +119 -0
  1221. data/ext/third_party/spdlog/include/spdlog/cfg/helpers.h +29 -0
  1222. data/ext/third_party/spdlog/include/spdlog/common-inl.h +76 -0
  1223. data/ext/third_party/spdlog/include/spdlog/common.h +245 -0
  1224. data/ext/third_party/spdlog/include/spdlog/details/backtracer-inl.h +69 -0
  1225. data/ext/third_party/spdlog/include/spdlog/details/backtracer.h +45 -0
  1226. data/ext/third_party/spdlog/include/spdlog/details/circular_q.h +141 -0
  1227. data/ext/third_party/spdlog/include/spdlog/details/console_globals.h +32 -0
  1228. data/ext/third_party/spdlog/include/spdlog/details/file_helper-inl.h +132 -0
  1229. data/ext/third_party/spdlog/include/spdlog/details/file_helper.h +59 -0
  1230. data/ext/third_party/spdlog/include/spdlog/details/fmt_helper.h +116 -0
  1231. data/ext/third_party/spdlog/include/spdlog/details/log_msg-inl.h +37 -0
  1232. data/ext/third_party/spdlog/include/spdlog/details/log_msg.h +36 -0
  1233. data/ext/third_party/spdlog/include/spdlog/details/log_msg_buffer-inl.h +58 -0
  1234. data/ext/third_party/spdlog/include/spdlog/details/log_msg_buffer.h +33 -0
  1235. data/ext/third_party/spdlog/include/spdlog/details/mpmc_blocking_q.h +120 -0
  1236. data/ext/third_party/spdlog/include/spdlog/details/null_mutex.h +49 -0
  1237. data/ext/third_party/spdlog/include/spdlog/details/os-inl.h +554 -0
  1238. data/ext/third_party/spdlog/include/spdlog/details/os.h +111 -0
  1239. data/ext/third_party/spdlog/include/spdlog/details/periodic_worker-inl.h +49 -0
  1240. data/ext/third_party/spdlog/include/spdlog/details/periodic_worker.h +40 -0
  1241. data/ext/third_party/spdlog/include/spdlog/details/registry-inl.h +313 -0
  1242. data/ext/third_party/spdlog/include/spdlog/details/registry.h +115 -0
  1243. data/ext/third_party/spdlog/include/spdlog/details/synchronous_factory.h +24 -0
  1244. data/ext/third_party/spdlog/include/spdlog/details/tcp_client-windows.h +175 -0
  1245. data/ext/third_party/spdlog/include/spdlog/details/tcp_client.h +146 -0
  1246. data/ext/third_party/spdlog/include/spdlog/details/thread_pool-inl.h +124 -0
  1247. data/ext/third_party/spdlog/include/spdlog/details/thread_pool.h +120 -0
  1248. data/ext/third_party/spdlog/include/spdlog/details/windows_include.h +11 -0
  1249. data/ext/third_party/spdlog/include/spdlog/fmt/bin_to_hex.h +216 -0
  1250. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/LICENSE.rst +27 -0
  1251. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/chrono.h +1123 -0
  1252. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/color.h +566 -0
  1253. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/compile.h +665 -0
  1254. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/core.h +1882 -0
  1255. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format-inl.h +1453 -0
  1256. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/format.h +3729 -0
  1257. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/locale.h +78 -0
  1258. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/os.h +450 -0
  1259. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ostream.h +167 -0
  1260. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/posix.h +2 -0
  1261. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/printf.h +751 -0
  1262. data/ext/third_party/spdlog/include/spdlog/fmt/bundled/ranges.h +386 -0
  1263. data/ext/third_party/spdlog/include/spdlog/fmt/chrono.h +20 -0
  1264. data/ext/third_party/spdlog/include/spdlog/fmt/fmt.h +27 -0
  1265. data/ext/third_party/spdlog/include/spdlog/fmt/ostr.h +20 -0
  1266. data/ext/third_party/spdlog/include/spdlog/formatter.h +18 -0
  1267. data/ext/third_party/spdlog/include/spdlog/fwd.h +14 -0
  1268. data/ext/third_party/spdlog/include/spdlog/logger-inl.h +257 -0
  1269. data/ext/third_party/spdlog/include/spdlog/logger.h +366 -0
  1270. data/ext/third_party/spdlog/include/spdlog/pattern_formatter-inl.h +1373 -0
  1271. data/ext/third_party/spdlog/include/spdlog/pattern_formatter.h +126 -0
  1272. data/ext/third_party/spdlog/include/spdlog/sinks/android_sink.h +119 -0
  1273. data/ext/third_party/spdlog/include/spdlog/sinks/ansicolor_sink-inl.h +143 -0
  1274. data/ext/third_party/spdlog/include/spdlog/sinks/ansicolor_sink.h +118 -0
  1275. data/ext/third_party/spdlog/include/spdlog/sinks/base_sink-inl.h +63 -0
  1276. data/ext/third_party/spdlog/include/spdlog/sinks/base_sink.h +52 -0
  1277. data/ext/third_party/spdlog/include/spdlog/sinks/basic_file_sink-inl.h +43 -0
  1278. data/ext/third_party/spdlog/include/spdlog/sinks/basic_file_sink.h +58 -0
  1279. data/ext/third_party/spdlog/include/spdlog/sinks/daily_file_sink.h +204 -0
  1280. data/ext/third_party/spdlog/include/spdlog/sinks/dist_sink.h +97 -0
  1281. data/ext/third_party/spdlog/include/spdlog/sinks/dup_filter_sink.h +90 -0
  1282. data/ext/third_party/spdlog/include/spdlog/sinks/msvc_sink.h +49 -0
  1283. data/ext/third_party/spdlog/include/spdlog/sinks/null_sink.h +44 -0
  1284. data/ext/third_party/spdlog/include/spdlog/sinks/ostream_sink.h +50 -0
  1285. data/ext/third_party/spdlog/include/spdlog/sinks/ringbuffer_sink.h +74 -0
  1286. data/ext/third_party/spdlog/include/spdlog/sinks/rotating_file_sink-inl.h +131 -0
  1287. data/ext/third_party/spdlog/include/spdlog/sinks/rotating_file_sink.h +78 -0
  1288. data/ext/third_party/spdlog/include/spdlog/sinks/sink-inl.h +25 -0
  1289. data/ext/third_party/spdlog/include/spdlog/sinks/sink.h +35 -0
  1290. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  1291. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_color_sinks.h +45 -0
  1292. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks-inl.h +123 -0
  1293. data/ext/third_party/spdlog/include/spdlog/sinks/stdout_sinks.h +87 -0
  1294. data/ext/third_party/spdlog/include/spdlog/sinks/syslog_sink.h +109 -0
  1295. data/ext/third_party/spdlog/include/spdlog/sinks/systemd_sink.h +103 -0
  1296. data/ext/third_party/spdlog/include/spdlog/sinks/tcp_sink.h +81 -0
  1297. data/ext/third_party/spdlog/include/spdlog/sinks/win_eventlog_sink.h +266 -0
  1298. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink-inl.h +170 -0
  1299. data/ext/third_party/spdlog/include/spdlog/sinks/wincolor_sink.h +94 -0
  1300. data/ext/third_party/spdlog/include/spdlog/spdlog-inl.h +125 -0
  1301. data/ext/third_party/spdlog/include/spdlog/spdlog.h +295 -0
  1302. data/ext/third_party/spdlog/include/spdlog/stopwatch.h +61 -0
  1303. data/ext/third_party/spdlog/include/spdlog/tweakme.h +116 -0
  1304. data/ext/third_party/spdlog/include/spdlog/version.h +10 -0
  1305. data/ext/third_party/spdlog/src/async.cpp +13 -0
  1306. data/ext/third_party/spdlog/src/cfg.cpp +8 -0
  1307. data/ext/third_party/spdlog/src/color_sinks.cpp +51 -0
  1308. data/ext/third_party/spdlog/src/file_sinks.cpp +20 -0
  1309. data/ext/third_party/spdlog/src/fmt.cpp +63 -0
  1310. data/ext/third_party/spdlog/src/spdlog.cpp +26 -0
  1311. data/ext/third_party/spdlog/src/stdout_sinks.cpp +29 -0
  1312. data/lib/active_support/cache/couchbase_store.rb +362 -0
  1313. data/lib/couchbase.rb +20 -0
  1314. data/lib/couchbase/analytics_options.rb +107 -0
  1315. data/lib/couchbase/authenticator.rb +65 -0
  1316. data/lib/couchbase/binary_collection.rb +128 -0
  1317. data/lib/couchbase/binary_collection_options.rb +24 -0
  1318. data/lib/couchbase/bucket.rb +144 -0
  1319. data/lib/couchbase/cluster.rb +430 -0
  1320. data/lib/couchbase/collection.rb +562 -0
  1321. data/lib/couchbase/collection_options.rb +324 -0
  1322. data/lib/couchbase/configuration.rb +57 -0
  1323. data/lib/couchbase/datastructures.rb +24 -0
  1324. data/lib/couchbase/datastructures/couchbase_list.rb +160 -0
  1325. data/lib/couchbase/datastructures/couchbase_map.rb +194 -0
  1326. data/lib/couchbase/datastructures/couchbase_queue.rb +134 -0
  1327. data/lib/couchbase/datastructures/couchbase_set.rb +128 -0
  1328. data/lib/couchbase/diagnostics.rb +181 -0
  1329. data/lib/couchbase/errors.rb +345 -0
  1330. data/lib/couchbase/json_transcoder.rb +32 -0
  1331. data/lib/couchbase/libcouchbase.bundle +0 -0
  1332. data/lib/couchbase/logger.rb +42 -0
  1333. data/lib/couchbase/management.rb +27 -0
  1334. data/lib/couchbase/management/analytics_index_manager.rb +433 -0
  1335. data/lib/couchbase/management/bucket_manager.rb +292 -0
  1336. data/lib/couchbase/management/collection_manager.rb +202 -0
  1337. data/lib/couchbase/management/query_index_manager.rb +342 -0
  1338. data/lib/couchbase/management/search_index_manager.rb +408 -0
  1339. data/lib/couchbase/management/user_manager.rb +449 -0
  1340. data/lib/couchbase/management/view_index_manager.rb +237 -0
  1341. data/lib/couchbase/mutation_state.rb +63 -0
  1342. data/lib/couchbase/options.rb +2104 -0
  1343. data/lib/couchbase/query_options.rb +120 -0
  1344. data/lib/couchbase/railtie.rb +45 -0
  1345. data/lib/couchbase/scope.rb +127 -0
  1346. data/lib/couchbase/search_options.rb +1487 -0
  1347. data/lib/couchbase/subdoc.rb +290 -0
  1348. data/lib/couchbase/utils.rb +21 -0
  1349. data/lib/couchbase/utils/time.rb +52 -0
  1350. data/lib/couchbase/version.rb +37 -0
  1351. data/lib/couchbase/view_options.rb +65 -0
  1352. data/lib/rails/generators/couchbase/config/config_generator.rb +27 -0
  1353. metadata +1403 -0
@@ -0,0 +1,2496 @@
1
+ //
2
+ // buffer.hpp
3
+ // ~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef ASIO_BUFFER_HPP
12
+ #define ASIO_BUFFER_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include "asio/detail/config.hpp"
19
+ #include <cstddef>
20
+ #include <cstring>
21
+ #include <limits>
22
+ #include <stdexcept>
23
+ #include <string>
24
+ #include <vector>
25
+ #include "asio/detail/array_fwd.hpp"
26
+ #include "asio/detail/memory.hpp"
27
+ #include "asio/detail/string_view.hpp"
28
+ #include "asio/detail/throw_exception.hpp"
29
+ #include "asio/detail/type_traits.hpp"
30
+
31
+ #if defined(ASIO_MSVC) && (ASIO_MSVC >= 1700)
32
+ # if defined(_HAS_ITERATOR_DEBUGGING) && (_HAS_ITERATOR_DEBUGGING != 0)
33
+ # if !defined(ASIO_DISABLE_BUFFER_DEBUGGING)
34
+ # define ASIO_ENABLE_BUFFER_DEBUGGING
35
+ # endif // !defined(ASIO_DISABLE_BUFFER_DEBUGGING)
36
+ # endif // defined(_HAS_ITERATOR_DEBUGGING)
37
+ #endif // defined(ASIO_MSVC) && (ASIO_MSVC >= 1700)
38
+
39
+ #if defined(__GNUC__)
40
+ # if defined(_GLIBCXX_DEBUG)
41
+ # if !defined(ASIO_DISABLE_BUFFER_DEBUGGING)
42
+ # define ASIO_ENABLE_BUFFER_DEBUGGING
43
+ # endif // !defined(ASIO_DISABLE_BUFFER_DEBUGGING)
44
+ # endif // defined(_GLIBCXX_DEBUG)
45
+ #endif // defined(__GNUC__)
46
+
47
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
48
+ # include "asio/detail/functional.hpp"
49
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
50
+
51
+ #if defined(ASIO_HAS_BOOST_WORKAROUND)
52
+ # include <boost/detail/workaround.hpp>
53
+ # if !defined(__clang__)
54
+ # if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
55
+ # define ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND
56
+ # endif // BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
57
+ # elif BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
58
+ # define ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND
59
+ # endif // BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x590))
60
+ #endif // defined(ASIO_HAS_BOOST_WORKAROUND)
61
+
62
+ #if defined(ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
63
+ # include "asio/detail/type_traits.hpp"
64
+ #endif // defined(ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
65
+
66
+ #include "asio/detail/push_options.hpp"
67
+
68
+ namespace asio {
69
+
70
+ class mutable_buffer;
71
+ class const_buffer;
72
+
73
+ /// Holds a buffer that can be modified.
74
+ /**
75
+ * The mutable_buffer class provides a safe representation of a buffer that can
76
+ * be modified. It does not own the underlying data, and so is cheap to copy or
77
+ * assign.
78
+ *
79
+ * @par Accessing Buffer Contents
80
+ *
81
+ * The contents of a buffer may be accessed using the @c data() and @c size()
82
+ * member functions:
83
+ *
84
+ * @code asio::mutable_buffer b1 = ...;
85
+ * std::size_t s1 = b1.size();
86
+ * unsigned char* p1 = static_cast<unsigned char*>(b1.data());
87
+ * @endcode
88
+ *
89
+ * The @c data() member function permits violations of type safety, so uses of
90
+ * it in application code should be carefully considered.
91
+ */
92
+ class mutable_buffer
93
+ {
94
+ public:
95
+ /// Construct an empty buffer.
96
+ mutable_buffer() ASIO_NOEXCEPT
97
+ : data_(0),
98
+ size_(0)
99
+ {
100
+ }
101
+
102
+ /// Construct a buffer to represent a given memory range.
103
+ mutable_buffer(void* data, std::size_t size) ASIO_NOEXCEPT
104
+ : data_(data),
105
+ size_(size)
106
+ {
107
+ }
108
+
109
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
110
+ mutable_buffer(void* data, std::size_t size,
111
+ asio::detail::function<void()> debug_check)
112
+ : data_(data),
113
+ size_(size),
114
+ debug_check_(debug_check)
115
+ {
116
+ }
117
+
118
+ const asio::detail::function<void()>& get_debug_check() const
119
+ {
120
+ return debug_check_;
121
+ }
122
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
123
+
124
+ /// Get a pointer to the beginning of the memory range.
125
+ void* data() const ASIO_NOEXCEPT
126
+ {
127
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
128
+ if (size_ && debug_check_)
129
+ debug_check_();
130
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
131
+ return data_;
132
+ }
133
+
134
+ /// Get the size of the memory range.
135
+ std::size_t size() const ASIO_NOEXCEPT
136
+ {
137
+ return size_;
138
+ }
139
+
140
+ /// Move the start of the buffer by the specified number of bytes.
141
+ mutable_buffer& operator+=(std::size_t n) ASIO_NOEXCEPT
142
+ {
143
+ std::size_t offset = n < size_ ? n : size_;
144
+ data_ = static_cast<char*>(data_) + offset;
145
+ size_ -= offset;
146
+ return *this;
147
+ }
148
+
149
+ private:
150
+ void* data_;
151
+ std::size_t size_;
152
+
153
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
154
+ asio::detail::function<void()> debug_check_;
155
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
156
+ };
157
+
158
+ #if !defined(ASIO_NO_DEPRECATED)
159
+
160
+ /// (Deprecated: Use mutable_buffer.) Adapts a single modifiable buffer so that
161
+ /// it meets the requirements of the MutableBufferSequence concept.
162
+ class mutable_buffers_1
163
+ : public mutable_buffer
164
+ {
165
+ public:
166
+ /// The type for each element in the list of buffers.
167
+ typedef mutable_buffer value_type;
168
+
169
+ /// A random-access iterator type that may be used to read elements.
170
+ typedef const mutable_buffer* const_iterator;
171
+
172
+ /// Construct to represent a given memory range.
173
+ mutable_buffers_1(void* data, std::size_t size) ASIO_NOEXCEPT
174
+ : mutable_buffer(data, size)
175
+ {
176
+ }
177
+
178
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
179
+ mutable_buffers_1(void* data, std::size_t size,
180
+ asio::detail::function<void()> debug_check)
181
+ : mutable_buffer(data, size, debug_check)
182
+ {
183
+ }
184
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
185
+
186
+ /// Construct to represent a single modifiable buffer.
187
+ explicit mutable_buffers_1(const mutable_buffer& b) ASIO_NOEXCEPT
188
+ : mutable_buffer(b)
189
+ {
190
+ }
191
+
192
+ /// Get a random-access iterator to the first element.
193
+ const_iterator begin() const ASIO_NOEXCEPT
194
+ {
195
+ return this;
196
+ }
197
+
198
+ /// Get a random-access iterator for one past the last element.
199
+ const_iterator end() const ASIO_NOEXCEPT
200
+ {
201
+ return begin() + 1;
202
+ }
203
+ };
204
+
205
+ #endif // !defined(ASIO_NO_DEPRECATED)
206
+
207
+ /// Holds a buffer that cannot be modified.
208
+ /**
209
+ * The const_buffer class provides a safe representation of a buffer that cannot
210
+ * be modified. It does not own the underlying data, and so is cheap to copy or
211
+ * assign.
212
+ *
213
+ * @par Accessing Buffer Contents
214
+ *
215
+ * The contents of a buffer may be accessed using the @c data() and @c size()
216
+ * member functions:
217
+ *
218
+ * @code asio::const_buffer b1 = ...;
219
+ * std::size_t s1 = b1.size();
220
+ * const unsigned char* p1 = static_cast<const unsigned char*>(b1.data());
221
+ * @endcode
222
+ *
223
+ * The @c data() member function permits violations of type safety, so uses of
224
+ * it in application code should be carefully considered.
225
+ */
226
+ class const_buffer
227
+ {
228
+ public:
229
+ /// Construct an empty buffer.
230
+ const_buffer() ASIO_NOEXCEPT
231
+ : data_(0),
232
+ size_(0)
233
+ {
234
+ }
235
+
236
+ /// Construct a buffer to represent a given memory range.
237
+ const_buffer(const void* data, std::size_t size) ASIO_NOEXCEPT
238
+ : data_(data),
239
+ size_(size)
240
+ {
241
+ }
242
+
243
+ /// Construct a non-modifiable buffer from a modifiable one.
244
+ const_buffer(const mutable_buffer& b) ASIO_NOEXCEPT
245
+ : data_(b.data()),
246
+ size_(b.size())
247
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
248
+ , debug_check_(b.get_debug_check())
249
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
250
+ {
251
+ }
252
+
253
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
254
+ const_buffer(const void* data, std::size_t size,
255
+ asio::detail::function<void()> debug_check)
256
+ : data_(data),
257
+ size_(size),
258
+ debug_check_(debug_check)
259
+ {
260
+ }
261
+
262
+ const asio::detail::function<void()>& get_debug_check() const
263
+ {
264
+ return debug_check_;
265
+ }
266
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
267
+
268
+ /// Get a pointer to the beginning of the memory range.
269
+ const void* data() const ASIO_NOEXCEPT
270
+ {
271
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
272
+ if (size_ && debug_check_)
273
+ debug_check_();
274
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
275
+ return data_;
276
+ }
277
+
278
+ /// Get the size of the memory range.
279
+ std::size_t size() const ASIO_NOEXCEPT
280
+ {
281
+ return size_;
282
+ }
283
+
284
+ /// Move the start of the buffer by the specified number of bytes.
285
+ const_buffer& operator+=(std::size_t n) ASIO_NOEXCEPT
286
+ {
287
+ std::size_t offset = n < size_ ? n : size_;
288
+ data_ = static_cast<const char*>(data_) + offset;
289
+ size_ -= offset;
290
+ return *this;
291
+ }
292
+
293
+ private:
294
+ const void* data_;
295
+ std::size_t size_;
296
+
297
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
298
+ asio::detail::function<void()> debug_check_;
299
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
300
+ };
301
+
302
+ #if !defined(ASIO_NO_DEPRECATED)
303
+
304
+ /// (Deprecated: Use const_buffer.) Adapts a single non-modifiable buffer so
305
+ /// that it meets the requirements of the ConstBufferSequence concept.
306
+ class const_buffers_1
307
+ : public const_buffer
308
+ {
309
+ public:
310
+ /// The type for each element in the list of buffers.
311
+ typedef const_buffer value_type;
312
+
313
+ /// A random-access iterator type that may be used to read elements.
314
+ typedef const const_buffer* const_iterator;
315
+
316
+ /// Construct to represent a given memory range.
317
+ const_buffers_1(const void* data, std::size_t size) ASIO_NOEXCEPT
318
+ : const_buffer(data, size)
319
+ {
320
+ }
321
+
322
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
323
+ const_buffers_1(const void* data, std::size_t size,
324
+ asio::detail::function<void()> debug_check)
325
+ : const_buffer(data, size, debug_check)
326
+ {
327
+ }
328
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
329
+
330
+ /// Construct to represent a single non-modifiable buffer.
331
+ explicit const_buffers_1(const const_buffer& b) ASIO_NOEXCEPT
332
+ : const_buffer(b)
333
+ {
334
+ }
335
+
336
+ /// Get a random-access iterator to the first element.
337
+ const_iterator begin() const ASIO_NOEXCEPT
338
+ {
339
+ return this;
340
+ }
341
+
342
+ /// Get a random-access iterator for one past the last element.
343
+ const_iterator end() const ASIO_NOEXCEPT
344
+ {
345
+ return begin() + 1;
346
+ }
347
+ };
348
+
349
+ #endif // !defined(ASIO_NO_DEPRECATED)
350
+
351
+ /// (Deprecated: Use the socket/descriptor wait() and async_wait() member
352
+ /// functions.) An implementation of both the ConstBufferSequence and
353
+ /// MutableBufferSequence concepts to represent a null buffer sequence.
354
+ class null_buffers
355
+ {
356
+ public:
357
+ /// The type for each element in the list of buffers.
358
+ typedef mutable_buffer value_type;
359
+
360
+ /// A random-access iterator type that may be used to read elements.
361
+ typedef const mutable_buffer* const_iterator;
362
+
363
+ /// Get a random-access iterator to the first element.
364
+ const_iterator begin() const ASIO_NOEXCEPT
365
+ {
366
+ return &buf_;
367
+ }
368
+
369
+ /// Get a random-access iterator for one past the last element.
370
+ const_iterator end() const ASIO_NOEXCEPT
371
+ {
372
+ return &buf_;
373
+ }
374
+
375
+ private:
376
+ mutable_buffer buf_;
377
+ };
378
+
379
+ /** @defgroup buffer_sequence_begin asio::buffer_sequence_begin
380
+ *
381
+ * @brief The asio::buffer_sequence_begin function returns an iterator
382
+ * pointing to the first element in a buffer sequence.
383
+ */
384
+ /*@{*/
385
+
386
+ /// Get an iterator to the first element in a buffer sequence.
387
+ template <typename MutableBuffer>
388
+ inline const mutable_buffer* buffer_sequence_begin(const MutableBuffer& b,
389
+ typename enable_if<
390
+ is_convertible<const MutableBuffer*, const mutable_buffer*>::value
391
+ >::type* = 0) ASIO_NOEXCEPT
392
+ {
393
+ return static_cast<const mutable_buffer*>(detail::addressof(b));
394
+ }
395
+
396
+ /// Get an iterator to the first element in a buffer sequence.
397
+ template <typename ConstBuffer>
398
+ inline const const_buffer* buffer_sequence_begin(const ConstBuffer& b,
399
+ typename enable_if<
400
+ is_convertible<const ConstBuffer*, const const_buffer*>::value
401
+ >::type* = 0) ASIO_NOEXCEPT
402
+ {
403
+ return static_cast<const const_buffer*>(detail::addressof(b));
404
+ }
405
+
406
+ #if defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
407
+
408
+ /// Get an iterator to the first element in a buffer sequence.
409
+ template <typename C>
410
+ inline auto buffer_sequence_begin(C& c,
411
+ typename enable_if<
412
+ !is_convertible<const C*, const mutable_buffer*>::value
413
+ && !is_convertible<const C*, const const_buffer*>::value
414
+ >::type* = 0) ASIO_NOEXCEPT -> decltype(c.begin())
415
+ {
416
+ return c.begin();
417
+ }
418
+
419
+ /// Get an iterator to the first element in a buffer sequence.
420
+ template <typename C>
421
+ inline auto buffer_sequence_begin(const C& c,
422
+ typename enable_if<
423
+ !is_convertible<const C*, const mutable_buffer*>::value
424
+ && !is_convertible<const C*, const const_buffer*>::value
425
+ >::type* = 0) ASIO_NOEXCEPT -> decltype(c.begin())
426
+ {
427
+ return c.begin();
428
+ }
429
+
430
+ #else // defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
431
+
432
+ template <typename C>
433
+ inline typename C::iterator buffer_sequence_begin(C& c,
434
+ typename enable_if<
435
+ !is_convertible<const C*, const mutable_buffer*>::value
436
+ && !is_convertible<const C*, const const_buffer*>::value
437
+ >::type* = 0) ASIO_NOEXCEPT
438
+ {
439
+ return c.begin();
440
+ }
441
+
442
+ template <typename C>
443
+ inline typename C::const_iterator buffer_sequence_begin(const C& c,
444
+ typename enable_if<
445
+ !is_convertible<const C*, const mutable_buffer*>::value
446
+ && !is_convertible<const C*, const const_buffer*>::value
447
+ >::type* = 0) ASIO_NOEXCEPT
448
+ {
449
+ return c.begin();
450
+ }
451
+
452
+ #endif // defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
453
+
454
+ /*@}*/
455
+
456
+ /** @defgroup buffer_sequence_end asio::buffer_sequence_end
457
+ *
458
+ * @brief The asio::buffer_sequence_end function returns an iterator
459
+ * pointing to one past the end element in a buffer sequence.
460
+ */
461
+ /*@{*/
462
+
463
+ /// Get an iterator to one past the end element in a buffer sequence.
464
+ template <typename MutableBuffer>
465
+ inline const mutable_buffer* buffer_sequence_end(const MutableBuffer& b,
466
+ typename enable_if<
467
+ is_convertible<const MutableBuffer*, const mutable_buffer*>::value
468
+ >::type* = 0) ASIO_NOEXCEPT
469
+ {
470
+ return static_cast<const mutable_buffer*>(detail::addressof(b)) + 1;
471
+ }
472
+
473
+ /// Get an iterator to one past the end element in a buffer sequence.
474
+ template <typename ConstBuffer>
475
+ inline const const_buffer* buffer_sequence_end(const ConstBuffer& b,
476
+ typename enable_if<
477
+ is_convertible<const ConstBuffer*, const const_buffer*>::value
478
+ >::type* = 0) ASIO_NOEXCEPT
479
+ {
480
+ return static_cast<const const_buffer*>(detail::addressof(b)) + 1;
481
+ }
482
+
483
+ #if defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
484
+
485
+ /// Get an iterator to one past the end element in a buffer sequence.
486
+ template <typename C>
487
+ inline auto buffer_sequence_end(C& c,
488
+ typename enable_if<
489
+ !is_convertible<const C*, const mutable_buffer*>::value
490
+ && !is_convertible<const C*, const const_buffer*>::value
491
+ >::type* = 0) ASIO_NOEXCEPT -> decltype(c.end())
492
+ {
493
+ return c.end();
494
+ }
495
+
496
+ /// Get an iterator to one past the end element in a buffer sequence.
497
+ template <typename C>
498
+ inline auto buffer_sequence_end(const C& c,
499
+ typename enable_if<
500
+ !is_convertible<const C*, const mutable_buffer*>::value
501
+ && !is_convertible<const C*, const const_buffer*>::value
502
+ >::type* = 0) ASIO_NOEXCEPT -> decltype(c.end())
503
+ {
504
+ return c.end();
505
+ }
506
+
507
+ #else // defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
508
+
509
+ template <typename C>
510
+ inline typename C::iterator buffer_sequence_end(C& c,
511
+ typename enable_if<
512
+ !is_convertible<const C*, const mutable_buffer*>::value
513
+ && !is_convertible<const C*, const const_buffer*>::value
514
+ >::type* = 0) ASIO_NOEXCEPT
515
+ {
516
+ return c.end();
517
+ }
518
+
519
+ template <typename C>
520
+ inline typename C::const_iterator buffer_sequence_end(const C& c,
521
+ typename enable_if<
522
+ !is_convertible<const C*, const mutable_buffer*>::value
523
+ && !is_convertible<const C*, const const_buffer*>::value
524
+ >::type* = 0) ASIO_NOEXCEPT
525
+ {
526
+ return c.end();
527
+ }
528
+
529
+ #endif // defined(ASIO_HAS_DECLTYPE) || defined(GENERATING_DOCUMENTATION)
530
+
531
+ /*@}*/
532
+
533
+ namespace detail {
534
+
535
+ // Tag types used to select appropriately optimised overloads.
536
+ struct one_buffer {};
537
+ struct multiple_buffers {};
538
+
539
+ // Helper trait to detect single buffers.
540
+ template <typename BufferSequence>
541
+ struct buffer_sequence_cardinality :
542
+ conditional<
543
+ is_same<BufferSequence, mutable_buffer>::value
544
+ #if !defined(ASIO_NO_DEPRECATED)
545
+ || is_same<BufferSequence, mutable_buffers_1>::value
546
+ || is_same<BufferSequence, const_buffers_1>::value
547
+ #endif // !defined(ASIO_NO_DEPRECATED)
548
+ || is_same<BufferSequence, const_buffer>::value,
549
+ one_buffer, multiple_buffers>::type {};
550
+
551
+ template <typename Iterator>
552
+ inline std::size_t buffer_size(one_buffer,
553
+ Iterator begin, Iterator) ASIO_NOEXCEPT
554
+ {
555
+ return const_buffer(*begin).size();
556
+ }
557
+
558
+ template <typename Iterator>
559
+ inline std::size_t buffer_size(multiple_buffers,
560
+ Iterator begin, Iterator end) ASIO_NOEXCEPT
561
+ {
562
+ std::size_t total_buffer_size = 0;
563
+
564
+ Iterator iter = begin;
565
+ for (; iter != end; ++iter)
566
+ {
567
+ const_buffer b(*iter);
568
+ total_buffer_size += b.size();
569
+ }
570
+
571
+ return total_buffer_size;
572
+ }
573
+
574
+ } // namespace detail
575
+
576
+ /// Get the total number of bytes in a buffer sequence.
577
+ /**
578
+ * The @c buffer_size function determines the total size of all buffers in the
579
+ * buffer sequence, as if computed as follows:
580
+ *
581
+ * @code size_t total_size = 0;
582
+ * auto i = asio::buffer_sequence_begin(buffers);
583
+ * auto end = asio::buffer_sequence_end(buffers);
584
+ * for (; i != end; ++i)
585
+ * {
586
+ * const_buffer b(*i);
587
+ * total_size += b.size();
588
+ * }
589
+ * return total_size; @endcode
590
+ *
591
+ * The @c BufferSequence template parameter may meet either of the @c
592
+ * ConstBufferSequence or @c MutableBufferSequence type requirements.
593
+ */
594
+ template <typename BufferSequence>
595
+ inline std::size_t buffer_size(const BufferSequence& b) ASIO_NOEXCEPT
596
+ {
597
+ return detail::buffer_size(
598
+ detail::buffer_sequence_cardinality<BufferSequence>(),
599
+ asio::buffer_sequence_begin(b),
600
+ asio::buffer_sequence_end(b));
601
+ }
602
+
603
+ #if !defined(ASIO_NO_DEPRECATED)
604
+
605
+ /** @defgroup buffer_cast asio::buffer_cast
606
+ *
607
+ * @brief (Deprecated: Use the @c data() member function.) The
608
+ * asio::buffer_cast function is used to obtain a pointer to the
609
+ * underlying memory region associated with a buffer.
610
+ *
611
+ * @par Examples:
612
+ *
613
+ * To access the memory of a non-modifiable buffer, use:
614
+ * @code asio::const_buffer b1 = ...;
615
+ * const unsigned char* p1 = asio::buffer_cast<const unsigned char*>(b1);
616
+ * @endcode
617
+ *
618
+ * To access the memory of a modifiable buffer, use:
619
+ * @code asio::mutable_buffer b2 = ...;
620
+ * unsigned char* p2 = asio::buffer_cast<unsigned char*>(b2);
621
+ * @endcode
622
+ *
623
+ * The asio::buffer_cast function permits violations of type safety, so
624
+ * uses of it in application code should be carefully considered.
625
+ */
626
+ /*@{*/
627
+
628
+ /// Cast a non-modifiable buffer to a specified pointer to POD type.
629
+ template <typename PointerToPodType>
630
+ inline PointerToPodType buffer_cast(const mutable_buffer& b) ASIO_NOEXCEPT
631
+ {
632
+ return static_cast<PointerToPodType>(b.data());
633
+ }
634
+
635
+ /// Cast a non-modifiable buffer to a specified pointer to POD type.
636
+ template <typename PointerToPodType>
637
+ inline PointerToPodType buffer_cast(const const_buffer& b) ASIO_NOEXCEPT
638
+ {
639
+ return static_cast<PointerToPodType>(b.data());
640
+ }
641
+
642
+ /*@}*/
643
+
644
+ #endif // !defined(ASIO_NO_DEPRECATED)
645
+
646
+ /// Create a new modifiable buffer that is offset from the start of another.
647
+ /**
648
+ * @relates mutable_buffer
649
+ */
650
+ inline mutable_buffer operator+(const mutable_buffer& b,
651
+ std::size_t n) ASIO_NOEXCEPT
652
+ {
653
+ std::size_t offset = n < b.size() ? n : b.size();
654
+ char* new_data = static_cast<char*>(b.data()) + offset;
655
+ std::size_t new_size = b.size() - offset;
656
+ return mutable_buffer(new_data, new_size
657
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
658
+ , b.get_debug_check()
659
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
660
+ );
661
+ }
662
+
663
+ /// Create a new modifiable buffer that is offset from the start of another.
664
+ /**
665
+ * @relates mutable_buffer
666
+ */
667
+ inline mutable_buffer operator+(std::size_t n,
668
+ const mutable_buffer& b) ASIO_NOEXCEPT
669
+ {
670
+ return b + n;
671
+ }
672
+
673
+ /// Create a new non-modifiable buffer that is offset from the start of another.
674
+ /**
675
+ * @relates const_buffer
676
+ */
677
+ inline const_buffer operator+(const const_buffer& b,
678
+ std::size_t n) ASIO_NOEXCEPT
679
+ {
680
+ std::size_t offset = n < b.size() ? n : b.size();
681
+ const char* new_data = static_cast<const char*>(b.data()) + offset;
682
+ std::size_t new_size = b.size() - offset;
683
+ return const_buffer(new_data, new_size
684
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
685
+ , b.get_debug_check()
686
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
687
+ );
688
+ }
689
+
690
+ /// Create a new non-modifiable buffer that is offset from the start of another.
691
+ /**
692
+ * @relates const_buffer
693
+ */
694
+ inline const_buffer operator+(std::size_t n,
695
+ const const_buffer& b) ASIO_NOEXCEPT
696
+ {
697
+ return b + n;
698
+ }
699
+
700
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
701
+ namespace detail {
702
+
703
+ template <typename Iterator>
704
+ class buffer_debug_check
705
+ {
706
+ public:
707
+ buffer_debug_check(Iterator iter)
708
+ : iter_(iter)
709
+ {
710
+ }
711
+
712
+ ~buffer_debug_check()
713
+ {
714
+ #if defined(ASIO_MSVC) && (ASIO_MSVC == 1400)
715
+ // MSVC 8's string iterator checking may crash in a std::string::iterator
716
+ // object's destructor when the iterator points to an already-destroyed
717
+ // std::string object, unless the iterator is cleared first.
718
+ iter_ = Iterator();
719
+ #endif // defined(ASIO_MSVC) && (ASIO_MSVC == 1400)
720
+ }
721
+
722
+ void operator()()
723
+ {
724
+ (void)*iter_;
725
+ }
726
+
727
+ private:
728
+ Iterator iter_;
729
+ };
730
+
731
+ } // namespace detail
732
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
733
+
734
+ /** @defgroup buffer asio::buffer
735
+ *
736
+ * @brief The asio::buffer function is used to create a buffer object to
737
+ * represent raw memory, an array of POD elements, a vector of POD elements,
738
+ * or a std::string.
739
+ *
740
+ * A buffer object represents a contiguous region of memory as a 2-tuple
741
+ * consisting of a pointer and size in bytes. A tuple of the form <tt>{void*,
742
+ * size_t}</tt> specifies a mutable (modifiable) region of memory. Similarly, a
743
+ * tuple of the form <tt>{const void*, size_t}</tt> specifies a const
744
+ * (non-modifiable) region of memory. These two forms correspond to the classes
745
+ * mutable_buffer and const_buffer, respectively. To mirror C++'s conversion
746
+ * rules, a mutable_buffer is implicitly convertible to a const_buffer, and the
747
+ * opposite conversion is not permitted.
748
+ *
749
+ * The simplest use case involves reading or writing a single buffer of a
750
+ * specified size:
751
+ *
752
+ * @code sock.send(asio::buffer(data, size)); @endcode
753
+ *
754
+ * In the above example, the return value of asio::buffer meets the
755
+ * requirements of the ConstBufferSequence concept so that it may be directly
756
+ * passed to the socket's write function. A buffer created for modifiable
757
+ * memory also meets the requirements of the MutableBufferSequence concept.
758
+ *
759
+ * An individual buffer may be created from a builtin array, std::vector,
760
+ * std::array or boost::array of POD elements. This helps prevent buffer
761
+ * overruns by automatically determining the size of the buffer:
762
+ *
763
+ * @code char d1[128];
764
+ * size_t bytes_transferred = sock.receive(asio::buffer(d1));
765
+ *
766
+ * std::vector<char> d2(128);
767
+ * bytes_transferred = sock.receive(asio::buffer(d2));
768
+ *
769
+ * std::array<char, 128> d3;
770
+ * bytes_transferred = sock.receive(asio::buffer(d3));
771
+ *
772
+ * boost::array<char, 128> d4;
773
+ * bytes_transferred = sock.receive(asio::buffer(d4)); @endcode
774
+ *
775
+ * In all three cases above, the buffers created are exactly 128 bytes long.
776
+ * Note that a vector is @e never automatically resized when creating or using
777
+ * a buffer. The buffer size is determined using the vector's <tt>size()</tt>
778
+ * member function, and not its capacity.
779
+ *
780
+ * @par Accessing Buffer Contents
781
+ *
782
+ * The contents of a buffer may be accessed using the @c data() and @c size()
783
+ * member functions:
784
+ *
785
+ * @code asio::mutable_buffer b1 = ...;
786
+ * std::size_t s1 = b1.size();
787
+ * unsigned char* p1 = static_cast<unsigned char*>(b1.data());
788
+ *
789
+ * asio::const_buffer b2 = ...;
790
+ * std::size_t s2 = b2.size();
791
+ * const void* p2 = b2.data(); @endcode
792
+ *
793
+ * The @c data() member function permits violations of type safety, so
794
+ * uses of it in application code should be carefully considered.
795
+ *
796
+ * For convenience, a @ref buffer_size function is provided that works with
797
+ * both buffers and buffer sequences (that is, types meeting the
798
+ * ConstBufferSequence or MutableBufferSequence type requirements). In this
799
+ * case, the function returns the total size of all buffers in the sequence.
800
+ *
801
+ * @par Buffer Copying
802
+ *
803
+ * The @ref buffer_copy function may be used to copy raw bytes between
804
+ * individual buffers and buffer sequences.
805
+ *
806
+ * In particular, when used with the @ref buffer_size function, the @ref
807
+ * buffer_copy function can be used to linearise a sequence of buffers. For
808
+ * example:
809
+ *
810
+ * @code vector<const_buffer> buffers = ...;
811
+ *
812
+ * vector<unsigned char> data(asio::buffer_size(buffers));
813
+ * asio::buffer_copy(asio::buffer(data), buffers); @endcode
814
+ *
815
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
816
+ * consequently it cannot be used to copy between overlapping memory regions.
817
+ *
818
+ * @par Buffer Invalidation
819
+ *
820
+ * A buffer object does not have any ownership of the memory it refers to. It
821
+ * is the responsibility of the application to ensure the memory region remains
822
+ * valid until it is no longer required for an I/O operation. When the memory
823
+ * is no longer available, the buffer is said to have been invalidated.
824
+ *
825
+ * For the asio::buffer overloads that accept an argument of type
826
+ * std::vector, the buffer objects returned are invalidated by any vector
827
+ * operation that also invalidates all references, pointers and iterators
828
+ * referring to the elements in the sequence (C++ Std, 23.2.4)
829
+ *
830
+ * For the asio::buffer overloads that accept an argument of type
831
+ * std::basic_string, the buffer objects returned are invalidated according to
832
+ * the rules defined for invalidation of references, pointers and iterators
833
+ * referring to elements of the sequence (C++ Std, 21.3).
834
+ *
835
+ * @par Buffer Arithmetic
836
+ *
837
+ * Buffer objects may be manipulated using simple arithmetic in a safe way
838
+ * which helps prevent buffer overruns. Consider an array initialised as
839
+ * follows:
840
+ *
841
+ * @code boost::array<char, 6> a = { 'a', 'b', 'c', 'd', 'e' }; @endcode
842
+ *
843
+ * A buffer object @c b1 created using:
844
+ *
845
+ * @code b1 = asio::buffer(a); @endcode
846
+ *
847
+ * represents the entire array, <tt>{ 'a', 'b', 'c', 'd', 'e' }</tt>. An
848
+ * optional second argument to the asio::buffer function may be used to
849
+ * limit the size, in bytes, of the buffer:
850
+ *
851
+ * @code b2 = asio::buffer(a, 3); @endcode
852
+ *
853
+ * such that @c b2 represents the data <tt>{ 'a', 'b', 'c' }</tt>. Even if the
854
+ * size argument exceeds the actual size of the array, the size of the buffer
855
+ * object created will be limited to the array size.
856
+ *
857
+ * An offset may be applied to an existing buffer to create a new one:
858
+ *
859
+ * @code b3 = b1 + 2; @endcode
860
+ *
861
+ * where @c b3 will set to represent <tt>{ 'c', 'd', 'e' }</tt>. If the offset
862
+ * exceeds the size of the existing buffer, the newly created buffer will be
863
+ * empty.
864
+ *
865
+ * Both an offset and size may be specified to create a buffer that corresponds
866
+ * to a specific range of bytes within an existing buffer:
867
+ *
868
+ * @code b4 = asio::buffer(b1 + 1, 3); @endcode
869
+ *
870
+ * so that @c b4 will refer to the bytes <tt>{ 'b', 'c', 'd' }</tt>.
871
+ *
872
+ * @par Buffers and Scatter-Gather I/O
873
+ *
874
+ * To read or write using multiple buffers (i.e. scatter-gather I/O), multiple
875
+ * buffer objects may be assigned into a container that supports the
876
+ * MutableBufferSequence (for read) or ConstBufferSequence (for write) concepts:
877
+ *
878
+ * @code
879
+ * char d1[128];
880
+ * std::vector<char> d2(128);
881
+ * boost::array<char, 128> d3;
882
+ *
883
+ * boost::array<mutable_buffer, 3> bufs1 = {
884
+ * asio::buffer(d1),
885
+ * asio::buffer(d2),
886
+ * asio::buffer(d3) };
887
+ * bytes_transferred = sock.receive(bufs1);
888
+ *
889
+ * std::vector<const_buffer> bufs2;
890
+ * bufs2.push_back(asio::buffer(d1));
891
+ * bufs2.push_back(asio::buffer(d2));
892
+ * bufs2.push_back(asio::buffer(d3));
893
+ * bytes_transferred = sock.send(bufs2); @endcode
894
+ */
895
+ /*@{*/
896
+
897
+ #if defined(ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
898
+ # define ASIO_MUTABLE_BUFFER mutable_buffer
899
+ # define ASIO_CONST_BUFFER const_buffer
900
+ #else // defined(ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
901
+ # define ASIO_MUTABLE_BUFFER mutable_buffers_1
902
+ # define ASIO_CONST_BUFFER const_buffers_1
903
+ #endif // defined(ASIO_NO_DEPRECATED) || defined(GENERATING_DOCUMENTATION)
904
+
905
+ /// Create a new modifiable buffer from an existing buffer.
906
+ /**
907
+ * @returns <tt>mutable_buffer(b)</tt>.
908
+ */
909
+ inline ASIO_MUTABLE_BUFFER buffer(
910
+ const mutable_buffer& b) ASIO_NOEXCEPT
911
+ {
912
+ return ASIO_MUTABLE_BUFFER(b);
913
+ }
914
+
915
+ /// Create a new modifiable buffer from an existing buffer.
916
+ /**
917
+ * @returns A mutable_buffer value equivalent to:
918
+ * @code mutable_buffer(
919
+ * b.data(),
920
+ * min(b.size(), max_size_in_bytes)); @endcode
921
+ */
922
+ inline ASIO_MUTABLE_BUFFER buffer(const mutable_buffer& b,
923
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
924
+ {
925
+ return ASIO_MUTABLE_BUFFER(
926
+ mutable_buffer(b.data(),
927
+ b.size() < max_size_in_bytes
928
+ ? b.size() : max_size_in_bytes
929
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
930
+ , b.get_debug_check()
931
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
932
+ ));
933
+ }
934
+
935
+ /// Create a new non-modifiable buffer from an existing buffer.
936
+ /**
937
+ * @returns <tt>const_buffer(b)</tt>.
938
+ */
939
+ inline ASIO_CONST_BUFFER buffer(
940
+ const const_buffer& b) ASIO_NOEXCEPT
941
+ {
942
+ return ASIO_CONST_BUFFER(b);
943
+ }
944
+
945
+ /// Create a new non-modifiable buffer from an existing buffer.
946
+ /**
947
+ * @returns A const_buffer value equivalent to:
948
+ * @code const_buffer(
949
+ * b.data(),
950
+ * min(b.size(), max_size_in_bytes)); @endcode
951
+ */
952
+ inline ASIO_CONST_BUFFER buffer(const const_buffer& b,
953
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
954
+ {
955
+ return ASIO_CONST_BUFFER(b.data(),
956
+ b.size() < max_size_in_bytes
957
+ ? b.size() : max_size_in_bytes
958
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
959
+ , b.get_debug_check()
960
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
961
+ );
962
+ }
963
+
964
+ /// Create a new modifiable buffer that represents the given memory range.
965
+ /**
966
+ * @returns <tt>mutable_buffer(data, size_in_bytes)</tt>.
967
+ */
968
+ inline ASIO_MUTABLE_BUFFER buffer(void* data,
969
+ std::size_t size_in_bytes) ASIO_NOEXCEPT
970
+ {
971
+ return ASIO_MUTABLE_BUFFER(data, size_in_bytes);
972
+ }
973
+
974
+ /// Create a new non-modifiable buffer that represents the given memory range.
975
+ /**
976
+ * @returns <tt>const_buffer(data, size_in_bytes)</tt>.
977
+ */
978
+ inline ASIO_CONST_BUFFER buffer(const void* data,
979
+ std::size_t size_in_bytes) ASIO_NOEXCEPT
980
+ {
981
+ return ASIO_CONST_BUFFER(data, size_in_bytes);
982
+ }
983
+
984
+ /// Create a new modifiable buffer that represents the given POD array.
985
+ /**
986
+ * @returns A mutable_buffer value equivalent to:
987
+ * @code mutable_buffer(
988
+ * static_cast<void*>(data),
989
+ * N * sizeof(PodType)); @endcode
990
+ */
991
+ template <typename PodType, std::size_t N>
992
+ inline ASIO_MUTABLE_BUFFER buffer(PodType (&data)[N]) ASIO_NOEXCEPT
993
+ {
994
+ return ASIO_MUTABLE_BUFFER(data, N * sizeof(PodType));
995
+ }
996
+
997
+ /// Create a new modifiable buffer that represents the given POD array.
998
+ /**
999
+ * @returns A mutable_buffer value equivalent to:
1000
+ * @code mutable_buffer(
1001
+ * static_cast<void*>(data),
1002
+ * min(N * sizeof(PodType), max_size_in_bytes)); @endcode
1003
+ */
1004
+ template <typename PodType, std::size_t N>
1005
+ inline ASIO_MUTABLE_BUFFER buffer(PodType (&data)[N],
1006
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1007
+ {
1008
+ return ASIO_MUTABLE_BUFFER(data,
1009
+ N * sizeof(PodType) < max_size_in_bytes
1010
+ ? N * sizeof(PodType) : max_size_in_bytes);
1011
+ }
1012
+
1013
+ /// Create a new non-modifiable buffer that represents the given POD array.
1014
+ /**
1015
+ * @returns A const_buffer value equivalent to:
1016
+ * @code const_buffer(
1017
+ * static_cast<const void*>(data),
1018
+ * N * sizeof(PodType)); @endcode
1019
+ */
1020
+ template <typename PodType, std::size_t N>
1021
+ inline ASIO_CONST_BUFFER buffer(
1022
+ const PodType (&data)[N]) ASIO_NOEXCEPT
1023
+ {
1024
+ return ASIO_CONST_BUFFER(data, N * sizeof(PodType));
1025
+ }
1026
+
1027
+ /// Create a new non-modifiable buffer that represents the given POD array.
1028
+ /**
1029
+ * @returns A const_buffer value equivalent to:
1030
+ * @code const_buffer(
1031
+ * static_cast<const void*>(data),
1032
+ * min(N * sizeof(PodType), max_size_in_bytes)); @endcode
1033
+ */
1034
+ template <typename PodType, std::size_t N>
1035
+ inline ASIO_CONST_BUFFER buffer(const PodType (&data)[N],
1036
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1037
+ {
1038
+ return ASIO_CONST_BUFFER(data,
1039
+ N * sizeof(PodType) < max_size_in_bytes
1040
+ ? N * sizeof(PodType) : max_size_in_bytes);
1041
+ }
1042
+
1043
+ #if defined(ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
1044
+
1045
+ // Borland C++ and Sun Studio think the overloads:
1046
+ //
1047
+ // unspecified buffer(boost::array<PodType, N>& array ...);
1048
+ //
1049
+ // and
1050
+ //
1051
+ // unspecified buffer(boost::array<const PodType, N>& array ...);
1052
+ //
1053
+ // are ambiguous. This will be worked around by using a buffer_types traits
1054
+ // class that contains typedefs for the appropriate buffer and container
1055
+ // classes, based on whether PodType is const or non-const.
1056
+
1057
+ namespace detail {
1058
+
1059
+ template <bool IsConst>
1060
+ struct buffer_types_base;
1061
+
1062
+ template <>
1063
+ struct buffer_types_base<false>
1064
+ {
1065
+ typedef mutable_buffer buffer_type;
1066
+ typedef ASIO_MUTABLE_BUFFER container_type;
1067
+ };
1068
+
1069
+ template <>
1070
+ struct buffer_types_base<true>
1071
+ {
1072
+ typedef const_buffer buffer_type;
1073
+ typedef ASIO_CONST_BUFFER container_type;
1074
+ };
1075
+
1076
+ template <typename PodType>
1077
+ struct buffer_types
1078
+ : public buffer_types_base<is_const<PodType>::value>
1079
+ {
1080
+ };
1081
+
1082
+ } // namespace detail
1083
+
1084
+ template <typename PodType, std::size_t N>
1085
+ inline typename detail::buffer_types<PodType>::container_type
1086
+ buffer(boost::array<PodType, N>& data) ASIO_NOEXCEPT
1087
+ {
1088
+ typedef typename asio::detail::buffer_types<PodType>::buffer_type
1089
+ buffer_type;
1090
+ typedef typename asio::detail::buffer_types<PodType>::container_type
1091
+ container_type;
1092
+ return container_type(
1093
+ buffer_type(data.c_array(), data.size() * sizeof(PodType)));
1094
+ }
1095
+
1096
+ template <typename PodType, std::size_t N>
1097
+ inline typename detail::buffer_types<PodType>::container_type
1098
+ buffer(boost::array<PodType, N>& data,
1099
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1100
+ {
1101
+ typedef typename asio::detail::buffer_types<PodType>::buffer_type
1102
+ buffer_type;
1103
+ typedef typename asio::detail::buffer_types<PodType>::container_type
1104
+ container_type;
1105
+ return container_type(
1106
+ buffer_type(data.c_array(),
1107
+ data.size() * sizeof(PodType) < max_size_in_bytes
1108
+ ? data.size() * sizeof(PodType) : max_size_in_bytes));
1109
+ }
1110
+
1111
+ #else // defined(ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
1112
+
1113
+ /// Create a new modifiable buffer that represents the given POD array.
1114
+ /**
1115
+ * @returns A mutable_buffer value equivalent to:
1116
+ * @code mutable_buffer(
1117
+ * data.data(),
1118
+ * data.size() * sizeof(PodType)); @endcode
1119
+ */
1120
+ template <typename PodType, std::size_t N>
1121
+ inline ASIO_MUTABLE_BUFFER buffer(
1122
+ boost::array<PodType, N>& data) ASIO_NOEXCEPT
1123
+ {
1124
+ return ASIO_MUTABLE_BUFFER(
1125
+ data.c_array(), data.size() * sizeof(PodType));
1126
+ }
1127
+
1128
+ /// Create a new modifiable buffer that represents the given POD array.
1129
+ /**
1130
+ * @returns A mutable_buffer value equivalent to:
1131
+ * @code mutable_buffer(
1132
+ * data.data(),
1133
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1134
+ */
1135
+ template <typename PodType, std::size_t N>
1136
+ inline ASIO_MUTABLE_BUFFER buffer(boost::array<PodType, N>& data,
1137
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1138
+ {
1139
+ return ASIO_MUTABLE_BUFFER(data.c_array(),
1140
+ data.size() * sizeof(PodType) < max_size_in_bytes
1141
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1142
+ }
1143
+
1144
+ /// Create a new non-modifiable buffer that represents the given POD array.
1145
+ /**
1146
+ * @returns A const_buffer value equivalent to:
1147
+ * @code const_buffer(
1148
+ * data.data(),
1149
+ * data.size() * sizeof(PodType)); @endcode
1150
+ */
1151
+ template <typename PodType, std::size_t N>
1152
+ inline ASIO_CONST_BUFFER buffer(
1153
+ boost::array<const PodType, N>& data) ASIO_NOEXCEPT
1154
+ {
1155
+ return ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1156
+ }
1157
+
1158
+ /// Create a new non-modifiable buffer that represents the given POD array.
1159
+ /**
1160
+ * @returns A const_buffer value equivalent to:
1161
+ * @code const_buffer(
1162
+ * data.data(),
1163
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1164
+ */
1165
+ template <typename PodType, std::size_t N>
1166
+ inline ASIO_CONST_BUFFER buffer(boost::array<const PodType, N>& data,
1167
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1168
+ {
1169
+ return ASIO_CONST_BUFFER(data.data(),
1170
+ data.size() * sizeof(PodType) < max_size_in_bytes
1171
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1172
+ }
1173
+
1174
+ #endif // defined(ASIO_ENABLE_ARRAY_BUFFER_WORKAROUND)
1175
+
1176
+ /// Create a new non-modifiable buffer that represents the given POD array.
1177
+ /**
1178
+ * @returns A const_buffer value equivalent to:
1179
+ * @code const_buffer(
1180
+ * data.data(),
1181
+ * data.size() * sizeof(PodType)); @endcode
1182
+ */
1183
+ template <typename PodType, std::size_t N>
1184
+ inline ASIO_CONST_BUFFER buffer(
1185
+ const boost::array<PodType, N>& data) ASIO_NOEXCEPT
1186
+ {
1187
+ return ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1188
+ }
1189
+
1190
+ /// Create a new non-modifiable buffer that represents the given POD array.
1191
+ /**
1192
+ * @returns A const_buffer value equivalent to:
1193
+ * @code const_buffer(
1194
+ * data.data(),
1195
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1196
+ */
1197
+ template <typename PodType, std::size_t N>
1198
+ inline ASIO_CONST_BUFFER buffer(const boost::array<PodType, N>& data,
1199
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1200
+ {
1201
+ return ASIO_CONST_BUFFER(data.data(),
1202
+ data.size() * sizeof(PodType) < max_size_in_bytes
1203
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1204
+ }
1205
+
1206
+ #if defined(ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
1207
+
1208
+ /// Create a new modifiable buffer that represents the given POD array.
1209
+ /**
1210
+ * @returns A mutable_buffer value equivalent to:
1211
+ * @code mutable_buffer(
1212
+ * data.data(),
1213
+ * data.size() * sizeof(PodType)); @endcode
1214
+ */
1215
+ template <typename PodType, std::size_t N>
1216
+ inline ASIO_MUTABLE_BUFFER buffer(
1217
+ std::array<PodType, N>& data) ASIO_NOEXCEPT
1218
+ {
1219
+ return ASIO_MUTABLE_BUFFER(data.data(), data.size() * sizeof(PodType));
1220
+ }
1221
+
1222
+ /// Create a new modifiable buffer that represents the given POD array.
1223
+ /**
1224
+ * @returns A mutable_buffer value equivalent to:
1225
+ * @code mutable_buffer(
1226
+ * data.data(),
1227
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1228
+ */
1229
+ template <typename PodType, std::size_t N>
1230
+ inline ASIO_MUTABLE_BUFFER buffer(std::array<PodType, N>& data,
1231
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1232
+ {
1233
+ return ASIO_MUTABLE_BUFFER(data.data(),
1234
+ data.size() * sizeof(PodType) < max_size_in_bytes
1235
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1236
+ }
1237
+
1238
+ /// Create a new non-modifiable buffer that represents the given POD array.
1239
+ /**
1240
+ * @returns A const_buffer value equivalent to:
1241
+ * @code const_buffer(
1242
+ * data.data(),
1243
+ * data.size() * sizeof(PodType)); @endcode
1244
+ */
1245
+ template <typename PodType, std::size_t N>
1246
+ inline ASIO_CONST_BUFFER buffer(
1247
+ std::array<const PodType, N>& data) ASIO_NOEXCEPT
1248
+ {
1249
+ return ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1250
+ }
1251
+
1252
+ /// Create a new non-modifiable buffer that represents the given POD array.
1253
+ /**
1254
+ * @returns A const_buffer value equivalent to:
1255
+ * @code const_buffer(
1256
+ * data.data(),
1257
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1258
+ */
1259
+ template <typename PodType, std::size_t N>
1260
+ inline ASIO_CONST_BUFFER buffer(std::array<const PodType, N>& data,
1261
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1262
+ {
1263
+ return ASIO_CONST_BUFFER(data.data(),
1264
+ data.size() * sizeof(PodType) < max_size_in_bytes
1265
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1266
+ }
1267
+
1268
+ /// Create a new non-modifiable buffer that represents the given POD array.
1269
+ /**
1270
+ * @returns A const_buffer value equivalent to:
1271
+ * @code const_buffer(
1272
+ * data.data(),
1273
+ * data.size() * sizeof(PodType)); @endcode
1274
+ */
1275
+ template <typename PodType, std::size_t N>
1276
+ inline ASIO_CONST_BUFFER buffer(
1277
+ const std::array<PodType, N>& data) ASIO_NOEXCEPT
1278
+ {
1279
+ return ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(PodType));
1280
+ }
1281
+
1282
+ /// Create a new non-modifiable buffer that represents the given POD array.
1283
+ /**
1284
+ * @returns A const_buffer value equivalent to:
1285
+ * @code const_buffer(
1286
+ * data.data(),
1287
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1288
+ */
1289
+ template <typename PodType, std::size_t N>
1290
+ inline ASIO_CONST_BUFFER buffer(const std::array<PodType, N>& data,
1291
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1292
+ {
1293
+ return ASIO_CONST_BUFFER(data.data(),
1294
+ data.size() * sizeof(PodType) < max_size_in_bytes
1295
+ ? data.size() * sizeof(PodType) : max_size_in_bytes);
1296
+ }
1297
+
1298
+ #endif // defined(ASIO_HAS_STD_ARRAY) || defined(GENERATING_DOCUMENTATION)
1299
+
1300
+ /// Create a new modifiable buffer that represents the given POD vector.
1301
+ /**
1302
+ * @returns A mutable_buffer value equivalent to:
1303
+ * @code mutable_buffer(
1304
+ * data.size() ? &data[0] : 0,
1305
+ * data.size() * sizeof(PodType)); @endcode
1306
+ *
1307
+ * @note The buffer is invalidated by any vector operation that would also
1308
+ * invalidate iterators.
1309
+ */
1310
+ template <typename PodType, typename Allocator>
1311
+ inline ASIO_MUTABLE_BUFFER buffer(
1312
+ std::vector<PodType, Allocator>& data) ASIO_NOEXCEPT
1313
+ {
1314
+ return ASIO_MUTABLE_BUFFER(
1315
+ data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1316
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1317
+ , detail::buffer_debug_check<
1318
+ typename std::vector<PodType, Allocator>::iterator
1319
+ >(data.begin())
1320
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1321
+ );
1322
+ }
1323
+
1324
+ /// Create a new modifiable buffer that represents the given POD vector.
1325
+ /**
1326
+ * @returns A mutable_buffer value equivalent to:
1327
+ * @code mutable_buffer(
1328
+ * data.size() ? &data[0] : 0,
1329
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1330
+ *
1331
+ * @note The buffer is invalidated by any vector operation that would also
1332
+ * invalidate iterators.
1333
+ */
1334
+ template <typename PodType, typename Allocator>
1335
+ inline ASIO_MUTABLE_BUFFER buffer(std::vector<PodType, Allocator>& data,
1336
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1337
+ {
1338
+ return ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1339
+ data.size() * sizeof(PodType) < max_size_in_bytes
1340
+ ? data.size() * sizeof(PodType) : max_size_in_bytes
1341
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1342
+ , detail::buffer_debug_check<
1343
+ typename std::vector<PodType, Allocator>::iterator
1344
+ >(data.begin())
1345
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1346
+ );
1347
+ }
1348
+
1349
+ /// Create a new non-modifiable buffer that represents the given POD vector.
1350
+ /**
1351
+ * @returns A const_buffer value equivalent to:
1352
+ * @code const_buffer(
1353
+ * data.size() ? &data[0] : 0,
1354
+ * data.size() * sizeof(PodType)); @endcode
1355
+ *
1356
+ * @note The buffer is invalidated by any vector operation that would also
1357
+ * invalidate iterators.
1358
+ */
1359
+ template <typename PodType, typename Allocator>
1360
+ inline ASIO_CONST_BUFFER buffer(
1361
+ const std::vector<PodType, Allocator>& data) ASIO_NOEXCEPT
1362
+ {
1363
+ return ASIO_CONST_BUFFER(
1364
+ data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
1365
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1366
+ , detail::buffer_debug_check<
1367
+ typename std::vector<PodType, Allocator>::const_iterator
1368
+ >(data.begin())
1369
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1370
+ );
1371
+ }
1372
+
1373
+ /// Create a new non-modifiable buffer that represents the given POD vector.
1374
+ /**
1375
+ * @returns A const_buffer value equivalent to:
1376
+ * @code const_buffer(
1377
+ * data.size() ? &data[0] : 0,
1378
+ * min(data.size() * sizeof(PodType), max_size_in_bytes)); @endcode
1379
+ *
1380
+ * @note The buffer is invalidated by any vector operation that would also
1381
+ * invalidate iterators.
1382
+ */
1383
+ template <typename PodType, typename Allocator>
1384
+ inline ASIO_CONST_BUFFER buffer(
1385
+ const std::vector<PodType, Allocator>& data,
1386
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1387
+ {
1388
+ return ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1389
+ data.size() * sizeof(PodType) < max_size_in_bytes
1390
+ ? data.size() * sizeof(PodType) : max_size_in_bytes
1391
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1392
+ , detail::buffer_debug_check<
1393
+ typename std::vector<PodType, Allocator>::const_iterator
1394
+ >(data.begin())
1395
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1396
+ );
1397
+ }
1398
+
1399
+ /// Create a new modifiable buffer that represents the given string.
1400
+ /**
1401
+ * @returns <tt>mutable_buffer(data.size() ? &data[0] : 0,
1402
+ * data.size() * sizeof(Elem))</tt>.
1403
+ *
1404
+ * @note The buffer is invalidated by any non-const operation called on the
1405
+ * given string object.
1406
+ */
1407
+ template <typename Elem, typename Traits, typename Allocator>
1408
+ inline ASIO_MUTABLE_BUFFER buffer(
1409
+ std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
1410
+ {
1411
+ return ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1412
+ data.size() * sizeof(Elem)
1413
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1414
+ , detail::buffer_debug_check<
1415
+ typename std::basic_string<Elem, Traits, Allocator>::iterator
1416
+ >(data.begin())
1417
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1418
+ );
1419
+ }
1420
+
1421
+ /// Create a new modifiable buffer that represents the given string.
1422
+ /**
1423
+ * @returns A mutable_buffer value equivalent to:
1424
+ * @code mutable_buffer(
1425
+ * data.size() ? &data[0] : 0,
1426
+ * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1427
+ *
1428
+ * @note The buffer is invalidated by any non-const operation called on the
1429
+ * given string object.
1430
+ */
1431
+ template <typename Elem, typename Traits, typename Allocator>
1432
+ inline ASIO_MUTABLE_BUFFER buffer(
1433
+ std::basic_string<Elem, Traits, Allocator>& data,
1434
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1435
+ {
1436
+ return ASIO_MUTABLE_BUFFER(data.size() ? &data[0] : 0,
1437
+ data.size() * sizeof(Elem) < max_size_in_bytes
1438
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1439
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1440
+ , detail::buffer_debug_check<
1441
+ typename std::basic_string<Elem, Traits, Allocator>::iterator
1442
+ >(data.begin())
1443
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1444
+ );
1445
+ }
1446
+
1447
+ /// Create a new non-modifiable buffer that represents the given string.
1448
+ /**
1449
+ * @returns <tt>const_buffer(data.data(), data.size() * sizeof(Elem))</tt>.
1450
+ *
1451
+ * @note The buffer is invalidated by any non-const operation called on the
1452
+ * given string object.
1453
+ */
1454
+ template <typename Elem, typename Traits, typename Allocator>
1455
+ inline ASIO_CONST_BUFFER buffer(
1456
+ const std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
1457
+ {
1458
+ return ASIO_CONST_BUFFER(data.data(), data.size() * sizeof(Elem)
1459
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1460
+ , detail::buffer_debug_check<
1461
+ typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1462
+ >(data.begin())
1463
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1464
+ );
1465
+ }
1466
+
1467
+ /// Create a new non-modifiable buffer that represents the given string.
1468
+ /**
1469
+ * @returns A const_buffer value equivalent to:
1470
+ * @code const_buffer(
1471
+ * data.data(),
1472
+ * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1473
+ *
1474
+ * @note The buffer is invalidated by any non-const operation called on the
1475
+ * given string object.
1476
+ */
1477
+ template <typename Elem, typename Traits, typename Allocator>
1478
+ inline ASIO_CONST_BUFFER buffer(
1479
+ const std::basic_string<Elem, Traits, Allocator>& data,
1480
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1481
+ {
1482
+ return ASIO_CONST_BUFFER(data.data(),
1483
+ data.size() * sizeof(Elem) < max_size_in_bytes
1484
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1485
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1486
+ , detail::buffer_debug_check<
1487
+ typename std::basic_string<Elem, Traits, Allocator>::const_iterator
1488
+ >(data.begin())
1489
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1490
+ );
1491
+ }
1492
+
1493
+ #if defined(ASIO_HAS_STRING_VIEW) \
1494
+ || defined(GENERATING_DOCUMENTATION)
1495
+
1496
+ /// Create a new modifiable buffer that represents the given string_view.
1497
+ /**
1498
+ * @returns <tt>mutable_buffer(data.size() ? &data[0] : 0,
1499
+ * data.size() * sizeof(Elem))</tt>.
1500
+ */
1501
+ template <typename Elem, typename Traits>
1502
+ inline ASIO_CONST_BUFFER buffer(
1503
+ basic_string_view<Elem, Traits> data) ASIO_NOEXCEPT
1504
+ {
1505
+ return ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1506
+ data.size() * sizeof(Elem)
1507
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1508
+ , detail::buffer_debug_check<
1509
+ typename basic_string_view<Elem, Traits>::iterator
1510
+ >(data.begin())
1511
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1512
+ );
1513
+ }
1514
+
1515
+ /// Create a new non-modifiable buffer that represents the given string.
1516
+ /**
1517
+ * @returns A mutable_buffer value equivalent to:
1518
+ * @code mutable_buffer(
1519
+ * data.size() ? &data[0] : 0,
1520
+ * min(data.size() * sizeof(Elem), max_size_in_bytes)); @endcode
1521
+ */
1522
+ template <typename Elem, typename Traits>
1523
+ inline ASIO_CONST_BUFFER buffer(
1524
+ basic_string_view<Elem, Traits> data,
1525
+ std::size_t max_size_in_bytes) ASIO_NOEXCEPT
1526
+ {
1527
+ return ASIO_CONST_BUFFER(data.size() ? &data[0] : 0,
1528
+ data.size() * sizeof(Elem) < max_size_in_bytes
1529
+ ? data.size() * sizeof(Elem) : max_size_in_bytes
1530
+ #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
1531
+ , detail::buffer_debug_check<
1532
+ typename basic_string_view<Elem, Traits>::iterator
1533
+ >(data.begin())
1534
+ #endif // ASIO_ENABLE_BUFFER_DEBUGGING
1535
+ );
1536
+ }
1537
+
1538
+ #endif // defined(ASIO_HAS_STRING_VIEW)
1539
+ // || defined(GENERATING_DOCUMENTATION)
1540
+
1541
+ /*@}*/
1542
+
1543
+ /// Adapt a basic_string to the DynamicBuffer requirements.
1544
+ /**
1545
+ * Requires that <tt>sizeof(Elem) == 1</tt>.
1546
+ */
1547
+ template <typename Elem, typename Traits, typename Allocator>
1548
+ class dynamic_string_buffer
1549
+ {
1550
+ public:
1551
+ /// The type used to represent a sequence of constant buffers that refers to
1552
+ /// the underlying memory.
1553
+ typedef ASIO_CONST_BUFFER const_buffers_type;
1554
+
1555
+ /// The type used to represent a sequence of mutable buffers that refers to
1556
+ /// the underlying memory.
1557
+ typedef ASIO_MUTABLE_BUFFER mutable_buffers_type;
1558
+
1559
+ /// Construct a dynamic buffer from a string.
1560
+ /**
1561
+ * @param s The string to be used as backing storage for the dynamic buffer.
1562
+ * The object stores a reference to the string and the user is responsible
1563
+ * for ensuring that the string object remains valid while the
1564
+ * dynamic_string_buffer object, and copies of the object, are in use.
1565
+ *
1566
+ * @b DynamicBuffer_v1: Any existing data in the string is treated as the
1567
+ * dynamic buffer's input sequence.
1568
+ *
1569
+ * @param maximum_size Specifies a maximum size for the buffer, in bytes.
1570
+ */
1571
+ explicit dynamic_string_buffer(std::basic_string<Elem, Traits, Allocator>& s,
1572
+ std::size_t maximum_size =
1573
+ (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
1574
+ : string_(s),
1575
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1576
+ size_((std::numeric_limits<std::size_t>::max)()),
1577
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1578
+ max_size_(maximum_size)
1579
+ {
1580
+ }
1581
+
1582
+ /// @b DynamicBuffer_v2: Copy construct a dynamic buffer.
1583
+ dynamic_string_buffer(const dynamic_string_buffer& other) ASIO_NOEXCEPT
1584
+ : string_(other.string_),
1585
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1586
+ size_(other.size_),
1587
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1588
+ max_size_(other.max_size_)
1589
+ {
1590
+ }
1591
+
1592
+ #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1593
+ /// Move construct a dynamic buffer.
1594
+ dynamic_string_buffer(dynamic_string_buffer&& other) ASIO_NOEXCEPT
1595
+ : string_(other.string_),
1596
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1597
+ size_(other.size_),
1598
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1599
+ max_size_(other.max_size_)
1600
+ {
1601
+ }
1602
+ #endif // defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1603
+
1604
+ /// @b DynamicBuffer_v1: Get the size of the input sequence.
1605
+ /// @b DynamicBuffer_v2: Get the current size of the underlying memory.
1606
+ /**
1607
+ * @returns @b DynamicBuffer_v1 The current size of the input sequence.
1608
+ * @b DynamicBuffer_v2: The current size of the underlying string if less than
1609
+ * max_size(). Otherwise returns max_size().
1610
+ */
1611
+ std::size_t size() const ASIO_NOEXCEPT
1612
+ {
1613
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1614
+ if (size_ != (std::numeric_limits<std::size_t>::max)())
1615
+ return size_;
1616
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1617
+ return (std::min)(string_.size(), max_size());
1618
+ }
1619
+
1620
+ /// Get the maximum size of the dynamic buffer.
1621
+ /**
1622
+ * @returns The allowed maximum size of the underlying memory.
1623
+ */
1624
+ std::size_t max_size() const ASIO_NOEXCEPT
1625
+ {
1626
+ return max_size_;
1627
+ }
1628
+
1629
+ /// Get the maximum size that the buffer may grow to without triggering
1630
+ /// reallocation.
1631
+ /**
1632
+ * @returns The current capacity of the underlying string if less than
1633
+ * max_size(). Otherwise returns max_size().
1634
+ */
1635
+ std::size_t capacity() const ASIO_NOEXCEPT
1636
+ {
1637
+ return (std::min)(string_.capacity(), max_size());
1638
+ }
1639
+
1640
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1641
+ /// @b DynamicBuffer_v1: Get a list of buffers that represents the input
1642
+ /// sequence.
1643
+ /**
1644
+ * @returns An object of type @c const_buffers_type that satisfies
1645
+ * ConstBufferSequence requirements, representing the basic_string memory in
1646
+ * the input sequence.
1647
+ *
1648
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1649
+ * or @c basic_string member function that resizes or erases the string.
1650
+ */
1651
+ const_buffers_type data() const ASIO_NOEXCEPT
1652
+ {
1653
+ return const_buffers_type(asio::buffer(string_, size_));
1654
+ }
1655
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1656
+
1657
+ /// @b DynamicBuffer_v2: Get a sequence of buffers that represents the
1658
+ /// underlying memory.
1659
+ /**
1660
+ * @param pos Position of the first byte to represent in the buffer sequence
1661
+ *
1662
+ * @param n The number of bytes to return in the buffer sequence. If the
1663
+ * underlying memory is shorter, the buffer sequence represents as many bytes
1664
+ * as are available.
1665
+ *
1666
+ * @returns An object of type @c mutable_buffers_type that satisfies
1667
+ * MutableBufferSequence requirements, representing the basic_string memory.
1668
+ *
1669
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1670
+ * or @c basic_string member function that resizes or erases the string.
1671
+ */
1672
+ mutable_buffers_type data(std::size_t pos, std::size_t n) ASIO_NOEXCEPT
1673
+ {
1674
+ return mutable_buffers_type(asio::buffer(
1675
+ asio::buffer(string_, max_size_) + pos, n));
1676
+ }
1677
+
1678
+ /// @b DynamicBuffer_v2: Get a sequence of buffers that represents the
1679
+ /// underlying memory.
1680
+ /**
1681
+ * @param pos Position of the first byte to represent in the buffer sequence
1682
+ *
1683
+ * @param n The number of bytes to return in the buffer sequence. If the
1684
+ * underlying memory is shorter, the buffer sequence represents as many bytes
1685
+ * as are available.
1686
+ *
1687
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1688
+ * or @c basic_string member function that resizes or erases the string.
1689
+ */
1690
+ const_buffers_type data(std::size_t pos,
1691
+ std::size_t n) const ASIO_NOEXCEPT
1692
+ {
1693
+ return const_buffers_type(asio::buffer(
1694
+ asio::buffer(string_, max_size_) + pos, n));
1695
+ }
1696
+
1697
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1698
+ /// @b DynamicBuffer_v1: Get a list of buffers that represents the output
1699
+ /// sequence, with the given size.
1700
+ /**
1701
+ * Ensures that the output sequence can accommodate @c n bytes, resizing the
1702
+ * basic_string object as necessary.
1703
+ *
1704
+ * @returns An object of type @c mutable_buffers_type that satisfies
1705
+ * MutableBufferSequence requirements, representing basic_string memory
1706
+ * at the start of the output sequence of size @c n.
1707
+ *
1708
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
1709
+ *
1710
+ * @note The returned object is invalidated by any @c dynamic_string_buffer
1711
+ * or @c basic_string member function that modifies the input sequence or
1712
+ * output sequence.
1713
+ */
1714
+ mutable_buffers_type prepare(std::size_t n)
1715
+ {
1716
+ if (size() > max_size() || max_size() - size() < n)
1717
+ {
1718
+ std::length_error ex("dynamic_string_buffer too long");
1719
+ asio::detail::throw_exception(ex);
1720
+ }
1721
+
1722
+ if (size_ == (std::numeric_limits<std::size_t>::max)())
1723
+ size_ = string_.size(); // Enable v1 behaviour.
1724
+
1725
+ string_.resize(size_ + n);
1726
+
1727
+ return asio::buffer(asio::buffer(string_) + size_, n);
1728
+ }
1729
+
1730
+ /// @b DynamicBuffer_v1: Move bytes from the output sequence to the input
1731
+ /// sequence.
1732
+ /**
1733
+ * @param n The number of bytes to append from the start of the output
1734
+ * sequence to the end of the input sequence. The remainder of the output
1735
+ * sequence is discarded.
1736
+ *
1737
+ * Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
1738
+ * no intervening operations that modify the input or output sequence.
1739
+ *
1740
+ * @note If @c n is greater than the size of the output sequence, the entire
1741
+ * output sequence is moved to the input sequence and no error is issued.
1742
+ */
1743
+ void commit(std::size_t n)
1744
+ {
1745
+ size_ += (std::min)(n, string_.size() - size_);
1746
+ string_.resize(size_);
1747
+ }
1748
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1749
+
1750
+ /// @b DynamicBuffer_v2: Grow the underlying memory by the specified number of
1751
+ /// bytes.
1752
+ /**
1753
+ * Resizes the string to accommodate an additional @c n bytes at the end.
1754
+ *
1755
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
1756
+ */
1757
+ void grow(std::size_t n)
1758
+ {
1759
+ if (size() > max_size() || max_size() - size() < n)
1760
+ {
1761
+ std::length_error ex("dynamic_string_buffer too long");
1762
+ asio::detail::throw_exception(ex);
1763
+ }
1764
+
1765
+ string_.resize(size() + n);
1766
+ }
1767
+
1768
+ /// @b DynamicBuffer_v2: Shrink the underlying memory by the specified number
1769
+ /// of bytes.
1770
+ /**
1771
+ * Erases @c n bytes from the end of the string by resizing the basic_string
1772
+ * object. If @c n is greater than the current size of the string, the string
1773
+ * is emptied.
1774
+ */
1775
+ void shrink(std::size_t n)
1776
+ {
1777
+ string_.resize(n > size() ? 0 : size() - n);
1778
+ }
1779
+
1780
+ /// @b DynamicBuffer_v1: Remove characters from the input sequence.
1781
+ /// @b DynamicBuffer_v2: Consume the specified number of bytes from the
1782
+ /// beginning of the underlying memory.
1783
+ /**
1784
+ * @b DynamicBuffer_v1: Removes @c n characters from the beginning of the
1785
+ * input sequence. @note If @c n is greater than the size of the input
1786
+ * sequence, the entire input sequence is consumed and no error is issued.
1787
+ *
1788
+ * @b DynamicBuffer_v2: Erases @c n bytes from the beginning of the string.
1789
+ * If @c n is greater than the current size of the string, the string is
1790
+ * emptied.
1791
+ */
1792
+ void consume(std::size_t n)
1793
+ {
1794
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1795
+ if (size_ != (std::numeric_limits<std::size_t>::max)())
1796
+ {
1797
+ std::size_t consume_length = (std::min)(n, size_);
1798
+ string_.erase(0, consume_length);
1799
+ size_ -= consume_length;
1800
+ return;
1801
+ }
1802
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1803
+ string_.erase(0, n);
1804
+ }
1805
+
1806
+ private:
1807
+ std::basic_string<Elem, Traits, Allocator>& string_;
1808
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1809
+ std::size_t size_;
1810
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1811
+ const std::size_t max_size_;
1812
+ };
1813
+
1814
+ /// Adapt a vector to the DynamicBuffer requirements.
1815
+ /**
1816
+ * Requires that <tt>sizeof(Elem) == 1</tt>.
1817
+ */
1818
+ template <typename Elem, typename Allocator>
1819
+ class dynamic_vector_buffer
1820
+ {
1821
+ public:
1822
+ /// The type used to represent a sequence of constant buffers that refers to
1823
+ /// the underlying memory.
1824
+ typedef ASIO_CONST_BUFFER const_buffers_type;
1825
+
1826
+ /// The type used to represent a sequence of mutable buffers that refers to
1827
+ /// the underlying memory.
1828
+ typedef ASIO_MUTABLE_BUFFER mutable_buffers_type;
1829
+
1830
+ /// Construct a dynamic buffer from a vector.
1831
+ /**
1832
+ * @param v The vector to be used as backing storage for the dynamic buffer.
1833
+ * The object stores a reference to the vector and the user is responsible
1834
+ * for ensuring that the vector object remains valid while the
1835
+ * dynamic_vector_buffer object, and copies of the object, are in use.
1836
+ *
1837
+ * @param maximum_size Specifies a maximum size for the buffer, in bytes.
1838
+ */
1839
+ explicit dynamic_vector_buffer(std::vector<Elem, Allocator>& v,
1840
+ std::size_t maximum_size =
1841
+ (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
1842
+ : vector_(v),
1843
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1844
+ size_((std::numeric_limits<std::size_t>::max)()),
1845
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1846
+ max_size_(maximum_size)
1847
+ {
1848
+ }
1849
+
1850
+ /// @b DynamicBuffer_v2: Copy construct a dynamic buffer.
1851
+ dynamic_vector_buffer(const dynamic_vector_buffer& other) ASIO_NOEXCEPT
1852
+ : vector_(other.vector_),
1853
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1854
+ size_(other.size_),
1855
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1856
+ max_size_(other.max_size_)
1857
+ {
1858
+ }
1859
+
1860
+ #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1861
+ /// Move construct a dynamic buffer.
1862
+ dynamic_vector_buffer(dynamic_vector_buffer&& other) ASIO_NOEXCEPT
1863
+ : vector_(other.vector_),
1864
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1865
+ size_(other.size_),
1866
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1867
+ max_size_(other.max_size_)
1868
+ {
1869
+ }
1870
+ #endif // defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
1871
+
1872
+ /// @b DynamicBuffer_v1: Get the size of the input sequence.
1873
+ /// @b DynamicBuffer_v2: Get the current size of the underlying memory.
1874
+ /**
1875
+ * @returns @b DynamicBuffer_v1 The current size of the input sequence.
1876
+ * @b DynamicBuffer_v2: The current size of the underlying vector if less than
1877
+ * max_size(). Otherwise returns max_size().
1878
+ */
1879
+ std::size_t size() const ASIO_NOEXCEPT
1880
+ {
1881
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1882
+ if (size_ != (std::numeric_limits<std::size_t>::max)())
1883
+ return size_;
1884
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1885
+ return (std::min)(vector_.size(), max_size());
1886
+ }
1887
+
1888
+ /// Get the maximum size of the dynamic buffer.
1889
+ /**
1890
+ * @returns @b DynamicBuffer_v1: The allowed maximum of the sum of the sizes
1891
+ * of the input sequence and output sequence. @b DynamicBuffer_v2: The allowed
1892
+ * maximum size of the underlying memory.
1893
+ */
1894
+ std::size_t max_size() const ASIO_NOEXCEPT
1895
+ {
1896
+ return max_size_;
1897
+ }
1898
+
1899
+ /// Get the maximum size that the buffer may grow to without triggering
1900
+ /// reallocation.
1901
+ /**
1902
+ * @returns @b DynamicBuffer_v1: The current total capacity of the buffer,
1903
+ * i.e. for both the input sequence and output sequence. @b DynamicBuffer_v2:
1904
+ * The current capacity of the underlying vector if less than max_size().
1905
+ * Otherwise returns max_size().
1906
+ */
1907
+ std::size_t capacity() const ASIO_NOEXCEPT
1908
+ {
1909
+ return (std::min)(vector_.capacity(), max_size());
1910
+ }
1911
+
1912
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1913
+ /// @b DynamicBuffer_v1: Get a list of buffers that represents the input
1914
+ /// sequence.
1915
+ /**
1916
+ * @returns An object of type @c const_buffers_type that satisfies
1917
+ * ConstBufferSequence requirements, representing the vector memory in the
1918
+ * input sequence.
1919
+ *
1920
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1921
+ * or @c vector member function that modifies the input sequence or output
1922
+ * sequence.
1923
+ */
1924
+ const_buffers_type data() const ASIO_NOEXCEPT
1925
+ {
1926
+ return const_buffers_type(asio::buffer(vector_, size_));
1927
+ }
1928
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1929
+
1930
+ /// @b DynamicBuffer_v2: Get a sequence of buffers that represents the
1931
+ /// underlying memory.
1932
+ /**
1933
+ * @param pos Position of the first byte to represent in the buffer sequence
1934
+ *
1935
+ * @param n The number of bytes to return in the buffer sequence. If the
1936
+ * underlying memory is shorter, the buffer sequence represents as many bytes
1937
+ * as are available.
1938
+ *
1939
+ * @returns An object of type @c mutable_buffers_type that satisfies
1940
+ * MutableBufferSequence requirements, representing the vector memory.
1941
+ *
1942
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1943
+ * or @c vector member function that resizes or erases the vector.
1944
+ */
1945
+ mutable_buffers_type data(std::size_t pos, std::size_t n) ASIO_NOEXCEPT
1946
+ {
1947
+ return mutable_buffers_type(asio::buffer(
1948
+ asio::buffer(vector_, max_size_) + pos, n));
1949
+ }
1950
+
1951
+ /// @b DynamicBuffer_v2: Get a sequence of buffers that represents the
1952
+ /// underlying memory.
1953
+ /**
1954
+ * @param pos Position of the first byte to represent in the buffer sequence
1955
+ *
1956
+ * @param n The number of bytes to return in the buffer sequence. If the
1957
+ * underlying memory is shorter, the buffer sequence represents as many bytes
1958
+ * as are available.
1959
+ *
1960
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1961
+ * or @c vector member function that resizes or erases the vector.
1962
+ */
1963
+ const_buffers_type data(std::size_t pos,
1964
+ std::size_t n) const ASIO_NOEXCEPT
1965
+ {
1966
+ return const_buffers_type(asio::buffer(
1967
+ asio::buffer(vector_, max_size_) + pos, n));
1968
+ }
1969
+
1970
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
1971
+ /// @b DynamicBuffer_v1: Get a list of buffers that represents the output
1972
+ /// sequence, with the given size.
1973
+ /**
1974
+ * Ensures that the output sequence can accommodate @c n bytes, resizing the
1975
+ * vector object as necessary.
1976
+ *
1977
+ * @returns An object of type @c mutable_buffers_type that satisfies
1978
+ * MutableBufferSequence requirements, representing vector memory at the
1979
+ * start of the output sequence of size @c n.
1980
+ *
1981
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
1982
+ *
1983
+ * @note The returned object is invalidated by any @c dynamic_vector_buffer
1984
+ * or @c vector member function that modifies the input sequence or output
1985
+ * sequence.
1986
+ */
1987
+ mutable_buffers_type prepare(std::size_t n)
1988
+ {
1989
+ if (size () > max_size() || max_size() - size() < n)
1990
+ {
1991
+ std::length_error ex("dynamic_vector_buffer too long");
1992
+ asio::detail::throw_exception(ex);
1993
+ }
1994
+
1995
+ if (size_ == (std::numeric_limits<std::size_t>::max)())
1996
+ size_ = vector_.size(); // Enable v1 behaviour.
1997
+
1998
+ vector_.resize(size_ + n);
1999
+
2000
+ return asio::buffer(asio::buffer(vector_) + size_, n);
2001
+ }
2002
+
2003
+ /// @b DynamicBuffer_v1: Move bytes from the output sequence to the input
2004
+ /// sequence.
2005
+ /**
2006
+ * @param n The number of bytes to append from the start of the output
2007
+ * sequence to the end of the input sequence. The remainder of the output
2008
+ * sequence is discarded.
2009
+ *
2010
+ * Requires a preceding call <tt>prepare(x)</tt> where <tt>x >= n</tt>, and
2011
+ * no intervening operations that modify the input or output sequence.
2012
+ *
2013
+ * @note If @c n is greater than the size of the output sequence, the entire
2014
+ * output sequence is moved to the input sequence and no error is issued.
2015
+ */
2016
+ void commit(std::size_t n)
2017
+ {
2018
+ size_ += (std::min)(n, vector_.size() - size_);
2019
+ vector_.resize(size_);
2020
+ }
2021
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2022
+
2023
+ /// @b DynamicBuffer_v2: Grow the underlying memory by the specified number of
2024
+ /// bytes.
2025
+ /**
2026
+ * Resizes the vector to accommodate an additional @c n bytes at the end.
2027
+ *
2028
+ * @throws std::length_error If <tt>size() + n > max_size()</tt>.
2029
+ */
2030
+ void grow(std::size_t n)
2031
+ {
2032
+ if (size() > max_size() || max_size() - size() < n)
2033
+ {
2034
+ std::length_error ex("dynamic_vector_buffer too long");
2035
+ asio::detail::throw_exception(ex);
2036
+ }
2037
+
2038
+ vector_.resize(size() + n);
2039
+ }
2040
+
2041
+ /// @b DynamicBuffer_v2: Shrink the underlying memory by the specified number
2042
+ /// of bytes.
2043
+ /**
2044
+ * Erases @c n bytes from the end of the vector by resizing the vector
2045
+ * object. If @c n is greater than the current size of the vector, the vector
2046
+ * is emptied.
2047
+ */
2048
+ void shrink(std::size_t n)
2049
+ {
2050
+ vector_.resize(n > size() ? 0 : size() - n);
2051
+ }
2052
+
2053
+ /// @b DynamicBuffer_v1: Remove characters from the input sequence.
2054
+ /// @b DynamicBuffer_v2: Consume the specified number of bytes from the
2055
+ /// beginning of the underlying memory.
2056
+ /**
2057
+ * @b DynamicBuffer_v1: Removes @c n characters from the beginning of the
2058
+ * input sequence. @note If @c n is greater than the size of the input
2059
+ * sequence, the entire input sequence is consumed and no error is issued.
2060
+ *
2061
+ * @b DynamicBuffer_v2: Erases @c n bytes from the beginning of the vector.
2062
+ * If @c n is greater than the current size of the vector, the vector is
2063
+ * emptied.
2064
+ */
2065
+ void consume(std::size_t n)
2066
+ {
2067
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2068
+ if (size_ != (std::numeric_limits<std::size_t>::max)())
2069
+ {
2070
+ std::size_t consume_length = (std::min)(n, size_);
2071
+ vector_.erase(vector_.begin(), vector_.begin() + consume_length);
2072
+ size_ -= consume_length;
2073
+ return;
2074
+ }
2075
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2076
+ vector_.erase(vector_.begin(), vector_.begin() + (std::min)(size(), n));
2077
+ }
2078
+
2079
+ private:
2080
+ std::vector<Elem, Allocator>& vector_;
2081
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2082
+ std::size_t size_;
2083
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2084
+ const std::size_t max_size_;
2085
+ };
2086
+
2087
+ /** @defgroup dynamic_buffer asio::dynamic_buffer
2088
+ *
2089
+ * @brief The asio::dynamic_buffer function is used to create a
2090
+ * dynamically resized buffer from a @c std::basic_string or @c std::vector.
2091
+ */
2092
+ /*@{*/
2093
+
2094
+ /// Create a new dynamic buffer that represents the given string.
2095
+ /**
2096
+ * @returns <tt>dynamic_string_buffer<Elem, Traits, Allocator>(data)</tt>.
2097
+ */
2098
+ template <typename Elem, typename Traits, typename Allocator>
2099
+ inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
2100
+ std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
2101
+ {
2102
+ return dynamic_string_buffer<Elem, Traits, Allocator>(data);
2103
+ }
2104
+
2105
+ /// Create a new dynamic buffer that represents the given string.
2106
+ /**
2107
+ * @returns <tt>dynamic_string_buffer<Elem, Traits, Allocator>(data,
2108
+ * max_size)</tt>.
2109
+ */
2110
+ template <typename Elem, typename Traits, typename Allocator>
2111
+ inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
2112
+ std::basic_string<Elem, Traits, Allocator>& data,
2113
+ std::size_t max_size) ASIO_NOEXCEPT
2114
+ {
2115
+ return dynamic_string_buffer<Elem, Traits, Allocator>(data, max_size);
2116
+ }
2117
+
2118
+ /// Create a new dynamic buffer that represents the given vector.
2119
+ /**
2120
+ * @returns <tt>dynamic_vector_buffer<Elem, Allocator>(data)</tt>.
2121
+ */
2122
+ template <typename Elem, typename Allocator>
2123
+ inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
2124
+ std::vector<Elem, Allocator>& data) ASIO_NOEXCEPT
2125
+ {
2126
+ return dynamic_vector_buffer<Elem, Allocator>(data);
2127
+ }
2128
+
2129
+ /// Create a new dynamic buffer that represents the given vector.
2130
+ /**
2131
+ * @returns <tt>dynamic_vector_buffer<Elem, Allocator>(data, max_size)</tt>.
2132
+ */
2133
+ template <typename Elem, typename Allocator>
2134
+ inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
2135
+ std::vector<Elem, Allocator>& data,
2136
+ std::size_t max_size) ASIO_NOEXCEPT
2137
+ {
2138
+ return dynamic_vector_buffer<Elem, Allocator>(data, max_size);
2139
+ }
2140
+
2141
+ /*@}*/
2142
+
2143
+ /** @defgroup buffer_copy asio::buffer_copy
2144
+ *
2145
+ * @brief The asio::buffer_copy function is used to copy bytes from a
2146
+ * source buffer (or buffer sequence) to a target buffer (or buffer sequence).
2147
+ *
2148
+ * The @c buffer_copy function is available in two forms:
2149
+ *
2150
+ * @li A 2-argument form: @c buffer_copy(target, source)
2151
+ *
2152
+ * @li A 3-argument form: @c buffer_copy(target, source, max_bytes_to_copy)
2153
+ *
2154
+ * Both forms return the number of bytes actually copied. The number of bytes
2155
+ * copied is the lesser of:
2156
+ *
2157
+ * @li @c buffer_size(target)
2158
+ *
2159
+ * @li @c buffer_size(source)
2160
+ *
2161
+ * @li @c If specified, @c max_bytes_to_copy.
2162
+ *
2163
+ * This prevents buffer overflow, regardless of the buffer sizes used in the
2164
+ * copy operation.
2165
+ *
2166
+ * Note that @ref buffer_copy is implemented in terms of @c memcpy, and
2167
+ * consequently it cannot be used to copy between overlapping memory regions.
2168
+ */
2169
+ /*@{*/
2170
+
2171
+ namespace detail {
2172
+
2173
+ inline std::size_t buffer_copy_1(const mutable_buffer& target,
2174
+ const const_buffer& source)
2175
+ {
2176
+ using namespace std; // For memcpy.
2177
+ std::size_t target_size = target.size();
2178
+ std::size_t source_size = source.size();
2179
+ std::size_t n = target_size < source_size ? target_size : source_size;
2180
+ if (n > 0)
2181
+ memcpy(target.data(), source.data(), n);
2182
+ return n;
2183
+ }
2184
+
2185
+ template <typename TargetIterator, typename SourceIterator>
2186
+ inline std::size_t buffer_copy(one_buffer, one_buffer,
2187
+ TargetIterator target_begin, TargetIterator,
2188
+ SourceIterator source_begin, SourceIterator) ASIO_NOEXCEPT
2189
+ {
2190
+ return (buffer_copy_1)(*target_begin, *source_begin);
2191
+ }
2192
+
2193
+ template <typename TargetIterator, typename SourceIterator>
2194
+ inline std::size_t buffer_copy(one_buffer, one_buffer,
2195
+ TargetIterator target_begin, TargetIterator,
2196
+ SourceIterator source_begin, SourceIterator,
2197
+ std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
2198
+ {
2199
+ return (buffer_copy_1)(*target_begin,
2200
+ asio::buffer(*source_begin, max_bytes_to_copy));
2201
+ }
2202
+
2203
+ template <typename TargetIterator, typename SourceIterator>
2204
+ std::size_t buffer_copy(one_buffer, multiple_buffers,
2205
+ TargetIterator target_begin, TargetIterator,
2206
+ SourceIterator source_begin, SourceIterator source_end,
2207
+ std::size_t max_bytes_to_copy
2208
+ = (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
2209
+ {
2210
+ std::size_t total_bytes_copied = 0;
2211
+ SourceIterator source_iter = source_begin;
2212
+
2213
+ for (mutable_buffer target_buffer(
2214
+ asio::buffer(*target_begin, max_bytes_to_copy));
2215
+ target_buffer.size() && source_iter != source_end; ++source_iter)
2216
+ {
2217
+ const_buffer source_buffer(*source_iter);
2218
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
2219
+ total_bytes_copied += bytes_copied;
2220
+ target_buffer += bytes_copied;
2221
+ }
2222
+
2223
+ return total_bytes_copied;
2224
+ }
2225
+
2226
+ template <typename TargetIterator, typename SourceIterator>
2227
+ std::size_t buffer_copy(multiple_buffers, one_buffer,
2228
+ TargetIterator target_begin, TargetIterator target_end,
2229
+ SourceIterator source_begin, SourceIterator,
2230
+ std::size_t max_bytes_to_copy
2231
+ = (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
2232
+ {
2233
+ std::size_t total_bytes_copied = 0;
2234
+ TargetIterator target_iter = target_begin;
2235
+
2236
+ for (const_buffer source_buffer(
2237
+ asio::buffer(*source_begin, max_bytes_to_copy));
2238
+ source_buffer.size() && target_iter != target_end; ++target_iter)
2239
+ {
2240
+ mutable_buffer target_buffer(*target_iter);
2241
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
2242
+ total_bytes_copied += bytes_copied;
2243
+ source_buffer += bytes_copied;
2244
+ }
2245
+
2246
+ return total_bytes_copied;
2247
+ }
2248
+
2249
+ template <typename TargetIterator, typename SourceIterator>
2250
+ std::size_t buffer_copy(multiple_buffers, multiple_buffers,
2251
+ TargetIterator target_begin, TargetIterator target_end,
2252
+ SourceIterator source_begin, SourceIterator source_end) ASIO_NOEXCEPT
2253
+ {
2254
+ std::size_t total_bytes_copied = 0;
2255
+
2256
+ TargetIterator target_iter = target_begin;
2257
+ std::size_t target_buffer_offset = 0;
2258
+
2259
+ SourceIterator source_iter = source_begin;
2260
+ std::size_t source_buffer_offset = 0;
2261
+
2262
+ while (target_iter != target_end && source_iter != source_end)
2263
+ {
2264
+ mutable_buffer target_buffer =
2265
+ mutable_buffer(*target_iter) + target_buffer_offset;
2266
+
2267
+ const_buffer source_buffer =
2268
+ const_buffer(*source_iter) + source_buffer_offset;
2269
+
2270
+ std::size_t bytes_copied = (buffer_copy_1)(target_buffer, source_buffer);
2271
+ total_bytes_copied += bytes_copied;
2272
+
2273
+ if (bytes_copied == target_buffer.size())
2274
+ {
2275
+ ++target_iter;
2276
+ target_buffer_offset = 0;
2277
+ }
2278
+ else
2279
+ target_buffer_offset += bytes_copied;
2280
+
2281
+ if (bytes_copied == source_buffer.size())
2282
+ {
2283
+ ++source_iter;
2284
+ source_buffer_offset = 0;
2285
+ }
2286
+ else
2287
+ source_buffer_offset += bytes_copied;
2288
+ }
2289
+
2290
+ return total_bytes_copied;
2291
+ }
2292
+
2293
+ template <typename TargetIterator, typename SourceIterator>
2294
+ std::size_t buffer_copy(multiple_buffers, multiple_buffers,
2295
+ TargetIterator target_begin, TargetIterator target_end,
2296
+ SourceIterator source_begin, SourceIterator source_end,
2297
+ std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
2298
+ {
2299
+ std::size_t total_bytes_copied = 0;
2300
+
2301
+ TargetIterator target_iter = target_begin;
2302
+ std::size_t target_buffer_offset = 0;
2303
+
2304
+ SourceIterator source_iter = source_begin;
2305
+ std::size_t source_buffer_offset = 0;
2306
+
2307
+ while (total_bytes_copied != max_bytes_to_copy
2308
+ && target_iter != target_end && source_iter != source_end)
2309
+ {
2310
+ mutable_buffer target_buffer =
2311
+ mutable_buffer(*target_iter) + target_buffer_offset;
2312
+
2313
+ const_buffer source_buffer =
2314
+ const_buffer(*source_iter) + source_buffer_offset;
2315
+
2316
+ std::size_t bytes_copied = (buffer_copy_1)(
2317
+ target_buffer, asio::buffer(source_buffer,
2318
+ max_bytes_to_copy - total_bytes_copied));
2319
+ total_bytes_copied += bytes_copied;
2320
+
2321
+ if (bytes_copied == target_buffer.size())
2322
+ {
2323
+ ++target_iter;
2324
+ target_buffer_offset = 0;
2325
+ }
2326
+ else
2327
+ target_buffer_offset += bytes_copied;
2328
+
2329
+ if (bytes_copied == source_buffer.size())
2330
+ {
2331
+ ++source_iter;
2332
+ source_buffer_offset = 0;
2333
+ }
2334
+ else
2335
+ source_buffer_offset += bytes_copied;
2336
+ }
2337
+
2338
+ return total_bytes_copied;
2339
+ }
2340
+
2341
+ } // namespace detail
2342
+
2343
+ /// Copies bytes from a source buffer sequence to a target buffer sequence.
2344
+ /**
2345
+ * @param target A modifiable buffer sequence representing the memory regions to
2346
+ * which the bytes will be copied.
2347
+ *
2348
+ * @param source A non-modifiable buffer sequence representing the memory
2349
+ * regions from which the bytes will be copied.
2350
+ *
2351
+ * @returns The number of bytes copied.
2352
+ *
2353
+ * @note The number of bytes copied is the lesser of:
2354
+ *
2355
+ * @li @c buffer_size(target)
2356
+ *
2357
+ * @li @c buffer_size(source)
2358
+ *
2359
+ * This function is implemented in terms of @c memcpy, and consequently it
2360
+ * cannot be used to copy between overlapping memory regions.
2361
+ */
2362
+ template <typename MutableBufferSequence, typename ConstBufferSequence>
2363
+ inline std::size_t buffer_copy(const MutableBufferSequence& target,
2364
+ const ConstBufferSequence& source) ASIO_NOEXCEPT
2365
+ {
2366
+ return detail::buffer_copy(
2367
+ detail::buffer_sequence_cardinality<MutableBufferSequence>(),
2368
+ detail::buffer_sequence_cardinality<ConstBufferSequence>(),
2369
+ asio::buffer_sequence_begin(target),
2370
+ asio::buffer_sequence_end(target),
2371
+ asio::buffer_sequence_begin(source),
2372
+ asio::buffer_sequence_end(source));
2373
+ }
2374
+
2375
+ /// Copies a limited number of bytes from a source buffer sequence to a target
2376
+ /// buffer sequence.
2377
+ /**
2378
+ * @param target A modifiable buffer sequence representing the memory regions to
2379
+ * which the bytes will be copied.
2380
+ *
2381
+ * @param source A non-modifiable buffer sequence representing the memory
2382
+ * regions from which the bytes will be copied.
2383
+ *
2384
+ * @param max_bytes_to_copy The maximum number of bytes to be copied.
2385
+ *
2386
+ * @returns The number of bytes copied.
2387
+ *
2388
+ * @note The number of bytes copied is the lesser of:
2389
+ *
2390
+ * @li @c buffer_size(target)
2391
+ *
2392
+ * @li @c buffer_size(source)
2393
+ *
2394
+ * @li @c max_bytes_to_copy
2395
+ *
2396
+ * This function is implemented in terms of @c memcpy, and consequently it
2397
+ * cannot be used to copy between overlapping memory regions.
2398
+ */
2399
+ template <typename MutableBufferSequence, typename ConstBufferSequence>
2400
+ inline std::size_t buffer_copy(const MutableBufferSequence& target,
2401
+ const ConstBufferSequence& source,
2402
+ std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
2403
+ {
2404
+ return detail::buffer_copy(
2405
+ detail::buffer_sequence_cardinality<MutableBufferSequence>(),
2406
+ detail::buffer_sequence_cardinality<ConstBufferSequence>(),
2407
+ asio::buffer_sequence_begin(target),
2408
+ asio::buffer_sequence_end(target),
2409
+ asio::buffer_sequence_begin(source),
2410
+ asio::buffer_sequence_end(source), max_bytes_to_copy);
2411
+ }
2412
+
2413
+ /*@}*/
2414
+
2415
+ } // namespace asio
2416
+
2417
+ #include "asio/detail/pop_options.hpp"
2418
+ #include "asio/detail/is_buffer_sequence.hpp"
2419
+ #include "asio/detail/push_options.hpp"
2420
+
2421
+ namespace asio {
2422
+
2423
+ /// Trait to determine whether a type satisfies the MutableBufferSequence
2424
+ /// requirements.
2425
+ template <typename T>
2426
+ struct is_mutable_buffer_sequence
2427
+ #if defined(GENERATING_DOCUMENTATION)
2428
+ : integral_constant<bool, automatically_determined>
2429
+ #else // defined(GENERATING_DOCUMENTATION)
2430
+ : asio::detail::is_buffer_sequence<T, mutable_buffer>
2431
+ #endif // defined(GENERATING_DOCUMENTATION)
2432
+ {
2433
+ };
2434
+
2435
+ /// Trait to determine whether a type satisfies the ConstBufferSequence
2436
+ /// requirements.
2437
+ template <typename T>
2438
+ struct is_const_buffer_sequence
2439
+ #if defined(GENERATING_DOCUMENTATION)
2440
+ : integral_constant<bool, automatically_determined>
2441
+ #else // defined(GENERATING_DOCUMENTATION)
2442
+ : asio::detail::is_buffer_sequence<T, const_buffer>
2443
+ #endif // defined(GENERATING_DOCUMENTATION)
2444
+ {
2445
+ };
2446
+
2447
+ #if !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2448
+ /// Trait to determine whether a type satisfies the DynamicBuffer_v1
2449
+ /// requirements.
2450
+ template <typename T>
2451
+ struct is_dynamic_buffer_v1
2452
+ #if defined(GENERATING_DOCUMENTATION)
2453
+ : integral_constant<bool, automatically_determined>
2454
+ #else // defined(GENERATING_DOCUMENTATION)
2455
+ : asio::detail::is_dynamic_buffer_v1<T>
2456
+ #endif // defined(GENERATING_DOCUMENTATION)
2457
+ {
2458
+ };
2459
+ #endif // !defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2460
+
2461
+ /// Trait to determine whether a type satisfies the DynamicBuffer_v2
2462
+ /// requirements.
2463
+ template <typename T>
2464
+ struct is_dynamic_buffer_v2
2465
+ #if defined(GENERATING_DOCUMENTATION)
2466
+ : integral_constant<bool, automatically_determined>
2467
+ #else // defined(GENERATING_DOCUMENTATION)
2468
+ : asio::detail::is_dynamic_buffer_v2<T>
2469
+ #endif // defined(GENERATING_DOCUMENTATION)
2470
+ {
2471
+ };
2472
+
2473
+ /// Trait to determine whether a type satisfies the DynamicBuffer requirements.
2474
+ /**
2475
+ * If @c ASIO_NO_DYNAMIC_BUFFER_V1 is not defined, determines whether the
2476
+ * type satisfies the DynamicBuffer_v1 requirements. Otherwise, if @c
2477
+ * ASIO_NO_DYNAMIC_BUFFER_V1 is defined, determines whether the type
2478
+ * satisfies the DynamicBuffer_v2 requirements.
2479
+ */
2480
+ template <typename T>
2481
+ struct is_dynamic_buffer
2482
+ #if defined(GENERATING_DOCUMENTATION)
2483
+ : integral_constant<bool, automatically_determined>
2484
+ #elif defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2485
+ : asio::is_dynamic_buffer_v2<T>
2486
+ #else // defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2487
+ : asio::is_dynamic_buffer_v1<T>
2488
+ #endif // defined(ASIO_NO_DYNAMIC_BUFFER_V1)
2489
+ {
2490
+ };
2491
+
2492
+ } // namespace asio
2493
+
2494
+ #include "asio/detail/pop_options.hpp"
2495
+
2496
+ #endif // ASIO_BUFFER_HPP