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,308 @@
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_COPY_N_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COPY_N_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/std_fwd.hpp>
25
+ #include <boost/container/detail/iterator.hpp>
26
+
27
+ namespace boost {
28
+ namespace container {
29
+
30
+ template <class InIter, class Size, class OutIter>
31
+ OutIter segmented_copy_n(InIter first, Size count, OutIter result);
32
+
33
+ namespace detail_algo {
34
+
35
+ //////////////////////////////////////////////////////////////////////////////
36
+ // Bounded destination helper: copies from source count elements into
37
+ // [dst_first, dst_last), stopping when count reaches zero or destination
38
+ // is full. Returns segduo<SrcIter, DstIter> with the final positions of
39
+ // both iterators. count is advanced by reference so the caller knows
40
+ // how many elements remain.
41
+ // Recursively walks destination segments when dst is segmented.
42
+ //
43
+ // When dst_last is unreachable_sentinel_t the destination-full check
44
+ // is optimised away, giving the same code as an unbounded loop.
45
+ //////////////////////////////////////////////////////////////////////////////
46
+
47
+ template <class SrcIter, class SrcSent, class Size, class DstIter, class DstSent>
48
+ BOOST_CONTAINER_FORCEINLINE segduo<SrcIter, DstIter>
49
+ segmented_copy_n_src_dst_bounded
50
+ (SrcIter first, SrcSent last, Size& BOOST_RESTRICT count, DstIter dst_first, DstSent dst_last)
51
+ {
52
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
53
+ for(; count > 0; ++first, --count) {
54
+ if(dst_first == dst_last || first == last)
55
+ goto out_path;
56
+ *dst_first = *first;
57
+ ++dst_first;
58
+ }
59
+ out_path:
60
+ return segduo<SrcIter, DstIter>(first, dst_first);
61
+ }
62
+
63
+ template <class SrcIter, class SrcSent, class Size, class DstIter, class DstSent>
64
+ BOOST_CONTAINER_FORCEINLINE
65
+ typename iterator_disable_if_tag
66
+ <DstIter, std::random_access_iterator_tag, segduo<SrcIter, DstIter> >::type
67
+ segmented_copy_n_dst_bounded
68
+ (SrcIter first, SrcSent last, Size& BOOST_RESTRICT count, DstIter dst_first, DstSent dst_last, const non_segmented_iterator_tag &)
69
+ {
70
+ return (segmented_copy_n_src_dst_bounded)(first, last, count, dst_first, dst_last);
71
+ }
72
+
73
+ template <class RASrcIter, class SrcSent, class Size, class RADstIter>
74
+ BOOST_CONTAINER_FORCEINLINE
75
+ typename iterator_enable_if_tag
76
+ <RADstIter, std::random_access_iterator_tag, segduo<RASrcIter, RADstIter> >::type
77
+ segmented_copy_n_dst_bounded
78
+ (RASrcIter first, SrcSent last, Size& BOOST_RESTRICT count, RADstIter dst_first, RADstIter dst_last, const non_segmented_iterator_tag &)
79
+ {
80
+ typedef typename iterator_traits<RADstIter>::difference_type difference_type;
81
+ const difference_type dst_n = dst_last - dst_first;
82
+ Size n = count < Size(dst_n) ? count : Size(dst_n);
83
+ const Size n_initial = n;
84
+ //n is passed by reference and decremented per element copied; the
85
+ //inner helper may exit early if first == last (bounded src), so
86
+ //we must adjust count by the actual number of elements written.
87
+ const segduo<RASrcIter, RADstIter> r = (segmented_copy_n_src_dst_bounded)
88
+ (first, last, n, dst_first, unreachable_sentinel_t());
89
+ count -= (n_initial - n);
90
+ return r;
91
+ }
92
+
93
+ template <class SrcIter, class SrcSent, class Size, class SegDstIter>
94
+ segduo<SrcIter, SegDstIter> segmented_copy_n_dst_bounded
95
+ (SrcIter first, SrcSent last, Size& BOOST_RESTRICT count, SegDstIter dst_first, SegDstIter dst_last, const segmented_iterator_tag &)
96
+ {
97
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
98
+ typedef typename dst_traits::local_iterator dst_local_iterator;
99
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
100
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
101
+
102
+ dst_segment_iterator sdfirst = dst_traits::segment(dst_first);
103
+ const dst_segment_iterator sdlast = dst_traits::segment(dst_last);
104
+
105
+ if(sdfirst == sdlast) {
106
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_n_dst_bounded)
107
+ (first, last, count, dst_traits::local(dst_first), dst_traits::local(dst_last), dst_is_local_seg_t());
108
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sdfirst, r.second));
109
+ }
110
+ else {
111
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_n_dst_bounded)
112
+ (first, last, count, dst_traits::local(dst_first), dst_traits::end(sdfirst), dst_is_local_seg_t());
113
+ first = r.first;
114
+ if (count != 0 && first != last) {
115
+ for (++sdfirst; sdfirst != sdlast; ++sdfirst) {
116
+ r = (segmented_copy_n_dst_bounded)
117
+ (first, last, count, dst_traits::begin(sdfirst), dst_traits::end(sdfirst), dst_is_local_seg_t());
118
+ first = r.first;
119
+ if (count == 0 || first == last)
120
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sdfirst, r.second));
121
+ }
122
+
123
+ r = (segmented_copy_n_dst_bounded)
124
+ (first, last, count, dst_traits::begin(sdlast), dst_traits::local(dst_last), dst_is_local_seg_t());
125
+ }
126
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sdfirst, r.second));
127
+ }
128
+ }
129
+
130
+ //////////////////////////////////////////////////////////////////////////////
131
+ // Destination dispatch: routes to bounded helper.
132
+ // Non-segmented destination: single unbounded call (unreachable_sentinel_t).
133
+ // Segmented destination: loop over destination segments, bounded per segment.
134
+ //////////////////////////////////////////////////////////////////////////////
135
+
136
+ template <class SrcIter, class SrcSent, class Size, class DstIter>
137
+ BOOST_CONTAINER_FORCEINLINE DstIter segmented_copy_n_dst_dispatch
138
+ (SrcIter first, SrcSent last, Size& BOOST_RESTRICT count, DstIter result, const non_segmented_iterator_tag &)
139
+ {
140
+ return (segmented_copy_n_src_dst_bounded)
141
+ (first, last, count, result, unreachable_sentinel_t()).second;
142
+ }
143
+
144
+ template <class SrcIter, class SrcSent, class Size, class SegDstIter>
145
+ SegDstIter segmented_copy_n_dst_dispatch
146
+ (SrcIter first, SrcSent last, Size& BOOST_RESTRICT count, SegDstIter result, const segmented_iterator_tag &)
147
+ {
148
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
149
+ typedef typename dst_traits::local_iterator dst_local_iterator;
150
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
151
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
152
+
153
+ if(count <= 0)
154
+ return result;
155
+
156
+ dst_segment_iterator dst_seg = dst_traits::segment(result);
157
+ dst_local_iterator dst_local = dst_traits::local(result);
158
+
159
+ while(1) {
160
+ const segduo<SrcIter, dst_local_iterator> r = (segmented_copy_n_dst_bounded)
161
+ (first, last, count, dst_local, dst_traits::end(dst_seg), dst_is_local_seg_t());
162
+ first = r.first;
163
+ //Exit when count is satisfied or the source range is exhausted.
164
+ //The src-exhaustion check matters when this routine is invoked with
165
+ //a per-segment src range (count typically larger than the range);
166
+ //it returns control to the outer source-segment loop.
167
+ if(count == 0 || first == last)
168
+ return dst_traits::compose(dst_seg, r.second);
169
+ ++dst_seg;
170
+ dst_local = dst_traits::begin(dst_seg);
171
+ }
172
+ }
173
+
174
+ //////////////////////////////////////////////////////////////////////////////
175
+ // copy_n_scan: scans through source segments, clipping to both segment
176
+ // boundaries and count, then delegates to the destination dispatch layer.
177
+ //////////////////////////////////////////////////////////////////////////////
178
+
179
+ template <class InIter, class Size, class OutIter>
180
+ BOOST_CONTAINER_FORCEINLINE
181
+ OutIter copy_n_scan
182
+ ( InIter first, InIter last, Size& BOOST_RESTRICT count
183
+ , OutIter result, non_segmented_iterator_tag, const std::random_access_iterator_tag &)
184
+ {
185
+ const Size range_sz = Size(last - first);
186
+ Size min_count = count <= range_sz ? count : range_sz;
187
+ count -= min_count;
188
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
189
+ typedef segmented_iterator_traits<OutIter> dst_traits;
190
+ return (segmented_copy_n_dst_dispatch)
191
+ (first, unreachable_sentinel_t(), min_count, result, typename dst_traits::is_segmented_iterator());
192
+ #else
193
+ return (segmented_copy_n_src_dst_bounded)
194
+ (first, unreachable_sentinel_t(), min_count, result, unreachable_sentinel_t()).second;
195
+ #endif
196
+ }
197
+
198
+ template <class InIter, class Size, class OutIter, class Cat>
199
+ BOOST_CONTAINER_FORCEINLINE
200
+ OutIter copy_n_scan
201
+ (InIter first, InIter last, Size& BOOST_RESTRICT count, OutIter result, non_segmented_iterator_tag, const Cat &)
202
+ {
203
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
204
+ typedef segmented_iterator_traits<OutIter> dst_traits;
205
+ return (segmented_copy_n_dst_dispatch)
206
+ (first, last, count, result, typename dst_traits::is_segmented_iterator());
207
+ #else
208
+ return (segmented_copy_n_dst_dispatch)
209
+ (first, last, count, result, non_segmented_iterator_tag());
210
+ #endif
211
+ }
212
+
213
+ template <class SegIt, class Size, class OutIter, class Cat>
214
+ OutIter copy_n_scan(SegIt first, SegIt last, Size& BOOST_RESTRICT count, OutIter result, segmented_iterator_tag, const Cat &)
215
+ {
216
+ typedef segmented_iterator_traits<SegIt> traits;
217
+ typedef typename traits::local_iterator local_iterator;
218
+ typedef typename traits::segment_iterator segment_iterator;
219
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
220
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
221
+
222
+ segment_iterator scur = traits::segment(first);
223
+ segment_iterator slast = traits::segment(last);
224
+ local_iterator lcur = traits::local(first);
225
+
226
+ if(scur == slast) {
227
+ return copy_n_scan(lcur, traits::local(last), count, result, is_local_seg_t(), local_cat_t());
228
+ }
229
+ else {
230
+ result = copy_n_scan(lcur, traits::end(scur), count, result, is_local_seg_t(), local_cat_t());
231
+
232
+ if (!count)
233
+ return result;
234
+
235
+ for (++scur; scur != slast; ++scur) {
236
+ result = copy_n_scan(traits::begin(scur), traits::end(scur), count, result, is_local_seg_t(), local_cat_t());
237
+ if (!count)
238
+ return result;
239
+ }
240
+
241
+ return copy_n_scan(traits::begin(scur), traits::local(last), count, result, is_local_seg_t(), local_cat_t());
242
+ }
243
+ }
244
+
245
+ //////////////////////////////////////////////////////////////////////////////
246
+ // Source dispatch: walks the source (read pointer) segments
247
+ //////////////////////////////////////////////////////////////////////////////
248
+
249
+ template <class SegIter, class Size, class OutIter, class Cat>
250
+ OutIter segmented_copy_n_dispatch
251
+ (SegIter first, Size count, OutIter result, const segmented_iterator_tag &, Cat)
252
+ {
253
+ typedef segmented_iterator_traits<SegIter> traits;
254
+ typedef typename traits::local_iterator local_iterator;
255
+ typedef typename traits::segment_iterator segment_iterator;
256
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
257
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
258
+
259
+ if(count <= 0) return result;
260
+
261
+ segment_iterator scur = traits::segment(first);
262
+ local_iterator lcur = traits::local(first);
263
+
264
+ while(1) {
265
+ result = copy_n_scan(lcur, traits::end(scur), count, result, is_local_seg_t(), local_cat_t());
266
+
267
+ if(count == 0)
268
+ break;
269
+ ++scur;
270
+ lcur = traits::begin(scur);
271
+ }
272
+ return result;
273
+ }
274
+
275
+ template <class InIter, class Size, class OutIter, class Cat>
276
+ BOOST_CONTAINER_FORCEINLINE OutIter segmented_copy_n_dispatch
277
+ (InIter first, Size count, OutIter result, const non_segmented_iterator_tag &, const Cat&)
278
+ {
279
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
280
+ typedef segmented_iterator_traits<OutIter> dst_traits;
281
+ return (segmented_copy_n_dst_dispatch)
282
+ (first, unreachable_sentinel_t(), count, result, typename dst_traits::is_segmented_iterator());
283
+ #else
284
+ return (segmented_copy_n_src_dst_bounded)
285
+ (first, unreachable_sentinel_t(), count, result, unreachable_sentinel_t()).second;
286
+ #endif
287
+ }
288
+
289
+ } // namespace detail_algo
290
+
291
+ //! Copies \c count elements from the range beginning at \c first to
292
+ //! the range beginning at \c result. Exploits segmentation on both
293
+ //! input and output.
294
+ template <class InIter, class Size, class OutIter>
295
+ BOOST_CONTAINER_FORCEINLINE
296
+ OutIter segmented_copy_n(InIter first, Size count, OutIter result)
297
+ {
298
+ typedef segmented_iterator_traits<InIter> traits;
299
+ return detail_algo::segmented_copy_n_dispatch(first, count, result,
300
+ typename traits::is_segmented_iterator(), typename iterator_traits<InIter>::iterator_category());
301
+ }
302
+
303
+ } // namespace container
304
+ } // namespace boost
305
+
306
+ #include <boost/container/detail/config_end.hpp>
307
+
308
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COPY_N_HPP
@@ -0,0 +1,101 @@
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_COUNT_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COUNT_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 InpIter, class Sent, class T>
30
+ typename boost::container::iterator_traits<InpIter>::difference_type
31
+ segmented_count(InpIter first, Sent last, const T& BOOST_RESTRICT value);
32
+
33
+ namespace detail_algo {
34
+
35
+ template <class InpIter, class Sent, class T, class Tag, class Cat>
36
+ BOOST_CONTAINER_FORCEINLINE
37
+ typename algo_enable_if_c<
38
+ !Tag::value || is_sentinel<Sent, InpIter>::value,
39
+ typename boost::container::iterator_traits<InpIter>::difference_type>::type
40
+ segmented_count_dispatch
41
+ (InpIter first, Sent last, const T& BOOST_RESTRICT value, Tag, Cat)
42
+ {
43
+ typedef typename boost::container::iterator_traits<InpIter>::difference_type diff_t;
44
+ diff_t n = 0;
45
+
46
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
47
+ for (; first != last; ++first)
48
+ #if defined(BOOST_CONTAINER_SEGMENTED_COUNT_BRANCHLESS)
49
+ n += static_cast<diff_t>(*first == value);
50
+ #else
51
+ if (*first == value) ++n;
52
+ #endif
53
+ return n;
54
+ }
55
+
56
+ template <class SegIter, class T, class Cat>
57
+ typename boost::container::iterator_traits<SegIter>::difference_type
58
+ segmented_count_dispatch(SegIter first, SegIter last, const T& BOOST_RESTRICT value, segmented_iterator_tag, Cat)
59
+ {
60
+ typedef segmented_iterator_traits<SegIter> traits;
61
+ typedef typename traits::segment_iterator segment_iterator;
62
+ typedef typename traits::local_iterator local_iterator;
63
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
64
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
65
+
66
+ segment_iterator sfirst = traits::segment(first);
67
+ segment_iterator slast = traits::segment(last);
68
+
69
+ if(sfirst == slast) {
70
+ return (segmented_count_dispatch)(traits::local(first), traits::local(last), value, is_local_seg_t(), local_cat_t());
71
+ }
72
+ else {
73
+ typename boost::container::iterator_traits<SegIter>::difference_type result = 0;
74
+ result += (segmented_count_dispatch)(traits::local(first), traits::end(sfirst), value, is_local_seg_t(), local_cat_t());
75
+
76
+ for(++sfirst; sfirst != slast; ++sfirst)
77
+ result += (segmented_count_dispatch)(traits::begin(sfirst), traits::end(sfirst), value, is_local_seg_t(), local_cat_t());
78
+
79
+ return result += (segmented_count_dispatch)(traits::begin(sfirst), traits::local(last), value, is_local_seg_t(), local_cat_t());
80
+ }
81
+ }
82
+
83
+ } // namespace detail_algo
84
+
85
+ //! Returns the number of elements equal to \c value in [first, last).
86
+ template <class InpIter, class Sent, class T>
87
+ BOOST_CONTAINER_FORCEINLINE
88
+ typename boost::container::iterator_traits<InpIter>::difference_type
89
+ segmented_count(InpIter first, Sent last, const T& BOOST_RESTRICT value)
90
+ {
91
+ typedef segmented_iterator_traits<InpIter> traits;
92
+ return detail_algo::segmented_count_dispatch(first, last, value,
93
+ typename traits::is_segmented_iterator(), typename iterator_traits<InpIter>::iterator_category());
94
+ }
95
+
96
+ } // namespace container
97
+ } // namespace boost
98
+
99
+ #include <boost/container/detail/config_end.hpp>
100
+
101
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COUNT_HPP
@@ -0,0 +1,100 @@
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_COUNT_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COUNT_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 InpIter, class Sent, class Pred>
30
+ typename boost::container::iterator_traits<InpIter>::difference_type
31
+ segmented_count_if(InpIter first, Sent last, Pred pred);
32
+
33
+ namespace detail_algo {
34
+
35
+ template <class InpIter, class Sent, class Pred, class Tag, class Cat>
36
+ typename algo_enable_if_c<
37
+ !Tag::value || is_sentinel<Sent, InpIter>::value,
38
+ typename boost::container::iterator_traits<InpIter>::difference_type>::type
39
+ segmented_count_if_dispatch
40
+ (InpIter first, Sent last, Pred pred, Tag, Cat)
41
+ {
42
+ typedef typename boost::container::iterator_traits<InpIter>::difference_type diff_t;
43
+ diff_t n = 0;
44
+
45
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
46
+ for (; first != last; ++first)
47
+ #if defined(BOOST_CONTAINER_SEGMENTED_COUNT_BRANCHLESS)
48
+ n += static_cast<diff_t>(pred(*first));
49
+ #else
50
+ if (pred(*first)) ++n;
51
+ #endif
52
+ return n;
53
+ }
54
+
55
+ template <class SegIter, class Pred, class Cat>
56
+ typename boost::container::iterator_traits<SegIter>::difference_type
57
+ segmented_count_if_dispatch(SegIter first, SegIter last, Pred pred, segmented_iterator_tag, Cat)
58
+ {
59
+ typedef segmented_iterator_traits<SegIter> traits;
60
+ typedef typename traits::segment_iterator segment_iterator;
61
+ typedef typename traits::local_iterator local_iterator;
62
+ typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
63
+ typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
64
+
65
+ segment_iterator sfirst = traits::segment(first);
66
+ segment_iterator slast = traits::segment(last);
67
+
68
+ if(sfirst == slast) {
69
+ return (segmented_count_if_dispatch)(traits::local(first), traits::local(last), pred, is_local_seg_t(), local_cat_t());
70
+ }
71
+ else {
72
+ typename boost::container::iterator_traits<SegIter>::difference_type result = 0;
73
+ result += (segmented_count_if_dispatch)(traits::local(first), traits::end(sfirst), pred, is_local_seg_t(), local_cat_t());
74
+
75
+ for(++sfirst; sfirst != slast; ++sfirst)
76
+ result += (segmented_count_if_dispatch)(traits::begin(sfirst), traits::end(sfirst), pred, is_local_seg_t(), local_cat_t());
77
+
78
+ return result += (segmented_count_if_dispatch)(traits::begin(sfirst), traits::local(last), pred, is_local_seg_t(), local_cat_t());
79
+ }
80
+ }
81
+
82
+ } // namespace detail_algo
83
+
84
+ //! Returns the number of elements satisfying \c pred in [first, last).
85
+ template <class InpIter, class Sent, class Pred>
86
+ BOOST_CONTAINER_FORCEINLINE
87
+ typename boost::container::iterator_traits<InpIter>::difference_type
88
+ segmented_count_if(InpIter first, Sent last, Pred pred)
89
+ {
90
+ typedef segmented_iterator_traits<InpIter> traits;
91
+ return detail_algo::segmented_count_if_dispatch(first, last, pred,
92
+ typename traits::is_segmented_iterator(), typename iterator_traits<InpIter>::iterator_category());
93
+ }
94
+
95
+ } // namespace container
96
+ } // namespace boost
97
+
98
+ #include <boost/container/detail/config_end.hpp>
99
+
100
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COUNT_IF_HPP