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,207 @@
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_REMOVE_COPY_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_COPY_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 InIter, class Sent, class OutIter, class T>
31
+ OutIter segmented_remove_copy(InIter first, Sent last, OutIter result, const T& value);
32
+
33
+ namespace detail_algo {
34
+
35
+ template <bool Move, class SrcIter, class Sent, class DstIter, class DstSent, class T, class DstTag, class SrcCat>
36
+ BOOST_CONTAINER_FORCEINLINE typename algo_enable_if_c<!DstTag::value, segduo<SrcIter, DstIter> >::type
37
+ segmented_remove_copy_dst_bounded
38
+ (SrcIter first, Sent last, DstIter dst_first, DstSent dst_last, const T& value, DstTag, SrcCat)
39
+ {
40
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
41
+ for(; first != last; ++first) {
42
+ if(!(*first == value)) {
43
+ if(dst_first == dst_last)
44
+ goto out_path;
45
+ transfer_op<Move>::apply(*dst_first, *first);
46
+ ++dst_first;
47
+ }
48
+ }
49
+ out_path:
50
+ return segduo<SrcIter, DstIter>(first, dst_first);
51
+ }
52
+
53
+ template <bool Move, class SrcIter, class Sent, class SegDstIter, class T, class SrcCat>
54
+ segduo<SrcIter, SegDstIter> segmented_remove_copy_dst_bounded
55
+ (SrcIter first, Sent last, SegDstIter dst_first, SegDstIter dst_last, const T& value,
56
+ segmented_iterator_tag, SrcCat)
57
+ {
58
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
59
+ typedef typename dst_traits::local_iterator dst_local_iterator;
60
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
61
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
62
+
63
+ dst_segment_iterator sfirst = dst_traits::segment(dst_first);
64
+ const dst_segment_iterator slast = dst_traits::segment(dst_last);
65
+
66
+ if(sfirst == slast) {
67
+ segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_dst_bounded<Move>)
68
+ (first, last, dst_traits::local(dst_first), dst_traits::local(dst_last), value, dst_is_local_seg_t(), SrcCat());
69
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
70
+ }
71
+ else {
72
+ segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_dst_bounded<Move>)
73
+ (first, last, dst_traits::local(dst_first), dst_traits::end(sfirst), value, dst_is_local_seg_t(), SrcCat());
74
+ first = r.first;
75
+ if(first == last)
76
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
77
+
78
+ for(++sfirst; sfirst != slast; ++sfirst) {
79
+ r = (segmented_remove_copy_dst_bounded<Move>)
80
+ (first, last, dst_traits::begin(sfirst), dst_traits::end(sfirst), value, dst_is_local_seg_t(), SrcCat());
81
+ first = r.first;
82
+ if(first == last)
83
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
84
+ }
85
+
86
+ r = (segmented_remove_copy_dst_bounded<Move>)
87
+ (first, last, dst_traits::begin(slast), dst_traits::local(dst_last), value, dst_is_local_seg_t(), SrcCat());
88
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
89
+ }
90
+ }
91
+
92
+ //////////////////////////////////////////////////////////////////////////////
93
+ // Destination dispatch
94
+ //////////////////////////////////////////////////////////////////////////////
95
+
96
+ template <bool Move, class SrcIter, class Sent, class DstIter, class T, class Cat>
97
+ BOOST_CONTAINER_FORCEINLINE DstIter segmented_remove_copy_dst_dispatch
98
+ (SrcIter first, Sent last, DstIter result, const T& value,
99
+ const non_segmented_iterator_tag &, Cat)
100
+ {
101
+ return (segmented_remove_copy_dst_bounded<Move>)
102
+ (first, last, result, unreachable_sentinel_t(), value, non_segmented_iterator_tag(), Cat()).second;
103
+ }
104
+
105
+ template <bool Move, class SrcIter, class Sent, class SegDstIter, class T, class Cat>
106
+ SegDstIter segmented_remove_copy_dst_dispatch
107
+ (SrcIter first, const Sent last, SegDstIter result, const T& value,
108
+ const segmented_iterator_tag &, Cat)
109
+ {
110
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
111
+ typedef typename dst_traits::local_iterator dst_local_iterator;
112
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
113
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
114
+
115
+ if(first == last)
116
+ return result;
117
+
118
+ dst_segment_iterator dst_seg = dst_traits::segment(result);
119
+ dst_local_iterator dst_local = dst_traits::local(result);
120
+
121
+ while(1) {
122
+ const segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_dst_bounded<Move>)
123
+ (first, last, dst_local, dst_traits::end(dst_seg), value, dst_is_local_seg_t(), Cat());
124
+ if(r.first != last) {
125
+ first = r.first;
126
+ ++dst_seg;
127
+ dst_local = dst_traits::begin(dst_seg);
128
+ }
129
+ else {
130
+ dst_local = r.second;
131
+ break;
132
+ }
133
+ }
134
+ return dst_traits::compose(dst_seg, dst_local);
135
+ }
136
+
137
+ //////////////////////////////////////////////////////////////////////////////
138
+ // Source dispatch
139
+ //////////////////////////////////////////////////////////////////////////////
140
+
141
+ template <bool Move, class SrcIter, class Sent, class OutIter, class T, class Tag, class Cat>
142
+ BOOST_CONTAINER_FORCEINLINE
143
+ typename algo_enable_if_c<
144
+ !Tag::value || is_sentinel<Sent, SrcIter>::value, OutIter>::type
145
+ segmented_remove_copy_dispatch
146
+ (SrcIter first, Sent last, OutIter result, const T& value, Tag, Cat)
147
+ {
148
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
149
+ typedef segmented_iterator_traits<OutIter> dst_traits;
150
+ return (segmented_remove_copy_dst_dispatch<Move>)
151
+ (first, last, result, value, typename dst_traits::is_segmented_iterator(), Cat());
152
+ #else
153
+ return (segmented_remove_copy_dst_dispatch<Move>)
154
+ (first, last, result, value, non_segmented_iterator_tag(), Cat());
155
+ #endif
156
+ }
157
+
158
+ template <bool Move, class SegIter, class OutIter, class T, class Cat>
159
+ OutIter segmented_remove_copy_dispatch
160
+ (SegIter first, SegIter last, OutIter result, const T& value, segmented_iterator_tag, Cat)
161
+ {
162
+ typedef segmented_iterator_traits<SegIter> src_traits;
163
+ typedef typename src_traits::local_iterator src_local_iterator;
164
+ typedef typename src_traits::segment_iterator src_segment_iterator;
165
+ typedef typename segmented_iterator_traits<src_local_iterator>::is_segmented_iterator src_is_local_seg_t;
166
+ typedef typename iterator_traits<src_local_iterator>::iterator_category src_local_cat_t;
167
+
168
+ src_segment_iterator sfirst = src_traits::segment(first);
169
+ const src_segment_iterator slast = src_traits::segment(last);
170
+
171
+ if(sfirst == slast) {
172
+ return (segmented_remove_copy_dispatch<Move>)
173
+ (src_traits::local(first), src_traits::local(last), result, value, src_is_local_seg_t(), src_local_cat_t());
174
+ }
175
+ else {
176
+ result = (segmented_remove_copy_dispatch<Move>)
177
+ (src_traits::local(first), src_traits::end(sfirst), result, value, src_is_local_seg_t(), src_local_cat_t());
178
+
179
+ for(++sfirst; sfirst != slast; ++sfirst)
180
+ result = (segmented_remove_copy_dispatch<Move>)
181
+ (src_traits::begin(sfirst), src_traits::end(sfirst), result, value, src_is_local_seg_t(), src_local_cat_t());
182
+
183
+ return (segmented_remove_copy_dispatch<Move>)
184
+ (src_traits::begin(slast), src_traits::local(last), result, value, src_is_local_seg_t(), src_local_cat_t());
185
+ }
186
+ }
187
+
188
+ } // namespace detail_algo
189
+
190
+ //! Copies elements from [first, last) to the range beginning at \c result,
191
+ //! skipping elements equal to \c value. Returns the output iterator past
192
+ //! the last element written.
193
+ template <class InIter, class Sent, class OutIter, class T>
194
+ BOOST_CONTAINER_FORCEINLINE
195
+ OutIter segmented_remove_copy(InIter first, Sent last, OutIter result, const T& value)
196
+ {
197
+ typedef segmented_iterator_traits<InIter> traits;
198
+ return detail_algo::segmented_remove_copy_dispatch<false>
199
+ (first, last, result, value, typename traits::is_segmented_iterator(), typename iterator_traits<InIter>::iterator_category());
200
+ }
201
+
202
+ } // namespace container
203
+ } // namespace boost
204
+
205
+ #include <boost/container/detail/config_end.hpp>
206
+
207
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_COPY_HPP
@@ -0,0 +1,223 @@
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_REMOVE_COPY_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_COPY_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/iterator.hpp>
25
+ #include <boost/move/utility_core.hpp>
26
+
27
+ namespace boost {
28
+ namespace container {
29
+
30
+ template <class InIter, class Sent, class OutIter, class Pred>
31
+ OutIter segmented_remove_copy_if(InIter first, Sent last, OutIter result, Pred pred);
32
+
33
+ namespace detail_algo {
34
+
35
+ //////////////////////////////////////////////////////////////////////////////
36
+ // Bounded destination helper: copies non-matching elements from source into
37
+ // [dst_first, dst_last), stopping when source is exhausted or destination
38
+ // is full. Returns segduo<SrcIter, DstIter> with the final positions of
39
+ // both iterators. Recursively walks destination segments when dst is
40
+ // segmented.
41
+ //
42
+ // When dst_last is unreachable_sentinel_t the destination-full check
43
+ // is optimised away, giving the same code as an unbounded loop.
44
+ //
45
+ // Move (first template parameter): true = move, false = copy.
46
+ //////////////////////////////////////////////////////////////////////////////
47
+
48
+ template <bool Move, class SrcIter, class Sent, class DstIter, class DstSent, class Pred, class DstTag, class SrcCat>
49
+ BOOST_CONTAINER_FORCEINLINE typename algo_enable_if_c<!DstTag::value, segduo<SrcIter, DstIter> >::type
50
+ segmented_remove_copy_if_dst_bounded
51
+ (SrcIter first, Sent last, DstIter dst_first, DstSent dst_last, Pred pred, DstTag, SrcCat)
52
+ {
53
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
54
+ for(; first != last; ++first) {
55
+ if(!pred(*first)) {
56
+ if(dst_first == dst_last)
57
+ goto out_path;
58
+ transfer_op<Move>::apply(*dst_first, *first);
59
+ ++dst_first;
60
+ }
61
+ }
62
+ out_path:
63
+ return segduo<SrcIter, DstIter>(first, dst_first);
64
+ }
65
+
66
+ template <bool Move, class SrcIter, class Sent, class SegDstIter, class Pred, class SrcCat>
67
+ segduo<SrcIter, SegDstIter> segmented_remove_copy_if_dst_bounded
68
+ (SrcIter first, Sent last, SegDstIter dst_first, SegDstIter dst_last, Pred pred,
69
+ segmented_iterator_tag, SrcCat)
70
+ {
71
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
72
+ typedef typename dst_traits::local_iterator dst_local_iterator;
73
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
74
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
75
+
76
+ dst_segment_iterator sfirst = dst_traits::segment(dst_first);
77
+ const dst_segment_iterator slast = dst_traits::segment(dst_last);
78
+
79
+ if(sfirst == slast) {
80
+ segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_if_dst_bounded<Move>)
81
+ (first, last, dst_traits::local(dst_first), dst_traits::local(dst_last), pred, dst_is_local_seg_t(), SrcCat());
82
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
83
+ }
84
+ else {
85
+ segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_if_dst_bounded<Move>)
86
+ (first, last, dst_traits::local(dst_first), dst_traits::end(sfirst), pred, dst_is_local_seg_t(), SrcCat());
87
+ first = r.first;
88
+ if(first == last)
89
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
90
+
91
+ for(++sfirst; sfirst != slast; ++sfirst) {
92
+ r = (segmented_remove_copy_if_dst_bounded<Move>)
93
+ (first, last, dst_traits::begin(sfirst), dst_traits::end(sfirst), pred, dst_is_local_seg_t(), SrcCat());
94
+ first = r.first;
95
+ if(first == last)
96
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
97
+ }
98
+
99
+ r = (segmented_remove_copy_if_dst_bounded<Move>)
100
+ (first, last, dst_traits::begin(slast), dst_traits::local(dst_last), pred, dst_is_local_seg_t(), SrcCat());
101
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
102
+ }
103
+ }
104
+
105
+ //////////////////////////////////////////////////////////////////////////////
106
+ // Destination dispatch: routes to bounded helper.
107
+ // Non-segmented destination: single unbounded call (unreachable_sentinel_t).
108
+ // Segmented destination: loop over destination segments, bounded per segment.
109
+ //////////////////////////////////////////////////////////////////////////////
110
+
111
+ template <bool Move, class SrcIter, class Sent, class DstIter, class Pred, class Cat>
112
+ BOOST_CONTAINER_FORCEINLINE DstIter segmented_remove_copy_if_dst_dispatch
113
+ (SrcIter first, Sent last, DstIter result, Pred pred,
114
+ const non_segmented_iterator_tag &, Cat)
115
+ {
116
+ return (segmented_remove_copy_if_dst_bounded<Move>)
117
+ (first, last, result, unreachable_sentinel_t(), pred, non_segmented_iterator_tag(), Cat()).second;
118
+ }
119
+
120
+ template <bool Move, class SrcIter, class Sent, class SegDstIter, class Pred, class Cat>
121
+ SegDstIter segmented_remove_copy_if_dst_dispatch
122
+ (SrcIter first, Sent last, SegDstIter result, Pred pred,
123
+ const segmented_iterator_tag &, Cat)
124
+ {
125
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
126
+ typedef typename dst_traits::local_iterator dst_local_iterator;
127
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
128
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
129
+
130
+ if(first == last)
131
+ return result;
132
+
133
+ dst_segment_iterator dst_seg = dst_traits::segment(result);
134
+ dst_local_iterator dst_local = dst_traits::local(result);
135
+
136
+ while(1) {
137
+ const dst_local_iterator dst_end = dst_traits::end(dst_seg);
138
+ const segduo<SrcIter, dst_local_iterator> r = (segmented_remove_copy_if_dst_bounded<Move>)
139
+ (first, last, dst_local, dst_end, pred, dst_is_local_seg_t(), Cat());
140
+ first = r.first;
141
+ if(first != last) {
142
+ ++dst_seg;
143
+ dst_local = dst_traits::begin(dst_seg);
144
+ }
145
+ else {
146
+ dst_local = r.second;
147
+ break;
148
+ }
149
+ }
150
+ return dst_traits::compose(dst_seg, dst_local);
151
+ }
152
+
153
+ //////////////////////////////////////////////////////////////////////////////
154
+ // Source dispatch: walks the source (read pointer) segments
155
+ //////////////////////////////////////////////////////////////////////////////
156
+
157
+ template <bool Move, class SrcIter, class Sent, class OutIter, class Pred, class Tag, class Cat>
158
+ BOOST_CONTAINER_FORCEINLINE
159
+ typename algo_enable_if_c<
160
+ !Tag::value || is_sentinel<Sent, SrcIter>::value, OutIter>::type
161
+ segmented_remove_copy_if_dispatch
162
+ (SrcIter first, Sent last, OutIter result, Pred pred, Tag, Cat)
163
+ {
164
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
165
+ typedef segmented_iterator_traits<OutIter> dst_traits;
166
+ return (segmented_remove_copy_if_dst_dispatch<Move>)
167
+ (first, last, result, pred, typename dst_traits::is_segmented_iterator(), Cat());
168
+ #else
169
+ return (segmented_remove_copy_if_dst_dispatch<Move>)
170
+ (first, last, result, pred, non_segmented_iterator_tag(), Cat());
171
+ #endif
172
+ }
173
+
174
+ template <bool Move, class SegIter, class OutIter, class Pred, class Cat>
175
+ OutIter segmented_remove_copy_if_dispatch
176
+ (SegIter first, SegIter last, OutIter result, Pred pred, segmented_iterator_tag, Cat)
177
+ {
178
+ typedef segmented_iterator_traits<SegIter> src_traits;
179
+ typedef typename src_traits::local_iterator src_local_iterator;
180
+ typedef typename src_traits::segment_iterator src_segment_iterator;
181
+ typedef typename segmented_iterator_traits<src_local_iterator>::is_segmented_iterator src_is_local_seg_t;
182
+ typedef typename iterator_traits<src_local_iterator>::iterator_category src_local_cat_t;
183
+
184
+ src_segment_iterator sfirst = src_traits::segment(first);
185
+ const src_segment_iterator slast = src_traits::segment(last);
186
+
187
+ if(sfirst == slast) {
188
+ return (segmented_remove_copy_if_dispatch<Move>)
189
+ (src_traits::local(first), src_traits::local(last), result, pred, src_is_local_seg_t(), src_local_cat_t());
190
+ }
191
+ else {
192
+ result = (segmented_remove_copy_if_dispatch<Move>)
193
+ (src_traits::local(first), src_traits::end(sfirst), result, pred, src_is_local_seg_t(), src_local_cat_t());
194
+
195
+ for(++sfirst; sfirst != slast; ++sfirst)
196
+ result = (segmented_remove_copy_if_dispatch<Move>)
197
+ (src_traits::begin(sfirst), src_traits::end(sfirst), result, pred, src_is_local_seg_t(), src_local_cat_t());
198
+
199
+ return (segmented_remove_copy_if_dispatch<Move>)
200
+ (src_traits::begin(slast), src_traits::local(last), result, pred, src_is_local_seg_t(), src_local_cat_t());
201
+ }
202
+ }
203
+
204
+ } // namespace detail_algo
205
+
206
+ //! Copies elements from [first, last) to the range beginning at \c result,
207
+ //! skipping elements satisfying \c pred. Returns the output iterator past
208
+ //! the last element written.
209
+ template <class InIter, class Sent, class OutIter, class Pred>
210
+ BOOST_CONTAINER_FORCEINLINE
211
+ OutIter segmented_remove_copy_if(InIter first, Sent last, OutIter result, Pred pred)
212
+ {
213
+ typedef segmented_iterator_traits<InIter> traits;
214
+ return detail_algo::segmented_remove_copy_if_dispatch<false>
215
+ (first, last, result, pred, typename traits::is_segmented_iterator(), typename iterator_traits<InIter>::iterator_category());
216
+ }
217
+
218
+ } // namespace container
219
+ } // namespace boost
220
+
221
+ #include <boost/container/detail/config_end.hpp>
222
+
223
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_COPY_IF_HPP
@@ -0,0 +1,57 @@
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_REMOVE_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_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_remove_copy_if.hpp>
24
+ #include <boost/container/experimental/segmented_find_if.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ //! Removes all elements for which \c pred returns true from [first, last),
30
+ //! moving retained elements forward. Returns iterator to new end.
31
+ template <class FwdIt, class Sent, class Predicate>
32
+ FwdIt segmented_remove_if(FwdIt first, Sent last, Predicate pred)
33
+ {
34
+ typedef segmented_iterator_traits<FwdIt> traits;
35
+ first = detail_algo::segmented_find_if_dispatch
36
+ (first, last, pred
37
+ , typename traits::is_segmented_iterator()
38
+ , typename iterator_traits<FwdIt>::iterator_category());
39
+
40
+ if(first == last)
41
+ return last;
42
+
43
+ FwdIt next = first;
44
+ ++next;
45
+
46
+ return detail_algo::segmented_remove_copy_if_dispatch<true>
47
+ (next, last, first, pred,
48
+ typename traits::is_segmented_iterator(),
49
+ typename iterator_traits<FwdIt>::iterator_category());
50
+ }
51
+
52
+ } // namespace container
53
+ } // namespace boost
54
+
55
+ #include <boost/container/detail/config_end.hpp>
56
+
57
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REMOVE_IF_HPP
@@ -0,0 +1,90 @@
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_REPLACE_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REPLACE_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
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class FwdIt, class Sent, class T>
30
+ void segmented_replace(FwdIt first, Sent last, const T& BOOST_RESTRICT old_val, const T& BOOST_RESTRICT new_val);
31
+
32
+ namespace detail_algo {
33
+
34
+ template <class FwdIt, class Sent, class T, class Tag, class Cat>
35
+ BOOST_CONTAINER_FORCEINLINE
36
+ typename algo_enable_if_c<
37
+ !Tag::value || is_sentinel<Sent, FwdIt>::value>::type
38
+ segmented_replace_dispatch(FwdIt first, Sent last, const T& BOOST_RESTRICT old_val, const T& BOOST_RESTRICT new_val, Tag, Cat)
39
+ {
40
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
41
+ for(; first != last; ++first)
42
+ if(*first == old_val)
43
+ *first = new_val;
44
+ }
45
+
46
+ template <class SegIter, class T, class Cat>
47
+ void segmented_replace_dispatch
48
+ (SegIter first, SegIter last, const T& BOOST_RESTRICT old_val, const T& BOOST_RESTRICT new_val, segmented_iterator_tag, Cat)
49
+ {
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
+ segment_iterator slast = traits::segment(last);
59
+
60
+ if(sfirst == slast) {
61
+ (segmented_replace_dispatch)(traits::local(first), traits::local(last), old_val, new_val, is_local_seg_t(), local_cat_t());
62
+ }
63
+ else {
64
+ (segmented_replace_dispatch)(traits::local(first), traits::end(sfirst), old_val, new_val, is_local_seg_t(), local_cat_t());
65
+
66
+ for(++sfirst; sfirst != slast; ++sfirst)
67
+ (segmented_replace_dispatch)(traits::begin(sfirst), traits::end(sfirst), old_val, new_val, is_local_seg_t(), local_cat_t());
68
+
69
+ (segmented_replace_dispatch)(traits::begin(sfirst), traits::local(last), old_val, new_val, is_local_seg_t(), local_cat_t());
70
+ }
71
+ }
72
+
73
+ } // namespace detail_algo
74
+
75
+ //! Replaces every occurrence of \c old_val with \c new_val in [first, last).
76
+ template <class FwdIt, class Sent, class T>
77
+ BOOST_CONTAINER_FORCEINLINE
78
+ void segmented_replace(FwdIt first, Sent last, const T& BOOST_RESTRICT old_val, const T& BOOST_RESTRICT new_val)
79
+ {
80
+ typedef segmented_iterator_traits<FwdIt> traits;
81
+ detail_algo::segmented_replace_dispatch
82
+ (first, last, old_val, new_val, typename traits::is_segmented_iterator(), typename iterator_traits<FwdIt>::iterator_category());
83
+ }
84
+
85
+ } // namespace container
86
+ } // namespace boost
87
+
88
+ #include <boost/container/detail/config_end.hpp>
89
+
90
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REPLACE_HPP
@@ -0,0 +1,90 @@
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_REPLACE_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REPLACE_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/iterator.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class FwdIt, class Sent, class Pred, class T>
30
+ void segmented_replace_if(FwdIt first, Sent last, Pred pred, const T& BOOST_RESTRICT new_val);
31
+
32
+ namespace detail_algo {
33
+
34
+ template <class FwdIt, class Sent, class Pred, class T, class Tag, class Cat>
35
+ typename algo_enable_if_c<
36
+ !Tag::value || is_sentinel<Sent, FwdIt>::value>::type
37
+ BOOST_CONTAINER_FORCEINLINE
38
+ segmented_replace_if_dispatch(FwdIt first, Sent last, Pred pred, const T& BOOST_RESTRICT new_val, Tag, Cat)
39
+ {
40
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
41
+ for(; first != last; ++first)
42
+ if(pred(*first))
43
+ *first = new_val;
44
+ }
45
+
46
+ template <class SegIter, class Pred, class T, class Cat>
47
+ void segmented_replace_if_dispatch
48
+ (SegIter first, SegIter last, Pred pred, const T& BOOST_RESTRICT new_val, segmented_iterator_tag, Cat)
49
+ {
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
+ segment_iterator slast = traits::segment(last);
59
+
60
+ if(sfirst == slast) {
61
+ (segmented_replace_if_dispatch)(traits::local(first), traits::local(last), pred, new_val, is_local_seg_t(), local_cat_t());
62
+ }
63
+ else {
64
+ (segmented_replace_if_dispatch)(traits::local(first), traits::end(sfirst), pred, new_val, is_local_seg_t(), local_cat_t());
65
+
66
+ for(++sfirst; sfirst != slast; ++sfirst)
67
+ (segmented_replace_if_dispatch)(traits::begin(sfirst), traits::end(sfirst), pred, new_val, is_local_seg_t(), local_cat_t());
68
+
69
+ (segmented_replace_if_dispatch)(traits::begin(sfirst), traits::local(last), pred, new_val, is_local_seg_t(), local_cat_t());
70
+ }
71
+ }
72
+
73
+ } // namespace detail_algo
74
+
75
+ //! Replaces every element satisfying \c pred with \c new_val in [first, last).
76
+ template <class FwdIt, class Sent, class Pred, class T>
77
+ BOOST_CONTAINER_FORCEINLINE
78
+ void segmented_replace_if(FwdIt first, Sent last, Pred pred, const T& BOOST_RESTRICT new_val)
79
+ {
80
+ typedef segmented_iterator_traits<FwdIt> traits;
81
+ detail_algo::segmented_replace_if_dispatch
82
+ (first, last, pred, new_val, typename traits::is_segmented_iterator(), typename iterator_traits<FwdIt>::iterator_category());
83
+ }
84
+
85
+ } // namespace container
86
+ } // namespace boost
87
+
88
+ #include <boost/container/detail/config_end.hpp>
89
+
90
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_REPLACE_IF_HPP