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.
- checksums.yaml +4 -4
- data/CHANGELOG +37 -15
- data/build/cxx_tests.rb +2 -0
- data/build/support/cxx_dependency_map.rb +3 -63
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Shared/ApiServerUtils.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/apache2_module/Hooks.cpp +13 -0
- data/src/apache2_module/Utils.h +14 -0
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/FileTools/FileManip.cpp +27 -3
- data/src/cxx_supportlib/InstanceDirectory.h +30 -3
- data/src/cxx_supportlib/ServerKit/Errors.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
- data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
- data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
- data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
- data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
- data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
- data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
- data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
- data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
- data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
- data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
- data/src/nginx_module/ContentHandler.c +35 -0
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +6 -6
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
- data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +12 -1
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- metadata +73 -8
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
- /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
|