passenger 6.0.19 → 6.0.21
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/CHANGELOG +65 -3
- data/CONTRIBUTORS +2 -0
- data/README.md +2 -2
- data/bin/passenger-install-nginx-module +4 -4
- data/build/integration_tests.rb +2 -1
- data/build/support/cxx_dependency_map.rb +155 -54
- data/dev/copy_boost_headers +21 -7
- data/dev/nginx_version_sha256 +72 -0
- data/package.json +15 -15
- data/src/agent/AgentMain.cpp +2 -8
- data/src/agent/Core/AdminPanelConnector.h +2 -3
- data/src/agent/Core/ApiServer.h +1 -1
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +8 -1
- data/src/agent/Core/Config.h +6 -3
- data/src/agent/Core/Controller/AppResponse.h +0 -1
- data/src/agent/Core/Controller/Config.h +2 -2
- data/src/agent/Core/Controller/SendRequest.cpp +2 -2
- data/src/agent/Core/CoreMain.cpp +1 -0
- data/src/agent/Core/ResponseCache.h +3 -2
- data/src/agent/Core/SecurityUpdateChecker.h +1 -1
- data/src/agent/Core/SpawningKit/Handshake/Perform.h +4 -4
- data/src/agent/Core/SpawningKit/UserSwitchingRules.h +2 -2
- data/src/agent/ExecHelper/ExecHelperMain.cpp +10 -12
- data/src/agent/FileReadHelper/FileReadHelperMain.cpp +7 -10
- data/src/agent/MainFunctions.h +38 -0
- data/src/agent/Shared/ApiServerUtils.h +3 -2
- data/src/agent/Shared/Fundamentals/Initialization.cpp +1 -1
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +2 -3
- data/src/agent/SystemMetrics/SystemMetricsMain.cpp +1 -0
- data/src/agent/TempDirToucher/TempDirToucherMain.cpp +6 -4
- data/src/agent/Watchdog/ApiServer.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +5 -12
- data/src/apache2_module/Hooks.cpp +26 -1
- data/src/cxx_supportlib/ConfigKit/Common.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringKeyTable.h +1 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +10 -1
- data/src/cxx_supportlib/IOTools/IOUtils.cpp +2 -6
- data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +3 -3
- data/src/cxx_supportlib/JsonTools/CBindings.cpp +0 -2
- data/src/cxx_supportlib/JsonTools/JsonUtils.h +4 -4
- data/src/cxx_supportlib/LoggingKit/Context.h +16 -21
- data/src/cxx_supportlib/LoggingKit/Forward.h +0 -2
- data/src/cxx_supportlib/LoggingKit/Implementation.cpp +36 -72
- data/src/cxx_supportlib/MemoryKit/mbuf.cpp +12 -4
- data/src/cxx_supportlib/MemoryKit/mbuf.h +1 -1
- data/src/cxx_supportlib/ProcessManagement/Utils.cpp +1 -1
- data/src/cxx_supportlib/ResourceLocator.h +1 -1
- data/src/cxx_supportlib/SecurityKit/Crypto.cpp +3 -94
- data/src/cxx_supportlib/SecurityKit/Crypto.h +0 -8
- data/src/cxx_supportlib/ServerKit/Context.h +6 -0
- data/src/cxx_supportlib/ServerKit/Errors.h +3 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +99 -64
- data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +4 -1
- data/src/cxx_supportlib/ServerKit/HttpRequest.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpServer.h +3 -2
- data/src/cxx_supportlib/ServerKit/llerrors.h +84 -0
- data/src/cxx_supportlib/ServerKit/llhttp.c +10168 -0
- data/src/cxx_supportlib/ServerKit/llhttp.h +903 -0
- data/src/cxx_supportlib/ServerKit/llhttp_api.c +510 -0
- data/src/cxx_supportlib/ServerKit/llhttp_http.c +170 -0
- data/src/cxx_supportlib/ServerKit/llversion.h +12 -0
- data/src/cxx_supportlib/ServerKit/url_parser.c +574 -0
- data/src/cxx_supportlib/ServerKit/url_parser.h +74 -0
- data/src/cxx_supportlib/StaticString.h +3 -1
- data/src/cxx_supportlib/StrIntTools/DateParsing.h +1 -1
- data/src/cxx_supportlib/StrIntTools/StrIntUtils.cpp +12 -3
- data/src/cxx_supportlib/StrIntTools/StrIntUtils.h +5 -0
- data/src/cxx_supportlib/SystemTools/SystemMetricsCollector.h +2 -2
- data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +14 -14
- data/src/cxx_supportlib/SystemTools/UserDatabase.h +6 -10
- data/src/cxx_supportlib/Utils/AnsiColorConstants.h +11 -9
- data/src/cxx_supportlib/Utils.cpp +1 -1
- data/src/cxx_supportlib/oxt/implementation.cpp +1 -2
- data/src/cxx_supportlib/oxt/system_calls.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +194 -56
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +34 -42
- data/src/cxx_supportlib/vendor-modified/boost/asio/append.hpp +10 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +21 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +26 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +26 -43
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +30 -52
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +282 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +178 -863
- data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +64 -98
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +17 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +18 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +30 -42
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +65 -96
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +20 -29
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +36 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +31 -44
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +73 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +34 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +108 -151
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +6 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +6 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +30 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +50 -76
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +13 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +23 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +20 -29
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +97 -299
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +97 -288
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +90 -288
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +551 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +365 -290
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +29 -39
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -39
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +33 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -39
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +25 -85
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +8 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +60 -272
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +52 -79
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +11 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +37 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +302 -262
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +12 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +2 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +5 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +21 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +129 -563
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +3 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +2 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +21 -97
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +155 -963
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +3 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +2 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +41 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +40 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +20 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +20 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/exception.hpp +2 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +8 -60
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +3 -43
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +1 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +9 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +41 -104
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +9 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +101 -123
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +13 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +17 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_descriptor_service.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_file_service.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_service.ipp +69 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/io_uring_socket_service_base.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +15 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_serial_port_service.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +26 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +12 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +57 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +63 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +47 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_defer.hpp +209 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_dispatch.hpp +195 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiate_post.hpp +209 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +6 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_at_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_read_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_service.hpp +17 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_at_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_descriptor_write_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_file_service.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_null_buffers_op.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_operation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_service.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_accept_op.hpp +11 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_connect_op.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recv_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvfrom_op.hpp +7 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_recvmsg_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_send_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_sendto_op.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service.hpp +11 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_socket_service_base.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_uring_wait_op.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +7 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +20 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/limits.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +13 -43
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +4 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_serial_port_service.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +61 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +37 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +89 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +41 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +40 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +41 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +41 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +41 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +40 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +20 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +135 -38
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +37 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +4 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_task.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +20 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +12 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +104 -90
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +20 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +7 -117
- data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +36 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +34 -112
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +268 -991
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +296 -536
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +232 -409
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +20 -73
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +30 -72
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +24 -170
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +2 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +240 -398
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +20 -73
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +149 -296
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +56 -59
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +149 -296
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +1 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +1 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +59 -43
- data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +56 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +20 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +56 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +56 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +25 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/concurrent_channel.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +10 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_message.hpp +27 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +193 -38
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_payload.hpp +143 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +24 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +77 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +20 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +50 -50
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/has_signature.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +46 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +33 -96
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/channel_error.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +62 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +48 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +56 -60
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +18 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +27 -31
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +15 -21
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/file_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +10 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +10 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +37 -100
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +99 -107
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +66 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +55 -178
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +55 -178
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancellation_signal.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +123 -73
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +84 -234
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect_pipe.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +32 -97
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +73 -31
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +5 -58
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +3 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +60 -43
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +39 -56
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +36 -98
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +206 -429
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +60 -206
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +456 -970
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +43 -411
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +207 -423
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +19 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +32 -109
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +79 -425
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +213 -427
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +58 -194
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +91 -120
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +33 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +26 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +28 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +13 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +16 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +33 -42
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +13 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +15 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +26 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +46 -76
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +17 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +9 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +10 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +18 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +9 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +24 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_contiguous_iterator.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/seq_packet_protocol.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +3 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +29 -105
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +21 -29
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +24 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +36 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +176 -333
- data/src/cxx_supportlib/vendor-modified/boost/asio/prepend.hpp +11 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +57 -70
- data/src/cxx_supportlib/vendor-modified/boost/asio/random_access_file.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +136 -168
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +35 -52
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +256 -298
- data/src/cxx_supportlib/vendor-modified/boost/asio/readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/recycling_allocator.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +7 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +35 -47
- data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +108 -246
- data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +70 -79
- data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_base.hpp +173 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +127 -161
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +3 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +3 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +16 -75
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +15 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +51 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +91 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/stream_file.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +62 -62
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +35 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +91 -273
- data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +15 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +16 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +20 -26
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +22 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +22 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +6 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +15 -21
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +8 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +122 -146
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +34 -50
- data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -28
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +2 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +0 -49
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +107 -40
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +32 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +7 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +26 -27
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +122 -35
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +2 -60
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +230 -1740
- data/src/cxx_supportlib/vendor-modified/boost/bind/{bind_cc.hpp → detail/bind_cc.hpp} +20 -20
- data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf2_cc.hpp +210 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/detail/bind_mf_cc.hpp +405 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/detail/integer_sequence.hpp +111 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/detail/tuple_for_each.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +140 -290
- data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +3 -16
- data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +0 -279
- data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/is_evenly_divisible_by.hpp +1 -7
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/requires_cxx11.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/chrono/system_clocks.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +8 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +16 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +16 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +18 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +27 -29
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +0 -29
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +144 -145
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +48 -49
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +14 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +22 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +71 -69
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +48 -48
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +165 -153
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +162 -163
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +48 -12
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +6 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +44 -46
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +18 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +28 -28
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +83 -84
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +77 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +81 -85
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +231 -233
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +86 -86
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +107 -110
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +9 -11
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +29 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +80 -82
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +81 -81
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +24 -26
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +147 -122
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +109 -110
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +32 -32
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +165 -194
- data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +263 -199
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_integral.hpp +146 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +296 -61
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple_like.hpp +62 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/mulx.hpp +79 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +38 -124
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +27 -20
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +8 -40
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_tuple_like.hpp +36 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/core/alignof.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +22 -8
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +362 -31
- data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +29 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/is_same.hpp +39 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/lwt_unattended.hpp +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_pause.hpp +71 -0
- data/src/cxx_supportlib/vendor-modified/boost/{smart_ptr → core}/detail/sp_thread_sleep.hpp +39 -21
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_yield.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/functor.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/identity.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/invoke_swap.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +10 -15
- data/src/cxx_supportlib/vendor-modified/boost/core/launder.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +33 -36
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/make_span.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/max_align.hpp +82 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/memory_resource.hpp +108 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +23 -16
- data/src/cxx_supportlib/vendor-modified/boost/core/serialization.hpp +131 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/snprintf.hpp +173 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +10 -40
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +29 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/yield_primitives.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +3 -6
- data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +6 -97
- data/src/cxx_supportlib/vendor-modified/boost/exception/current_exception_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +22 -10
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +49 -198
- data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +36 -41
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +277 -420
- data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +1 -31
- data/src/cxx_supportlib/vendor-modified/boost/function.hpp +5 -61
- data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +65 -66
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +20 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +14 -15
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +277 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +11 -49
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_integral.hpp +119 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_mix.hpp +130 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +41 -41
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +14 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +6 -17
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +20 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +22 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +28 -28
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +58 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +268 -239
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +57 -58
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +14 -15
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +61 -62
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +18 -19
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +36 -37
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -34
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/io/ios_state.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +148 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -13
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +113 -131
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +612 -645
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +85 -79
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +25 -32
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +22 -29
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +21 -16
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +7 -9
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +22 -161
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +9 -12
- data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/chrono.cpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/process_cpu_clocks.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/chrono/src/thread_clock.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +10 -18
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +13 -14
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +24 -14
- data/src/cxx_supportlib/vendor-modified/boost/limits.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +20 -19
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +41 -56
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +11 -10
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +32 -34
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +5 -6
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +65 -24
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +28 -28
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +72 -23
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +81 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +22 -22
- data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +65 -66
- data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +97 -17
- data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/config.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_append.hpp +140 -4
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_defer.hpp +119 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_fold.hpp +108 -4
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_front.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_is_value_list.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_list_v.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_plus.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_rename.hpp +18 -5
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_value.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/integral.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/list.hpp +180 -3
- data/src/cxx_supportlib/vendor-modified/boost/mp11/utility.hpp +2 -96
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +3 -44
- data/src/cxx_supportlib/vendor-modified/boost/nondet_random.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/unmatched_argument.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/overloads.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/void.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/template_keyword.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msvc.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +203 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +4 -82
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/gcd_lcm.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_evenly_divisible_by.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/is_ratio.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/ratio/include.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +5 -249
- data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +30 -56
- data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_io.hpp +0 -533
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +4 -6
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +2 -11
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_unique.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -11
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +3 -12
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +14 -50
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +16 -55
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +62 -124
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +29 -52
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +3 -13
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/mutex.hpp +128 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +1 -46
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category.hpp +14 -13
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_category_impl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_message.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +1 -24
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +1 -14
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +1 -14
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +2 -12
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +0 -16
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +0 -19
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +4 -6
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +2 -26
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +1 -18
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +1 -14
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_to_unsigned.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/string_trim.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_swappable_cxx_11.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +4 -24
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_swappable.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +1 -10
- data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -6
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +2 -15
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +4 -51
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +2 -46
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +2 -29
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +4 -9
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +2 -19
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +2 -12
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +2 -10
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +8 -202
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +860 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +716 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocator_constructed.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/archive_constructed.hpp +71 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/bad_archive_exception.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/concurrent_static_asserts.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +120 -85
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +1764 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2271 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/element_type.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_map_types.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/flat_set_types.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/ignore_wshadow.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_handle.hpp +204 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_map_types.hpp +139 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/node_set_types.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/reentrancy_check.hpp +138 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/restore_wshadow.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/rw_spinlock.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +651 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/tuple_rotate_right.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +356 -1118
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/mulx.hpp +129 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/narrow_cast.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/opt_storage.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +96 -150
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialization_version.hpp +74 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_container.hpp +204 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_fca_container.hpp +156 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/serialize_tracked_address.hpp +104 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/static_assert.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/throw_exception.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +136 -19
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +171 -103
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +70 -46
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +406 -899
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +7 -13
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +895 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +699 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +253 -618
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +8 -14
- data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +2 -9
- data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/frame.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/processors/hybi13.hpp +14 -20
- data/src/helper-scripts/wsgi-loader.py +2 -2
- data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +2 -2
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +16 -5
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +3 -1
- data/src/ruby_supportlib/phusion_passenger/native_support.rb +10 -7
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +8 -10
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +14 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +4 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/libs.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/platform_info/pcre.rb +11 -12
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/app.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +4 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/lldb_controller.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger.rb +8 -8
- metadata +109 -150
- data/src/cxx_supportlib/ServerKit/http_parser.cpp +0 -2265
- data/src/cxx_supportlib/ServerKit/http_parser.h +0 -330
- data/src/cxx_supportlib/vendor-modified/boost/array.hpp +0 -456
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +0 -90
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +0 -70
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +0 -67
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +0 -101
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +0 -80
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +0 -216
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +0 -294
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +0 -406
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +0 -1254
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +0 -498
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +0 -154
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +0 -111
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +0 -130
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +0 -263
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +0 -235
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +0 -92
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +0 -296
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +0 -38
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +0 -101
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +0 -287
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +0 -50
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +0 -296
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +0 -318
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +0 -259
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +0 -259
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +0 -492
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +0 -256
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +0 -459
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +0 -106
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +0 -113
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +0 -300
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +0 -275
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +0 -300
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +0 -116
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +0 -116
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +0 -236
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +0 -236
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +0 -110
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +0 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +0 -495
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +0 -462
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +0 -581
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +0 -563
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +0 -41
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +0 -147
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +0 -39
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +0 -39
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_windows.hpp +0 -201
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_windows.hpp +0 -67
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_caps_windows.hpp +0 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_windows.hpp +0 -179
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +0 -228
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +0 -441
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_template.hpp +0 -345
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_cc.hpp +0 -103
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_template.hpp +0 -1047
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +0 -130
- data/src/cxx_supportlib/vendor-modified/boost/bind/storage.hpp +0 -475
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +0 -71
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -1278
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +0 -133
- data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +0 -21
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/function_iterate.hpp +0 -16
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +0 -39
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +0 -369
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/prologue.hpp +0 -26
- data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +0 -26
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +0 -89
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +0 -124
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +0 -126
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +0 -89
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +0 -367
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/ratio_io.hpp +0 -1342
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/abs.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/arithmetic.hpp +0 -22
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/comparison.hpp +0 -19
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/divides.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/equal_to.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/gcd.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/greater_equal.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/lcm.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/less_equal.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/minus.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/negate.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/not_equal_to.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/numeric_cast.hpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/plus.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_c_tag.hpp +0 -25
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/rational_constant.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/sign.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/ratio/mpl/times.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_thread_pause.hpp +0 -51
- data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +0 -17
- data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +0 -278
- data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +0 -297
- data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +0 -265
- data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +0 -100
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -58
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +0 -118
- data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +0 -80
- data/src/cxx_supportlib/vendor-modified/boost/typeof/message.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +0 -121
- data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +0 -60
- data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +0 -38
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +0 -50
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +0 -135
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +0 -61
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +0 -32
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +0 -160
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +0 -149
- data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +0 -27
- data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +0 -37
- data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +0 -187
- data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +0 -29
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +0 -166
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +0 -321
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +0 -471
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +0 -621
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +0 -171
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +0 -1921
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +0 -64
- /data/dev/{webpacketpp.patch → websocketpp.patch} +0 -0
|
@@ -0,0 +1,1764 @@
|
|
|
1
|
+
/* Fast open-addressing concurrent hash table.
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2023-2024 Joaquin M Lopez Munoz.
|
|
4
|
+
* Copyright 2024 Braden Ganetsky.
|
|
5
|
+
* Distributed under the Boost Software License, Version 1.0.
|
|
6
|
+
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
7
|
+
* http://www.boost.org/LICENSE_1_0.txt)
|
|
8
|
+
*
|
|
9
|
+
* See https://www.boost.org/libs/unordered for library home page.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#ifndef BOOST_UNORDERED_DETAIL_FOA_CONCURRENT_TABLE_HPP
|
|
13
|
+
#define BOOST_UNORDERED_DETAIL_FOA_CONCURRENT_TABLE_HPP
|
|
14
|
+
|
|
15
|
+
#include <atomic>
|
|
16
|
+
#include <boost/assert.hpp>
|
|
17
|
+
#include <boost/config.hpp>
|
|
18
|
+
#include <boost/core/ignore_unused.hpp>
|
|
19
|
+
#include <boost/core/no_exceptions_support.hpp>
|
|
20
|
+
#include <boost/core/serialization.hpp>
|
|
21
|
+
#include <boost/cstdint.hpp>
|
|
22
|
+
#include <boost/mp11/tuple.hpp>
|
|
23
|
+
#include <boost/throw_exception.hpp>
|
|
24
|
+
#include <boost/unordered/detail/archive_constructed.hpp>
|
|
25
|
+
#include <boost/unordered/detail/bad_archive_exception.hpp>
|
|
26
|
+
#include <boost/unordered/detail/foa/core.hpp>
|
|
27
|
+
#include <boost/unordered/detail/foa/reentrancy_check.hpp>
|
|
28
|
+
#include <boost/unordered/detail/foa/rw_spinlock.hpp>
|
|
29
|
+
#include <boost/unordered/detail/foa/tuple_rotate_right.hpp>
|
|
30
|
+
#include <boost/unordered/detail/serialization_version.hpp>
|
|
31
|
+
#include <boost/unordered/detail/static_assert.hpp>
|
|
32
|
+
#include <boost/unordered/detail/type_traits.hpp>
|
|
33
|
+
#include <cstddef>
|
|
34
|
+
#include <functional>
|
|
35
|
+
#include <initializer_list>
|
|
36
|
+
#include <iterator>
|
|
37
|
+
#include <memory>
|
|
38
|
+
#include <new>
|
|
39
|
+
#include <type_traits>
|
|
40
|
+
#include <tuple>
|
|
41
|
+
#include <utility>
|
|
42
|
+
|
|
43
|
+
#if !defined(BOOST_UNORDERED_DISABLE_PARALLEL_ALGORITHMS)
|
|
44
|
+
#if defined(BOOST_UNORDERED_ENABLE_PARALLEL_ALGORITHMS)|| \
|
|
45
|
+
!defined(BOOST_NO_CXX17_HDR_EXECUTION)
|
|
46
|
+
#define BOOST_UNORDERED_PARALLEL_ALGORITHMS
|
|
47
|
+
#endif
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
51
|
+
#include <algorithm>
|
|
52
|
+
#include <execution>
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
namespace boost{
|
|
56
|
+
namespace unordered{
|
|
57
|
+
namespace detail{
|
|
58
|
+
|
|
59
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
60
|
+
|
|
61
|
+
template<typename ExecutionPolicy>
|
|
62
|
+
using is_execution_policy=std::is_execution_policy<
|
|
63
|
+
typename std::remove_cv<
|
|
64
|
+
typename std::remove_reference<ExecutionPolicy>::type
|
|
65
|
+
>::type
|
|
66
|
+
>;
|
|
67
|
+
|
|
68
|
+
#else
|
|
69
|
+
|
|
70
|
+
template<typename ExecutionPolicy>
|
|
71
|
+
using is_execution_policy=std::false_type;
|
|
72
|
+
|
|
73
|
+
#endif
|
|
74
|
+
|
|
75
|
+
namespace foa{
|
|
76
|
+
|
|
77
|
+
static constexpr std::size_t cacheline_size=64;
|
|
78
|
+
|
|
79
|
+
template<typename T,std::size_t N>
|
|
80
|
+
class cache_aligned_array
|
|
81
|
+
{
|
|
82
|
+
public:
|
|
83
|
+
cache_aligned_array(){for(std::size_t n=0;n<N;)::new (data(n++)) T();}
|
|
84
|
+
~cache_aligned_array(){for(auto n=N;n>0;)data(n--)->~T();}
|
|
85
|
+
cache_aligned_array(const cache_aligned_array&)=delete;
|
|
86
|
+
cache_aligned_array& operator=(const cache_aligned_array&)=delete;
|
|
87
|
+
|
|
88
|
+
T& operator[](std::size_t pos)noexcept{return *data(pos);}
|
|
89
|
+
|
|
90
|
+
private:
|
|
91
|
+
static constexpr std::size_t element_offset=
|
|
92
|
+
(sizeof(T)+cacheline_size-1)/cacheline_size*cacheline_size;
|
|
93
|
+
|
|
94
|
+
BOOST_UNORDERED_STATIC_ASSERT(alignof(T)<=cacheline_size);
|
|
95
|
+
|
|
96
|
+
T* data(std::size_t pos)noexcept
|
|
97
|
+
{
|
|
98
|
+
return reinterpret_cast<T*>(
|
|
99
|
+
(reinterpret_cast<uintptr_t>(&buf)+cacheline_size-1)/
|
|
100
|
+
cacheline_size*cacheline_size
|
|
101
|
+
+pos*element_offset);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
unsigned char buf[element_offset*N+cacheline_size-1];
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
template<typename Mutex,std::size_t N>
|
|
108
|
+
class multimutex
|
|
109
|
+
{
|
|
110
|
+
public:
|
|
111
|
+
constexpr std::size_t size()const noexcept{return N;}
|
|
112
|
+
|
|
113
|
+
Mutex& operator[](std::size_t pos)noexcept
|
|
114
|
+
{
|
|
115
|
+
BOOST_ASSERT(pos<N);
|
|
116
|
+
return mutexes[pos];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
void lock()noexcept{for(std::size_t n=0;n<N;)mutexes[n++].lock();}
|
|
120
|
+
void unlock()noexcept{for(auto n=N;n>0;)mutexes[--n].unlock();}
|
|
121
|
+
|
|
122
|
+
private:
|
|
123
|
+
cache_aligned_array<Mutex,N> mutexes;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/* std::shared_lock is C++14 */
|
|
127
|
+
|
|
128
|
+
template<typename Mutex>
|
|
129
|
+
class shared_lock
|
|
130
|
+
{
|
|
131
|
+
public:
|
|
132
|
+
shared_lock(Mutex& m_)noexcept:m(m_){m.lock_shared();}
|
|
133
|
+
~shared_lock()noexcept{if(owns)m.unlock_shared();}
|
|
134
|
+
|
|
135
|
+
/* not used but VS in pre-C++17 mode needs to see it for RVO */
|
|
136
|
+
shared_lock(const shared_lock&);
|
|
137
|
+
|
|
138
|
+
void lock(){BOOST_ASSERT(!owns);m.lock_shared();owns=true;}
|
|
139
|
+
void unlock(){BOOST_ASSERT(owns);m.unlock_shared();owns=false;}
|
|
140
|
+
|
|
141
|
+
private:
|
|
142
|
+
Mutex &m;
|
|
143
|
+
bool owns=true;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
/* VS in pre-C++17 mode can't implement RVO for std::lock_guard due to
|
|
147
|
+
* its copy constructor being deleted.
|
|
148
|
+
*/
|
|
149
|
+
|
|
150
|
+
template<typename Mutex>
|
|
151
|
+
class lock_guard
|
|
152
|
+
{
|
|
153
|
+
public:
|
|
154
|
+
lock_guard(Mutex& m_)noexcept:m(m_){m.lock();}
|
|
155
|
+
~lock_guard()noexcept{m.unlock();}
|
|
156
|
+
|
|
157
|
+
/* not used but VS in pre-C++17 mode needs to see it for RVO */
|
|
158
|
+
lock_guard(const lock_guard&);
|
|
159
|
+
|
|
160
|
+
private:
|
|
161
|
+
Mutex &m;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/* inspired by boost/multi_index/detail/scoped_bilock.hpp */
|
|
165
|
+
|
|
166
|
+
template<typename Mutex>
|
|
167
|
+
class scoped_bilock
|
|
168
|
+
{
|
|
169
|
+
public:
|
|
170
|
+
scoped_bilock(Mutex& m1,Mutex& m2)noexcept
|
|
171
|
+
{
|
|
172
|
+
bool mutex_lt=std::less<Mutex*>{}(&m1,&m2);
|
|
173
|
+
|
|
174
|
+
pm1=mutex_lt?&m1:&m2;
|
|
175
|
+
pm1->lock();
|
|
176
|
+
if(&m1==&m2){
|
|
177
|
+
pm2=nullptr;
|
|
178
|
+
}
|
|
179
|
+
else{
|
|
180
|
+
pm2=mutex_lt?&m2:&m1;
|
|
181
|
+
pm2->lock();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* not used but VS in pre-C++17 mode needs to see it for RVO */
|
|
186
|
+
scoped_bilock(const scoped_bilock&);
|
|
187
|
+
|
|
188
|
+
~scoped_bilock()noexcept
|
|
189
|
+
{
|
|
190
|
+
if(pm2)pm2->unlock();
|
|
191
|
+
pm1->unlock();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private:
|
|
195
|
+
Mutex *pm1,*pm2;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/* use atomics for group metadata storage */
|
|
199
|
+
|
|
200
|
+
template<typename Integral>
|
|
201
|
+
struct atomic_integral
|
|
202
|
+
{
|
|
203
|
+
operator Integral()const{return n.load(std::memory_order_relaxed);}
|
|
204
|
+
void operator=(Integral m){n.store(m,std::memory_order_relaxed);}
|
|
205
|
+
void operator|=(Integral m){n.fetch_or(m,std::memory_order_relaxed);}
|
|
206
|
+
void operator&=(Integral m){n.fetch_and(m,std::memory_order_relaxed);}
|
|
207
|
+
|
|
208
|
+
atomic_integral& operator=(atomic_integral const& rhs) {
|
|
209
|
+
n.store(rhs.n.load(std::memory_order_relaxed),std::memory_order_relaxed);
|
|
210
|
+
return *this;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
std::atomic<Integral> n;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
/* Group-level concurrency protection. It provides a rw mutex plus an
|
|
217
|
+
* atomic insertion counter for optimistic insertion (see
|
|
218
|
+
* unprotected_norehash_emplace_or_visit).
|
|
219
|
+
*/
|
|
220
|
+
|
|
221
|
+
struct group_access
|
|
222
|
+
{
|
|
223
|
+
using mutex_type=rw_spinlock;
|
|
224
|
+
using shared_lock_guard=shared_lock<mutex_type>;
|
|
225
|
+
using exclusive_lock_guard=lock_guard<mutex_type>;
|
|
226
|
+
using insert_counter_type=std::atomic<boost::uint32_t>;
|
|
227
|
+
|
|
228
|
+
shared_lock_guard shared_access(){return shared_lock_guard{m};}
|
|
229
|
+
exclusive_lock_guard exclusive_access(){return exclusive_lock_guard{m};}
|
|
230
|
+
insert_counter_type& insert_counter(){return cnt;}
|
|
231
|
+
|
|
232
|
+
private:
|
|
233
|
+
mutex_type m;
|
|
234
|
+
insert_counter_type cnt{0};
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
template<std::size_t Size>
|
|
238
|
+
group_access* dummy_group_accesses()
|
|
239
|
+
{
|
|
240
|
+
/* Default group_access array to provide to empty containers without
|
|
241
|
+
* incurring dynamic allocation. Mutexes won't actually ever be used,
|
|
242
|
+
* (no successful reduced hash match) and insertion counters won't ever
|
|
243
|
+
* be incremented (insertions won't succeed as capacity()==0).
|
|
244
|
+
*/
|
|
245
|
+
|
|
246
|
+
static group_access accesses[Size];
|
|
247
|
+
|
|
248
|
+
return accesses;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* subclasses table_arrays to add an additional group_access array */
|
|
252
|
+
|
|
253
|
+
template<typename Value,typename Group,typename SizePolicy,typename Allocator>
|
|
254
|
+
struct concurrent_table_arrays:table_arrays<Value,Group,SizePolicy,Allocator>
|
|
255
|
+
{
|
|
256
|
+
using group_access_allocator_type=
|
|
257
|
+
typename boost::allocator_rebind<Allocator,group_access>::type;
|
|
258
|
+
using group_access_pointer=
|
|
259
|
+
typename boost::allocator_pointer<group_access_allocator_type>::type;
|
|
260
|
+
|
|
261
|
+
using super=table_arrays<Value,Group,SizePolicy,Allocator>;
|
|
262
|
+
using allocator_type=typename super::allocator_type;
|
|
263
|
+
|
|
264
|
+
concurrent_table_arrays(const super& arrays,group_access_pointer pga):
|
|
265
|
+
super{arrays},group_accesses_{pga}{}
|
|
266
|
+
|
|
267
|
+
group_access* group_accesses()const noexcept{
|
|
268
|
+
return boost::to_address(group_accesses_);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
static concurrent_table_arrays new_(allocator_type al,std::size_t n)
|
|
272
|
+
{
|
|
273
|
+
super x{super::new_(al,n)};
|
|
274
|
+
BOOST_TRY{
|
|
275
|
+
return new_group_access(group_access_allocator_type(al),x);
|
|
276
|
+
}
|
|
277
|
+
BOOST_CATCH(...){
|
|
278
|
+
super::delete_(al,x);
|
|
279
|
+
BOOST_RETHROW
|
|
280
|
+
}
|
|
281
|
+
BOOST_CATCH_END
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
static void set_group_access(
|
|
285
|
+
group_access_allocator_type al,concurrent_table_arrays& arrays)
|
|
286
|
+
{
|
|
287
|
+
set_group_access(
|
|
288
|
+
al,arrays,std::is_same<group_access*,group_access_pointer>{});
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
static void set_group_access(
|
|
292
|
+
group_access_allocator_type al,
|
|
293
|
+
concurrent_table_arrays& arrays,
|
|
294
|
+
std::false_type /* fancy pointers */)
|
|
295
|
+
{
|
|
296
|
+
arrays.group_accesses_=
|
|
297
|
+
boost::allocator_allocate(al,arrays.groups_size_mask+1);
|
|
298
|
+
|
|
299
|
+
for(std::size_t i=0;i<arrays.groups_size_mask+1;++i){
|
|
300
|
+
::new (arrays.group_accesses()+i) group_access();
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
static void set_group_access(
|
|
305
|
+
group_access_allocator_type al,
|
|
306
|
+
concurrent_table_arrays& arrays,
|
|
307
|
+
std::true_type /* optimize when elements() is null */)
|
|
308
|
+
{
|
|
309
|
+
if(!arrays.elements()){
|
|
310
|
+
arrays.group_accesses_=
|
|
311
|
+
dummy_group_accesses<SizePolicy::min_size()>();
|
|
312
|
+
} else {
|
|
313
|
+
set_group_access(al,arrays,std::false_type{});
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
static concurrent_table_arrays new_group_access(
|
|
318
|
+
group_access_allocator_type al,const super& x)
|
|
319
|
+
{
|
|
320
|
+
concurrent_table_arrays arrays{x,nullptr};
|
|
321
|
+
set_group_access(al,arrays);
|
|
322
|
+
return arrays;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
static void delete_(allocator_type al,concurrent_table_arrays& arrays)noexcept
|
|
326
|
+
{
|
|
327
|
+
delete_group_access(group_access_allocator_type(al),arrays);
|
|
328
|
+
super::delete_(al,arrays);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
static void delete_group_access(
|
|
332
|
+
group_access_allocator_type al,concurrent_table_arrays& arrays)noexcept
|
|
333
|
+
{
|
|
334
|
+
if(arrays.elements()){
|
|
335
|
+
boost::allocator_deallocate(
|
|
336
|
+
al,arrays.group_accesses_,arrays.groups_size_mask+1);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
group_access_pointer group_accesses_;
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
struct atomic_size_control
|
|
344
|
+
{
|
|
345
|
+
static constexpr auto atomic_size_t_size=sizeof(std::atomic<std::size_t>);
|
|
346
|
+
BOOST_UNORDERED_STATIC_ASSERT(atomic_size_t_size<cacheline_size);
|
|
347
|
+
|
|
348
|
+
atomic_size_control(std::size_t ml_,std::size_t size_):
|
|
349
|
+
pad0_{},ml{ml_},pad1_{},size{size_}{}
|
|
350
|
+
atomic_size_control(const atomic_size_control& x):
|
|
351
|
+
pad0_{},ml{x.ml.load()},pad1_{},size{x.size.load()}{}
|
|
352
|
+
|
|
353
|
+
/* padding to avoid false sharing internally and with sorrounding data */
|
|
354
|
+
|
|
355
|
+
unsigned char pad0_[cacheline_size-atomic_size_t_size];
|
|
356
|
+
std::atomic<std::size_t> ml;
|
|
357
|
+
unsigned char pad1_[cacheline_size-atomic_size_t_size];
|
|
358
|
+
std::atomic<std::size_t> size;
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
/* std::swap can't be used on non-assignable atomics */
|
|
362
|
+
|
|
363
|
+
inline void
|
|
364
|
+
swap_atomic_size_t(std::atomic<std::size_t>& x,std::atomic<std::size_t>& y)
|
|
365
|
+
{
|
|
366
|
+
std::size_t tmp=x;
|
|
367
|
+
x=static_cast<std::size_t>(y);
|
|
368
|
+
y=tmp;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
inline void swap(atomic_size_control& x,atomic_size_control& y)
|
|
372
|
+
{
|
|
373
|
+
swap_atomic_size_t(x.ml,y.ml);
|
|
374
|
+
swap_atomic_size_t(x.size,y.size);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/* foa::concurrent_table serves as the foundation for end-user concurrent
|
|
378
|
+
* hash containers.
|
|
379
|
+
*
|
|
380
|
+
* The exposed interface (completed by the wrapping containers) is not that
|
|
381
|
+
* of a regular container (in fact, it does not model Container as understood
|
|
382
|
+
* by the C++ standard):
|
|
383
|
+
*
|
|
384
|
+
* - Iterators are not provided as they are not suitable for concurrent
|
|
385
|
+
* scenarios.
|
|
386
|
+
* - As a consequence, composite operations with regular containers
|
|
387
|
+
* (like, for instance, looking up an element and modifying it), must
|
|
388
|
+
* be provided natively without any intervening iterator/accesor.
|
|
389
|
+
* Visitation is a core concept in this design, either on its own (eg.
|
|
390
|
+
* visit(k) locates the element with key k *and* accesses it) or as part
|
|
391
|
+
* of a native composite operation (eg. try_emplace_or_visit). Visitation
|
|
392
|
+
* is constant or mutating depending on whether the used table function is
|
|
393
|
+
* const or not.
|
|
394
|
+
* - The API provides member functions for all the meaningful composite
|
|
395
|
+
* operations of the form "X (and|or) Y", where X, Y are one of the
|
|
396
|
+
* primitives FIND, ACCESS, INSERT or ERASE.
|
|
397
|
+
* - Parallel versions of [c]visit_all(f) and erase_if(f) are provided based
|
|
398
|
+
* on C++17 stdlib parallel algorithms.
|
|
399
|
+
*
|
|
400
|
+
* Consult boost::concurrent_flat_(map|set) docs for the full API reference.
|
|
401
|
+
* Heterogeneous lookup is suported by default, that is, without checking for
|
|
402
|
+
* any ::is_transparent typedefs --this checking is done by the wrapping
|
|
403
|
+
* containers.
|
|
404
|
+
*
|
|
405
|
+
* Thread-safe concurrency is implemented using a two-level lock system:
|
|
406
|
+
*
|
|
407
|
+
* - A first container-level lock is implemented with an array of
|
|
408
|
+
* rw spinlocks acting as a single rw mutex with very little
|
|
409
|
+
* cache-coherence traffic on read (each thread is assigned a different
|
|
410
|
+
* spinlock in the array). Container-level write locking is only used for
|
|
411
|
+
* rehashing and other container-wide operations (assignment, swap, etc.)
|
|
412
|
+
* - Each group of slots has an associated rw spinlock. A thread holds
|
|
413
|
+
* at most one group lock at any given time. Lookup is implemented in
|
|
414
|
+
* a (groupwise) lock-free manner until a reduced hash match is found, in
|
|
415
|
+
* which case the relevant group is locked and the slot is double-checked
|
|
416
|
+
* for occupancy and compared with the key.
|
|
417
|
+
* - Each group has also an associated so-called insertion counter used for
|
|
418
|
+
* the following optimistic insertion algorithm:
|
|
419
|
+
* - The value of the insertion counter for the initial group in the probe
|
|
420
|
+
* sequence is locally recorded (let's call this value c0).
|
|
421
|
+
* - Lookup is as described above. If lookup finds no equivalent element,
|
|
422
|
+
* search for an available slot for insertion successively locks/unlocks
|
|
423
|
+
* each group in the probing sequence.
|
|
424
|
+
* - When an available slot is located, it is preemptively occupied (its
|
|
425
|
+
* reduced hash value is set) and the insertion counter is atomically
|
|
426
|
+
* incremented: if no other thread has incremented the counter during the
|
|
427
|
+
* whole operation (which is checked by comparing with c0), then we're
|
|
428
|
+
* good to go and complete the insertion, otherwise we roll back and
|
|
429
|
+
* start over.
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
template<typename,typename,typename,typename>
|
|
433
|
+
class table; /* concurrent/non-concurrent interop */
|
|
434
|
+
|
|
435
|
+
template <typename TypePolicy,typename Hash,typename Pred,typename Allocator>
|
|
436
|
+
using concurrent_table_core_impl=table_core<
|
|
437
|
+
TypePolicy,group15<atomic_integral>,concurrent_table_arrays,
|
|
438
|
+
atomic_size_control,Hash,Pred,Allocator>;
|
|
439
|
+
|
|
440
|
+
#include <boost/unordered/detail/foa/ignore_wshadow.hpp>
|
|
441
|
+
|
|
442
|
+
#if defined(BOOST_MSVC)
|
|
443
|
+
#pragma warning(push)
|
|
444
|
+
#pragma warning(disable:4714) /* marked as __forceinline not inlined */
|
|
445
|
+
#endif
|
|
446
|
+
|
|
447
|
+
template<typename TypePolicy,typename Hash,typename Pred,typename Allocator>
|
|
448
|
+
class concurrent_table:
|
|
449
|
+
concurrent_table_core_impl<TypePolicy,Hash,Pred,Allocator>
|
|
450
|
+
{
|
|
451
|
+
using super=concurrent_table_core_impl<TypePolicy,Hash,Pred,Allocator>;
|
|
452
|
+
using type_policy=typename super::type_policy;
|
|
453
|
+
using group_type=typename super::group_type;
|
|
454
|
+
using super::N;
|
|
455
|
+
using prober=typename super::prober;
|
|
456
|
+
using arrays_type=typename super::arrays_type;
|
|
457
|
+
using size_ctrl_type=typename super::size_ctrl_type;
|
|
458
|
+
using compatible_nonconcurrent_table=table<TypePolicy,Hash,Pred,Allocator>;
|
|
459
|
+
friend compatible_nonconcurrent_table;
|
|
460
|
+
|
|
461
|
+
public:
|
|
462
|
+
using key_type=typename super::key_type;
|
|
463
|
+
using init_type=typename super::init_type;
|
|
464
|
+
using value_type=typename super::value_type;
|
|
465
|
+
using element_type=typename super::element_type;
|
|
466
|
+
using hasher=typename super::hasher;
|
|
467
|
+
using key_equal=typename super::key_equal;
|
|
468
|
+
using allocator_type=typename super::allocator_type;
|
|
469
|
+
using size_type=typename super::size_type;
|
|
470
|
+
static constexpr std::size_t bulk_visit_size=16;
|
|
471
|
+
|
|
472
|
+
private:
|
|
473
|
+
template<typename Value,typename T>
|
|
474
|
+
using enable_if_is_value_type=typename std::enable_if<
|
|
475
|
+
!std::is_same<init_type,value_type>::value&&
|
|
476
|
+
std::is_same<Value,value_type>::value,
|
|
477
|
+
T
|
|
478
|
+
>::type;
|
|
479
|
+
|
|
480
|
+
public:
|
|
481
|
+
concurrent_table(
|
|
482
|
+
std::size_t n=default_bucket_count,const Hash& h_=Hash(),
|
|
483
|
+
const Pred& pred_=Pred(),const Allocator& al_=Allocator()):
|
|
484
|
+
super{n,h_,pred_,al_}
|
|
485
|
+
{}
|
|
486
|
+
|
|
487
|
+
concurrent_table(const concurrent_table& x):
|
|
488
|
+
concurrent_table(x,x.exclusive_access()){}
|
|
489
|
+
concurrent_table(concurrent_table&& x):
|
|
490
|
+
concurrent_table(std::move(x),x.exclusive_access()){}
|
|
491
|
+
concurrent_table(const concurrent_table& x,const Allocator& al_):
|
|
492
|
+
concurrent_table(x,al_,x.exclusive_access()){}
|
|
493
|
+
concurrent_table(concurrent_table&& x,const Allocator& al_):
|
|
494
|
+
concurrent_table(std::move(x),al_,x.exclusive_access()){}
|
|
495
|
+
|
|
496
|
+
template<typename ArraysType>
|
|
497
|
+
concurrent_table(
|
|
498
|
+
compatible_nonconcurrent_table&& x,
|
|
499
|
+
arrays_holder<ArraysType,Allocator>&& ah):
|
|
500
|
+
super{
|
|
501
|
+
std::move(x.h()),std::move(x.pred()),std::move(x.al()),
|
|
502
|
+
[&x]{return arrays_type::new_group_access(
|
|
503
|
+
x.al(),typename arrays_type::super{
|
|
504
|
+
x.arrays.groups_size_index,x.arrays.groups_size_mask,
|
|
505
|
+
to_pointer<typename arrays_type::group_type_pointer>(
|
|
506
|
+
reinterpret_cast<group_type*>(x.arrays.groups())),
|
|
507
|
+
x.arrays.elements_});},
|
|
508
|
+
size_ctrl_type{x.size_ctrl.ml,x.size_ctrl.size}}
|
|
509
|
+
{
|
|
510
|
+
x.arrays=ah.release();
|
|
511
|
+
x.size_ctrl.ml=x.initial_max_load();
|
|
512
|
+
x.size_ctrl.size=0;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
concurrent_table(compatible_nonconcurrent_table&& x):
|
|
516
|
+
concurrent_table(std::move(x),x.make_empty_arrays())
|
|
517
|
+
{}
|
|
518
|
+
|
|
519
|
+
~concurrent_table()=default;
|
|
520
|
+
|
|
521
|
+
concurrent_table& operator=(const concurrent_table& x)
|
|
522
|
+
{
|
|
523
|
+
auto lck=exclusive_access(*this,x);
|
|
524
|
+
super::operator=(x);
|
|
525
|
+
return *this;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
concurrent_table& operator=(concurrent_table&& x)noexcept(
|
|
529
|
+
noexcept(std::declval<super&>() = std::declval<super&&>()))
|
|
530
|
+
{
|
|
531
|
+
auto lck=exclusive_access(*this,x);
|
|
532
|
+
super::operator=(std::move(x));
|
|
533
|
+
return *this;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
concurrent_table& operator=(std::initializer_list<value_type> il) {
|
|
537
|
+
auto lck=exclusive_access();
|
|
538
|
+
super::clear();
|
|
539
|
+
super::noshrink_reserve(il.size());
|
|
540
|
+
for (auto const& v : il) {
|
|
541
|
+
this->unprotected_emplace(v);
|
|
542
|
+
}
|
|
543
|
+
return *this;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
allocator_type get_allocator()const noexcept
|
|
547
|
+
{
|
|
548
|
+
auto lck=shared_access();
|
|
549
|
+
return super::get_allocator();
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
template<typename Key,typename F>
|
|
553
|
+
BOOST_FORCEINLINE std::size_t visit(const Key& x,F&& f)
|
|
554
|
+
{
|
|
555
|
+
return visit_impl(group_exclusive{},x,std::forward<F>(f));
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
template<typename Key,typename F>
|
|
559
|
+
BOOST_FORCEINLINE std::size_t visit(const Key& x,F&& f)const
|
|
560
|
+
{
|
|
561
|
+
return visit_impl(group_shared{},x,std::forward<F>(f));
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
template<typename Key,typename F>
|
|
565
|
+
BOOST_FORCEINLINE std::size_t cvisit(const Key& x,F&& f)const
|
|
566
|
+
{
|
|
567
|
+
return visit(x,std::forward<F>(f));
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
template<typename FwdIterator,typename F>
|
|
571
|
+
BOOST_FORCEINLINE
|
|
572
|
+
std::size_t visit(FwdIterator first,FwdIterator last,F&& f)
|
|
573
|
+
{
|
|
574
|
+
return bulk_visit_impl(group_exclusive{},first,last,std::forward<F>(f));
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
template<typename FwdIterator,typename F>
|
|
578
|
+
BOOST_FORCEINLINE
|
|
579
|
+
std::size_t visit(FwdIterator first,FwdIterator last,F&& f)const
|
|
580
|
+
{
|
|
581
|
+
return bulk_visit_impl(group_shared{},first,last,std::forward<F>(f));
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
template<typename FwdIterator,typename F>
|
|
585
|
+
BOOST_FORCEINLINE
|
|
586
|
+
std::size_t cvisit(FwdIterator first,FwdIterator last,F&& f)const
|
|
587
|
+
{
|
|
588
|
+
return visit(first,last,std::forward<F>(f));
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
template<typename F> std::size_t visit_all(F&& f)
|
|
592
|
+
{
|
|
593
|
+
return visit_all_impl(group_exclusive{},std::forward<F>(f));
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
template<typename F> std::size_t visit_all(F&& f)const
|
|
597
|
+
{
|
|
598
|
+
return visit_all_impl(group_shared{},std::forward<F>(f));
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
template<typename F> std::size_t cvisit_all(F&& f)const
|
|
602
|
+
{
|
|
603
|
+
return visit_all(std::forward<F>(f));
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
607
|
+
template<typename ExecutionPolicy,typename F>
|
|
608
|
+
void visit_all(ExecutionPolicy&& policy,F&& f)
|
|
609
|
+
{
|
|
610
|
+
visit_all_impl(
|
|
611
|
+
group_exclusive{},
|
|
612
|
+
std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
template<typename ExecutionPolicy,typename F>
|
|
616
|
+
void visit_all(ExecutionPolicy&& policy,F&& f)const
|
|
617
|
+
{
|
|
618
|
+
visit_all_impl(
|
|
619
|
+
group_shared{},
|
|
620
|
+
std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
template<typename ExecutionPolicy,typename F>
|
|
624
|
+
void cvisit_all(ExecutionPolicy&& policy,F&& f)const
|
|
625
|
+
{
|
|
626
|
+
visit_all(std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
627
|
+
}
|
|
628
|
+
#endif
|
|
629
|
+
|
|
630
|
+
template<typename F> bool visit_while(F&& f)
|
|
631
|
+
{
|
|
632
|
+
return visit_while_impl(group_exclusive{},std::forward<F>(f));
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
template<typename F> bool visit_while(F&& f)const
|
|
636
|
+
{
|
|
637
|
+
return visit_while_impl(group_shared{},std::forward<F>(f));
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
template<typename F> bool cvisit_while(F&& f)const
|
|
641
|
+
{
|
|
642
|
+
return visit_while(std::forward<F>(f));
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
646
|
+
template<typename ExecutionPolicy,typename F>
|
|
647
|
+
bool visit_while(ExecutionPolicy&& policy,F&& f)
|
|
648
|
+
{
|
|
649
|
+
return visit_while_impl(
|
|
650
|
+
group_exclusive{},
|
|
651
|
+
std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
template<typename ExecutionPolicy,typename F>
|
|
655
|
+
bool visit_while(ExecutionPolicy&& policy,F&& f)const
|
|
656
|
+
{
|
|
657
|
+
return visit_while_impl(
|
|
658
|
+
group_shared{},
|
|
659
|
+
std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
template<typename ExecutionPolicy,typename F>
|
|
663
|
+
bool cvisit_while(ExecutionPolicy&& policy,F&& f)const
|
|
664
|
+
{
|
|
665
|
+
return visit_while(
|
|
666
|
+
std::forward<ExecutionPolicy>(policy),std::forward<F>(f));
|
|
667
|
+
}
|
|
668
|
+
#endif
|
|
669
|
+
|
|
670
|
+
bool empty()const noexcept{return size()==0;}
|
|
671
|
+
|
|
672
|
+
std::size_t size()const noexcept
|
|
673
|
+
{
|
|
674
|
+
auto lck=shared_access();
|
|
675
|
+
return unprotected_size();
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
using super::max_size;
|
|
679
|
+
|
|
680
|
+
template<typename... Args>
|
|
681
|
+
BOOST_FORCEINLINE bool emplace(Args&&... args)
|
|
682
|
+
{
|
|
683
|
+
return construct_and_emplace(std::forward<Args>(args)...);
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/* Optimization for value_type and init_type, to avoid constructing twice */
|
|
687
|
+
template<typename Value>
|
|
688
|
+
BOOST_FORCEINLINE auto emplace(Value&& x)->typename std::enable_if<
|
|
689
|
+
detail::is_similar_to_any<Value,value_type,init_type>::value,bool>::type
|
|
690
|
+
{
|
|
691
|
+
return emplace_impl(std::forward<Value>(x));
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
/* Optimizations for maps for (k,v) to avoid eagerly constructing value */
|
|
695
|
+
template <typename K, typename V>
|
|
696
|
+
BOOST_FORCEINLINE auto emplace(K&& k, V&& v) ->
|
|
697
|
+
typename std::enable_if<is_emplace_kv_able<concurrent_table, K>::value,
|
|
698
|
+
bool>::type
|
|
699
|
+
{
|
|
700
|
+
alloc_cted_or_fwded_key_type<type_policy, Allocator, K&&> x(
|
|
701
|
+
this->al(), std::forward<K>(k));
|
|
702
|
+
return emplace_impl(
|
|
703
|
+
try_emplace_args_t{}, x.move_or_fwd(), std::forward<V>(v));
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
BOOST_FORCEINLINE bool
|
|
707
|
+
insert(const init_type& x){return emplace_impl(x);}
|
|
708
|
+
|
|
709
|
+
BOOST_FORCEINLINE bool
|
|
710
|
+
insert(init_type&& x){return emplace_impl(std::move(x));}
|
|
711
|
+
|
|
712
|
+
/* template<typename=void> tilts call ambiguities in favor of init_type */
|
|
713
|
+
|
|
714
|
+
template<typename=void>
|
|
715
|
+
BOOST_FORCEINLINE bool
|
|
716
|
+
insert(const value_type& x){return emplace_impl(x);}
|
|
717
|
+
|
|
718
|
+
template<typename=void>
|
|
719
|
+
BOOST_FORCEINLINE bool
|
|
720
|
+
insert(value_type&& x){return emplace_impl(std::move(x));}
|
|
721
|
+
|
|
722
|
+
template<typename Key,typename... Args>
|
|
723
|
+
BOOST_FORCEINLINE bool try_emplace(Key&& x,Args&&... args)
|
|
724
|
+
{
|
|
725
|
+
return emplace_impl(
|
|
726
|
+
try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
template<typename Key,typename... Args>
|
|
730
|
+
BOOST_FORCEINLINE bool try_emplace_or_visit(Key&& x,Args&&... args)
|
|
731
|
+
{
|
|
732
|
+
return emplace_or_visit_flast(
|
|
733
|
+
group_exclusive{},
|
|
734
|
+
try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
template<typename Key,typename... Args>
|
|
738
|
+
BOOST_FORCEINLINE bool try_emplace_or_cvisit(Key&& x,Args&&... args)
|
|
739
|
+
{
|
|
740
|
+
return emplace_or_visit_flast(
|
|
741
|
+
group_shared{},
|
|
742
|
+
try_emplace_args_t{},std::forward<Key>(x),std::forward<Args>(args)...);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
template<typename... Args>
|
|
746
|
+
BOOST_FORCEINLINE bool emplace_or_visit(Args&&... args)
|
|
747
|
+
{
|
|
748
|
+
return construct_and_emplace_or_visit_flast(
|
|
749
|
+
group_exclusive{},std::forward<Args>(args)...);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
template<typename... Args>
|
|
753
|
+
BOOST_FORCEINLINE bool emplace_or_cvisit(Args&&... args)
|
|
754
|
+
{
|
|
755
|
+
return construct_and_emplace_or_visit_flast(
|
|
756
|
+
group_shared{},std::forward<Args>(args)...);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
template<typename F>
|
|
760
|
+
BOOST_FORCEINLINE bool insert_or_visit(const init_type& x,F&& f)
|
|
761
|
+
{
|
|
762
|
+
return emplace_or_visit_impl(group_exclusive{},std::forward<F>(f),x);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
template<typename F>
|
|
766
|
+
BOOST_FORCEINLINE bool insert_or_cvisit(const init_type& x,F&& f)
|
|
767
|
+
{
|
|
768
|
+
return emplace_or_visit_impl(group_shared{},std::forward<F>(f),x);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
template<typename F>
|
|
772
|
+
BOOST_FORCEINLINE bool insert_or_visit(init_type&& x,F&& f)
|
|
773
|
+
{
|
|
774
|
+
return emplace_or_visit_impl(
|
|
775
|
+
group_exclusive{},std::forward<F>(f),std::move(x));
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
template<typename F>
|
|
779
|
+
BOOST_FORCEINLINE bool insert_or_cvisit(init_type&& x,F&& f)
|
|
780
|
+
{
|
|
781
|
+
return emplace_or_visit_impl(
|
|
782
|
+
group_shared{},std::forward<F>(f),std::move(x));
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
/* SFINAE tilts call ambiguities in favor of init_type */
|
|
786
|
+
|
|
787
|
+
template<typename Value,typename F>
|
|
788
|
+
BOOST_FORCEINLINE auto insert_or_visit(const Value& x,F&& f)
|
|
789
|
+
->enable_if_is_value_type<Value,bool>
|
|
790
|
+
{
|
|
791
|
+
return emplace_or_visit_impl(group_exclusive{},std::forward<F>(f),x);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
template<typename Value,typename F>
|
|
795
|
+
BOOST_FORCEINLINE auto insert_or_cvisit(const Value& x,F&& f)
|
|
796
|
+
->enable_if_is_value_type<Value,bool>
|
|
797
|
+
{
|
|
798
|
+
return emplace_or_visit_impl(group_shared{},std::forward<F>(f),x);
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
template<typename Value,typename F>
|
|
802
|
+
BOOST_FORCEINLINE auto insert_or_visit(Value&& x,F&& f)
|
|
803
|
+
->enable_if_is_value_type<Value,bool>
|
|
804
|
+
{
|
|
805
|
+
return emplace_or_visit_impl(
|
|
806
|
+
group_exclusive{},std::forward<F>(f),std::move(x));
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
template<typename Value,typename F>
|
|
810
|
+
BOOST_FORCEINLINE auto insert_or_cvisit(Value&& x,F&& f)
|
|
811
|
+
->enable_if_is_value_type<Value,bool>
|
|
812
|
+
{
|
|
813
|
+
return emplace_or_visit_impl(
|
|
814
|
+
group_shared{},std::forward<F>(f),std::move(x));
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
template<typename Key>
|
|
818
|
+
BOOST_FORCEINLINE std::size_t erase(const Key& x)
|
|
819
|
+
{
|
|
820
|
+
return erase_if(x,[](const value_type&){return true;});
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
template<typename Key,typename F>
|
|
824
|
+
BOOST_FORCEINLINE auto erase_if(const Key& x,F&& f)->typename std::enable_if<
|
|
825
|
+
!is_execution_policy<Key>::value,std::size_t>::type
|
|
826
|
+
{
|
|
827
|
+
auto lck=shared_access();
|
|
828
|
+
auto hash=this->hash_for(x);
|
|
829
|
+
std::size_t res=0;
|
|
830
|
+
unprotected_internal_visit(
|
|
831
|
+
group_exclusive{},x,this->position_for(hash),hash,
|
|
832
|
+
[&,this](group_type* pg,unsigned int n,element_type* p)
|
|
833
|
+
{
|
|
834
|
+
if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
|
|
835
|
+
super::erase(pg,n,p);
|
|
836
|
+
res=1;
|
|
837
|
+
}
|
|
838
|
+
});
|
|
839
|
+
return res;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
template<typename F>
|
|
843
|
+
std::size_t erase_if(F&& f)
|
|
844
|
+
{
|
|
845
|
+
auto lck=shared_access();
|
|
846
|
+
std::size_t res=0;
|
|
847
|
+
for_all_elements(
|
|
848
|
+
group_exclusive{},
|
|
849
|
+
[&,this](group_type* pg,unsigned int n,element_type* p){
|
|
850
|
+
if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
|
|
851
|
+
super::erase(pg,n,p);
|
|
852
|
+
++res;
|
|
853
|
+
}
|
|
854
|
+
});
|
|
855
|
+
return res;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
859
|
+
template<typename ExecutionPolicy,typename F>
|
|
860
|
+
auto erase_if(ExecutionPolicy&& policy,F&& f)->typename std::enable_if<
|
|
861
|
+
is_execution_policy<ExecutionPolicy>::value,void>::type
|
|
862
|
+
{
|
|
863
|
+
auto lck=shared_access();
|
|
864
|
+
for_all_elements(
|
|
865
|
+
group_exclusive{},std::forward<ExecutionPolicy>(policy),
|
|
866
|
+
[&,this](group_type* pg,unsigned int n,element_type* p){
|
|
867
|
+
if(f(cast_for(group_exclusive{},type_policy::value_from(*p)))){
|
|
868
|
+
super::erase(pg,n,p);
|
|
869
|
+
}
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
#endif
|
|
873
|
+
|
|
874
|
+
void swap(concurrent_table& x)
|
|
875
|
+
noexcept(noexcept(std::declval<super&>().swap(std::declval<super&>())))
|
|
876
|
+
{
|
|
877
|
+
auto lck=exclusive_access(*this,x);
|
|
878
|
+
super::swap(x);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
void clear()noexcept
|
|
882
|
+
{
|
|
883
|
+
auto lck=exclusive_access();
|
|
884
|
+
super::clear();
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
// TODO: should we accept different allocator too?
|
|
888
|
+
template<typename Hash2,typename Pred2>
|
|
889
|
+
size_type merge(concurrent_table<TypePolicy,Hash2,Pred2,Allocator>& x)
|
|
890
|
+
{
|
|
891
|
+
using merge_table_type=concurrent_table<TypePolicy,Hash2,Pred2,Allocator>;
|
|
892
|
+
using super2=typename merge_table_type::super;
|
|
893
|
+
|
|
894
|
+
// for clang
|
|
895
|
+
boost::ignore_unused<super2>();
|
|
896
|
+
|
|
897
|
+
auto lck=exclusive_access(*this,x);
|
|
898
|
+
size_type s=super::size();
|
|
899
|
+
x.super2::for_all_elements( /* super2::for_all_elements -> unprotected */
|
|
900
|
+
[&,this](group_type* pg,unsigned int n,element_type* p){
|
|
901
|
+
typename merge_table_type::erase_on_exit e{x,pg,n,p};
|
|
902
|
+
if(!unprotected_emplace(type_policy::move(*p)))e.rollback();
|
|
903
|
+
});
|
|
904
|
+
return size_type{super::size()-s};
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
template<typename Hash2,typename Pred2>
|
|
908
|
+
void merge(concurrent_table<TypePolicy,Hash2,Pred2,Allocator>&& x){merge(x);}
|
|
909
|
+
|
|
910
|
+
hasher hash_function()const
|
|
911
|
+
{
|
|
912
|
+
auto lck=shared_access();
|
|
913
|
+
return super::hash_function();
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
key_equal key_eq()const
|
|
917
|
+
{
|
|
918
|
+
auto lck=shared_access();
|
|
919
|
+
return super::key_eq();
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
template<typename Key>
|
|
923
|
+
BOOST_FORCEINLINE std::size_t count(Key&& x)const
|
|
924
|
+
{
|
|
925
|
+
return (std::size_t)contains(std::forward<Key>(x));
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
template<typename Key>
|
|
929
|
+
BOOST_FORCEINLINE bool contains(Key&& x)const
|
|
930
|
+
{
|
|
931
|
+
return visit(std::forward<Key>(x),[](const value_type&){})!=0;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
std::size_t capacity()const noexcept
|
|
935
|
+
{
|
|
936
|
+
auto lck=shared_access();
|
|
937
|
+
return super::capacity();
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
float load_factor()const noexcept
|
|
941
|
+
{
|
|
942
|
+
auto lck=shared_access();
|
|
943
|
+
if(super::capacity()==0)return 0;
|
|
944
|
+
else return float(unprotected_size())/
|
|
945
|
+
float(super::capacity());
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
using super::max_load_factor;
|
|
949
|
+
|
|
950
|
+
std::size_t max_load()const noexcept
|
|
951
|
+
{
|
|
952
|
+
auto lck=shared_access();
|
|
953
|
+
return super::max_load();
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
void rehash(std::size_t n)
|
|
957
|
+
{
|
|
958
|
+
auto lck=exclusive_access();
|
|
959
|
+
super::rehash(n);
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
void reserve(std::size_t n)
|
|
963
|
+
{
|
|
964
|
+
auto lck=exclusive_access();
|
|
965
|
+
super::reserve(n);
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
template<typename Predicate>
|
|
969
|
+
friend std::size_t erase_if(concurrent_table& x,Predicate&& pr)
|
|
970
|
+
{
|
|
971
|
+
return x.erase_if(std::forward<Predicate>(pr));
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
friend bool operator==(const concurrent_table& x,const concurrent_table& y)
|
|
975
|
+
{
|
|
976
|
+
auto lck=exclusive_access(x,y);
|
|
977
|
+
return static_cast<const super&>(x)==static_cast<const super&>(y);
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
friend bool operator!=(const concurrent_table& x,const concurrent_table& y)
|
|
981
|
+
{
|
|
982
|
+
return !(x==y);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
private:
|
|
986
|
+
template<typename,typename,typename,typename> friend class concurrent_table;
|
|
987
|
+
|
|
988
|
+
using mutex_type=rw_spinlock;
|
|
989
|
+
using multimutex_type=multimutex<mutex_type,128>; // TODO: adapt 128 to the machine
|
|
990
|
+
using shared_lock_guard=reentrancy_checked<shared_lock<mutex_type>>;
|
|
991
|
+
using exclusive_lock_guard=reentrancy_checked<lock_guard<multimutex_type>>;
|
|
992
|
+
using exclusive_bilock_guard=
|
|
993
|
+
reentrancy_bichecked<scoped_bilock<multimutex_type>>;
|
|
994
|
+
using group_shared_lock_guard=typename group_access::shared_lock_guard;
|
|
995
|
+
using group_exclusive_lock_guard=typename group_access::exclusive_lock_guard;
|
|
996
|
+
using group_insert_counter_type=typename group_access::insert_counter_type;
|
|
997
|
+
|
|
998
|
+
concurrent_table(const concurrent_table& x,exclusive_lock_guard):
|
|
999
|
+
super{x}{}
|
|
1000
|
+
concurrent_table(concurrent_table&& x,exclusive_lock_guard):
|
|
1001
|
+
super{std::move(x)}{}
|
|
1002
|
+
concurrent_table(
|
|
1003
|
+
const concurrent_table& x,const Allocator& al_,exclusive_lock_guard):
|
|
1004
|
+
super{x,al_}{}
|
|
1005
|
+
concurrent_table(
|
|
1006
|
+
concurrent_table&& x,const Allocator& al_,exclusive_lock_guard):
|
|
1007
|
+
super{std::move(x),al_}{}
|
|
1008
|
+
|
|
1009
|
+
inline shared_lock_guard shared_access()const
|
|
1010
|
+
{
|
|
1011
|
+
thread_local auto id=(++thread_counter)%mutexes.size();
|
|
1012
|
+
|
|
1013
|
+
return shared_lock_guard{this,mutexes[id]};
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
inline exclusive_lock_guard exclusive_access()const
|
|
1017
|
+
{
|
|
1018
|
+
return exclusive_lock_guard{this,mutexes};
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
static inline exclusive_bilock_guard exclusive_access(
|
|
1022
|
+
const concurrent_table& x,const concurrent_table& y)
|
|
1023
|
+
{
|
|
1024
|
+
return {&x,&y,x.mutexes,y.mutexes};
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
template<typename Hash2,typename Pred2>
|
|
1028
|
+
static inline exclusive_bilock_guard exclusive_access(
|
|
1029
|
+
const concurrent_table& x,
|
|
1030
|
+
const concurrent_table<TypePolicy,Hash2,Pred2,Allocator>& y)
|
|
1031
|
+
{
|
|
1032
|
+
return {&x,&y,x.mutexes,y.mutexes};
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
/* Tag-dispatched shared/exclusive group access */
|
|
1036
|
+
|
|
1037
|
+
using group_shared=std::false_type;
|
|
1038
|
+
using group_exclusive=std::true_type;
|
|
1039
|
+
|
|
1040
|
+
inline group_shared_lock_guard access(group_shared,std::size_t pos)const
|
|
1041
|
+
{
|
|
1042
|
+
return this->arrays.group_accesses()[pos].shared_access();
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
inline group_exclusive_lock_guard access(
|
|
1046
|
+
group_exclusive,std::size_t pos)const
|
|
1047
|
+
{
|
|
1048
|
+
return this->arrays.group_accesses()[pos].exclusive_access();
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
inline group_insert_counter_type& insert_counter(std::size_t pos)const
|
|
1052
|
+
{
|
|
1053
|
+
return this->arrays.group_accesses()[pos].insert_counter();
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
/* Const casts value_type& according to the level of group access for
|
|
1057
|
+
* safe passing to visitation functions. When type_policy is set-like,
|
|
1058
|
+
* access is always const regardless of group access.
|
|
1059
|
+
*/
|
|
1060
|
+
|
|
1061
|
+
static inline const value_type&
|
|
1062
|
+
cast_for(group_shared,value_type& x){return x;}
|
|
1063
|
+
|
|
1064
|
+
static inline typename std::conditional<
|
|
1065
|
+
std::is_same<key_type,value_type>::value,
|
|
1066
|
+
const value_type&,
|
|
1067
|
+
value_type&
|
|
1068
|
+
>::type
|
|
1069
|
+
cast_for(group_exclusive,value_type& x){return x;}
|
|
1070
|
+
|
|
1071
|
+
struct erase_on_exit
|
|
1072
|
+
{
|
|
1073
|
+
erase_on_exit(
|
|
1074
|
+
concurrent_table& x_,
|
|
1075
|
+
group_type* pg_,unsigned int pos_,element_type* p_):
|
|
1076
|
+
x(x_),pg(pg_),pos(pos_),p(p_){}
|
|
1077
|
+
~erase_on_exit(){if(!rollback_)x.super::erase(pg,pos,p);}
|
|
1078
|
+
|
|
1079
|
+
void rollback(){rollback_=true;}
|
|
1080
|
+
|
|
1081
|
+
concurrent_table &x;
|
|
1082
|
+
group_type *pg;
|
|
1083
|
+
unsigned int pos;
|
|
1084
|
+
element_type *p;
|
|
1085
|
+
bool rollback_=false;
|
|
1086
|
+
};
|
|
1087
|
+
|
|
1088
|
+
template<typename GroupAccessMode,typename Key,typename F>
|
|
1089
|
+
BOOST_FORCEINLINE std::size_t visit_impl(
|
|
1090
|
+
GroupAccessMode access_mode,const Key& x,F&& f)const
|
|
1091
|
+
{
|
|
1092
|
+
auto lck=shared_access();
|
|
1093
|
+
auto hash=this->hash_for(x);
|
|
1094
|
+
return unprotected_visit(
|
|
1095
|
+
access_mode,x,this->position_for(hash),hash,std::forward<F>(f));
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
template<typename GroupAccessMode,typename FwdIterator,typename F>
|
|
1099
|
+
BOOST_FORCEINLINE
|
|
1100
|
+
std::size_t bulk_visit_impl(
|
|
1101
|
+
GroupAccessMode access_mode,FwdIterator first,FwdIterator last,F&& f)const
|
|
1102
|
+
{
|
|
1103
|
+
auto lck=shared_access();
|
|
1104
|
+
std::size_t res=0;
|
|
1105
|
+
auto n=static_cast<std::size_t>(std::distance(first,last));
|
|
1106
|
+
while(n){
|
|
1107
|
+
auto m=n<2*bulk_visit_size?n:bulk_visit_size;
|
|
1108
|
+
res+=unprotected_bulk_visit(access_mode,first,m,std::forward<F>(f));
|
|
1109
|
+
n-=m;
|
|
1110
|
+
std::advance(
|
|
1111
|
+
first,
|
|
1112
|
+
static_cast<
|
|
1113
|
+
typename std::iterator_traits<FwdIterator>::difference_type>(m));
|
|
1114
|
+
}
|
|
1115
|
+
return res;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
template<typename GroupAccessMode,typename F>
|
|
1119
|
+
std::size_t visit_all_impl(GroupAccessMode access_mode,F&& f)const
|
|
1120
|
+
{
|
|
1121
|
+
auto lck=shared_access();
|
|
1122
|
+
std::size_t res=0;
|
|
1123
|
+
for_all_elements(access_mode,[&](element_type* p){
|
|
1124
|
+
f(cast_for(access_mode,type_policy::value_from(*p)));
|
|
1125
|
+
++res;
|
|
1126
|
+
});
|
|
1127
|
+
return res;
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
1131
|
+
template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
|
|
1132
|
+
void visit_all_impl(
|
|
1133
|
+
GroupAccessMode access_mode,ExecutionPolicy&& policy,F&& f)const
|
|
1134
|
+
{
|
|
1135
|
+
auto lck=shared_access();
|
|
1136
|
+
for_all_elements(
|
|
1137
|
+
access_mode,std::forward<ExecutionPolicy>(policy),
|
|
1138
|
+
[&](element_type* p){
|
|
1139
|
+
f(cast_for(access_mode,type_policy::value_from(*p)));
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
#endif
|
|
1143
|
+
|
|
1144
|
+
template<typename GroupAccessMode,typename F>
|
|
1145
|
+
bool visit_while_impl(GroupAccessMode access_mode,F&& f)const
|
|
1146
|
+
{
|
|
1147
|
+
auto lck=shared_access();
|
|
1148
|
+
return for_all_elements_while(access_mode,[&](element_type* p){
|
|
1149
|
+
return f(cast_for(access_mode,type_policy::value_from(*p)));
|
|
1150
|
+
});
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
1154
|
+
template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
|
|
1155
|
+
bool visit_while_impl(
|
|
1156
|
+
GroupAccessMode access_mode,ExecutionPolicy&& policy,F&& f)const
|
|
1157
|
+
{
|
|
1158
|
+
auto lck=shared_access();
|
|
1159
|
+
return for_all_elements_while(
|
|
1160
|
+
access_mode,std::forward<ExecutionPolicy>(policy),
|
|
1161
|
+
[&](element_type* p){
|
|
1162
|
+
return f(cast_for(access_mode,type_policy::value_from(*p)));
|
|
1163
|
+
});
|
|
1164
|
+
}
|
|
1165
|
+
#endif
|
|
1166
|
+
|
|
1167
|
+
template<typename GroupAccessMode,typename Key,typename F>
|
|
1168
|
+
BOOST_FORCEINLINE std::size_t unprotected_visit(
|
|
1169
|
+
GroupAccessMode access_mode,
|
|
1170
|
+
const Key& x,std::size_t pos0,std::size_t hash,F&& f)const
|
|
1171
|
+
{
|
|
1172
|
+
return unprotected_internal_visit(
|
|
1173
|
+
access_mode,x,pos0,hash,
|
|
1174
|
+
[&](group_type*,unsigned int,element_type* p)
|
|
1175
|
+
{f(cast_for(access_mode,type_policy::value_from(*p)));});
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
#if defined(BOOST_MSVC)
|
|
1179
|
+
/* warning: forcing value to bool 'true' or 'false' in bool(pred()...) */
|
|
1180
|
+
#pragma warning(push)
|
|
1181
|
+
#pragma warning(disable:4800)
|
|
1182
|
+
#endif
|
|
1183
|
+
|
|
1184
|
+
template<typename GroupAccessMode,typename Key,typename F>
|
|
1185
|
+
BOOST_FORCEINLINE std::size_t unprotected_internal_visit(
|
|
1186
|
+
GroupAccessMode access_mode,
|
|
1187
|
+
const Key& x,std::size_t pos0,std::size_t hash,F&& f)const
|
|
1188
|
+
{
|
|
1189
|
+
prober pb(pos0);
|
|
1190
|
+
do{
|
|
1191
|
+
auto pos=pb.get();
|
|
1192
|
+
auto pg=this->arrays.groups()+pos;
|
|
1193
|
+
auto mask=pg->match(hash);
|
|
1194
|
+
if(mask){
|
|
1195
|
+
auto p=this->arrays.elements()+pos*N;
|
|
1196
|
+
BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
|
|
1197
|
+
auto lck=access(access_mode,pos);
|
|
1198
|
+
do{
|
|
1199
|
+
auto n=unchecked_countr_zero(mask);
|
|
1200
|
+
if(BOOST_LIKELY(
|
|
1201
|
+
pg->is_occupied(n)&&bool(this->pred()(x,this->key_from(p[n]))))){
|
|
1202
|
+
f(pg,n,p+n);
|
|
1203
|
+
return 1;
|
|
1204
|
+
}
|
|
1205
|
+
mask&=mask-1;
|
|
1206
|
+
}while(mask);
|
|
1207
|
+
}
|
|
1208
|
+
if(BOOST_LIKELY(pg->is_not_overflowed(hash))){
|
|
1209
|
+
return 0;
|
|
1210
|
+
}
|
|
1211
|
+
}
|
|
1212
|
+
while(BOOST_LIKELY(pb.next(this->arrays.groups_size_mask)));
|
|
1213
|
+
return 0;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
template<typename GroupAccessMode,typename FwdIterator,typename F>
|
|
1217
|
+
BOOST_FORCEINLINE std::size_t unprotected_bulk_visit(
|
|
1218
|
+
GroupAccessMode access_mode,FwdIterator first,std::size_t m,F&& f)const
|
|
1219
|
+
{
|
|
1220
|
+
BOOST_ASSERT(m<2*bulk_visit_size);
|
|
1221
|
+
|
|
1222
|
+
std::size_t res=0,
|
|
1223
|
+
hashes[2*bulk_visit_size-1],
|
|
1224
|
+
positions[2*bulk_visit_size-1];
|
|
1225
|
+
int masks[2*bulk_visit_size-1];
|
|
1226
|
+
auto it=first;
|
|
1227
|
+
|
|
1228
|
+
for(auto i=m;i--;++it){
|
|
1229
|
+
auto hash=hashes[i]=this->hash_for(*it);
|
|
1230
|
+
auto pos=positions[i]=this->position_for(hash);
|
|
1231
|
+
BOOST_UNORDERED_PREFETCH(this->arrays.groups()+pos);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
for(auto i=m;i--;){
|
|
1235
|
+
auto hash=hashes[i];
|
|
1236
|
+
auto pos=positions[i];
|
|
1237
|
+
auto mask=masks[i]=(this->arrays.groups()+pos)->match(hash);
|
|
1238
|
+
if(mask){
|
|
1239
|
+
BOOST_UNORDERED_PREFETCH(this->arrays.group_accesses()+pos);
|
|
1240
|
+
BOOST_UNORDERED_PREFETCH(
|
|
1241
|
+
this->arrays.elements()+pos*N+unchecked_countr_zero(mask));
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
it=first;
|
|
1246
|
+
for(auto i=m;i--;++it){
|
|
1247
|
+
auto pos=positions[i];
|
|
1248
|
+
prober pb(pos);
|
|
1249
|
+
auto pg=this->arrays.groups()+pos;
|
|
1250
|
+
auto mask=masks[i];
|
|
1251
|
+
element_type *p;
|
|
1252
|
+
if(!mask)goto post_mask;
|
|
1253
|
+
p=this->arrays.elements()+pos*N;
|
|
1254
|
+
for(;;){
|
|
1255
|
+
{
|
|
1256
|
+
auto lck=access(access_mode,pos);
|
|
1257
|
+
do{
|
|
1258
|
+
auto n=unchecked_countr_zero(mask);
|
|
1259
|
+
if(BOOST_LIKELY(
|
|
1260
|
+
pg->is_occupied(n)&&
|
|
1261
|
+
bool(this->pred()(*it,this->key_from(p[n]))))){
|
|
1262
|
+
f(cast_for(access_mode,type_policy::value_from(p[n])));
|
|
1263
|
+
++res;
|
|
1264
|
+
goto next_key;
|
|
1265
|
+
}
|
|
1266
|
+
mask&=mask-1;
|
|
1267
|
+
}while(mask);
|
|
1268
|
+
}
|
|
1269
|
+
post_mask:
|
|
1270
|
+
do{
|
|
1271
|
+
if(BOOST_LIKELY(pg->is_not_overflowed(hashes[i]))||
|
|
1272
|
+
BOOST_UNLIKELY(!pb.next(this->arrays.groups_size_mask))){
|
|
1273
|
+
goto next_key;
|
|
1274
|
+
}
|
|
1275
|
+
pos=pb.get();
|
|
1276
|
+
pg=this->arrays.groups()+pos;
|
|
1277
|
+
mask=pg->match(hashes[i]);
|
|
1278
|
+
}while(!mask);
|
|
1279
|
+
p=this->arrays.elements()+pos*N;
|
|
1280
|
+
BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
|
|
1281
|
+
}
|
|
1282
|
+
next_key:;
|
|
1283
|
+
}
|
|
1284
|
+
return res;
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
#if defined(BOOST_MSVC)
|
|
1288
|
+
#pragma warning(pop) /* C4800 */
|
|
1289
|
+
#endif
|
|
1290
|
+
|
|
1291
|
+
std::size_t unprotected_size()const
|
|
1292
|
+
{
|
|
1293
|
+
std::size_t m=this->size_ctrl.ml;
|
|
1294
|
+
std::size_t s=this->size_ctrl.size;
|
|
1295
|
+
return s<=m?s:m;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
template<typename... Args>
|
|
1299
|
+
BOOST_FORCEINLINE bool construct_and_emplace(Args&&... args)
|
|
1300
|
+
{
|
|
1301
|
+
return construct_and_emplace_or_visit(
|
|
1302
|
+
group_shared{},[](const value_type&){},std::forward<Args>(args)...);
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
struct call_construct_and_emplace_or_visit
|
|
1306
|
+
{
|
|
1307
|
+
template<typename... Args>
|
|
1308
|
+
BOOST_FORCEINLINE bool operator()(
|
|
1309
|
+
concurrent_table* this_,Args&&... args)const
|
|
1310
|
+
{
|
|
1311
|
+
return this_->construct_and_emplace_or_visit(
|
|
1312
|
+
std::forward<Args>(args)...);
|
|
1313
|
+
}
|
|
1314
|
+
};
|
|
1315
|
+
|
|
1316
|
+
template<typename GroupAccessMode,typename... Args>
|
|
1317
|
+
BOOST_FORCEINLINE bool construct_and_emplace_or_visit_flast(
|
|
1318
|
+
GroupAccessMode access_mode,Args&&... args)
|
|
1319
|
+
{
|
|
1320
|
+
return mp11::tuple_apply(
|
|
1321
|
+
call_construct_and_emplace_or_visit{},
|
|
1322
|
+
std::tuple_cat(
|
|
1323
|
+
std::make_tuple(this,access_mode),
|
|
1324
|
+
tuple_rotate_right(std::forward_as_tuple(std::forward<Args>(args)...))
|
|
1325
|
+
)
|
|
1326
|
+
);
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
template<typename GroupAccessMode,typename F,typename... Args>
|
|
1330
|
+
BOOST_FORCEINLINE bool construct_and_emplace_or_visit(
|
|
1331
|
+
GroupAccessMode access_mode,F&& f,Args&&... args)
|
|
1332
|
+
{
|
|
1333
|
+
auto lck=shared_access();
|
|
1334
|
+
|
|
1335
|
+
alloc_cted_insert_type<type_policy,Allocator,Args...> x(
|
|
1336
|
+
this->al(),std::forward<Args>(args)...);
|
|
1337
|
+
int res=unprotected_norehash_emplace_or_visit(
|
|
1338
|
+
access_mode,std::forward<F>(f),type_policy::move(x.value()));
|
|
1339
|
+
if(BOOST_LIKELY(res>=0))return res!=0;
|
|
1340
|
+
|
|
1341
|
+
lck.unlock();
|
|
1342
|
+
|
|
1343
|
+
rehash_if_full();
|
|
1344
|
+
return noinline_emplace_or_visit(
|
|
1345
|
+
access_mode,std::forward<F>(f),type_policy::move(x.value()));
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
template<typename... Args>
|
|
1349
|
+
BOOST_FORCEINLINE bool emplace_impl(Args&&... args)
|
|
1350
|
+
{
|
|
1351
|
+
return emplace_or_visit_impl(
|
|
1352
|
+
group_shared{},[](const value_type&){},std::forward<Args>(args)...);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
template<typename GroupAccessMode,typename F,typename... Args>
|
|
1356
|
+
BOOST_NOINLINE bool noinline_emplace_or_visit(
|
|
1357
|
+
GroupAccessMode access_mode,F&& f,Args&&... args)
|
|
1358
|
+
{
|
|
1359
|
+
return emplace_or_visit_impl(
|
|
1360
|
+
access_mode,std::forward<F>(f),std::forward<Args>(args)...);
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
struct call_emplace_or_visit_impl
|
|
1364
|
+
{
|
|
1365
|
+
template<typename... Args>
|
|
1366
|
+
BOOST_FORCEINLINE bool operator()(
|
|
1367
|
+
concurrent_table* this_,Args&&... args)const
|
|
1368
|
+
{
|
|
1369
|
+
return this_->emplace_or_visit_impl(std::forward<Args>(args)...);
|
|
1370
|
+
}
|
|
1371
|
+
};
|
|
1372
|
+
|
|
1373
|
+
template<typename GroupAccessMode,typename... Args>
|
|
1374
|
+
BOOST_FORCEINLINE bool emplace_or_visit_flast(
|
|
1375
|
+
GroupAccessMode access_mode,Args&&... args)
|
|
1376
|
+
{
|
|
1377
|
+
return mp11::tuple_apply(
|
|
1378
|
+
call_emplace_or_visit_impl{},
|
|
1379
|
+
std::tuple_cat(
|
|
1380
|
+
std::make_tuple(this,access_mode),
|
|
1381
|
+
tuple_rotate_right(std::forward_as_tuple(std::forward<Args>(args)...))
|
|
1382
|
+
)
|
|
1383
|
+
);
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
template<typename GroupAccessMode,typename F,typename... Args>
|
|
1387
|
+
BOOST_FORCEINLINE bool emplace_or_visit_impl(
|
|
1388
|
+
GroupAccessMode access_mode,F&& f,Args&&... args)
|
|
1389
|
+
{
|
|
1390
|
+
for(;;){
|
|
1391
|
+
{
|
|
1392
|
+
auto lck=shared_access();
|
|
1393
|
+
int res=unprotected_norehash_emplace_or_visit(
|
|
1394
|
+
access_mode,std::forward<F>(f),std::forward<Args>(args)...);
|
|
1395
|
+
if(BOOST_LIKELY(res>=0))return res!=0;
|
|
1396
|
+
}
|
|
1397
|
+
rehash_if_full();
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1401
|
+
template<typename... Args>
|
|
1402
|
+
BOOST_FORCEINLINE bool unprotected_emplace(Args&&... args)
|
|
1403
|
+
{
|
|
1404
|
+
const auto &k=this->key_from(std::forward<Args>(args)...);
|
|
1405
|
+
auto hash=this->hash_for(k);
|
|
1406
|
+
auto pos0=this->position_for(hash);
|
|
1407
|
+
|
|
1408
|
+
if(this->find(k,pos0,hash))return false;
|
|
1409
|
+
|
|
1410
|
+
if(BOOST_LIKELY(this->size_ctrl.size<this->size_ctrl.ml)){
|
|
1411
|
+
this->unchecked_emplace_at(pos0,hash,std::forward<Args>(args)...);
|
|
1412
|
+
}
|
|
1413
|
+
else{
|
|
1414
|
+
this->unchecked_emplace_with_rehash(hash,std::forward<Args>(args)...);
|
|
1415
|
+
}
|
|
1416
|
+
return true;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
struct reserve_size
|
|
1420
|
+
{
|
|
1421
|
+
reserve_size(concurrent_table& x_):x(x_)
|
|
1422
|
+
{
|
|
1423
|
+
size_=++x.size_ctrl.size;
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
~reserve_size()
|
|
1427
|
+
{
|
|
1428
|
+
if(!commit_)--x.size_ctrl.size;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
bool succeeded()const{return size_<=x.size_ctrl.ml;}
|
|
1432
|
+
|
|
1433
|
+
void commit(){commit_=true;}
|
|
1434
|
+
|
|
1435
|
+
concurrent_table &x;
|
|
1436
|
+
std::size_t size_;
|
|
1437
|
+
bool commit_=false;
|
|
1438
|
+
};
|
|
1439
|
+
|
|
1440
|
+
struct reserve_slot
|
|
1441
|
+
{
|
|
1442
|
+
reserve_slot(group_type* pg_,std::size_t pos_,std::size_t hash):
|
|
1443
|
+
pg{pg_},pos{pos_}
|
|
1444
|
+
{
|
|
1445
|
+
pg->set(pos,hash);
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
~reserve_slot()
|
|
1449
|
+
{
|
|
1450
|
+
if(!commit_)pg->reset(pos);
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
void commit(){commit_=true;}
|
|
1454
|
+
|
|
1455
|
+
group_type *pg;
|
|
1456
|
+
std::size_t pos;
|
|
1457
|
+
bool commit_=false;
|
|
1458
|
+
};
|
|
1459
|
+
|
|
1460
|
+
template<typename GroupAccessMode,typename F,typename... Args>
|
|
1461
|
+
BOOST_FORCEINLINE int
|
|
1462
|
+
unprotected_norehash_emplace_or_visit(
|
|
1463
|
+
GroupAccessMode access_mode,F&& f,Args&&... args)
|
|
1464
|
+
{
|
|
1465
|
+
const auto &k=this->key_from(std::forward<Args>(args)...);
|
|
1466
|
+
auto hash=this->hash_for(k);
|
|
1467
|
+
auto pos0=this->position_for(hash);
|
|
1468
|
+
|
|
1469
|
+
for(;;){
|
|
1470
|
+
startover:
|
|
1471
|
+
boost::uint32_t counter=insert_counter(pos0);
|
|
1472
|
+
if(unprotected_visit(
|
|
1473
|
+
access_mode,k,pos0,hash,std::forward<F>(f)))return 0;
|
|
1474
|
+
|
|
1475
|
+
reserve_size rsize(*this);
|
|
1476
|
+
if(BOOST_LIKELY(rsize.succeeded())){
|
|
1477
|
+
for(prober pb(pos0);;pb.next(this->arrays.groups_size_mask)){
|
|
1478
|
+
auto pos=pb.get();
|
|
1479
|
+
auto pg=this->arrays.groups()+pos;
|
|
1480
|
+
auto lck=access(group_exclusive{},pos);
|
|
1481
|
+
auto mask=pg->match_available();
|
|
1482
|
+
if(BOOST_LIKELY(mask!=0)){
|
|
1483
|
+
auto n=unchecked_countr_zero(mask);
|
|
1484
|
+
reserve_slot rslot{pg,n,hash};
|
|
1485
|
+
if(BOOST_UNLIKELY(insert_counter(pos0)++!=counter)){
|
|
1486
|
+
/* other thread inserted from pos0, need to start over */
|
|
1487
|
+
goto startover;
|
|
1488
|
+
}
|
|
1489
|
+
auto p=this->arrays.elements()+pos*N+n;
|
|
1490
|
+
this->construct_element(p,std::forward<Args>(args)...);
|
|
1491
|
+
rslot.commit();
|
|
1492
|
+
rsize.commit();
|
|
1493
|
+
return 1;
|
|
1494
|
+
}
|
|
1495
|
+
pg->mark_overflow(hash);
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1498
|
+
else return -1;
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
void rehash_if_full()
|
|
1503
|
+
{
|
|
1504
|
+
auto lck=exclusive_access();
|
|
1505
|
+
if(this->size_ctrl.size==this->size_ctrl.ml){
|
|
1506
|
+
this->unchecked_rehash_for_growth();
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
template<typename GroupAccessMode,typename F>
|
|
1511
|
+
auto for_all_elements(GroupAccessMode access_mode,F f)const
|
|
1512
|
+
->decltype(f(nullptr),void())
|
|
1513
|
+
{
|
|
1514
|
+
for_all_elements(
|
|
1515
|
+
access_mode,[&](group_type*,unsigned int,element_type* p){f(p);});
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
template<typename GroupAccessMode,typename F>
|
|
1519
|
+
auto for_all_elements(GroupAccessMode access_mode,F f)const
|
|
1520
|
+
->decltype(f(nullptr,0,nullptr),void())
|
|
1521
|
+
{
|
|
1522
|
+
for_all_elements_while(
|
|
1523
|
+
access_mode,[&](group_type* pg,unsigned int n,element_type* p)
|
|
1524
|
+
{f(pg,n,p);return true;});
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
template<typename GroupAccessMode,typename F>
|
|
1528
|
+
auto for_all_elements_while(GroupAccessMode access_mode,F f)const
|
|
1529
|
+
->decltype(f(nullptr),bool())
|
|
1530
|
+
{
|
|
1531
|
+
return for_all_elements_while(
|
|
1532
|
+
access_mode,[&](group_type*,unsigned int,element_type* p){return f(p);});
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
template<typename GroupAccessMode,typename F>
|
|
1536
|
+
auto for_all_elements_while(GroupAccessMode access_mode,F f)const
|
|
1537
|
+
->decltype(f(nullptr,0,nullptr),bool())
|
|
1538
|
+
{
|
|
1539
|
+
auto p=this->arrays.elements();
|
|
1540
|
+
if(p){
|
|
1541
|
+
for(auto pg=this->arrays.groups(),last=pg+this->arrays.groups_size_mask+1;
|
|
1542
|
+
pg!=last;++pg,p+=N){
|
|
1543
|
+
auto lck=access(access_mode,(std::size_t)(pg-this->arrays.groups()));
|
|
1544
|
+
auto mask=this->match_really_occupied(pg,last);
|
|
1545
|
+
while(mask){
|
|
1546
|
+
auto n=unchecked_countr_zero(mask);
|
|
1547
|
+
if(!f(pg,n,p+n))return false;
|
|
1548
|
+
mask&=mask-1;
|
|
1549
|
+
}
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
return true;
|
|
1553
|
+
}
|
|
1554
|
+
|
|
1555
|
+
#if defined(BOOST_UNORDERED_PARALLEL_ALGORITHMS)
|
|
1556
|
+
template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
|
|
1557
|
+
auto for_all_elements(
|
|
1558
|
+
GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
|
|
1559
|
+
->decltype(f(nullptr),void())
|
|
1560
|
+
{
|
|
1561
|
+
for_all_elements(
|
|
1562
|
+
access_mode,std::forward<ExecutionPolicy>(policy),
|
|
1563
|
+
[&](group_type*,unsigned int,element_type* p){f(p);});
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
|
|
1567
|
+
auto for_all_elements(
|
|
1568
|
+
GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
|
|
1569
|
+
->decltype(f(nullptr,0,nullptr),void())
|
|
1570
|
+
{
|
|
1571
|
+
if(!this->arrays.elements())return;
|
|
1572
|
+
auto first=this->arrays.groups(),
|
|
1573
|
+
last=first+this->arrays.groups_size_mask+1;
|
|
1574
|
+
std::for_each(std::forward<ExecutionPolicy>(policy),first,last,
|
|
1575
|
+
[&,this](group_type& g){
|
|
1576
|
+
auto pos=static_cast<std::size_t>(&g-first);
|
|
1577
|
+
auto p=this->arrays.elements()+pos*N;
|
|
1578
|
+
auto lck=access(access_mode,pos);
|
|
1579
|
+
auto mask=this->match_really_occupied(&g,last);
|
|
1580
|
+
while(mask){
|
|
1581
|
+
auto n=unchecked_countr_zero(mask);
|
|
1582
|
+
f(&g,n,p+n);
|
|
1583
|
+
mask&=mask-1;
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1586
|
+
);
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
template<typename GroupAccessMode,typename ExecutionPolicy,typename F>
|
|
1590
|
+
bool for_all_elements_while(
|
|
1591
|
+
GroupAccessMode access_mode,ExecutionPolicy&& policy,F f)const
|
|
1592
|
+
{
|
|
1593
|
+
if(!this->arrays.elements())return true;
|
|
1594
|
+
auto first=this->arrays.groups(),
|
|
1595
|
+
last=first+this->arrays.groups_size_mask+1;
|
|
1596
|
+
return std::all_of(std::forward<ExecutionPolicy>(policy),first,last,
|
|
1597
|
+
[&,this](group_type& g){
|
|
1598
|
+
auto pos=static_cast<std::size_t>(&g-first);
|
|
1599
|
+
auto p=this->arrays.elements()+pos*N;
|
|
1600
|
+
auto lck=access(access_mode,pos);
|
|
1601
|
+
auto mask=this->match_really_occupied(&g,last);
|
|
1602
|
+
while(mask){
|
|
1603
|
+
auto n=unchecked_countr_zero(mask);
|
|
1604
|
+
if(!f(p+n))return false;
|
|
1605
|
+
mask&=mask-1;
|
|
1606
|
+
}
|
|
1607
|
+
return true;
|
|
1608
|
+
}
|
|
1609
|
+
);
|
|
1610
|
+
}
|
|
1611
|
+
#endif
|
|
1612
|
+
|
|
1613
|
+
friend class boost::serialization::access;
|
|
1614
|
+
|
|
1615
|
+
template<typename Archive>
|
|
1616
|
+
void serialize(Archive& ar,unsigned int version)
|
|
1617
|
+
{
|
|
1618
|
+
core::split_member(ar,*this,version);
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
template<typename Archive>
|
|
1622
|
+
void save(Archive& ar,unsigned int version)const
|
|
1623
|
+
{
|
|
1624
|
+
save(
|
|
1625
|
+
ar,version,
|
|
1626
|
+
std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
template<typename Archive>
|
|
1630
|
+
void save(Archive& ar,unsigned int,std::true_type /* set */)const
|
|
1631
|
+
{
|
|
1632
|
+
auto lck=exclusive_access();
|
|
1633
|
+
const std::size_t s=super::size();
|
|
1634
|
+
const serialization_version<value_type> value_version;
|
|
1635
|
+
|
|
1636
|
+
ar<<core::make_nvp("count",s);
|
|
1637
|
+
ar<<core::make_nvp("value_version",value_version);
|
|
1638
|
+
|
|
1639
|
+
super::for_all_elements([&,this](element_type* p){
|
|
1640
|
+
auto& x=type_policy::value_from(*p);
|
|
1641
|
+
core::save_construct_data_adl(ar,std::addressof(x),value_version);
|
|
1642
|
+
ar<<serialization::make_nvp("item",x);
|
|
1643
|
+
});
|
|
1644
|
+
}
|
|
1645
|
+
|
|
1646
|
+
template<typename Archive>
|
|
1647
|
+
void save(Archive& ar,unsigned int,std::false_type /* map */)const
|
|
1648
|
+
{
|
|
1649
|
+
using raw_key_type=typename std::remove_const<key_type>::type;
|
|
1650
|
+
using raw_mapped_type=typename std::remove_const<
|
|
1651
|
+
typename TypePolicy::mapped_type>::type;
|
|
1652
|
+
|
|
1653
|
+
auto lck=exclusive_access();
|
|
1654
|
+
const std::size_t s=super::size();
|
|
1655
|
+
const serialization_version<raw_key_type> key_version;
|
|
1656
|
+
const serialization_version<raw_mapped_type> mapped_version;
|
|
1657
|
+
|
|
1658
|
+
ar<<core::make_nvp("count",s);
|
|
1659
|
+
ar<<core::make_nvp("key_version",key_version);
|
|
1660
|
+
ar<<core::make_nvp("mapped_version",mapped_version);
|
|
1661
|
+
|
|
1662
|
+
super::for_all_elements([&,this](element_type* p){
|
|
1663
|
+
/* To remain lib-independent from Boost.Serialization and not rely on
|
|
1664
|
+
* the user having included the serialization code for std::pair
|
|
1665
|
+
* (boost/serialization/utility.hpp), we serialize the key and the
|
|
1666
|
+
* mapped value separately.
|
|
1667
|
+
*/
|
|
1668
|
+
|
|
1669
|
+
auto& x=type_policy::value_from(*p);
|
|
1670
|
+
core::save_construct_data_adl(
|
|
1671
|
+
ar,std::addressof(x.first),key_version);
|
|
1672
|
+
ar<<serialization::make_nvp("key",x.first);
|
|
1673
|
+
core::save_construct_data_adl(
|
|
1674
|
+
ar,std::addressof(x.second),mapped_version);
|
|
1675
|
+
ar<<serialization::make_nvp("mapped",x.second);
|
|
1676
|
+
});
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
template<typename Archive>
|
|
1680
|
+
void load(Archive& ar,unsigned int version)
|
|
1681
|
+
{
|
|
1682
|
+
load(
|
|
1683
|
+
ar,version,
|
|
1684
|
+
std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
template<typename Archive>
|
|
1688
|
+
void load(Archive& ar,unsigned int,std::true_type /* set */)
|
|
1689
|
+
{
|
|
1690
|
+
auto lck=exclusive_access();
|
|
1691
|
+
std::size_t s;
|
|
1692
|
+
serialization_version<value_type> value_version;
|
|
1693
|
+
|
|
1694
|
+
ar>>core::make_nvp("count",s);
|
|
1695
|
+
ar>>core::make_nvp("value_version",value_version);
|
|
1696
|
+
|
|
1697
|
+
super::clear();
|
|
1698
|
+
super::reserve(s);
|
|
1699
|
+
|
|
1700
|
+
for(std::size_t n=0;n<s;++n){
|
|
1701
|
+
archive_constructed<value_type> value("item",ar,value_version);
|
|
1702
|
+
auto& x=value.get();
|
|
1703
|
+
auto hash=this->hash_for(x);
|
|
1704
|
+
auto pos0=this->position_for(hash);
|
|
1705
|
+
|
|
1706
|
+
if(this->find(x,pos0,hash))throw_exception(bad_archive_exception());
|
|
1707
|
+
auto loc=this->unchecked_emplace_at(pos0,hash,std::move(x));
|
|
1708
|
+
ar.reset_object_address(std::addressof(*loc.p),std::addressof(x));
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
template<typename Archive>
|
|
1713
|
+
void load(Archive& ar,unsigned int,std::false_type /* map */)
|
|
1714
|
+
{
|
|
1715
|
+
using raw_key_type=typename std::remove_const<key_type>::type;
|
|
1716
|
+
using raw_mapped_type=typename std::remove_const<
|
|
1717
|
+
typename TypePolicy::mapped_type>::type;
|
|
1718
|
+
|
|
1719
|
+
auto lck=exclusive_access();
|
|
1720
|
+
std::size_t s;
|
|
1721
|
+
serialization_version<raw_key_type> key_version;
|
|
1722
|
+
serialization_version<raw_mapped_type> mapped_version;
|
|
1723
|
+
|
|
1724
|
+
ar>>core::make_nvp("count",s);
|
|
1725
|
+
ar>>core::make_nvp("key_version",key_version);
|
|
1726
|
+
ar>>core::make_nvp("mapped_version",mapped_version);
|
|
1727
|
+
|
|
1728
|
+
super::clear();
|
|
1729
|
+
super::reserve(s);
|
|
1730
|
+
|
|
1731
|
+
for(std::size_t n=0;n<s;++n){
|
|
1732
|
+
archive_constructed<raw_key_type> key("key",ar,key_version);
|
|
1733
|
+
archive_constructed<raw_mapped_type> mapped("mapped",ar,mapped_version);
|
|
1734
|
+
auto& k=key.get();
|
|
1735
|
+
auto& m=mapped.get();
|
|
1736
|
+
auto hash=this->hash_for(k);
|
|
1737
|
+
auto pos0=this->position_for(hash);
|
|
1738
|
+
|
|
1739
|
+
if(this->find(k,pos0,hash))throw_exception(bad_archive_exception());
|
|
1740
|
+
auto loc=this->unchecked_emplace_at(pos0,hash,std::move(k),std::move(m));
|
|
1741
|
+
ar.reset_object_address(std::addressof(loc.p->first),std::addressof(k));
|
|
1742
|
+
ar.reset_object_address(std::addressof(loc.p->second),std::addressof(m));
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
static std::atomic<std::size_t> thread_counter;
|
|
1747
|
+
mutable multimutex_type mutexes;
|
|
1748
|
+
};
|
|
1749
|
+
|
|
1750
|
+
template<typename T,typename H,typename P,typename A>
|
|
1751
|
+
std::atomic<std::size_t> concurrent_table<T,H,P,A>::thread_counter={};
|
|
1752
|
+
|
|
1753
|
+
#if defined(BOOST_MSVC)
|
|
1754
|
+
#pragma warning(pop) /* C4714 */
|
|
1755
|
+
#endif
|
|
1756
|
+
|
|
1757
|
+
#include <boost/unordered/detail/foa/restore_wshadow.hpp>
|
|
1758
|
+
|
|
1759
|
+
} /* namespace foa */
|
|
1760
|
+
} /* namespace detail */
|
|
1761
|
+
} /* namespace unordered */
|
|
1762
|
+
} /* namespace boost */
|
|
1763
|
+
|
|
1764
|
+
#endif
|