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
data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
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_ITERATOR_TRAITS_HPP
|
|
11
|
+
#define BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ITERATOR_TRAITS_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
|
+
|
|
25
|
+
#include <boost/move/utility_core.hpp>
|
|
26
|
+
|
|
27
|
+
namespace boost {
|
|
28
|
+
namespace container {
|
|
29
|
+
|
|
30
|
+
//! Tag type indicating a segmented iterator.
|
|
31
|
+
struct segmented_iterator_tag
|
|
32
|
+
{
|
|
33
|
+
static const bool value = true;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//! Tag type indicating a non-segmented (flat) iterator.
|
|
37
|
+
struct non_segmented_iterator_tag
|
|
38
|
+
{
|
|
39
|
+
static const bool value = false;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//! Sentinel whose comparison with any iterator always yields false (not equal).
|
|
43
|
+
//! Passes through segmented_remove_if_result_bounded to express an unbounded
|
|
44
|
+
//! destination, letting the compiler eliminate the dead destination-full branch.
|
|
45
|
+
template<class T1, class T2>
|
|
46
|
+
struct segduo
|
|
47
|
+
{
|
|
48
|
+
T1 first;
|
|
49
|
+
T2 second;
|
|
50
|
+
|
|
51
|
+
BOOST_CONTAINER_FORCEINLINE segduo() {}
|
|
52
|
+
|
|
53
|
+
template<class U1, class U2>
|
|
54
|
+
BOOST_CONTAINER_FORCEINLINE segduo(const U1 &f, const U2 &s) : first(f), second(s) {}
|
|
55
|
+
|
|
56
|
+
template<class U1, class U2>
|
|
57
|
+
BOOST_CONTAINER_FORCEINLINE segduo(const segduo<U1, U2> &sd) : first(sd.first), second(sd.second) {}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
template<class T1, class T2, class T3>
|
|
61
|
+
struct segtrio
|
|
62
|
+
{
|
|
63
|
+
T1 first;
|
|
64
|
+
T2 second;
|
|
65
|
+
T3 third;
|
|
66
|
+
|
|
67
|
+
BOOST_CONTAINER_FORCEINLINE segtrio() {}
|
|
68
|
+
|
|
69
|
+
template<class U1, class U2, class U3>
|
|
70
|
+
BOOST_CONTAINER_FORCEINLINE segtrio(const U1 &f, const U2 &s, const U3 &t)
|
|
71
|
+
: first(f), second(s), third(t) {}
|
|
72
|
+
|
|
73
|
+
template<class U1, class U2, class U3>
|
|
74
|
+
BOOST_CONTAINER_FORCEINLINE segtrio(const segtrio<U1, U2, U3> &sd)
|
|
75
|
+
: first(sd.first), second(sd.second), third(sd.third) {}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
struct unreachable_sentinel_t
|
|
79
|
+
{
|
|
80
|
+
template <class It>
|
|
81
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator==(const It&, unreachable_sentinel_t) { return false; }
|
|
82
|
+
|
|
83
|
+
template <class It>
|
|
84
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator==(unreachable_sentinel_t, const It&) { return false; }
|
|
85
|
+
|
|
86
|
+
template <class It>
|
|
87
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const It&, unreachable_sentinel_t) { return true; }
|
|
88
|
+
|
|
89
|
+
template <class It>
|
|
90
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator!=(unreachable_sentinel_t, const It&) { return true; }
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
//! Disambiguator tag passed by the dual-RA fast-path overload of certain
|
|
94
|
+
//! bounded helpers (e.g. segmented_copy_if_dst_bounded,
|
|
95
|
+
//! segmented_remove_copy_if_dst_bounded) when it has decided that the
|
|
96
|
+
//! remaining source does not fit the destination capacity and a real
|
|
97
|
+
//! bounded scan is required. The tag's only role is to perturb the
|
|
98
|
+
//! signature of the recursive call so that the dual-RA overload itself
|
|
99
|
+
//! cannot re-match: only the unrolled / generic terminal overloads remain
|
|
100
|
+
//! viable, leaving the random-access category of both iterators intact.
|
|
101
|
+
struct dual_ra_skip_t {};
|
|
102
|
+
|
|
103
|
+
namespace detail_algo {
|
|
104
|
+
|
|
105
|
+
//! Default less-than function object used by segmented algorithms when the
|
|
106
|
+
//! user does not provide an explicit comparator. Centralised here to avoid
|
|
107
|
+
//! duplicating the same struct across every algorithm header.
|
|
108
|
+
struct segmented_default_less
|
|
109
|
+
{
|
|
110
|
+
template <class T>
|
|
111
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
112
|
+
bool operator()(const T& a, const T& b) const { return a < b; }
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
//! Proxy-safe "equal to *it" predicate. Holds the iterator by value and
|
|
116
|
+
//! re-dereferences on every invocation, so a prvalue proxy returned by
|
|
117
|
+
//! operator*() only lives for the full expression of the comparison and
|
|
118
|
+
//! never outlives it. This avoids the lifetime hazard of caching *it in
|
|
119
|
+
//! a const-reference member (as equal_to_value would).
|
|
120
|
+
template <class Iter>
|
|
121
|
+
struct equal_to_deref
|
|
122
|
+
{
|
|
123
|
+
Iter it_;
|
|
124
|
+
|
|
125
|
+
BOOST_CONTAINER_FORCEINLINE explicit equal_to_deref(Iter it)
|
|
126
|
+
: it_(it)
|
|
127
|
+
{}
|
|
128
|
+
|
|
129
|
+
template <class U>
|
|
130
|
+
BOOST_CONTAINER_FORCEINLINE bool operator()(const U &u) const
|
|
131
|
+
{ return u == *it_; }
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
template <bool B> struct void_if_true;
|
|
135
|
+
template <> struct void_if_true<true> { typedef void type; };
|
|
136
|
+
|
|
137
|
+
template <class T> struct make_void { typedef void type; };
|
|
138
|
+
|
|
139
|
+
template <bool, class T = void> struct algo_enable_if_c {};
|
|
140
|
+
template <class T> struct algo_enable_if_c<true, T> { typedef T type; };
|
|
141
|
+
|
|
142
|
+
template <class T, class Enable = void>
|
|
143
|
+
struct has_iterator_category { static const bool value = false; };
|
|
144
|
+
|
|
145
|
+
template <class T>
|
|
146
|
+
struct has_iterator_category<T, typename make_void<typename T::iterator_category>::type>
|
|
147
|
+
{ static const bool value = true; };
|
|
148
|
+
|
|
149
|
+
template <class T>
|
|
150
|
+
struct constref_generator
|
|
151
|
+
{
|
|
152
|
+
const T& value;
|
|
153
|
+
BOOST_CONTAINER_FORCEINLINE explicit constref_generator(const T& v)
|
|
154
|
+
: value(v)
|
|
155
|
+
{}
|
|
156
|
+
|
|
157
|
+
BOOST_CONTAINER_FORCEINLINE const T& operator()() const { return value; }
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
161
|
+
// Transfer helper: copy (Move=false) or move (Move=true) a single element.
|
|
162
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
163
|
+
|
|
164
|
+
template <bool> struct transfer_op;
|
|
165
|
+
template <> struct transfer_op<false>
|
|
166
|
+
{
|
|
167
|
+
template <class D, class S>
|
|
168
|
+
BOOST_CONTAINER_FORCEINLINE static void apply(D& d, S& s) { d = s; }
|
|
169
|
+
};
|
|
170
|
+
template <> struct transfer_op<true>
|
|
171
|
+
{
|
|
172
|
+
template <class D, class S>
|
|
173
|
+
BOOST_CONTAINER_FORCEINLINE static void apply(D& d, S& s) { d = boost::move(s); }
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
} // namespace detail_algo
|
|
177
|
+
|
|
178
|
+
//! Traits class to detect and decompose segmented iterators.
|
|
179
|
+
//!
|
|
180
|
+
//! The default definition marks all iterators as non-segmented.
|
|
181
|
+
//! Specializations for segmented iterator types must provide:
|
|
182
|
+
//!
|
|
183
|
+
//! typedef segmented_iterator_tag is_segmented_iterator;
|
|
184
|
+
//! typedef <implementation-defined> segment_iterator;
|
|
185
|
+
//! typedef <implementation-defined> local_iterator;
|
|
186
|
+
//!
|
|
187
|
+
//! static segment_iterator segment(Iterator it);
|
|
188
|
+
//! static local_iterator local(Iterator it);
|
|
189
|
+
//! static Iterator compose(segment_iterator s, local_iterator l);
|
|
190
|
+
//! static local_iterator begin(segment_iterator s);
|
|
191
|
+
//! static local_iterator end(segment_iterator s);
|
|
192
|
+
//!
|
|
193
|
+
//! An explicit specialization is not required when the iterator type
|
|
194
|
+
//! provides the intrusive interface:
|
|
195
|
+
//!
|
|
196
|
+
//! typedef segmented_iterator_tag is_segmented_iterator;
|
|
197
|
+
//! typedef <implementation-defined> segment_iterator;
|
|
198
|
+
//! typedef <implementation-defined> local_iterator;
|
|
199
|
+
//! segment_iterator segment() const;
|
|
200
|
+
//! local_iterator local() const;
|
|
201
|
+
//! Iterator(segment_iterator s, local_iterator l); // composing constructor
|
|
202
|
+
//!
|
|
203
|
+
//! and segment_iterator provides begin()/end() returning local_iterator.
|
|
204
|
+
//!
|
|
205
|
+
//! Based on: M. Austern, "Segmented Iterators and Hierarchical Algorithms"
|
|
206
|
+
template <class Iterator>
|
|
207
|
+
struct segmented_iterator_traits
|
|
208
|
+
{
|
|
209
|
+
typedef non_segmented_iterator_tag is_segmented_iterator;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
//! Detects whether \c Sent is a true sentinel for \c Iter.
|
|
213
|
+
//! A sentinel is a type that is not the same as the iterator and
|
|
214
|
+
//! does not model an iterator (lacks \c iterator_category).
|
|
215
|
+
//! When \c is_sentinel is false, algorithms use the \c (Iter, Iter)
|
|
216
|
+
//! overload, avoiding extra template instantiations from mixed
|
|
217
|
+
//! iterator types such as \c iterator / \c const_iterator.
|
|
218
|
+
template <class Sent, class Iter>
|
|
219
|
+
struct is_sentinel
|
|
220
|
+
{
|
|
221
|
+
static const bool value = !detail_algo::has_iterator_category<Sent>::value;
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
template <class Iter>
|
|
225
|
+
struct is_sentinel<Iter, Iter>
|
|
226
|
+
{
|
|
227
|
+
static const bool value = false;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
namespace detail_algo {
|
|
231
|
+
|
|
232
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
233
|
+
// sent_filter: when [first, last) is closed by a true sentinel
|
|
234
|
+
// (Sent != Iter), segment walkers cannot decompose Sent and bidirectional
|
|
235
|
+
// algorithms cannot step backwards from it; in that case both the iterator
|
|
236
|
+
// category and the segmentation tag are downgraded to
|
|
237
|
+
// (std::forward_iterator_tag, non_segmented_iterator_tag) so that algorithms
|
|
238
|
+
// route through the flat, forward-only path. When Sent == Iter, the
|
|
239
|
+
// iterator's natural category and segmentation are preserved.
|
|
240
|
+
//
|
|
241
|
+
// Used by bidirectional/segmented algorithms (e.g. segmented_partition,
|
|
242
|
+
// segmented_find_last_if) that need a single dispatch point covering both
|
|
243
|
+
// the (Iter, Iter) and (Iter, Sentinel) call signatures.
|
|
244
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
245
|
+
|
|
246
|
+
template <class Iter, class Sent, bool = is_sentinel<Sent, Iter>::value>
|
|
247
|
+
struct sent_filter
|
|
248
|
+
{
|
|
249
|
+
typedef std::forward_iterator_tag cat_t;
|
|
250
|
+
typedef non_segmented_iterator_tag seg_t;
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
template <class Iter>
|
|
254
|
+
struct sent_filter<Iter, Iter, false>
|
|
255
|
+
{
|
|
256
|
+
typedef typename boost::container::iterator_traits<Iter>
|
|
257
|
+
::iterator_category cat_t;
|
|
258
|
+
typedef typename segmented_iterator_traits<Iter>
|
|
259
|
+
::is_segmented_iterator seg_t;
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
template <class Iter, class Sent>
|
|
263
|
+
struct sent_filter<Iter, Sent, false>
|
|
264
|
+
: public sent_filter<Iter, Iter, false>
|
|
265
|
+
{};
|
|
266
|
+
|
|
267
|
+
// Compile-time metafunction that unwraps a (possibly recursively) segmented
|
|
268
|
+
// iterator to its deepest non-segmented `local_iterator` type.
|
|
269
|
+
//
|
|
270
|
+
// deepest_local_iterator<It>::type == It (non-segmented)
|
|
271
|
+
// deepest_local_iterator<It>::type ==
|
|
272
|
+
// deepest_local_iterator<segmented_iterator_traits<It>::local_iterator>::type
|
|
273
|
+
// (segmented)
|
|
274
|
+
//
|
|
275
|
+
// Used by segmented algorithms that need to hold cross-segment state of
|
|
276
|
+
// iterator type rather than element type (e.g. a "previous element" pointer
|
|
277
|
+
// that survives the boundary between sub-ranges), by reducing that state to a
|
|
278
|
+
// single unified type across all levels of recursion.
|
|
279
|
+
template <bool IsSeg, class It>
|
|
280
|
+
struct deepest_local_iterator_impl;
|
|
281
|
+
|
|
282
|
+
template <class It>
|
|
283
|
+
struct deepest_local_iterator_impl<false, It>
|
|
284
|
+
{
|
|
285
|
+
typedef It type;
|
|
286
|
+
BOOST_CONTAINER_FORCEINLINE static type get(It it) { return it; }
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
template <class It>
|
|
290
|
+
struct deepest_local_iterator_impl<true, It>
|
|
291
|
+
{
|
|
292
|
+
private:
|
|
293
|
+
|
|
294
|
+
typedef typename segmented_iterator_traits<It>::local_iterator local_t;
|
|
295
|
+
typedef deepest_local_iterator_impl
|
|
296
|
+
< segmented_iterator_traits<local_t>::is_segmented_iterator::value
|
|
297
|
+
, local_t> next_layer_t;
|
|
298
|
+
|
|
299
|
+
public:
|
|
300
|
+
|
|
301
|
+
typedef typename next_layer_t::type type;
|
|
302
|
+
|
|
303
|
+
BOOST_CONTAINER_FORCEINLINE static typename next_layer_t::type get(It it)
|
|
304
|
+
{ return next_layer_t::get(segmented_iterator_traits<It>::local(it)); }
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
template <class It>
|
|
308
|
+
struct deepest_local_iterator
|
|
309
|
+
{
|
|
310
|
+
typedef deepest_local_iterator_impl
|
|
311
|
+
< segmented_iterator_traits<It>::is_segmented_iterator::value
|
|
312
|
+
, It> next_layer_t;
|
|
313
|
+
|
|
314
|
+
public:
|
|
315
|
+
|
|
316
|
+
typedef typename next_layer_t::type type;
|
|
317
|
+
|
|
318
|
+
BOOST_CONTAINER_FORCEINLINE static typename next_layer_t::type get(It it)
|
|
319
|
+
{ return next_layer_t::get(it); }
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
} // namespace detail_algo
|
|
323
|
+
|
|
324
|
+
} // namespace container
|
|
325
|
+
} // namespace boost
|
|
326
|
+
|
|
327
|
+
#include <boost/container/detail/config_end.hpp>
|
|
328
|
+
|
|
329
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
330
|
+
// BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO
|
|
331
|
+
//
|
|
332
|
+
// When defined, segmented algorithms that write to an output iterator will
|
|
333
|
+
// NOT exploit segmentation on the output side. Only input (source) iterator
|
|
334
|
+
// segmentation is used. This is useful for benchmarking the advantage of
|
|
335
|
+
// the segmented output optimisation in isolation.
|
|
336
|
+
//
|
|
337
|
+
// Define BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO before including any
|
|
338
|
+
// segmented algorithm header to disable the optimisation.
|
|
339
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
340
|
+
|
|
341
|
+
//#define BOOST_CONTAINER_DISABLE_MULTI_SEGMENTED_ALGO
|
|
342
|
+
|
|
343
|
+
// When defined, segmented algorithms that count elements (e.g. segmented_count,
|
|
344
|
+
// segmented_count_if) will use a branchless counting strategy in their
|
|
345
|
+
// innermost loops, incrementing the count by the boolean result of the
|
|
346
|
+
// predicate rather than testing the predicate result in a branch and conditionally
|
|
347
|
+
// incrementing. This can improve performance on some platforms by avoiding branch mispredictions,
|
|
348
|
+
// at the cost of potentially increased instruction count and/or reduced vectorization opportunities.
|
|
349
|
+
//
|
|
350
|
+
// However, the optimal strategy is highly platform- and algorithm-specific, so this is disabled by default.
|
|
351
|
+
// There are regressions on some algorithms and platforms when this is enabled, and the performance impact
|
|
352
|
+
// varies widely across different scenarios.
|
|
353
|
+
//
|
|
354
|
+
//#define BOOST_CONTAINER_SEGMENTED_COUNT_BRANCHLESS
|
|
355
|
+
|
|
356
|
+
//#define BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL
|
|
357
|
+
//#define BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL
|
|
358
|
+
|
|
359
|
+
#if defined(BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL) && defined (BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL)
|
|
360
|
+
#error "Cannot define both BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL and BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL"
|
|
361
|
+
#endif
|
|
362
|
+
|
|
363
|
+
#if !defined(BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL) && !defined (BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL)
|
|
364
|
+
#if defined(BOOST_CLANG)
|
|
365
|
+
//Let clang decide when to unroll loops, as it can auto-vectorize more aggressively when unrolling is disabled.
|
|
366
|
+
#define BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL
|
|
367
|
+
#else
|
|
368
|
+
#define BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL
|
|
369
|
+
#endif
|
|
370
|
+
#endif
|
|
371
|
+
|
|
372
|
+
#if defined(BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL)
|
|
373
|
+
#define BOOST_CONTAINER_SEGMENTED_UNROLL(N) BOOST_CONTAINER_UNROLL(N)
|
|
374
|
+
#define BOOST_CONTAINER_SEGMENTED_AUTO_UNROLL BOOST_CONTAINER_AUTO_UNROLL
|
|
375
|
+
#elif defined(BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL)
|
|
376
|
+
#define BOOST_CONTAINER_SEGMENTED_UNROLL(N)
|
|
377
|
+
#define BOOST_CONTAINER_SEGMENTED_AUTO_UNROLL
|
|
378
|
+
#else
|
|
379
|
+
#error "Must define either BOOST_CONTAINER_SEGMENTED_ENABLE_PRAGMA_UNROLL or BOOST_CONTAINER_SEGMENTED_DISABLE_PRAGMA_UNROLL"
|
|
380
|
+
#endif
|
|
381
|
+
|
|
382
|
+
#endif // BOOST_CONTAINER_EXPERIMENTAL_SEGMENTED_ITERATOR_TRAITS_HPP
|