passenger 6.0.23 → 6.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -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
|
|