passenger 6.0.16 → 6.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +22 -1
- data/build/integration_tests.rb +6 -6
- data/build/ruby_tests.rb +1 -1
- data/build/test_basics.rb +0 -1
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/SpawningKit/PipeWatcher.h +18 -3
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/array.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +344 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +686 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +81 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +68 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +46 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +1 -1
- 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 +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +4 -4
- 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 +2 -2
- 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 +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +14 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +30 -305
- data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +17 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +98 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +330 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +81 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +19 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +14 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +7 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +4 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +22 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +447 -142
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +57 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +51 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +41 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +13 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +13 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +52 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +13 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +39 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +39 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +6 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +146 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +35 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +180 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +89 -66
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +66 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1134 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +130 -106
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +377 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +168 -29
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +149 -203
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +256 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +76 -80
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +40 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +132 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +25 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +25 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +34 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +28 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +204 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +21 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +40 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +27 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +104 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +70 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +38 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +27 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +17 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +10 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +9 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +9 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +80 -95
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +738 -34
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1150 -1213
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +104 -12
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +31 -331
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +173 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +133 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +461 -566
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +38 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +39 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +32 -4
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +159 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +45 -45
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +37 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +145 -90
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +8 -4
- data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +111 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +7 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +38 -43
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +37 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +1921 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +66 -82
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +109 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +732 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +586 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +166 -66
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +145 -28
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +1 -1
- data/src/ruby_native_extension/extconf.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +36 -19
- data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
- data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
- data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -196
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -709
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
- data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
@@ -353,7 +353,7 @@ struct vector_alloc_holder
|
|
353
353
|
, m_size(static_cast<stored_size_type>(initial_size))
|
354
354
|
, m_capacity()
|
355
355
|
{
|
356
|
-
if (initial_size > size_type(-1)){
|
356
|
+
if (BOOST_UNLIKELY(initial_size > size_type(-1))){
|
357
357
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
358
358
|
}
|
359
359
|
else if(initial_size){
|
@@ -373,7 +373,7 @@ struct vector_alloc_holder
|
|
373
373
|
, m_size(static_cast<stored_size_type>(initial_size))
|
374
374
|
, m_capacity()
|
375
375
|
{
|
376
|
-
if (initial_size > size_type(-1)){
|
376
|
+
if (BOOST_UNLIKELY(initial_size > size_type(-1))){
|
377
377
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
378
378
|
}
|
379
379
|
else if(initial_size){
|
@@ -437,11 +437,11 @@ struct vector_alloc_holder
|
|
437
437
|
return this->priv_allocation_command(alloc_version(), command, limit_size, prefer_in_recvd_out_size, reuse);
|
438
438
|
}
|
439
439
|
|
440
|
-
pointer allocate(size_type n)
|
440
|
+
BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type n)
|
441
441
|
{
|
442
442
|
const size_type max_alloc = allocator_traits_type::max_size(this->alloc());
|
443
443
|
const size_type max = max_alloc <= stored_size_type(-1) ? max_alloc : stored_size_type(-1);
|
444
|
-
if (
|
444
|
+
if (BOOST_UNLIKELY(max < n) )
|
445
445
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
446
446
|
|
447
447
|
return allocator_traits_type::allocate(this->alloc(), n);
|
@@ -544,7 +544,7 @@ struct vector_alloc_holder
|
|
544
544
|
BOOST_ASSERT( (command & allocate_new));
|
545
545
|
BOOST_ASSERT(!(command & nothrow_allocation));
|
546
546
|
//First detect overflow on smaller stored_size_types
|
547
|
-
if (limit_size > stored_size_type(-1)){
|
547
|
+
if (BOOST_UNLIKELY(limit_size > stored_size_type(-1))){
|
548
548
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
549
549
|
}
|
550
550
|
(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
|
@@ -559,7 +559,7 @@ struct vector_alloc_holder
|
|
559
559
|
pointer &reuse)
|
560
560
|
{
|
561
561
|
//First detect overflow on smaller stored_size_types
|
562
|
-
if (limit_size > stored_size_type(-1)){
|
562
|
+
if (BOOST_UNLIKELY(limit_size > stored_size_type(-1))){
|
563
563
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
564
564
|
}
|
565
565
|
(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
|
@@ -724,6 +724,7 @@ struct vector_alloc_holder<Allocator, StoredSizeType, version_0>
|
|
724
724
|
};
|
725
725
|
|
726
726
|
struct growth_factor_60;
|
727
|
+
struct growth_factor_100;
|
727
728
|
|
728
729
|
template<class Options, class AllocatorSizeType>
|
729
730
|
struct get_vector_opt
|
@@ -1296,7 +1297,7 @@ private:
|
|
1296
1297
|
//For Fwd iterators the standard only requires EmplaceConstructible and assignable from *first
|
1297
1298
|
//so we can't do any backwards allocation
|
1298
1299
|
const it_size_type sz = boost::container::iterator_udistance(first, last);
|
1299
|
-
if (sz > size_type(-1)){
|
1300
|
+
if (BOOST_UNLIKELY(sz > size_type(-1))){
|
1300
1301
|
boost::container::throw_length_error("vector::assign, FwdIt's max length reached");
|
1301
1302
|
}
|
1302
1303
|
|
@@ -1819,7 +1820,7 @@ private:
|
|
1819
1820
|
return *p;
|
1820
1821
|
}
|
1821
1822
|
else{
|
1822
|
-
typedef dtl::insert_emplace_proxy<allocator_type,
|
1823
|
+
typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
|
1823
1824
|
return *this->priv_insert_forward_range_no_capacity
|
1824
1825
|
(p, 1, proxy_t(::boost::forward<Args>(args)...), alloc_version());
|
1825
1826
|
}
|
@@ -1860,7 +1861,7 @@ private:
|
|
1860
1861
|
{
|
1861
1862
|
BOOST_ASSERT(this->priv_in_range_or_end(position));
|
1862
1863
|
//Just call more general insert(pos, size, value) and return iterator
|
1863
|
-
typedef dtl::insert_emplace_proxy<allocator_type,
|
1864
|
+
typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
|
1864
1865
|
return this->priv_insert_forward_range( vector_iterator_get_ptr(position), 1
|
1865
1866
|
, proxy_t(::boost::forward<Args>(args)...));
|
1866
1867
|
}
|
@@ -1879,7 +1880,7 @@ private:
|
|
1879
1880
|
return *p;\
|
1880
1881
|
}\
|
1881
1882
|
else{\
|
1882
|
-
typedef dtl::insert_emplace_proxy_arg##N<allocator_type
|
1883
|
+
typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
|
1883
1884
|
return *this->priv_insert_forward_range_no_capacity\
|
1884
1885
|
( p, 1, proxy_t(BOOST_MOVE_FWD##N), alloc_version());\
|
1885
1886
|
}\
|
@@ -1901,7 +1902,7 @@ private:
|
|
1901
1902
|
BOOST_CONTAINER_FORCEINLINE iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
1902
1903
|
{\
|
1903
1904
|
BOOST_ASSERT(this->priv_in_range_or_end(pos));\
|
1904
|
-
typedef dtl::insert_emplace_proxy_arg##N<allocator_type
|
1905
|
+
typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
|
1905
1906
|
return this->priv_insert_forward_range(vector_iterator_get_ptr(pos), 1, proxy_t(BOOST_MOVE_FWD##N));\
|
1906
1907
|
}\
|
1907
1908
|
//
|
@@ -1967,7 +1968,7 @@ private:
|
|
1967
1968
|
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, size_type n, const T& x)
|
1968
1969
|
{
|
1969
1970
|
BOOST_ASSERT(this->priv_in_range_or_end(p));
|
1970
|
-
dtl::insert_n_copies_proxy<allocator_type
|
1971
|
+
dtl::insert_n_copies_proxy<allocator_type> proxy(x);
|
1971
1972
|
return this->priv_insert_forward_range(vector_iterator_get_ptr(p), n, proxy);
|
1972
1973
|
}
|
1973
1974
|
|
@@ -2015,11 +2016,11 @@ private:
|
|
2015
2016
|
typedef typename iter_size<FwdIt>::type it_size_type;
|
2016
2017
|
BOOST_ASSERT(this->priv_in_range_or_end(pos));
|
2017
2018
|
const it_size_type sz = boost::container::iterator_udistance(first, last);
|
2018
|
-
if (sz > size_type(-1)){
|
2019
|
+
if (BOOST_UNLIKELY(sz > size_type(-1))){
|
2019
2020
|
boost::container::throw_length_error("vector::insert, FwdIt's max length reached");
|
2020
2021
|
}
|
2021
2022
|
|
2022
|
-
dtl::insert_range_proxy<allocator_type, FwdIt
|
2023
|
+
dtl::insert_range_proxy<allocator_type, FwdIt> proxy(first);
|
2023
2024
|
return this->priv_insert_forward_range(vector_iterator_get_ptr(pos), static_cast<size_type>(sz), proxy);
|
2024
2025
|
}
|
2025
2026
|
#endif
|
@@ -2047,7 +2048,7 @@ private:
|
|
2047
2048
|
BOOST_ASSERT(dtl::is_input_iterator<InIt>::value ||
|
2048
2049
|
num == boost::container::iterator_udistance(first, last));
|
2049
2050
|
(void)last;
|
2050
|
-
dtl::insert_range_proxy<allocator_type, InIt
|
2051
|
+
dtl::insert_range_proxy<allocator_type, InIt> proxy(first);
|
2051
2052
|
return this->priv_insert_forward_range(vector_iterator_get_ptr(pos), num, proxy);
|
2052
2053
|
}
|
2053
2054
|
#endif
|
@@ -2591,9 +2592,9 @@ private:
|
|
2591
2592
|
BOOST_CONTAINER_FORCEINLINE void priv_move_to_new_buffer(size_type, version_0)
|
2592
2593
|
{ alloc_holder_t::on_capacity_overflow(); }
|
2593
2594
|
|
2594
|
-
BOOST_CONTAINER_FORCEINLINE dtl::insert_range_proxy<allocator_type, boost::move_iterator<T
|
2595
|
+
BOOST_CONTAINER_FORCEINLINE dtl::insert_range_proxy<allocator_type, boost::move_iterator<T*> > priv_dummy_empty_proxy()
|
2595
2596
|
{
|
2596
|
-
return dtl::insert_range_proxy<allocator_type, boost::move_iterator<T
|
2597
|
+
return dtl::insert_range_proxy<allocator_type, boost::move_iterator<T*> >
|
2597
2598
|
(::boost::make_move_iterator((T *)0));
|
2598
2599
|
}
|
2599
2600
|
|
@@ -2688,14 +2689,14 @@ private:
|
|
2688
2689
|
BOOST_CONTAINER_FORCEINLINE iterator priv_insert(const_iterator, ::boost::move_detail::nat)
|
2689
2690
|
{ return iterator(); }
|
2690
2691
|
|
2691
|
-
BOOST_CONTAINER_FORCEINLINE dtl::insert_n_copies_proxy<allocator_type
|
2692
|
-
{ return dtl::insert_n_copies_proxy<allocator_type
|
2692
|
+
BOOST_CONTAINER_FORCEINLINE dtl::insert_n_copies_proxy<allocator_type> priv_resize_proxy(const T &x)
|
2693
|
+
{ return dtl::insert_n_copies_proxy<allocator_type>(x); }
|
2693
2694
|
|
2694
|
-
BOOST_CONTAINER_FORCEINLINE dtl::insert_default_initialized_n_proxy<allocator_type
|
2695
|
-
{ return dtl::insert_default_initialized_n_proxy<allocator_type
|
2695
|
+
BOOST_CONTAINER_FORCEINLINE dtl::insert_default_initialized_n_proxy<allocator_type> priv_resize_proxy(default_init_t)
|
2696
|
+
{ return dtl::insert_default_initialized_n_proxy<allocator_type>(); }
|
2696
2697
|
|
2697
|
-
BOOST_CONTAINER_FORCEINLINE dtl::insert_value_initialized_n_proxy<allocator_type
|
2698
|
-
{ return dtl::insert_value_initialized_n_proxy<allocator_type
|
2698
|
+
BOOST_CONTAINER_FORCEINLINE dtl::insert_value_initialized_n_proxy<allocator_type> priv_resize_proxy(value_init_t)
|
2699
|
+
{ return dtl::insert_value_initialized_n_proxy<allocator_type>(); }
|
2699
2700
|
|
2700
2701
|
BOOST_CONTAINER_FORCEINLINE void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW
|
2701
2702
|
{}
|
@@ -2986,7 +2987,8 @@ private:
|
|
2986
2987
|
}
|
2987
2988
|
|
2988
2989
|
template <class InsertionProxy>
|
2989
|
-
BOOST_CONTAINER_FORCEINLINE void priv_insert_forward_range_expand_forward
|
2990
|
+
BOOST_CONTAINER_FORCEINLINE void priv_insert_forward_range_expand_forward
|
2991
|
+
(T* const raw_pos, const size_type n, InsertionProxy insert_range_proxy, dtl::false_type)
|
2990
2992
|
{
|
2991
2993
|
//There is enough memory
|
2992
2994
|
boost::container::expand_forward_and_insert_alloc
|
@@ -3024,321 +3026,19 @@ private:
|
|
3024
3026
|
(T* const new_start, const size_type new_capacity,
|
3025
3027
|
T* const pos, const size_type n, InsertionProxy insert_range_proxy)
|
3026
3028
|
{
|
3027
|
-
|
3028
|
-
//Backup old data
|
3029
|
-
T* const old_start = this->priv_raw_begin();
|
3029
|
+
T* const old_start = this->priv_raw_begin();
|
3030
3030
|
const size_type old_size = this->m_holder.m_size;
|
3031
|
-
|
3032
|
-
allocator_type &a = this->m_holder.alloc();
|
3031
|
+
allocator_type& a = this->m_holder.alloc();
|
3033
3032
|
|
3034
3033
|
//Update the vector buffer information to a safe state
|
3035
3034
|
this->m_holder.start(new_start);
|
3036
3035
|
this->m_holder.capacity(new_capacity);
|
3037
3036
|
this->m_holder.m_size = 0;
|
3038
3037
|
|
3039
|
-
|
3040
|
-
const size_type elemsbefore = static_cast<size_type>(pos - old_start);
|
3041
|
-
const size_type s_before = static_cast<size_type>(old_start - new_start);
|
3042
|
-
const size_type before_plus_new = size_type(elemsbefore + n);
|
3043
|
-
|
3044
|
-
typedef typename value_traits::ArrayDestructor array_destructor_t;
|
3045
|
-
|
3046
|
-
//If anything goes wrong, this object will destroy
|
3047
|
-
//all the old objects to fulfill previous vector state
|
3048
|
-
array_destructor_t old_values_destroyer(old_start, a, old_size);
|
3049
|
-
//Check if s_before is big enough to hold the beginning of old data + new data
|
3050
|
-
if(s_before >= before_plus_new){
|
3051
|
-
//Copy first old values before pos, after that the new objects
|
3052
|
-
T *const new_elem_pos =
|
3053
|
-
::boost::container::uninitialized_move_alloc(a, old_start, pos, new_start);
|
3054
|
-
this->m_holder.set_stored_size(elemsbefore);
|
3055
|
-
insert_range_proxy.uninitialized_copy_n_and_update(a, new_elem_pos, n);
|
3056
|
-
this->m_holder.set_stored_size(before_plus_new);
|
3057
|
-
const size_type new_size = size_type(old_size + n);
|
3058
|
-
//Check if s_before is so big that even copying the old data + new data
|
3059
|
-
//there is a gap between the new data and the old data
|
3060
|
-
if(s_before >= new_size){
|
3061
|
-
//Old situation:
|
3062
|
-
// _________________________________________________________
|
3063
|
-
//| raw_mem | old_begin | old_end |
|
3064
|
-
//| __________________________________|___________|_________|
|
3065
|
-
//
|
3066
|
-
//New situation:
|
3067
|
-
// _________________________________________________________
|
3068
|
-
//| old_begin | new | old_end | raw_mem |
|
3069
|
-
//|___________|__________|_________|________________________|
|
3070
|
-
//
|
3071
|
-
//Now initialize the rest of memory with the last old values
|
3072
|
-
if(before_plus_new != new_size){ //Special case to avoid operations in back insertion
|
3073
|
-
::boost::container::uninitialized_move_alloc(a, pos, old_finish, new_start + before_plus_new);
|
3074
|
-
//All new elements correctly constructed, avoid new element destruction
|
3075
|
-
this->m_holder.set_stored_size(new_size);
|
3076
|
-
}
|
3077
|
-
//Old values destroyed automatically with "old_values_destroyer"
|
3078
|
-
//when "old_values_destroyer" goes out of scope unless the have trivial
|
3079
|
-
//destructor after move.
|
3080
|
-
BOOST_IF_CONSTEXPR(value_traits::trivial_dctr_after_move)
|
3081
|
-
old_values_destroyer.release();
|
3082
|
-
}
|
3083
|
-
//s_before is so big that divides old_end
|
3084
|
-
else{
|
3085
|
-
//Old situation:
|
3086
|
-
// __________________________________________________
|
3087
|
-
//| raw_mem | old_begin | old_end |
|
3088
|
-
//| ___________________________|___________|_________|
|
3089
|
-
//
|
3090
|
-
//New situation:
|
3091
|
-
// __________________________________________________
|
3092
|
-
//| old_begin | new | old_end | raw_mem |
|
3093
|
-
//|___________|__________|_________|_________________|
|
3094
|
-
//
|
3095
|
-
//Now initialize the rest of memory with the last old values
|
3096
|
-
//All new elements correctly constructed, avoid new element destruction
|
3097
|
-
BOOST_IF_CONSTEXPR(!value_traits::trivial_dctr){
|
3098
|
-
const size_type raw_gap = s_before - before_plus_new;
|
3099
|
-
//Now initialize the rest of s_before memory with the
|
3100
|
-
//first of elements after new values
|
3101
|
-
::boost::container::uninitialized_move_alloc_n(a, pos, raw_gap, new_start + before_plus_new);
|
3102
|
-
//Now we have a contiguous buffer so program trailing element destruction
|
3103
|
-
//and update size to the final size.
|
3104
|
-
old_values_destroyer.shrink_forward(new_size-s_before);
|
3105
|
-
this->m_holder.set_stored_size(new_size);
|
3106
|
-
//Now move remaining last objects in the old buffer begin
|
3107
|
-
T * const remaining_pos = pos + raw_gap;
|
3108
|
-
if(remaining_pos != old_start){ //Make sure data has to be moved
|
3109
|
-
::boost::container::move(remaining_pos, old_finish, old_start);
|
3110
|
-
}
|
3111
|
-
//Once moved, avoid calling the destructors if trivial after move
|
3112
|
-
BOOST_IF_CONSTEXPR(value_traits::trivial_dctr_after_move){
|
3113
|
-
old_values_destroyer.release();
|
3114
|
-
}
|
3115
|
-
}
|
3116
|
-
else{ //If trivial destructor, we can uninitialized copy + copy in a single uninitialized copy
|
3117
|
-
::boost::container::uninitialized_move_alloc_n
|
3118
|
-
(a, pos, static_cast<size_type>(old_finish - pos), new_start + before_plus_new);
|
3119
|
-
this->m_holder.set_stored_size(new_size);
|
3120
|
-
old_values_destroyer.release();
|
3121
|
-
}
|
3122
|
-
}
|
3123
|
-
}
|
3124
|
-
else{
|
3125
|
-
//Check if we have to do the insertion in two phases
|
3126
|
-
//since maybe s_before is not big enough and
|
3127
|
-
//the buffer was expanded both sides
|
3128
|
-
//
|
3129
|
-
//Old situation:
|
3130
|
-
// _________________________________________________
|
3131
|
-
//| raw_mem | old_begin + old_end | raw_mem |
|
3132
|
-
//|_________|_____________________|_________________|
|
3133
|
-
//
|
3134
|
-
//New situation with do_after:
|
3135
|
-
// _________________________________________________
|
3136
|
-
//| old_begin + new + old_end | raw_mem |
|
3137
|
-
//|___________________________________|_____________|
|
3138
|
-
//
|
3139
|
-
//New without do_after:
|
3140
|
-
// _________________________________________________
|
3141
|
-
//| old_begin + new + old_end | raw_mem |
|
3142
|
-
//|____________________________|____________________|
|
3143
|
-
//
|
3144
|
-
const bool do_after = n > s_before;
|
3145
|
-
|
3146
|
-
//Now we can have two situations: the raw_mem of the
|
3147
|
-
//beginning divides the old_begin, or the new elements:
|
3148
|
-
if (s_before <= elemsbefore) {
|
3149
|
-
//The raw memory divides the old_begin group:
|
3150
|
-
//
|
3151
|
-
//If we need two phase construction (do_after)
|
3152
|
-
//new group is divided in new = new_beg + new_end groups
|
3153
|
-
//In this phase only new_beg will be inserted
|
3154
|
-
//
|
3155
|
-
//Old situation:
|
3156
|
-
// _________________________________________________
|
3157
|
-
//| raw_mem | old_begin | old_end | raw_mem |
|
3158
|
-
//|_________|___________|_________|_________________|
|
3159
|
-
//
|
3160
|
-
//New situation with do_after(1):
|
3161
|
-
//This is not definitive situation, the second phase
|
3162
|
-
//will include
|
3163
|
-
// _________________________________________________
|
3164
|
-
//| old_begin | new_beg | old_end | raw_mem |
|
3165
|
-
//|___________|_________|_________|_________________|
|
3166
|
-
//
|
3167
|
-
//New situation without do_after:
|
3168
|
-
// _________________________________________________
|
3169
|
-
//| old_begin | new | old_end | raw_mem |
|
3170
|
-
//|___________|_____|_________|_____________________|
|
3171
|
-
//
|
3172
|
-
//Copy the first part of old_begin to raw_mem
|
3173
|
-
::boost::container::uninitialized_move_alloc_n(a, old_start, s_before, new_start);
|
3174
|
-
//The buffer is all constructed until old_end,
|
3175
|
-
//so program trailing destruction and assign final size
|
3176
|
-
//if !do_after, s_before+n otherwise.
|
3177
|
-
size_type new_1st_range;
|
3178
|
-
if(do_after){
|
3179
|
-
new_1st_range = s_before;
|
3180
|
-
//release destroyer and update size
|
3181
|
-
old_values_destroyer.release();
|
3182
|
-
}
|
3183
|
-
else{
|
3184
|
-
new_1st_range = n;
|
3185
|
-
BOOST_IF_CONSTEXPR(value_traits::trivial_dctr_after_move){
|
3186
|
-
old_values_destroyer.release();
|
3187
|
-
}
|
3188
|
-
else{
|
3189
|
-
old_values_destroyer.shrink_forward(old_size - (s_before - n));
|
3190
|
-
}
|
3191
|
-
}
|
3192
|
-
this->m_holder.set_stored_size(size_type(old_size + new_1st_range));
|
3193
|
-
//Now copy the second part of old_begin overwriting itself
|
3194
|
-
T *const next = ::boost::container::move(old_start + s_before, pos, old_start);
|
3195
|
-
//Now copy the new_beg elements
|
3196
|
-
insert_range_proxy.copy_n_and_update(a, next, new_1st_range);
|
3197
|
-
|
3198
|
-
//If there is no after work and the last old part needs to be moved to front, do it
|
3199
|
-
if(!do_after && (n != s_before)){
|
3200
|
-
//Now displace old_end elements
|
3201
|
-
::boost::container::move(pos, old_finish, next + new_1st_range);
|
3202
|
-
}
|
3203
|
-
}
|
3204
|
-
else {
|
3205
|
-
//If we have to expand both sides,
|
3206
|
-
//we will play if the first new values so
|
3207
|
-
//calculate the upper bound of new values
|
3208
|
-
|
3209
|
-
//The raw memory divides the new elements
|
3210
|
-
//
|
3211
|
-
//If we need two phase construction (do_after)
|
3212
|
-
//new group is divided in new = new_beg + new_end groups
|
3213
|
-
//In this phase only new_beg will be inserted
|
3214
|
-
//
|
3215
|
-
//Old situation:
|
3216
|
-
// _______________________________________________________
|
3217
|
-
//| raw_mem | old_begin | old_end | raw_mem |
|
3218
|
-
//|_______________|___________|_________|_________________|
|
3219
|
-
//
|
3220
|
-
//New situation with do_after():
|
3221
|
-
// ____________________________________________________
|
3222
|
-
//| old_begin | new_beg | old_end | raw_mem |
|
3223
|
-
//|___________|_______________|_________|______________|
|
3224
|
-
//
|
3225
|
-
//New situation without do_after:
|
3226
|
-
// ______________________________________________________
|
3227
|
-
//| old_begin | new | old_end | raw_mem |
|
3228
|
-
//|___________|_____|_________|__________________________|
|
3229
|
-
//
|
3230
|
-
//First copy whole old_begin and part of new to raw_mem
|
3231
|
-
T * const new_pos = ::boost::container::uninitialized_move_alloc
|
3232
|
-
(a, old_start, pos, new_start);
|
3233
|
-
this->m_holder.set_stored_size(elemsbefore);
|
3234
|
-
const size_type mid_n = size_type(s_before - elemsbefore);
|
3235
|
-
insert_range_proxy.uninitialized_copy_n_and_update(a, new_pos, mid_n);
|
3236
|
-
//The buffer is all constructed until old_end,
|
3237
|
-
//release destroyer
|
3238
|
-
this->m_holder.set_stored_size(size_type(old_size + s_before));
|
3239
|
-
old_values_destroyer.release();
|
3240
|
-
|
3241
|
-
if(do_after){
|
3242
|
-
//Copy new_beg part
|
3243
|
-
insert_range_proxy.copy_n_and_update(a, old_start, elemsbefore);
|
3244
|
-
}
|
3245
|
-
else{
|
3246
|
-
//Copy all new elements
|
3247
|
-
const size_type rest_new = size_type(n - mid_n);
|
3248
|
-
insert_range_proxy.copy_n_and_update(a, old_start, rest_new);
|
3249
|
-
|
3250
|
-
T* const move_start = old_start + rest_new;
|
3251
|
-
//Displace old_end, but make sure data has to be moved
|
3252
|
-
T* const move_end = move_start != pos ? ::boost::container::move(pos, old_finish, move_start)
|
3253
|
-
: old_finish;
|
3254
|
-
(void)move_end; //To avoid warnings of unused initialization for move_end in case
|
3255
|
-
//trivial_dctr_after_move is true
|
3256
|
-
//Destroy remaining moved elements from old_end except if they
|
3257
|
-
//have trivial destructor after being moved
|
3258
|
-
const size_type n_destroy = size_type(s_before - n);
|
3259
|
-
BOOST_IF_CONSTEXPR(!value_traits::trivial_dctr_after_move){
|
3260
|
-
boost::container::destroy_alloc_n(a, move_end, n_destroy);
|
3261
|
-
}
|
3262
|
-
this->m_holder.dec_stored_size(n_destroy);
|
3263
|
-
}
|
3264
|
-
}
|
3038
|
+
expand_backward_forward_and_insert_alloc(old_start, old_size, new_start, pos, n, insert_range_proxy, a);
|
3265
3039
|
|
3266
|
-
|
3267
|
-
|
3268
|
-
//The raw memory divides the new elements
|
3269
|
-
//
|
3270
|
-
//Old situation:
|
3271
|
-
// ______________________________________________________
|
3272
|
-
//| raw_mem | old_begin | old_end | raw_mem |
|
3273
|
-
//|______________|___________|____________|______________|
|
3274
|
-
//
|
3275
|
-
//New situation with do_after(1):
|
3276
|
-
// _______________________________________________________
|
3277
|
-
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
3278
|
-
//|__________________________|_________|________|_________|
|
3279
|
-
//
|
3280
|
-
//New situation with do_after(2):
|
3281
|
-
// ______________________________________________________
|
3282
|
-
//| old_begin + new | old_end |raw |
|
3283
|
-
//|_______________________________________|_________|____|
|
3284
|
-
//
|
3285
|
-
const size_type n_after = size_type(n - s_before);
|
3286
|
-
const size_type elemsafter = size_type(old_size - elemsbefore);
|
3287
|
-
|
3288
|
-
//We can have two situations:
|
3289
|
-
if (elemsafter >= n_after){
|
3290
|
-
//The raw_mem from end will divide displaced old_end
|
3291
|
-
//
|
3292
|
-
//Old situation:
|
3293
|
-
// ______________________________________________________
|
3294
|
-
//| raw_mem | old_begin | old_end | raw_mem |
|
3295
|
-
//|______________|___________|____________|______________|
|
3296
|
-
//
|
3297
|
-
//New situation with do_after(1):
|
3298
|
-
// _______________________________________________________
|
3299
|
-
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
3300
|
-
//|__________________________|_________|________|_________|
|
3301
|
-
//
|
3302
|
-
//First copy the part of old_end raw_mem
|
3303
|
-
T* finish_n = old_finish - n_after;
|
3304
|
-
::boost::container::uninitialized_move_alloc(a, finish_n, old_finish, old_finish);
|
3305
|
-
this->m_holder.inc_stored_size(n_after);
|
3306
|
-
//Displace the rest of old_end to the new position
|
3307
|
-
boost::container::move_backward(pos, finish_n, old_finish);
|
3308
|
-
//Now overwrite with new_end
|
3309
|
-
//The new_end part is [first + (n - n_after), last)
|
3310
|
-
insert_range_proxy.copy_n_and_update(a, pos, n_after);
|
3311
|
-
}
|
3312
|
-
else {
|
3313
|
-
//The raw_mem from end will divide new_end part
|
3314
|
-
//
|
3315
|
-
//Old situation:
|
3316
|
-
// _____________________________________________________________
|
3317
|
-
//| raw_mem | old_begin | old_end | raw_mem |
|
3318
|
-
//|______________|___________|____________|_____________________|
|
3319
|
-
//
|
3320
|
-
//New situation with do_after(2):
|
3321
|
-
// _____________________________________________________________
|
3322
|
-
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
3323
|
-
//|__________________________|_______________|________|_________|
|
3324
|
-
|
3325
|
-
//First initialize data in raw memory
|
3326
|
-
const size_type mid_last_dist = size_type(n_after - elemsafter);
|
3327
|
-
|
3328
|
-
//Copy to the old_end part to the uninitialized zone leaving a gap.
|
3329
|
-
::boost::container::uninitialized_move_alloc(a, pos, old_finish, old_finish + mid_last_dist);
|
3330
|
-
|
3331
|
-
array_destructor_t old_end_destroyer(old_finish + mid_last_dist, a, static_cast<size_type>(old_finish - pos));
|
3332
|
-
|
3333
|
-
//Copy the first part to the already constructed old_end zone
|
3334
|
-
insert_range_proxy.copy_n_and_update(a, pos, elemsafter);
|
3335
|
-
//Copy the rest to the uninitialized zone filling the gap
|
3336
|
-
insert_range_proxy.uninitialized_copy_n_and_update(a, old_finish, mid_last_dist);
|
3337
|
-
this->m_holder.inc_stored_size(n_after);
|
3338
|
-
old_end_destroyer.release();
|
3339
|
-
}
|
3340
|
-
}
|
3341
|
-
}
|
3040
|
+
//Update the vector buffer information to a safe state
|
3041
|
+
this->m_holder.m_size = stored_size_type(old_size + n);
|
3342
3042
|
}
|
3343
3043
|
|
3344
3044
|
void priv_throw_if_out_of_range(size_type n) const
|
@@ -0,0 +1,113 @@
|
|
1
|
+
// Copyright 2022 Peter Dimov
|
2
|
+
// Distributed under the Boost Software License, Version 1.0.
|
3
|
+
// https://www.boost.org/LICENSE_1_0.txt
|
4
|
+
|
5
|
+
#ifndef BOOST_HASH_DETAIL_HASH_MIX_HPP
|
6
|
+
#define BOOST_HASH_DETAIL_HASH_MIX_HPP
|
7
|
+
|
8
|
+
#include <boost/cstdint.hpp>
|
9
|
+
#include <cstddef>
|
10
|
+
#include <climits>
|
11
|
+
|
12
|
+
namespace boost
|
13
|
+
{
|
14
|
+
namespace hash_detail
|
15
|
+
{
|
16
|
+
|
17
|
+
template<std::size_t Bits> struct hash_mix_impl;
|
18
|
+
|
19
|
+
// hash_mix for 64 bit size_t
|
20
|
+
//
|
21
|
+
// The general "xmxmx" form of state of the art 64 bit mixers originates
|
22
|
+
// from Murmur3 by Austin Appleby, which uses the following function as
|
23
|
+
// its "final mix":
|
24
|
+
//
|
25
|
+
// k ^= k >> 33;
|
26
|
+
// k *= 0xff51afd7ed558ccd;
|
27
|
+
// k ^= k >> 33;
|
28
|
+
// k *= 0xc4ceb9fe1a85ec53;
|
29
|
+
// k ^= k >> 33;
|
30
|
+
//
|
31
|
+
// (https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp)
|
32
|
+
//
|
33
|
+
// It has subsequently been improved multiple times by different authors
|
34
|
+
// by changing the constants. The most well known improvement is the
|
35
|
+
// so-called "variant 13" function by David Stafford:
|
36
|
+
//
|
37
|
+
// k ^= k >> 30;
|
38
|
+
// k *= 0xbf58476d1ce4e5b9;
|
39
|
+
// k ^= k >> 27;
|
40
|
+
// k *= 0x94d049bb133111eb;
|
41
|
+
// k ^= k >> 31;
|
42
|
+
//
|
43
|
+
// (https://zimbry.blogspot.com/2011/09/better-bit-mixing-improving-on.html)
|
44
|
+
//
|
45
|
+
// This mixing function is used in the splitmix64 RNG:
|
46
|
+
// http://xorshift.di.unimi.it/splitmix64.c
|
47
|
+
//
|
48
|
+
// We use Jon Maiga's implementation from
|
49
|
+
// http://jonkagstrom.com/mx3/mx3_rev2.html
|
50
|
+
//
|
51
|
+
// x ^= x >> 32;
|
52
|
+
// x *= 0xe9846af9b1a615d;
|
53
|
+
// x ^= x >> 32;
|
54
|
+
// x *= 0xe9846af9b1a615d;
|
55
|
+
// x ^= x >> 28;
|
56
|
+
//
|
57
|
+
// An equally good alternative is Pelle Evensen's Moremur:
|
58
|
+
//
|
59
|
+
// x ^= x >> 27;
|
60
|
+
// x *= 0x3C79AC492BA7B653;
|
61
|
+
// x ^= x >> 33;
|
62
|
+
// x *= 0x1C69B3F74AC4AE35;
|
63
|
+
// x ^= x >> 27;
|
64
|
+
//
|
65
|
+
// (https://mostlymangling.blogspot.com/2019/12/stronger-better-morer-moremur-better.html)
|
66
|
+
|
67
|
+
template<> struct hash_mix_impl<64>
|
68
|
+
{
|
69
|
+
inline static boost::uint64_t fn( boost::uint64_t x )
|
70
|
+
{
|
71
|
+
boost::uint64_t const m = (boost::uint64_t(0xe9846af) << 32) + 0x9b1a615d;
|
72
|
+
|
73
|
+
x ^= x >> 32;
|
74
|
+
x *= m;
|
75
|
+
x ^= x >> 32;
|
76
|
+
x *= m;
|
77
|
+
x ^= x >> 28;
|
78
|
+
|
79
|
+
return x;
|
80
|
+
}
|
81
|
+
};
|
82
|
+
|
83
|
+
// hash_mix for 32 bit size_t
|
84
|
+
//
|
85
|
+
// We use the "best xmxmx" implementation from
|
86
|
+
// https://github.com/skeeto/hash-prospector/issues/19
|
87
|
+
|
88
|
+
template<> struct hash_mix_impl<32>
|
89
|
+
{
|
90
|
+
inline static boost::uint32_t fn( boost::uint32_t x )
|
91
|
+
{
|
92
|
+
boost::uint32_t const m1 = 0x21f0aaad;
|
93
|
+
boost::uint32_t const m2 = 0x735a2d97;
|
94
|
+
|
95
|
+
x ^= x >> 16;
|
96
|
+
x *= m1;
|
97
|
+
x ^= x >> 15;
|
98
|
+
x *= m2;
|
99
|
+
x ^= x >> 15;
|
100
|
+
|
101
|
+
return x;
|
102
|
+
}
|
103
|
+
};
|
104
|
+
|
105
|
+
inline std::size_t hash_mix( std::size_t v )
|
106
|
+
{
|
107
|
+
return hash_mix_impl<sizeof(std::size_t) * CHAR_BIT>::fn( v );
|
108
|
+
}
|
109
|
+
|
110
|
+
} // namespace hash_detail
|
111
|
+
} // namespace boost
|
112
|
+
|
113
|
+
#endif // #ifndef BOOST_HASH_DETAIL_HASH_MIX_HPP
|