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,45 @@
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
+
11
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_PMR_NEST_HPP
12
+ #define BOOST_CONTAINER_EXPERIMENTAL_PMR_NEST_HPP
13
+
14
+ #if defined (_MSC_VER)
15
+ # pragma once
16
+ #endif
17
+
18
+ #include <boost/container/experimental/nest.hpp>
19
+ #include <boost/container/pmr/polymorphic_allocator.hpp>
20
+
21
+ namespace boost {
22
+ namespace container {
23
+ namespace pmr {
24
+
25
+ #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
26
+
27
+ template <class T>
28
+ using nest = boost::container::nest<T, polymorphic_allocator<T>>;
29
+
30
+ #endif
31
+
32
+ //! A portable metafunction to obtain a nest
33
+ //! that uses a polymorphic allocator
34
+ template<class T>
35
+ struct nest_of
36
+ {
37
+ typedef boost::container::nest
38
+ < T, polymorphic_allocator<T> > type;
39
+ };
40
+
41
+ } //namespace pmr {
42
+ } //namespace container {
43
+ } //namespace boost {
44
+
45
+ #endif //BOOST_CONTAINER_EXPERIMENTAL_PMR_NEST_HPP
@@ -0,0 +1,43 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2025-2026. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ALL_OF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ALL_OF_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/container/detail/config_begin.hpp>
22
+ #include <boost/container/detail/workaround.hpp>
23
+ #include <boost/container/detail/compare_functors.hpp>
24
+ #include <boost/container/experimental/segmented_none_of.hpp>
25
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ //! Returns \c true if \c pred returns true for all elements
30
+ //! in [first, last), or if the range is empty.
31
+ template <class InpIter, class Sent, class Pred>
32
+ BOOST_CONTAINER_FORCEINLINE
33
+ bool segmented_all_of(InpIter first, Sent last, Pred pred)
34
+ {
35
+ return (segmented_none_of)(first, last, not_pred<Pred>(pred));
36
+ }
37
+
38
+ } // namespace container
39
+ } // namespace boost
40
+
41
+ #include <boost/container/detail/config_end.hpp>
42
+
43
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ALL_OF_HPP
@@ -0,0 +1,42 @@
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_ANY_OF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ANY_OF_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_none_of.hpp>
24
+
25
+ namespace boost {
26
+ namespace container {
27
+
28
+ //! Returns \c true if \c pred returns true for at least one element
29
+ //! in [first, last). Returns \c false if the range is empty.
30
+ template <class InpIter, class Sent, class Pred>
31
+ BOOST_CONTAINER_FORCEINLINE
32
+ bool segmented_any_of(InpIter first, Sent last, Pred pred)
33
+ {
34
+ return !(segmented_none_of)(first, last, pred);
35
+ }
36
+
37
+ } // namespace container
38
+ } // namespace boost
39
+
40
+ #include <boost/container/detail/config_end.hpp>
41
+
42
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ANY_OF_HPP
@@ -0,0 +1,229 @@
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_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_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
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class InIter, class Sent, class OutIter>
30
+ OutIter segmented_copy(InIter first, Sent last, OutIter result);
31
+
32
+ namespace detail_algo {
33
+
34
+ //////////////////////////////////////////////////////////////////////////////
35
+ // Bounded destination helper: copies from source into [dst_first, dst_last),
36
+ // stopping when source or destination is exhausted.
37
+ // Returns segduo<SrcIter, DstIter> with the final positions of
38
+ // both iterators. Recursively walks destination segments when dst is
39
+ // segmented.
40
+ //
41
+ // When dst_last is unreachable_sentinel_t the destination-full check
42
+ // is optimised away, giving the same code as an unbounded loop.
43
+ //////////////////////////////////////////////////////////////////////////////
44
+
45
+ template <class SrcIter, class Sent, class DstIter, class DstSent, class DstTag, class SrcCat>
46
+ BOOST_CONTAINER_FORCEINLINE typename algo_enable_if_c<!DstTag::value, segduo<SrcIter, DstIter> >::type
47
+ segmented_copy_dst_bounded
48
+ (SrcIter first, Sent last, DstIter dst_first, DstSent dst_last, DstTag, SrcCat)
49
+ {
50
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
51
+ for(; first != last; ++first) {
52
+ if(dst_first == dst_last)
53
+ goto out_path;
54
+ *dst_first = *first;
55
+ ++dst_first;
56
+ }
57
+ out_path:
58
+ return segduo<SrcIter, DstIter>(first, dst_first);
59
+ }
60
+
61
+ template <class RASrcIter, class RADstIter>
62
+ BOOST_CONTAINER_FORCEINLINE
63
+ typename iterator_enable_if_tag
64
+ <RADstIter, std::random_access_iterator_tag, segduo<RASrcIter, RADstIter> >::type
65
+ segmented_copy_dst_bounded
66
+ (RASrcIter first, RASrcIter last, RADstIter dst_first, RADstIter dst_last,
67
+ const non_segmented_iterator_tag &, const std::random_access_iterator_tag &src_tag)
68
+ {
69
+ typedef typename iterator_traits<RASrcIter>::difference_type difference_type;
70
+ const difference_type src_n = last - first;
71
+ const difference_type dst_n = difference_type(dst_last - dst_first);
72
+ const difference_type n = src_n < dst_n ? src_n : dst_n;
73
+ return (segmented_copy_dst_bounded)(first, first + n, dst_first, unreachable_sentinel_t(),
74
+ non_segmented_iterator_tag(), src_tag);
75
+ }
76
+
77
+ template <class SrcIter, class Sent, class SegDstIter, class SrcCat>
78
+ segduo<SrcIter, SegDstIter> segmented_copy_dst_bounded
79
+ (SrcIter first, Sent last, SegDstIter dst_first, SegDstIter dst_last,
80
+ segmented_iterator_tag, SrcCat)
81
+ {
82
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
83
+ typedef typename dst_traits::local_iterator dst_local_iterator;
84
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
85
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
86
+
87
+ dst_segment_iterator sfirst = dst_traits::segment(dst_first);
88
+ const dst_segment_iterator slast = dst_traits::segment(dst_last);
89
+
90
+ if(sfirst == slast) {
91
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_dst_bounded)
92
+ (first, last, dst_traits::local(dst_first), dst_traits::local(dst_last), dst_is_local_seg_t(), SrcCat());
93
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
94
+ }
95
+ else {
96
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_dst_bounded)
97
+ (first, last, dst_traits::local(dst_first), dst_traits::end(sfirst), dst_is_local_seg_t(), SrcCat());
98
+ first = r.first;
99
+ if(first == last)
100
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
101
+
102
+ for(++sfirst; sfirst != slast; ++sfirst) {
103
+ r = (segmented_copy_dst_bounded)
104
+ (first, last, dst_traits::begin(sfirst), dst_traits::end(sfirst), dst_is_local_seg_t(), SrcCat());
105
+ first = r.first;
106
+ if(first == last)
107
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(sfirst, r.second));
108
+ }
109
+
110
+ r = (segmented_copy_dst_bounded)
111
+ (first, last, dst_traits::begin(slast), dst_traits::local(dst_last), dst_is_local_seg_t(), SrcCat());
112
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(sfirst, r.second));
113
+ }
114
+ }
115
+
116
+ //////////////////////////////////////////////////////////////////////////////
117
+ // Destination dispatch: routes to bounded helper.
118
+ // Non-segmented destination: single unbounded call (unreachable_sentinel_t).
119
+ // Segmented destination: loop over destination segments, bounded per segment.
120
+ //////////////////////////////////////////////////////////////////////////////
121
+
122
+ template <class SrcIter, class Sent, class DstIter, class Cat>
123
+ BOOST_CONTAINER_FORCEINLINE DstIter segmented_copy_dst_dispatch
124
+ (SrcIter first, Sent last, DstIter result,
125
+ const non_segmented_iterator_tag &, Cat)
126
+ {
127
+ return (segmented_copy_dst_bounded)
128
+ (first, last, result, unreachable_sentinel_t(), non_segmented_iterator_tag(), Cat()).second;
129
+ }
130
+
131
+ template <class SrcIter, class Sent, class SegDstIter, class Cat>
132
+ SegDstIter segmented_copy_dst_dispatch
133
+ (SrcIter first, Sent last, SegDstIter result,
134
+ const segmented_iterator_tag &, Cat)
135
+ {
136
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
137
+ typedef typename dst_traits::local_iterator dst_local_iterator;
138
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
139
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
140
+
141
+ if(first == last)
142
+ return result;
143
+
144
+ dst_segment_iterator dst_seg = dst_traits::segment(result);
145
+ dst_local_iterator dst_local = dst_traits::local(result);
146
+
147
+ while(1) {
148
+ const dst_local_iterator dst_end = dst_traits::end(dst_seg);
149
+ const segduo<SrcIter, dst_local_iterator> r = (segmented_copy_dst_bounded)
150
+ (first, last, dst_local, dst_end, dst_is_local_seg_t(), Cat());
151
+ first = r.first;
152
+ if(first != last) {
153
+ ++dst_seg;
154
+ dst_local = dst_traits::begin(dst_seg);
155
+ }
156
+ else {
157
+ return dst_traits::compose(dst_seg, r.second);
158
+ }
159
+ }
160
+ }
161
+
162
+ //////////////////////////////////////////////////////////////////////////////
163
+ // Source dispatch: walks the source (read pointer) segments
164
+ //////////////////////////////////////////////////////////////////////////////
165
+
166
+ template <class SrcIter, class Sent, class OutIter, class Tag, class Cat>
167
+ BOOST_CONTAINER_FORCEINLINE
168
+ typename algo_enable_if_c<
169
+ !Tag::value || is_sentinel<Sent, SrcIter>::value, OutIter>::type
170
+ segmented_copy_dispatch(SrcIter first, Sent last, OutIter result, Tag, Cat)
171
+ {
172
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
173
+ typedef segmented_iterator_traits<OutIter> dst_traits;
174
+ return (segmented_copy_dst_dispatch)
175
+ (first, last, result, typename dst_traits::is_segmented_iterator(), Cat());
176
+ #else
177
+ return (segmented_copy_dst_dispatch)
178
+ (first, last, result, non_segmented_iterator_tag(), Cat());
179
+ #endif
180
+ }
181
+
182
+ template <class SegIter, class OutIter, class Cat>
183
+ OutIter segmented_copy_dispatch(SegIter first, SegIter last, OutIter result, segmented_iterator_tag, Cat)
184
+ {
185
+ typedef segmented_iterator_traits<SegIter> src_traits;
186
+ typedef typename src_traits::local_iterator src_local_iterator;
187
+ typedef typename src_traits::segment_iterator src_segment_iterator;
188
+ typedef typename segmented_iterator_traits<src_local_iterator>::is_segmented_iterator src_is_local_seg_t;
189
+ typedef typename iterator_traits<src_local_iterator>::iterator_category src_local_cat_t;
190
+
191
+ src_segment_iterator sfirst = src_traits::segment(first);
192
+ const src_segment_iterator slast = src_traits::segment(last);
193
+
194
+ if(sfirst == slast) {
195
+ return (segmented_copy_dispatch)
196
+ (src_traits::local(first), src_traits::local(last), result, src_is_local_seg_t(), src_local_cat_t());
197
+ }
198
+ else {
199
+ result = (segmented_copy_dispatch)
200
+ (src_traits::local(first), src_traits::end(sfirst), result, src_is_local_seg_t(), src_local_cat_t());
201
+
202
+ for(++sfirst; sfirst != slast; ++sfirst)
203
+ result = (segmented_copy_dispatch)
204
+ (src_traits::begin(sfirst), src_traits::end(sfirst), result, src_is_local_seg_t(), src_local_cat_t());
205
+
206
+ return (segmented_copy_dispatch)
207
+ (src_traits::begin(slast), src_traits::local(last), result, src_is_local_seg_t(), src_local_cat_t());
208
+ }
209
+ }
210
+
211
+ } // namespace detail_algo
212
+
213
+ //! Copies elements from [first, last) to the range beginning at \c result.
214
+ //! Segmentation is exploited on both input and output ranges.
215
+ template <class InIter, class Sent, class OutIter>
216
+ BOOST_CONTAINER_FORCEINLINE
217
+ OutIter segmented_copy(InIter first, Sent last, OutIter result)
218
+ {
219
+ typedef segmented_iterator_traits<InIter> traits;
220
+ return detail_algo::segmented_copy_dispatch(first, last, result,
221
+ typename traits::is_segmented_iterator(), typename iterator_traits<InIter>::iterator_category());
222
+ }
223
+
224
+ } // namespace container
225
+ } // namespace boost
226
+
227
+ #include <boost/container/detail/config_end.hpp>
228
+
229
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COPY_HPP
@@ -0,0 +1,270 @@
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_IF_HPP
11
+ #define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_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
+
26
+ namespace boost {
27
+ namespace container {
28
+
29
+ template <class InIter, class Sent, class OutIter, class Pred>
30
+ OutIter segmented_copy_if(InIter first, Sent last, OutIter result, Pred pred);
31
+
32
+ namespace detail_algo {
33
+
34
+ //////////////////////////////////////////////////////////////////////////////
35
+ // Bounded destination helper: copies matching elements from source into
36
+ // [dst_first, dst_last), stopping when source is exhausted or destination
37
+ // is full. Returns segduo<SrcIter, DstIter> with the final positions of
38
+ // both iterators. Recursively walks destination segments when dst is
39
+ // segmented.
40
+ //
41
+ // When dst_last is unreachable_sentinel_t the destination-full check
42
+ // is optimised away, giving the same code as an unbounded loop.
43
+ //////////////////////////////////////////////////////////////////////////////
44
+
45
+ template <class SrcIter, class Sent, class DstIter, class DstSent, class Pred, class DstTag, class SrcCat>
46
+ BOOST_CONTAINER_FORCEINLINE
47
+ typename algo_enable_if_c<!DstTag::value, segduo<SrcIter, DstIter> >::type
48
+ segmented_copy_if_dst_bounded
49
+ (SrcIter first, Sent last, DstIter dst_first, DstSent dst_last, Pred pred, DstTag, SrcCat)
50
+ {
51
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
52
+ for(; first != last; ++first) {
53
+ if(pred(*first)) {
54
+ if(dst_first == dst_last)
55
+ goto out_path;
56
+ *dst_first = *first;
57
+ ++dst_first;
58
+ }
59
+ }
60
+ out_path:
61
+ return segduo<SrcIter, DstIter>(first, dst_first);
62
+ }
63
+
64
+ template <class RASrcIter, class RADstIter, class Pred>
65
+ typename iterator_enable_if_tag
66
+ <RADstIter, std::random_access_iterator_tag, segduo<RASrcIter, RADstIter> >::type
67
+ segmented_copy_if_dst_bounded
68
+ (RASrcIter first, RASrcIter last, RADstIter dst_first, RADstIter dst_last, Pred pred,
69
+ const non_segmented_iterator_tag &, const std::random_access_iterator_tag &src_tag)
70
+ {
71
+ typedef typename iterator_traits<RASrcIter>::difference_type difference_type;
72
+
73
+ (void)src_tag;
74
+ RASrcIter cur = first;
75
+ RADstIter dst_cur = dst_first;
76
+
77
+ const difference_type B = 32;
78
+ difference_type avail = last - cur;
79
+ for(;;) {
80
+ difference_type room = dst_last - dst_cur;
81
+ difference_type chunk = room < avail ? room : avail;
82
+ if(chunk == 0)
83
+ goto end;
84
+ if(chunk >= B) {
85
+ avail -= B;
86
+ chunk = B;
87
+ BOOST_CONTAINER_SEGMENTED_AUTO_UNROLL
88
+ while(chunk) {
89
+ --chunk;
90
+ if(pred(*cur)) {
91
+ *dst_cur = *cur;
92
+ ++dst_cur;
93
+ }
94
+ ++cur;
95
+ }
96
+ }
97
+ else{
98
+ break;
99
+ }
100
+ }
101
+
102
+ BOOST_CONTAINER_SEGMENTED_UNROLL(4)
103
+ while(cur != last) {
104
+ if(pred(*cur)) {
105
+ if (dst_cur == dst_last)
106
+ break;
107
+ *dst_cur = *cur;
108
+ ++dst_cur;
109
+ }
110
+ ++cur;
111
+ }
112
+ end:
113
+
114
+ return segduo<RASrcIter, RADstIter>(cur, dst_cur);
115
+ }
116
+
117
+ template <class SrcIter, class Sent, class SegDstIter, class Pred, class SrcCat>
118
+ segduo<SrcIter, SegDstIter> segmented_copy_if_dst_bounded
119
+ (SrcIter first, Sent last, SegDstIter dst_first, SegDstIter dst_last, Pred pred,
120
+ segmented_iterator_tag, SrcCat)
121
+ {
122
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
123
+ typedef typename dst_traits::local_iterator dst_local_iterator;
124
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
125
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
126
+
127
+ dst_segment_iterator dsfirst = dst_traits::segment(dst_first);
128
+ const dst_segment_iterator dslast = dst_traits::segment(dst_last);
129
+
130
+ if(dsfirst == dslast) {
131
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_if_dst_bounded)
132
+ (first, last, dst_traits::local(dst_first), dst_traits::local(dst_last), pred, dst_is_local_seg_t(), SrcCat());
133
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(dsfirst, r.second));
134
+ }
135
+ else {
136
+ segduo<SrcIter, dst_local_iterator> r = (segmented_copy_if_dst_bounded)
137
+ (first, last, dst_traits::local(dst_first), dst_traits::end(dsfirst), pred, dst_is_local_seg_t(), SrcCat());
138
+ if (r.first != last) {
139
+ first = r.first;
140
+
141
+ for (++dsfirst; dsfirst != dslast; ++dsfirst) {
142
+ r = (segmented_copy_if_dst_bounded)
143
+ (first, last, dst_traits::begin(dsfirst), dst_traits::end(dsfirst), pred, dst_is_local_seg_t(), SrcCat());
144
+ first = r.first;
145
+ if (first == last)
146
+ return segduo<SrcIter, SegDstIter>(first, dst_traits::compose(dsfirst, r.second));
147
+ }
148
+
149
+ r = (segmented_copy_if_dst_bounded)
150
+ (first, last, dst_traits::begin(dslast), dst_traits::local(dst_last), pred, dst_is_local_seg_t(), SrcCat());
151
+ }
152
+ return segduo<SrcIter, SegDstIter>(r.first, dst_traits::compose(dsfirst, r.second));
153
+ }
154
+ }
155
+
156
+ //////////////////////////////////////////////////////////////////////////////
157
+ // Destination dispatch: routes to bounded helper.
158
+ // Non-segmented destination: single unbounded call (unreachable_sentinel_t).
159
+ // Segmented destination: loop over destination segments, bounded per segment.
160
+ //////////////////////////////////////////////////////////////////////////////
161
+
162
+ template <class SrcIter, class Sent, class DstIter, class Pred, class Cat>
163
+ BOOST_CONTAINER_FORCEINLINE DstIter segmented_copy_if_dst_dispatch
164
+ (SrcIter first, Sent last, DstIter result, Pred pred,
165
+ const non_segmented_iterator_tag &, Cat)
166
+ {
167
+ return (segmented_copy_if_dst_bounded)
168
+ (first, last, result, unreachable_sentinel_t(), pred, non_segmented_iterator_tag(), Cat()).second;
169
+ }
170
+
171
+ template <class SrcIter, class Sent, class SegDstIter, class Pred, class Cat>
172
+ SegDstIter segmented_copy_if_dst_dispatch
173
+ (SrcIter first, Sent last, SegDstIter result, Pred pred,
174
+ const segmented_iterator_tag &, Cat)
175
+ {
176
+ typedef segmented_iterator_traits<SegDstIter> dst_traits;
177
+ typedef typename dst_traits::local_iterator dst_local_iterator;
178
+ typedef typename dst_traits::segment_iterator dst_segment_iterator;
179
+ typedef typename segmented_iterator_traits<dst_local_iterator>::is_segmented_iterator dst_is_local_seg_t;
180
+
181
+ if(first == last)
182
+ return result;
183
+
184
+ dst_segment_iterator dst_seg = dst_traits::segment(result);
185
+ dst_local_iterator dst_local = dst_traits::local(result);
186
+
187
+ while (1) {
188
+ const segduo<SrcIter, dst_local_iterator> r = (segmented_copy_if_dst_bounded)
189
+ (first, last, dst_local, dst_traits::end(dst_seg), pred, dst_is_local_seg_t(), Cat());
190
+ first = r.first;
191
+ if(first != last) {
192
+ ++dst_seg;
193
+ dst_local = dst_traits::begin(dst_seg);
194
+ }
195
+ else {
196
+ return dst_traits::compose(dst_seg, r.second);
197
+ }
198
+ }
199
+ }
200
+
201
+ //////////////////////////////////////////////////////////////////////////////
202
+ // Source dispatch: walks the source (read pointer) segments
203
+ //////////////////////////////////////////////////////////////////////////////
204
+
205
+ template <class SrcIter, class Sent, class OutIter, class Pred, class Tag, class Cat>
206
+ BOOST_CONTAINER_FORCEINLINE
207
+ typename algo_enable_if_c<
208
+ !Tag::value || is_sentinel<Sent, SrcIter>::value, OutIter>::type
209
+ segmented_copy_if_dispatch(SrcIter first, Sent last, OutIter result, Pred pred, Tag, Cat)
210
+ {
211
+ #if !defined(BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO)
212
+ typedef segmented_iterator_traits<OutIter> dst_traits;
213
+ return (segmented_copy_if_dst_dispatch)
214
+ (first, last, result, pred, typename dst_traits::is_segmented_iterator(), Cat());
215
+ #else
216
+ return (segmented_copy_if_dst_dispatch)
217
+ (first, last, result, pred, non_segmented_iterator_tag(), Cat());
218
+ #endif
219
+ }
220
+
221
+ template <class SegIter, class OutIter, class Pred, class Cat>
222
+ OutIter segmented_copy_if_dispatch
223
+ (SegIter first, SegIter last, OutIter result, Pred pred, segmented_iterator_tag, Cat)
224
+ {
225
+ typedef segmented_iterator_traits<SegIter> src_traits;
226
+ typedef typename src_traits::local_iterator src_local_iterator;
227
+ typedef typename src_traits::segment_iterator src_segment_iterator;
228
+ typedef typename segmented_iterator_traits<src_local_iterator>::is_segmented_iterator src_is_local_seg_t;
229
+ typedef typename iterator_traits<src_local_iterator>::iterator_category src_local_cat_t;
230
+
231
+ src_segment_iterator sfirst = src_traits::segment(first);
232
+ const src_segment_iterator slast = src_traits::segment(last);
233
+
234
+ if(sfirst == slast) {
235
+ return (segmented_copy_if_dispatch)
236
+ (src_traits::local(first), src_traits::local(last), result, pred, src_is_local_seg_t(), src_local_cat_t());
237
+ }
238
+ else {
239
+ result = (segmented_copy_if_dispatch)
240
+ (src_traits::local(first), src_traits::end(sfirst), result, pred, src_is_local_seg_t(), src_local_cat_t());
241
+
242
+ for(++sfirst; sfirst != slast; ++sfirst)
243
+ result = (segmented_copy_if_dispatch)
244
+ (src_traits::begin(sfirst), src_traits::end(sfirst), result, pred, src_is_local_seg_t(), src_local_cat_t());
245
+
246
+ return (segmented_copy_if_dispatch)
247
+ (src_traits::begin(slast), src_traits::local(last), result, pred, src_is_local_seg_t(), src_local_cat_t());
248
+ }
249
+ }
250
+
251
+ } // namespace detail_algo
252
+
253
+ //! Copies elements satisfying \c pred from [first, last) to the range
254
+ //! beginning at \c result. Segmentation is exploited on both input and
255
+ //! output ranges.
256
+ template <class InIter, class Sent, class OutIter, class Pred>
257
+ BOOST_CONTAINER_FORCEINLINE
258
+ OutIter segmented_copy_if(InIter first, Sent last, OutIter result, Pred pred)
259
+ {
260
+ typedef segmented_iterator_traits<InIter> traits;
261
+ return detail_algo::segmented_copy_if_dispatch(first, last, result, pred,
262
+ typename traits::is_segmented_iterator(), typename iterator_traits<InIter>::iterator_category());
263
+ }
264
+
265
+ } // namespace container
266
+ } // namespace boost
267
+
268
+ #include <boost/container/detail/config_end.hpp>
269
+
270
+ #endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_COPY_IF_HPP