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
@@ -275,9 +275,9 @@ namespace boost {
275
275
  inline void shared_mutex::lock()
276
276
  {
277
277
  boost::unique_lock<mutex_t> lk(mut_);
278
- gate1_.wait(lk, boost::bind(&shared_mutex::no_writer, boost::ref(*this)));
278
+ gate1_.wait(lk, boost::bind(&shared_mutex::no_writer, this));
279
279
  state_ |= write_entered_;
280
- gate2_.wait(lk, boost::bind(&shared_mutex::no_readers, boost::ref(*this)));
280
+ gate2_.wait(lk, boost::bind(&shared_mutex::no_readers, this));
281
281
  }
282
282
 
283
283
  inline bool shared_mutex::try_lock()
@@ -298,13 +298,13 @@ namespace boost {
298
298
  {
299
299
  boost::unique_lock<mutex_t> lk(mut_);
300
300
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
301
- &shared_mutex::no_writer, boost::ref(*this))))
301
+ &shared_mutex::no_writer, this)))
302
302
  {
303
303
  return false;
304
304
  }
305
305
  state_ |= write_entered_;
306
306
  if (!gate2_.wait_until(lk, abs_time, boost::bind(
307
- &shared_mutex::no_readers, boost::ref(*this))))
307
+ &shared_mutex::no_readers, this)))
308
308
  {
309
309
  state_ &= ~write_entered_;
310
310
  return false;
@@ -319,13 +319,13 @@ namespace boost {
319
319
  {
320
320
  boost::unique_lock<mutex_t> lk(mut_);
321
321
  if (!gate1_.timed_wait(lk, abs_or_rel_time, boost::bind(
322
- &shared_mutex::no_writer, boost::ref(*this))))
322
+ &shared_mutex::no_writer, this)))
323
323
  {
324
324
  return false;
325
325
  }
326
326
  state_ |= write_entered_;
327
327
  if (!gate2_.timed_wait(lk, abs_or_rel_time, boost::bind(
328
- &shared_mutex::no_readers, boost::ref(*this))))
328
+ &shared_mutex::no_readers, this)))
329
329
  {
330
330
  state_ &= ~write_entered_;
331
331
  return false;
@@ -350,7 +350,7 @@ namespace boost {
350
350
  inline void shared_mutex::lock_shared()
351
351
  {
352
352
  boost::unique_lock<mutex_t> lk(mut_);
353
- gate1_.wait(lk, boost::bind(&shared_mutex::no_writer_no_max_readers, boost::ref(*this)));
353
+ gate1_.wait(lk, boost::bind(&shared_mutex::no_writer_no_max_readers, this));
354
354
  count_t num_readers = (state_ & n_readers_) + 1;
355
355
  state_ &= ~n_readers_;
356
356
  state_ |= num_readers;
@@ -376,7 +376,7 @@ namespace boost {
376
376
  {
377
377
  boost::unique_lock<mutex_t> lk(mut_);
378
378
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
379
- &shared_mutex::no_writer_no_max_readers, boost::ref(*this))))
379
+ &shared_mutex::no_writer_no_max_readers, this)))
380
380
  {
381
381
  return false;
382
382
  }
@@ -393,7 +393,7 @@ namespace boost {
393
393
  {
394
394
  boost::unique_lock<mutex_t> lk(mut_);
395
395
  if (!gate1_.timed_wait(lk, abs_or_rel_time, boost::bind(
396
- &shared_mutex::no_writer_no_max_readers, boost::ref(*this))))
396
+ &shared_mutex::no_writer_no_max_readers, this)))
397
397
  {
398
398
  return false;
399
399
  }
@@ -653,9 +653,9 @@ namespace boost {
653
653
  inline void upgrade_mutex::lock()
654
654
  {
655
655
  boost::unique_lock<mutex_t> lk(mut_);
656
- gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_upgrader, boost::ref(*this)));
656
+ gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_upgrader, this));
657
657
  state_ |= write_entered_;
658
- gate2_.wait(lk, boost::bind(&upgrade_mutex::no_readers, boost::ref(*this)));
658
+ gate2_.wait(lk, boost::bind(&upgrade_mutex::no_readers, this));
659
659
  }
660
660
 
661
661
  inline bool upgrade_mutex::try_lock()
@@ -676,13 +676,13 @@ namespace boost {
676
676
  {
677
677
  boost::unique_lock<mutex_t> lk(mut_);
678
678
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
679
- &upgrade_mutex::no_writer_no_upgrader, boost::ref(*this))))
679
+ &upgrade_mutex::no_writer_no_upgrader, this)))
680
680
  {
681
681
  return false;
682
682
  }
683
683
  state_ |= write_entered_;
684
684
  if (!gate2_.wait_until(lk, abs_time, boost::bind(
685
- &upgrade_mutex::no_readers, boost::ref(*this))))
685
+ &upgrade_mutex::no_readers, this)))
686
686
  {
687
687
  state_ &= ~write_entered_;
688
688
  return false;
@@ -697,13 +697,13 @@ namespace boost {
697
697
  {
698
698
  boost::unique_lock<mutex_t> lk(mut_);
699
699
  if (!gate1_.timed_wait(lk, abs_or_rel_time, boost::bind(
700
- &upgrade_mutex::no_writer_no_upgrader, boost::ref(*this))))
700
+ &upgrade_mutex::no_writer_no_upgrader, this)))
701
701
  {
702
702
  return false;
703
703
  }
704
704
  state_ |= write_entered_;
705
705
  if (!gate2_.timed_wait(lk, abs_or_rel_time, boost::bind(
706
- &upgrade_mutex::no_readers, boost::ref(*this))))
706
+ &upgrade_mutex::no_readers, this)))
707
707
  {
708
708
  state_ &= ~write_entered_;
709
709
  return false;
@@ -729,7 +729,7 @@ namespace boost {
729
729
  inline void upgrade_mutex::lock_shared()
730
730
  {
731
731
  boost::unique_lock<mutex_t> lk(mut_);
732
- gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_max_readers, boost::ref(*this)));
732
+ gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_max_readers, this));
733
733
  count_t num_readers = (state_ & n_readers_) + 1;
734
734
  state_ &= ~n_readers_;
735
735
  state_ |= num_readers;
@@ -755,7 +755,7 @@ namespace boost {
755
755
  {
756
756
  boost::unique_lock<mutex_t> lk(mut_);
757
757
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
758
- &upgrade_mutex::no_writer_no_max_readers, boost::ref(*this))))
758
+ &upgrade_mutex::no_writer_no_max_readers, this)))
759
759
  {
760
760
  return false;
761
761
  }
@@ -772,7 +772,7 @@ namespace boost {
772
772
  {
773
773
  boost::unique_lock<mutex_t> lk(mut_);
774
774
  if (!gate1_.timed_wait(lk, abs_or_rel_time, boost::bind(
775
- &upgrade_mutex::no_writer_no_max_readers, boost::ref(*this))))
775
+ &upgrade_mutex::no_writer_no_max_readers, this)))
776
776
  {
777
777
  return false;
778
778
  }
@@ -807,7 +807,7 @@ namespace boost {
807
807
  inline void upgrade_mutex::lock_upgrade()
808
808
  {
809
809
  boost::unique_lock<mutex_t> lk(mut_);
810
- gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_upgrader_no_max_readers, boost::ref(*this)));
810
+ gate1_.wait(lk, boost::bind(&upgrade_mutex::no_writer_no_upgrader_no_max_readers, this));
811
811
  count_t num_readers = (state_ & n_readers_) + 1;
812
812
  state_ &= ~n_readers_;
813
813
  state_ |= upgradable_entered_ | num_readers;
@@ -833,7 +833,7 @@ namespace boost {
833
833
  {
834
834
  boost::unique_lock<mutex_t> lk(mut_);
835
835
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
836
- &upgrade_mutex::no_writer_no_upgrader_no_max_readers, boost::ref(*this))))
836
+ &upgrade_mutex::no_writer_no_upgrader_no_max_readers, this)))
837
837
  {
838
838
  return false;
839
839
  }
@@ -850,7 +850,7 @@ namespace boost {
850
850
  {
851
851
  boost::unique_lock<mutex_t> lk(mut_);
852
852
  if (!gate1_.timed_wait(lk, abs_or_rel_time, boost::bind(
853
- &upgrade_mutex::no_writer_no_upgrader_no_max_readers, boost::ref(*this))))
853
+ &upgrade_mutex::no_writer_no_upgrader_no_max_readers, this)))
854
854
  {
855
855
  return false;
856
856
  }
@@ -898,7 +898,7 @@ namespace boost {
898
898
  boost::unique_lock<mutex_t> lk(mut_);
899
899
  BOOST_ASSERT(one_or_more_readers());
900
900
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
901
- &upgrade_mutex::no_writer_no_upgrader, boost::ref(*this))))
901
+ &upgrade_mutex::no_writer_no_upgrader, this)))
902
902
  {
903
903
  return false;
904
904
  }
@@ -906,7 +906,7 @@ namespace boost {
906
906
  state_ &= ~n_readers_;
907
907
  state_ |= (write_entered_ | num_readers);
908
908
  if (!gate2_.wait_until(lk, abs_time, boost::bind(
909
- &upgrade_mutex::no_readers, boost::ref(*this))))
909
+ &upgrade_mutex::no_readers, this)))
910
910
  {
911
911
  ++num_readers;
912
912
  state_ &= ~(write_entered_ | n_readers_);
@@ -953,7 +953,7 @@ namespace boost {
953
953
  boost::unique_lock<mutex_t> lk(mut_);
954
954
  BOOST_ASSERT(one_or_more_readers());
955
955
  if (!gate1_.wait_until(lk, abs_time, boost::bind(
956
- &upgrade_mutex::no_writer_no_upgrader, boost::ref(*this))))
956
+ &upgrade_mutex::no_writer_no_upgrader, this)))
957
957
  {
958
958
  return false;
959
959
  }
@@ -987,7 +987,7 @@ namespace boost {
987
987
  count_t num_readers = (state_ & n_readers_) - 1;
988
988
  state_ &= ~(upgradable_entered_ | n_readers_);
989
989
  state_ |= write_entered_ | num_readers;
990
- gate2_.wait(lk, boost::bind(&upgrade_mutex::no_readers, boost::ref(*this)));
990
+ gate2_.wait(lk, boost::bind(&upgrade_mutex::no_readers, this));
991
991
  }
992
992
 
993
993
  inline bool upgrade_mutex::try_unlock_upgrade_and_lock()
@@ -1017,7 +1017,7 @@ namespace boost {
1017
1017
  state_ &= ~(upgradable_entered_ | n_readers_);
1018
1018
  state_ |= (write_entered_ | num_readers);
1019
1019
  if (!gate2_.wait_until(lk, abs_time, boost::bind(
1020
- &upgrade_mutex::no_readers, boost::ref(*this))))
1020
+ &upgrade_mutex::no_readers, this)))
1021
1021
  {
1022
1022
  ++num_readers;
1023
1023
  state_ &= ~(write_entered_ | n_readers_);
@@ -1,7 +1,8 @@
1
1
  /* Fast open-addressing 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)
@@ -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_map_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_map_fwd.hpp>
21
23
 
@@ -101,6 +103,21 @@ namespace boost {
101
103
  this->insert(f, l);
102
104
  }
103
105
 
106
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
107
+ template<
108
+ detail::convertible_to_from_range_t FromRangeT,
109
+ detail::container_compatible_range<value_type> R
110
+ >
111
+ concurrent_flat_map(FromRangeT&&, R&& rg,
112
+ size_type n = detail::foa::default_bucket_count,
113
+ const hasher& hf = hasher(), const key_equal& eql = key_equal(),
114
+ const allocator_type& a = allocator_type())
115
+ : table_(n, hf, eql, a)
116
+ {
117
+ this->insert_range(std::forward<R>(rg));
118
+ }
119
+ #endif
120
+
104
121
  concurrent_flat_map(concurrent_flat_map const& rhs)
105
122
  : table_(rhs.table_,
106
123
  boost::allocator_select_on_container_copy_construction(
@@ -120,6 +137,19 @@ namespace boost {
120
137
  {
121
138
  }
122
139
 
140
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
141
+ template<
142
+ detail::convertible_to_from_range_t FromRangeT,
143
+ detail::container_compatible_range<value_type> R
144
+ >
145
+ concurrent_flat_map(
146
+ FromRangeT&& fr, R&& rg, allocator_type const& a)
147
+ : concurrent_flat_map(
148
+ fr, std::forward<R>(rg), 0, hasher(), key_equal(), a)
149
+ {
150
+ }
151
+ #endif
152
+
123
153
  explicit concurrent_flat_map(allocator_type const& a)
124
154
  : table_(detail::foa::default_bucket_count, hasher(), key_equal(), a)
125
155
  {
@@ -170,6 +200,29 @@ namespace boost {
170
200
  {
171
201
  }
172
202
 
203
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
204
+ template<
205
+ detail::convertible_to_from_range_t FromRangeT,
206
+ detail::container_compatible_range<value_type> R
207
+ >
208
+ concurrent_flat_map(
209
+ FromRangeT&& fr, R&& rg, size_type n, const allocator_type& a)
210
+ : concurrent_flat_map(
211
+ fr, std::forward<R>(rg), n, hasher(), key_equal(), a)
212
+ {
213
+ }
214
+
215
+ template<
216
+ detail::convertible_to_from_range_t FromRangeT,
217
+ detail::container_compatible_range<value_type> R
218
+ >
219
+ concurrent_flat_map(FromRangeT&& fr, R&& rg, size_type n,
220
+ const hasher& hf, const allocator_type& a)
221
+ : concurrent_flat_map(fr, std::forward<R>(rg), n, hf, key_equal(), a)
222
+ {
223
+ }
224
+ #endif
225
+
173
226
  concurrent_flat_map(
174
227
  std::initializer_list<value_type> il, const allocator_type& a)
175
228
  : concurrent_flat_map(
@@ -189,10 +242,10 @@ namespace boost {
189
242
  {
190
243
  }
191
244
 
192
-
193
- template <bool avoid_explicit_instantiation = true>
245
+ template <typename Key2,
246
+ typename std::enable_if<std::is_same<Key, Key2>::value, int>::type = 0>
194
247
  concurrent_flat_map(
195
- unordered_flat_map<Key, T, Hash, Pred, Allocator>&& other)
248
+ unordered_flat_map<Key2, T, Hash, Pred, Allocator>&& other)
196
249
  : table_(std::move(other.table_))
197
250
  {
198
251
  }
@@ -423,12 +476,26 @@ namespace boost {
423
476
  size_type insert(InputIterator begin, InputIterator end)
424
477
  {
425
478
  size_type count_elements = 0;
426
- for (auto pos = begin; pos != end; ++pos, ++count_elements) {
427
- table_.emplace(*pos);
479
+ for (auto pos = begin; pos != end; ++pos) {
480
+ if (table_.emplace(*pos)) ++count_elements;
428
481
  }
429
482
  return count_elements;
430
483
  }
431
484
 
485
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
486
+ template<detail::container_compatible_range<value_type> R>
487
+ size_type insert_range(R&& rg)
488
+ {
489
+ size_type count_elements = 0;
490
+ auto first = std::ranges::begin(rg);
491
+ auto last = std::ranges::end(rg);
492
+ while (first != last) {
493
+ if (table_.emplace(*first++)) ++count_elements;
494
+ }
495
+ return count_elements;
496
+ }
497
+ #endif
498
+
432
499
  size_type insert(std::initializer_list<value_type> ilist)
433
500
  {
434
501
  return this->insert(ilist.begin(), ilist.end());
@@ -484,6 +551,21 @@ namespace boost {
484
551
  return count_elements;
485
552
  }
486
553
 
554
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
555
+ template<detail::container_compatible_range<value_type> R, class F>
556
+ size_type insert_range_or_visit(R&& rg, F f)
557
+ {
558
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F)
559
+ size_type count_elements = 0;
560
+ auto first = std::ranges::begin(rg);
561
+ auto last = std::ranges::end(rg);
562
+ for (; first != last; ++first, ++count_elements) {
563
+ table_.emplace_or_visit(*first, f);
564
+ }
565
+ return count_elements;
566
+ }
567
+ #endif
568
+
487
569
  template <class F>
488
570
  size_type insert_or_visit(std::initializer_list<value_type> ilist, F f)
489
571
  {
@@ -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
  {
@@ -554,6 +651,24 @@ namespace boost {
554
651
  return count_elements;
555
652
  }
556
653
 
654
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
655
+ template<
656
+ detail::container_compatible_range<value_type> R, class F1, class F2
657
+ >
658
+ size_type insert_range_and_visit(R&& rg, F1 f1, F2 f2)
659
+ {
660
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F1)
661
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F2)
662
+ size_type count_elements = 0;
663
+ auto first = std::ranges::begin(rg);
664
+ auto last = std::ranges::end(rg);
665
+ for (; first != last; ++first, ++count_elements) {
666
+ table_.emplace_and_visit(*first, f1, f2);
667
+ }
668
+ return count_elements;
669
+ }
670
+ #endif
671
+
557
672
  template <class F1, class F2>
558
673
  size_type insert_and_visit(
559
674
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -594,6 +709,24 @@ namespace boost {
594
709
  return count_elements;
595
710
  }
596
711
 
712
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
713
+ template<
714
+ detail::container_compatible_range<value_type> R, class F1, class F2
715
+ >
716
+ size_type insert_range_and_cvisit(R&& rg, F1 f1, F2 f2)
717
+ {
718
+ BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F1)
719
+ BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F2)
720
+ size_type count_elements = 0;
721
+ auto first = std::ranges::begin(rg);
722
+ auto last = std::ranges::end(rg);
723
+ for (; first != last; ++first, ++count_elements) {
724
+ table_.emplace_and_cvisit(*first, f1, f2);
725
+ }
726
+ return count_elements;
727
+ }
728
+ #endif
729
+
597
730
  template <class F1, class F2>
598
731
  size_type insert_and_cvisit(
599
732
  std::initializer_list<value_type> ilist, F1 f1, F2 f2)
@@ -979,6 +1112,27 @@ namespace boost {
979
1112
  boost::unordered::detail::iter_val_t<InputIterator>, Hash, Pred,
980
1113
  Allocator>;
981
1114
 
1115
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1116
+ template <
1117
+ boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1118
+ std::ranges::input_range R,
1119
+ class Hash =
1120
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1121
+ class Pred =
1122
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1123
+ class Allocator = std::allocator<
1124
+ boost::unordered::detail::range_to_alloc_t<R> >,
1125
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1126
+ class = std::enable_if_t<detail::is_pred_v<Pred> >,
1127
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1128
+ concurrent_flat_map(FromRangeT&&, R&&,
1129
+ std::size_t = boost::unordered::detail::foa::default_bucket_count,
1130
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1131
+ -> concurrent_flat_map<boost::unordered::detail::range_key_t<R>,
1132
+ boost::unordered::detail::range_mapped_t<R>, Hash, Pred,
1133
+ Allocator>;
1134
+ #endif
1135
+
982
1136
  template <class Key, class T,
983
1137
  class Hash = boost::hash<std::remove_const_t<Key> >,
984
1138
  class Pred = std::equal_to<std::remove_const_t<Key> >,
@@ -1026,6 +1180,42 @@ namespace boost {
1026
1180
  std::equal_to<boost::unordered::detail::iter_key_t<InputIterator> >,
1027
1181
  Allocator>;
1028
1182
 
1183
+ #if !defined(BOOST_UNORDERED_NO_RANGES)
1184
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1185
+ std::ranges::input_range R,
1186
+ class Allocator,
1187
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1188
+ concurrent_flat_map(FromRangeT&&, R&&, std::size_t, Allocator)
1189
+ -> concurrent_flat_map<boost::unordered::detail::range_key_t<R>,
1190
+ boost::unordered::detail::range_mapped_t<R>,
1191
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1192
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1193
+ Allocator>;
1194
+
1195
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1196
+ std::ranges::input_range R,
1197
+ class Allocator,
1198
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1199
+ concurrent_flat_map(FromRangeT&&, R&&, Allocator)
1200
+ -> concurrent_flat_map<boost::unordered::detail::range_key_t<R>,
1201
+ boost::unordered::detail::range_mapped_t<R>,
1202
+ boost::hash<boost::unordered::detail::range_key_t<R> >,
1203
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1204
+ Allocator>;
1205
+
1206
+ template <boost::unordered::detail::convertible_to_from_range_t FromRangeT,
1207
+ std::ranges::input_range R,
1208
+ class Hash, class Allocator,
1209
+ class = std::enable_if_t<detail::is_hash_v<Hash> >,
1210
+ class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1211
+ concurrent_flat_map(
1212
+ FromRangeT&&, R&&, std::size_t, Hash, Allocator)
1213
+ -> concurrent_flat_map<boost::unordered::detail::range_key_t<R>,
1214
+ boost::unordered::detail::range_mapped_t<R>, Hash,
1215
+ std::equal_to<boost::unordered::detail::range_key_t<R> >,
1216
+ Allocator>;
1217
+ #endif
1218
+
1029
1219
  template <class Key, class T, class Allocator,
1030
1220
  class = std::enable_if_t<detail::is_allocator_v<Allocator> > >
1031
1221
  concurrent_flat_map(std::initializer_list<std::pair<Key, T> >, std::size_t,