passenger 6.0.16 → 6.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +46 -2
- data/CONTRIBUTORS +2 -0
- 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/native_support.rb +4 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/public_api.rb +3 -0
- data/src/ruby_supportlib/phusion_passenger/utils.rb +1 -0
- 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
@@ -2,6 +2,7 @@
|
|
2
2
|
//
|
3
3
|
// (C) Copyright Ion Gaztanaga 2006-2022
|
4
4
|
// (C) Copyright 2022 Joaquin M Lopez Munoz.
|
5
|
+
// (C) Copyright 2022 Christian Mazakas
|
5
6
|
//
|
6
7
|
// Distributed under the Boost Software License, Version 1.0.
|
7
8
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
@@ -84,11 +85,6 @@ namespace intrusive {
|
|
84
85
|
|
85
86
|
/// @cond
|
86
87
|
|
87
|
-
#if !defined(BOOST_NO_INT64_T)&&\
|
88
|
-
(defined(BOOST_HAS_INT128) || (defined(_MSC_VER) && defined(_WIN64)))
|
89
|
-
#define BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT
|
90
|
-
#endif
|
91
|
-
|
92
88
|
//We only support LLP64(Win64) or LP64(most Unix) data models
|
93
89
|
#ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
|
94
90
|
# define BOOST_INTRUSIVE_SIZE_C(NUMBER) NUMBER##ULL
|
@@ -98,7 +94,6 @@ namespace intrusive {
|
|
98
94
|
# define BOOST_INTRUSIVE_64_BIT_SIZE_T (((((ULONG_MAX>>16)>>16)>>16)>>15) != 0)
|
99
95
|
#endif
|
100
96
|
|
101
|
-
|
102
97
|
template<int Dummy = 0>
|
103
98
|
struct prime_list_holder
|
104
99
|
{
|
@@ -167,11 +162,11 @@ struct prime_list_holder
|
|
167
162
|
{ return prime_list[std::ptrdiff_t(n)]; }
|
168
163
|
|
169
164
|
template<std::size_t SizeIndex>
|
170
|
-
BOOST_INTRUSIVE_FORCEINLINE static std::size_t modfunc(std::size_t hash) { return hash %
|
165
|
+
BOOST_INTRUSIVE_FORCEINLINE static std::size_t modfunc(std::size_t hash) { return hash % SizeIndex; }
|
171
166
|
|
172
167
|
static std::size_t(*const positions[])(std::size_t);
|
173
168
|
|
174
|
-
#if
|
169
|
+
#if BOOST_INTRUSIVE_64_BIT_SIZE_T
|
175
170
|
static const uint64_t inv_sizes32[];
|
176
171
|
static const std::size_t inv_sizes32_size;
|
177
172
|
#endif
|
@@ -185,17 +180,20 @@ struct prime_list_holder
|
|
185
180
|
BOOST_INTRUSIVE_FORCEINLINE static std::size_t size(std::size_t size_index)
|
186
181
|
{ return prime_list_holder<>::size_from_index(size_index); }
|
187
182
|
|
188
|
-
#if
|
183
|
+
#if BOOST_INTRUSIVE_64_BIT_SIZE_T
|
189
184
|
// https://github.com/lemire/fastmod
|
190
185
|
|
191
|
-
|
192
186
|
BOOST_INTRUSIVE_FORCEINLINE static uint64_t mul128_u32(uint64_t lowbits, uint32_t d)
|
193
187
|
{
|
194
188
|
#if defined(_MSC_VER)
|
195
|
-
|
189
|
+
return __umulh(lowbits, d);
|
190
|
+
#elif defined(BOOST_HAS_INT128)
|
191
|
+
return static_cast<uint64_t>((uint128_type(lowbits) * d) >> 64);
|
196
192
|
#else
|
197
|
-
|
198
|
-
|
193
|
+
uint64_t r1 = (lowbits & UINT32_MAX) * d;
|
194
|
+
uint64_t r2 = (lowbits >> 32) * d;
|
195
|
+
r2 += r1 >> 32;
|
196
|
+
return r2 >> 32;
|
199
197
|
#endif
|
200
198
|
}
|
201
199
|
|
@@ -204,51 +202,67 @@ struct prime_list_holder
|
|
204
202
|
uint64_t lowbits = M * a;
|
205
203
|
return (uint32_t)(mul128_u32(lowbits, d));
|
206
204
|
}
|
207
|
-
#endif //
|
205
|
+
#endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
|
208
206
|
|
209
207
|
BOOST_INTRUSIVE_FORCEINLINE static std::size_t position(std::size_t hash,std::size_t size_index)
|
210
208
|
{
|
211
|
-
#if
|
212
|
-
|
209
|
+
#if BOOST_INTRUSIVE_64_BIT_SIZE_T
|
210
|
+
BOOST_CONSTEXPR_OR_CONST std::size_t sizes_under_32bit = sizeof(inv_sizes32)/sizeof(inv_sizes32[0]);
|
213
211
|
if(BOOST_LIKELY(size_index < sizes_under_32bit)){
|
214
212
|
return fastmod_u32( uint32_t(hash)+uint32_t(hash>>32)
|
215
213
|
, inv_sizes32[size_index]
|
216
214
|
, uint32_t(prime_list[size_index]) );
|
217
215
|
}
|
218
216
|
else{
|
219
|
-
return positions[size_index
|
217
|
+
return positions[size_index](hash);
|
220
218
|
}
|
221
|
-
#elif defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
|
222
|
-
return fastmod_u32(hash, inv_sizes32[size_index], uint32_t(sizes[size_index]));
|
223
219
|
#else
|
224
220
|
return positions[size_index](hash);
|
225
|
-
#endif //
|
221
|
+
#endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
|
226
222
|
}
|
227
223
|
};
|
228
224
|
|
229
225
|
template<int Dummy>
|
230
226
|
std::size_t(* const prime_list_holder<Dummy>::positions[])(std::size_t) =
|
231
227
|
{
|
232
|
-
|
233
|
-
modfunc<
|
234
|
-
modfunc<
|
235
|
-
modfunc<
|
236
|
-
modfunc<
|
237
|
-
modfunc<
|
238
|
-
modfunc<
|
239
|
-
modfunc<
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
modfunc<
|
244
|
-
modfunc<
|
245
|
-
modfunc<
|
246
|
-
modfunc<
|
247
|
-
modfunc<
|
248
|
-
|
249
|
-
|
250
|
-
modfunc<31
|
251
|
-
|
228
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(3)>, modfunc<BOOST_INTRUSIVE_SIZE_C(7)>,
|
229
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(11)>, modfunc<BOOST_INTRUSIVE_SIZE_C(17)>,
|
230
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(29)>, modfunc<BOOST_INTRUSIVE_SIZE_C(53)>,
|
231
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(97)>, modfunc<BOOST_INTRUSIVE_SIZE_C(193)>,
|
232
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(389)>, modfunc<BOOST_INTRUSIVE_SIZE_C(769)>,
|
233
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1543)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3079)>,
|
234
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6151)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12289)>,
|
235
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(24593)>, modfunc<BOOST_INTRUSIVE_SIZE_C(49157)>,
|
236
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(98317)>, modfunc<BOOST_INTRUSIVE_SIZE_C(196613)>,
|
237
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(393241)>, modfunc<BOOST_INTRUSIVE_SIZE_C(786433)>,
|
238
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1572869)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3145739)>,
|
239
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6291469)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12582917)>,
|
240
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(25165843)>, modfunc<BOOST_INTRUSIVE_SIZE_C(50331653)>,
|
241
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(100663319)>, modfunc<BOOST_INTRUSIVE_SIZE_C(201326611)>,
|
242
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(402653189)>, modfunc<BOOST_INTRUSIVE_SIZE_C(805306457)>,
|
243
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1610612741)>, //0-30 indexes
|
244
|
+
#if BOOST_INTRUSIVE_64_BIT_SIZE_T
|
245
|
+
//Taken from Boost.MultiIndex code, thanks to Joaquin M. Lopez Munoz.
|
246
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(3221225473)>, //<- 32 bit values stop here (index 31)
|
247
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6442450939)>, modfunc<BOOST_INTRUSIVE_SIZE_C(12884901893)>,
|
248
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(25769803751)>, modfunc<BOOST_INTRUSIVE_SIZE_C(51539607551)>,
|
249
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(103079215111)>, modfunc<BOOST_INTRUSIVE_SIZE_C(206158430209)>,
|
250
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(412316860441)>, modfunc<BOOST_INTRUSIVE_SIZE_C(824633720831)>,
|
251
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1649267441651)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3298534883309)>,
|
252
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6597069766657)>, modfunc<BOOST_INTRUSIVE_SIZE_C(13194139533299)>,
|
253
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(26388279066623)>, modfunc<BOOST_INTRUSIVE_SIZE_C(52776558133303)>,
|
254
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(105553116266489)>, modfunc<BOOST_INTRUSIVE_SIZE_C(211106232532969)>,
|
255
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(422212465066001)>, modfunc<BOOST_INTRUSIVE_SIZE_C(844424930131963)>,
|
256
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1688849860263953)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3377699720527861)>,
|
257
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6755399441055731)>, modfunc<BOOST_INTRUSIVE_SIZE_C(13510798882111483)>,
|
258
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(27021597764222939)>, modfunc<BOOST_INTRUSIVE_SIZE_C(54043195528445957)>,
|
259
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(108086391056891903)>, modfunc<BOOST_INTRUSIVE_SIZE_C(216172782113783843)>,
|
260
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(432345564227567621)>, modfunc<BOOST_INTRUSIVE_SIZE_C(864691128455135207)>,
|
261
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(1729382256910270481)>, modfunc<BOOST_INTRUSIVE_SIZE_C(3458764513820540933)>,
|
262
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(6917529027641081903)>, modfunc<BOOST_INTRUSIVE_SIZE_C(9223372036854775783)> //(index 63)
|
263
|
+
#else
|
264
|
+
modfunc<BOOST_INTRUSIVE_SIZE_C(2147483647)> //<- 32 bit stops here (index 31) as ptrdiff_t is signed
|
265
|
+
#endif
|
252
266
|
};
|
253
267
|
|
254
268
|
template<int Dummy>
|
@@ -298,7 +312,7 @@ const std::size_t prime_list_holder<Dummy>::prime_list_size
|
|
298
312
|
= sizeof(prime_list) / sizeof(std::size_t);
|
299
313
|
|
300
314
|
|
301
|
-
#if
|
315
|
+
#if BOOST_INTRUSIVE_64_BIT_SIZE_T
|
302
316
|
|
303
317
|
template<int Dummy>
|
304
318
|
const uint64_t prime_list_holder<Dummy>::inv_sizes32[] = {
|
@@ -340,7 +354,7 @@ template<int Dummy>
|
|
340
354
|
const std::size_t prime_list_holder<Dummy>::inv_sizes32_size
|
341
355
|
= sizeof(inv_sizes32) / sizeof(uint64_t);
|
342
356
|
|
343
|
-
#endif //
|
357
|
+
#endif // BOOST_INTRUSIVE_64_BIT_SIZE_T
|
344
358
|
|
345
359
|
struct prime_fmod_size : prime_list_holder<>
|
346
360
|
{
|
@@ -785,9 +799,9 @@ BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_va
|
|
785
799
|
}
|
786
800
|
|
787
801
|
template<bool Power2Buckets, bool Incremental> //fastmod_buckets
|
788
|
-
BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t
|
802
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t , std::size_t split, detail::true_)
|
789
803
|
{
|
790
|
-
return prime_fmod_size::position(hash_value, split);
|
804
|
+
return prime_fmod_size::position(hash_value, split);
|
791
805
|
}
|
792
806
|
|
793
807
|
//!This metafunction will obtain the type of a bucket
|
@@ -1473,6 +1487,10 @@ struct bucket_hash_t
|
|
1473
1487
|
, bucket_plus_vtraits_t(BOOST_MOVE_BASE(bucket_plus_vtraits_t, other))
|
1474
1488
|
{}
|
1475
1489
|
|
1490
|
+
template<class K>
|
1491
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_hash(const K &k) const
|
1492
|
+
{ return this->base_t::operator()(k); }
|
1493
|
+
|
1476
1494
|
BOOST_INTRUSIVE_FORCEINLINE const hasher &priv_hasher() const
|
1477
1495
|
{ return this->base_t::get(); }
|
1478
1496
|
|
@@ -1747,8 +1765,17 @@ struct hashtable_size_wrapper
|
|
1747
1765
|
typedef const size_traits & size_traits_const_t;
|
1748
1766
|
typedef size_traits & size_traits_t;
|
1749
1767
|
|
1750
|
-
BOOST_INTRUSIVE_FORCEINLINE
|
1751
|
-
{ return size_traits_; }
|
1768
|
+
BOOST_INTRUSIVE_FORCEINLINE SizeType get_hashtable_size_wrapper_size() const
|
1769
|
+
{ return size_traits_.get_size(); }
|
1770
|
+
|
1771
|
+
BOOST_INTRUSIVE_FORCEINLINE void set_hashtable_size_wrapper_size(SizeType s)
|
1772
|
+
{ size_traits_.set_size(s); }
|
1773
|
+
|
1774
|
+
BOOST_INTRUSIVE_FORCEINLINE void inc_hashtable_size_wrapper_size()
|
1775
|
+
{ size_traits_.increment(); }
|
1776
|
+
|
1777
|
+
BOOST_INTRUSIVE_FORCEINLINE void dec_hashtable_size_wrapper_size()
|
1778
|
+
{ size_traits_.decrement(); }
|
1752
1779
|
|
1753
1780
|
BOOST_INTRUSIVE_FORCEINLINE size_traits_t priv_size_traits()
|
1754
1781
|
{ return size_traits_; }
|
@@ -1780,7 +1807,19 @@ struct hashtable_size_wrapper<DeriveFrom, SizeType, false>
|
|
1780
1807
|
typedef size_traits size_traits_const_t;
|
1781
1808
|
typedef size_traits size_traits_t;
|
1782
1809
|
|
1783
|
-
BOOST_INTRUSIVE_FORCEINLINE
|
1810
|
+
BOOST_INTRUSIVE_FORCEINLINE SizeType get_hashtable_size_wrapper_size() const
|
1811
|
+
{ return 0u; }
|
1812
|
+
|
1813
|
+
BOOST_INTRUSIVE_FORCEINLINE void set_hashtable_size_wrapper_size(SizeType)
|
1814
|
+
{}
|
1815
|
+
|
1816
|
+
BOOST_INTRUSIVE_FORCEINLINE void inc_hashtable_size_wrapper_size()
|
1817
|
+
{}
|
1818
|
+
|
1819
|
+
BOOST_INTRUSIVE_FORCEINLINE void dec_hashtable_size_wrapper_size()
|
1820
|
+
{}
|
1821
|
+
|
1822
|
+
BOOST_INTRUSIVE_FORCEINLINE size_traits priv_size_traits()
|
1784
1823
|
{ return size_traits(); }
|
1785
1824
|
};
|
1786
1825
|
|
@@ -1815,14 +1854,14 @@ struct hashdata_internal
|
|
1815
1854
|
public:
|
1816
1855
|
static const bool linear_buckets = 0 != (BoolFlags & hash_bool_flags::linear_buckets_pos);
|
1817
1856
|
typedef typename get_hashtable_size_wrapper_bucket
|
1818
|
-
<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type
|
1819
|
-
|
1820
|
-
typedef typename
|
1821
|
-
typedef typename
|
1857
|
+
<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrKeyEqual, BucketTraits, SizeType, BoolFlags>::type split_bucket_hash_equal_t;
|
1858
|
+
|
1859
|
+
typedef typename split_bucket_hash_equal_t::key_equal key_equal;
|
1860
|
+
typedef typename split_bucket_hash_equal_t::hasher hasher;
|
1822
1861
|
typedef bucket_plus_vtraits
|
1823
1862
|
<ValueTraits, BucketTraits, linear_buckets> bucket_plus_vtraits_t;
|
1824
1863
|
typedef SizeType size_type;
|
1825
|
-
typedef typename
|
1864
|
+
typedef typename split_bucket_hash_equal_t::size_traits split_traits;
|
1826
1865
|
typedef typename bucket_plus_vtraits_t::bucket_ptr bucket_ptr;
|
1827
1866
|
typedef typename bucket_plus_vtraits_t::const_value_traits_ptr const_value_traits_ptr;
|
1828
1867
|
typedef typename bucket_plus_vtraits_t::siterator siterator;
|
@@ -1866,23 +1905,20 @@ struct hashdata_internal
|
|
1866
1905
|
|
1867
1906
|
hashdata_internal( const ValueTraits &val_traits, const bucket_traits &b_traits
|
1868
1907
|
, const hasher & h, const key_equal &e)
|
1869
|
-
:
|
1908
|
+
: split_bucket_hash_equal_t(val_traits, b_traits, h, e)
|
1870
1909
|
{}
|
1871
1910
|
|
1872
1911
|
BOOST_INTRUSIVE_FORCEINLINE hashdata_internal(BOOST_RV_REF(hashdata_internal) other)
|
1873
|
-
:
|
1912
|
+
: split_bucket_hash_equal_t(BOOST_MOVE_BASE(split_bucket_hash_equal_t, other))
|
1874
1913
|
{}
|
1875
1914
|
|
1876
|
-
BOOST_INTRUSIVE_FORCEINLINE typename
|
1877
|
-
{ return this->priv_size_traits(); }
|
1878
|
-
|
1879
|
-
BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_const_t priv_split_traits() const
|
1915
|
+
BOOST_INTRUSIVE_FORCEINLINE typename split_bucket_hash_equal_t::size_traits_t priv_split_traits()
|
1880
1916
|
{ return this->priv_size_traits(); }
|
1881
1917
|
|
1882
1918
|
~hashdata_internal()
|
1883
1919
|
{ this->priv_clear_buckets(); }
|
1884
1920
|
|
1885
|
-
using
|
1921
|
+
using split_bucket_hash_equal_t::priv_clear_buckets;
|
1886
1922
|
|
1887
1923
|
void priv_clear_buckets()
|
1888
1924
|
{
|
@@ -1907,7 +1943,17 @@ struct hashdata_internal
|
|
1907
1943
|
|
1908
1944
|
//public functions
|
1909
1945
|
BOOST_INTRUSIVE_FORCEINLINE SizeType split_count() const BOOST_NOEXCEPT
|
1910
|
-
{ return this->
|
1946
|
+
{ return this->split_bucket_hash_equal_t::get_hashtable_size_wrapper_size(); }
|
1947
|
+
|
1948
|
+
BOOST_INTRUSIVE_FORCEINLINE void split_count(SizeType s) BOOST_NOEXCEPT
|
1949
|
+
{ this->split_bucket_hash_equal_t::set_hashtable_size_wrapper_size(s); }
|
1950
|
+
|
1951
|
+
//public functions
|
1952
|
+
BOOST_INTRUSIVE_FORCEINLINE void inc_split_count() BOOST_NOEXCEPT
|
1953
|
+
{ this->split_bucket_hash_equal_t::inc_hashtable_size_wrapper_size(); }
|
1954
|
+
|
1955
|
+
BOOST_INTRUSIVE_FORCEINLINE void dec_split_count() BOOST_NOEXCEPT
|
1956
|
+
{ this->split_bucket_hash_equal_t::dec_hashtable_size_wrapper_size(); }
|
1911
1957
|
|
1912
1958
|
BOOST_INTRUSIVE_FORCEINLINE static SizeType initial_split_from_bucket_count(SizeType bc) BOOST_NOEXCEPT
|
1913
1959
|
{
|
@@ -1983,10 +2029,7 @@ struct hashdata_internal
|
|
1983
2029
|
{ return (priv_hash_to_nbucket)(hash_value, fastmod_buckets_t()); }
|
1984
2030
|
|
1985
2031
|
BOOST_INTRUSIVE_FORCEINLINE size_type priv_hash_to_nbucket(std::size_t hash_value, detail::true_) const //fastmod_buckets_t
|
1986
|
-
{
|
1987
|
-
return static_cast<size_type>(hash_to_bucket_split<power_2_buckets, incremental>
|
1988
|
-
(hash_value, this->priv_usable_bucket_count(), this->split_count(), detail::true_()));
|
1989
|
-
}
|
2032
|
+
{ return static_cast<size_type>(prime_fmod_size::position(hash_value, this->split_count())); }
|
1990
2033
|
|
1991
2034
|
BOOST_INTRUSIVE_FORCEINLINE size_type priv_hash_to_nbucket(std::size_t hash_value, detail::false_) const //!fastmod_buckets_t
|
1992
2035
|
{
|
@@ -1994,7 +2037,6 @@ struct hashdata_internal
|
|
1994
2037
|
(hash_value, this->priv_usable_bucket_count(), this->split_count(), detail::false_()));
|
1995
2038
|
}
|
1996
2039
|
|
1997
|
-
|
1998
2040
|
BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value, detail::false_) BOOST_NOEXCEPT
|
1999
2041
|
{
|
2000
2042
|
return iterator( siterator(this->priv_value_to_node_ptr(value))
|
@@ -2083,8 +2125,8 @@ struct hashdata_internal
|
|
2083
2125
|
, this->priv_value_traits_ptr());
|
2084
2126
|
}
|
2085
2127
|
|
2086
|
-
using
|
2087
|
-
using
|
2128
|
+
using split_bucket_hash_equal_t::end;
|
2129
|
+
using split_bucket_hash_equal_t::cend;
|
2088
2130
|
|
2089
2131
|
local_iterator end(size_type n) BOOST_NOEXCEPT
|
2090
2132
|
{ return local_iterator(this->priv_bucket_lend(n), this->priv_value_traits_ptr()); }
|
@@ -2322,19 +2364,32 @@ class hashtable_impl
|
|
2322
2364
|
public:
|
2323
2365
|
typedef insert_commit_data_impl<store_hash> insert_commit_data;
|
2324
2366
|
|
2367
|
+
private:
|
2325
2368
|
void default_init_actions()
|
2326
2369
|
{
|
2327
2370
|
this->priv_set_sentinel_bucket();
|
2328
2371
|
this->priv_init_buckets_and_cache();
|
2329
|
-
this->
|
2372
|
+
this->priv_size_count(size_type(0));
|
2330
2373
|
size_type bucket_sz = this->bucket_count();
|
2331
2374
|
BOOST_INTRUSIVE_INVARIANT_ASSERT(bucket_sz != 0);
|
2332
2375
|
//Check power of two bucket array if the option is activated
|
2333
2376
|
BOOST_INTRUSIVE_INVARIANT_ASSERT
|
2334
2377
|
(!power_2_buckets || (0 == (bucket_sz & (bucket_sz - 1))));
|
2335
|
-
this->
|
2378
|
+
this->split_count(this->initial_split_from_bucket_count(bucket_sz));
|
2336
2379
|
}
|
2337
2380
|
|
2381
|
+
BOOST_INTRUSIVE_FORCEINLINE SizeType priv_size_count() const BOOST_NOEXCEPT
|
2382
|
+
{ return this->internal_type::get_hashtable_size_wrapper_size(); }
|
2383
|
+
|
2384
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_size_count(SizeType s) BOOST_NOEXCEPT
|
2385
|
+
{ this->internal_type::set_hashtable_size_wrapper_size(s); }
|
2386
|
+
|
2387
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_size_inc() BOOST_NOEXCEPT
|
2388
|
+
{ this->internal_type::inc_hashtable_size_wrapper_size(); }
|
2389
|
+
|
2390
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_size_dec() BOOST_NOEXCEPT
|
2391
|
+
{ this->internal_type::dec_hashtable_size_wrapper_size(); }
|
2392
|
+
|
2338
2393
|
public:
|
2339
2394
|
|
2340
2395
|
//! <b>Requires</b>: buckets must not be being used by any other resource.
|
@@ -2403,10 +2458,10 @@ class hashtable_impl
|
|
2403
2458
|
{
|
2404
2459
|
this->priv_swap_cache(x);
|
2405
2460
|
x.priv_init_cache();
|
2406
|
-
this->
|
2407
|
-
x.
|
2408
|
-
this->
|
2409
|
-
x.
|
2461
|
+
this->priv_size_count(x.priv_size_count());
|
2462
|
+
x.priv_size_count(size_type(0));
|
2463
|
+
this->split_count(x.split_count());
|
2464
|
+
x.split_count(size_type(0));
|
2410
2465
|
}
|
2411
2466
|
|
2412
2467
|
//! <b>Effects</b>: Equivalent to swap.
|
@@ -2524,7 +2579,7 @@ class hashtable_impl
|
|
2524
2579
|
size_type size() const BOOST_NOEXCEPT
|
2525
2580
|
{
|
2526
2581
|
BOOST_IF_CONSTEXPR(constant_time_size)
|
2527
|
-
return this->
|
2582
|
+
return this->priv_size_count();
|
2528
2583
|
else{
|
2529
2584
|
std::size_t len = 0;
|
2530
2585
|
std::size_t bucket_cnt = this->bucket_count();
|
@@ -2798,7 +2853,7 @@ class hashtable_impl
|
|
2798
2853
|
//! After a successful rehashing insert_commit_data remains valid.
|
2799
2854
|
iterator insert_unique_commit(reference value, const insert_commit_data &commit_data) BOOST_NOEXCEPT
|
2800
2855
|
{
|
2801
|
-
this->
|
2856
|
+
this->priv_size_inc();
|
2802
2857
|
node_ptr const n = this->priv_value_to_node_ptr(value);
|
2803
2858
|
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(!safemode_or_autounlink || slist_node_algorithms::unique(n));
|
2804
2859
|
node_functions_t::store_hash(n, commit_data.get_hash(), store_hash_t());
|
@@ -2890,7 +2945,7 @@ class hashtable_impl
|
|
2890
2945
|
//Get the bucket number and local iterator for both iterators
|
2891
2946
|
const bucket_ptr bp = this->priv_get_bucket_ptr(i);
|
2892
2947
|
this->priv_erase_node(*bp, i.slist_it(), this->make_node_disposer(disposer), optimize_multikey_t());
|
2893
|
-
this->
|
2948
|
+
this->priv_size_dec();
|
2894
2949
|
this->priv_erasure_update_cache(bp);
|
2895
2950
|
}
|
2896
2951
|
|
@@ -2931,7 +2986,7 @@ class hashtable_impl
|
|
2931
2986
|
size_type const num_erased = (size_type)this->priv_erase_node_range
|
2932
2987
|
( before_first_local_it, first_bucket_num, last_local_it, last_bucket_num
|
2933
2988
|
, this->make_node_disposer(disposer), optimize_multikey_t());
|
2934
|
-
this->
|
2989
|
+
this->priv_size_count(size_type(this->priv_size_count()-num_erased));
|
2935
2990
|
this->priv_erasure_update_cache_range(first_bucket_num, last_bucket_num);
|
2936
2991
|
}
|
2937
2992
|
}
|
@@ -3001,7 +3056,7 @@ class hashtable_impl
|
|
3001
3056
|
(this->priv_value_from_siterator(it), h, key, equal_func, compare_hash_t()));
|
3002
3057
|
slist_node_algorithms::unlink_after_and_dispose(prev.pointed_node(), it.pointed_node(), this->make_node_disposer(disposer));
|
3003
3058
|
}
|
3004
|
-
this->
|
3059
|
+
this->priv_size_count(size_type(this->priv_size_count()-cnt));
|
3005
3060
|
this->priv_erasure_update_cache();
|
3006
3061
|
}
|
3007
3062
|
|
@@ -3020,7 +3075,7 @@ class hashtable_impl
|
|
3020
3075
|
void clear() BOOST_NOEXCEPT
|
3021
3076
|
{
|
3022
3077
|
this->priv_clear_buckets_and_cache();
|
3023
|
-
this->
|
3078
|
+
this->priv_size_count(size_type(0));
|
3024
3079
|
}
|
3025
3080
|
|
3026
3081
|
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
|
@@ -3045,7 +3100,7 @@ class hashtable_impl
|
|
3045
3100
|
--num_buckets;
|
3046
3101
|
slist_node_algorithms::detach_and_dispose(b->get_node_ptr(), d);
|
3047
3102
|
}
|
3048
|
-
this->
|
3103
|
+
this->priv_size_count(size_type(0));
|
3049
3104
|
}
|
3050
3105
|
this->priv_init_cache();
|
3051
3106
|
}
|
@@ -3339,7 +3394,7 @@ class hashtable_impl
|
|
3339
3394
|
//!
|
3340
3395
|
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
|
3341
3396
|
BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const key_type& k) const
|
3342
|
-
{ return this->
|
3397
|
+
{ return this->priv_hash_to_nbucket(this->priv_hash(k)); }
|
3343
3398
|
|
3344
3399
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
3345
3400
|
//! the same hash values as the stored hasher. The difference is that
|
@@ -3520,7 +3575,7 @@ class hashtable_impl
|
|
3520
3575
|
if((ret = split_idx < bucket_cnt)){
|
3521
3576
|
const std::size_t bucket_to_rehash = split_idx - bucket_cnt/2u;
|
3522
3577
|
bucket_type &old_bucket = this->priv_bucket(bucket_to_rehash);
|
3523
|
-
this->
|
3578
|
+
this->inc_split_count();
|
3524
3579
|
|
3525
3580
|
//Anti-exception stuff: if an exception is thrown while
|
3526
3581
|
//moving elements from old_bucket to the target bucket, all moved
|
@@ -3553,7 +3608,7 @@ class hashtable_impl
|
|
3553
3608
|
bucket_type &target_bucket = this->priv_bucket(target_bucket_num);
|
3554
3609
|
bucket_type &source_bucket = this->priv_bucket(split_idx-1u);
|
3555
3610
|
slist_node_algorithms::transfer_after(target_bucket.get_node_ptr(), source_bucket.get_node_ptr());
|
3556
|
-
this->
|
3611
|
+
this->dec_split_count();
|
3557
3612
|
this->priv_insertion_update_cache(target_bucket_num);
|
3558
3613
|
}
|
3559
3614
|
return ret;
|
@@ -3763,8 +3818,8 @@ class hashtable_impl
|
|
3763
3818
|
ArrayDisposer rollback2(old_buckets[0], nd, old_bucket_count);
|
3764
3819
|
|
3765
3820
|
//Put size in a safe value for rollback exception
|
3766
|
-
size_type const size_backup = this->
|
3767
|
-
this->
|
3821
|
+
size_type const size_backup = this->priv_size_count();
|
3822
|
+
this->priv_size_count(0);
|
3768
3823
|
//Put cache to safe position
|
3769
3824
|
this->priv_init_cache();
|
3770
3825
|
this->priv_unset_sentinel_bucket();
|
@@ -3826,8 +3881,8 @@ class hashtable_impl
|
|
3826
3881
|
}
|
3827
3882
|
}
|
3828
3883
|
|
3829
|
-
this->
|
3830
|
-
this->
|
3884
|
+
this->priv_size_count(size_backup);
|
3885
|
+
this->split_count(split);
|
3831
3886
|
if(&new_bucket_traits != &this->priv_bucket_traits())
|
3832
3887
|
this->priv_bucket_traits() = new_bucket_traits;
|
3833
3888
|
this->priv_set_sentinel_bucket();
|
@@ -3927,8 +3982,8 @@ class hashtable_impl
|
|
3927
3982
|
this->priv_hasher() = src.priv_hasher();
|
3928
3983
|
this->priv_equal() = src.priv_equal();
|
3929
3984
|
rollback.release();
|
3930
|
-
this->
|
3931
|
-
this->
|
3985
|
+
this->priv_size_count(src.priv_size_count());
|
3986
|
+
this->split_count(dst_bucket_count);
|
3932
3987
|
this->priv_set_cache_bucket_num(0u);
|
3933
3988
|
this->priv_erasure_update_cache();
|
3934
3989
|
}
|
@@ -3946,7 +4001,7 @@ class hashtable_impl
|
|
3946
4001
|
, n, optimize_multikey_t());
|
3947
4002
|
//Update cache and increment size if needed
|
3948
4003
|
this->priv_insertion_update_cache(bucket_num);
|
3949
|
-
this->
|
4004
|
+
this->priv_size_inc();
|
3950
4005
|
slist_node_algorithms::link_after(prev.pointed_node(), n);
|
3951
4006
|
return this->build_iterator(siterator(n), this->priv_bucket_ptr(bucket_num));
|
3952
4007
|
}
|
@@ -242,13 +242,13 @@ class rbtree_algorithms
|
|
242
242
|
}
|
243
243
|
|
244
244
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unlink(node_ptr)
|
245
|
-
static void unlink(node_ptr
|
245
|
+
static void unlink(node_ptr n) BOOST_NOEXCEPT
|
246
246
|
{
|
247
|
-
node_ptr x = NodeTraits::get_parent(
|
247
|
+
node_ptr x = NodeTraits::get_parent(n);
|
248
248
|
if(x){
|
249
249
|
while(!is_header(x))
|
250
250
|
x = NodeTraits::get_parent(x);
|
251
|
-
erase(x,
|
251
|
+
erase(x, n);
|
252
252
|
}
|
253
253
|
}
|
254
254
|
|
@@ -257,19 +257,19 @@ class rbtree_algorithms
|
|
257
257
|
static node_ptr unlink_leftmost_without_rebalance(node_ptr header) BOOST_NOEXCEPT;
|
258
258
|
|
259
259
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unique(const_node_ptr)
|
260
|
-
static bool unique(const_node_ptr
|
260
|
+
static bool unique(const_node_ptr n) BOOST_NOEXCEPT;
|
261
261
|
|
262
262
|
//! @copydoc ::boost::intrusive::bstree_algorithms::size(const_node_ptr)
|
263
263
|
static std::size_t size(const_node_ptr header) BOOST_NOEXCEPT;
|
264
264
|
|
265
265
|
//! @copydoc ::boost::intrusive::bstree_algorithms::next_node(const_node_ptr)
|
266
|
-
static node_ptr next_node(node_ptr
|
266
|
+
static node_ptr next_node(node_ptr n) BOOST_NOEXCEPT;
|
267
267
|
|
268
268
|
//! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(const_node_ptr)
|
269
|
-
static node_ptr prev_node(node_ptr
|
269
|
+
static node_ptr prev_node(node_ptr n) BOOST_NOEXCEPT;
|
270
270
|
|
271
271
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init(node_ptr)
|
272
|
-
static void init(node_ptr
|
272
|
+
static void init(node_ptr n) BOOST_NOEXCEPT;
|
273
273
|
#endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
274
274
|
|
275
275
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init_header(node_ptr)
|
@@ -110,25 +110,25 @@ class sgtree_algorithms
|
|
110
110
|
static void replace_node(node_ptr node_to_be_replaced, node_ptr header, node_ptr new_node) BOOST_NOEXCEPT;
|
111
111
|
|
112
112
|
//Unlink is not possible since tree metadata is needed to update the tree
|
113
|
-
//!static void unlink(node_ptr
|
113
|
+
//!static void unlink(node_ptr n) BOOST_NOEXCEPT;
|
114
114
|
|
115
115
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
|
116
116
|
static node_ptr unlink_leftmost_without_rebalance(node_ptr header) BOOST_NOEXCEPT;
|
117
117
|
|
118
118
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unique(const_node_ptr)
|
119
|
-
static bool unique(const_node_ptr
|
119
|
+
static bool unique(const_node_ptr n) BOOST_NOEXCEPT;
|
120
120
|
|
121
121
|
//! @copydoc ::boost::intrusive::bstree_algorithms::size(const_node_ptr)
|
122
122
|
static std::size_t size(const_node_ptr header) BOOST_NOEXCEPT;
|
123
123
|
|
124
124
|
//! @copydoc ::boost::intrusive::bstree_algorithms::next_node(node_ptr)
|
125
|
-
static node_ptr next_node(node_ptr
|
125
|
+
static node_ptr next_node(node_ptr n) BOOST_NOEXCEPT;
|
126
126
|
|
127
127
|
//! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(node_ptr)
|
128
|
-
static node_ptr prev_node(node_ptr
|
128
|
+
static node_ptr prev_node(node_ptr n) BOOST_NOEXCEPT;
|
129
129
|
|
130
130
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init(node_ptr)
|
131
|
-
static void init(node_ptr
|
131
|
+
static void init(node_ptr n) BOOST_NOEXCEPT;
|
132
132
|
|
133
133
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init_header(node_ptr)
|
134
134
|
static void init_header(node_ptr header) BOOST_NOEXCEPT;
|
@@ -200,25 +200,25 @@ class splaytree_algorithms
|
|
200
200
|
static void replace_node(node_ptr node_to_be_replaced, node_ptr header, node_ptr new_node) BOOST_NOEXCEPT;
|
201
201
|
|
202
202
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unlink(node_ptr)
|
203
|
-
static void unlink(node_ptr
|
203
|
+
static void unlink(node_ptr n) BOOST_NOEXCEPT;
|
204
204
|
|
205
205
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unlink_leftmost_without_rebalance
|
206
206
|
static node_ptr unlink_leftmost_without_rebalance(node_ptr header) BOOST_NOEXCEPT;
|
207
207
|
|
208
208
|
//! @copydoc ::boost::intrusive::bstree_algorithms::unique(const_node_ptr)
|
209
|
-
static bool unique(const_node_ptr
|
209
|
+
static bool unique(const_node_ptr n) BOOST_NOEXCEPT;
|
210
210
|
|
211
211
|
//! @copydoc ::boost::intrusive::bstree_algorithms::size(const_node_ptr)
|
212
212
|
static std::size_t size(const_node_ptr header) BOOST_NOEXCEPT;
|
213
213
|
|
214
214
|
//! @copydoc ::boost::intrusive::bstree_algorithms::next_node(node_ptr)
|
215
|
-
static node_ptr next_node(node_ptr
|
215
|
+
static node_ptr next_node(node_ptr n) BOOST_NOEXCEPT;
|
216
216
|
|
217
217
|
//! @copydoc ::boost::intrusive::bstree_algorithms::prev_node(node_ptr)
|
218
|
-
static node_ptr prev_node(node_ptr
|
218
|
+
static node_ptr prev_node(node_ptr n) BOOST_NOEXCEPT;
|
219
219
|
|
220
220
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init(node_ptr)
|
221
|
-
static void init(node_ptr
|
221
|
+
static void init(node_ptr n) BOOST_NOEXCEPT;
|
222
222
|
|
223
223
|
//! @copydoc ::boost::intrusive::bstree_algorithms::init_header(node_ptr)
|
224
224
|
static void init_header(node_ptr header) BOOST_NOEXCEPT;
|
@@ -521,8 +521,8 @@ class splaytree_algorithms
|
|
521
521
|
#endif //#ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
522
522
|
|
523
523
|
// bottom-up splay, use data_ as parent for n | complexity : logarithmic | exception : nothrow
|
524
|
-
static void splay_up(node_ptr
|
525
|
-
{ priv_splay_up<true>(
|
524
|
+
static void splay_up(node_ptr n, node_ptr header) BOOST_NOEXCEPT
|
525
|
+
{ priv_splay_up<true>(n, header); }
|
526
526
|
|
527
527
|
// top-down splay | complexity : logarithmic | exception : strong, note A
|
528
528
|
template<class KeyType, class KeyNodePtrCompare>
|
@@ -535,12 +535,14 @@ class splaytree_algorithms
|
|
535
535
|
|
536
536
|
// bottom-up splay, use data_ as parent for n | complexity : logarithmic | exception : nothrow
|
537
537
|
template<bool SimpleSplay>
|
538
|
-
static void priv_splay_up(node_ptr
|
538
|
+
static void priv_splay_up(node_ptr n, node_ptr header) BOOST_NOEXCEPT
|
539
539
|
{
|
540
540
|
// If (node == header) do a splay for the right most node instead
|
541
541
|
// this is to boost performance of equal_range/count on equivalent containers in the case
|
542
542
|
// where there are many equal elements at the end
|
543
|
-
|
543
|
+
if(n == header)
|
544
|
+
n = NodeTraits::get_right(header);
|
545
|
+
|
544
546
|
node_ptr t(header);
|
545
547
|
|
546
548
|
if( n == t ) return;
|