passenger 6.0.23 → 6.0.24
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.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- 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/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- 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/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -40,6 +40,10 @@
|
|
40
40
|
#include <type_traits>
|
41
41
|
#include <utility>
|
42
42
|
|
43
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
44
|
+
#include <boost/unordered/detail/foa/cumulative_stats.hpp>
|
45
|
+
#endif
|
46
|
+
|
43
47
|
#if !defined(BOOST_UNORDERED_DISABLE_SSE2)
|
44
48
|
#if defined(BOOST_UNORDERED_ENABLE_SSE2)|| \
|
45
49
|
defined(__SSE2__)|| \
|
@@ -864,6 +868,7 @@ struct pow2_quadratic_prober
|
|
864
868
|
pow2_quadratic_prober(std::size_t pos_):pos{pos_}{}
|
865
869
|
|
866
870
|
inline std::size_t get()const{return pos;}
|
871
|
+
inline std::size_t length()const{return step+1;}
|
867
872
|
|
868
873
|
/* next returns false when the whole array has been traversed, which ends
|
869
874
|
* probing (in practice, full-table probing will only happen with very small
|
@@ -1125,6 +1130,54 @@ struct table_arrays
|
|
1125
1130
|
value_type_pointer elements_;
|
1126
1131
|
};
|
1127
1132
|
|
1133
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
1134
|
+
/* stats support */
|
1135
|
+
|
1136
|
+
struct table_core_cumulative_stats
|
1137
|
+
{
|
1138
|
+
concurrent_cumulative_stats<1> insertion;
|
1139
|
+
concurrent_cumulative_stats<2> successful_lookup,
|
1140
|
+
unsuccessful_lookup;
|
1141
|
+
};
|
1142
|
+
|
1143
|
+
struct table_core_insertion_stats
|
1144
|
+
{
|
1145
|
+
std::size_t count;
|
1146
|
+
sequence_stats_summary probe_length;
|
1147
|
+
};
|
1148
|
+
|
1149
|
+
struct table_core_lookup_stats
|
1150
|
+
{
|
1151
|
+
std::size_t count;
|
1152
|
+
sequence_stats_summary probe_length;
|
1153
|
+
sequence_stats_summary num_comparisons;
|
1154
|
+
};
|
1155
|
+
|
1156
|
+
struct table_core_stats
|
1157
|
+
{
|
1158
|
+
table_core_insertion_stats insertion;
|
1159
|
+
table_core_lookup_stats successful_lookup,
|
1160
|
+
unsuccessful_lookup;
|
1161
|
+
};
|
1162
|
+
|
1163
|
+
#define BOOST_UNORDERED_ADD_STATS(stats,args) stats.add args
|
1164
|
+
#define BOOST_UNORDERED_SWAP_STATS(stats1,stats2) std::swap(stats1,stats2)
|
1165
|
+
#define BOOST_UNORDERED_COPY_STATS(stats1,stats2) stats1=stats2
|
1166
|
+
#define BOOST_UNORDERED_RESET_STATS_OF(x) x.reset_stats()
|
1167
|
+
#define BOOST_UNORDERED_STATS_COUNTER(name) std::size_t name=0
|
1168
|
+
#define BOOST_UNORDERED_INCREMENT_STATS_COUNTER(name) ++name
|
1169
|
+
|
1170
|
+
#else
|
1171
|
+
|
1172
|
+
#define BOOST_UNORDERED_ADD_STATS(stats,args) ((void)0)
|
1173
|
+
#define BOOST_UNORDERED_SWAP_STATS(stats1,stats2) ((void)0)
|
1174
|
+
#define BOOST_UNORDERED_COPY_STATS(stats1,stats2) ((void)0)
|
1175
|
+
#define BOOST_UNORDERED_RESET_STATS_OF(x) ((void)0)
|
1176
|
+
#define BOOST_UNORDERED_STATS_COUNTER(name) ((void)0)
|
1177
|
+
#define BOOST_UNORDERED_INCREMENT_STATS_COUNTER(name) ((void)0)
|
1178
|
+
|
1179
|
+
#endif
|
1180
|
+
|
1128
1181
|
struct if_constexpr_void_else{void operator()()const{}};
|
1129
1182
|
|
1130
1183
|
template<bool B,typename F,typename G=if_constexpr_void_else>
|
@@ -1395,6 +1448,11 @@ public:
|
|
1395
1448
|
using locator=table_locator<group_type,element_type>;
|
1396
1449
|
using arrays_holder_type=arrays_holder<arrays_type,Allocator>;
|
1397
1450
|
|
1451
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
1452
|
+
using cumulative_stats=table_core_cumulative_stats;
|
1453
|
+
using stats=table_core_stats;
|
1454
|
+
#endif
|
1455
|
+
|
1398
1456
|
table_core(
|
1399
1457
|
std::size_t n=default_bucket_count,const Hash& h_=Hash(),
|
1400
1458
|
const Pred& pred_=Pred(),const Allocator& al_=Allocator()):
|
@@ -1429,6 +1487,7 @@ public:
|
|
1429
1487
|
x.arrays=ah.release();
|
1430
1488
|
x.size_ctrl.ml=x.initial_max_load();
|
1431
1489
|
x.size_ctrl.size=0;
|
1490
|
+
BOOST_UNORDERED_SWAP_STATS(cstats,x.cstats);
|
1432
1491
|
}
|
1433
1492
|
|
1434
1493
|
table_core(table_core&& x)
|
@@ -1454,11 +1513,13 @@ public:
|
|
1454
1513
|
using std::swap;
|
1455
1514
|
swap(arrays,x.arrays);
|
1456
1515
|
swap(size_ctrl,x.size_ctrl);
|
1516
|
+
BOOST_UNORDERED_SWAP_STATS(cstats,x.cstats);
|
1457
1517
|
}
|
1458
1518
|
else{
|
1459
1519
|
reserve(x.size());
|
1460
1520
|
clear_on_exit c{x};
|
1461
1521
|
(void)c; /* unused var warning */
|
1522
|
+
BOOST_UNORDERED_RESET_STATS_OF(x);
|
1462
1523
|
|
1463
1524
|
/* This works because subsequent x.clear() does not depend on the
|
1464
1525
|
* elements' values.
|
@@ -1574,9 +1635,11 @@ public:
|
|
1574
1635
|
arrays=x.arrays;
|
1575
1636
|
size_ctrl.ml=std::size_t(x.size_ctrl.ml);
|
1576
1637
|
size_ctrl.size=std::size_t(x.size_ctrl.size);
|
1638
|
+
BOOST_UNORDERED_COPY_STATS(cstats,x.cstats);
|
1577
1639
|
x.arrays=ah.release();
|
1578
1640
|
x.size_ctrl.ml=x.initial_max_load();
|
1579
1641
|
x.size_ctrl.size=0;
|
1642
|
+
BOOST_UNORDERED_RESET_STATS_OF(x);
|
1580
1643
|
}
|
1581
1644
|
else{
|
1582
1645
|
swap(h(),x.h());
|
@@ -1586,6 +1649,7 @@ public:
|
|
1586
1649
|
noshrink_reserve(x.size());
|
1587
1650
|
clear_on_exit c{x};
|
1588
1651
|
(void)c; /* unused var warning */
|
1652
|
+
BOOST_UNORDERED_RESET_STATS_OF(x);
|
1589
1653
|
|
1590
1654
|
/* This works because subsequent x.clear() does not depend on the
|
1591
1655
|
* elements' values.
|
@@ -1639,6 +1703,7 @@ public:
|
|
1639
1703
|
BOOST_FORCEINLINE locator find(
|
1640
1704
|
const Key& x,std::size_t pos0,std::size_t hash)const
|
1641
1705
|
{
|
1706
|
+
BOOST_UNORDERED_STATS_COUNTER(num_cmps);
|
1642
1707
|
prober pb(pos0);
|
1643
1708
|
do{
|
1644
1709
|
auto pos=pb.get();
|
@@ -1650,18 +1715,25 @@ public:
|
|
1650
1715
|
auto p=elements+pos*N;
|
1651
1716
|
BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
|
1652
1717
|
do{
|
1718
|
+
BOOST_UNORDERED_INCREMENT_STATS_COUNTER(num_cmps);
|
1653
1719
|
auto n=unchecked_countr_zero(mask);
|
1654
1720
|
if(BOOST_LIKELY(bool(pred()(x,key_from(p[n]))))){
|
1721
|
+
BOOST_UNORDERED_ADD_STATS(
|
1722
|
+
cstats.successful_lookup,(pb.length(),num_cmps));
|
1655
1723
|
return {pg,n,p+n};
|
1656
1724
|
}
|
1657
1725
|
mask&=mask-1;
|
1658
1726
|
}while(mask);
|
1659
1727
|
}
|
1660
1728
|
if(BOOST_LIKELY(pg->is_not_overflowed(hash))){
|
1729
|
+
BOOST_UNORDERED_ADD_STATS(
|
1730
|
+
cstats.unsuccessful_lookup,(pb.length(),num_cmps));
|
1661
1731
|
return {};
|
1662
1732
|
}
|
1663
1733
|
}
|
1664
1734
|
while(BOOST_LIKELY(pb.next(arrays.groups_size_mask)));
|
1735
|
+
BOOST_UNORDERED_ADD_STATS(
|
1736
|
+
cstats.unsuccessful_lookup,(pb.length(),num_cmps));
|
1665
1737
|
return {};
|
1666
1738
|
}
|
1667
1739
|
|
@@ -1746,6 +1818,38 @@ public:
|
|
1746
1818
|
rehash(std::size_t(std::ceil(float(n)/mlf)));
|
1747
1819
|
}
|
1748
1820
|
|
1821
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
1822
|
+
stats get_stats()const
|
1823
|
+
{
|
1824
|
+
auto insertion=cstats.insertion.get_summary();
|
1825
|
+
auto successful_lookup=cstats.successful_lookup.get_summary();
|
1826
|
+
auto unsuccessful_lookup=cstats.unsuccessful_lookup.get_summary();
|
1827
|
+
return{
|
1828
|
+
{
|
1829
|
+
insertion.count,
|
1830
|
+
insertion.sequence_summary[0]
|
1831
|
+
},
|
1832
|
+
{
|
1833
|
+
successful_lookup.count,
|
1834
|
+
successful_lookup.sequence_summary[0],
|
1835
|
+
successful_lookup.sequence_summary[1]
|
1836
|
+
},
|
1837
|
+
{
|
1838
|
+
unsuccessful_lookup.count,
|
1839
|
+
unsuccessful_lookup.sequence_summary[0],
|
1840
|
+
unsuccessful_lookup.sequence_summary[1]
|
1841
|
+
},
|
1842
|
+
};
|
1843
|
+
}
|
1844
|
+
|
1845
|
+
void reset_stats()noexcept
|
1846
|
+
{
|
1847
|
+
cstats.insertion.reset();
|
1848
|
+
cstats.successful_lookup.reset();
|
1849
|
+
cstats.unsuccessful_lookup.reset();
|
1850
|
+
}
|
1851
|
+
#endif
|
1852
|
+
|
1749
1853
|
friend bool operator==(const table_core& x,const table_core& y)
|
1750
1854
|
{
|
1751
1855
|
return
|
@@ -1953,8 +2057,12 @@ public:
|
|
1953
2057
|
return true;
|
1954
2058
|
}
|
1955
2059
|
|
1956
|
-
arrays_type
|
1957
|
-
size_ctrl_type
|
2060
|
+
arrays_type arrays;
|
2061
|
+
size_ctrl_type size_ctrl;
|
2062
|
+
|
2063
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
2064
|
+
mutable cumulative_stats cstats;
|
2065
|
+
#endif
|
1958
2066
|
|
1959
2067
|
private:
|
1960
2068
|
template<
|
@@ -2243,6 +2351,7 @@ private:
|
|
2243
2351
|
auto p=arrays_.elements()+pos*N+n;
|
2244
2352
|
construct_element(p,std::forward<Args>(args)...);
|
2245
2353
|
pg->set(n,hash);
|
2354
|
+
BOOST_UNORDERED_ADD_STATS(cstats.insertion,(pb.length()));
|
2246
2355
|
return {pg,n,p};
|
2247
2356
|
}
|
2248
2357
|
else pg->mark_overflow(hash);
|
@@ -0,0 +1,177 @@
|
|
1
|
+
/* Copyright 2024 Joaquin M Lopez Munoz.
|
2
|
+
* Distributed under the Boost Software License, Version 1.0.
|
3
|
+
* (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
+
* http://www.boost.org/LICENSE_1_0.txt)
|
5
|
+
*
|
6
|
+
* See https://www.boost.org/libs/unordered for library home page.
|
7
|
+
*/
|
8
|
+
|
9
|
+
#ifndef BOOST_UNORDERED_DETAIL_FOA_CUMULATIVE_STATS_HPP
|
10
|
+
#define BOOST_UNORDERED_DETAIL_FOA_CUMULATIVE_STATS_HPP
|
11
|
+
|
12
|
+
#include <array>
|
13
|
+
#include <boost/config.hpp>
|
14
|
+
#include <boost/mp11/tuple.hpp>
|
15
|
+
#include <cmath>
|
16
|
+
#include <cstddef>
|
17
|
+
|
18
|
+
#if defined(BOOST_HAS_THREADS)
|
19
|
+
#include <boost/unordered/detail/foa/rw_spinlock.hpp>
|
20
|
+
#include <mutex>
|
21
|
+
#endif
|
22
|
+
|
23
|
+
namespace boost{
|
24
|
+
namespace unordered{
|
25
|
+
namespace detail{
|
26
|
+
namespace foa{
|
27
|
+
|
28
|
+
/* Cumulative one-pass calculation of the average, variance and deviation of
|
29
|
+
* running sequences.
|
30
|
+
*/
|
31
|
+
|
32
|
+
struct sequence_stats_data
|
33
|
+
{
|
34
|
+
double m=0.0;
|
35
|
+
double m_prior=0.0;
|
36
|
+
double s=0.0;
|
37
|
+
};
|
38
|
+
|
39
|
+
struct welfords_algorithm /* 0-based */
|
40
|
+
{
|
41
|
+
template<typename T>
|
42
|
+
int operator()(T&& x,sequence_stats_data& d)const noexcept
|
43
|
+
{
|
44
|
+
static_assert(
|
45
|
+
noexcept(static_cast<double>(x)),
|
46
|
+
"Argument conversion to double must not throw.");
|
47
|
+
|
48
|
+
d.m_prior=d.m;
|
49
|
+
d.m+=(static_cast<double>(x)-d.m)/static_cast<double>(n);
|
50
|
+
d.s+=(n!=1)*
|
51
|
+
(static_cast<double>(x)-d.m_prior)*(static_cast<double>(x)-d.m);
|
52
|
+
|
53
|
+
return 0; /* mp11::tuple_transform requires that return type not be void */
|
54
|
+
}
|
55
|
+
|
56
|
+
std::size_t n;
|
57
|
+
};
|
58
|
+
|
59
|
+
struct sequence_stats_summary
|
60
|
+
{
|
61
|
+
double average;
|
62
|
+
double variance;
|
63
|
+
double deviation;
|
64
|
+
};
|
65
|
+
|
66
|
+
/* Stats calculated jointly for N same-sized sequences to save the space
|
67
|
+
* for count.
|
68
|
+
*/
|
69
|
+
|
70
|
+
template<std::size_t N>
|
71
|
+
class cumulative_stats
|
72
|
+
{
|
73
|
+
public:
|
74
|
+
struct summary
|
75
|
+
{
|
76
|
+
std::size_t count;
|
77
|
+
std::array<sequence_stats_summary,N> sequence_summary;
|
78
|
+
};
|
79
|
+
|
80
|
+
void reset()noexcept{*this=cumulative_stats();}
|
81
|
+
|
82
|
+
template<typename... Ts>
|
83
|
+
void add(Ts&&... xs)noexcept
|
84
|
+
{
|
85
|
+
static_assert(
|
86
|
+
sizeof...(Ts)==N,"A sample must be provided for each sequence.");
|
87
|
+
|
88
|
+
if(BOOST_UNLIKELY(++n==0)){ /* wraparound */
|
89
|
+
reset();
|
90
|
+
n=1;
|
91
|
+
}
|
92
|
+
mp11::tuple_transform(
|
93
|
+
welfords_algorithm{n},
|
94
|
+
std::forward_as_tuple(std::forward<Ts>(xs)...),
|
95
|
+
data);
|
96
|
+
}
|
97
|
+
|
98
|
+
summary get_summary()const noexcept
|
99
|
+
{
|
100
|
+
summary res;
|
101
|
+
res.count=n;
|
102
|
+
for(std::size_t i=0;i<N;++i){
|
103
|
+
double average=data[i].m,
|
104
|
+
variance=n!=0?data[i].s/static_cast<double>(n):0.0, /* biased */
|
105
|
+
deviation=std::sqrt(variance);
|
106
|
+
res.sequence_summary[i]={average,variance,deviation};
|
107
|
+
}
|
108
|
+
return res;
|
109
|
+
}
|
110
|
+
|
111
|
+
private:
|
112
|
+
std::size_t n=0;
|
113
|
+
std::array<sequence_stats_data,N> data;
|
114
|
+
};
|
115
|
+
|
116
|
+
#if defined(BOOST_HAS_THREADS)
|
117
|
+
|
118
|
+
template<std::size_t N>
|
119
|
+
class concurrent_cumulative_stats:cumulative_stats<N>
|
120
|
+
{
|
121
|
+
using super=cumulative_stats<N>;
|
122
|
+
using lock_guard=std::lock_guard<rw_spinlock>;
|
123
|
+
|
124
|
+
public:
|
125
|
+
using summary=typename super::summary;
|
126
|
+
|
127
|
+
concurrent_cumulative_stats()noexcept:super{}{}
|
128
|
+
concurrent_cumulative_stats(const concurrent_cumulative_stats& x)noexcept:
|
129
|
+
concurrent_cumulative_stats{x,lock_guard{x.mut}}{}
|
130
|
+
|
131
|
+
concurrent_cumulative_stats&
|
132
|
+
operator=(const concurrent_cumulative_stats& x)noexcept
|
133
|
+
{
|
134
|
+
auto x1=x;
|
135
|
+
lock_guard lck{mut};
|
136
|
+
static_cast<super&>(*this)=x1;
|
137
|
+
return *this;
|
138
|
+
}
|
139
|
+
|
140
|
+
void reset()noexcept
|
141
|
+
{
|
142
|
+
lock_guard lck{mut};
|
143
|
+
super::reset();
|
144
|
+
}
|
145
|
+
|
146
|
+
template<typename... Ts>
|
147
|
+
void add(Ts&&... xs)noexcept
|
148
|
+
{
|
149
|
+
lock_guard lck{mut};
|
150
|
+
super::add(std::forward<Ts>(xs)...);
|
151
|
+
}
|
152
|
+
|
153
|
+
summary get_summary()const noexcept
|
154
|
+
{
|
155
|
+
lock_guard lck{mut};
|
156
|
+
return super::get_summary();
|
157
|
+
}
|
158
|
+
|
159
|
+
private:
|
160
|
+
concurrent_cumulative_stats(const super& x,lock_guard&&):super{x}{}
|
161
|
+
|
162
|
+
mutable rw_spinlock mut;
|
163
|
+
};
|
164
|
+
|
165
|
+
#else
|
166
|
+
|
167
|
+
template<std::size_t N>
|
168
|
+
using concurrent_cumulative_stats=cumulative_stats<N>;
|
169
|
+
|
170
|
+
#endif
|
171
|
+
|
172
|
+
} /* namespace foa */
|
173
|
+
} /* namespace detail */
|
174
|
+
} /* namespace unordered */
|
175
|
+
} /* namespace boost */
|
176
|
+
|
177
|
+
#endif
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* Fast open-addressing hash table.
|
2
2
|
*
|
3
|
-
* Copyright 2022-
|
3
|
+
* Copyright 2022-2024 Joaquin M Lopez Munoz.
|
4
4
|
* Copyright 2023 Christian Mazakas.
|
5
5
|
* Copyright 2024 Braden Ganetsky.
|
6
6
|
* Distributed under the Boost Software License, Version 1.0.
|
@@ -361,6 +361,10 @@ public:
|
|
361
361
|
const_iterator>::type;
|
362
362
|
using erase_return_type=table_erase_return_type<iterator>;
|
363
363
|
|
364
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
365
|
+
using stats=typename super::stats;
|
366
|
+
#endif
|
367
|
+
|
364
368
|
table(
|
365
369
|
std::size_t n=default_bucket_count,const Hash& h_=Hash(),
|
366
370
|
const Pred& pred_=Pred(),const Allocator& al_=Allocator()):
|
@@ -542,6 +546,11 @@ public:
|
|
542
546
|
using super::rehash;
|
543
547
|
using super::reserve;
|
544
548
|
|
549
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
550
|
+
using super::get_stats;
|
551
|
+
using super::reset_stats;
|
552
|
+
#endif
|
553
|
+
|
545
554
|
template<typename Predicate>
|
546
555
|
friend std::size_t erase_if(table& x,Predicate& pr)
|
547
556
|
{
|
@@ -584,6 +593,7 @@ private:
|
|
584
593
|
x.arrays=ah.release();
|
585
594
|
x.size_ctrl.ml=x.initial_max_load();
|
586
595
|
x.size_ctrl.size=0;
|
596
|
+
BOOST_UNORDERED_SWAP_STATS(this->cstats,x.cstats);
|
587
597
|
}
|
588
598
|
|
589
599
|
template<typename ExclusiveLockGuard>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* Hash function characterization.
|
2
2
|
*
|
3
|
-
* Copyright 2022 Joaquin M Lopez Munoz.
|
3
|
+
* Copyright 2022-2024 Joaquin M Lopez Munoz.
|
4
4
|
* Distributed under the Boost Software License, Version 1.0.
|
5
5
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
6
6
|
* http://www.boost.org/LICENSE_1_0.txt)
|
@@ -19,12 +19,34 @@ namespace unordered{
|
|
19
19
|
namespace detail{
|
20
20
|
|
21
21
|
template<typename Hash,typename=void>
|
22
|
-
struct hash_is_avalanching_impl:
|
22
|
+
struct hash_is_avalanching_impl:std::false_type{};
|
23
|
+
|
24
|
+
template<typename IsAvalanching>
|
25
|
+
struct avalanching_value
|
26
|
+
{
|
27
|
+
static constexpr bool value=IsAvalanching::value;
|
28
|
+
};
|
29
|
+
|
30
|
+
/* may be explicitly marked as BOOST_DEPRECATED in the future */
|
31
|
+
template<> struct avalanching_value<void>
|
32
|
+
{
|
33
|
+
static constexpr bool value=true;
|
34
|
+
};
|
35
|
+
|
36
|
+
template<typename Hash>
|
37
|
+
struct hash_is_avalanching_impl<
|
38
|
+
Hash,
|
39
|
+
boost::unordered::detail::void_t<typename Hash::is_avalanching>
|
40
|
+
>:std::integral_constant<
|
41
|
+
bool,
|
42
|
+
avalanching_value<typename Hash::is_avalanching>::value
|
43
|
+
>{};
|
23
44
|
|
24
45
|
template<typename Hash>
|
25
|
-
struct hash_is_avalanching_impl<
|
26
|
-
|
27
|
-
|
46
|
+
struct hash_is_avalanching_impl<
|
47
|
+
Hash,
|
48
|
+
typename std::enable_if<((void)Hash::is_avalanching,true)>::type
|
49
|
+
>{}; /* Hash::is_avalanching is not a type: compile error downstream */
|
28
50
|
|
29
51
|
} /* namespace detail */
|
30
52
|
|
@@ -32,8 +54,12 @@ struct hash_is_avalanching_impl<Hash,
|
|
32
54
|
* when actual characterization differs from default.
|
33
55
|
*/
|
34
56
|
|
35
|
-
/* hash_is_avalanching<Hash>::value is
|
36
|
-
* is present
|
57
|
+
/* hash_is_avalanching<Hash>::value is:
|
58
|
+
* - false if Hash::is_avalanching is not present.
|
59
|
+
* - Hash::is_avalanching::value if this is present and constexpr-convertible
|
60
|
+
* to a bool.
|
61
|
+
* - true if Hash::is_avalanching is void (deprecated).
|
62
|
+
* - ill-formed otherwise.
|
37
63
|
*/
|
38
64
|
template<typename Hash>
|
39
65
|
struct hash_is_avalanching: detail::hash_is_avalanching_impl<Hash>::type{};
|
@@ -76,6 +76,10 @@ namespace boost {
|
|
76
76
|
using iterator = typename table_type::iterator;
|
77
77
|
using const_iterator = typename table_type::const_iterator;
|
78
78
|
|
79
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
80
|
+
using stats = typename table_type::stats;
|
81
|
+
#endif
|
82
|
+
|
79
83
|
unordered_flat_map() : unordered_flat_map(0) {}
|
80
84
|
|
81
85
|
explicit unordered_flat_map(size_type n, hasher const& h = hasher(),
|
@@ -654,6 +658,14 @@ namespace boost {
|
|
654
658
|
|
655
659
|
void reserve(size_type n) { table_.reserve(n); }
|
656
660
|
|
661
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
662
|
+
/// Stats
|
663
|
+
///
|
664
|
+
stats get_stats() const { return table_.get_stats(); }
|
665
|
+
|
666
|
+
void reset_stats() noexcept { table_.reset_stats(); }
|
667
|
+
#endif
|
668
|
+
|
657
669
|
/// Observers
|
658
670
|
///
|
659
671
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
2
|
// Copyright (C) 2022 Christian Mazakas
|
3
|
+
// Copyright (C) 2024 Braden Ganetsky
|
3
4
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
4
5
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
5
6
|
|
@@ -15,6 +16,10 @@
|
|
15
16
|
#include <functional>
|
16
17
|
#include <memory>
|
17
18
|
|
19
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
20
|
+
#include <memory_resource>
|
21
|
+
#endif
|
22
|
+
|
18
23
|
namespace boost {
|
19
24
|
namespace unordered {
|
20
25
|
template <class Key, class T, class Hash = boost::hash<Key>,
|
@@ -36,6 +41,16 @@ namespace boost {
|
|
36
41
|
void swap(unordered_flat_map<Key, T, Hash, KeyEqual, Allocator>& lhs,
|
37
42
|
unordered_flat_map<Key, T, Hash, KeyEqual, Allocator>& rhs)
|
38
43
|
noexcept(noexcept(lhs.swap(rhs)));
|
44
|
+
|
45
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
46
|
+
namespace pmr {
|
47
|
+
template <class Key, class T, class Hash = boost::hash<Key>,
|
48
|
+
class KeyEqual = std::equal_to<Key> >
|
49
|
+
using unordered_flat_map =
|
50
|
+
boost::unordered::unordered_flat_map<Key, T, Hash, KeyEqual,
|
51
|
+
std::pmr::polymorphic_allocator<std::pair<const Key, T> > >;
|
52
|
+
} // namespace pmr
|
53
|
+
#endif
|
39
54
|
} // namespace unordered
|
40
55
|
|
41
56
|
using boost::unordered::unordered_flat_map;
|
@@ -72,6 +72,10 @@ namespace boost {
|
|
72
72
|
using iterator = typename table_type::iterator;
|
73
73
|
using const_iterator = typename table_type::const_iterator;
|
74
74
|
|
75
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
76
|
+
using stats = typename table_type::stats;
|
77
|
+
#endif
|
78
|
+
|
75
79
|
unordered_flat_set() : unordered_flat_set(0) {}
|
76
80
|
|
77
81
|
explicit unordered_flat_set(size_type n, hasher const& h = hasher(),
|
@@ -474,6 +478,14 @@ namespace boost {
|
|
474
478
|
|
475
479
|
void reserve(size_type n) { table_.reserve(n); }
|
476
480
|
|
481
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
482
|
+
/// Stats
|
483
|
+
///
|
484
|
+
stats get_stats() const { return table_.get_stats(); }
|
485
|
+
|
486
|
+
void reset_stats() noexcept { table_.reset_stats(); }
|
487
|
+
#endif
|
488
|
+
|
477
489
|
/// Observers
|
478
490
|
///
|
479
491
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
|
2
2
|
// Copyright (C) 2022 Christian Mazakas
|
3
|
+
// Copyright (C) 2024 Braden Ganetsky
|
3
4
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
4
5
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
5
6
|
|
@@ -15,6 +16,10 @@
|
|
15
16
|
#include <functional>
|
16
17
|
#include <memory>
|
17
18
|
|
19
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
20
|
+
#include <memory_resource>
|
21
|
+
#endif
|
22
|
+
|
18
23
|
namespace boost {
|
19
24
|
namespace unordered {
|
20
25
|
template <class Key, class Hash = boost::hash<Key>,
|
@@ -36,6 +41,15 @@ namespace boost {
|
|
36
41
|
void swap(unordered_flat_set<Key, Hash, KeyEqual, Allocator>& lhs,
|
37
42
|
unordered_flat_set<Key, Hash, KeyEqual, Allocator>& rhs)
|
38
43
|
noexcept(noexcept(lhs.swap(rhs)));
|
44
|
+
|
45
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
46
|
+
namespace pmr {
|
47
|
+
template <class Key, class Hash = boost::hash<Key>,
|
48
|
+
class KeyEqual = std::equal_to<Key> >
|
49
|
+
using unordered_flat_set = boost::unordered::unordered_flat_set<Key, Hash,
|
50
|
+
KeyEqual, std::pmr::polymorphic_allocator<Key> >;
|
51
|
+
} // namespace pmr
|
52
|
+
#endif
|
39
53
|
} // namespace unordered
|
40
54
|
|
41
55
|
using boost::unordered::unordered_flat_set;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
// Copyright (C) 2008-2011 Daniel James.
|
3
3
|
// Copyright (C) 2022-2023 Christian Mazakas
|
4
|
+
// Copyright (C) 2024 Braden Ganetsky
|
4
5
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
5
6
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
6
7
|
|
@@ -16,6 +17,10 @@
|
|
16
17
|
#include <functional>
|
17
18
|
#include <memory>
|
18
19
|
|
20
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
21
|
+
#include <memory_resource>
|
22
|
+
#endif
|
23
|
+
|
19
24
|
namespace boost {
|
20
25
|
namespace unordered {
|
21
26
|
template <class K, class T, class H = boost::hash<K>,
|
@@ -58,6 +63,20 @@ namespace boost {
|
|
58
63
|
|
59
64
|
template <class N, class K, class T, class A> class node_handle_map;
|
60
65
|
template <class Iter, class NodeType> struct insert_return_type_map;
|
66
|
+
|
67
|
+
#ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
|
68
|
+
namespace pmr {
|
69
|
+
template <class K, class T, class H = boost::hash<K>,
|
70
|
+
class P = std::equal_to<K> >
|
71
|
+
using unordered_map = boost::unordered::unordered_map<K, T, H, P,
|
72
|
+
std::pmr::polymorphic_allocator<std::pair<const K, T> > >;
|
73
|
+
|
74
|
+
template <class K, class T, class H = boost::hash<K>,
|
75
|
+
class P = std::equal_to<K> >
|
76
|
+
using unordered_multimap = boost::unordered::unordered_multimap<K, T, H,
|
77
|
+
P, std::pmr::polymorphic_allocator<std::pair<const K, T> > >;
|
78
|
+
} // namespace pmr
|
79
|
+
#endif
|
61
80
|
} // namespace unordered
|
62
81
|
|
63
82
|
using boost::unordered::unordered_map;
|
@@ -115,6 +115,10 @@ namespace boost {
|
|
115
115
|
using insert_return_type =
|
116
116
|
detail::foa::insert_return_type<iterator, node_type>;
|
117
117
|
|
118
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
119
|
+
using stats = typename table_type::stats;
|
120
|
+
#endif
|
121
|
+
|
118
122
|
unordered_node_map() : unordered_node_map(0) {}
|
119
123
|
|
120
124
|
explicit unordered_node_map(size_type n, hasher const& h = hasher(),
|
@@ -749,6 +753,14 @@ namespace boost {
|
|
749
753
|
|
750
754
|
void reserve(size_type n) { table_.reserve(n); }
|
751
755
|
|
756
|
+
#if defined(BOOST_UNORDERED_ENABLE_STATS)
|
757
|
+
/// Stats
|
758
|
+
///
|
759
|
+
stats get_stats() const { return table_.get_stats(); }
|
760
|
+
|
761
|
+
void reset_stats() noexcept { table_.reset_stats(); }
|
762
|
+
#endif
|
763
|
+
|
752
764
|
/// Observers
|
753
765
|
///
|
754
766
|
|