passenger 6.2.1 → 6.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +37 -15
  3. data/build/cxx_tests.rb +2 -0
  4. data/build/support/cxx_dependency_map.rb +3 -63
  5. data/src/agent/Core/Config.h +1 -1
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/Shared/ApiServerUtils.h +1 -1
  8. data/src/agent/Watchdog/Config.h +1 -1
  9. data/src/apache2_module/Hooks.cpp +13 -0
  10. data/src/apache2_module/Utils.h +14 -0
  11. data/src/cxx_supportlib/Constants.h +1 -1
  12. data/src/cxx_supportlib/FileTools/FileManip.cpp +27 -3
  13. data/src/cxx_supportlib/InstanceDirectory.h +30 -3
  14. data/src/cxx_supportlib/ServerKit/Errors.h +1 -1
  15. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +1 -1
  16. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
  17. data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
  18. data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
  19. data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
  20. data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
  21. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
  22. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
  23. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
  24. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
  25. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
  27. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
  30. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
  31. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  32. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
  33. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  34. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
  35. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  36. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
  37. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  38. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
  39. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
  40. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
  41. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
  43. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
  44. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
  45. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
  46. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
  47. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
  48. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
  49. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
  50. data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
  57. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
  59. data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
  61. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
  63. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
  66. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
  70. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
  71. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
  72. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
  73. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
  75. data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
  78. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
  80. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
  81. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
  82. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
  83. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
  106. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
  108. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
  115. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
  120. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
  130. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
  131. data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
  133. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
  134. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
  136. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
  137. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
  138. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
  145. data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
  147. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
  148. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
  149. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
  150. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
  152. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
  153. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
  154. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
  155. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
  156. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
  158. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
  169. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
  171. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
  172. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
  174. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
  175. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
  176. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
  177. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
  180. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
  186. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
  194. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
  195. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
  198. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
  199. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  200. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
  201. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
  204. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
  205. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
  207. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
  209. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
  213. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
  216. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
  217. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
  218. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
  220. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
  222. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
  228. data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
  231. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
  232. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
  233. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
  237. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
  241. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
  242. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
  243. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
  244. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
  245. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
  246. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
  247. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
  248. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
  250. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  260. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
  261. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
  262. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
  263. data/src/nginx_module/ContentHandler.c +35 -0
  264. data/src/ruby_supportlib/phusion_passenger/common_library.rb +6 -6
  265. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
  266. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +12 -1
  267. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  268. metadata +73 -8
  269. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
  270. /data/src/cxx_supportlib/{ServerKit/llhttp_http.c → vendor-copy/llhttp/http.c} +0 -0
@@ -1,7 +1,8 @@
1
1
  /* Fast open-addressing, node-based concurrent hashset.
2
2
  *
3
3
  * Copyright 2023 Christian Mazakas.
4
- * Copyright 2023-2024 Joaquin M Lopez Munoz.
4
+ * Copyright 2023-2026 Joaquin M Lopez Munoz.
5
+ * Copyright 2026 Braden Ganetsky
5
6
  * Distributed under the Boost Software License, Version 1.0.
6
7
  * (See accompanying file LICENSE_1_0.txt or copy at
7
8
  * http://www.boost.org/LICENSE_1_0.txt)
@@ -18,6 +19,7 @@
18
19
  #include <boost/unordered/detail/foa/element_type.hpp>
19
20
  #include <boost/unordered/detail/foa/node_set_handle.hpp>
20
21
  #include <boost/unordered/detail/foa/node_set_types.hpp>
22
+ #include <boost/unordered/detail/ranges_support.hpp>
21
23
  #include <boost/unordered/detail/type_traits.hpp>
22
24
  #include <boost/unordered/unordered_node_set_fwd.hpp>
23
25
 
@@ -106,6 +108,21 @@ namespace boost {
106
108
  this->insert(f, l);
107
109
  }
108
110
 
111
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
112
+ template<
113
+ detail::convertible_to_from_range_t FromRangeT,
114
+ detail::container_compatible_range<value_type> R
115
+ >
116
+ concurrent_node_set(FromRangeT&&, R&& rg,
117
+ size_type n = detail::foa::default_bucket_count,
118
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
119
+ const allocator_type& a = allocator_type())
120
+ : table_(n, hf, eql, a)
121
+ {
122
+ this->insert_range(std::forward<R>(rg));
123
+ }
124
+ #endif
125
+
109
126
  concurrent_node_set(concurrent_node_set const& rhs)
110
127
  : table_(rhs.table_,
111
128
  boost::allocator_select_on_container_copy_construction(
@@ -125,6 +142,19 @@ namespace boost {
125
142
  {
126
143
  }
127
144
 
145
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
146
+ template<
147
+ detail::convertible_to_from_range_t FromRangeT,
148
+ detail::container_compatible_range<value_type> R
149
+ >
150
+ concurrent_node_set(
151
+ FromRangeT&& fr, R&& rg, allocator_type const& a)
152
+ : concurrent_node_set(
153
+ fr, std::forward<R>(rg), 0, hasher(), key_equal(), a)
154
+ {
155
+ }
156
+ #endif
157
+
128
158
  explicit concurrent_node_set(allocator_type const& a)
129
159
  : table_(detail::foa::default_bucket_count, hasher(), key_equal(), a)
130
160
  {
@@ -175,6 +205,29 @@ namespace boost {
175
205
  {
176
206
  }
177
207
 
208
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
209
+ template<
210
+ detail::convertible_to_from_range_t FromRangeT,
211
+ detail::container_compatible_range<value_type> R
212
+ >
213
+ concurrent_node_set(
214
+ FromRangeT&& fr, R&& rg, size_type n, const allocator_type& a)
215
+ : concurrent_node_set(
216
+ fr, std::forward<R>(rg), n, hasher(), key_equal(), a)
217
+ {
218
+ }
219
+
220
+ template<
221
+ detail::convertible_to_from_range_t FromRangeT,
222
+ detail::container_compatible_range<value_type> R
223
+ >
224
+ concurrent_node_set(FromRangeT&& fr, R&& rg, size_type n,
225
+ const hasher& hf, const allocator_type& a)
226
+ : concurrent_node_set(fr, std::forward<R>(rg), n, hf, key_equal(), a)
227
+ {
228
+ }
229
+ #endif
230
+
178
231
  concurrent_node_set(
179
232
  std::initializer_list<value_type> il, const allocator_type& a)
180
233
  : concurrent_node_set(
@@ -194,9 +247,10 @@ namespace boost {
194
247
  {
195
248
  }
196
249
 
197
- template <bool avoid_explicit_instantiation = true>
250
+ template <typename Key2,
251
+ typename std::enable_if<std::is_same<Key, Key2>::value, int>::type = 0>
198
252
  concurrent_node_set(
199
- unordered_node_set<Key, Hash, Pred, Allocator>&& other)
253
+ unordered_node_set<Key2, Hash, Pred, Allocator>&& other)
200
254
  : table_(std::move(other.table_))
201
255
  {
202
256
  }
@@ -436,12 +490,26 @@ namespace boost {
436
490
  size_type insert(InputIterator begin, InputIterator end)
437
491
  {
438
492
  size_type count_elements = 0;
439
- for (auto pos = begin; pos != end; ++pos, ++count_elements) {
440
- table_.emplace(*pos);
493
+ for (auto pos = begin; pos != end; ++pos) {
494
+ if (table_.emplace(*pos)) ++count_elements;
441
495
  }
442
496
  return count_elements;
443
497
  }
444
498
 
499
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
500
+ template<detail::container_compatible_range<value_type> R>
501
+ size_type insert_range(R&& rg)
502
+ {
503
+ size_type count_elements = 0;
504
+ auto first = std::ranges::begin(rg);
505
+ auto last = std::ranges::end(rg);
506
+ while (first != last) {
507
+ if (table_.emplace(*first++)) ++count_elements;
508
+ }
509
+ return count_elements;
510
+ }
511
+ #endif
512
+
445
513
  size_type insert(std::initializer_list<value_type> ilist)
446
514
  {
447
515
  return this->insert(ilist.begin(), ilist.end());
@@ -501,6 +569,21 @@ namespace boost {
501
569
  return count_elements;
502
570
  }
503
571
 
572
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
573
+ template<detail::container_compatible_range<value_type> R, class F>
574
+ size_type insert_range_or_visit(R&& rg, F f)
575
+ {
576
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
577
+ size_type count_elements = 0;
578
+ auto first = std::ranges::begin(rg);
579
+ auto last = std::ranges::end(rg);
580
+ for (; first != last; ++first, ++count_elements) {
581
+ table_.emplace_or_visit(*first, f);
582
+ }
583
+ return count_elements;
584
+ }
585
+ #endif
586
+
504
587
  template <class F>
505
588
  size_type insert_or_visit(std::initializer_list<value_type> ilist, F f)
506
589
  {
@@ -564,6 +647,21 @@ namespace boost {
564
647
  return count_elements;
565
648
  }
566
649
 
650
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
651
+ template<detail::container_compatible_range<value_type> R, class F>
652
+ size_type insert_range_or_cvisit(R&& rg, F f)
653
+ {
654
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
655
+ size_type count_elements = 0;
656
+ auto first = std::ranges::begin(rg);
657
+ auto last = std::ranges::end(rg);
658
+ for (; first != last; ++first, ++count_elements) {
659
+ table_.emplace_or_cvisit(*first, f);
660
+ }
661
+ return count_elements;
662
+ }
663
+ #endif
664
+
567
665
  template <class F>
568
666
  size_type insert_or_cvisit(std::initializer_list<value_type> ilist, F f)
569
667
  {
@@ -633,6 +731,24 @@ namespace boost {
633
731
  return count_elements;
634
732
  }
635
733
 
734
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
735
+ template<
736
+ detail::container_compatible_range<value_type> R, class F1, class F2
737
+ >
738
+ size_type insert_range_and_visit(R&& rg, F1 f1, F2 f2)
739
+ {
740
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F1)
741
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F2)
742
+ size_type count_elements = 0;
743
+ auto first = std::ranges::begin(rg);
744
+ auto last = std::ranges::end(rg);
745
+ for (; first != last; ++first, ++count_elements) {
746
+ table_.emplace_and_visit(*first, f1, f2);
747
+ }
748
+ return count_elements;
749
+ }
750
+ #endif
751
+
636
752
  template <class F1, class F2>
637
753
  size_type insert_and_visit(
638
754
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -706,6 +822,24 @@ namespace boost {
706
822
  return count_elements;
707
823
  }
708
824
 
825
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
826
+ template<
827
+ detail::container_compatible_range<value_type> R, class F1, class F2
828
+ >
829
+ size_type insert_range_and_cvisit(R&& rg, F1 f1, F2 f2)
830
+ {
831
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F1)
832
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F2)
833
+ size_type count_elements = 0;
834
+ auto first = std::ranges::begin(rg);
835
+ auto last = std::ranges::end(rg);
836
+ for (; first != last; ++first, ++count_elements) {
837
+ table_.emplace_and_cvisit(*first, f1, f2);
838
+ }
839
+ return count_elements;
840
+ }
841
+ #endif
842
+
709
843
  template <class F1, class F2>
710
844
  size_type insert_and_cvisit(
711
845
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -1000,6 +1134,26 @@ namespace boost {
1000
1134
  typename std::iterator_traits<InputIterator>::value_type, Hash, Pred,
1001
1135
  Allocator>;
1002
1136
 
1137
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1138
+ template <
1139
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1140
+ std::ranges::input_range R,
1141
+ class Hash =
1142
+ boost::hash<std::ranges::range_value_t<R> >,
1143
+ class Pred =
1144
+ std::equal_to<std::ranges::range_value_t<R> >,
1145
+ class Allocator = std::allocator<std::ranges::range_value_t<R> >,
1146
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1147
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
1148
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1149
+ concurrent_node_set(FromRangeT&&, R&&,
1150
+ std::size_t = boost::unordered::detail::foa::default_bucket_count,
1151
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1152
+ -> concurrent_node_set<std::ranges::range_value_t<R>,
1153
+ Hash, Pred, Allocator>;
1154
+ #endif
1155
+
1156
+
1003
1157
  template <class T, class Hash = boost::hash<T>,
1004
1158
  class Pred = std::equal_to<T>, class Allocator = std::allocator<T>,
1005
1159
  class = std::enable_if_t<detail::is_hash_v<Hash> >,
@@ -1041,6 +1195,39 @@ namespace boost {
1041
1195
  std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
1042
1196
  Allocator>;
1043
1197
 
1198
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1199
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1200
+ std::ranges::input_range R,
1201
+ class Allocator,
1202
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1203
+ concurrent_node_set(FromRangeT&&, R&&, std::size_t, Allocator)
1204
+ -> concurrent_node_set<std::ranges::range_value_t<R>,
1205
+ boost::hash<std::ranges::range_value_t<R> >,
1206
+ std::equal_to<std::ranges::range_value_t<R> >,
1207
+ Allocator>;
1208
+
1209
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1210
+ std::ranges::input_range R,
1211
+ class Hash, class Allocator,
1212
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1213
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1214
+ concurrent_node_set(
1215
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
1216
+ -> concurrent_node_set<std::ranges::range_value_t<R>,
1217
+ Hash, std::equal_to<std::ranges::range_value_t<R> >,
1218
+ Allocator>;
1219
+
1220
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1221
+ std::ranges::input_range R,
1222
+ class Allocator,
1223
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1224
+ concurrent_node_set(FromRangeT&&, R&&, Allocator)
1225
+ -> concurrent_node_set<std::ranges::range_value_t<R>,
1226
+ boost::hash<std::ranges::range_value_t<R> >,
1227
+ std::equal_to<std::ranges::range_value_t<R> >,
1228
+ Allocator>;
1229
+ #endif
1230
+
1044
1231
  template <class T, class Allocator,
1045
1232
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1046
1233
  concurrent_node_set(std::initializer_list<T>, std::size_t, Allocator)
@@ -1,6 +1,6 @@
1
1
  /* Fast open-addressing concurrent hash table.
2
2
  *
3
- * Copyright 2023-2024 Joaquin M Lopez Munoz.
3
+ * Copyright 2023-2026 Joaquin M Lopez Munoz.
4
4
  * Copyright 2024 Braden Ganetsky.
5
5
  * Distributed under the Boost Software License, Version 1.0.
6
6
  * (See accompanying file LICENSE_1_0.txt or copy at
@@ -697,9 +697,9 @@ public:
697
697
  }
698
698
 
699
699
  /* Optimizations for maps for (k,v) to avoid eagerly constructing value */
700
- template <typename K, typename V>
700
+ template <typename K, typename V, typename Table = concurrent_table>
701
701
  BOOST_FORCEINLINE auto emplace(K&& k, V&& v) ->
702
- typename std::enable_if<is_emplace_kv_able<concurrent_table, K>::value,
702
+ typename std::enable_if<is_emplace_kv_able<Table, K>::value,
703
703
  bool>::type
704
704
  {
705
705
  alloc_cted_or_fwded_key_type<type_policy, Allocator, K&&> x(
@@ -1,6 +1,6 @@
1
1
  /* Common base for Boost.Unordered open-addressing tables.
2
2
  *
3
- * Copyright 2022-2025 Joaquin M Lopez Munoz.
3
+ * Copyright 2022-2026 Joaquin M Lopez Munoz.
4
4
  * Copyright 2023 Christian Mazakas.
5
5
  * Copyright 2024 Braden Ganetsky.
6
6
  * Distributed under the Boost Software License, Version 1.0.
@@ -1349,7 +1349,7 @@ template <typename Container, typename K>
1349
1349
  using is_emplace_kv_able = std::integral_constant<bool,
1350
1350
  is_map<Container>::value &&
1351
1351
  (is_similar<K, typename Container::key_type>::value ||
1352
- is_complete_and_move_constructible<typename Container::key_type>::value)>;
1352
+ std::is_move_constructible<typename Container::key_type>::value)>;
1353
1353
 
1354
1354
  /* table_core. The TypePolicy template parameter is used to generate
1355
1355
  * instantiations suitable for either maps or sets, and introduces non-standard
@@ -1,6 +1,6 @@
1
1
  /* Fast open-addressing hash table.
2
2
  *
3
- * Copyright 2022-2025 Joaquin M Lopez Munoz.
3
+ * Copyright 2022-2026 Joaquin M Lopez Munoz.
4
4
  * Copyright 2023 Christian Mazakas.
5
5
  * Copyright 2024 Braden Ganetsky.
6
6
  * Distributed under the Boost Software License, Version 1.0.
@@ -422,9 +422,9 @@ public:
422
422
  }
423
423
 
424
424
  /* Optimizations for maps for (k,v) to avoid eagerly constructing value */
425
- template <typename K, typename V>
425
+ template <typename K, typename V, typename Table = table>
426
426
  BOOST_FORCEINLINE
427
- typename std::enable_if<is_emplace_kv_able<table, K>::value,
427
+ typename std::enable_if<is_emplace_kv_able<Table, K>::value,
428
428
  std::pair<iterator, bool> >::type
429
429
  emplace(K&& k, V&& v)
430
430
  {
@@ -1,6 +1,6 @@
1
1
  // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
2
2
  // Copyright (C) 2005-2016 Daniel James
3
- // Copyright (C) 2022-2024 Joaquin M Lopez Munoz.
3
+ // Copyright (C) 2022-2026 Joaquin M Lopez Munoz.
4
4
  // Copyright (C) 2022-2023 Christian Mazakas
5
5
  // Copyright (C) 2024 Braden Ganetsky
6
6
  //
@@ -18,12 +18,14 @@
18
18
  #include <boost/unordered/detail/allocator_constructed.hpp>
19
19
  #include <boost/unordered/detail/fca.hpp>
20
20
  #include <boost/unordered/detail/opt_storage.hpp>
21
+ #include <boost/unordered/detail/ranges_support.hpp>
21
22
  #include <boost/unordered/detail/serialize_tracked_address.hpp>
22
23
  #include <boost/unordered/detail/static_assert.hpp>
23
24
  #include <boost/unordered/detail/type_traits.hpp>
24
25
  #include <boost/unordered/detail/unordered_printers.hpp>
25
26
 
26
27
  #include <boost/assert.hpp>
28
+ #include <boost/config/workaround.hpp>
27
29
  #include <boost/core/allocator_traits.hpp>
28
30
  #include <boost/core/bit.hpp>
29
31
  #include <boost/core/invoke_swap.hpp>
@@ -174,6 +176,29 @@ namespace boost {
174
176
  boost::unordered::detail::insert_size(i, j), num_buckets);
175
177
  }
176
178
 
179
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
180
+ template<std::ranges::input_range R>
181
+ inline std::size_t insert_size(R&& rg)
182
+ {
183
+ if constexpr (std::ranges::sized_range<R>)
184
+ return std::ranges::size(std::forward<R>(rg));
185
+ else if constexpr (std::ranges::forward_range<R>)
186
+ return std::ranges::distance(std::forward<R>(rg));
187
+ else
188
+ return 1;
189
+ }
190
+
191
+ template <std::ranges::input_range R>
192
+ inline std::size_t initial_size(R&& rg,
193
+ std::size_t num_buckets =
194
+ boost::unordered::detail::default_bucket_count)
195
+ {
196
+ return (std::max)(
197
+ boost::unordered::detail::insert_size(std::forward<R>(rg)),
198
+ num_buckets);
199
+ }
200
+ #endif
201
+
177
202
  //////////////////////////////////////////////////////////////////////////
178
203
  // compressed
179
204
 
@@ -954,10 +979,14 @@ namespace boost {
954
979
 
955
980
  inline std::size_t double_to_size(double f)
956
981
  {
957
- return f >= static_cast<double>(
958
- (std::numeric_limits<std::size_t>::max)())
959
- ? (std::numeric_limits<std::size_t>::max)()
960
- : static_cast<std::size_t>(f);
982
+ #if BOOST_WORKAROUND(BOOST_CLANG_VERSION, < 30900)
983
+ // https://github.com/boostorg/unordered/pull/354
984
+ volatile
985
+ #endif
986
+ const double double_size_t_max =
987
+ static_cast<double>((std::numeric_limits<std::size_t>::max)());
988
+ return f >= double_size_t_max?
989
+ (std::numeric_limits<std::size_t>::max)(): static_cast<std::size_t>(f);
961
990
  }
962
991
 
963
992
  //////////////////////////////////////////////////////////////////////////
@@ -1781,7 +1810,7 @@ namespace boost {
1781
1810
 
1782
1811
  static std::size_t min_buckets(std::size_t num_elements, float mlf)
1783
1812
  {
1784
- std::size_t num_buckets = static_cast<std::size_t>(
1813
+ std::size_t num_buckets = boost::unordered::detail::double_to_size(
1785
1814
  std::ceil(static_cast<float>(num_elements) / mlf));
1786
1815
 
1787
1816
  if (num_buckets == 0 && num_elements > 0) { // mlf == inf
@@ -2150,8 +2179,8 @@ namespace boost {
2150
2179
  // if hash function throws, or inserting > 1 element, basic exception
2151
2180
  // safety strong otherwise
2152
2181
 
2153
- template <class InputIt>
2154
- void insert_range_unique(no_key, InputIt i, InputIt j)
2182
+ template <class InputIt, class Sentinel>
2183
+ void insert_range_unique(no_key, InputIt i, Sentinel j)
2155
2184
  {
2156
2185
  hasher const& hf = this->hash_function();
2157
2186
  node_allocator_type alloc = this->node_alloc();
@@ -2538,14 +2567,20 @@ namespace boost {
2538
2567
 
2539
2568
  // if hash function throws, or inserting > 1 element, basic exception
2540
2569
  // safety. Strong otherwise
2541
- template <class I>
2570
+ template <class I, class S>
2542
2571
  typename boost::unordered::detail::enable_if_forward<I, void>::type
2543
- insert_range_equiv(I i, I j)
2572
+ insert_range_equiv(I i, S j)
2544
2573
  {
2545
2574
  if (i == j)
2546
2575
  return;
2547
2576
 
2577
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
2578
+ std::size_t distance = static_cast<std::size_t>(
2579
+ std::ranges::distance(i, j));
2580
+ #else
2548
2581
  std::size_t distance = static_cast<std::size_t>(std::distance(i, j));
2582
+ #endif
2583
+
2549
2584
  if (distance == 1) {
2550
2585
  emplace_equiv(boost::unordered::detail::func::construct_node(
2551
2586
  this->node_alloc(), *i));
@@ -2561,9 +2596,9 @@ namespace boost {
2561
2596
  }
2562
2597
  }
2563
2598
 
2564
- template <class I>
2599
+ template <class I, class S>
2565
2600
  typename boost::unordered::detail::disable_if_forward<I, void>::type
2566
- insert_range_equiv(I i, I j)
2601
+ insert_range_equiv(I i, S j)
2567
2602
  {
2568
2603
  for (; i != j; ++i) {
2569
2604
  emplace_equiv(boost::unordered::detail::func::construct_node(
@@ -2712,8 +2747,9 @@ namespace boost {
2712
2747
  inline void table<Types>::reserve_for_insert(std::size_t num_elements)
2713
2748
  {
2714
2749
  if (num_elements > max_load_) {
2715
- std::size_t const num_buckets = static_cast<std::size_t>(
2716
- 1.0f + std::ceil(static_cast<float>(num_elements) / mlf_));
2750
+ std::size_t const num_buckets = (std::max)(
2751
+ static_cast<std::size_t>(1.0f + std::ceil(static_cast<float>(num_elements) / mlf_)),
2752
+ static_cast<std::size_t>(bucket_count() + 1));
2717
2753
 
2718
2754
  this->rehash_impl(num_buckets);
2719
2755
  }
@@ -2851,10 +2887,10 @@ namespace boost {
2851
2887
  return no_key();
2852
2888
  }
2853
2889
 
2854
- template <class Arg1, class Arg2>
2890
+ template <class Arg1, class Arg2, class Key = key_type>
2855
2891
  static typename std::conditional<
2856
2892
  (is_similar<Arg1, key_type>::value ||
2857
- is_complete_and_move_constructible<key_type>::value),
2893
+ std::is_move_constructible<Key>::value),
2858
2894
  converting_key, no_key>::type
2859
2895
  extract(Arg1 const&, Arg2 const&)
2860
2896
  {
@@ -0,0 +1,104 @@
1
+ /* Copyright 2026 Joaquin M Lopez Munoz.
2
+ * Distributed under the Boost Software License, Version 1.0.
3
+ * (See accompanying file LICENSE_1_0.txt or copy at
4
+ * http://www.boost.org/LICENSE_1_0.txt)
5
+ *
6
+ * See https://www.boost.org/libs/unordered for library home page.
7
+ */
8
+
9
+ #ifndef BOOST_UNORDERED_DETAIL_RANGES_SUPPORT_HPP
10
+ #define BOOST_UNORDERED_DETAIL_RANGES_SUPPORT_HPP
11
+
12
+ #include <boost/config.hpp>
13
+ #include <boost/config/workaround.hpp>
14
+
15
+ #if defined(BOOST_NO_CXX20_HDR_CONCEPTS) || defined(BOOST_NO_CXX20_HDR_RANGES)
16
+ #define BOOST_UNORDERED_NO_RANGES
17
+ #elif BOOST_WORKAROUND(BOOST_CLANG_VERSION, < 170100) && \
18
+ defined(BOOST_LIBSTDCXX_VERSION)
19
+ /* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109647
20
+ * https://github.com/llvm/llvm-project/issues/49620
21
+ */
22
+ #define BOOST_UNORDERED_NO_RANGES
23
+ #endif
24
+
25
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
26
+ #include <concepts>
27
+ #include <functional>
28
+ #include <ranges>
29
+ #include <tuple>
30
+ #include <type_traits>
31
+ #include <utility>
32
+
33
+ namespace boost {
34
+ namespace unordered {
35
+
36
+ struct from_range_t { explicit from_range_t() = default; };
37
+ inline constexpr from_range_t from_range{};
38
+
39
+ namespace detail {
40
+
41
+ /* Existence of std::from_range_t is governed by feature macro
42
+ * __cpp_lib_containers_ranges, but at least one stdlib implementation
43
+ * (GCC 14.1) does not honor it, hence the workadound below: code picks
44
+ * std::from_range_t if it exists, boost::unordered::from_range_t otherwise.
45
+ * Technique explained at
46
+ https://bannalia.blogspot.com/2016/09/compile-time-checking-existence-of.html
47
+ */
48
+
49
+ struct from_range_t_hook{};
50
+
51
+ } /* namespace detail */
52
+ } /* namespace unordered */
53
+ } /* namespace boost */
54
+
55
+ namespace std {
56
+
57
+ template<> struct hash< ::boost::unordered::detail::from_range_t_hook>
58
+ {
59
+ using from_range_t_type = decltype([] {
60
+ using namespace ::boost::unordered;
61
+ return from_range_t{};
62
+ }());
63
+
64
+ /* make standard happy */
65
+ std::size_t operator()(
66
+ const ::boost::unordered::detail::from_range_t_hook&) const;
67
+ };
68
+
69
+ } /* namespace std */
70
+
71
+ namespace boost {
72
+ namespace unordered {
73
+ namespace detail {
74
+
75
+ template<typename T>
76
+ concept convertible_to_from_range_t =
77
+ std::is_convertible_v<T, boost::unordered::from_range_t> ||
78
+ std::is_convertible_v<T, std::hash<from_range_t_hook>::from_range_t_type>;
79
+
80
+ template<class R, class T>
81
+ concept container_compatible_range =
82
+ std::ranges::input_range<R> &&
83
+ std::convertible_to<std::ranges::range_reference_t<R>, T>;
84
+
85
+ template<std::ranges::input_range Range>
86
+ using range_key_t =
87
+ std::remove_cvref_t<
88
+ std::tuple_element_t<0, std::ranges::range_value_t<Range>>>;
89
+
90
+ template<std::ranges::input_range Range>
91
+ using range_mapped_t =
92
+ std::remove_cvref_t<
93
+ std::tuple_element_t<1, std::ranges::range_value_t<Range>>>;
94
+
95
+ template<std::ranges::input_range Range>
96
+ using range_to_alloc_t =
97
+ std::pair<const range_key_t<Range>, range_mapped_t<Range>>;
98
+
99
+ } /* namespace detail */
100
+ } /* namespace unordered */
101
+ } /* namespace boost */
102
+
103
+ #endif /* !defined(BOOST_UNORDERED_NO_RANGES) */
104
+ #endif
@@ -1,5 +1,6 @@
1
1
  // Copyright (C) 2022-2023 Christian Mazakas
2
2
  // Copyright (C) 2024 Braden Ganetsky
3
+ // Copyright (C) 2026 Joaquin M Lopez Munoz
3
4
  //
4
5
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
5
6
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -49,20 +50,6 @@ namespace boost {
49
50
 
50
51
  template <typename... Ts> using void_t = typename make_void<Ts...>::type;
51
52
 
52
- template <class T, class = void> struct is_complete : std::false_type
53
- {
54
- };
55
-
56
- template <class T>
57
- struct is_complete<T, void_t<int[sizeof(T)]> > : std::true_type
58
- {
59
- };
60
-
61
- template <class T>
62
- using is_complete_and_move_constructible =
63
- typename std::conditional<is_complete<T>::value,
64
- std::is_move_constructible<T>, std::false_type>::type;
65
-
66
53
  #if BOOST_WORKAROUND(BOOST_LIBSTDCXX_VERSION, < 50000)
67
54
  /* std::is_trivially_default_constructible not provided */
68
55
  template <class T>
@@ -1,8 +1,8 @@
1
- // Copyright 2024-2025 Braden Ganetsky
1
+ // Copyright 2024-2026 Braden Ganetsky
2
2
  // Distributed under the Boost Software License, Version 1.0.
3
3
  // https://www.boost.org/LICENSE_1_0.txt
4
4
 
5
- // Generated on 2025-08-21T03:09:19
5
+ // Generated on 2026-01-24T00:34:53
6
6
 
7
7
  #ifndef BOOST_UNORDERED_DETAIL_UNORDERED_PRINTERS_HPP
8
8
  #define BOOST_UNORDERED_DETAIL_UNORDERED_PRINTERS_HPP
@@ -29,8 +29,14 @@ __asm__(".pushsection \".debug_gdb_scripts\", \"MS\",%progbits,1\n"
29
29
  ".ascii \" return n\\n\"\n"
30
30
 
31
31
  ".ascii \" def maybe_unwrap_foa_element(e):\\n\"\n"
32
- ".ascii \" if f\\\"{e.type.strip_typedefs()}\\\".startswith(\\\"boost::unordered::detail::foa::element_type<\\\"):\\n\"\n"
33
- ".ascii \" return e[\\\"p\\\"]\\n\"\n"
32
+ ".ascii \" # Sometimes the complex typedefs can't be resolved through a pointer\\n\"\n"
33
+ ".ascii \" if e.type.strip_typedefs().code == gdb.TYPE_CODE_PTR:\\n\"\n"
34
+ ".ascii \" foa_element = e.dereference()\\n\"\n"
35
+ ".ascii \" else:\\n\"\n"
36
+ ".ascii \" foa_element = e\\n\"\n"
37
+
38
+ ".ascii \" if f\\\"{foa_element.type.strip_typedefs()}\\\".startswith(\\\"boost::unordered::detail::foa::element_type<\\\"):\\n\"\n"
39
+ ".ascii \" return foa_element[\\\"p\\\"]\\n\"\n"
34
40
  ".ascii \" else:\\n\"\n"
35
41
  ".ascii \" return e\\n\"\n"
36
42