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