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,7 @@
1
1
  // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
2
2
  // Copyright (C) 2005-2011 Daniel James.
3
3
  // Copyright (C) 2022-2023 Christian Mazakas
4
- // Copyright (C) 2024 Joaquin M Lopez Munoz.
4
+ // Copyright (C) 2024-2026 Joaquin M Lopez Munoz.
5
5
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
6
6
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
7
 
@@ -16,6 +16,7 @@
16
16
  #endif
17
17
 
18
18
  #include <boost/unordered/detail/map.hpp>
19
+ #include <boost/unordered/detail/ranges_support.hpp>
19
20
  #include <boost/unordered/detail/serialize_fca_container.hpp>
20
21
  #include <boost/unordered/detail/throw_exception.hpp>
21
22
  #include <boost/unordered/detail/type_traits.hpp>
@@ -92,6 +93,17 @@ namespace boost {
92
93
  const hasher& = hasher(), const key_equal& = key_equal(),
93
94
  const allocator_type& = allocator_type());
94
95
 
96
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
97
+ template <
98
+ detail::convertible_to_from_range_t FromRangeT,
99
+ detail::container_compatible_range<std::pair<const K, T> > R
100
+ >
101
+ unordered_map(FromRangeT&&, R&&,
102
+ size_type = boost::unordered::detail::default_bucket_count,
103
+ const hasher& = hasher(), const key_equal& = key_equal(),
104
+ const allocator_type& = allocator_type());
105
+ #endif
106
+
95
107
  unordered_map(unordered_map const&);
96
108
 
97
109
  unordered_map(unordered_map&& other)
@@ -126,6 +138,27 @@ namespace boost {
126
138
  unordered_map(
127
139
  InputIt, InputIt, size_type, const hasher&, const allocator_type&);
128
140
 
141
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
142
+ template <
143
+ detail::convertible_to_from_range_t FromRangeT,
144
+ detail::container_compatible_range<std::pair<const K, T> > R
145
+ >
146
+ unordered_map(FromRangeT&&, R&&, const allocator_type&);
147
+
148
+ template <
149
+ detail::convertible_to_from_range_t FromRangeT,
150
+ detail::container_compatible_range<std::pair<const K, T> > R
151
+ >
152
+ unordered_map(FromRangeT&&, R&&, size_type, const allocator_type&);
153
+
154
+ template <
155
+ detail::convertible_to_from_range_t FromRangeT,
156
+ detail::container_compatible_range<std::pair<const K, T> > R
157
+ >
158
+ unordered_map(
159
+ FromRangeT&&, R&&, size_type, const hasher&, const allocator_type&);
160
+ #endif
161
+
129
162
  unordered_map(std::initializer_list<value_type>, const allocator_type&);
130
163
 
131
164
  unordered_map(
@@ -248,6 +281,11 @@ namespace boost {
248
281
 
249
282
  template <class InputIt> void insert(InputIt, InputIt);
250
283
 
284
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
285
+ template <detail::container_compatible_range<std::pair<const K, T> > R>
286
+ void insert_range(R&&);
287
+ #endif
288
+
251
289
  void insert(std::initializer_list<value_type>);
252
290
 
253
291
  // extract
@@ -622,6 +660,27 @@ namespace boost {
622
660
  boost::unordered::detail::iter_val_t<InputIterator>, Hash, Pred,
623
661
  Allocator>;
624
662
 
663
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
664
+ template <
665
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
666
+ std::ranges::input_range R,
667
+ class Hash =
668
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
669
+ class Pred =
670
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
671
+ class Allocator = std::allocator<
672
+ boost::unordered::detail::range_to_alloc_t<R> >,
673
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
674
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
675
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
676
+ unordered_map(FromRangeT&&, R&&,
677
+ std::size_t = boost::unordered::detail::default_bucket_count,
678
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
679
+ -> unordered_map<boost::unordered::detail::range_key_t<R>,
680
+ boost::unordered::detail::range_mapped_t<R>, Hash, Pred,
681
+ Allocator>;
682
+ #endif
683
+
625
684
  template <class Key, class T,
626
685
  class Hash = boost::hash<std::remove_const_t<Key> >,
627
686
  class Pred = std::equal_to<std::remove_const_t<Key> >,
@@ -664,6 +723,42 @@ namespace boost {
664
723
  std::equal_to<boost::unordered::detail::iter_key_t<InputIterator> >,
665
724
  Allocator>;
666
725
 
726
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
727
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
728
+ std::ranges::input_range R,
729
+ class Allocator,
730
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
731
+ unordered_map(FromRangeT&&, R&&, std::size_t, Allocator)
732
+ -> unordered_map<boost::unordered::detail::range_key_t<R>,
733
+ boost::unordered::detail::range_mapped_t<R>,
734
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
735
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
736
+ Allocator>;
737
+
738
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
739
+ std::ranges::input_range R,
740
+ class Allocator,
741
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
742
+ unordered_map(FromRangeT&&, R&&, Allocator)
743
+ -> unordered_map<boost::unordered::detail::range_key_t<R>,
744
+ boost::unordered::detail::range_mapped_t<R>,
745
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
746
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
747
+ Allocator>;
748
+
749
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
750
+ std::ranges::input_range R,
751
+ class Hash, class Allocator,
752
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
753
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
754
+ unordered_map(
755
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
756
+ -> unordered_map<boost::unordered::detail::range_key_t<R>,
757
+ boost::unordered::detail::range_mapped_t<R>, Hash,
758
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
759
+ Allocator>;
760
+ #endif
761
+
667
762
  template <class Key, class T, class Allocator,
668
763
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
669
764
  unordered_map(std::initializer_list<std::pair<Key, T> >, std::size_t,
@@ -742,6 +837,17 @@ namespace boost {
742
837
  const hasher& = hasher(), const key_equal& = key_equal(),
743
838
  const allocator_type& = allocator_type());
744
839
 
840
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
841
+ template <
842
+ detail::convertible_to_from_range_t FromRangeT,
843
+ detail::container_compatible_range<std::pair<const K, T> > R
844
+ >
845
+ unordered_multimap(FromRangeT&&, R&&,
846
+ size_type = boost::unordered::detail::default_bucket_count,
847
+ const hasher& = hasher(), const key_equal& = key_equal(),
848
+ const allocator_type& = allocator_type());
849
+ #endif
850
+
745
851
  unordered_multimap(unordered_multimap const&);
746
852
 
747
853
  unordered_multimap(unordered_multimap&& other)
@@ -777,6 +883,27 @@ namespace boost {
777
883
  unordered_multimap(
778
884
  InputIt, InputIt, size_type, const hasher&, const allocator_type&);
779
885
 
886
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
887
+ template <
888
+ detail::convertible_to_from_range_t FromRangeT,
889
+ detail::container_compatible_range<std::pair<const K, T> > R
890
+ >
891
+ unordered_multimap(FromRangeT&&, R&&, const allocator_type&);
892
+
893
+ template <
894
+ detail::convertible_to_from_range_t FromRangeT,
895
+ detail::container_compatible_range<std::pair<const K, T> > R
896
+ >
897
+ unordered_multimap(FromRangeT&&, R&&, size_type, const allocator_type&);
898
+
899
+ template <
900
+ detail::convertible_to_from_range_t FromRangeT,
901
+ detail::container_compatible_range<std::pair<const K, T> > R
902
+ >
903
+ unordered_multimap(
904
+ FromRangeT&&, R&&, size_type, const hasher&, const allocator_type&);
905
+ #endif
906
+
780
907
  unordered_multimap(
781
908
  std::initializer_list<value_type>, const allocator_type&);
782
909
 
@@ -894,6 +1021,11 @@ namespace boost {
894
1021
 
895
1022
  template <class InputIt> void insert(InputIt, InputIt);
896
1023
 
1024
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1025
+ template <detail::container_compatible_range<std::pair<const K, T> > R>
1026
+ void insert_range(R&&);
1027
+ #endif
1028
+
897
1029
  void insert(std::initializer_list<value_type>);
898
1030
 
899
1031
  // extract
@@ -1141,6 +1273,26 @@ namespace boost {
1141
1273
  boost::unordered::detail::iter_val_t<InputIterator>, Hash, Pred,
1142
1274
  Allocator>;
1143
1275
 
1276
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1277
+ template <
1278
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1279
+ std::ranges::input_range R,
1280
+ class Hash =
1281
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1282
+ class Pred =
1283
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1284
+ class Allocator = std::allocator<
1285
+ boost::unordered::detail::range_to_alloc_t<R> >,
1286
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1287
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
1288
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1289
+ unordered_multimap(FromRangeT&&, R&&,
1290
+ std::size_t = boost::unordered::detail::default_bucket_count,
1291
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1292
+ -> unordered_multimap<boost::unordered::detail::range_key_t<R>,
1293
+ boost::unordered::detail::range_mapped_t<R>, Hash, Pred,
1294
+ Allocator>;
1295
+ #endif
1144
1296
  template <class Key, class T,
1145
1297
  class Hash = boost::hash<std::remove_const_t<Key> >,
1146
1298
  class Pred = std::equal_to<std::remove_const_t<Key> >,
@@ -1184,6 +1336,42 @@ namespace boost {
1184
1336
  std::equal_to<boost::unordered::detail::iter_key_t<InputIterator> >,
1185
1337
  Allocator>;
1186
1338
 
1339
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1340
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1341
+ std::ranges::input_range R,
1342
+ class Allocator,
1343
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1344
+ unordered_multimap(FromRangeT&&, R&&, std::size_t, Allocator)
1345
+ -> unordered_multimap<boost::unordered::detail::range_key_t<R>,
1346
+ boost::unordered::detail::range_mapped_t<R>,
1347
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1348
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1349
+ Allocator>;
1350
+
1351
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1352
+ std::ranges::input_range R,
1353
+ class Allocator,
1354
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1355
+ unordered_multimap(FromRangeT&&, R&&, Allocator)
1356
+ -> unordered_multimap<boost::unordered::detail::range_key_t<R>,
1357
+ boost::unordered::detail::range_mapped_t<R>,
1358
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1359
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1360
+ Allocator>;
1361
+
1362
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1363
+ std::ranges::input_range R,
1364
+ class Hash, class Allocator,
1365
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1366
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1367
+ unordered_multimap(
1368
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
1369
+ -> unordered_multimap<boost::unordered::detail::range_key_t<R>,
1370
+ boost::unordered::detail::range_mapped_t<R>, Hash,
1371
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1372
+ Allocator>;
1373
+ #endif
1374
+
1187
1375
  template <class Key, class T, class Allocator,
1188
1376
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1189
1377
  unordered_multimap(std::initializer_list<std::pair<Key, T> >, std::size_t,
@@ -1231,6 +1419,23 @@ namespace boost {
1231
1419
  this->insert(f, l);
1232
1420
  }
1233
1421
 
1422
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1423
+ template <class K, class T, class H, class P, class A>
1424
+ template <
1425
+ detail::convertible_to_from_range_t FromRangeT,
1426
+ detail::container_compatible_range<std::pair<const K, T> > R
1427
+ >
1428
+ unordered_map<K, T, H, P, A>::unordered_map(FromRangeT&&, R&& rg,
1429
+ size_type n, const hasher& hf, const key_equal& eql,
1430
+ const allocator_type& a)
1431
+ : table_(
1432
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
1433
+ hf, eql, a)
1434
+ {
1435
+ this->insert_range(std::forward<R>(rg));
1436
+ }
1437
+ #endif
1438
+
1234
1439
  template <class K, class T, class H, class P, class A>
1235
1440
  unordered_map<K, T, H, P, A>::unordered_map(unordered_map const& other)
1236
1441
  : table_(other.table_,
@@ -1303,6 +1508,7 @@ namespace boost {
1303
1508
  this->insert(f, l);
1304
1509
  }
1305
1510
 
1511
+
1306
1512
  template <class K, class T, class H, class P, class A>
1307
1513
  template <class InputIt>
1308
1514
  unordered_map<K, T, H, P, A>::unordered_map(
@@ -1323,6 +1529,51 @@ namespace boost {
1323
1529
  this->insert(f, l);
1324
1530
  }
1325
1531
 
1532
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1533
+ template <class K, class T, class H, class P, class A>
1534
+ template <
1535
+ detail::convertible_to_from_range_t FromRangeT,
1536
+ detail::container_compatible_range<std::pair<const K, T> > R
1537
+ >
1538
+ unordered_map<K, T, H, P, A>::unordered_map(
1539
+ FromRangeT&&, R&& rg, const allocator_type& a)
1540
+ : table_(
1541
+ boost::unordered::detail::initial_size(
1542
+ std::forward<R>(rg), detail::default_bucket_count),
1543
+ hasher(), key_equal(), a)
1544
+ {
1545
+ this->insert_range(std::forward<R>(rg));
1546
+ }
1547
+
1548
+ template <class K, class T, class H, class P, class A>
1549
+ template <
1550
+ detail::convertible_to_from_range_t FromRangeT,
1551
+ detail::container_compatible_range<std::pair<const K, T> > R
1552
+ >
1553
+ unordered_map<K, T, H, P, A>::unordered_map(
1554
+ FromRangeT&&, R&& rg, size_type n, const allocator_type& a)
1555
+ : table_(
1556
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
1557
+ hasher(), key_equal(), a)
1558
+ {
1559
+ this->insert_range(std::forward<R>(rg));
1560
+ }
1561
+
1562
+ template <class K, class T, class H, class P, class A>
1563
+ template <
1564
+ detail::convertible_to_from_range_t FromRangeT,
1565
+ detail::container_compatible_range<std::pair<const K, T> > R
1566
+ >
1567
+ unordered_map<K, T, H, P, A>::unordered_map(FromRangeT&&, R&& rg,
1568
+ size_type n, const hasher& hf, const allocator_type& a)
1569
+ : table_(
1570
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
1571
+ hf, key_equal(), a)
1572
+ {
1573
+ this->insert_range(std::forward<R>(rg));
1574
+ }
1575
+ #endif
1576
+
1326
1577
  template <class K, class T, class H, class P, class A>
1327
1578
  unordered_map<K, T, H, P, A>::unordered_map(
1328
1579
  std::initializer_list<value_type> list, const allocator_type& a)
@@ -1395,6 +1646,20 @@ namespace boost {
1395
1646
  }
1396
1647
  }
1397
1648
 
1649
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1650
+ template <class K, class T, class H, class P, class A>
1651
+ template <detail::container_compatible_range<std::pair<const K, T> > R>
1652
+ void unordered_map<K, T, H, P, A>::insert_range(R&& rg)
1653
+ {
1654
+ auto first = std::ranges::begin(rg);
1655
+ auto last = std::ranges::end(rg);
1656
+ if (first != last) {
1657
+ table_.insert_range_unique(
1658
+ table::extractor::extract(*first), first, last);
1659
+ }
1660
+ }
1661
+ #endif
1662
+
1398
1663
  template <class K, class T, class H, class P, class A>
1399
1664
  void unordered_map<K, T, H, P, A>::insert(
1400
1665
  std::initializer_list<value_type> list)
@@ -1757,6 +2022,23 @@ namespace boost {
1757
2022
  this->insert(f, l);
1758
2023
  }
1759
2024
 
2025
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
2026
+ template <class K, class T, class H, class P, class A>
2027
+ template <
2028
+ detail::convertible_to_from_range_t FromRangeT,
2029
+ detail::container_compatible_range<std::pair<const K, T> > R
2030
+ >
2031
+ unordered_multimap<K, T, H, P, A>::unordered_multimap(FromRangeT&&, R&& rg,
2032
+ size_type n, const hasher& hf, const key_equal& eql,
2033
+ const allocator_type& a)
2034
+ : table_(
2035
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
2036
+ hf, eql, a)
2037
+ {
2038
+ this->insert_range(std::forward<R>(rg));
2039
+ }
2040
+ #endif
2041
+
1760
2042
  template <class K, class T, class H, class P, class A>
1761
2043
  unordered_multimap<K, T, H, P, A>::unordered_multimap(
1762
2044
  unordered_multimap const& other)
@@ -1851,6 +2133,51 @@ namespace boost {
1851
2133
  this->insert(f, l);
1852
2134
  }
1853
2135
 
2136
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
2137
+ template <class K, class T, class H, class P, class A>
2138
+ template <
2139
+ detail::convertible_to_from_range_t FromRangeT,
2140
+ detail::container_compatible_range<std::pair<const K, T> > R
2141
+ >
2142
+ unordered_multimap<K, T, H, P, A>::unordered_multimap(
2143
+ FromRangeT&&, R&& rg, const allocator_type& a)
2144
+ : table_(
2145
+ boost::unordered::detail::initial_size(
2146
+ std::forward<R>(rg), detail::default_bucket_count),
2147
+ hasher(), key_equal(), a)
2148
+ {
2149
+ this->insert_range(std::forward<R>(rg));
2150
+ }
2151
+
2152
+ template <class K, class T, class H, class P, class A>
2153
+ template <
2154
+ detail::convertible_to_from_range_t FromRangeT,
2155
+ detail::container_compatible_range<std::pair<const K, T> > R
2156
+ >
2157
+ unordered_multimap<K, T, H, P, A>::unordered_multimap(
2158
+ FromRangeT&&, R&& rg, size_type n, const allocator_type& a)
2159
+ : table_(
2160
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
2161
+ hasher(), key_equal(), a)
2162
+ {
2163
+ this->insert_range(std::forward<R>(rg));
2164
+ }
2165
+
2166
+ template <class K, class T, class H, class P, class A>
2167
+ template <
2168
+ detail::convertible_to_from_range_t FromRangeT,
2169
+ detail::container_compatible_range<std::pair<const K, T> > R
2170
+ >
2171
+ unordered_multimap<K, T, H, P, A>::unordered_multimap(FromRangeT&&, R&& rg,
2172
+ size_type n, const hasher& hf, const allocator_type& a)
2173
+ : table_(
2174
+ boost::unordered::detail::initial_size(std::forward<R>(rg), n),
2175
+ hf, key_equal(), a)
2176
+ {
2177
+ this->insert_range(std::forward<R>(rg));
2178
+ }
2179
+ #endif
2180
+
1854
2181
  template <class K, class T, class H, class P, class A>
1855
2182
  unordered_multimap<K, T, H, P, A>::unordered_multimap(
1856
2183
  std::initializer_list<value_type> list, const allocator_type& a)
@@ -1921,6 +2248,16 @@ namespace boost {
1921
2248
  table_.insert_range_equiv(first, last);
1922
2249
  }
1923
2250
 
2251
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
2252
+ template <class K, class T, class H, class P, class A>
2253
+ template <detail::container_compatible_range<std::pair<const K, T> > R>
2254
+ void unordered_multimap<K, T, H, P, A>::insert_range(R&& rg)
2255
+ {
2256
+ table_.insert_range_equiv(std::ranges::begin(rg), std::ranges::end(rg));
2257
+ }
2258
+ #endif
2259
+
2260
+
1924
2261
  template <class K, class T, class H, class P, class A>
1925
2262
  void unordered_multimap<K, T, H, P, A>::insert(
1926
2263
  std::initializer_list<value_type> list)
@@ -1,5 +1,6 @@
1
1
  // Copyright (C) 2022-2023 Christian Mazakas
2
- // Copyright (C) 2024-2025 Joaquin M Lopez Munoz
2
+ // Copyright (C) 2024-2026 Joaquin M Lopez Munoz
3
+ // Copyright (C) 2026 Braden Ganetsky
3
4
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
4
5
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6
 
@@ -15,6 +16,7 @@
15
16
  #include <boost/unordered/detail/foa/node_map_handle.hpp>
16
17
  #include <boost/unordered/detail/foa/node_map_types.hpp>
17
18
  #include <boost/unordered/detail/foa/table.hpp>
19
+ #include <boost/unordered/detail/ranges_support.hpp>
18
20
  #include <boost/unordered/detail/serialize_container.hpp>
19
21
  #include <boost/unordered/detail/throw_exception.hpp>
20
22
  #include <boost/unordered/detail/type_traits.hpp>
@@ -114,6 +116,19 @@ namespace boost {
114
116
  {
115
117
  }
116
118
 
119
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
120
+ template<
121
+ detail::convertible_to_from_range_t FromRangeT,
122
+ detail::container_compatible_range<value_type> R
123
+ >
124
+ unordered_node_map(
125
+ FromRangeT&& fr, R&& rg, allocator_type const& a)
126
+ : unordered_node_map(
127
+ fr, std::forward<R>(rg), size_type(0), hasher(), key_equal(), a)
128
+ {
129
+ }
130
+ #endif
131
+
117
132
  explicit unordered_node_map(allocator_type const& a)
118
133
  : unordered_node_map(0, a)
119
134
  {
@@ -142,6 +157,41 @@ namespace boost {
142
157
  {
143
158
  }
144
159
 
160
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
161
+ template<
162
+ detail::convertible_to_from_range_t FromRangeT,
163
+ detail::container_compatible_range<value_type> R
164
+ >
165
+ unordered_node_map(FromRangeT&&, R&& rg, size_type n = 0,
166
+ hasher const& h = hasher(), key_equal const& pred = key_equal(),
167
+ allocator_type const& a = allocator_type())
168
+ : unordered_node_map(n, h, pred, a)
169
+ {
170
+ this->insert_range(std::forward<R>(rg));
171
+ }
172
+
173
+ template<
174
+ detail::convertible_to_from_range_t FromRangeT,
175
+ detail::container_compatible_range<value_type> R
176
+ >
177
+ unordered_node_map(
178
+ FromRangeT&& fr, R&& rg, size_type n, allocator_type const& a)
179
+ : unordered_node_map(
180
+ fr, std::forward<R>(rg), n, hasher(), key_equal(), a)
181
+ {
182
+ }
183
+
184
+ template<
185
+ detail::convertible_to_from_range_t FromRangeT,
186
+ detail::container_compatible_range<value_type> R
187
+ >
188
+ unordered_node_map(FromRangeT&& fr, R&& rg, size_type n,
189
+ hasher const& h, allocator_type const& a)
190
+ : unordered_node_map(fr, std::forward<R>(rg), n, h, key_equal(), a)
191
+ {
192
+ }
193
+ #endif
194
+
145
195
  unordered_node_map(unordered_node_map const& other) : table_(other.table_)
146
196
  {
147
197
  }
@@ -189,9 +239,10 @@ namespace boost {
189
239
  {
190
240
  }
191
241
 
192
- template <bool avoid_explicit_instantiation = true>
242
+ template <typename Key2,
243
+ typename std::enable_if<std::is_same<Key, Key2>::value, int>::type = 0>
193
244
  unordered_node_map(
194
- concurrent_node_map<Key, T, Hash, KeyEqual, Allocator>&& other)
245
+ concurrent_node_map<Key2, T, Hash, KeyEqual, Allocator>&& other)
195
246
  : table_(std::move(other.table_))
196
247
  {
197
248
  }
@@ -283,6 +334,16 @@ namespace boost {
283
334
  }
284
335
  }
285
336
 
337
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
338
+ template<detail::container_compatible_range<value_type> R>
339
+ BOOST_FORCEINLINE void insert_range(R&& rg)
340
+ {
341
+ auto first = std::ranges::begin(rg);
342
+ auto last = std::ranges::end(rg);
343
+ while (first != last) table_.emplace(*first++);
344
+ }
345
+ #endif
346
+
286
347
  void insert(std::initializer_list<value_type> ilist)
287
348
  {
288
349
  this->insert(ilist.begin(), ilist.end());
@@ -828,6 +889,27 @@ namespace boost {
828
889
  boost::unordered::detail::iter_val_t<InputIterator>, Hash, Pred,
829
890
  Allocator>;
830
891
 
892
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
893
+ template <
894
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
895
+ std::ranges::input_range R,
896
+ class Hash =
897
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
898
+ class Pred =
899
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
900
+ class Allocator = std::allocator<
901
+ boost::unordered::detail::range_to_alloc_t<R> >,
902
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
903
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
904
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
905
+ unordered_node_map(FromRangeT&&, R&&,
906
+ std::size_t = boost::unordered::detail::foa::default_bucket_count,
907
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
908
+ -> unordered_node_map<boost::unordered::detail::range_key_t<R>,
909
+ boost::unordered::detail::range_mapped_t<R>, Hash, Pred,
910
+ Allocator>;
911
+ #endif
912
+
831
913
  template <class Key, class T,
832
914
  class Hash = boost::hash<std::remove_const_t<Key> >,
833
915
  class Pred = std::equal_to<std::remove_const_t<Key> >,
@@ -872,6 +954,42 @@ namespace boost {
872
954
  std::equal_to<boost::unordered::detail::iter_key_t<InputIterator> >,
873
955
  Allocator>;
874
956
 
957
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
958
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
959
+ std::ranges::input_range R,
960
+ class Allocator,
961
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
962
+ unordered_node_map(FromRangeT&&, R&&, std::size_t, Allocator)
963
+ -> unordered_node_map<boost::unordered::detail::range_key_t<R>,
964
+ boost::unordered::detail::range_mapped_t<R>,
965
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
966
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
967
+ Allocator>;
968
+
969
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
970
+ std::ranges::input_range R,
971
+ class Allocator,
972
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
973
+ unordered_node_map(FromRangeT&&, R&&, Allocator)
974
+ -> unordered_node_map<boost::unordered::detail::range_key_t<R>,
975
+ boost::unordered::detail::range_mapped_t<R>,
976
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
977
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
978
+ Allocator>;
979
+
980
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
981
+ std::ranges::input_range R,
982
+ class Hash, class Allocator,
983
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
984
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
985
+ unordered_node_map(
986
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
987
+ -> unordered_node_map<boost::unordered::detail::range_key_t<R>,
988
+ boost::unordered::detail::range_mapped_t<R>, Hash,
989
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
990
+ Allocator>;
991
+ #endif
992
+
875
993
  template <class Key, class T, class Allocator,
876
994
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
877
995
  unordered_node_map(std::initializer_list<std::pair<Key, T> >, std::size_t,