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
@@ -969,6 +969,23 @@ class map
|
|
969
969
|
inline size_type erase(const key_type& x)
|
970
970
|
{ return this->base_t::erase_unique(x); }
|
971
971
|
|
972
|
+
//! <b>Requires</b>: This overload is available only if
|
973
|
+
//! key_compare::is_transparent exists.
|
974
|
+
//!
|
975
|
+
//! <b>Effects</b>: If present, erases the element in the container with key equivalent to x.
|
976
|
+
//!
|
977
|
+
//! <b>Returns</b>: Returns the number of erased elements (0/1).
|
978
|
+
template <class K>
|
979
|
+
inline BOOST_CONTAINER_DOC1ST
|
980
|
+
(size_type
|
981
|
+
, typename dtl::enable_if_c<
|
982
|
+
dtl::is_transparent<key_compare>::value && //transparent
|
983
|
+
!dtl::is_convertible<K BOOST_MOVE_I iterator>::value && //not convertible to iterator
|
984
|
+
!dtl::is_convertible<K BOOST_MOVE_I const_iterator>::value //not convertible to const_iterator
|
985
|
+
BOOST_MOVE_I size_type>::type)
|
986
|
+
erase(const K& x)
|
987
|
+
{ return this->base_t::erase_unique(x); }
|
988
|
+
|
972
989
|
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
973
990
|
|
974
991
|
//! <b>Effects</b>: Erases the element pointed to by p.
|
@@ -1376,7 +1393,7 @@ template <class Key, class T, class Compare, class Allocator, class Options>
|
|
1376
1393
|
struct has_trivial_destructor_after_move<boost::container::map<Key, T, Compare, Allocator, Options> >
|
1377
1394
|
{
|
1378
1395
|
typedef ::boost::container::dtl::tree<std::pair<const Key, T>, int, Compare, Allocator, Options> tree;
|
1379
|
-
|
1396
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1380
1397
|
};
|
1381
1398
|
|
1382
1399
|
namespace container {
|
@@ -2298,7 +2315,7 @@ template <class Key, class T, class Compare, class Allocator, class Options>
|
|
2298
2315
|
struct has_trivial_destructor_after_move<boost::container::multimap<Key, T, Compare, Allocator, Options> >
|
2299
2316
|
{
|
2300
2317
|
typedef ::boost::container::dtl::tree<std::pair<const Key, T>, int, Compare, Allocator, Options> tree;
|
2301
|
-
|
2318
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
2302
2319
|
};
|
2303
2320
|
|
2304
2321
|
namespace container {
|
@@ -8,8 +8,8 @@
|
|
8
8
|
//
|
9
9
|
//////////////////////////////////////////////////////////////////////////////
|
10
10
|
|
11
|
-
#ifndef
|
12
|
-
#define
|
11
|
+
#ifndef BOOST_CONTAINER_NODE_ALLOCATOR_HPP
|
12
|
+
#define BOOST_CONTAINER_NODE_ALLOCATOR_HPP
|
13
13
|
|
14
14
|
#ifndef BOOST_CONFIG_HPP
|
15
15
|
# include <boost/config.hpp>
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#include <boost/container/detail/node_pool.hpp>
|
27
27
|
#include <boost/container/detail/mpl.hpp>
|
28
28
|
#include <boost/container/detail/multiallocation_chain.hpp>
|
29
|
+
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
|
29
30
|
#include <boost/container/detail/dlmalloc.hpp>
|
30
31
|
#include <boost/container/detail/singleton.hpp>
|
31
32
|
|
@@ -62,7 +63,7 @@ class node_allocator
|
|
62
63
|
typedef unsigned int allocation_type;
|
63
64
|
typedef node_allocator<T, NodesPerBlock, Version> self_t;
|
64
65
|
|
65
|
-
|
66
|
+
BOOST_STATIC_CONSTEXPR std::size_t nodes_per_block = NodesPerBlock;
|
66
67
|
|
67
68
|
BOOST_CONTAINER_STATIC_ASSERT((Version <=2));
|
68
69
|
#endif
|
@@ -225,7 +226,10 @@ class node_allocator
|
|
225
226
|
typedef dtl::singleton_default<shared_pool_t> singleton_t;
|
226
227
|
typename shared_pool_t::multiallocation_chain ch;
|
227
228
|
singleton_t::instance().allocate_nodes(num_elements, ch);
|
228
|
-
chain.incorporate_after(chain.before_begin()
|
229
|
+
chain.incorporate_after(chain.before_begin()
|
230
|
+
, (T*)boost::movelib::iterator_to_raw_pointer(ch.begin())
|
231
|
+
, (T*)boost::movelib::iterator_to_raw_pointer(ch.last())
|
232
|
+
, ch.size());
|
229
233
|
}
|
230
234
|
|
231
235
|
//!Deallocates memory previously allocated with allocate_one().
|
@@ -246,7 +250,10 @@ class node_allocator
|
|
246
250
|
typedef dtl::shared_node_pool
|
247
251
|
<sizeof(T), NodesPerBlock> shared_pool_t;
|
248
252
|
typedef dtl::singleton_default<shared_pool_t> singleton_t;
|
249
|
-
typename shared_pool_t::multiallocation_chain ch
|
253
|
+
typename shared_pool_t::multiallocation_chain ch
|
254
|
+
( boost::movelib::iterator_to_raw_pointer(chain.begin())
|
255
|
+
, boost::movelib::iterator_to_raw_pointer(chain.last())
|
256
|
+
, chain.size());
|
250
257
|
singleton_t::instance().deallocate_nodes(ch);
|
251
258
|
}
|
252
259
|
|
@@ -285,8 +292,8 @@ class node_allocator
|
|
285
292
|
void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
|
286
293
|
{
|
287
294
|
BOOST_CONTAINER_STATIC_ASSERT(( Version > 1 ));
|
288
|
-
void *first =
|
289
|
-
void *last =
|
295
|
+
void *first = boost::movelib::iterator_to_raw_pointer(chain.begin());
|
296
|
+
void *last = boost::movelib::iterator_to_raw_pointer(chain.last());
|
290
297
|
size_t num = chain.size();
|
291
298
|
dlmalloc_memchain ch;
|
292
299
|
BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, first, last, num);
|
@@ -337,4 +344,4 @@ class node_allocator
|
|
337
344
|
|
338
345
|
#include <boost/container/detail/config_end.hpp>
|
339
346
|
|
340
|
-
#endif //#ifndef
|
347
|
+
#endif //#ifndef BOOST_CONTAINER_NODE_ALLOCATOR_HPP
|
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <boost/container/detail/workaround.hpp>
|
24
24
|
#include <boost/container/detail/placement_new.hpp>
|
25
25
|
#include <boost/move/detail/to_raw_pointer.hpp>
|
26
|
+
#include <boost/move/detail/launder.hpp>
|
26
27
|
#include <boost/container/allocator_traits.hpp>
|
27
28
|
#include <boost/container/detail/mpl.hpp>
|
28
29
|
|
@@ -146,7 +147,7 @@ class node_handle
|
|
146
147
|
}
|
147
148
|
|
148
149
|
void destroy_alloc() BOOST_NOEXCEPT
|
149
|
-
{
|
150
|
+
{ move_detail::launder_cast<nallocator_type*>(&m_nalloc_storage)->~nallocator_type(); }
|
150
151
|
|
151
152
|
node_pointer &get_node_pointer() BOOST_NOEXCEPT
|
152
153
|
{ return m_ptr; }
|
@@ -231,7 +232,7 @@ class node_handle
|
|
231
232
|
if(was_nh_non_null){
|
232
233
|
if(was_this_non_null){
|
233
234
|
this->destroy_deallocate_node();
|
234
|
-
|
235
|
+
BOOST_IF_CONSTEXPR(nator_traits::propagate_on_container_move_assignment::value){
|
235
236
|
this->node_alloc() = ::boost::move(nh.node_alloc());
|
236
237
|
}
|
237
238
|
}
|
@@ -335,7 +336,7 @@ class node_handle
|
|
335
336
|
|
336
337
|
if(was_nh_non_null){
|
337
338
|
if(was_this_non_null){
|
338
|
-
|
339
|
+
BOOST_IF_CONSTEXPR(nator_traits::propagate_on_container_swap::value){
|
339
340
|
::boost::adl_move_swap(this->node_alloc(), nh.node_alloc());
|
340
341
|
}
|
341
342
|
}
|
@@ -381,7 +382,7 @@ class node_handle
|
|
381
382
|
nallocator_type &node_alloc() BOOST_NOEXCEPT
|
382
383
|
{
|
383
384
|
BOOST_ASSERT(!empty());
|
384
|
-
return *
|
385
|
+
return *move_detail::launder_cast<nallocator_type*>(&m_nalloc_storage);
|
385
386
|
}
|
386
387
|
|
387
388
|
|
@@ -391,7 +392,7 @@ class node_handle
|
|
391
392
|
const nallocator_type &node_alloc() const BOOST_NOEXCEPT
|
392
393
|
{
|
393
394
|
BOOST_ASSERT(!empty());
|
394
|
-
return *
|
395
|
+
return *move_detail::launder_cast<const nallocator_type*>(&m_nalloc_storage);
|
395
396
|
}
|
396
397
|
|
397
398
|
//! <b>Effects</b>: x.swap(y).
|
@@ -52,8 +52,8 @@ enum tree_type_enum
|
|
52
52
|
template<tree_type_enum TreeType, bool OptimizeSize>
|
53
53
|
struct tree_opt
|
54
54
|
{
|
55
|
-
|
56
|
-
|
55
|
+
BOOST_STATIC_CONSTEXPR boost::container::tree_type_enum tree_type = TreeType;
|
56
|
+
BOOST_STATIC_CONSTEXPR bool optimize_size = OptimizeSize;
|
57
57
|
};
|
58
58
|
|
59
59
|
typedef tree_opt<red_black_tree, true> tree_assoc_defaults;
|
@@ -116,10 +116,10 @@ using tree_assoc_options_t = typename boost::container::tree_assoc_options<Optio
|
|
116
116
|
template<bool StoreHash, bool CacheBegin, bool LinearBuckets, bool FastmodBuckets>
|
117
117
|
struct hash_opt
|
118
118
|
{
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
119
|
+
BOOST_STATIC_CONSTEXPR bool store_hash = StoreHash;
|
120
|
+
BOOST_STATIC_CONSTEXPR bool cache_begin = CacheBegin;
|
121
|
+
BOOST_STATIC_CONSTEXPR bool linear_buckets = LinearBuckets;
|
122
|
+
BOOST_STATIC_CONSTEXPR bool fastmod_buckets = FastmodBuckets;
|
123
123
|
};
|
124
124
|
|
125
125
|
typedef hash_opt<false, false, false, false> hash_assoc_defaults;
|
@@ -203,13 +203,13 @@ struct default_if_void<void, Default>
|
|
203
203
|
template<std::size_t N, std::size_t DefaultN>
|
204
204
|
struct default_if_zero
|
205
205
|
{
|
206
|
-
|
206
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = N;
|
207
207
|
};
|
208
208
|
|
209
209
|
template<std::size_t DefaultN>
|
210
210
|
struct default_if_zero<0u, DefaultN>
|
211
211
|
{
|
212
|
-
|
212
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = DefaultN;
|
213
213
|
};
|
214
214
|
|
215
215
|
|
@@ -364,7 +364,7 @@ template<class GrowthType, std::size_t InplaceAlignment>
|
|
364
364
|
struct small_vector_opt
|
365
365
|
{
|
366
366
|
typedef GrowthType growth_factor_type;
|
367
|
-
|
367
|
+
BOOST_STATIC_CONSTEXPR std::size_t inplace_alignment = InplaceAlignment;
|
368
368
|
};
|
369
369
|
|
370
370
|
typedef small_vector_opt<void, 0u> small_vector_null_opt;
|
@@ -430,8 +430,8 @@ BOOST_INTRUSIVE_OPTION_CONSTANT(throw_on_overflow, bool, ThrowOnOverflow, throw_
|
|
430
430
|
template<bool ThrowOnOverflow, std::size_t InplaceAlignment>
|
431
431
|
struct static_vector_opt
|
432
432
|
{
|
433
|
-
|
434
|
-
|
433
|
+
BOOST_STATIC_CONSTEXPR bool throw_on_overflow = ThrowOnOverflow;
|
434
|
+
BOOST_STATIC_CONSTEXPR std::size_t inplace_alignment = InplaceAlignment;
|
435
435
|
};
|
436
436
|
|
437
437
|
typedef static_vector_opt<true, 0u> static_vector_null_opt;
|
@@ -515,7 +515,7 @@ template<class GrowthType, class StoredSizeType, std::size_t FreeFraction>
|
|
515
515
|
struct devector_opt
|
516
516
|
: vector_opt<GrowthType, StoredSizeType>
|
517
517
|
{
|
518
|
-
|
518
|
+
BOOST_STATIC_CONSTEXPR std::size_t free_fraction = FreeFraction;
|
519
519
|
};
|
520
520
|
|
521
521
|
typedef devector_opt<void, void, 0u> devector_null_opt;
|
@@ -606,8 +606,8 @@ using devector_options_t = typename boost::container::devector_options<Options..
|
|
606
606
|
template<std::size_t BlockBytes, std::size_t BlockSize>
|
607
607
|
struct deque_opt
|
608
608
|
{
|
609
|
-
|
610
|
-
|
609
|
+
BOOST_STATIC_CONSTEXPR std::size_t block_bytes = BlockBytes;
|
610
|
+
BOOST_STATIC_CONSTEXPR std::size_t block_size = BlockSize;
|
611
611
|
BOOST_CONTAINER_STATIC_ASSERT_MSG(!(block_bytes && block_size), "block_bytes and block_size can't be specified at the same time");
|
612
612
|
};
|
613
613
|
|
@@ -617,7 +617,7 @@ typedef deque_opt<0u, 0u> deque_null_opt;
|
|
617
617
|
|
618
618
|
//! Helper metafunction to combine options into a single type to be used
|
619
619
|
//! by \c boost::container::deque.
|
620
|
-
//! Supported options are: \c boost::container::block_bytes
|
620
|
+
//! Supported options are: \c boost::container::block_bytes and \c boost::container::block_size
|
621
621
|
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) || defined(BOOST_CONTAINER_VARIADIC_TEMPLATES)
|
622
622
|
template<class ...Options>
|
623
623
|
#else
|
@@ -32,7 +32,7 @@ class memory_resource
|
|
32
32
|
{
|
33
33
|
public:
|
34
34
|
// For exposition only
|
35
|
-
|
35
|
+
BOOST_STATIC_CONSTEXPR std::size_t max_align =
|
36
36
|
boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
|
37
37
|
|
38
38
|
//! <b>Effects</b>: Destroys
|
@@ -70,7 +70,7 @@ class BOOST_CONTAINER_DECL monotonic_buffer_resource
|
|
70
70
|
//! to the upstream allocator
|
71
71
|
//!
|
72
72
|
//! <b>Note</b>: Non-standard extension.
|
73
|
-
|
73
|
+
BOOST_STATIC_CONSTEXPR std::size_t initial_next_buffer_size = 32u*sizeof(void*);
|
74
74
|
|
75
75
|
//! <b>Requires</b>: `upstream` shall be the address of a valid memory resource or `nullptr`
|
76
76
|
//!
|
@@ -36,19 +36,19 @@ namespace pmr_dtl {
|
|
36
36
|
template<class T>
|
37
37
|
struct max_allocator_alignment
|
38
38
|
{
|
39
|
-
|
39
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = 1;
|
40
40
|
};
|
41
41
|
|
42
42
|
template<class T>
|
43
43
|
struct max_allocator_alignment< ::boost::container::new_allocator<T> >
|
44
44
|
{
|
45
|
-
|
45
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
|
46
46
|
};
|
47
47
|
|
48
48
|
template<class T>
|
49
49
|
struct max_allocator_alignment< std::allocator<T> >
|
50
50
|
{
|
51
|
-
|
51
|
+
BOOST_STATIC_CONSTEXPR std::size_t value = boost::move_detail::alignment_of<boost::move_detail::max_align_t>::value;
|
52
52
|
};
|
53
53
|
|
54
54
|
} //namespace pmr_dtl
|
@@ -56,7 +56,7 @@ struct is_scoped_allocator_imp
|
|
56
56
|
template <typename T>
|
57
57
|
static int test(...);
|
58
58
|
|
59
|
-
|
59
|
+
BOOST_STATIC_CONSTEXPR bool value = (sizeof(yes_type) == sizeof(test<Allocator>(0)));
|
60
60
|
};
|
61
61
|
|
62
62
|
template<class MaybeScopedAlloc, bool = is_scoped_allocator_imp<MaybeScopedAlloc>::value >
|
@@ -1026,7 +1026,7 @@ template <class Key, class Compare, class Allocator, class Options>
|
|
1026
1026
|
struct has_trivial_destructor_after_move<boost::container::set<Key, Compare, Allocator, Options> >
|
1027
1027
|
{
|
1028
1028
|
typedef ::boost::container::dtl::tree<Key, void, Compare, Allocator, Options> tree;
|
1029
|
-
|
1029
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1030
1030
|
};
|
1031
1031
|
|
1032
1032
|
namespace container {
|
@@ -1681,7 +1681,7 @@ template <class Key, class Compare, class Allocator, class Options>
|
|
1681
1681
|
struct has_trivial_destructor_after_move<boost::container::multiset<Key, Compare, Allocator, Options> >
|
1682
1682
|
{
|
1683
1683
|
typedef ::boost::container::dtl::tree<Key, void, Compare, Allocator, Options> tree;
|
1684
|
-
|
1684
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<tree>::value;
|
1685
1685
|
};
|
1686
1686
|
|
1687
1687
|
namespace container {
|
@@ -47,7 +47,7 @@
|
|
47
47
|
#include <boost/move/detail/fwd_macros.hpp>
|
48
48
|
#endif
|
49
49
|
#include <boost/move/detail/move_helpers.hpp>
|
50
|
-
|
50
|
+
|
51
51
|
// std
|
52
52
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
53
53
|
#include <initializer_list>
|
@@ -368,28 +368,14 @@ class slist
|
|
368
368
|
BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
|
369
369
|
|| allocator_traits_type::is_always_equal::value)
|
370
370
|
{
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
//going to be equal after this function (either propagated or already equal)
|
380
|
-
if(propagate_alloc || allocators_equal){
|
381
|
-
//Destroy
|
382
|
-
this->clear();
|
383
|
-
//Move allocator if needed
|
384
|
-
this->AllocHolder::move_assign_alloc(sr);
|
385
|
-
//Obtain resources
|
386
|
-
this->icont() = boost::move(sr.icont());
|
387
|
-
}
|
388
|
-
//Else do a one by one move
|
389
|
-
else{
|
390
|
-
this->assign( boost::make_move_iterator(sr.begin())
|
391
|
-
, boost::make_move_iterator(sr.end()));
|
392
|
-
}
|
371
|
+
if (BOOST_LIKELY(this != &x)) {
|
372
|
+
//We know resources can be transferred at comiple time if both allocators are
|
373
|
+
//always equal or the allocator is going to be propagated
|
374
|
+
const bool can_steal_resources_alloc
|
375
|
+
= allocator_traits_type::propagate_on_container_move_assignment::value
|
376
|
+
|| allocator_traits_type::is_always_equal::value;
|
377
|
+
dtl::bool_<can_steal_resources_alloc> flag;
|
378
|
+
this->priv_move_assign(boost::move(x), flag);
|
393
379
|
}
|
394
380
|
return *this;
|
395
381
|
}
|
@@ -1579,6 +1565,27 @@ class slist
|
|
1579
1565
|
|
1580
1566
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1581
1567
|
private:
|
1568
|
+
void priv_move_assign(BOOST_RV_REF(slist) x, dtl::bool_<true> /*steal_resources*/)
|
1569
|
+
{
|
1570
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
1571
|
+
this->clear();
|
1572
|
+
//Move allocator if needed
|
1573
|
+
this->AllocHolder::move_assign_alloc(x);
|
1574
|
+
//Obtain resources
|
1575
|
+
this->icont() = boost::move(x.icont());
|
1576
|
+
}
|
1577
|
+
|
1578
|
+
void priv_move_assign(BOOST_RV_REF(slist) x, dtl::bool_<false> /*steal_resources*/)
|
1579
|
+
{
|
1580
|
+
//We can't guarantee a compile-time equal allocator or propagation so fallback to runtime
|
1581
|
+
//Resources can be transferred if both allocators are equal
|
1582
|
+
if (this->node_alloc() == x.node_alloc()) {
|
1583
|
+
this->priv_move_assign(boost::move(x), dtl::true_());
|
1584
|
+
}
|
1585
|
+
else {
|
1586
|
+
this->assign(boost::make_move_iterator(x.begin()), boost::make_move_iterator(x.end()));
|
1587
|
+
}
|
1588
|
+
}
|
1582
1589
|
|
1583
1590
|
template<class U>
|
1584
1591
|
void priv_push_front(BOOST_FWD_REF(U) x)
|
@@ -1666,7 +1673,7 @@ struct has_trivial_destructor_after_move<boost::container::slist<T, Allocator> >
|
|
1666
1673
|
{
|
1667
1674
|
typedef typename boost::container::slist<T, Allocator>::allocator_type allocator_type;
|
1668
1675
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
1669
|
-
|
1676
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
1670
1677
|
::boost::has_trivial_destructor_after_move<pointer>::value;
|
1671
1678
|
};
|
1672
1679
|
|
@@ -39,7 +39,6 @@
|
|
39
39
|
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
40
40
|
#include <boost/move/detail/fwd_macros.hpp>
|
41
41
|
#endif
|
42
|
-
#include <boost/move/detail/force_ptr.hpp>
|
43
42
|
|
44
43
|
//std
|
45
44
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
@@ -284,7 +283,7 @@ class small_vector_allocator
|
|
284
283
|
{ return !(l == r); }
|
285
284
|
|
286
285
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
287
|
-
|
286
|
+
public:
|
288
287
|
|
289
288
|
typedef small_vector_base<value_type, allocator_type, Options> derived_type;
|
290
289
|
typedef typename dtl::vector_for_small_vector
|
@@ -305,13 +304,13 @@ struct small_vector_storage
|
|
305
304
|
typedef typename dtl::aligned_storage
|
306
305
|
<sizeof(T)*N, Alignment>::type storage_type;
|
307
306
|
storage_type m_storage;
|
308
|
-
|
307
|
+
BOOST_STATIC_CONSTEXPR std::size_t sms_size = sizeof(storage_type)/sizeof(T);
|
309
308
|
};
|
310
309
|
|
311
310
|
template<class T, std::size_t Alignment>
|
312
311
|
struct small_vector_storage<T, 0u, Alignment>
|
313
312
|
{
|
314
|
-
|
313
|
+
BOOST_STATIC_CONSTEXPR std::size_t sms_size = 0u;
|
315
314
|
};
|
316
315
|
|
317
316
|
//! This class consists of common code from all small_vector<T, N> types that don't depend on the
|
@@ -347,9 +346,10 @@ class small_vector_base
|
|
347
346
|
public:
|
348
347
|
//Make it public as it will be inherited by small_vector and container
|
349
348
|
//must have this public member
|
350
|
-
typedef typename real_allocator<T, SecAlloc>::type
|
351
|
-
typedef typename allocator_traits<
|
352
|
-
template portable_rebind_alloc<void>::type
|
349
|
+
typedef typename real_allocator<T, SecAlloc>::type underlying_allocator_t;
|
350
|
+
typedef typename allocator_traits<underlying_allocator_t>::
|
351
|
+
template portable_rebind_alloc<void>::type void_underlying_allocator_t;
|
352
|
+
typedef small_vector_allocator<T, void_underlying_allocator_t, Options>allocator_type;
|
353
353
|
typedef typename dtl::get_small_vector_opt<Options>::type options_t;
|
354
354
|
typedef typename dtl::vector_for_small_vector
|
355
355
|
<T, SecAlloc, Options>::type base_type;
|
@@ -357,12 +357,13 @@ class small_vector_base
|
|
357
357
|
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
|
358
358
|
typedef typename allocator_traits<allocator_type>::void_pointer void_pointer;
|
359
359
|
typedef typename allocator_traits<allocator_type>::const_void_pointer const_void_pointer;
|
360
|
-
typedef
|
360
|
+
typedef typename base_type::size_type size_type;
|
361
|
+
|
361
362
|
|
362
363
|
private:
|
363
364
|
BOOST_COPYABLE_AND_MOVABLE(small_vector_base)
|
364
365
|
|
365
|
-
friend class small_vector_allocator<T,
|
366
|
+
friend class small_vector_allocator<T, void_underlying_allocator_t, Options>;
|
366
367
|
|
367
368
|
inline
|
368
369
|
const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
|
@@ -378,18 +379,26 @@ class small_vector_base
|
|
378
379
|
|
379
380
|
public:
|
380
381
|
|
382
|
+
BOOST_CONTAINER_ATTRIBUTE_NODISCARD bool is_small() const
|
383
|
+
{ return this->internal_storage() == this->data(); }
|
384
|
+
|
381
385
|
protected:
|
382
386
|
|
383
|
-
inline explicit small_vector_base(initial_capacity_t,
|
387
|
+
inline explicit small_vector_base(initial_capacity_t, size_type initial_capacity)
|
384
388
|
: base_type(initial_capacity_t(), this->internal_storage(), initial_capacity)
|
385
389
|
{}
|
386
390
|
|
387
391
|
template<class AllocFwd>
|
388
|
-
inline explicit small_vector_base(initial_capacity_t,
|
392
|
+
inline explicit small_vector_base(initial_capacity_t, size_type capacity, BOOST_FWD_REF(AllocFwd) a)
|
389
393
|
: base_type(initial_capacity_t(), this->internal_storage(), capacity, ::boost::forward<AllocFwd>(a))
|
390
394
|
{}
|
391
395
|
|
392
|
-
|
396
|
+
template<class AllocFwd>
|
397
|
+
inline explicit small_vector_base(initial_capacity_t, size_type capacity, BOOST_FWD_REF(AllocFwd) a, small_vector_base &x)
|
398
|
+
: base_type(initial_capacity_t(), this->internal_storage(), capacity, ::boost::forward<AllocFwd>(a), x)
|
399
|
+
{}
|
400
|
+
|
401
|
+
inline explicit small_vector_base(maybe_initial_capacity_t, size_type initial_capacity, size_type initial_size)
|
393
402
|
: base_type( maybe_initial_capacity_t()
|
394
403
|
, (initial_capacity >= initial_size) ? this->internal_storage() : pointer()
|
395
404
|
, (initial_capacity >= initial_size) ? initial_capacity : initial_size
|
@@ -397,7 +406,7 @@ class small_vector_base
|
|
397
406
|
{}
|
398
407
|
|
399
408
|
template<class AllocFwd>
|
400
|
-
inline explicit small_vector_base(maybe_initial_capacity_t,
|
409
|
+
inline explicit small_vector_base(maybe_initial_capacity_t, size_type initial_capacity, size_type initial_size, BOOST_FWD_REF(AllocFwd) a)
|
401
410
|
: base_type(maybe_initial_capacity_t()
|
402
411
|
, (initial_capacity >= initial_size) ? this->internal_storage() : pointer()
|
403
412
|
, (initial_capacity >= initial_size) ? initial_capacity : initial_size
|
@@ -405,11 +414,17 @@ class small_vector_base
|
|
405
414
|
)
|
406
415
|
{}
|
407
416
|
|
417
|
+
void prot_shrink_to_fit_small(const size_type small_capacity)
|
418
|
+
{ this->base_type::prot_shrink_to_fit_small(this->internal_storage(), small_capacity); }
|
419
|
+
|
408
420
|
using base_type::protected_set_size;
|
409
421
|
|
410
422
|
//~small_vector_base(){}
|
411
423
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
412
424
|
|
425
|
+
inline void prot_swap(small_vector_base& other, size_type internal_capacity_value)
|
426
|
+
{ this->base_type::prot_swap_small(other, internal_capacity_value); }
|
427
|
+
|
413
428
|
public:
|
414
429
|
inline small_vector_base& operator=(BOOST_COPY_ASSIGN_REF(small_vector_base) other)
|
415
430
|
{ return static_cast<small_vector_base&>(this->base_type::operator=(static_cast<base_type const&>(other))); }
|
@@ -418,24 +433,8 @@ class small_vector_base
|
|
418
433
|
{ return static_cast<small_vector_base&>(this->base_type::operator=(BOOST_MOVE_BASE(base_type, other))); }
|
419
434
|
|
420
435
|
inline void swap(small_vector_base &other)
|
421
|
-
{ return this->base_type::
|
436
|
+
{ return this->base_type::prot_swap_small(other, 0u); }
|
422
437
|
|
423
|
-
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
424
|
-
protected:
|
425
|
-
void move_construct_impl(base_type &x)
|
426
|
-
{
|
427
|
-
if(base_type::is_propagable_from(x.get_stored_allocator(), x.data(), this->base_type::get_stored_allocator(), true)){
|
428
|
-
this->steal_resources(x);
|
429
|
-
}
|
430
|
-
else{
|
431
|
-
const typename base_type::size_type sz = x.size();
|
432
|
-
::boost::container::uninitialized_move_alloc_n_source
|
433
|
-
(this->base_type::get_stored_allocator(), x.begin(), sz, this->begin());
|
434
|
-
this->protected_set_size(sz);
|
435
|
-
x.clear();
|
436
|
-
}
|
437
|
-
}
|
438
|
-
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
439
438
|
};
|
440
439
|
|
441
440
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
@@ -449,7 +448,7 @@ template<class T, std::size_t N, class Options>
|
|
449
448
|
struct small_vector_storage_definer
|
450
449
|
{
|
451
450
|
typedef typename dtl::get_small_vector_opt<Options>::type options_t;
|
452
|
-
|
451
|
+
BOOST_STATIC_CONSTEXPR std::size_t final_alignment =
|
453
452
|
options_t::inplace_alignment ? options_t::inplace_alignment : dtl::alignment_of<T>::value;
|
454
453
|
typedef small_vector_storage<T, N, final_alignment> type;
|
455
454
|
};
|
@@ -488,7 +487,7 @@ template<class T, class VoidAlloc, class Options>
|
|
488
487
|
inline typename small_vector_allocator<T, VoidAlloc, Options>::const_pointer
|
489
488
|
small_vector_allocator<T, VoidAlloc, Options>::internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW
|
490
489
|
{
|
491
|
-
const vector_type& v =
|
490
|
+
const vector_type& v = *static_cast<const vector_type*>(static_cast<const void *>(this));
|
492
491
|
BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0);
|
493
492
|
const char *addr = reinterpret_cast<const char*>(&v);
|
494
493
|
typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<const char>::type const_char_pointer;
|
@@ -501,7 +500,7 @@ template <class T, class VoidAlloc, class Options>
|
|
501
500
|
inline typename small_vector_allocator<T, VoidAlloc, Options>::pointer
|
502
501
|
small_vector_allocator<T, VoidAlloc, Options>::internal_storage() BOOST_NOEXCEPT_OR_NOTHROW
|
503
502
|
{
|
504
|
-
vector_type& v =
|
503
|
+
vector_type& v = *static_cast<vector_type*>(static_cast<void*>(this));
|
505
504
|
BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0);
|
506
505
|
char* addr = reinterpret_cast<char*>(&v);
|
507
506
|
typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<char>::type char_pointer;
|
@@ -550,7 +549,7 @@ class small_vector
|
|
550
549
|
typedef typename base_type::size_type size_type;
|
551
550
|
typedef typename base_type::value_type value_type;
|
552
551
|
|
553
|
-
inline static
|
552
|
+
inline static size_type internal_capacity()
|
554
553
|
{ return static_capacity; }
|
555
554
|
|
556
555
|
typedef allocator_traits<typename base_type::allocator_type> allocator_traits_type;
|
@@ -558,7 +557,7 @@ class small_vector
|
|
558
557
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
559
558
|
|
560
559
|
//! @brief The capacity/max size of the container
|
561
|
-
|
560
|
+
BOOST_STATIC_CONSTEXPR size_type static_capacity = small_vector_storage_definer<T, N, Options>::type::sms_size;
|
562
561
|
|
563
562
|
public:
|
564
563
|
inline small_vector()
|
@@ -627,17 +626,17 @@ class small_vector
|
|
627
626
|
{ this->assign(other.cbegin(), other.cend()); }
|
628
627
|
|
629
628
|
inline explicit small_vector(BOOST_RV_REF(base_type) other)
|
630
|
-
: base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()))
|
631
|
-
{
|
629
|
+
: base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()), other)
|
630
|
+
{}
|
632
631
|
|
633
632
|
inline small_vector(BOOST_RV_REF(small_vector) other)
|
634
633
|
BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<value_type>::value)
|
635
|
-
: base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()))
|
636
|
-
{
|
634
|
+
: base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator()), other)
|
635
|
+
{}
|
637
636
|
|
638
637
|
inline small_vector(BOOST_RV_REF(small_vector) other, const allocator_type &a)
|
639
|
-
: base_type(initial_capacity_t(), internal_capacity(), a)
|
640
|
-
{
|
638
|
+
: base_type(initial_capacity_t(), internal_capacity(), a, other)
|
639
|
+
{}
|
641
640
|
|
642
641
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
643
642
|
inline small_vector(std::initializer_list<value_type> il, const allocator_type& a = allocator_type())
|
@@ -663,7 +662,10 @@ class small_vector
|
|
663
662
|
{ return static_cast<small_vector&>(this->base_type::operator=(boost::move(other))); }
|
664
663
|
|
665
664
|
inline void swap(small_vector &other)
|
666
|
-
{ return this->base_type::
|
665
|
+
{ return this->base_type::prot_swap(other, static_capacity); }
|
666
|
+
|
667
|
+
inline void shrink_to_fit()
|
668
|
+
{ this->base_type::prot_shrink_to_fit_small(this->internal_capacity()); }
|
667
669
|
};
|
668
670
|
|
669
671
|
}}
|
@@ -678,7 +680,7 @@ template <class T, class Allocator>
|
|
678
680
|
struct has_trivial_destructor_after_move<boost::container::vector<T, Allocator> >
|
679
681
|
{
|
680
682
|
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
|
681
|
-
|
683
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<Allocator>::value &&
|
682
684
|
::boost::has_trivial_destructor_after_move<pointer>::value;
|
683
685
|
};
|
684
686
|
|