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
@@ -46,7 +46,6 @@
|
|
46
46
|
#include <boost/move/utility_core.hpp>
|
47
47
|
#include <boost/move/detail/to_raw_pointer.hpp>
|
48
48
|
#include <boost/move/algo/detail/merge.hpp>
|
49
|
-
#include <boost/move/detail/force_ptr.hpp>
|
50
49
|
|
51
50
|
//std
|
52
51
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
@@ -148,7 +147,7 @@ class devector
|
|
148
147
|
typedef typename get_devector_opt<Options, alloc_size_type>::type options_type;
|
149
148
|
typedef typename options_type::growth_factor_type growth_factor_type;
|
150
149
|
typedef typename options_type::stored_size_type stored_size_type;
|
151
|
-
|
150
|
+
BOOST_STATIC_CONSTEXPR std::size_t devector_min_free_fraction =
|
152
151
|
options_type::free_fraction;
|
153
152
|
|
154
153
|
#endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
@@ -513,20 +512,21 @@ class devector
|
|
513
512
|
const devector &x = rhs;
|
514
513
|
if (this == &x) { return *this; } // skip self
|
515
514
|
|
516
|
-
|
515
|
+
const bool do_propagate = allocator_traits_type::propagate_on_container_copy_assignment::value;
|
516
|
+
BOOST_IF_CONSTEXPR(do_propagate)
|
517
517
|
{
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
518
|
+
allocator_type &this_alloc = this->get_allocator_ref();
|
519
|
+
const allocator_type &other_alloc = x.get_allocator_ref();
|
520
|
+
if (this_alloc != other_alloc)
|
521
|
+
{
|
522
|
+
// new allocator cannot free existing storage
|
523
|
+
this->clear();
|
524
|
+
this->deallocate_buffer();
|
525
|
+
m_.capacity = 0u;
|
526
|
+
m_.buffer = pointer();
|
527
|
+
}
|
528
|
+
dtl::bool_<do_propagate> flag;
|
529
|
+
dtl::assign_alloc(this_alloc, other_alloc, flag);
|
530
530
|
}
|
531
531
|
|
532
532
|
size_type n = x.size();
|
@@ -566,53 +566,16 @@ class devector
|
|
566
566
|
BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
|
567
567
|
|| allocator_traits_type::is_always_equal::value)
|
568
568
|
{
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
{
|
578
|
-
this->get_allocator_ref() = boost::move(x.get_allocator_ref());
|
579
|
-
}
|
580
|
-
|
581
|
-
m_.capacity = x.m_.capacity;
|
582
|
-
m_.buffer = x.m_.buffer;
|
583
|
-
m_.front_idx = x.m_.front_idx;
|
584
|
-
m_.back_idx = x.m_.back_idx;
|
585
|
-
|
586
|
-
// leave x in valid state
|
587
|
-
x.m_.capacity = 0u;
|
588
|
-
x.m_.buffer = pointer();
|
589
|
-
x.m_.back_idx = x.m_.front_idx = 0;
|
569
|
+
if (BOOST_LIKELY(this != &x)) {
|
570
|
+
//We know resources can be transferred at comiple time if both allocators are
|
571
|
+
//always equal or the allocator is going to be propagated
|
572
|
+
const bool can_steal_resources_alloc
|
573
|
+
= allocator_traits_type::propagate_on_container_move_assignment::value
|
574
|
+
|| allocator_traits_type::is_always_equal::value;
|
575
|
+
dtl::bool_<can_steal_resources_alloc> flag;
|
576
|
+
this->priv_move_assign(boost::move(x), flag);
|
590
577
|
}
|
591
|
-
else
|
592
|
-
{
|
593
|
-
// if the allocator shouldn't be copied and they do not compare equal
|
594
|
-
// we can't steal memory.
|
595
|
-
|
596
|
-
move_iterator<iterator> xbegin = boost::make_move_iterator(x.begin());
|
597
|
-
move_iterator<iterator> xend = boost::make_move_iterator(x.end());
|
598
|
-
|
599
|
-
if (copy_alloc)
|
600
|
-
{
|
601
|
-
get_allocator_ref() = boost::move(x.get_allocator_ref());
|
602
|
-
}
|
603
|
-
|
604
|
-
if (m_.capacity >= x.size())
|
605
|
-
{
|
606
|
-
overwrite_buffer(xbegin, xend);
|
607
|
-
}
|
608
|
-
else
|
609
|
-
{
|
610
|
-
allocate_and_copy_range(xbegin, xend);
|
611
|
-
}
|
612
|
-
}
|
613
|
-
|
614
578
|
BOOST_ASSERT(invariants_ok());
|
615
|
-
|
616
579
|
return *this;
|
617
580
|
}
|
618
581
|
|
@@ -1310,6 +1273,78 @@ class devector
|
|
1310
1273
|
return m_.buffer[m_.front_idx + n];
|
1311
1274
|
}
|
1312
1275
|
|
1276
|
+
//! <b>Requires</b>: size() >= n.
|
1277
|
+
//!
|
1278
|
+
//! <b>Effects</b>: Returns an iterator to the nth element
|
1279
|
+
//! from the beginning of the container. Returns end()
|
1280
|
+
//! if n == size().
|
1281
|
+
//!
|
1282
|
+
//! <b>Throws</b>: Nothing.
|
1283
|
+
//!
|
1284
|
+
//! <b>Complexity</b>: Constant.
|
1285
|
+
//!
|
1286
|
+
//! <b>Note</b>: Non-standard extension
|
1287
|
+
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
1288
|
+
iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
1289
|
+
{
|
1290
|
+
BOOST_ASSERT(n <= size());
|
1291
|
+
return iterator(m_.buffer + (m_.front_idx + n));
|
1292
|
+
}
|
1293
|
+
|
1294
|
+
//! <b>Requires</b>: size() >= n.
|
1295
|
+
//!
|
1296
|
+
//! <b>Effects</b>: Returns a const_iterator to the nth element
|
1297
|
+
//! from the beginning of the container. Returns end()
|
1298
|
+
//! if n == size().
|
1299
|
+
//!
|
1300
|
+
//! <b>Throws</b>: Nothing.
|
1301
|
+
//!
|
1302
|
+
//! <b>Complexity</b>: Constant.
|
1303
|
+
//!
|
1304
|
+
//! <b>Note</b>: Non-standard extension
|
1305
|
+
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
1306
|
+
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
1307
|
+
{
|
1308
|
+
BOOST_ASSERT(n <= size());
|
1309
|
+
return const_iterator(m_.buffer + (m_.front_idx + n));
|
1310
|
+
}
|
1311
|
+
|
1312
|
+
//! <b>Requires</b>: begin() <= p <= end().
|
1313
|
+
//!
|
1314
|
+
//! <b>Effects</b>: Returns the index of the element pointed by p
|
1315
|
+
//! and size() if p == end().
|
1316
|
+
//!
|
1317
|
+
//! <b>Throws</b>: Nothing.
|
1318
|
+
//!
|
1319
|
+
//! <b>Complexity</b>: Constant.
|
1320
|
+
//!
|
1321
|
+
//! <b>Note</b>: Non-standard extension
|
1322
|
+
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
1323
|
+
size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
|
1324
|
+
{
|
1325
|
+
BOOST_ASSERT(p >= begin());
|
1326
|
+
BOOST_ASSERT(p <= end());
|
1327
|
+
return static_cast<size_type>(p - this->begin());
|
1328
|
+
}
|
1329
|
+
|
1330
|
+
//! <b>Requires</b>: begin() <= p <= end().
|
1331
|
+
//!
|
1332
|
+
//! <b>Effects</b>: Returns the index of the element pointed by p
|
1333
|
+
//! and size() if p == end().
|
1334
|
+
//!
|
1335
|
+
//! <b>Throws</b>: Nothing.
|
1336
|
+
//!
|
1337
|
+
//! <b>Complexity</b>: Constant.
|
1338
|
+
//!
|
1339
|
+
//! <b>Note</b>: Non-standard extension
|
1340
|
+
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
1341
|
+
size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
|
1342
|
+
{
|
1343
|
+
BOOST_ASSERT(p >= cbegin());
|
1344
|
+
BOOST_ASSERT(p <= cend());
|
1345
|
+
return static_cast<size_type>(p - this->cbegin());
|
1346
|
+
}
|
1347
|
+
|
1313
1348
|
/**
|
1314
1349
|
* **Returns**: A reference to the `n`th element in the devector.
|
1315
1350
|
*
|
@@ -2137,6 +2172,53 @@ class devector
|
|
2137
2172
|
|
2138
2173
|
private:
|
2139
2174
|
|
2175
|
+
void priv_move_assign(BOOST_RV_REF(devector) x, dtl::bool_<true> /*steal_resources*/)
|
2176
|
+
{
|
2177
|
+
this->clear();
|
2178
|
+
this->deallocate_buffer();
|
2179
|
+
|
2180
|
+
//Move allocator if needed
|
2181
|
+
dtl::bool_<allocator_traits_type::
|
2182
|
+
propagate_on_container_move_assignment::value> flag;
|
2183
|
+
dtl::move_alloc(this->get_allocator_ref(), x.get_allocator_ref(), flag);
|
2184
|
+
|
2185
|
+
m_.capacity = x.m_.capacity;
|
2186
|
+
m_.buffer = x.m_.buffer;
|
2187
|
+
m_.front_idx = x.m_.front_idx;
|
2188
|
+
m_.back_idx = x.m_.back_idx;
|
2189
|
+
|
2190
|
+
// leave x in valid state
|
2191
|
+
x.m_.capacity = 0u;
|
2192
|
+
x.m_.buffer = pointer();
|
2193
|
+
x.m_.back_idx = x.m_.front_idx = 0;
|
2194
|
+
}
|
2195
|
+
|
2196
|
+
void priv_move_assign(BOOST_RV_REF(devector) x, dtl::bool_<false> /*steal_resources*/)
|
2197
|
+
{
|
2198
|
+
//We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
|
2199
|
+
//Resources can be transferred if both allocators are equal
|
2200
|
+
if (get_allocator_ref() == x.get_allocator_ref()) {
|
2201
|
+
this->priv_move_assign(boost::move(x), dtl::true_());
|
2202
|
+
}
|
2203
|
+
else {
|
2204
|
+
// We can't steal memory.
|
2205
|
+
move_iterator<iterator> xbegin = boost::make_move_iterator(x.begin());
|
2206
|
+
move_iterator<iterator> xend = boost::make_move_iterator(x.end());
|
2207
|
+
|
2208
|
+
//Move allocator if needed
|
2209
|
+
dtl::bool_<allocator_traits_type::
|
2210
|
+
propagate_on_container_move_assignment::value> flag;
|
2211
|
+
dtl::move_alloc(this->get_allocator_ref(), x.get_allocator_ref(), flag);
|
2212
|
+
|
2213
|
+
if (m_.capacity >= x.size()) {
|
2214
|
+
overwrite_buffer(xbegin, xend);
|
2215
|
+
}
|
2216
|
+
else {
|
2217
|
+
allocate_and_copy_range(xbegin, xend);
|
2218
|
+
}
|
2219
|
+
}
|
2220
|
+
}
|
2221
|
+
|
2140
2222
|
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
2141
2223
|
size_type pos_to_index(const_iterator i) const
|
2142
2224
|
{
|
@@ -2653,10 +2735,7 @@ class devector
|
|
2653
2735
|
size_type const cap = m_.capacity;
|
2654
2736
|
//Test if enough free memory would be left
|
2655
2737
|
if (free_cap >= n && (free_cap - n) >= cap/devector_min_free_fraction) {
|
2656
|
-
//Make sure relocation is happening because there was no enough space
|
2657
2738
|
size_type const old_size = this->size();
|
2658
|
-
BOOST_ASSERT(should_move_back(p) ? (back_free_cap < n) : (front_free_cap < n));
|
2659
|
-
|
2660
2739
|
T* const raw_pos = const_cast<T*>(boost::movelib::to_raw_pointer(p));
|
2661
2740
|
size_type const new_size = old_size + n;
|
2662
2741
|
size_type const new_front_idx = (cap - new_size) / 2u;
|
@@ -2948,8 +3027,9 @@ struct has_trivial_destructor_after_move<boost::container::devector<T, Allocator
|
|
2948
3027
|
{
|
2949
3028
|
typedef typename boost::container::devector<T, Allocator, Options>::allocator_type allocator_type;
|
2950
3029
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
2951
|
-
|
2952
|
-
|
3030
|
+
BOOST_STATIC_CONSTEXPR bool value =
|
3031
|
+
::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
3032
|
+
::boost::has_trivial_destructor_after_move<pointer>::value;
|
2953
3033
|
};
|
2954
3034
|
|
2955
3035
|
}
|
@@ -31,6 +31,7 @@
|
|
31
31
|
#include <boost/container/detail/mpl.hpp>
|
32
32
|
#include <boost/container/detail/algorithm.hpp> //equal()
|
33
33
|
#include <boost/container/detail/container_or_allocator_rebind.hpp>
|
34
|
+
#include <boost/container/detail/pair.hpp>
|
34
35
|
// move
|
35
36
|
#include <boost/move/utility_core.hpp>
|
36
37
|
#include <boost/move/traits.hpp>
|
@@ -44,10 +45,22 @@
|
|
44
45
|
#include <boost/intrusive/detail/minimal_pair_header.hpp> //pair
|
45
46
|
#include <boost/intrusive/detail/minimal_less_equal_header.hpp>//less, equal
|
46
47
|
|
48
|
+
|
47
49
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
48
50
|
#include <initializer_list>
|
49
51
|
#endif
|
50
52
|
|
53
|
+
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
54
|
+
#define BOOST_CONTAINER_STD_PAIR_IS_MOVABLE
|
55
|
+
#endif
|
56
|
+
|
57
|
+
//for C++03 compilers, were type-puning is the only option for std::pair
|
58
|
+
//disable strict aliasing to reduce problems.
|
59
|
+
#if defined(BOOST_GCC) && (BOOST_GCC >= 100000) && !defined(BOOST_CONTAINER_STD_PAIR_IS_MOVABLE)
|
60
|
+
#pragma GCC push_options
|
61
|
+
#pragma GCC optimize("no-strict-aliasing")
|
62
|
+
#endif
|
63
|
+
|
51
64
|
namespace boost {
|
52
65
|
namespace container {
|
53
66
|
|
@@ -58,21 +71,37 @@ class flat_multimap;
|
|
58
71
|
|
59
72
|
namespace dtl{
|
60
73
|
|
74
|
+
#if defined(BOOST_CONTAINER_STD_PAIR_IS_MOVABLE)
|
61
75
|
template<class D, class S>
|
62
76
|
BOOST_CONTAINER_FORCEINLINE static D &force(S &s)
|
63
|
-
{ return
|
77
|
+
{ return s; }
|
64
78
|
|
65
79
|
template<class D, class S>
|
66
80
|
BOOST_CONTAINER_FORCEINLINE static const D &force(const S &s)
|
67
|
-
{ return
|
81
|
+
{ return s; }
|
82
|
+
|
83
|
+
template<class D>
|
84
|
+
BOOST_CONTAINER_FORCEINLINE static D force_copy(D s)
|
85
|
+
{ return s; }
|
86
|
+
|
87
|
+
#else //!BOOST_CONTAINER_DOXYGEN_INVOKED
|
88
|
+
|
89
|
+
template<class D, class S>
|
90
|
+
BOOST_CONTAINER_FORCEINLINE static D &force(S &s)
|
91
|
+
{ return *move_detail::launder_cast<D*>(&s); }
|
92
|
+
|
93
|
+
template<class D, class S>
|
94
|
+
BOOST_CONTAINER_FORCEINLINE static const D &force(const S &s)
|
95
|
+
{ return *move_detail::launder_cast<const D*>(&s); }
|
68
96
|
|
69
97
|
template<class D, class S>
|
70
98
|
BOOST_CONTAINER_FORCEINLINE static D force_copy(const S &s)
|
71
99
|
{
|
72
|
-
const D *const vp = move_detail::
|
100
|
+
const D *const vp = move_detail::launder_cast<const D *>(&s);
|
73
101
|
D ret_val(*vp);
|
74
102
|
return ret_val;
|
75
103
|
}
|
104
|
+
#endif //BOOST_CONTAINER_DOXYGEN_INVOKED
|
76
105
|
|
77
106
|
} //namespace dtl{
|
78
107
|
|
@@ -118,18 +147,27 @@ class flat_map
|
|
118
147
|
private:
|
119
148
|
BOOST_COPYABLE_AND_MOVABLE(flat_map)
|
120
149
|
//This is the tree that we should store if pair was movable
|
150
|
+
typedef std::pair<Key, T> std_pair_t;
|
121
151
|
typedef dtl::flat_tree<
|
122
|
-
|
152
|
+
std_pair_t,
|
123
153
|
dtl::select1st<Key>,
|
124
154
|
Compare,
|
125
155
|
AllocatorOrContainer> tree_t;
|
126
156
|
|
127
157
|
//This is the real tree stored here. It's based on a movable pair
|
158
|
+
typedef dtl::pair<Key, T> dtl_pair_t;
|
159
|
+
|
160
|
+
#ifdef BOOST_CONTAINER_STD_PAIR_IS_MOVABLE
|
161
|
+
typedef std_pair_t impl_pair_t;
|
162
|
+
#else
|
163
|
+
typedef dtl_pair_t impl_pair_t;
|
164
|
+
#endif
|
165
|
+
|
128
166
|
typedef dtl::flat_tree<
|
129
|
-
|
167
|
+
impl_pair_t,
|
130
168
|
dtl::select1st<Key>,
|
131
169
|
Compare,
|
132
|
-
typename dtl::container_or_allocator_rebind<AllocatorOrContainer,
|
170
|
+
typename dtl::container_or_allocator_rebind<AllocatorOrContainer, impl_pair_t >::type
|
133
171
|
> impl_tree_t;
|
134
172
|
impl_tree_t m_flat_tree; // flat tree representing flat_map
|
135
173
|
|
@@ -851,7 +889,7 @@ class flat_map
|
|
851
889
|
//! @copydoc ::boost::container::flat_set::nth(size_type) const
|
852
890
|
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
853
891
|
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
854
|
-
{ return dtl::force_copy<
|
892
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.nth(n)); }
|
855
893
|
|
856
894
|
//! @copydoc ::boost::container::flat_set::index_of(iterator)
|
857
895
|
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
@@ -1099,7 +1137,7 @@ class flat_map
|
|
1099
1137
|
template <class Pair>
|
1100
1138
|
inline BOOST_CONTAINER_DOC1ST
|
1101
1139
|
( std::pair<iterator BOOST_MOVE_I bool>
|
1102
|
-
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I
|
1140
|
+
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I dtl_pair_t>::value
|
1103
1141
|
BOOST_MOVE_I std::pair<iterator BOOST_MOVE_I bool> >::type)
|
1104
1142
|
insert(BOOST_FWD_REF(Pair) x)
|
1105
1143
|
{
|
@@ -1153,7 +1191,7 @@ class flat_map
|
|
1153
1191
|
template <class Pair>
|
1154
1192
|
inline BOOST_CONTAINER_DOC1ST
|
1155
1193
|
( iterator
|
1156
|
-
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I
|
1194
|
+
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I dtl_pair_t>::value
|
1157
1195
|
BOOST_MOVE_I iterator>::type)
|
1158
1196
|
insert(const_iterator p, BOOST_FWD_REF(Pair) x)
|
1159
1197
|
{
|
@@ -1277,6 +1315,23 @@ class flat_map
|
|
1277
1315
|
inline size_type erase(const key_type& x)
|
1278
1316
|
{ return m_flat_tree.erase_unique(x); }
|
1279
1317
|
|
1318
|
+
//! <b>Requires</b>: This overload is available only if
|
1319
|
+
//! key_compare::is_transparent exists.
|
1320
|
+
//!
|
1321
|
+
//! <b>Effects</b>: If present, erases the element in the container with key equivalent to x.
|
1322
|
+
//!
|
1323
|
+
//! <b>Returns</b>: Returns the number of erased elements (0/1).
|
1324
|
+
template <class K>
|
1325
|
+
inline BOOST_CONTAINER_DOC1ST
|
1326
|
+
(size_type
|
1327
|
+
, typename dtl::enable_if_c<
|
1328
|
+
dtl::is_transparent<key_compare>::value && //transparent
|
1329
|
+
!dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
|
1330
|
+
!dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
|
1331
|
+
BOOST_MOVE_I size_type>::type)
|
1332
|
+
erase(const K& x)
|
1333
|
+
{ return m_flat_tree.erase_unique(x); }
|
1334
|
+
|
1280
1335
|
//! <b>Effects</b>: Erases all the elements in the range [first, last).
|
1281
1336
|
//!
|
1282
1337
|
//! <b>Returns</b>: Returns last.
|
@@ -1637,7 +1692,7 @@ class flat_map
|
|
1637
1692
|
if (i == end() || key_comp()(k, (*i).first)){
|
1638
1693
|
dtl::value_init<mapped_type> m;
|
1639
1694
|
impl_value_type v(k, ::boost::move(m.m_t));
|
1640
|
-
i = this->
|
1695
|
+
i = dtl::force_copy<iterator>(this->m_flat_tree.insert_equal(::boost::move(v)));
|
1641
1696
|
}
|
1642
1697
|
return (*i).second;
|
1643
1698
|
}
|
@@ -1646,10 +1701,10 @@ class flat_map
|
|
1646
1701
|
key_type &k = mk;
|
1647
1702
|
iterator i = this->lower_bound(k);
|
1648
1703
|
// i->first is greater than or equivalent to k.
|
1649
|
-
if (i == end() || key_comp()(k, (*i).first)){
|
1704
|
+
if (i == end() || key_comp()(k, (*i).first)) {
|
1650
1705
|
dtl::value_init<mapped_type> m;
|
1651
1706
|
impl_value_type v(::boost::move(k), ::boost::move(m.m_t));
|
1652
|
-
i = this->
|
1707
|
+
i = dtl::force_copy<iterator>(this->m_flat_tree.insert_equal(::boost::move(v)));
|
1653
1708
|
}
|
1654
1709
|
return (*i).second;
|
1655
1710
|
}
|
@@ -1729,10 +1784,10 @@ flat_map(ordered_unique_range_t, InputIterator, InputIterator, Compare const&, A
|
|
1729
1784
|
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
1730
1785
|
struct has_trivial_destructor_after_move<boost::container::flat_map<Key, T, Compare, AllocatorOrContainer> >
|
1731
1786
|
{
|
1732
|
-
typedef
|
1787
|
+
typedef typename boost::container::flat_map<Key, T, Compare, AllocatorOrContainer>::value_type value_t;
|
1733
1788
|
typedef typename ::boost::container::dtl::container_or_allocator_rebind<AllocatorOrContainer, value_t>::type alloc_or_cont_t;
|
1734
1789
|
typedef ::boost::container::dtl::flat_tree<value_t,::boost::container::dtl::select1st<Key>, Compare, alloc_or_cont_t> tree;
|
1735
|
-
|
1790
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1736
1791
|
};
|
1737
1792
|
|
1738
1793
|
namespace container {
|
@@ -1777,17 +1832,24 @@ class flat_multimap
|
|
1777
1832
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1778
1833
|
private:
|
1779
1834
|
BOOST_COPYABLE_AND_MOVABLE(flat_multimap)
|
1835
|
+
typedef std::pair<Key, T> std_pair_t;
|
1780
1836
|
typedef dtl::flat_tree<
|
1781
|
-
|
1837
|
+
std_pair_t,
|
1782
1838
|
dtl::select1st<Key>,
|
1783
1839
|
Compare,
|
1784
1840
|
AllocatorOrContainer> tree_t;
|
1785
1841
|
//This is the real tree stored here. It's based on a movable pair
|
1842
|
+
typedef dtl::pair<Key, T> dtl_pair_t;
|
1843
|
+
#ifdef BOOST_CONTAINER_STD_PAIR_IS_MOVABLE
|
1844
|
+
typedef std_pair_t impl_pair_t;
|
1845
|
+
#else
|
1846
|
+
typedef dtl_pair_t impl_pair_t;
|
1847
|
+
#endif
|
1786
1848
|
typedef dtl::flat_tree<
|
1787
|
-
|
1849
|
+
impl_pair_t,
|
1788
1850
|
dtl::select1st<Key>,
|
1789
1851
|
Compare,
|
1790
|
-
typename dtl::container_or_allocator_rebind<AllocatorOrContainer,
|
1852
|
+
typename dtl::container_or_allocator_rebind<AllocatorOrContainer, impl_pair_t >::type
|
1791
1853
|
> impl_tree_t;
|
1792
1854
|
impl_tree_t m_flat_tree; // flat tree representing flat_map
|
1793
1855
|
|
@@ -2388,7 +2450,7 @@ class flat_multimap
|
|
2388
2450
|
//! @copydoc ::boost::container::flat_set::nth(size_type) const
|
2389
2451
|
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
2390
2452
|
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
2391
|
-
{ return dtl::force_copy<
|
2453
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.nth(n)); }
|
2392
2454
|
|
2393
2455
|
//! @copydoc ::boost::container::flat_set::index_of(iterator)
|
2394
2456
|
BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline
|
@@ -2477,7 +2539,7 @@ class flat_multimap
|
|
2477
2539
|
template<class Pair>
|
2478
2540
|
inline BOOST_CONTAINER_DOC1ST
|
2479
2541
|
( iterator
|
2480
|
-
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I
|
2542
|
+
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I dtl_pair_t>::value
|
2481
2543
|
BOOST_MOVE_I iterator >::type)
|
2482
2544
|
insert(BOOST_FWD_REF(Pair) x)
|
2483
2545
|
{ return dtl::force_copy<iterator>(m_flat_tree.emplace_equal(boost::forward<Pair>(x))); }
|
@@ -2514,7 +2576,7 @@ class flat_multimap
|
|
2514
2576
|
template<class Pair>
|
2515
2577
|
inline BOOST_CONTAINER_DOC1ST
|
2516
2578
|
( iterator
|
2517
|
-
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I
|
2579
|
+
, typename dtl::enable_if_c<dtl::is_convertible<Pair BOOST_MOVE_I dtl_pair_t>::value
|
2518
2580
|
BOOST_MOVE_I iterator>::type)
|
2519
2581
|
insert(const_iterator p, BOOST_FWD_REF(Pair) x)
|
2520
2582
|
{
|
@@ -2633,6 +2695,23 @@ class flat_multimap
|
|
2633
2695
|
inline size_type erase(const key_type& x)
|
2634
2696
|
{ return m_flat_tree.erase(x); }
|
2635
2697
|
|
2698
|
+
//! <b>Requires</b>: This overload is available only if
|
2699
|
+
//! key_compare::is_transparent exists.
|
2700
|
+
//!
|
2701
|
+
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
|
2702
|
+
//!
|
2703
|
+
//! <b>Returns</b>: Returns the number of erased elements.
|
2704
|
+
template <class K>
|
2705
|
+
inline BOOST_CONTAINER_DOC1ST
|
2706
|
+
(size_type
|
2707
|
+
, typename dtl::enable_if_c<
|
2708
|
+
dtl::is_transparent<key_compare>::value && //transparent
|
2709
|
+
!dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
|
2710
|
+
!dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
|
2711
|
+
BOOST_MOVE_I size_type>::type)
|
2712
|
+
erase(const K& x)
|
2713
|
+
{ return m_flat_tree.erase(x); }
|
2714
|
+
|
2636
2715
|
//! <b>Effects</b>: Erases all the elements in the range [first, last).
|
2637
2716
|
//!
|
2638
2717
|
//! <b>Returns</b>: Returns last.
|
@@ -2977,6 +3056,10 @@ class flat_multimap
|
|
2977
3056
|
{ x.swap(y); }
|
2978
3057
|
};
|
2979
3058
|
|
3059
|
+
#if defined(BOOST_GCC) && (BOOST_GCC >= 100000) && !defined(BOOST_CONTAINER_STD_PAIR_IS_MOVABLE)
|
3060
|
+
#pragma GCC pop_options
|
3061
|
+
#endif
|
3062
|
+
|
2980
3063
|
#ifndef BOOST_CONTAINER_NO_CXX17_CTAD
|
2981
3064
|
|
2982
3065
|
template <typename InputIterator>
|
@@ -3052,10 +3135,10 @@ namespace boost {
|
|
3052
3135
|
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
3053
3136
|
struct has_trivial_destructor_after_move< boost::container::flat_multimap<Key, T, Compare, AllocatorOrContainer> >
|
3054
3137
|
{
|
3055
|
-
typedef
|
3138
|
+
typedef typename boost::container::flat_multimap<Key, T, Compare, AllocatorOrContainer>::value_type value_t;
|
3056
3139
|
typedef typename ::boost::container::dtl::container_or_allocator_rebind<AllocatorOrContainer, value_t>::type alloc_or_cont_t;
|
3057
3140
|
typedef ::boost::container::dtl::flat_tree<value_t,::boost::container::dtl::select1st<Key>, Compare, alloc_or_cont_t> tree;
|
3058
|
-
|
3141
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
3059
3142
|
};
|
3060
3143
|
|
3061
3144
|
} //namespace boost {
|
@@ -1201,7 +1201,7 @@ template <class Key, class Compare, class AllocatorOrContainer>
|
|
1201
1201
|
struct has_trivial_destructor_after_move<boost::container::flat_set<Key, Compare, AllocatorOrContainer> >
|
1202
1202
|
{
|
1203
1203
|
typedef ::boost::container::dtl::flat_tree<Key, ::boost::container::dtl::identity<Key>, Compare, AllocatorOrContainer> tree;
|
1204
|
-
|
1204
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1205
1205
|
};
|
1206
1206
|
|
1207
1207
|
namespace container {
|
@@ -1932,7 +1932,7 @@ template <class Key, class Compare, class AllocatorOrContainer>
|
|
1932
1932
|
struct has_trivial_destructor_after_move<boost::container::flat_multiset<Key, Compare, AllocatorOrContainer> >
|
1933
1933
|
{
|
1934
1934
|
typedef ::boost::container::dtl::flat_tree<Key, ::boost::container::dtl::identity<Key>, Compare, AllocatorOrContainer> tree;
|
1935
|
-
|
1935
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1936
1936
|
};
|
1937
1937
|
|
1938
1938
|
namespace container {
|
@@ -43,7 +43,6 @@
|
|
43
43
|
# include <boost/move/detail/fwd_macros.hpp>
|
44
44
|
#endif
|
45
45
|
#include <boost/move/detail/move_helpers.hpp>
|
46
|
-
#include <boost/move/detail/force_ptr.hpp>
|
47
46
|
|
48
47
|
// intrusive
|
49
48
|
#include <boost/intrusive/pointer_traits.hpp>
|
@@ -344,26 +343,13 @@ class list
|
|
344
343
|
|| allocator_traits_type::is_always_equal::value)
|
345
344
|
{
|
346
345
|
if (BOOST_LIKELY(this != &x)) {
|
347
|
-
|
348
|
-
|
349
|
-
const bool
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
if(propagate_alloc || allocators_equal){
|
355
|
-
//Destroy
|
356
|
-
this->clear();
|
357
|
-
//Move allocator if needed
|
358
|
-
this->AllocHolder::move_assign_alloc(x);
|
359
|
-
//Obtain resources
|
360
|
-
this->icont() = boost::move(x.icont());
|
361
|
-
}
|
362
|
-
//Else do a one by one move
|
363
|
-
else{
|
364
|
-
this->assign( boost::make_move_iterator(x.begin())
|
365
|
-
, boost::make_move_iterator(x.end()));
|
366
|
-
}
|
346
|
+
//We know resources can be transferred at comiple time if both allocators are
|
347
|
+
//always equal or the allocator is going to be propagated
|
348
|
+
const bool can_steal_resources_alloc
|
349
|
+
= allocator_traits_type::propagate_on_container_move_assignment::value
|
350
|
+
|| allocator_traits_type::is_always_equal::value;
|
351
|
+
dtl::bool_<can_steal_resources_alloc> flag;
|
352
|
+
this->priv_move_assign(boost::move(x), flag);
|
367
353
|
}
|
368
354
|
return *this;
|
369
355
|
}
|
@@ -1392,6 +1378,28 @@ class list
|
|
1392
1378
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1393
1379
|
private:
|
1394
1380
|
|
1381
|
+
void priv_move_assign(BOOST_RV_REF(list) x, dtl::bool_<true> /*steal_resources*/)
|
1382
|
+
{
|
1383
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
1384
|
+
this->clear();
|
1385
|
+
//Move allocator if needed
|
1386
|
+
this->AllocHolder::move_assign_alloc(x);
|
1387
|
+
//Obtain resources
|
1388
|
+
this->icont() = boost::move(x.icont());
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
void priv_move_assign(BOOST_RV_REF(list) x, dtl::bool_<false> /*steal_resources*/)
|
1392
|
+
{
|
1393
|
+
//We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
|
1394
|
+
//Resources can be transferred if both allocators are equal
|
1395
|
+
if (this->node_alloc() == x.node_alloc()) {
|
1396
|
+
this->priv_move_assign(boost::move(x), dtl::true_());
|
1397
|
+
}
|
1398
|
+
else {
|
1399
|
+
this->assign(boost::make_move_iterator(x.begin()), boost::make_move_iterator(x.end()));
|
1400
|
+
}
|
1401
|
+
}
|
1402
|
+
|
1395
1403
|
static bool priv_is_linked(const_iterator const position)
|
1396
1404
|
{
|
1397
1405
|
const_iterator cur(position);
|
@@ -1496,7 +1504,7 @@ struct has_trivial_destructor_after_move<boost::container::list<T, Allocator> >
|
|
1496
1504
|
{
|
1497
1505
|
typedef typename boost::container::list<T, Allocator>::allocator_type allocator_type;
|
1498
1506
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
1499
|
-
|
1507
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
1500
1508
|
::boost::has_trivial_destructor_after_move<pointer>::value;
|
1501
1509
|
};
|
1502
1510
|
|