passenger 6.0.23 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -26,7 +26,6 @@
|
|
26
26
|
|
27
27
|
#include <boost/move/utility_core.hpp>
|
28
28
|
|
29
|
-
#include <boost/container/detail/pair.hpp>
|
30
29
|
#include <boost/container/vector.hpp>
|
31
30
|
#include <boost/container/allocator_traits.hpp>
|
32
31
|
|
@@ -43,11 +42,11 @@
|
|
43
42
|
|
44
43
|
#include <boost/intrusive/detail/minimal_pair_header.hpp> //pair
|
45
44
|
|
46
|
-
#include <boost/move/make_unique.hpp>
|
47
45
|
#include <boost/move/iterator.hpp>
|
48
46
|
#include <boost/move/adl_move_swap.hpp>
|
49
47
|
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
|
50
48
|
#include <boost/move/detail/force_ptr.hpp>
|
49
|
+
#include <boost/move/detail/launder.hpp>
|
51
50
|
#include <boost/move/algo/adaptive_sort.hpp>
|
52
51
|
#include <boost/move/algo/detail/pdqsort.hpp>
|
53
52
|
|
@@ -583,7 +582,7 @@ class flat_tree
|
|
583
582
|
(boost::container::dtl::, container_type
|
584
583
|
,stored_allocator_type, allocator_type) stored_allocator_type;
|
585
584
|
|
586
|
-
|
585
|
+
BOOST_STATIC_CONSTEXPR bool has_stored_allocator_type =
|
587
586
|
BOOST_INTRUSIVE_HAS_TYPE(boost::container::dtl::, container_type, stored_allocator_type);
|
588
587
|
|
589
588
|
private:
|
@@ -955,6 +954,7 @@ class flat_tree
|
|
955
954
|
template <class InIt>
|
956
955
|
void insert_equal(ordered_range_t, InIt first, InIt last)
|
957
956
|
{
|
957
|
+
BOOST_ASSERT((is_sorted)(first, last, this->priv_value_comp()));
|
958
958
|
const bool value = boost::container::dtl::
|
959
959
|
has_member_function_callable_with_merge_unique<container_type, InIt, InIt, value_compare>::value;
|
960
960
|
(flat_tree_merge_equal)(this->m_data.m_seq, first, last, this->priv_value_comp(), dtl::bool_<value>());
|
@@ -963,6 +963,7 @@ class flat_tree
|
|
963
963
|
template <class InIt>
|
964
964
|
void insert_unique(ordered_unique_range_t, InIt first, InIt last)
|
965
965
|
{
|
966
|
+
BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
|
966
967
|
const bool value = boost::container::dtl::
|
967
968
|
has_member_function_callable_with_merge_unique<container_type, InIt, InIt, value_compare>::value;
|
968
969
|
(flat_tree_merge_unique)(this->m_data.m_seq, first, last, this->priv_value_comp(), dtl::bool_<value>());
|
@@ -975,8 +976,8 @@ class flat_tree
|
|
975
976
|
{
|
976
977
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
|
977
978
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
|
978
|
-
stored_allocator_traits::construct(a,
|
979
|
-
value_type *pval = move_detail::
|
979
|
+
stored_allocator_traits::construct(a, (value_type *)(&v), ::boost::forward<Args>(args)... );
|
980
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);
|
980
981
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);
|
981
982
|
return this->insert_unique(::boost::move(*pval));
|
982
983
|
}
|
@@ -987,8 +988,8 @@ class flat_tree
|
|
987
988
|
//hint checked in insert_unique
|
988
989
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
|
989
990
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
|
990
|
-
stored_allocator_traits::construct(a,
|
991
|
-
value_type *pval = move_detail::
|
991
|
+
stored_allocator_traits::construct(a, (value_type*)(&v), ::boost::forward<Args>(args)... );
|
992
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);
|
992
993
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);
|
993
994
|
return this->insert_unique(hint, ::boost::move(*pval));
|
994
995
|
}
|
@@ -998,8 +999,8 @@ class flat_tree
|
|
998
999
|
{
|
999
1000
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
|
1000
1001
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
|
1001
|
-
stored_allocator_traits::construct(a,
|
1002
|
-
value_type *pval = move_detail::
|
1002
|
+
stored_allocator_traits::construct(a, (value_type*)(&v), ::boost::forward<Args>(args)... );
|
1003
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);
|
1003
1004
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);
|
1004
1005
|
return this->insert_equal(::boost::move(*pval));
|
1005
1006
|
}
|
@@ -1010,8 +1011,8 @@ class flat_tree
|
|
1010
1011
|
//hint checked in insert_equal
|
1011
1012
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
|
1012
1013
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
|
1013
|
-
stored_allocator_traits::construct(a,
|
1014
|
-
value_type *pval = move_detail::
|
1014
|
+
stored_allocator_traits::construct(a, (value_type*)(&v), ::boost::forward<Args>(args)... );
|
1015
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);
|
1015
1016
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);
|
1016
1017
|
return this->insert_equal(hint, ::boost::move(*pval));
|
1017
1018
|
}
|
@@ -1044,8 +1045,8 @@ class flat_tree
|
|
1044
1045
|
{\
|
1045
1046
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\
|
1046
1047
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
|
1047
|
-
stored_allocator_traits::construct(a,
|
1048
|
-
value_type *pval = move_detail::
|
1048
|
+
stored_allocator_traits::construct(a, (value_type *)(&v) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
1049
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);\
|
1049
1050
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);\
|
1050
1051
|
return this->insert_unique(::boost::move(*pval));\
|
1051
1052
|
}\
|
@@ -1055,8 +1056,8 @@ class flat_tree
|
|
1055
1056
|
{\
|
1056
1057
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\
|
1057
1058
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
|
1058
|
-
stored_allocator_traits::construct(a,
|
1059
|
-
value_type *pval = move_detail::
|
1059
|
+
stored_allocator_traits::construct(a, (value_type *)(&v) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
1060
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);\
|
1060
1061
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);\
|
1061
1062
|
return this->insert_unique(hint, ::boost::move(*pval));\
|
1062
1063
|
}\
|
@@ -1066,8 +1067,8 @@ class flat_tree
|
|
1066
1067
|
{\
|
1067
1068
|
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\
|
1068
1069
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
|
1069
|
-
stored_allocator_traits::construct(a,
|
1070
|
-
value_type *pval = move_detail::
|
1070
|
+
stored_allocator_traits::construct(a, (value_type *)(&v) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
1071
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);\
|
1071
1072
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);\
|
1072
1073
|
return this->insert_equal(::boost::move(*pval));\
|
1073
1074
|
}\
|
@@ -1077,8 +1078,8 @@ class flat_tree
|
|
1077
1078
|
{\
|
1078
1079
|
typename dtl::aligned_storage <sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\
|
1079
1080
|
get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
|
1080
|
-
stored_allocator_traits::construct(a,
|
1081
|
-
value_type *pval = move_detail::
|
1081
|
+
stored_allocator_traits::construct(a, (value_type *)(&v) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
1082
|
+
value_type *pval = move_detail::launder_cast<value_type *>(&v);\
|
1082
1083
|
value_destructor<stored_allocator_type, value_type> d(a, *pval);\
|
1083
1084
|
return this->insert_equal(hint, ::boost::move(*pval));\
|
1084
1085
|
}\
|
@@ -1126,9 +1127,6 @@ class flat_tree
|
|
1126
1127
|
return ret;
|
1127
1128
|
}
|
1128
1129
|
|
1129
|
-
inline iterator erase(const_iterator position)
|
1130
|
-
{ return this->m_data.m_seq.erase(position); }
|
1131
|
-
|
1132
1130
|
size_type erase(const key_type& k)
|
1133
1131
|
{
|
1134
1132
|
std::pair<iterator,iterator > itp = this->equal_range(k);
|
@@ -1148,6 +1146,40 @@ class flat_tree
|
|
1148
1146
|
return ret;
|
1149
1147
|
}
|
1150
1148
|
|
1149
|
+
template <class K>
|
1150
|
+
inline typename dtl::enable_if_c<
|
1151
|
+
dtl::is_transparent<key_compare>::value && //transparent
|
1152
|
+
!dtl::is_convertible<K, iterator>::value && //not convertible to iterator
|
1153
|
+
!dtl::is_convertible<K, const_iterator>::value //not convertible to const_iterator
|
1154
|
+
, size_type>::type
|
1155
|
+
erase(const K& k)
|
1156
|
+
{
|
1157
|
+
std::pair<iterator, iterator > itp = this->equal_range(k);
|
1158
|
+
size_type ret = static_cast<size_type>(itp.second - itp.first);
|
1159
|
+
if (ret) {
|
1160
|
+
this->m_data.m_seq.erase(itp.first, itp.second);
|
1161
|
+
}
|
1162
|
+
return ret;
|
1163
|
+
}
|
1164
|
+
|
1165
|
+
template <class K>
|
1166
|
+
inline typename dtl::enable_if_c<
|
1167
|
+
dtl::is_transparent<key_compare>::value && //transparent
|
1168
|
+
!dtl::is_convertible<K, iterator>::value && //not convertible to iterator
|
1169
|
+
!dtl::is_convertible<K, const_iterator>::value //not convertible to const_iterator
|
1170
|
+
, size_type>::type
|
1171
|
+
erase_unique(const K& k)
|
1172
|
+
{
|
1173
|
+
const_iterator i = static_cast<const flat_tree&>(*this).find(k);
|
1174
|
+
size_type ret = static_cast<size_type>(i != this->cend());
|
1175
|
+
if (ret)
|
1176
|
+
this->erase(i);
|
1177
|
+
return ret;
|
1178
|
+
}
|
1179
|
+
|
1180
|
+
inline iterator erase(const_iterator position)
|
1181
|
+
{ return this->m_data.m_seq.erase(position); }
|
1182
|
+
|
1151
1183
|
inline iterator erase(const_iterator first, const_iterator last)
|
1152
1184
|
{ return this->m_data.m_seq.erase(first, last); }
|
1153
1185
|
|
@@ -1700,7 +1732,7 @@ struct has_trivial_destructor_after_move<boost::container::dtl::flat_tree<T, Key
|
|
1700
1732
|
typedef boost::container::dtl::flat_tree<T, KeyOfValue, Compare, AllocatorOrContainer> flat_tree;
|
1701
1733
|
typedef typename flat_tree::container_type container_type;
|
1702
1734
|
typedef typename flat_tree::key_compare key_compare;
|
1703
|
-
|
1735
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<container_type>::value &&
|
1704
1736
|
::boost::has_trivial_destructor_after_move<key_compare>::value;
|
1705
1737
|
};
|
1706
1738
|
|
@@ -80,7 +80,7 @@ namespace function_detector {
|
|
80
80
|
template <class U> \
|
81
81
|
static NotFoundType Test( ... ); \
|
82
82
|
public : \
|
83
|
-
|
83
|
+
BOOST_STATIC_CONSTEXPR int check = NotFound + (sizeof(Test<T>(0, 0)) - sizeof(NotFoundType));\
|
84
84
|
};\
|
85
85
|
}}} //namespace boost::container::function_detector {
|
86
86
|
|
@@ -51,7 +51,7 @@ namespace dtl {
|
|
51
51
|
template <class Container>
|
52
52
|
struct is_container
|
53
53
|
{
|
54
|
-
|
54
|
+
BOOST_STATIC_CONSTEXPR bool value =
|
55
55
|
boost::container::is_container_detail::
|
56
56
|
has_member_function_callable_with_size <const Container>::value &&
|
57
57
|
boost::container::is_container_detail::
|
@@ -61,7 +61,7 @@ struct is_container
|
|
61
61
|
template <>
|
62
62
|
struct is_container<void>
|
63
63
|
{
|
64
|
-
|
64
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
65
65
|
};
|
66
66
|
|
67
67
|
|
@@ -51,7 +51,7 @@ namespace dtl {
|
|
51
51
|
template <class Container>
|
52
52
|
struct is_contiguous_container
|
53
53
|
{
|
54
|
-
|
54
|
+
BOOST_STATIC_CONSTEXPR bool value =
|
55
55
|
boost::container::is_contiguous_container_detail::
|
56
56
|
has_member_function_callable_with_data<Container>::value &&
|
57
57
|
boost::container::is_contiguous_container_detail::
|
@@ -61,25 +61,25 @@ struct pair;
|
|
61
61
|
template <class T>
|
62
62
|
struct is_pair
|
63
63
|
{
|
64
|
-
|
64
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
65
65
|
};
|
66
66
|
|
67
67
|
template <class T1, class T2>
|
68
68
|
struct is_pair< pair<T1, T2> >
|
69
69
|
{
|
70
|
-
|
70
|
+
BOOST_STATIC_CONSTEXPR bool value = true;
|
71
71
|
};
|
72
72
|
|
73
73
|
template <class T1, class T2>
|
74
74
|
struct is_pair< std::pair<T1, T2> >
|
75
75
|
{
|
76
|
-
|
76
|
+
BOOST_STATIC_CONSTEXPR bool value = true;
|
77
77
|
};
|
78
78
|
|
79
79
|
template <class T>
|
80
80
|
struct is_not_pair
|
81
81
|
{
|
82
|
-
|
82
|
+
BOOST_STATIC_CONSTEXPR bool value = !is_pair<T>::value;
|
83
83
|
};
|
84
84
|
|
85
85
|
} //namespace dtl {
|
@@ -723,50 +723,50 @@ struct has_iterator_category
|
|
723
723
|
template <typename X>
|
724
724
|
static two test(int, ...);
|
725
725
|
|
726
|
-
|
726
|
+
BOOST_STATIC_CONSTEXPR bool value = (1 == sizeof(test<T>(0, 0)));
|
727
727
|
};
|
728
728
|
|
729
729
|
|
730
730
|
template<class T, bool = has_iterator_category<T>::value >
|
731
731
|
struct is_input_iterator
|
732
732
|
{
|
733
|
-
|
733
|
+
BOOST_STATIC_CONSTEXPR bool value = is_same<typename T::iterator_category, std::input_iterator_tag>::value;
|
734
734
|
};
|
735
735
|
|
736
736
|
template<class T>
|
737
737
|
struct is_input_iterator<T, false>
|
738
738
|
{
|
739
|
-
|
739
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
740
740
|
};
|
741
741
|
|
742
742
|
template<class T>
|
743
743
|
struct is_not_input_iterator
|
744
744
|
{
|
745
|
-
|
745
|
+
BOOST_STATIC_CONSTEXPR bool value = !is_input_iterator<T>::value;
|
746
746
|
};
|
747
747
|
|
748
748
|
template<class T, bool = has_iterator_category<T>::value >
|
749
749
|
struct is_forward_iterator
|
750
750
|
{
|
751
|
-
|
751
|
+
BOOST_STATIC_CONSTEXPR bool value = is_same<typename T::iterator_category, std::forward_iterator_tag>::value;
|
752
752
|
};
|
753
753
|
|
754
754
|
template<class T>
|
755
755
|
struct is_forward_iterator<T, false>
|
756
756
|
{
|
757
|
-
|
757
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
758
758
|
};
|
759
759
|
|
760
760
|
template<class T, bool = has_iterator_category<T>::value >
|
761
761
|
struct is_bidirectional_iterator
|
762
762
|
{
|
763
|
-
|
763
|
+
BOOST_STATIC_CONSTEXPR bool value = is_same<typename T::iterator_category, std::bidirectional_iterator_tag>::value;
|
764
764
|
};
|
765
765
|
|
766
766
|
template<class T>
|
767
767
|
struct is_bidirectional_iterator<T, false>
|
768
768
|
{
|
769
|
-
|
769
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
770
770
|
};
|
771
771
|
|
772
772
|
template<class IINodeType>
|
@@ -100,7 +100,7 @@ struct upper_power_of_2_loop_ct
|
|
100
100
|
template <Integer I, Integer P>
|
101
101
|
struct apply
|
102
102
|
{
|
103
|
-
|
103
|
+
BOOST_STATIC_CONSTEXPR Integer value =
|
104
104
|
upper_power_of_2_loop_ct<Integer, (I > P*2)>::template apply<I, P*2>::value;
|
105
105
|
};
|
106
106
|
};
|
@@ -111,14 +111,14 @@ struct upper_power_of_2_loop_ct<Integer, false>
|
|
111
111
|
template <Integer I, Integer P>
|
112
112
|
struct apply
|
113
113
|
{
|
114
|
-
|
114
|
+
BOOST_STATIC_CONSTEXPR Integer value = P;
|
115
115
|
};
|
116
116
|
};
|
117
117
|
|
118
118
|
template <typename Integer, Integer I>
|
119
119
|
struct upper_power_of_2_ct
|
120
120
|
{
|
121
|
-
|
121
|
+
BOOST_STATIC_CONSTEXPR Integer value = upper_power_of_2_loop_ct<Integer, (I > 1)>::template apply<I, 2>::value;
|
122
122
|
};
|
123
123
|
|
124
124
|
//This function uses binary search to discover the
|
@@ -144,27 +144,27 @@ inline std::size_t floor_log2 (std::size_t x)
|
|
144
144
|
template<std::size_t I1, std::size_t I2>
|
145
145
|
struct gcd_ct
|
146
146
|
{
|
147
|
-
|
148
|
-
|
149
|
-
|
147
|
+
BOOST_STATIC_CONSTEXPR std::size_t Max = I1 > I2 ? I1 : I2;
|
148
|
+
BOOST_STATIC_CONSTEXPR std::size_t Min = I1 < I2 ? I1 : I2;
|
149
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = gcd_ct<Min, Max % Min>::value;
|
150
150
|
};
|
151
151
|
|
152
152
|
template<std::size_t I1>
|
153
153
|
struct gcd_ct<I1, 0>
|
154
154
|
{
|
155
|
-
|
155
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = I1;
|
156
156
|
};
|
157
157
|
|
158
158
|
template<std::size_t I1>
|
159
159
|
struct gcd_ct<0, I1>
|
160
160
|
{
|
161
|
-
|
161
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = I1;
|
162
162
|
};
|
163
163
|
|
164
164
|
template<std::size_t I1, std::size_t I2>
|
165
165
|
struct lcm_ct
|
166
166
|
{
|
167
|
-
|
167
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = I1 * I2 / gcd_ct<I1, I2>::value;
|
168
168
|
};
|
169
169
|
|
170
170
|
} // namespace dtl
|
@@ -84,13 +84,13 @@ struct void_t { typedef void type; };
|
|
84
84
|
template <class T, class=void>
|
85
85
|
struct is_transparent_base
|
86
86
|
{
|
87
|
-
|
87
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
88
88
|
};
|
89
89
|
|
90
90
|
template <class T>
|
91
91
|
struct is_transparent_base<T, typename void_t<typename T::is_transparent>::type>
|
92
92
|
{
|
93
|
-
|
93
|
+
BOOST_STATIC_CONSTEXPR bool value = true;
|
94
94
|
};
|
95
95
|
|
96
96
|
template <class T>
|
@@ -112,7 +112,7 @@ template<typename...> using variadic_void_t = void;
|
|
112
112
|
template<typename Allocator, typename = void>
|
113
113
|
struct is_allocator
|
114
114
|
{
|
115
|
-
|
115
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
116
116
|
};
|
117
117
|
|
118
118
|
template <typename T>
|
@@ -123,7 +123,7 @@ struct is_allocator < Allocator,
|
|
123
123
|
variadic_void_t< typename Allocator::value_type
|
124
124
|
, decltype(ctad_declval<Allocator&>().allocate(size_t{})) >>
|
125
125
|
{
|
126
|
-
|
126
|
+
BOOST_STATIC_CONSTEXPR bool value = true;
|
127
127
|
};
|
128
128
|
|
129
129
|
template<class T>
|
@@ -25,15 +25,17 @@
|
|
25
25
|
#include <boost/container/container_fwd.hpp>
|
26
26
|
// container/detail
|
27
27
|
#include <boost/move/detail/to_raw_pointer.hpp>
|
28
|
-
#include <boost/container/detail/transform_iterator.hpp>
|
29
28
|
#include <boost/container/detail/type_traits.hpp>
|
30
29
|
#include <boost/container/detail/placement_new.hpp>
|
30
|
+
#include <boost/container/detail/iterator.hpp>
|
31
31
|
// intrusive
|
32
32
|
#include <boost/intrusive/slist.hpp>
|
33
33
|
#include <boost/intrusive/pointer_traits.hpp>
|
34
34
|
#include <boost/intrusive/detail/twin.hpp>
|
35
35
|
// move
|
36
36
|
#include <boost/move/utility_core.hpp>
|
37
|
+
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
|
38
|
+
|
37
39
|
|
38
40
|
namespace boost {
|
39
41
|
namespace container {
|
@@ -187,15 +189,100 @@ class basic_multiallocation_chain
|
|
187
189
|
}
|
188
190
|
};
|
189
191
|
|
190
|
-
template<class T>
|
191
|
-
|
192
|
+
template <class Iterator, class T>
|
193
|
+
class multialloc_iterator
|
194
|
+
: public boost::container::iterator
|
195
|
+
< typename Iterator::iterator_category
|
196
|
+
, T
|
197
|
+
, typename Iterator::difference_type
|
198
|
+
, T*
|
199
|
+
, T&
|
200
|
+
>
|
192
201
|
{
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
{
|
202
|
+
public:
|
203
|
+
inline explicit multialloc_iterator(const Iterator &it)
|
204
|
+
: m_it(it)
|
205
|
+
{}
|
206
|
+
|
207
|
+
inline explicit multialloc_iterator()
|
208
|
+
: m_it()
|
209
|
+
{}
|
210
|
+
|
211
|
+
//Constructors
|
212
|
+
inline multialloc_iterator& operator++()
|
213
|
+
{ increment(); return *this; }
|
214
|
+
|
215
|
+
inline multialloc_iterator operator++(int)
|
216
|
+
{
|
217
|
+
multialloc_iterator result (*this);
|
218
|
+
increment();
|
219
|
+
return result;
|
220
|
+
}
|
221
|
+
|
222
|
+
inline friend bool operator== (const multialloc_iterator& i, const multialloc_iterator& i2)
|
223
|
+
{ return i.equal(i2); }
|
224
|
+
|
225
|
+
inline friend bool operator!= (const multialloc_iterator& i, const multialloc_iterator& i2)
|
226
|
+
{ return !(i == i2); }
|
227
|
+
|
228
|
+
inline friend typename Iterator::difference_type operator- (const multialloc_iterator& i, const multialloc_iterator& i2)
|
229
|
+
{ return i2.distance_to(i); }
|
230
|
+
|
231
|
+
//Arithmetic
|
232
|
+
inline multialloc_iterator& operator+=(typename Iterator::difference_type off)
|
233
|
+
{ this->advance(off); return *this; }
|
234
|
+
|
235
|
+
inline multialloc_iterator operator+(typename Iterator::difference_type off) const
|
236
|
+
{
|
237
|
+
multialloc_iterator other(*this);
|
238
|
+
other.advance(off);
|
239
|
+
return other;
|
240
|
+
}
|
241
|
+
|
242
|
+
inline friend multialloc_iterator operator+(typename Iterator::difference_type off, const multialloc_iterator& right)
|
243
|
+
{ return right + off; }
|
244
|
+
|
245
|
+
inline multialloc_iterator& operator-=(typename Iterator::difference_type off)
|
246
|
+
{ this->advance(-off); return *this; }
|
247
|
+
|
248
|
+
inline multialloc_iterator operator-(typename Iterator::difference_type off) const
|
249
|
+
{ return *this + (-off); }
|
250
|
+
|
251
|
+
inline T& operator*() const
|
252
|
+
{ return *this->operator->(); }
|
253
|
+
|
254
|
+
inline T* operator->() const
|
255
|
+
{ return static_cast<T*>(static_cast<void*>(boost::movelib::iterator_to_raw_pointer(m_it))); }
|
256
|
+
|
257
|
+
inline Iterator & base()
|
258
|
+
{ return m_it; }
|
259
|
+
|
260
|
+
inline const Iterator & base() const
|
261
|
+
{ return m_it; }
|
262
|
+
|
263
|
+
private:
|
264
|
+
Iterator m_it;
|
265
|
+
|
266
|
+
inline void increment()
|
267
|
+
{ ++m_it; }
|
268
|
+
|
269
|
+
inline void decrement()
|
270
|
+
{ --m_it; }
|
271
|
+
|
272
|
+
inline bool equal(const multialloc_iterator &other) const
|
273
|
+
{ return m_it == other.m_it; }
|
274
|
+
|
275
|
+
inline bool less(const multialloc_iterator &other) const
|
276
|
+
{ return other.m_it < m_it; }
|
277
|
+
|
278
|
+
inline void advance(typename Iterator::difference_type n)
|
279
|
+
{ boost::container::iterator_advance(m_it, n); }
|
280
|
+
|
281
|
+
inline typename Iterator::difference_type distance_to(const multialloc_iterator &other)const
|
282
|
+
{ return boost::container::iterator_distance(other.m_it, m_it); }
|
197
283
|
};
|
198
284
|
|
285
|
+
|
199
286
|
template<class MultiallocationChain, class T>
|
200
287
|
class transform_multiallocation_chain
|
201
288
|
: public MultiallocationChain
|
@@ -217,9 +304,8 @@ class transform_multiallocation_chain
|
|
217
304
|
{ return pointer_traits::static_cast_from(p); }
|
218
305
|
|
219
306
|
public:
|
220
|
-
typedef
|
221
|
-
<
|
222
|
-
, dtl::cast_functor <T> > iterator;
|
307
|
+
typedef multialloc_iterator
|
308
|
+
<typename MultiallocationChain::iterator, T> iterator;
|
223
309
|
typedef typename MultiallocationChain::size_type size_type;
|
224
310
|
typedef boost::intrusive::twin<pointer> pointer_pair;
|
225
311
|
|
@@ -31,12 +31,14 @@
|
|
31
31
|
#include <boost/container/detail/construct_in_place.hpp>
|
32
32
|
#include <boost/container/detail/destroyers.hpp>
|
33
33
|
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
|
34
|
+
#include <boost/move/detail/launder.hpp>
|
34
35
|
#include <boost/container/detail/mpl.hpp>
|
35
36
|
#include <boost/container/detail/placement_new.hpp>
|
36
37
|
#include <boost/move/detail/to_raw_pointer.hpp>
|
37
38
|
#include <boost/container/detail/type_traits.hpp>
|
38
39
|
#include <boost/container/detail/version_type.hpp>
|
39
40
|
#include <boost/container/detail/is_pair.hpp>
|
41
|
+
#include <boost/container/detail/pair.hpp>
|
40
42
|
// intrusive
|
41
43
|
#include <boost/intrusive/detail/mpl.hpp>
|
42
44
|
#include <boost/intrusive/options.hpp>
|
@@ -119,16 +121,16 @@ struct base_node
|
|
119
121
|
}
|
120
122
|
|
121
123
|
inline T &get_data()
|
122
|
-
{ return *move_detail::force_ptr<T*>(this->m_storage
|
124
|
+
{ return *move_detail::force_ptr<T*>(&this->m_storage); }
|
123
125
|
|
124
126
|
inline const T &get_data() const
|
125
|
-
{ return *move_detail::
|
127
|
+
{ return *move_detail::launder_cast<const T*>(&this->m_storage); }
|
126
128
|
|
127
129
|
inline internal_type &get_real_data()
|
128
|
-
{ return *move_detail::
|
130
|
+
{ return *move_detail::launder_cast<internal_type*>(&this->m_storage); }
|
129
131
|
|
130
132
|
inline const internal_type &get_real_data() const
|
131
|
-
{ return *move_detail::
|
133
|
+
{ return *move_detail::launder_cast<const internal_type*>(&this->m_storage); }
|
132
134
|
|
133
135
|
#if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING)
|
134
136
|
#pragma GCC diagnostic pop
|
@@ -534,6 +536,19 @@ struct node_alloc_holder
|
|
534
536
|
return this->icont().erase_and_dispose(k, chain_holder.get_chain_builder());
|
535
537
|
}
|
536
538
|
|
539
|
+
template<class Key, class KeyCompare>
|
540
|
+
inline size_type erase_key(const Key& k, KeyCompare cmp, version_1)
|
541
|
+
{
|
542
|
+
return this->icont().erase_and_dispose(k, cmp, Destroyer(this->node_alloc()));
|
543
|
+
}
|
544
|
+
|
545
|
+
template<class Key, class KeyCompare>
|
546
|
+
inline size_type erase_key(const Key& k, KeyCompare cmp, version_2)
|
547
|
+
{
|
548
|
+
allocator_multialloc_chain_node_deallocator<NodeAlloc> chain_holder(this->node_alloc());
|
549
|
+
return this->icont().erase_and_dispose(k, cmp, chain_holder.get_chain_builder());
|
550
|
+
}
|
551
|
+
|
537
552
|
protected:
|
538
553
|
struct cloner
|
539
554
|
{
|
@@ -52,7 +52,7 @@ class private_node_pool
|
|
52
52
|
|
53
53
|
public:
|
54
54
|
typedef typename base_t::multiallocation_chain multiallocation_chain;
|
55
|
-
|
55
|
+
BOOST_STATIC_CONSTEXPR std::size_t nodes_per_block = NodesPerBlock;
|
56
56
|
|
57
57
|
//!Constructor from a segment manager. Never throws
|
58
58
|
private_node_pool()
|