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 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)
@@ -16,6 +17,7 @@
16
17
  #include <boost/unordered/detail/concurrent_static_asserts.hpp>
17
18
  #include <boost/unordered/detail/foa/concurrent_table.hpp>
18
19
  #include <boost/unordered/detail/foa/flat_set_types.hpp>
20
+ #include <boost/unordered/detail/ranges_support.hpp>
19
21
  #include <boost/unordered/detail/type_traits.hpp>
20
22
  #include <boost/unordered/unordered_flat_set_fwd.hpp>
21
23
 
@@ -98,6 +100,21 @@ namespace boost {
98
100
  this->insert(f, l);
99
101
  }
100
102
 
103
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
104
+ template<
105
+ detail::convertible_to_from_range_t FromRangeT,
106
+ detail::container_compatible_range<value_type> R
107
+ >
108
+ concurrent_flat_set(FromRangeT&&, R&& rg,
109
+ size_type n = detail::foa::default_bucket_count,
110
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
111
+ const allocator_type& a = allocator_type())
112
+ : table_(n, hf, eql, a)
113
+ {
114
+ this->insert_range(std::forward<R>(rg));
115
+ }
116
+ #endif
117
+
101
118
  concurrent_flat_set(concurrent_flat_set const& rhs)
102
119
  : table_(rhs.table_,
103
120
  boost::allocator_select_on_container_copy_construction(
@@ -117,6 +134,19 @@ namespace boost {
117
134
  {
118
135
  }
119
136
 
137
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
138
+ template<
139
+ detail::convertible_to_from_range_t FromRangeT,
140
+ detail::container_compatible_range<value_type> R
141
+ >
142
+ concurrent_flat_set(
143
+ FromRangeT&& fr, R&& rg, allocator_type const& a)
144
+ : concurrent_flat_set(
145
+ fr, std::forward<R>(rg), 0, hasher(), key_equal(), a)
146
+ {
147
+ }
148
+ #endif
149
+
120
150
  explicit concurrent_flat_set(allocator_type const& a)
121
151
  : table_(detail::foa::default_bucket_count, hasher(), key_equal(), a)
122
152
  {
@@ -167,6 +197,29 @@ namespace boost {
167
197
  {
168
198
  }
169
199
 
200
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
201
+ template<
202
+ detail::convertible_to_from_range_t FromRangeT,
203
+ detail::container_compatible_range<value_type> R
204
+ >
205
+ concurrent_flat_set(
206
+ FromRangeT&& fr, R&& rg, size_type n, const allocator_type& a)
207
+ : concurrent_flat_set(
208
+ fr, std::forward<R>(rg), n, hasher(), key_equal(), a)
209
+ {
210
+ }
211
+
212
+ template<
213
+ detail::convertible_to_from_range_t FromRangeT,
214
+ detail::container_compatible_range<value_type> R
215
+ >
216
+ concurrent_flat_set(FromRangeT&& fr, R&& rg, size_type n,
217
+ const hasher& hf, const allocator_type& a)
218
+ : concurrent_flat_set(fr, std::forward<R>(rg), n, hf, key_equal(), a)
219
+ {
220
+ }
221
+ #endif
222
+
170
223
  concurrent_flat_set(
171
224
  std::initializer_list<value_type> il, const allocator_type& a)
172
225
  : concurrent_flat_set(
@@ -186,10 +239,10 @@ namespace boost {
186
239
  {
187
240
  }
188
241
 
189
-
190
- template <bool avoid_explicit_instantiation = true>
242
+ template <typename Key2,
243
+ typename std::enable_if<std::is_same<Key, Key2>::value, int>::type = 0>
191
244
  concurrent_flat_set(
192
- unordered_flat_set<Key, Hash, Pred, Allocator>&& other)
245
+ unordered_flat_set<Key2, Hash, Pred, Allocator>&& other)
193
246
  : table_(std::move(other.table_))
194
247
  {
195
248
  }
@@ -429,11 +482,25 @@ namespace boost {
429
482
  size_type insert(InputIterator begin, InputIterator end)
430
483
  {
431
484
  size_type count_elements = 0;
432
- for (auto pos = begin; pos != end; ++pos, ++count_elements) {
433
- table_.emplace(*pos);
485
+ for (auto pos = begin; pos != end; ++pos) {
486
+ if (table_.emplace(*pos)) ++count_elements;
487
+ }
488
+ return count_elements;
489
+ }
490
+
491
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
492
+ template<detail::container_compatible_range<value_type> R>
493
+ size_type insert_range(R&& rg)
494
+ {
495
+ size_type count_elements = 0;
496
+ auto first = std::ranges::begin(rg);
497
+ auto last = std::ranges::end(rg);
498
+ while (first != last) {
499
+ if (table_.emplace(*first++)) ++count_elements;
434
500
  }
435
501
  return count_elements;
436
502
  }
503
+ #endif
437
504
 
438
505
  size_type insert(std::initializer_list<value_type> ilist)
439
506
  {
@@ -475,6 +542,21 @@ namespace boost {
475
542
  return count_elements;
476
543
  }
477
544
 
545
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
546
+ template<detail::container_compatible_range<value_type> R, class F>
547
+ size_type insert_range_or_visit(R&& rg, F f)
548
+ {
549
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
550
+ size_type count_elements = 0;
551
+ auto first = std::ranges::begin(rg);
552
+ auto last = std::ranges::end(rg);
553
+ for (; first != last; ++first, ++count_elements) {
554
+ table_.emplace_or_visit(*first, f);
555
+ }
556
+ return count_elements;
557
+ }
558
+ #endif
559
+
478
560
  template <class F>
479
561
  size_type insert_or_visit(std::initializer_list<value_type> ilist, F f)
480
562
  {
@@ -517,6 +599,21 @@ namespace boost {
517
599
  return count_elements;
518
600
  }
519
601
 
602
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
603
+ template<detail::container_compatible_range<value_type> R, class F>
604
+ size_type insert_range_or_cvisit(R&& rg, F f)
605
+ {
606
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
607
+ size_type count_elements = 0;
608
+ auto first = std::ranges::begin(rg);
609
+ auto last = std::ranges::end(rg);
610
+ for (; first != last; ++first, ++count_elements) {
611
+ table_.emplace_or_cvisit(*first, f);
612
+ }
613
+ return count_elements;
614
+ }
615
+ #endif
616
+
520
617
  template <class F>
521
618
  size_type insert_or_cvisit(std::initializer_list<value_type> ilist, F f)
522
619
  {
@@ -565,6 +662,24 @@ namespace boost {
565
662
  return count_elements;
566
663
  }
567
664
 
665
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
666
+ template<
667
+ detail::container_compatible_range<value_type> R, class F1, class F2
668
+ >
669
+ size_type insert_range_and_visit(R&& rg, F1 f1, F2 f2)
670
+ {
671
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F1)
672
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F2)
673
+ size_type count_elements = 0;
674
+ auto first = std::ranges::begin(rg);
675
+ auto last = std::ranges::end(rg);
676
+ for (; first != last; ++first, ++count_elements) {
677
+ table_.emplace_and_visit(*first, f1, f2);
678
+ }
679
+ return count_elements;
680
+ }
681
+ #endif
682
+
568
683
  template <class F1, class F2>
569
684
  size_type insert_and_visit(std::initializer_list<value_type> ilist, F1 f1, F2 f2)
570
685
  {
@@ -615,6 +730,24 @@ namespace boost {
615
730
  return count_elements;
616
731
  }
617
732
 
733
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
734
+ template<
735
+ detail::container_compatible_range<value_type> R, class F1, class F2
736
+ >
737
+ size_type insert_range_and_cvisit(R&& rg, F1 f1, F2 f2)
738
+ {
739
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F1)
740
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F2)
741
+ size_type count_elements = 0;
742
+ auto first = std::ranges::begin(rg);
743
+ auto last = std::ranges::end(rg);
744
+ for (; first != last; ++first, ++count_elements) {
745
+ table_.emplace_and_cvisit(*first, f1, f2);
746
+ }
747
+ return count_elements;
748
+ }
749
+ #endif
750
+
618
751
  template <class F1, class F2>
619
752
  size_type insert_and_cvisit(
620
753
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -852,6 +985,25 @@ namespace boost {
852
985
  typename std::iterator_traits<InputIterator>::value_type, Hash, Pred,
853
986
  Allocator>;
854
987
 
988
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
989
+ template <
990
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
991
+ std::ranges::input_range R,
992
+ class Hash =
993
+ boost::hash<std::ranges::range_value_t<R> >,
994
+ class Pred =
995
+ std::equal_to<std::ranges::range_value_t<R> >,
996
+ class Allocator = std::allocator<std::ranges::range_value_t<R> >,
997
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
998
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
999
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1000
+ concurrent_flat_set(FromRangeT&&, R&&,
1001
+ std::size_t = boost::unordered::detail::foa::default_bucket_count,
1002
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1003
+ -> concurrent_flat_set<std::ranges::range_value_t<R>,
1004
+ Hash, Pred, Allocator>;
1005
+ #endif
1006
+
855
1007
  template <class T, class Hash = boost::hash<T>,
856
1008
  class Pred = std::equal_to<T>, class Allocator = std::allocator<T>,
857
1009
  class = std::enable_if_t<detail::is_hash_v<Hash> >,
@@ -893,6 +1045,39 @@ namespace boost {
893
1045
  std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
894
1046
  Allocator>;
895
1047
 
1048
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1049
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1050
+ std::ranges::input_range R,
1051
+ class Allocator,
1052
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1053
+ concurrent_flat_set(FromRangeT&&, R&&, std::size_t, Allocator)
1054
+ -> concurrent_flat_set<std::ranges::range_value_t<R>,
1055
+ boost::hash<std::ranges::range_value_t<R> >,
1056
+ std::equal_to<std::ranges::range_value_t<R> >,
1057
+ Allocator>;
1058
+
1059
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1060
+ std::ranges::input_range R,
1061
+ class Hash, class Allocator,
1062
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1063
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1064
+ concurrent_flat_set(
1065
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
1066
+ -> concurrent_flat_set<std::ranges::range_value_t<R>,
1067
+ Hash, std::equal_to<std::ranges::range_value_t<R> >,
1068
+ Allocator>;
1069
+
1070
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1071
+ std::ranges::input_range R,
1072
+ class Allocator,
1073
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1074
+ concurrent_flat_set(FromRangeT&&, R&&, Allocator)
1075
+ -> concurrent_flat_set<std::ranges::range_value_t<R>,
1076
+ boost::hash<std::ranges::range_value_t<R> >,
1077
+ std::equal_to<std::ranges::range_value_t<R> >,
1078
+ Allocator>;
1079
+ #endif
1080
+
896
1081
  template <class T, class Allocator,
897
1082
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
898
1083
  concurrent_flat_set(std::initializer_list<T>, std::size_t, Allocator)
@@ -1,7 +1,8 @@
1
1
  /* Fast open-addressing, node-based concurrent hashmap.
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_map_handle.hpp>
20
21
  #include <boost/unordered/detail/foa/node_map_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_map_fwd.hpp>
23
25
 
@@ -109,6 +111,21 @@ namespace boost {
109
111
  this->insert(f, l);
110
112
  }
111
113
 
114
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
115
+ template<
116
+ detail::convertible_to_from_range_t FromRangeT,
117
+ detail::container_compatible_range<value_type> R
118
+ >
119
+ concurrent_node_map(FromRangeT&&, R&& rg,
120
+ size_type n = detail::foa::default_bucket_count,
121
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
122
+ const allocator_type& a = allocator_type())
123
+ : table_(n, hf, eql, a)
124
+ {
125
+ this->insert_range(std::forward<R>(rg));
126
+ }
127
+ #endif
128
+
112
129
  concurrent_node_map(concurrent_node_map const& rhs)
113
130
  : table_(rhs.table_,
114
131
  boost::allocator_select_on_container_copy_construction(
@@ -128,6 +145,19 @@ namespace boost {
128
145
  {
129
146
  }
130
147
 
148
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
149
+ template<
150
+ detail::convertible_to_from_range_t FromRangeT,
151
+ detail::container_compatible_range<value_type> R
152
+ >
153
+ concurrent_node_map(
154
+ FromRangeT&& fr, R&& rg, allocator_type const& a)
155
+ : concurrent_node_map(
156
+ fr, std::forward<R>(rg), 0, hasher(), key_equal(), a)
157
+ {
158
+ }
159
+ #endif
160
+
131
161
  explicit concurrent_node_map(allocator_type const& a)
132
162
  : table_(detail::foa::default_bucket_count, hasher(), key_equal(), a)
133
163
  {
@@ -178,6 +208,29 @@ namespace boost {
178
208
  {
179
209
  }
180
210
 
211
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
212
+ template<
213
+ detail::convertible_to_from_range_t FromRangeT,
214
+ detail::container_compatible_range<value_type> R
215
+ >
216
+ concurrent_node_map(
217
+ FromRangeT&& fr, R&& rg, size_type n, const allocator_type& a)
218
+ : concurrent_node_map(
219
+ fr, std::forward<R>(rg), n, hasher(), key_equal(), a)
220
+ {
221
+ }
222
+
223
+ template<
224
+ detail::convertible_to_from_range_t FromRangeT,
225
+ detail::container_compatible_range<value_type> R
226
+ >
227
+ concurrent_node_map(FromRangeT&& fr, R&& rg, size_type n,
228
+ const hasher& hf, const allocator_type& a)
229
+ : concurrent_node_map(fr, std::forward<R>(rg), n, hf, key_equal(), a)
230
+ {
231
+ }
232
+ #endif
233
+
181
234
  concurrent_node_map(
182
235
  std::initializer_list<value_type> il, const allocator_type& a)
183
236
  : concurrent_node_map(
@@ -197,9 +250,10 @@ namespace boost {
197
250
  {
198
251
  }
199
252
 
200
- template <bool avoid_explicit_instantiation = true>
253
+ template <typename Key2,
254
+ typename std::enable_if<std::is_same<Key, Key2>::value, int>::type = 0>
201
255
  concurrent_node_map(
202
- unordered_node_map<Key, T, Hash, Pred, Allocator>&& other)
256
+ unordered_node_map<Key2, T, Hash, Pred, Allocator>&& other)
203
257
  : table_(std::move(other.table_))
204
258
  {
205
259
  }
@@ -430,12 +484,26 @@ namespace boost {
430
484
  size_type insert(InputIterator begin, InputIterator end)
431
485
  {
432
486
  size_type count_elements = 0;
433
- for (auto pos = begin; pos != end; ++pos, ++count_elements) {
434
- table_.emplace(*pos);
487
+ for (auto pos = begin; pos != end; ++pos) {
488
+ if (table_.emplace(*pos)) ++count_elements;
435
489
  }
436
490
  return count_elements;
437
491
  }
438
492
 
493
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
494
+ template<detail::container_compatible_range<value_type> R>
495
+ size_type insert_range(R&& rg)
496
+ {
497
+ size_type count_elements = 0;
498
+ auto first = std::ranges::begin(rg);
499
+ auto last = std::ranges::end(rg);
500
+ while (first != last) {
501
+ if (table_.emplace(*first++)) ++count_elements;
502
+ }
503
+ return count_elements;
504
+ }
505
+ #endif
506
+
439
507
  size_type insert(std::initializer_list<value_type> ilist)
440
508
  {
441
509
  return this->insert(ilist.begin(), ilist.end());
@@ -510,6 +578,21 @@ namespace boost {
510
578
  return count_elements;
511
579
  }
512
580
 
581
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
582
+ template<detail::container_compatible_range<value_type> R, class F>
583
+ size_type insert_range_or_visit(R&& rg, F f)
584
+ {
585
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F)
586
+ size_type count_elements = 0;
587
+ auto first = std::ranges::begin(rg);
588
+ auto last = std::ranges::end(rg);
589
+ for (; first != last; ++first, ++count_elements) {
590
+ table_.emplace_or_visit(*first, f);
591
+ }
592
+ return count_elements;
593
+ }
594
+ #endif
595
+
513
596
  template <class F>
514
597
  size_type insert_or_visit(std::initializer_list<value_type> ilist, F f)
515
598
  {
@@ -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
  {
@@ -622,6 +720,24 @@ namespace boost {
622
720
  return count_elements;
623
721
  }
624
722
 
723
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
724
+ template<
725
+ detail::container_compatible_range<value_type> R, class F1, class F2
726
+ >
727
+ size_type insert_range_and_visit(R&& rg, F1 f1, F2 f2)
728
+ {
729
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F1)
730
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F2)
731
+ size_type count_elements = 0;
732
+ auto first = std::ranges::begin(rg);
733
+ auto last = std::ranges::end(rg);
734
+ for (; first != last; ++first, ++count_elements) {
735
+ table_.emplace_and_visit(*first, f1, f2);
736
+ }
737
+ return count_elements;
738
+ }
739
+ #endif
740
+
625
741
  template <class F1, class F2>
626
742
  size_type insert_and_visit(
627
743
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -684,6 +800,24 @@ namespace boost {
684
800
  return count_elements;
685
801
  }
686
802
 
803
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
804
+ template<
805
+ detail::container_compatible_range<value_type> R, class F1, class F2
806
+ >
807
+ size_type insert_range_and_cvisit(R&& rg, F1 f1, F2 f2)
808
+ {
809
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F1)
810
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F2)
811
+ size_type count_elements = 0;
812
+ auto first = std::ranges::begin(rg);
813
+ auto last = std::ranges::end(rg);
814
+ for (; first != last; ++first, ++count_elements) {
815
+ table_.emplace_and_cvisit(*first, f1, f2);
816
+ }
817
+ return count_elements;
818
+ }
819
+ #endif
820
+
687
821
  template <class F1, class F2>
688
822
  size_type insert_and_cvisit(
689
823
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -1126,6 +1260,27 @@ namespace boost {
1126
1260
  boost::unordered::detail::iter_val_t<InputIterator>, Hash, Pred,
1127
1261
  Allocator>;
1128
1262
 
1263
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1264
+ template <
1265
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1266
+ std::ranges::input_range R,
1267
+ class Hash =
1268
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1269
+ class Pred =
1270
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1271
+ class Allocator = std::allocator<
1272
+ boost::unordered::detail::range_to_alloc_t<R> >,
1273
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1274
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
1275
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1276
+ concurrent_node_map(FromRangeT&&, R&&,
1277
+ std::size_t = boost::unordered::detail::foa::default_bucket_count,
1278
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1279
+ -> concurrent_node_map<boost::unordered::detail::range_key_t<R>,
1280
+ boost::unordered::detail::range_mapped_t<R>, Hash, Pred,
1281
+ Allocator>;
1282
+ #endif
1283
+
1129
1284
  template <class Key, class T,
1130
1285
  class Hash = boost::hash<std::remove_const_t<Key> >,
1131
1286
  class Pred = std::equal_to<std::remove_const_t<Key> >,
@@ -1173,6 +1328,42 @@ namespace boost {
1173
1328
  std::equal_to<boost::unordered::detail::iter_key_t<InputIterator> >,
1174
1329
  Allocator>;
1175
1330
 
1331
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1332
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1333
+ std::ranges::input_range R,
1334
+ class Allocator,
1335
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1336
+ concurrent_node_map(FromRangeT&&, R&&, std::size_t, Allocator)
1337
+ -> concurrent_node_map<boost::unordered::detail::range_key_t<R>,
1338
+ boost::unordered::detail::range_mapped_t<R>,
1339
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1340
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1341
+ Allocator>;
1342
+
1343
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1344
+ std::ranges::input_range R,
1345
+ class Allocator,
1346
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1347
+ concurrent_node_map(FromRangeT&&, R&&, Allocator)
1348
+ -> concurrent_node_map<boost::unordered::detail::range_key_t<R>,
1349
+ boost::unordered::detail::range_mapped_t<R>,
1350
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1351
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1352
+ Allocator>;
1353
+
1354
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1355
+ std::ranges::input_range R,
1356
+ class Hash, class Allocator,
1357
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1358
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1359
+ concurrent_node_map(
1360
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
1361
+ -> concurrent_node_map<boost::unordered::detail::range_key_t<R>,
1362
+ boost::unordered::detail::range_mapped_t<R>, Hash,
1363
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1364
+ Allocator>;
1365
+ #endif
1366
+
1176
1367
  template <class Key, class T, class Allocator,
1177
1368
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1178
1369
  concurrent_node_map(std::initializer_list<std::pair<Key, T> >, std::size_t,