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