passenger 6.0.16 → 6.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +22 -1
  3. data/build/integration_tests.rb +6 -6
  4. data/build/ruby_tests.rb +1 -1
  5. data/build/test_basics.rb +0 -1
  6. data/src/agent/Core/Config.h +1 -1
  7. data/src/agent/Core/Controller/Config.h +1 -1
  8. data/src/agent/Core/SpawningKit/PipeWatcher.h +18 -3
  9. data/src/agent/Watchdog/Config.h +1 -1
  10. data/src/cxx_supportlib/Constants.h +1 -1
  11. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  12. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +1 -1
  13. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +344 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +686 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +56 -0
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +81 -25
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +68 -8
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +46 -11
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +4 -4
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +1 -1
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +4 -4
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +2 -2
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +2 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +3 -3
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +3 -3
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +4 -4
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +2 -2
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +2 -2
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +13 -3
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +14 -3
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +13 -3
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +30 -305
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +90 -0
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +17 -18
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +98 -24
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +330 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +81 -15
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +4 -4
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +19 -11
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +37 -0
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +3 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +10 -2
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +14 -1
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +18 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +1 -2
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +7 -3
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +4 -14
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +22 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +447 -142
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +57 -8
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +51 -6
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +5 -0
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +41 -4
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +5 -0
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +13 -2
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +13 -2
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +4 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +9 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +11 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +52 -8
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +13 -2
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +5 -0
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +39 -6
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +5 -0
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +39 -6
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +5 -0
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +5 -0
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +5 -0
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +5 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +5 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +5 -0
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +5 -0
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +5 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +6 -9
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +3 -3
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +3 -3
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +70 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +146 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +35 -5
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +13 -3
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +7 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +180 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +89 -66
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +66 -45
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +13 -3
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1134 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +130 -106
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +377 -3
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +168 -29
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +149 -203
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +256 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +76 -80
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +40 -14
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +132 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +12 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +12 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +12 -3
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +25 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +25 -6
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +34 -45
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +28 -6
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +204 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +33 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +13 -3
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +21 -9
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +33 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +12 -3
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +40 -9
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +27 -6
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +104 -24
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +12 -3
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +70 -15
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +25 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +38 -30
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +27 -6
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -13
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +2 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +17 -18
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +3 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +13 -3
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +11 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -13
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +23 -18
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +2 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +2 -2
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +4 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  148. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +2 -2
  152. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
  153. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +10 -3
  157. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +9 -3
  158. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +9 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +6 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +8 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +33 -0
  163. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +9 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +29 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +13 -13
  169. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +80 -95
  170. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +10 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +738 -34
  173. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +38 -10
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +1 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +2 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +3 -4
  177. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1150 -1213
  178. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +104 -12
  180. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +1 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +31 -331
  183. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +173 -0
  185. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +133 -0
  186. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +461 -566
  187. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +24 -24
  188. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +91 -0
  189. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +38 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +73 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +39 -0
  192. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +32 -4
  193. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +16 -16
  195. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +46 -0
  196. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +2 -2
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +159 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +9 -9
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +45 -45
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +8 -8
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +37 -38
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -0
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +145 -90
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +2 -0
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +7 -7
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +5 -5
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +11 -9
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +7 -7
  227. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  228. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +8 -5
  230. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +4 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +2 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +8 -4
  234. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +111 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  238. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  239. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +6 -2
  240. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +7 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +2 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +10 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +38 -43
  246. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +52 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  249. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  250. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +37 -7
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +1921 -0
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +66 -82
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +6 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +109 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +45 -0
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +732 -0
  259. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +49 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +586 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +49 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +166 -66
  263. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +145 -28
  264. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  265. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +1 -1
  266. data/src/ruby_native_extension/extconf.rb +1 -1
  267. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
  268. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  269. metadata +36 -19
  270. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  271. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  272. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  273. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  274. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  275. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  276. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  277. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  278. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  279. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -196
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -709
  282. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  283. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  284. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  285. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  286. 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 % prime_list[SizeIndex]; }
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 defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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 defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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
- return __umulh(lowbits, d);
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
- __extension__ typedef unsigned __int128 ext_uint128_t;
198
- return (ext_uint128_t(lowbits) * d) >> 64;
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 // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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 defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT) && BOOST_INTRUSIVE_64_BIT_SIZE_T
212
- const std::size_t sizes_under_32bit = sizeof(inv_sizes32)/sizeof(inv_sizes32[0]);
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-sizes_under_32bit](hash);
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 // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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
- #if !defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
233
- modfunc< 0>,modfunc< 1>,modfunc< 2>,modfunc< 3>,modfunc< 4>,
234
- modfunc< 5>,modfunc< 6>,modfunc< 7>,modfunc< 8>,modfunc< 9>,
235
- modfunc<10>,modfunc<11>,modfunc<12>,modfunc<13>,modfunc<14>,
236
- modfunc<15>,modfunc<16>,modfunc<17>,modfunc<18>,modfunc<19>,
237
- modfunc<20>,modfunc<21>,modfunc<22>,modfunc<23>,modfunc<24>,
238
- modfunc<25>,modfunc<26>,modfunc<27>,modfunc<28>,modfunc<29>,
239
- modfunc<30>,
240
- #endif
241
- # if BOOST_INTRUSIVE_64_BIT_SIZE_T
242
- modfunc<31>,modfunc<32>,modfunc<33>,modfunc<34>,
243
- modfunc<35>,modfunc<36>,modfunc<37>,modfunc<38>,modfunc<39>,
244
- modfunc<40>,modfunc<41>,modfunc<42>,modfunc<43>,modfunc<44>,
245
- modfunc<45>,modfunc<46>,modfunc<47>,modfunc<48>,modfunc<49>,
246
- modfunc<50>,modfunc<51>,modfunc<52>,modfunc<53>,modfunc<54>,
247
- modfunc<55>,modfunc<56>,modfunc<57>,modfunc<58>,modfunc<59>,
248
- modfunc<60>,modfunc<61>,modfunc<62>,modfunc<63>
249
- # else
250
- modfunc<31>
251
- # endif
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 defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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 // defined(BOOST_INTRUSIVE_FCA_FASTMOD_SUPPORT)
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 bucket_cnt, std::size_t split, detail::true_)
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); (void)bucket_cnt;
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 size_traits_const_t priv_size_traits() const
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 size_traits priv_size_traits() const
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 internal_type;
1819
-
1820
- typedef typename internal_type::key_equal key_equal;
1821
- typedef typename internal_type::hasher hasher;
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 internal_type::size_traits split_traits;
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
- : internal_type(val_traits, b_traits, h, e)
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
- : internal_type(BOOST_MOVE_BASE(internal_type, other))
1912
+ : split_bucket_hash_equal_t(BOOST_MOVE_BASE(split_bucket_hash_equal_t, other))
1874
1913
  {}
1875
1914
 
1876
- BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_t priv_split_traits()
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 internal_type::priv_clear_buckets;
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->priv_split_traits().get_size(); }
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 internal_type::end;
2087
- using internal_type::cend;
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->priv_size_traits().set_size(size_type(0));
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->priv_split_traits().set_size(this->initial_split_from_bucket_count(bucket_sz));
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->priv_size_traits().set_size(x.priv_size_traits().get_size());
2407
- x.priv_size_traits().set_size(size_type(0));
2408
- this->priv_split_traits().set_size(x.split_count());
2409
- x.priv_split_traits().set_size(size_type(0));
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->priv_size_traits().get_size();
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->priv_size_traits().increment();
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->priv_size_traits().decrement();
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->priv_size_traits().set_size(size_type(this->priv_size_traits().get_size()-num_erased));
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->priv_size_traits().set_size(size_type(this->priv_size_traits().get_size()-cnt));
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->priv_size_traits().set_size(size_type(0));
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->priv_size_traits().set_size(size_type(0));
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->bucket(k, this->priv_hasher()); }
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->priv_split_traits().increment();
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->priv_split_traits().decrement();
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->priv_size_traits().get_size();
3767
- this->priv_size_traits().set_size(0);
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->priv_size_traits().set_size(size_backup);
3830
- this->priv_split_traits().set_size(split);
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->priv_size_traits().set_size(src.priv_size_traits().get_size());
3931
- this->priv_split_traits().set_size(dst_bucket_count);
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->priv_size_traits().increment();
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
  }
@@ -251,6 +251,8 @@ struct OPTION_NAME \
251
251
  template< TYPE VALUE> \
252
252
  struct OPTION_NAME \
253
253
  { \
254
+ static const TYPE value = VALUE; \
255
+ \
254
256
  template<class Base> \
255
257
  struct pack : Base \
256
258
  { \
@@ -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 node) BOOST_NOEXCEPT
245
+ static void unlink(node_ptr n) BOOST_NOEXCEPT
246
246
  {
247
- node_ptr x = NodeTraits::get_parent(node);
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, node);
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node) BOOST_NOEXCEPT;
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 node, node_ptr header) BOOST_NOEXCEPT
525
- { priv_splay_up<true>(node, header); }
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 node, node_ptr header) BOOST_NOEXCEPT
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
- node_ptr n((node == header) ? NodeTraits::get_right(header) : node);
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;