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
@@ -51,6 +51,7 @@
|
|
51
51
|
#include <boost/move/iterator.hpp>
|
52
52
|
#include <boost/move/traits.hpp>
|
53
53
|
#include <boost/move/utility_core.hpp>
|
54
|
+
#include <boost/move/detail/launder.hpp>
|
54
55
|
// move/detail
|
55
56
|
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
56
57
|
#include <boost/move/detail/fwd_macros.hpp>
|
@@ -268,15 +269,15 @@ inline Pointer &get_ptr(vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NO
|
|
268
269
|
struct initial_capacity_t {};
|
269
270
|
|
270
271
|
struct vector_uninitialized_size_t {};
|
271
|
-
|
272
|
+
BOOST_CONTAINER_CONSTANT_VAR vector_uninitialized_size_t vector_uninitialized_size = vector_uninitialized_size_t();
|
272
273
|
|
273
274
|
struct maybe_initial_capacity_t {};
|
274
275
|
|
275
276
|
template <class T>
|
276
277
|
struct vector_value_traits_base
|
277
278
|
{
|
278
|
-
|
279
|
-
|
279
|
+
BOOST_STATIC_CONSTEXPR bool trivial_dctr = dtl::is_trivially_destructible<T>::value;
|
280
|
+
BOOST_STATIC_CONSTEXPR bool trivial_dctr_after_move = has_trivial_destructor_after_move<T>::value;
|
280
281
|
};
|
281
282
|
|
282
283
|
template <class Allocator>
|
@@ -351,23 +352,23 @@ struct vector_alloc_holder
|
|
351
352
|
|
352
353
|
public:
|
353
354
|
|
354
|
-
|
355
|
-
|
355
|
+
template <bool PropagateAllocator>
|
356
|
+
inline static bool is_propagable_from(const allocator_type &from_alloc, pointer p, const allocator_type &to_alloc)
|
356
357
|
{
|
357
|
-
(void)
|
358
|
+
(void)p; (void)to_alloc; (void)from_alloc;
|
358
359
|
const bool all_storage_propagable = !allocator_traits_type::is_partially_propagable::value ||
|
359
360
|
!allocator_traits_type::storage_is_unpropagable(from_alloc, p);
|
360
361
|
return all_storage_propagable &&
|
361
|
-
(
|
362
|
+
(PropagateAllocator || allocator_traits_type::is_always_equal::value || allocator_traits_type::equal(from_alloc, to_alloc));
|
362
363
|
}
|
363
364
|
|
364
|
-
|
365
|
-
|
365
|
+
template <bool PropagateAllocator>
|
366
|
+
inline static bool are_swap_propagable(const allocator_type &l_a, pointer l_p, const allocator_type &r_a, pointer r_p)
|
366
367
|
{
|
367
|
-
(void)
|
368
|
+
(void)l_p; (void)r_p; (void)l_a; (void)r_a;
|
368
369
|
const bool all_storage_propagable = !allocator_traits_type::is_partially_propagable::value ||
|
369
370
|
!(allocator_traits_type::storage_is_unpropagable(l_a, l_p) || allocator_traits_type::storage_is_unpropagable(r_a, r_p));
|
370
|
-
return all_storage_propagable && (
|
371
|
+
return all_storage_propagable && (PropagateAllocator || allocator_traits_type::is_always_equal::value || allocator_traits_type::equal(l_a, r_a));
|
371
372
|
}
|
372
373
|
|
373
374
|
//Constructor, does not throw
|
@@ -545,7 +546,7 @@ struct vector_alloc_holder
|
|
545
546
|
inline const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW
|
546
547
|
{ return *this; }
|
547
548
|
|
548
|
-
inline
|
549
|
+
inline pointer start() const BOOST_NOEXCEPT_OR_NOTHROW
|
549
550
|
{ return m_start; }
|
550
551
|
inline size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
|
551
552
|
{ return m_capacity; }
|
@@ -837,14 +838,14 @@ private:
|
|
837
838
|
|
838
839
|
|
839
840
|
protected:
|
840
|
-
|
841
|
-
|
842
|
-
{ return alloc_holder_t::is_propagable_from(from_alloc, p, to_alloc
|
841
|
+
template <bool PropagateAllocator>
|
842
|
+
inline static bool is_propagable_from(const allocator_type &from_alloc, pointer p, const allocator_type &to_alloc)
|
843
|
+
{ return alloc_holder_t::template is_propagable_from<PropagateAllocator>(from_alloc, p, to_alloc); }
|
843
844
|
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
{ return alloc_holder_t::are_swap_propagable(l_a, l_p, r_a, r_p
|
845
|
+
template <bool PropagateAllocator>
|
846
|
+
inline static bool are_swap_propagable( const allocator_type &l_a, pointer l_p
|
847
|
+
, const allocator_type &r_a, pointer r_p)
|
848
|
+
{ return alloc_holder_t::template are_swap_propagable<PropagateAllocator>(l_a, l_p, r_a, r_p); }
|
848
849
|
|
849
850
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
850
851
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
@@ -866,6 +867,25 @@ private:
|
|
866
867
|
: m_holder(initial_capacity_t(), initial_memory, cap, ::boost::forward<AllocFwd>(a))
|
867
868
|
{}
|
868
869
|
|
870
|
+
template<class AllocFwd>
|
871
|
+
inline vector(initial_capacity_t, pointer initial_memory, size_type cap, BOOST_FWD_REF(AllocFwd) a, vector &x)
|
872
|
+
: m_holder(initial_capacity_t(), initial_memory, cap, ::boost::forward<AllocFwd>(a))
|
873
|
+
{
|
874
|
+
allocator_type &this_al = this->get_stored_allocator();
|
875
|
+
if (this->template is_propagable_from<true>(x.get_stored_allocator(), x.data(), this_al)) {
|
876
|
+
this->steal_resources(x);
|
877
|
+
}
|
878
|
+
else {
|
879
|
+
const size_type sz = x.size();
|
880
|
+
::boost::container::uninitialized_move_alloc_n_source
|
881
|
+
( this_al, x.priv_raw_begin(), sz
|
882
|
+
//Use launder to stop false positives from -Warray-bounds
|
883
|
+
, boost::move_detail::launder(this->priv_raw_begin()));
|
884
|
+
this->protected_set_size(sz);
|
885
|
+
x.clear();
|
886
|
+
}
|
887
|
+
}
|
888
|
+
|
869
889
|
inline vector(initial_capacity_t, pointer initial_memory, size_type cap)
|
870
890
|
: m_holder(initial_capacity_t(), initial_memory, cap)
|
871
891
|
{}
|
@@ -1163,11 +1183,11 @@ private:
|
|
1163
1183
|
vector(BOOST_RV_REF(vector) x, const allocator_type &a)
|
1164
1184
|
: m_holder( vector_uninitialized_size, a
|
1165
1185
|
//In this allocator move constructor the allocator won't be propagated --v
|
1166
|
-
, is_propagable_from(x.get_stored_allocator(), x.m_holder.start(), a
|
1186
|
+
, is_propagable_from<false>(x.get_stored_allocator(), x.m_holder.start(), a) ? 0 : x.size()
|
1167
1187
|
)
|
1168
1188
|
{
|
1169
1189
|
//In this allocator move constructor the allocator won't be propagated ---v
|
1170
|
-
if(is_propagable_from(x.get_stored_allocator(), x.m_holder.start(), a
|
1190
|
+
if(is_propagable_from<false>(x.get_stored_allocator(), x.m_holder.start(), a)){
|
1171
1191
|
this->m_holder.steal_resources(x.m_holder);
|
1172
1192
|
}
|
1173
1193
|
else{
|
@@ -2228,7 +2248,7 @@ private:
|
|
2228
2248
|
|
2229
2249
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
2230
2250
|
|
2231
|
-
//! <b>Effects</b>: Erases all the elements of the vector.
|
2251
|
+
//! <b>Effects</b>: Erases all the elements of the vector. Leaves the capacity() of the vector unchanged.
|
2232
2252
|
//!
|
2233
2253
|
//! <b>Throws</b>: Nothing.
|
2234
2254
|
//!
|
@@ -2531,6 +2551,38 @@ private:
|
|
2531
2551
|
x.clear();
|
2532
2552
|
}
|
2533
2553
|
|
2554
|
+
template<class OtherA>
|
2555
|
+
void priv_move_assign_steal_or_assign(BOOST_RV_REF_BEG vector<T, OtherA, Options> BOOST_RV_REF_END x, dtl::true_type /*data_can_be_always_stolen*/)
|
2556
|
+
{
|
2557
|
+
this->clear();
|
2558
|
+
if (BOOST_LIKELY(!!this->m_holder.m_start))
|
2559
|
+
this->m_holder.deallocate(this->m_holder.m_start, this->m_holder.m_capacity);
|
2560
|
+
this->m_holder.steal_resources(x.m_holder);
|
2561
|
+
}
|
2562
|
+
|
2563
|
+
template<class OtherA>
|
2564
|
+
void priv_move_assign_steal_or_assign(BOOST_RV_REF_BEG vector<T, OtherA, Options> BOOST_RV_REF_END x, dtl::false_type /*data_can_be_always_stolen*/)
|
2565
|
+
{
|
2566
|
+
const bool propagate_alloc = allocator_traits_type::propagate_on_container_move_assignment::value;
|
2567
|
+
allocator_type& this_alloc = this->m_holder.alloc();
|
2568
|
+
allocator_type& x_alloc = x.m_holder.alloc();
|
2569
|
+
|
2570
|
+
//In this allocator move constructor the allocator might will be propagated, but to support small_vector-like
|
2571
|
+
//types, we need to check the currently owned buffers to know if they are propagable.
|
2572
|
+
const bool is_buffer_propagable_from_x = is_propagable_from<propagate_alloc>(x_alloc, x.m_holder.start(), this_alloc);
|
2573
|
+
|
2574
|
+
if (is_buffer_propagable_from_x) {
|
2575
|
+
this->priv_move_assign_steal_or_assign(boost::move(x), dtl::true_type());
|
2576
|
+
}
|
2577
|
+
//Else do a one by one move. Also, clear the source as users find confusing
|
2578
|
+
//elements are still alive in the source container.
|
2579
|
+
else {
|
2580
|
+
this->assign( boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.begin()))
|
2581
|
+
, boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.end())) );
|
2582
|
+
x.clear();
|
2583
|
+
}
|
2584
|
+
}
|
2585
|
+
|
2534
2586
|
template<class OtherA>
|
2535
2587
|
void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherA, Options> BOOST_RV_REF_END x
|
2536
2588
|
, typename dtl::disable_if_or
|
@@ -2542,30 +2594,16 @@ private:
|
|
2542
2594
|
//for move assignment, no aliasing (&x != this) is assumed.
|
2543
2595
|
//x.size() == 0 is allowed for buggy std libraries.
|
2544
2596
|
BOOST_ASSERT(this != &x || x.size() == 0);
|
2545
|
-
|
2546
|
-
allocator_type &x_alloc = x.m_holder.alloc();
|
2597
|
+
const bool alloc_is_always_equal = allocator_traits_type::is_always_equal::value;
|
2547
2598
|
const bool propagate_alloc = allocator_traits_type::propagate_on_container_move_assignment::value;
|
2599
|
+
const bool partially_propagable_alloc = allocator_traits_type::is_partially_propagable::value;
|
2600
|
+
const bool data_can_be_always_be_stolen = alloc_is_always_equal || (propagate_alloc && !partially_propagable_alloc);
|
2548
2601
|
|
2549
|
-
|
2550
|
-
const bool is_propagable_from_x = is_propagable_from(x_alloc, x.m_holder.start(), this_alloc, propagate_alloc);
|
2602
|
+
this->priv_move_assign_steal_or_assign(boost::move(x), dtl::bool_<data_can_be_always_be_stolen>());
|
2551
2603
|
|
2552
|
-
//Resources can be transferred if both allocators are
|
2553
|
-
//going to be equal after this function (either propagated or already equal)
|
2554
|
-
if(is_propagable_from_x){
|
2555
|
-
this->clear();
|
2556
|
-
if(BOOST_LIKELY(!!this->m_holder.m_start))
|
2557
|
-
this->m_holder.deallocate(this->m_holder.m_start, this->m_holder.m_capacity);
|
2558
|
-
this->m_holder.steal_resources(x.m_holder);
|
2559
|
-
}
|
2560
|
-
//Else do a one by one move. Also, clear the source as users find confusing
|
2561
|
-
//elements are still alive in the source container.
|
2562
|
-
else{
|
2563
|
-
this->assign( boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.begin()))
|
2564
|
-
, boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.end() ))
|
2565
|
-
);
|
2566
|
-
x.clear();
|
2567
|
-
}
|
2568
2604
|
//Move allocator if needed
|
2605
|
+
allocator_type& this_alloc = this->m_holder.alloc();
|
2606
|
+
allocator_type& x_alloc = x.m_holder.alloc();
|
2569
2607
|
dtl::move_alloc(this_alloc, x_alloc, dtl::bool_<propagate_alloc>());
|
2570
2608
|
}
|
2571
2609
|
|
@@ -2613,46 +2651,115 @@ private:
|
|
2613
2651
|
template<class Vector> //Template it to avoid it in explicit instantiations
|
2614
2652
|
void priv_swap(Vector &x, dtl::false_type) //version_N
|
2615
2653
|
{
|
2616
|
-
|
2654
|
+
BOOST_ASSERT(allocator_traits_type::propagate_on_container_swap::value ||
|
2655
|
+
allocator_traits_type::is_always_equal::value ||
|
2656
|
+
this->get_stored_allocator() == x.get_stored_allocator());
|
2657
|
+
|
2658
|
+
if (BOOST_UNLIKELY(&x == this)) {
|
2659
|
+
return;
|
2660
|
+
}
|
2661
|
+
|
2662
|
+
//Just swap internals
|
2663
|
+
this->m_holder.swap_resources(x.m_holder);
|
2664
|
+
//And now swap the allocator
|
2665
|
+
dtl::bool_<allocator_traits_type::propagate_on_container_swap::value> flag;
|
2666
|
+
dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), flag);
|
2667
|
+
}
|
2668
|
+
|
2669
|
+
protected:
|
2670
|
+
template<class Vector> //Template it to avoid it in explicit instantiations
|
2671
|
+
void prot_swap_small(Vector &x, std::size_t internal_capacity) //version_N
|
2672
|
+
{
|
2617
2673
|
if (BOOST_UNLIKELY(&x == this)){
|
2618
2674
|
return;
|
2619
2675
|
}
|
2620
|
-
|
2621
|
-
|
2622
|
-
|
2623
|
-
this->m_holder.
|
2676
|
+
|
2677
|
+
const bool propagate_alloc = allocator_traits_type::propagate_on_container_swap::value;
|
2678
|
+
if(are_swap_propagable<propagate_alloc>
|
2679
|
+
( this->get_stored_allocator(), this->m_holder.start(), x.get_stored_allocator(), x.m_holder.start())){
|
2680
|
+
this->priv_swap(x, dtl::false_());
|
2681
|
+
return;
|
2624
2682
|
}
|
2625
|
-
|
2626
|
-
|
2683
|
+
|
2684
|
+
allocator_type &th_al = this->get_stored_allocator();
|
2685
|
+
allocator_type &ot_al = x.get_stored_allocator();
|
2686
|
+
|
2687
|
+
const bool is_this_data_propagable = is_propagable_from<propagate_alloc>(th_al, this->data(), ot_al);
|
2688
|
+
const bool is_that_data_propagable = is_propagable_from<propagate_alloc>(ot_al, x.data(), th_al);
|
2689
|
+
|
2690
|
+
if(internal_capacity && (is_this_data_propagable || is_that_data_propagable)) {
|
2691
|
+
//steal memory from src to dst, but move elements from dst to src
|
2692
|
+
vector& extmem = is_this_data_propagable ? *this : x;
|
2693
|
+
vector& intmem = is_this_data_propagable ? x : *this;
|
2694
|
+
|
2695
|
+
//Reset extmem to the internal storage and backup data
|
2696
|
+
pointer const orig_extdata = extmem.data();
|
2697
|
+
const size_type orig_extmem_size = extmem.size();
|
2698
|
+
const size_type orig_extmem_cap = extmem.capacity();
|
2699
|
+
|
2700
|
+
//New safe state for extmem -> empty, internal storage
|
2701
|
+
extmem.m_holder.m_start = extmem.get_stored_allocator().internal_storage();
|
2702
|
+
extmem.m_holder.set_stored_size(0u);
|
2703
|
+
extmem.m_holder.set_stored_capacity(internal_capacity);
|
2704
|
+
|
2705
|
+
{
|
2706
|
+
//Deallocate on exception
|
2707
|
+
typename value_traits::ArrayDeallocator new_buffer_deallocator(orig_extdata, extmem.get_stored_allocator(), orig_extmem_cap);
|
2708
|
+
typename value_traits::ArrayDestructor new_values_destroyer(orig_extdata, extmem.get_stored_allocator(), orig_extmem_size);
|
2709
|
+
|
2710
|
+
//Move internal memory data to the internal memory data of the target, this can throw
|
2711
|
+
BOOST_ASSERT(extmem.capacity() >= intmem.size());
|
2712
|
+
::boost::container::uninitialized_move_alloc_n
|
2713
|
+
(intmem.get_stored_allocator(), this->priv_raw_begin(), intmem.size(), extmem.priv_raw_begin());
|
2714
|
+
|
2715
|
+
//Exception not thrown, commit new state
|
2716
|
+
extmem.m_holder.set_stored_size(intmem.size());
|
2717
|
+
//Throwing part passed, disable rollback
|
2718
|
+
new_buffer_deallocator.release();
|
2719
|
+
new_values_destroyer.release();
|
2720
|
+
}
|
2721
|
+
|
2722
|
+
//Destroy moved elements from intmem
|
2723
|
+
boost::container::destroy_alloc_n
|
2724
|
+
( intmem.get_stored_allocator(), this->priv_raw_begin()
|
2725
|
+
, intmem.size());
|
2726
|
+
|
2727
|
+
//Adopt dynamic buffer
|
2728
|
+
intmem.m_holder.m_start = orig_extdata;
|
2729
|
+
intmem.m_holder.set_stored_size(orig_extmem_size);
|
2730
|
+
intmem.m_holder.set_stored_capacity(orig_extmem_cap);
|
2731
|
+
|
2732
|
+
//And now swap the allocator
|
2733
|
+
dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), dtl::bool_<propagate_alloc>());
|
2734
|
+
}
|
2735
|
+
else { //swap element by element and insert rest
|
2627
2736
|
bool const t_smaller = this->size() < x.size();
|
2628
2737
|
vector &sml = t_smaller ? *this : x;
|
2629
2738
|
vector &big = t_smaller ? x : *this;
|
2630
2739
|
|
2631
|
-
//
|
2632
|
-
|
2633
|
-
|
2634
|
-
|
2635
|
-
sml.steal_resources(big);
|
2636
|
-
}
|
2637
|
-
else {
|
2638
|
-
//Else swap element by element...
|
2639
|
-
size_type const common_elements = sml.size();
|
2640
|
-
for(size_type i = 0; i != common_elements; ++i){
|
2641
|
-
boost::adl_move_swap(sml[i], big[i]);
|
2642
|
-
}
|
2643
|
-
//... and move-insert the remaining range
|
2644
|
-
sml.insert( sml.cend()
|
2645
|
-
, boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(big.nth(common_elements)))
|
2646
|
-
, boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(big.end()))
|
2647
|
-
);
|
2648
|
-
//Destroy remaining elements
|
2649
|
-
big.erase(big.nth(common_elements), big.cend());
|
2740
|
+
//swap element by element until common size
|
2741
|
+
size_type const common_elements = sml.size();
|
2742
|
+
for(size_type i = 0; i != common_elements; ++i){
|
2743
|
+
boost::adl_move_swap(sml[i], big[i]);
|
2650
2744
|
}
|
2745
|
+
|
2746
|
+
//And now swap the allocator to be able to construct new elements in sml with the proper allocator
|
2747
|
+
dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), dtl::bool_<propagate_alloc>());
|
2748
|
+
|
2749
|
+
//move-insert the remaining range
|
2750
|
+
T *const raw_big_nth = boost::movelib::iterator_to_raw_pointer(big.nth(common_elements));
|
2751
|
+
sml.insert(sml.cend()
|
2752
|
+
, boost::make_move_iterator(raw_big_nth)
|
2753
|
+
, boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(big.end())));
|
2754
|
+
|
2755
|
+
//Destroy remaining, moved, elements with their original allocator
|
2756
|
+
boost::container::destroy_alloc_n
|
2757
|
+
( sml.get_stored_allocator(), raw_big_nth
|
2758
|
+
, std::size_t(big.m_holder.m_size - common_elements));
|
2759
|
+
big.m_holder.set_stored_size(common_elements);
|
2651
2760
|
}
|
2652
|
-
//And now swap the allocator
|
2653
|
-
dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), dtl::bool_<propagate_alloc>());
|
2654
2761
|
}
|
2655
|
-
|
2762
|
+
private:
|
2656
2763
|
inline void priv_move_to_new_buffer(size_type, version_0)
|
2657
2764
|
{ alloc_holder_t::on_capacity_overflow(); }
|
2658
2765
|
|
@@ -2762,6 +2869,41 @@ private:
|
|
2762
2869
|
inline dtl::insert_value_initialized_n_proxy<allocator_type> priv_resize_proxy(value_init_t)
|
2763
2870
|
{ return dtl::insert_value_initialized_n_proxy<allocator_type>(); }
|
2764
2871
|
|
2872
|
+
protected:
|
2873
|
+
void prot_shrink_to_fit_small(pointer const small_buffer, const size_type small_capacity)
|
2874
|
+
{
|
2875
|
+
const size_type cp = this->m_holder.capacity();
|
2876
|
+
if (cp && this->m_holder.m_start != small_buffer) { //Do something only if a dynamic buffer is used
|
2877
|
+
const size_type sz = this->size();
|
2878
|
+
if (!sz) {
|
2879
|
+
if (BOOST_LIKELY(!!this->m_holder.m_start))
|
2880
|
+
this->m_holder.deallocate(this->m_holder.m_start, cp);
|
2881
|
+
this->m_holder.m_start = small_buffer;
|
2882
|
+
this->m_holder.set_stored_capacity(small_capacity);
|
2883
|
+
}
|
2884
|
+
else if(sz <= small_capacity) {
|
2885
|
+
T *const oldbuf = boost::movelib::to_raw_pointer(this->m_holder.m_start);
|
2886
|
+
::boost::container::uninitialized_move_alloc_n
|
2887
|
+
( this->get_stored_allocator()
|
2888
|
+
, oldbuf
|
2889
|
+
, sz
|
2890
|
+
, boost::movelib::to_raw_pointer(small_buffer)
|
2891
|
+
);
|
2892
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), oldbuf, sz);
|
2893
|
+
|
2894
|
+
if (BOOST_LIKELY(!!this->m_holder.m_start))
|
2895
|
+
this->m_holder.deallocate(this->m_holder.m_start, cp);
|
2896
|
+
|
2897
|
+
this->m_holder.m_start = small_buffer;
|
2898
|
+
this->m_holder.set_stored_capacity(small_capacity);
|
2899
|
+
}
|
2900
|
+
else if (sz < cp) {
|
2901
|
+
this->priv_move_to_new_buffer(sz, alloc_version());
|
2902
|
+
}
|
2903
|
+
}
|
2904
|
+
}
|
2905
|
+
|
2906
|
+
private:
|
2765
2907
|
inline void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW
|
2766
2908
|
{}
|
2767
2909
|
|
@@ -2807,12 +2949,19 @@ private:
|
|
2807
2949
|
}
|
2808
2950
|
}
|
2809
2951
|
|
2952
|
+
#ifdef _MSC_VER
|
2953
|
+
#pragma warning (push)
|
2954
|
+
#pragma warning(disable: 4702) //Disable unreachable code warning
|
2955
|
+
#endif
|
2810
2956
|
template <class InsertionProxy>
|
2811
2957
|
inline iterator priv_insert_forward_range_no_capacity
|
2812
2958
|
(T * const, const size_type, const InsertionProxy , version_0)
|
2813
2959
|
{
|
2814
2960
|
return alloc_holder_t::on_capacity_overflow(), iterator();
|
2815
2961
|
}
|
2962
|
+
#ifdef _MSC_VER
|
2963
|
+
#pragma warning (pop)
|
2964
|
+
#endif
|
2816
2965
|
|
2817
2966
|
template <class InsertionProxy>
|
2818
2967
|
BOOST_CONTAINER_NOINLINE iterator priv_insert_forward_range_no_capacity
|
@@ -3161,8 +3310,8 @@ struct has_trivial_destructor_after_move<boost::container::vector<T, Allocator,
|
|
3161
3310
|
{
|
3162
3311
|
typedef typename boost::container::vector<T, Allocator, Options>::allocator_type allocator_type;
|
3163
3312
|
typedef typename ::boost::container::allocator_traits<allocator_type>::pointer pointer;
|
3164
|
-
|
3165
|
-
|
3313
|
+
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
3314
|
+
::boost::has_trivial_destructor_after_move<pointer>::value;
|
3166
3315
|
};
|
3167
3316
|
|
3168
3317
|
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#ifndef BOOST_CORE_DETAIL_MINSTD_RAND_HPP_INCLUDED
|
2
|
+
#define BOOST_CORE_DETAIL_MINSTD_RAND_HPP_INCLUDED
|
3
|
+
|
4
|
+
// Copyright 2017 Peter Dimov
|
5
|
+
//
|
6
|
+
// Distributed under the Boost Software License, Version 1.0.
|
7
|
+
//
|
8
|
+
// See accompanying file LICENSE_1_0.txt or copy at
|
9
|
+
// http://www.boost.org/LICENSE_1_0.txt
|
10
|
+
//
|
11
|
+
// An implementation of minstd_rand that does not require
|
12
|
+
// the Random library
|
13
|
+
|
14
|
+
#include <boost/cstdint.hpp>
|
15
|
+
|
16
|
+
namespace boost
|
17
|
+
{
|
18
|
+
namespace detail
|
19
|
+
{
|
20
|
+
|
21
|
+
class minstd_rand
|
22
|
+
{
|
23
|
+
private:
|
24
|
+
|
25
|
+
boost::uint_least32_t x_;
|
26
|
+
|
27
|
+
enum { a = 48271, m = 2147483647 };
|
28
|
+
|
29
|
+
public:
|
30
|
+
|
31
|
+
minstd_rand(): x_( 1 )
|
32
|
+
{
|
33
|
+
}
|
34
|
+
|
35
|
+
explicit minstd_rand( boost::uint_least32_t x ): x_( x % m )
|
36
|
+
{
|
37
|
+
if( x_ == 0 )
|
38
|
+
{
|
39
|
+
x_ = 1;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
boost::uint_least32_t operator()()
|
44
|
+
{
|
45
|
+
boost::uint_least64_t y = x_;
|
46
|
+
|
47
|
+
y = ( a * y ) % m;
|
48
|
+
|
49
|
+
x_ = static_cast<boost::uint_least32_t>( y );
|
50
|
+
|
51
|
+
return x_;
|
52
|
+
}
|
53
|
+
};
|
54
|
+
|
55
|
+
} // namespace detail
|
56
|
+
} // namespace boost
|
57
|
+
|
58
|
+
#endif // #ifndef BOOST_CORE_DETAIL_MINSTD_RAND_HPP_INCLUDED
|
@@ -74,7 +74,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_first_of( Ch const* p_
|
|
74
74
|
|
75
75
|
for( std::size_t j = 0; j < n; ++j )
|
76
76
|
{
|
77
|
-
UCh ch = s[ j ];
|
77
|
+
UCh ch = static_cast<UCh>( s[ j ] );
|
78
78
|
|
79
79
|
if( ch >= 0 && ch < 256 )
|
80
80
|
{
|
@@ -91,7 +91,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_first_of( Ch const* p_
|
|
91
91
|
{
|
92
92
|
for( std::size_t i = pos; i < n_; ++i )
|
93
93
|
{
|
94
|
-
UCh ch = p_[ i ];
|
94
|
+
UCh ch = static_cast<UCh>( p_[ i ] );
|
95
95
|
if( ch >= 0 && ch < 256 && table[ ch ] ) return i;
|
96
96
|
}
|
97
97
|
}
|
@@ -129,7 +129,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_last_of( Ch const* p_,
|
|
129
129
|
|
130
130
|
for( std::size_t j = 0; j < n; ++j )
|
131
131
|
{
|
132
|
-
UCh ch = s[ j ];
|
132
|
+
UCh ch = static_cast<UCh>( s[ j ] );
|
133
133
|
|
134
134
|
if( ch >= 0 && ch < 256 )
|
135
135
|
{
|
@@ -150,7 +150,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_last_of( Ch const* p_,
|
|
150
150
|
{
|
151
151
|
do
|
152
152
|
{
|
153
|
-
UCh ch = p_[ i ];
|
153
|
+
UCh ch = static_cast<UCh>( p_[ i ] );
|
154
154
|
|
155
155
|
if( ch >= 0 && ch < 256 && table[ ch ] ) return i;
|
156
156
|
|
@@ -199,7 +199,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_first_not_of( Ch const
|
|
199
199
|
|
200
200
|
for( std::size_t j = 0; j < n; ++j )
|
201
201
|
{
|
202
|
-
UCh ch = s[ j ];
|
202
|
+
UCh ch = static_cast<UCh>( s[ j ] );
|
203
203
|
|
204
204
|
if( ch >= 0 && ch < 256 )
|
205
205
|
{
|
@@ -216,7 +216,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_first_not_of( Ch const
|
|
216
216
|
{
|
217
217
|
for( std::size_t i = pos; i < n_; ++i )
|
218
218
|
{
|
219
|
-
UCh ch = p_[ i ];
|
219
|
+
UCh ch = static_cast<UCh>( p_[ i ] );
|
220
220
|
if( !( ch >= 0 && ch < 256 && table[ ch ] ) ) return i;
|
221
221
|
}
|
222
222
|
}
|
@@ -262,7 +262,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_last_not_of( Ch const*
|
|
262
262
|
|
263
263
|
for( std::size_t j = 0; j < n; ++j )
|
264
264
|
{
|
265
|
-
UCh ch = s[ j ];
|
265
|
+
UCh ch = static_cast<UCh>( s[ j ] );
|
266
266
|
|
267
267
|
if( ch >= 0 && ch < 256 )
|
268
268
|
{
|
@@ -283,7 +283,7 @@ template<class Ch> BOOST_CXX14_CONSTEXPR std::size_t find_last_not_of( Ch const*
|
|
283
283
|
{
|
284
284
|
do
|
285
285
|
{
|
286
|
-
UCh ch = p_[ i ];
|
286
|
+
UCh ch = static_cast<UCh>( p_[ i ] );
|
287
287
|
|
288
288
|
if( !( ch >= 0 && ch < 256 && table[ ch ] ) ) return i;
|
289
289
|
|
@@ -381,7 +381,7 @@ public:
|
|
381
381
|
}
|
382
382
|
|
383
383
|
template<class End> BOOST_CXX14_CONSTEXPR basic_string_view( Ch const* first, End last,
|
384
|
-
typename boost::enable_if<boost::core::detail::is_same<End, Ch const*> >::type* = 0 ) BOOST_NOEXCEPT: p_( first ), n_( last - first )
|
384
|
+
typename boost::enable_if<boost::core::detail::is_same<End, Ch const*> >::type* = 0 ) BOOST_NOEXCEPT: p_( first ), n_( static_cast<size_type>( last - first ) )
|
385
385
|
{
|
386
386
|
BOOST_ASSERT( last - first >= 0 );
|
387
387
|
}
|
@@ -681,7 +681,7 @@ public:
|
|
681
681
|
|
682
682
|
Ch const* r = traits_type::find( data() + pos, size() - pos, c );
|
683
683
|
|
684
|
-
return r? r - data(): npos;
|
684
|
+
return r? static_cast<size_type>( r - data() ): npos;
|
685
685
|
}
|
686
686
|
|
687
687
|
BOOST_CXX14_CONSTEXPR size_type find( Ch const* s, size_type pos, size_type n ) const BOOST_NOEXCEPT
|
@@ -696,11 +696,11 @@ public:
|
|
696
696
|
|
697
697
|
for( ;; )
|
698
698
|
{
|
699
|
-
p = traits_type::find( p, last - p, s[0] );
|
699
|
+
p = traits_type::find( p, static_cast<size_type>( last - p ), s[0] );
|
700
700
|
|
701
701
|
if( p == 0 ) break;
|
702
702
|
|
703
|
-
if( traits_type::compare( p + 1, s + 1, n - 1 ) == 0 ) return p - data();
|
703
|
+
if( traits_type::compare( p + 1, s + 1, n - 1 ) == 0 ) return static_cast<size_type>( p - data() );
|
704
704
|
|
705
705
|
++p;
|
706
706
|
}
|
@@ -1193,7 +1193,7 @@ public:
|
|
1193
1193
|
template<class Ch> std::basic_ostream<Ch>& operator<<( std::basic_ostream<Ch>& os, basic_string_view<Ch> str )
|
1194
1194
|
{
|
1195
1195
|
Ch const* p = str.data();
|
1196
|
-
std::streamsize n = str.size();
|
1196
|
+
std::streamsize n = static_cast<std::streamsize>( str.size() );
|
1197
1197
|
|
1198
1198
|
std::streamsize m = os.width();
|
1199
1199
|
|