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