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
@@ -0,0 +1,110 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/experimental/segmented_iterator_traits.hpp>
24
+ #include <boost/container/detail/iterators.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class InpIter, class Sent, class Pred>
30
+ InpIter segmented_find_if(InpIter first, Sent last, Pred pred);
31
+
32
+ namespace detail_algo {
33
+
34
+ template <class InpIter, class Sent, class Pred, class Tag, class Cat>
35
+ BOOST_CONTAINER_FORCEINLINE
36
+ typename algo_enable_if_c<
37
+ !Tag::value || is_sentinel<Sent, InpIter>::value, InpIter>::type
38
+ segmented_find_if_dispatch(InpIter first, Sent last, Pred pred, Tag, Cat)
39
+ {
40
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
41
+ for(; first != last; ++first)
42
+ if(pred(*first))
43
+ break;
44
+ return first;
45
+ }
46
+
47
+ template <class SegIter, class Pred, class Cat>
48
+ SegIter segmented_find_if_dispatch
49
+ (SegIter first, SegIter last, Pred pred, segmented_iterator_tag, Cat)
50
+ {
51
+ typedef segmented_iterator_traits<SegIter> traits;
52
+ typedef typename traits::local_iterator local_iterator;
53
+ typedef typename traits::segment_iterator segment_iterator;
54
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
55
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
56
+
57
+ segment_iterator sfirst = traits::segment(first);
58
+ const segment_iterator slast = traits::segment(last);
59
+
60
+ if(sfirst == slast) {
61
+ const local_iterator ll = traits::local(last);
62
+ const local_iterator r = (segmented_find_if_dispatch)(traits::local(first), ll, pred, is_local_seg_t(), local_cat_t());
63
+ if (r != ll)
64
+ return traits::compose(sfirst, r);
65
+ }
66
+ else {
67
+ //First segment
68
+ {
69
+ const local_iterator le = traits::end(sfirst);
70
+ const local_iterator r = (segmented_find_if_dispatch)(traits::local(first), le, pred, is_local_seg_t(), local_cat_t());
71
+ if (r != le)
72
+ return traits::compose(sfirst, r);
73
+ }
74
+ //Middle segments
75
+ for (++sfirst; sfirst != slast; ++sfirst) {
76
+ const local_iterator le = traits::end(sfirst);
77
+ const local_iterator r = (segmented_find_if_dispatch)(traits::begin(sfirst), le, pred, is_local_seg_t(), local_cat_t());
78
+ if (r != le)
79
+ return traits::compose(sfirst, r);
80
+ }
81
+ //Last segment
82
+ {
83
+ const local_iterator ll = traits::local(last);
84
+ const local_iterator r = (segmented_find_if_dispatch)(traits::begin(slast), traits::local(last), pred, is_local_seg_t(), local_cat_t());
85
+ if (r != ll)
86
+ return traits::compose(sfirst, r);
87
+ }
88
+ }
89
+ return last;
90
+ }
91
+
92
+ } // namespace detail_algo
93
+
94
+ //! Returns an iterator to the first element satisfying \c pred
95
+ //! in [first, last), or \c last if not found.
96
+ template <class InpIter, class Sent, class Pred>
97
+ BOOST_CONTAINER_FORCEINLINE
98
+ InpIter segmented_find_if(InpIter first, Sent last, Pred pred)
99
+ {
100
+ typedef segmented_iterator_traits<InpIter> traits;
101
+ return detail_algo::segmented_find_if_dispatch
102
+ (first, last, pred, typename traits::is_segmented_iterator(), typename iterator_traits<InpIter>::iterator_category());
103
+ }
104
+
105
+ } // namespace container
106
+ } // namespace boost
107
+
108
+ #include <boost/container/detail/config_end.hpp>
109
+
110
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_HPP
@@ -0,0 +1,43 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_NOT_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_NOT_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/detail/compare_functors.hpp>
24
+ #include <boost/container/experimental/segmented_find_if.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ //! Returns an iterator to the first element for which \c pred
30
+ //! returns false in [first, last), or \c last if not found.
31
+ template <class InpIter, class Sent, class Pred>
32
+ BOOST_CONTAINER_FORCEINLINE
33
+ InpIter segmented_find_if_not(InpIter first, Sent last, Pred pred)
34
+ {
35
+ return (segmented_find_if)(first, last, not_pred<Pred>(pred));
36
+ }
37
+
38
+ } // namespace container
39
+ } // namespace boost
40
+
41
+ #include <boost/container/detail/config_end.hpp>
42
+
43
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_IF_NOT_HPP
@@ -0,0 +1,179 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/detail/iterator.hpp>
24
+ #include <boost/container/experimental/segmented_iterator_traits.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class FwdIt, class Sent, class T>
30
+ FwdIt segmented_find_last(FwdIt first, Sent last, const T& value);
31
+
32
+ namespace detail_algo {
33
+
34
+ //////////////////////////////////////////////
35
+ // Non-segmented scans
36
+ //////////////////////////////////////////////
37
+
38
+ template <class FwdIt, class Sent, class T>
39
+ BOOST_CONTAINER_FORCEINLINE
40
+ FwdIt find_last_scan(FwdIt first, Sent last, const T& value,
41
+ non_segmented_iterator_tag, const std::forward_iterator_tag&)
42
+ {
43
+ FwdIt result = last;
44
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
45
+ for (; first != last; ++first)
46
+ if (*first == value)
47
+ result = first;
48
+ return result;
49
+ }
50
+
51
+ template <class BidirIt, class T>
52
+ BOOST_CONTAINER_FORCEINLINE
53
+ BidirIt find_last_scan(BidirIt first, BidirIt last, const T& value,
54
+ non_segmented_iterator_tag, const std::bidirectional_iterator_tag&)
55
+ {
56
+ BidirIt cur = last;
57
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
58
+ while (cur != first) {
59
+ --cur;
60
+ if (*cur == value)
61
+ return cur;
62
+ }
63
+ return last;
64
+ }
65
+
66
+ //////////////////////////////////////////////
67
+ // Segmented forward scan
68
+ //////////////////////////////////////////////
69
+
70
+ template <class SegIt, class T>
71
+ SegIt find_last_scan(SegIt first, SegIt last, const T& value,
72
+ segmented_iterator_tag, const std::forward_iterator_tag&)
73
+ {
74
+ typedef segmented_iterator_traits<SegIt> traits;
75
+ typedef typename traits::local_iterator local_iterator;
76
+ typedef typename traits::segment_iterator segment_iterator;
77
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
78
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
79
+
80
+ SegIt result = last;
81
+ segment_iterator sfirst = traits::segment(first);
82
+ const segment_iterator slast = traits::segment(last);
83
+
84
+ if (sfirst == slast) {
85
+ return traits::compose
86
+ (sfirst, find_last_scan(traits::local(first), traits::local(last), value, is_local_seg_t(), local_cat_t()));
87
+ }
88
+ else {
89
+ { // First segment
90
+ const local_iterator le = traits::end(sfirst);
91
+ const local_iterator r = find_last_scan(traits::local(first), le, value, is_local_seg_t(), local_cat_t());
92
+ if (r != le)
93
+ result = traits::compose(sfirst, r);
94
+ }
95
+ // Middle segments
96
+ for (++sfirst; sfirst != slast; ++sfirst) {
97
+ const local_iterator le = traits::end(sfirst);
98
+ const local_iterator r = find_last_scan(traits::begin(sfirst), le, value, is_local_seg_t(), local_cat_t());
99
+ if (r != le)
100
+ result = traits::compose(sfirst, r);
101
+ }
102
+ // Last segment
103
+ return traits::compose
104
+ (sfirst, find_last_scan(traits::begin(slast), traits::local(last), value, is_local_seg_t(), local_cat_t()));
105
+ }
106
+ }
107
+
108
+ //////////////////////////////////////////////
109
+ // Segmented bidirectional scan
110
+ //////////////////////////////////////////////
111
+
112
+ template <class SegIt, class T>
113
+ SegIt find_last_scan(SegIt first, SegIt last, const T& value, segmented_iterator_tag, const std::bidirectional_iterator_tag&)
114
+ {
115
+ typedef segmented_iterator_traits<SegIt> traits;
116
+ typedef typename traits::local_iterator local_iterator;
117
+ typedef typename traits::segment_iterator segment_iterator;
118
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
119
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
120
+
121
+ segment_iterator const sfirst = traits::segment(first);
122
+ segment_iterator slast = traits::segment(last);
123
+ const local_iterator ll = traits::local(last);
124
+
125
+ if (sfirst == slast) {
126
+ return traits::compose
127
+ (sfirst, find_last_scan(traits::local(first), ll, value, is_local_seg_t(), local_cat_t()));
128
+ }
129
+
130
+ { // Last segment (partial): [begin(slast), local(last))
131
+ local_iterator r = find_last_scan(traits::begin(slast), ll, value, is_local_seg_t(), local_cat_t());
132
+ if (r != ll)
133
+ return traits::compose(slast, r);
134
+ }
135
+
136
+ // Middle segments in reverse
137
+ for (--slast; slast != sfirst; --slast) {
138
+ const local_iterator le = traits::end(slast);
139
+ const local_iterator r = find_last_scan(traits::begin(slast), le, value, is_local_seg_t(), local_cat_t());
140
+ if (r != le)
141
+ return traits::compose(slast, r);
142
+ }
143
+
144
+ { // First segment (partial): [local(first), end(sfirst))
145
+ const local_iterator le = traits::end(sfirst);
146
+ const local_iterator r = find_last_scan(traits::local(first), le, value, is_local_seg_t(), local_cat_t());
147
+ if (r != le)
148
+ return traits::compose(sfirst, r);
149
+ }
150
+
151
+ return last;
152
+ }
153
+
154
+ //////////////////////////////////////////////
155
+ // Sentinel / generic fallback
156
+ //////////////////////////////////////////////
157
+
158
+ } // namespace detail_algo
159
+
160
+ //! Returns an iterator to the last element equal to \c value
161
+ //! in [first, last), or \c last if not found.
162
+ //! For bidirectional iterators, scans backward for early exit.
163
+ //! For forward iterators, scans the entire range and remembers
164
+ //! the last match.
165
+ template <class FwdIt, class Sent, class T>
166
+ BOOST_CONTAINER_FORCEINLINE
167
+ FwdIt segmented_find_last(FwdIt first, Sent last, const T& value)
168
+ {
169
+ typedef detail_algo::sent_filter<FwdIt, Sent> sf;
170
+ return detail_algo::find_last_scan
171
+ ( first, last, value, typename sf::seg_t(), typename sf::cat_t());
172
+ }
173
+
174
+ } // namespace container
175
+ } // namespace boost
176
+
177
+ #include <boost/container/detail/config_end.hpp>
178
+
179
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_HPP
@@ -0,0 +1,179 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/detail/iterator.hpp>
24
+ #include <boost/container/experimental/segmented_iterator_traits.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class FwdIt, class Sent, class Pred>
30
+ FwdIt segmented_find_last_if(FwdIt first, Sent last, Pred pred);
31
+
32
+ namespace detail_algo {
33
+
34
+ //////////////////////////////////////////////
35
+ // Non-segmented scans
36
+ //////////////////////////////////////////////
37
+
38
+ template <class FwdIt, class Sent, class Pred>
39
+ BOOST_CONTAINER_FORCEINLINE
40
+ FwdIt find_last_if_scan(FwdIt first, Sent last, Pred pred,
41
+ non_segmented_iterator_tag, const std::forward_iterator_tag&)
42
+ {
43
+ FwdIt result = last;
44
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
45
+ for (; first != last; ++first)
46
+ if (pred(*first))
47
+ result = first;
48
+ return result;
49
+ }
50
+
51
+ template <class BidirIt, class Pred>
52
+ BOOST_CONTAINER_FORCEINLINE
53
+ BidirIt find_last_if_scan(BidirIt first, BidirIt last, Pred pred,
54
+ non_segmented_iterator_tag, const std::bidirectional_iterator_tag&)
55
+ {
56
+ BidirIt cur = last;
57
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
58
+ while (cur != first) {
59
+ --cur;
60
+ if (pred(*cur))
61
+ return cur;
62
+ }
63
+ return last;
64
+ }
65
+
66
+ //////////////////////////////////////////////
67
+ // Segmented forward scan
68
+ //////////////////////////////////////////////
69
+
70
+ template <class SegIt, class Pred>
71
+ SegIt find_last_if_scan(SegIt first, SegIt last, Pred pred,
72
+ segmented_iterator_tag, const std::forward_iterator_tag&)
73
+ {
74
+ typedef segmented_iterator_traits<SegIt> traits;
75
+ typedef typename traits::local_iterator local_iterator;
76
+ typedef typename traits::segment_iterator segment_iterator;
77
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
78
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
79
+
80
+ SegIt result = last;
81
+ segment_iterator sfirst = traits::segment(first);
82
+ const segment_iterator slast = traits::segment(last);
83
+
84
+ if (sfirst == slast) {
85
+ return traits::compose
86
+ (sfirst, find_last_if_scan(traits::local(first), traits::local(last), pred, is_local_seg_t(), local_cat_t()));
87
+ }
88
+ else {
89
+ { // First segment
90
+ const local_iterator le = traits::end(sfirst);
91
+ const local_iterator r = find_last_if_scan(traits::local(first), le, pred, is_local_seg_t(), local_cat_t());
92
+ if (r != le)
93
+ result = traits::compose(sfirst, r);
94
+ }
95
+ // Middle segments
96
+ for (++sfirst; sfirst != slast; ++sfirst) {
97
+ const local_iterator le = traits::end(sfirst);
98
+ const local_iterator r = find_last_if_scan(traits::begin(sfirst), le, pred, is_local_seg_t(), local_cat_t());
99
+ if (r != le)
100
+ result = traits::compose(sfirst, r);
101
+ }
102
+ // Last segment
103
+ return traits::compose
104
+ (sfirst, find_last_if_scan(traits::begin(slast), traits::local(last), pred, is_local_seg_t(), local_cat_t()));
105
+ }
106
+ }
107
+
108
+ //////////////////////////////////////////////
109
+ // Segmented bidirectional scan
110
+ //////////////////////////////////////////////
111
+
112
+ template <class SegIt, class Pred>
113
+ SegIt find_last_if_scan(SegIt first, SegIt last, Pred pred, segmented_iterator_tag, const std::bidirectional_iterator_tag&)
114
+ {
115
+ typedef segmented_iterator_traits<SegIt> traits;
116
+ typedef typename traits::local_iterator local_iterator;
117
+ typedef typename traits::segment_iterator segment_iterator;
118
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
119
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
120
+
121
+ segment_iterator const sfirst = traits::segment(first);
122
+ segment_iterator slast = traits::segment(last);
123
+ const local_iterator ll = traits::local(last);
124
+
125
+ if (sfirst == slast) {
126
+ return traits::compose
127
+ (sfirst, find_last_if_scan(traits::local(first), ll, pred, is_local_seg_t(), local_cat_t()));
128
+ }
129
+
130
+ { // Last segment (partial): [begin(slast), local(last))
131
+ local_iterator r = find_last_if_scan(traits::begin(slast), ll, pred, is_local_seg_t(), local_cat_t());
132
+ if (r != ll)
133
+ return traits::compose(slast, r);
134
+ }
135
+
136
+ // Middle segments in reverse
137
+ for (--slast; slast != sfirst; --slast) {
138
+ const local_iterator le = traits::end(slast);
139
+ const local_iterator r = find_last_if_scan(traits::begin(slast), le, pred, is_local_seg_t(), local_cat_t());
140
+ if (r != le)
141
+ return traits::compose(slast, r);
142
+ }
143
+
144
+ { // First segment (partial): [local(first), end(sfirst))
145
+ const local_iterator le = traits::end(sfirst);
146
+ const local_iterator r = find_last_if_scan(traits::local(first), le, pred, is_local_seg_t(), local_cat_t());
147
+ if (r != le)
148
+ return traits::compose(sfirst, r);
149
+ }
150
+
151
+ return last;
152
+ }
153
+
154
+ //////////////////////////////////////////////
155
+ // Sentinel / generic fallback
156
+ //////////////////////////////////////////////
157
+
158
+ } // namespace detail_algo
159
+
160
+ //! Returns an iterator to the last element satisfying \c pred
161
+ //! in [first, last), or \c last if not found.
162
+ //! For bidirectional iterators, scans backward for early exit.
163
+ //! For forward iterators, scans the entire range and remembers
164
+ //! the last match.
165
+ template <class FwdIt, class Sent, class Pred>
166
+ BOOST_CONTAINER_FORCEINLINE
167
+ FwdIt segmented_find_last_if(FwdIt first, Sent last, Pred pred)
168
+ {
169
+ typedef detail_algo::sent_filter<FwdIt, Sent> sf;
170
+ return detail_algo::find_last_if_scan
171
+ ( first, last, pred, typename sf::seg_t(), typename sf::cat_t());
172
+ }
173
+
174
+ } // namespace container
175
+ } // namespace boost
176
+
177
+ #include <boost/container/detail/config_end.hpp>
178
+
179
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_HPP
@@ -0,0 +1,43 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_NOT_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_NOT_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/detail/compare_functors.hpp>
24
+ #include <boost/container/experimental/segmented_find_last_if.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ //! Returns an iterator to the last element for which \c pred
30
+ //! returns false in [first, last), or \c last if not found.
31
+ template <class FwdIt, class Sent, class Pred>
32
+ BOOST_CONTAINER_FORCEINLINE
33
+ FwdIt segmented_find_last_if_not(FwdIt first, Sent last, Pred pred)
34
+ {
35
+ return (segmented_find_last_if)(first, last, not_pred<Pred>(pred));
36
+ }
37
+
38
+ } // namespace container
39
+ } // namespace boost
40
+
41
+ #include <boost/container/detail/config_end.hpp>
42
+
43
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FIND_LAST_IF_NOT_HPP
@@ -0,0 +1,92 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FOR_EACH_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FOR_EACH_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/experimental/segmented_iterator_traits.hpp>
24
+ #include <boost/container/detail/iterator.hpp>
25
+ #include <boost/move/utility_core.hpp>
26
+
27
+ namespace boost {
28
+ namespace container {
29
+
30
+ template <class InpIter, class Sent, class F>
31
+ F segmented_for_each(InpIter first, Sent last, F f);
32
+
33
+ namespace detail_algo {
34
+
35
+ template <class InpIter, class Sent, class F, class Tag, class Cat>
36
+ typename algo_enable_if_c<
37
+ !Tag::value || is_sentinel<Sent, InpIter>::value, F>::type
38
+ BOOST_CONTAINER_FORCEINLINE
39
+ segmented_for_each_dispatch
40
+ (InpIter first, Sent last, F f, Tag, Cat)
41
+ {
42
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
43
+ for(; first != last; ++first)
44
+ f(*first);
45
+ return f;
46
+ }
47
+
48
+ template <class SegIter, class F, class Cat>
49
+ F segmented_for_each_dispatch
50
+ (SegIter first, SegIter last, F f, segmented_iterator_tag, Cat)
51
+ {
52
+ typedef segmented_iterator_traits<SegIter> traits;
53
+ typedef typename traits::local_iterator local_iterator;
54
+ typedef typename traits::segment_iterator segment_iterator;
55
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
56
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
57
+
58
+ segment_iterator sfirst = traits::segment(first);
59
+ segment_iterator slast = traits::segment(last);
60
+
61
+ if(sfirst == slast) {
62
+ return (segmented_for_each_dispatch)(traits::local(first), traits::local(last), boost::move(f), is_local_seg_t(), local_cat_t());
63
+ }
64
+ else {
65
+ f = (segmented_for_each_dispatch)(traits::local(first), traits::end(sfirst), boost::move(f), is_local_seg_t(), local_cat_t());
66
+ for(++sfirst; sfirst != slast; ++sfirst)
67
+ f = (segmented_for_each_dispatch)(traits::begin(sfirst), traits::end(sfirst), boost::move(f), is_local_seg_t(), local_cat_t());
68
+ return (segmented_for_each_dispatch)(traits::begin(sfirst), traits::local(last), boost::move(f), is_local_seg_t(), local_cat_t());
69
+ }
70
+ }
71
+
72
+ } // namespace detail_algo
73
+
74
+ //! Applies \c f to every element in [first, last).
75
+ //! Returns the (possibly modified) function object.
76
+ //! When \c Iter is a segmented iterator, exploits segmentation
77
+ //! to reduce per-element overhead.
78
+ template <class InpIter, class Sent, class F>
79
+ BOOST_CONTAINER_FORCEINLINE
80
+ F segmented_for_each(InpIter first, Sent last, F f)
81
+ {
82
+ typedef segmented_iterator_traits<InpIter> traits;
83
+ return detail_algo::segmented_for_each_dispatch
84
+ (first, last, boost::move(f), typename traits::is_segmented_iterator(), typename iterator_traits<InpIter>::iterator_category());
85
+ }
86
+
87
+ } // namespace container
88
+ } // namespace boost
89
+
90
+ #include <boost/container/detail/config_end.hpp>
91
+
92
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_FOR_EACH_HPP