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
|
@@ -76,6 +76,54 @@ namespace container {
|
|
|
76
76
|
|
|
77
77
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
78
78
|
|
|
79
|
+
namespace dtl {
|
|
80
|
+
|
|
81
|
+
template<class Alloc, bool AllocV0 = (version<Alloc>::value == 0)>
|
|
82
|
+
struct is_version_0_alloc_and_trivially_destructible
|
|
83
|
+
: boost::move_detail::is_trivially_destructible<typename Alloc::value_type>
|
|
84
|
+
{ };
|
|
85
|
+
|
|
86
|
+
template<bool AllocV0>
|
|
87
|
+
struct is_version_0_alloc_and_trivially_destructible<void, AllocV0>
|
|
88
|
+
{
|
|
89
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
template<class Alloc>
|
|
93
|
+
struct is_version_0_alloc_and_trivially_destructible<Alloc, false>
|
|
94
|
+
{
|
|
95
|
+
BOOST_STATIC_CONSTEXPR bool value = false;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
} //namespace dtl {
|
|
100
|
+
|
|
101
|
+
template<class SizeType, class LimitSizeType>
|
|
102
|
+
struct vec_on_type_overflow
|
|
103
|
+
{
|
|
104
|
+
BOOST_CONTAINER_STATIC_ASSERT(sizeof(SizeType) >= sizeof(LimitSizeType));
|
|
105
|
+
|
|
106
|
+
typedef dtl::limit_by_stored_size_type<SizeType, LimitSizeType> check_t;
|
|
107
|
+
struct throw_length_error
|
|
108
|
+
{
|
|
109
|
+
const char * const m_str;
|
|
110
|
+
|
|
111
|
+
throw_length_error(const char* str)
|
|
112
|
+
: m_str(str)
|
|
113
|
+
{}
|
|
114
|
+
|
|
115
|
+
void operator()()
|
|
116
|
+
{
|
|
117
|
+
boost::container::throw_length_error(m_str);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
static void throw_length(SizeType v, const char *str)
|
|
122
|
+
{
|
|
123
|
+
check_t::call_if_overflows(v, throw_length_error(str));
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
79
127
|
|
|
80
128
|
template <class Pointer, bool IsConst>
|
|
81
129
|
class vec_iterator
|
|
@@ -121,15 +169,15 @@ class vec_iterator
|
|
|
121
169
|
, nat>::type nonconst_iterator;
|
|
122
170
|
|
|
123
171
|
public:
|
|
124
|
-
|
|
172
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
125
173
|
const Pointer &get_ptr() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
126
174
|
{ return m_ptr; }
|
|
127
175
|
|
|
128
|
-
|
|
176
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
129
177
|
Pointer &get_ptr() BOOST_NOEXCEPT_OR_NOTHROW
|
|
130
178
|
{ return m_ptr; }
|
|
131
179
|
|
|
132
|
-
|
|
180
|
+
BOOST_CONTAINER_FORCEINLINE explicit vec_iterator(Pointer ptr) BOOST_NOEXCEPT_OR_NOTHROW
|
|
133
181
|
: m_ptr(ptr)
|
|
134
182
|
{}
|
|
135
183
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
@@ -137,93 +185,93 @@ class vec_iterator
|
|
|
137
185
|
public:
|
|
138
186
|
|
|
139
187
|
//Constructors
|
|
140
|
-
|
|
188
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator() BOOST_NOEXCEPT_OR_NOTHROW
|
|
141
189
|
: m_ptr() //Value initialization to achieve "null iterators" (N3644)
|
|
142
190
|
{}
|
|
143
191
|
|
|
144
|
-
|
|
192
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW
|
|
145
193
|
: m_ptr(other.get_ptr())
|
|
146
194
|
{}
|
|
147
195
|
|
|
148
|
-
|
|
196
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator(const nonconst_iterator &other) BOOST_NOEXCEPT_OR_NOTHROW
|
|
149
197
|
: m_ptr(other.get_ptr())
|
|
150
198
|
{}
|
|
151
199
|
|
|
152
|
-
|
|
200
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator & operator=(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW
|
|
153
201
|
{ m_ptr = other.get_ptr(); return *this; }
|
|
154
202
|
|
|
155
203
|
//Pointer like operators
|
|
156
|
-
|
|
204
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
157
205
|
reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
158
206
|
{ BOOST_ASSERT(!!m_ptr); return *m_ptr; }
|
|
159
207
|
|
|
160
|
-
|
|
208
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
161
209
|
pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
162
210
|
{ return m_ptr; }
|
|
163
211
|
|
|
164
|
-
|
|
212
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
165
213
|
reference operator[](difference_type off) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
166
214
|
{ BOOST_ASSERT(!!m_ptr); return m_ptr[off]; }
|
|
167
215
|
|
|
168
216
|
//Increment / Decrement
|
|
169
|
-
|
|
217
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW
|
|
170
218
|
{ BOOST_ASSERT(!!m_ptr); ++m_ptr; return *this; }
|
|
171
219
|
|
|
172
|
-
|
|
220
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW
|
|
173
221
|
{ BOOST_ASSERT(!!m_ptr); return vec_iterator(m_ptr++); }
|
|
174
222
|
|
|
175
|
-
|
|
223
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW
|
|
176
224
|
{ BOOST_ASSERT(!!m_ptr); --m_ptr; return *this; }
|
|
177
225
|
|
|
178
|
-
|
|
226
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW
|
|
179
227
|
{ BOOST_ASSERT(!!m_ptr); return vec_iterator(m_ptr--); }
|
|
180
228
|
|
|
181
229
|
//Arithmetic
|
|
182
|
-
|
|
230
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator& operator+=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
|
|
183
231
|
{ BOOST_ASSERT(m_ptr || !off); m_ptr += off; return *this; }
|
|
184
232
|
|
|
185
|
-
|
|
233
|
+
BOOST_CONTAINER_FORCEINLINE vec_iterator& operator-=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
|
|
186
234
|
{ BOOST_ASSERT(m_ptr || !off); m_ptr -= off; return *this; }
|
|
187
235
|
|
|
188
|
-
|
|
236
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
189
237
|
friend vec_iterator operator+(const vec_iterator &x, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
|
|
190
238
|
{ BOOST_ASSERT(x.m_ptr || !off); return vec_iterator(x.m_ptr+off); }
|
|
191
239
|
|
|
192
|
-
|
|
240
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
193
241
|
friend vec_iterator operator+(difference_type off, vec_iterator right) BOOST_NOEXCEPT_OR_NOTHROW
|
|
194
242
|
{ BOOST_ASSERT(right.m_ptr || !off); right.m_ptr += off; return right; }
|
|
195
243
|
|
|
196
|
-
|
|
244
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
197
245
|
friend vec_iterator operator-(vec_iterator left, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW
|
|
198
246
|
{ BOOST_ASSERT(left.m_ptr || !off); left.m_ptr -= off; return left; }
|
|
199
247
|
|
|
200
248
|
//Difference
|
|
201
|
-
|
|
249
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
202
250
|
friend difference_type operator-(const vec_iterator &left, const vec_iterator& right) BOOST_NOEXCEPT_OR_NOTHROW
|
|
203
251
|
{ return left.m_ptr - right.m_ptr; }
|
|
204
252
|
|
|
205
253
|
//Comparison operators
|
|
206
|
-
|
|
254
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
207
255
|
friend bool operator== (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
208
256
|
{ return l.m_ptr == r.m_ptr; }
|
|
209
257
|
|
|
210
|
-
|
|
258
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
211
259
|
friend bool operator!= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
212
260
|
{ return l.m_ptr != r.m_ptr; }
|
|
213
261
|
|
|
214
|
-
|
|
262
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
215
263
|
friend bool operator< (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
216
264
|
{ return l.m_ptr < r.m_ptr; }
|
|
217
265
|
|
|
218
|
-
|
|
266
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
219
267
|
friend bool operator<= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
220
268
|
{ return l.m_ptr <= r.m_ptr; }
|
|
221
269
|
|
|
222
|
-
|
|
270
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
223
271
|
friend bool operator> (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
224
272
|
{ return l.m_ptr > r.m_ptr; }
|
|
225
273
|
|
|
226
|
-
|
|
274
|
+
BOOST_CONTAINER_NODISCARD BOOST_CONTAINER_FORCEINLINE
|
|
227
275
|
friend bool operator>= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW
|
|
228
276
|
{ return l.m_ptr >= r.m_ptr; }
|
|
229
277
|
};
|
|
@@ -234,7 +282,7 @@ struct vector_insert_ordered_cursor
|
|
|
234
282
|
typedef typename iterator_traits<BiDirPosConstIt>::value_type size_type;
|
|
235
283
|
typedef typename iterator_traits<BiDirValueIt>::reference reference;
|
|
236
284
|
|
|
237
|
-
|
|
285
|
+
BOOST_CONTAINER_FORCEINLINE vector_insert_ordered_cursor(BiDirPosConstIt posit, BiDirValueIt valueit)
|
|
238
286
|
: last_position_it(posit), last_value_it(valueit)
|
|
239
287
|
{}
|
|
240
288
|
|
|
@@ -248,10 +296,10 @@ struct vector_insert_ordered_cursor
|
|
|
248
296
|
}
|
|
249
297
|
}
|
|
250
298
|
|
|
251
|
-
|
|
299
|
+
BOOST_CONTAINER_FORCEINLINE size_type get_pos() const
|
|
252
300
|
{ return *last_position_it; }
|
|
253
301
|
|
|
254
|
-
|
|
302
|
+
BOOST_CONTAINER_FORCEINLINE reference get_val()
|
|
255
303
|
{ return *last_value_it; }
|
|
256
304
|
|
|
257
305
|
BiDirPosConstIt last_position_it;
|
|
@@ -259,11 +307,11 @@ struct vector_insert_ordered_cursor
|
|
|
259
307
|
};
|
|
260
308
|
|
|
261
309
|
template<class Pointer, bool IsConst>
|
|
262
|
-
|
|
310
|
+
BOOST_CONTAINER_FORCEINLINE const Pointer &vector_iterator_get_ptr(const vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
|
|
263
311
|
{ return it.get_ptr(); }
|
|
264
312
|
|
|
265
313
|
template<class Pointer, bool IsConst>
|
|
266
|
-
|
|
314
|
+
BOOST_CONTAINER_FORCEINLINE Pointer &get_ptr(vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
|
|
267
315
|
{ return it.get_ptr(); }
|
|
268
316
|
|
|
269
317
|
struct initial_capacity_t {};
|
|
@@ -321,10 +369,8 @@ struct vector_alloc_holder
|
|
|
321
369
|
template<class SizeType>
|
|
322
370
|
void do_initial_capacity(SizeType initial_capacity)
|
|
323
371
|
{
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
else if (initial_capacity) {
|
|
372
|
+
vec_on_type_overflow<SizeType, size_type>::throw_length(initial_capacity, "get_next_capacity, allocator's max size reached");
|
|
373
|
+
if (initial_capacity) {
|
|
328
374
|
pointer reuse = pointer();
|
|
329
375
|
size_type final_cap = static_cast<size_type>(initial_capacity);
|
|
330
376
|
m_start = this->allocation_command(allocate_new, final_cap, final_cap, reuse);
|
|
@@ -335,10 +381,8 @@ struct vector_alloc_holder
|
|
|
335
381
|
template<class SizeType>
|
|
336
382
|
void do_maybe_initial_capacity(pointer p, SizeType initial_capacity)
|
|
337
383
|
{
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
else if (p) {
|
|
384
|
+
vec_on_type_overflow<SizeType, size_type>::throw_length(initial_capacity, "get_next_capacity, allocator's max size reached");
|
|
385
|
+
if (p) {
|
|
342
386
|
m_start = p;
|
|
343
387
|
}
|
|
344
388
|
else {
|
|
@@ -464,7 +508,7 @@ struct vector_alloc_holder
|
|
|
464
508
|
{ this->m_size = static_cast<stored_size_type>(this->m_size + s); }
|
|
465
509
|
|
|
466
510
|
BOOST_CONTAINER_FORCEINLINE void set_stored_capacity(size_type c) BOOST_NOEXCEPT_OR_NOTHROW
|
|
467
|
-
|
|
511
|
+
{ dtl::limit_by_stored_size_type<size_type, stored_size_type>::set(this->m_capacity, c); }
|
|
468
512
|
|
|
469
513
|
inline pointer allocation_command(boost::container::allocation_type command,
|
|
470
514
|
size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse)
|
|
@@ -476,7 +520,7 @@ struct vector_alloc_holder
|
|
|
476
520
|
inline pointer allocate(size_type n)
|
|
477
521
|
{
|
|
478
522
|
const size_type max_alloc = allocator_traits_type::max_size(this->alloc());
|
|
479
|
-
const size_type max =
|
|
523
|
+
const size_type max = dtl::limit_by_stored_size_type<size_type, stored_size_type>::clamp(max_alloc);;
|
|
480
524
|
if (BOOST_UNLIKELY(max < n) )
|
|
481
525
|
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
|
482
526
|
|
|
@@ -553,7 +597,7 @@ struct vector_alloc_holder
|
|
|
553
597
|
BOOST_CONTAINER_FORCEINLINE void start(const pointer &p) BOOST_NOEXCEPT_OR_NOTHROW
|
|
554
598
|
{ m_start = p; }
|
|
555
599
|
BOOST_CONTAINER_FORCEINLINE void capacity(const size_type &c) BOOST_NOEXCEPT_OR_NOTHROW
|
|
556
|
-
|
|
600
|
+
{ this->set_stored_capacity(c); }
|
|
557
601
|
|
|
558
602
|
static inline void on_capacity_overflow()
|
|
559
603
|
{ }
|
|
@@ -580,9 +624,7 @@ struct vector_alloc_holder
|
|
|
580
624
|
BOOST_ASSERT( (command & allocate_new));
|
|
581
625
|
BOOST_ASSERT(!(command & nothrow_allocation));
|
|
582
626
|
//First detect overflow on smaller stored_size_types
|
|
583
|
-
|
|
584
|
-
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
|
585
|
-
}
|
|
627
|
+
vec_on_type_overflow<size_type, stored_size_type>::throw_length(limit_size, "get_next_capacity, allocator's max size reached");
|
|
586
628
|
(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
|
|
587
629
|
pointer const p = this->allocate(prefer_in_recvd_out_size);
|
|
588
630
|
reuse = pointer();
|
|
@@ -595,9 +637,7 @@ struct vector_alloc_holder
|
|
|
595
637
|
pointer &reuse)
|
|
596
638
|
{
|
|
597
639
|
//First detect overflow on smaller stored_size_types
|
|
598
|
-
|
|
599
|
-
boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
|
|
600
|
-
}
|
|
640
|
+
vec_on_type_overflow<size_type, stored_size_type>::throw_length(limit_size, "get_next_capacity, allocator's max size reached");
|
|
601
641
|
(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
|
|
602
642
|
//Allocate memory
|
|
603
643
|
pointer p = this->alloc().allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
|
|
@@ -759,9 +799,6 @@ struct vector_alloc_holder<Allocator, StoredSizeType, version_0>
|
|
|
759
799
|
}
|
|
760
800
|
};
|
|
761
801
|
|
|
762
|
-
struct growth_factor_60;
|
|
763
|
-
struct growth_factor_100;
|
|
764
|
-
|
|
765
802
|
template<class Options, class AllocatorSizeType>
|
|
766
803
|
struct get_vector_opt
|
|
767
804
|
{
|
|
@@ -799,7 +836,7 @@ public:
|
|
|
799
836
|
typedef T value_type;
|
|
800
837
|
typedef BOOST_CONTAINER_IMPDEF
|
|
801
838
|
(typename real_allocator<T BOOST_MOVE_I A>::type) allocator_type;
|
|
802
|
-
typedef
|
|
839
|
+
typedef boost::container::allocator_traits<allocator_type> allocator_traits_t;
|
|
803
840
|
typedef typename allocator_traits<allocator_type>::pointer pointer;
|
|
804
841
|
typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
|
|
805
842
|
typedef typename allocator_traits<allocator_type>::reference reference;
|
|
@@ -1058,12 +1095,6 @@ private:
|
|
|
1058
1095
|
//! throws or T's constructor taking a dereferenced InIt throws.
|
|
1059
1096
|
//!
|
|
1060
1097
|
//! <b>Complexity</b>: Linear to the range [first, last).
|
|
1061
|
-
// template <class InIt>
|
|
1062
|
-
// vector(InIt first, InIt last
|
|
1063
|
-
// BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c
|
|
1064
|
-
// < dtl::is_convertible<InIt BOOST_MOVE_I size_type>::value
|
|
1065
|
-
// BOOST_MOVE_I dtl::nat >::type * = 0)
|
|
1066
|
-
// ) -> vector<typename iterator_traits<InIt>::value_type, new_allocator<typename iterator_traits<InIt>::value_type>>;
|
|
1067
1098
|
template <class InIt>
|
|
1068
1099
|
vector(InIt first, InIt last
|
|
1069
1100
|
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c
|
|
@@ -1165,7 +1196,7 @@ private:
|
|
|
1165
1196
|
//! throws or T's copy constructor throws.
|
|
1166
1197
|
//!
|
|
1167
1198
|
//! <b>Complexity</b>: Linear to the elements x contains.
|
|
1168
|
-
vector(const vector &x, const allocator_type &a)
|
|
1199
|
+
vector(const vector &x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
|
|
1169
1200
|
: m_holder(vector_uninitialized_size, a, x.size())
|
|
1170
1201
|
{
|
|
1171
1202
|
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
|
@@ -1183,7 +1214,7 @@ private:
|
|
|
1183
1214
|
//! <b>Throws</b>: If allocation or T's copy constructor throws.
|
|
1184
1215
|
//!
|
|
1185
1216
|
//! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
|
|
1186
|
-
vector(BOOST_RV_REF(vector) x, const allocator_type &a)
|
|
1217
|
+
vector(BOOST_RV_REF(vector) x, const BOOST_CONTAINER_DOC1ST(allocator_type, typename dtl::type_identity<allocator_type>::type) &a)
|
|
1187
1218
|
: m_holder( vector_uninitialized_size, a
|
|
1188
1219
|
//In this allocator move constructor the allocator won't be propagated --v
|
|
1189
1220
|
, is_propagable_from<false>(x.get_stored_allocator(), x.m_holder.start(), a) ? 0 : x.size()
|
|
@@ -1211,12 +1242,22 @@ private:
|
|
|
1211
1242
|
//!
|
|
1212
1243
|
//! <b>Complexity</b>: Linear to the number of elements.
|
|
1213
1244
|
~vector() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1245
|
+
#if defined(BOOST_INTRUSIVE_CONCEPTS_BASED_OVERLOADING)
|
|
1246
|
+
requires (!dtl::is_version_0_alloc_and_trivially_destructible<allocator_type>::value)
|
|
1247
|
+
#endif
|
|
1214
1248
|
{
|
|
1215
1249
|
boost::container::destroy_alloc_n
|
|
1216
1250
|
(this->get_stored_allocator(), this->priv_raw_begin(), this->m_holder.m_size);
|
|
1217
1251
|
//vector_alloc_holder deallocates the data
|
|
1218
1252
|
}
|
|
1219
1253
|
|
|
1254
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) && defined(BOOST_INTRUSIVE_CONCEPTS_BASED_OVERLOADING)
|
|
1255
|
+
//Default destructor for normal links (allows conditional triviality)
|
|
1256
|
+
~vector()
|
|
1257
|
+
requires (dtl::is_version_0_alloc_and_trivially_destructible<allocator_type>::value)
|
|
1258
|
+
= default;
|
|
1259
|
+
#endif
|
|
1260
|
+
|
|
1220
1261
|
//! <b>Effects</b>: Makes *this contain the same elements as x.
|
|
1221
1262
|
//!
|
|
1222
1263
|
//! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
|
|
@@ -1384,9 +1425,7 @@ private:
|
|
|
1384
1425
|
//For Fwd iterators the standard only requires EmplaceConstructible and assignable from *first
|
|
1385
1426
|
//so we can't do any backwards allocation
|
|
1386
1427
|
const it_size_type sz = boost::container::iterator_udistance(first, last);
|
|
1387
|
-
|
|
1388
|
-
boost::container::throw_length_error("vector::assign, FwdIt's max length reached");
|
|
1389
|
-
}
|
|
1428
|
+
vec_on_type_overflow<it_size_type, size_type>::throw_length(sz, "vector::assign, FwdIt's max length reached");
|
|
1390
1429
|
|
|
1391
1430
|
const size_type input_sz = static_cast<size_type>(sz);
|
|
1392
1431
|
const size_type old_capacity = this->capacity();
|
|
@@ -1436,7 +1475,7 @@ private:
|
|
|
1436
1475
|
//! <b>Throws</b>: If allocator's copy constructor throws.
|
|
1437
1476
|
//!
|
|
1438
1477
|
//! <b>Complexity</b>: Constant.
|
|
1439
|
-
|
|
1478
|
+
BOOST_CONTAINER_NODISCARD inline allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1440
1479
|
{ return this->m_holder.alloc(); }
|
|
1441
1480
|
|
|
1442
1481
|
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
|
@@ -1446,7 +1485,7 @@ private:
|
|
|
1446
1485
|
//! <b>Complexity</b>: Constant.
|
|
1447
1486
|
//!
|
|
1448
1487
|
//! <b>Note</b>: Non-standard extension.
|
|
1449
|
-
|
|
1488
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1450
1489
|
stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1451
1490
|
{ return this->m_holder.alloc(); }
|
|
1452
1491
|
|
|
@@ -1457,7 +1496,7 @@ private:
|
|
|
1457
1496
|
//! <b>Complexity</b>: Constant.
|
|
1458
1497
|
//!
|
|
1459
1498
|
//! <b>Note</b>: Non-standard extension.
|
|
1460
|
-
|
|
1499
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1461
1500
|
const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1462
1501
|
{ return this->m_holder.alloc(); }
|
|
1463
1502
|
|
|
@@ -1472,7 +1511,7 @@ private:
|
|
|
1472
1511
|
//! <b>Throws</b>: Nothing.
|
|
1473
1512
|
//!
|
|
1474
1513
|
//! <b>Complexity</b>: Constant.
|
|
1475
|
-
|
|
1514
|
+
BOOST_CONTAINER_NODISCARD inline iterator begin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1476
1515
|
{ return iterator(this->m_holder.start()); }
|
|
1477
1516
|
|
|
1478
1517
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
|
@@ -1480,7 +1519,7 @@ private:
|
|
|
1480
1519
|
//! <b>Throws</b>: Nothing.
|
|
1481
1520
|
//!
|
|
1482
1521
|
//! <b>Complexity</b>: Constant.
|
|
1483
|
-
|
|
1522
|
+
BOOST_CONTAINER_NODISCARD inline const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1484
1523
|
{ return const_iterator(this->m_holder.start()); }
|
|
1485
1524
|
|
|
1486
1525
|
//! <b>Effects</b>: Returns an iterator to the end of the vector.
|
|
@@ -1488,7 +1527,7 @@ private:
|
|
|
1488
1527
|
//! <b>Throws</b>: Nothing.
|
|
1489
1528
|
//!
|
|
1490
1529
|
//! <b>Complexity</b>: Constant.
|
|
1491
|
-
|
|
1530
|
+
BOOST_CONTAINER_NODISCARD inline iterator end() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1492
1531
|
{
|
|
1493
1532
|
iterator it (this->m_holder.start());
|
|
1494
1533
|
it += difference_type(this->m_holder.m_size);
|
|
@@ -1500,7 +1539,7 @@ private:
|
|
|
1500
1539
|
//! <b>Throws</b>: Nothing.
|
|
1501
1540
|
//!
|
|
1502
1541
|
//! <b>Complexity</b>: Constant.
|
|
1503
|
-
|
|
1542
|
+
BOOST_CONTAINER_NODISCARD inline const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1504
1543
|
{ return this->cend(); }
|
|
1505
1544
|
|
|
1506
1545
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
|
|
@@ -1509,7 +1548,7 @@ private:
|
|
|
1509
1548
|
//! <b>Throws</b>: Nothing.
|
|
1510
1549
|
//!
|
|
1511
1550
|
//! <b>Complexity</b>: Constant.
|
|
1512
|
-
|
|
1551
|
+
BOOST_CONTAINER_NODISCARD inline reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1513
1552
|
{ return reverse_iterator(this->end()); }
|
|
1514
1553
|
|
|
1515
1554
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
|
@@ -1518,7 +1557,7 @@ private:
|
|
|
1518
1557
|
//! <b>Throws</b>: Nothing.
|
|
1519
1558
|
//!
|
|
1520
1559
|
//! <b>Complexity</b>: Constant.
|
|
1521
|
-
|
|
1560
|
+
BOOST_CONTAINER_NODISCARD inline const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1522
1561
|
{ return this->crbegin(); }
|
|
1523
1562
|
|
|
1524
1563
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
|
|
@@ -1527,7 +1566,7 @@ private:
|
|
|
1527
1566
|
//! <b>Throws</b>: Nothing.
|
|
1528
1567
|
//!
|
|
1529
1568
|
//! <b>Complexity</b>: Constant.
|
|
1530
|
-
|
|
1569
|
+
BOOST_CONTAINER_NODISCARD inline reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1531
1570
|
{ return reverse_iterator(this->begin()); }
|
|
1532
1571
|
|
|
1533
1572
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
@@ -1536,7 +1575,7 @@ private:
|
|
|
1536
1575
|
//! <b>Throws</b>: Nothing.
|
|
1537
1576
|
//!
|
|
1538
1577
|
//! <b>Complexity</b>: Constant.
|
|
1539
|
-
|
|
1578
|
+
BOOST_CONTAINER_NODISCARD inline const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1540
1579
|
{ return this->crend(); }
|
|
1541
1580
|
|
|
1542
1581
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
|
@@ -1544,7 +1583,7 @@ private:
|
|
|
1544
1583
|
//! <b>Throws</b>: Nothing.
|
|
1545
1584
|
//!
|
|
1546
1585
|
//! <b>Complexity</b>: Constant.
|
|
1547
|
-
|
|
1586
|
+
BOOST_CONTAINER_NODISCARD inline const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1548
1587
|
{ return const_iterator(this->m_holder.start()); }
|
|
1549
1588
|
|
|
1550
1589
|
//! <b>Effects</b>: Returns a const_iterator to the end of the vector.
|
|
@@ -1552,7 +1591,7 @@ private:
|
|
|
1552
1591
|
//! <b>Throws</b>: Nothing.
|
|
1553
1592
|
//!
|
|
1554
1593
|
//! <b>Complexity</b>: Constant.
|
|
1555
|
-
|
|
1594
|
+
BOOST_CONTAINER_NODISCARD inline const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1556
1595
|
{
|
|
1557
1596
|
const_iterator it (this->m_holder.start());
|
|
1558
1597
|
it += difference_type(this->m_holder.m_size);
|
|
@@ -1565,7 +1604,7 @@ private:
|
|
|
1565
1604
|
//! <b>Throws</b>: Nothing.
|
|
1566
1605
|
//!
|
|
1567
1606
|
//! <b>Complexity</b>: Constant.
|
|
1568
|
-
|
|
1607
|
+
BOOST_CONTAINER_NODISCARD inline const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1569
1608
|
{ return const_reverse_iterator(this->end());}
|
|
1570
1609
|
|
|
1571
1610
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
@@ -1574,7 +1613,7 @@ private:
|
|
|
1574
1613
|
//! <b>Throws</b>: Nothing.
|
|
1575
1614
|
//!
|
|
1576
1615
|
//! <b>Complexity</b>: Constant.
|
|
1577
|
-
|
|
1616
|
+
BOOST_CONTAINER_NODISCARD inline const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1578
1617
|
{ return const_reverse_iterator(this->begin()); }
|
|
1579
1618
|
|
|
1580
1619
|
//////////////////////////////////////////////
|
|
@@ -1588,7 +1627,7 @@ private:
|
|
|
1588
1627
|
//! <b>Throws</b>: Nothing.
|
|
1589
1628
|
//!
|
|
1590
1629
|
//! <b>Complexity</b>: Constant.
|
|
1591
|
-
|
|
1630
|
+
BOOST_CONTAINER_NODISCARD inline bool empty() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1592
1631
|
{ return !this->m_holder.m_size; }
|
|
1593
1632
|
|
|
1594
1633
|
//! <b>Effects</b>: Returns the number of the elements contained in the vector.
|
|
@@ -1596,7 +1635,7 @@ private:
|
|
|
1596
1635
|
//! <b>Throws</b>: Nothing.
|
|
1597
1636
|
//!
|
|
1598
1637
|
//! <b>Complexity</b>: Constant.
|
|
1599
|
-
|
|
1638
|
+
BOOST_CONTAINER_NODISCARD inline size_type size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1600
1639
|
{ return this->m_holder.m_size; }
|
|
1601
1640
|
|
|
1602
1641
|
//! <b>Effects</b>: Returns the largest possible size of the vector.
|
|
@@ -1604,7 +1643,7 @@ private:
|
|
|
1604
1643
|
//! <b>Throws</b>: Nothing.
|
|
1605
1644
|
//!
|
|
1606
1645
|
//! <b>Complexity</b>: Constant.
|
|
1607
|
-
|
|
1646
|
+
BOOST_CONTAINER_NODISCARD inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1608
1647
|
{ return allocator_traits_type::max_size(this->m_holder.alloc()); }
|
|
1609
1648
|
|
|
1610
1649
|
//! <b>Effects</b>: Inserts or erases elements at the end such that
|
|
@@ -1642,7 +1681,7 @@ private:
|
|
|
1642
1681
|
//! <b>Throws</b>: Nothing.
|
|
1643
1682
|
//!
|
|
1644
1683
|
//! <b>Complexity</b>: Constant.
|
|
1645
|
-
|
|
1684
|
+
BOOST_CONTAINER_NODISCARD inline size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1646
1685
|
{ return this->m_holder.capacity(); }
|
|
1647
1686
|
|
|
1648
1687
|
//! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
|
|
@@ -1681,7 +1720,7 @@ private:
|
|
|
1681
1720
|
//! <b>Throws</b>: Nothing.
|
|
1682
1721
|
//!
|
|
1683
1722
|
//! <b>Complexity</b>: Constant.
|
|
1684
|
-
|
|
1723
|
+
BOOST_CONTAINER_NODISCARD inline reference front() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1685
1724
|
{
|
|
1686
1725
|
BOOST_ASSERT(!this->empty());
|
|
1687
1726
|
return *this->m_holder.start();
|
|
@@ -1695,7 +1734,7 @@ private:
|
|
|
1695
1734
|
//! <b>Throws</b>: Nothing.
|
|
1696
1735
|
//!
|
|
1697
1736
|
//! <b>Complexity</b>: Constant.
|
|
1698
|
-
|
|
1737
|
+
BOOST_CONTAINER_NODISCARD inline const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1699
1738
|
{
|
|
1700
1739
|
BOOST_ASSERT(!this->empty());
|
|
1701
1740
|
return *this->m_holder.start();
|
|
@@ -1709,7 +1748,7 @@ private:
|
|
|
1709
1748
|
//! <b>Throws</b>: Nothing.
|
|
1710
1749
|
//!
|
|
1711
1750
|
//! <b>Complexity</b>: Constant.
|
|
1712
|
-
|
|
1751
|
+
BOOST_CONTAINER_NODISCARD inline reference back() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1713
1752
|
{
|
|
1714
1753
|
BOOST_ASSERT(!this->empty());
|
|
1715
1754
|
return this->m_holder.start()[difference_type(this->m_holder.m_size - 1u)];
|
|
@@ -1723,7 +1762,7 @@ private:
|
|
|
1723
1762
|
//! <b>Throws</b>: Nothing.
|
|
1724
1763
|
//!
|
|
1725
1764
|
//! <b>Complexity</b>: Constant.
|
|
1726
|
-
|
|
1765
|
+
BOOST_CONTAINER_NODISCARD inline const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1727
1766
|
{
|
|
1728
1767
|
BOOST_ASSERT(!this->empty());
|
|
1729
1768
|
return this->m_holder.start()[this->m_holder.m_size - 1];
|
|
@@ -1737,7 +1776,7 @@ private:
|
|
|
1737
1776
|
//! <b>Throws</b>: Nothing.
|
|
1738
1777
|
//!
|
|
1739
1778
|
//! <b>Complexity</b>: Constant.
|
|
1740
|
-
|
|
1779
|
+
BOOST_CONTAINER_NODISCARD inline reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
|
1741
1780
|
{
|
|
1742
1781
|
BOOST_ASSERT(this->m_holder.m_size > n);
|
|
1743
1782
|
return this->m_holder.start()[difference_type(n)];
|
|
@@ -1751,7 +1790,7 @@ private:
|
|
|
1751
1790
|
//! <b>Throws</b>: Nothing.
|
|
1752
1791
|
//!
|
|
1753
1792
|
//! <b>Complexity</b>: Constant.
|
|
1754
|
-
|
|
1793
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1755
1794
|
const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1756
1795
|
{
|
|
1757
1796
|
BOOST_ASSERT(this->m_holder.m_size > n);
|
|
@@ -1769,7 +1808,7 @@ private:
|
|
|
1769
1808
|
//! <b>Complexity</b>: Constant.
|
|
1770
1809
|
//!
|
|
1771
1810
|
//! <b>Note</b>: Non-standard extension
|
|
1772
|
-
|
|
1811
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1773
1812
|
iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
|
1774
1813
|
{
|
|
1775
1814
|
BOOST_ASSERT(this->m_holder.m_size >= n);
|
|
@@ -1787,7 +1826,7 @@ private:
|
|
|
1787
1826
|
//! <b>Complexity</b>: Constant.
|
|
1788
1827
|
//!
|
|
1789
1828
|
//! <b>Note</b>: Non-standard extension
|
|
1790
|
-
|
|
1829
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1791
1830
|
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1792
1831
|
{
|
|
1793
1832
|
BOOST_ASSERT(this->m_holder.m_size >= n);
|
|
@@ -1804,7 +1843,7 @@ private:
|
|
|
1804
1843
|
//! <b>Complexity</b>: Constant.
|
|
1805
1844
|
//!
|
|
1806
1845
|
//! <b>Note</b>: Non-standard extension
|
|
1807
|
-
|
|
1846
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1808
1847
|
size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
|
|
1809
1848
|
{
|
|
1810
1849
|
//Range check assert done in priv_index_of
|
|
@@ -1821,7 +1860,7 @@ private:
|
|
|
1821
1860
|
//! <b>Complexity</b>: Constant.
|
|
1822
1861
|
//!
|
|
1823
1862
|
//! <b>Note</b>: Non-standard extension
|
|
1824
|
-
|
|
1863
|
+
BOOST_CONTAINER_NODISCARD inline
|
|
1825
1864
|
size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1826
1865
|
{
|
|
1827
1866
|
//Range check assert done in priv_index_of
|
|
@@ -1836,7 +1875,7 @@ private:
|
|
|
1836
1875
|
//! <b>Throws</b>: range_error if n >= size()
|
|
1837
1876
|
//!
|
|
1838
1877
|
//! <b>Complexity</b>: Constant.
|
|
1839
|
-
|
|
1878
|
+
BOOST_CONTAINER_NODISCARD inline reference at(size_type n)
|
|
1840
1879
|
{
|
|
1841
1880
|
this->priv_throw_if_out_of_range(n);
|
|
1842
1881
|
return this->m_holder.start()[difference_type(n)];
|
|
@@ -1850,7 +1889,7 @@ private:
|
|
|
1850
1889
|
//! <b>Throws</b>: range_error if n >= size()
|
|
1851
1890
|
//!
|
|
1852
1891
|
//! <b>Complexity</b>: Constant.
|
|
1853
|
-
|
|
1892
|
+
BOOST_CONTAINER_NODISCARD inline const_reference at(size_type n) const
|
|
1854
1893
|
{
|
|
1855
1894
|
this->priv_throw_if_out_of_range(n);
|
|
1856
1895
|
return this->m_holder.start()[n];
|
|
@@ -1868,7 +1907,7 @@ private:
|
|
|
1868
1907
|
//! <b>Throws</b>: Nothing.
|
|
1869
1908
|
//!
|
|
1870
1909
|
//! <b>Complexity</b>: Constant.
|
|
1871
|
-
|
|
1910
|
+
BOOST_CONTAINER_NODISCARD inline T* data() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1872
1911
|
{ return this->priv_raw_begin(); }
|
|
1873
1912
|
|
|
1874
1913
|
//! <b>Returns</b>: A pointer such that [data(),data() + size()) is a valid range.
|
|
@@ -1877,7 +1916,7 @@ private:
|
|
|
1877
1916
|
//! <b>Throws</b>: Nothing.
|
|
1878
1917
|
//!
|
|
1879
1918
|
//! <b>Complexity</b>: Constant.
|
|
1880
|
-
|
|
1919
|
+
BOOST_CONTAINER_NODISCARD inline const T * data() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1881
1920
|
{ return this->priv_raw_begin(); }
|
|
1882
1921
|
|
|
1883
1922
|
//////////////////////////////////////////////
|
|
@@ -1899,9 +1938,13 @@ private:
|
|
|
1899
1938
|
template<class ...Args>
|
|
1900
1939
|
inline reference emplace_back(BOOST_FWD_REF(Args)...args)
|
|
1901
1940
|
{
|
|
1902
|
-
T* const p = this->priv_raw_end();
|
|
1903
1941
|
if (BOOST_LIKELY(this->room_enough())){
|
|
1904
|
-
//There is more memory, just construct a new object at the end
|
|
1942
|
+
//There is more memory, just construct a new object at the end.
|
|
1943
|
+
//Deriving the end pointer inside this branch (instead of before the
|
|
1944
|
+
//room_enough() test, where the slow path would also use it) lets the
|
|
1945
|
+
//optimizer fold 'start + size' into the store's addressing mode and
|
|
1946
|
+
//keep size as the sole induction variable in append loops.
|
|
1947
|
+
T* const p = this->priv_raw_end();
|
|
1905
1948
|
allocator_traits_type::construct(this->m_holder.alloc(), p, ::boost::forward<Args>(args)...);
|
|
1906
1949
|
++this->m_holder.m_size;
|
|
1907
1950
|
return *p;
|
|
@@ -1909,7 +1952,7 @@ private:
|
|
|
1909
1952
|
else{
|
|
1910
1953
|
typedef dtl::insert_emplace_proxy<allocator_type, Args...> proxy_t;
|
|
1911
1954
|
return *this->priv_insert_forward_range_no_capacity
|
|
1912
|
-
(
|
|
1955
|
+
(this->priv_raw_end(), 1, proxy_t(::boost::forward<Args>(args)...), alloc_version());
|
|
1913
1956
|
}
|
|
1914
1957
|
}
|
|
1915
1958
|
|
|
@@ -1933,6 +1976,27 @@ private:
|
|
|
1933
1976
|
return is_room_enough;
|
|
1934
1977
|
}
|
|
1935
1978
|
|
|
1979
|
+
//! <b>Requires</b>: Before the call to this function size() < capacity() must be true.
|
|
1980
|
+
//! Otherwise, the behavior is undefined.
|
|
1981
|
+
//!
|
|
1982
|
+
//! <b>Effects</b>: Inserts an object of type T constructed with
|
|
1983
|
+
//! std::forward<Args>(args)... in the end of the vector.
|
|
1984
|
+
//!
|
|
1985
|
+
//! <b>Throws</b>: If the in-place constructor throws.
|
|
1986
|
+
//!
|
|
1987
|
+
//! <b>Complexity</b>: Constant time.
|
|
1988
|
+
//!
|
|
1989
|
+
//! <b>Note</b>: Non-standard extension.
|
|
1990
|
+
template<class ...Args>
|
|
1991
|
+
BOOST_CONTAINER_FORCEINLINE reference unchecked_emplace_back(BOOST_FWD_REF(Args)...args)
|
|
1992
|
+
{
|
|
1993
|
+
BOOST_ASSERT(this->size() < this->capacity());
|
|
1994
|
+
T* const p = this->priv_raw_end();
|
|
1995
|
+
allocator_traits_type::construct(this->m_holder.alloc(), p, ::boost::forward<Args>(args)...);
|
|
1996
|
+
++this->m_holder.m_size;
|
|
1997
|
+
return *p;
|
|
1998
|
+
}
|
|
1999
|
+
|
|
1936
2000
|
//! <b>Requires</b>: position must be a valid iterator of *this.
|
|
1937
2001
|
//!
|
|
1938
2002
|
//! <b>Effects</b>: Inserts an object of type T constructed with
|
|
@@ -1959,17 +2023,20 @@ private:
|
|
|
1959
2023
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
1960
2024
|
inline reference emplace_back(BOOST_MOVE_UREF##N)\
|
|
1961
2025
|
{\
|
|
1962
|
-
T* const p = this->priv_raw_end();\
|
|
1963
2026
|
if (BOOST_LIKELY(this->room_enough())){\
|
|
2027
|
+
/*Derive the end pointer inside this branch so the optimizer can fold*/\
|
|
2028
|
+
/*'start + size' into the store and keep size as the sole induction*/\
|
|
2029
|
+
/*variable in append loops (the slow path recomputes it).*/\
|
|
2030
|
+
T* const p = this->priv_raw_end();\
|
|
1964
2031
|
allocator_traits_type::construct (this->m_holder.alloc()\
|
|
1965
|
-
,
|
|
2032
|
+
, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
|
1966
2033
|
++this->m_holder.m_size;\
|
|
1967
2034
|
return *p;\
|
|
1968
2035
|
}\
|
|
1969
2036
|
else{\
|
|
1970
2037
|
typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\
|
|
1971
2038
|
return *this->priv_insert_forward_range_no_capacity\
|
|
1972
|
-
(
|
|
2039
|
+
( this->priv_raw_end(), 1, proxy_t(BOOST_MOVE_FWD##N), alloc_version());\
|
|
1973
2040
|
}\
|
|
1974
2041
|
}\
|
|
1975
2042
|
\
|
|
@@ -1986,6 +2053,17 @@ private:
|
|
|
1986
2053
|
}\
|
|
1987
2054
|
\
|
|
1988
2055
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
2056
|
+
inline reference unchecked_emplace_back(BOOST_MOVE_UREF##N)\
|
|
2057
|
+
{\
|
|
2058
|
+
BOOST_ASSERT(this->size() < this->capacity());\
|
|
2059
|
+
T* const p = this->priv_raw_end();\
|
|
2060
|
+
allocator_traits_type::construct (this->m_holder.alloc()\
|
|
2061
|
+
, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
|
2062
|
+
++this->m_holder.m_size;\
|
|
2063
|
+
return *p;\
|
|
2064
|
+
}\
|
|
2065
|
+
\
|
|
2066
|
+
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
1989
2067
|
inline iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
1990
2068
|
{\
|
|
1991
2069
|
BOOST_ASSERT(this->priv_in_range_or_end(pos));\
|
|
@@ -2015,8 +2093,30 @@ private:
|
|
|
2015
2093
|
//!
|
|
2016
2094
|
//! <b>Complexity</b>: Amortized constant time.
|
|
2017
2095
|
void push_back(T &&x);
|
|
2096
|
+
|
|
2097
|
+
//! <b>Requires</b>: Before the call to this function size() < capacity() must be true.
|
|
2098
|
+
//! Otherwise, the behavior is undefined.
|
|
2099
|
+
//!
|
|
2100
|
+
//! <b>Effects</b>: Inserts a copy of x at the end of the vector.
|
|
2101
|
+
//!
|
|
2102
|
+
//! <b>Throws</b>: If T's copy/move constructor throws.
|
|
2103
|
+
//!
|
|
2104
|
+
//! <b>Complexity</b>: Constant time.
|
|
2105
|
+
void unchecked_push_back(const T &x);
|
|
2106
|
+
|
|
2107
|
+
//! <b>Requires</b>: Before the call to this function size() < capacity() must be true.
|
|
2108
|
+
//! Otherwise, the behavior is undefined.
|
|
2109
|
+
//!
|
|
2110
|
+
//! <b>Effects</b>: Constructs a new element in the end of the vector
|
|
2111
|
+
//! and moves the resources of x to this new element.
|
|
2112
|
+
//!
|
|
2113
|
+
//! <b>Throws</b>: If T's copy/move constructor throws.
|
|
2114
|
+
//!
|
|
2115
|
+
//! <b>Complexity</b>: Constant time.
|
|
2116
|
+
void unchecked_push_back(T &&x);
|
|
2018
2117
|
#else
|
|
2019
2118
|
BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
|
|
2119
|
+
BOOST_MOVE_CONVERSION_AWARE_CATCH(unchecked_push_back, T, void, priv_unchecked_push_back)
|
|
2020
2120
|
#endif
|
|
2021
2121
|
|
|
2022
2122
|
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
|
@@ -2103,10 +2203,7 @@ private:
|
|
|
2103
2203
|
BOOST_ASSERT(this->priv_in_range_or_end(pos));
|
|
2104
2204
|
typedef typename iter_size<FwdIt>::type it_size_type;
|
|
2105
2205
|
const it_size_type sz = boost::container::iterator_udistance(first, last);
|
|
2106
|
-
|
|
2107
|
-
boost::container::throw_length_error("vector::insert, FwdIt's max length reached");
|
|
2108
|
-
}
|
|
2109
|
-
|
|
2206
|
+
vec_on_type_overflow<it_size_type, size_type>::throw_length(sz, "vector::insert, FwdIt's max length reached");
|
|
2110
2207
|
dtl::insert_range_proxy<allocator_type, FwdIt> proxy(first);
|
|
2111
2208
|
return this->priv_insert_forward_range(vector_iterator_get_ptr(pos), static_cast<size_type>(sz), proxy);
|
|
2112
2209
|
}
|
|
@@ -2262,37 +2359,37 @@ private:
|
|
|
2262
2359
|
//! <b>Effects</b>: Returns true if x and y are equal
|
|
2263
2360
|
//!
|
|
2264
2361
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2265
|
-
|
|
2362
|
+
BOOST_CONTAINER_NODISCARD inline friend bool operator==(const vector& x, const vector& y)
|
|
2266
2363
|
{ return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
|
|
2267
2364
|
|
|
2268
2365
|
//! <b>Effects</b>: Returns true if x and y are unequal
|
|
2269
2366
|
//!
|
|
2270
2367
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2271
|
-
|
|
2368
|
+
BOOST_CONTAINER_NODISCARD inline friend bool operator!=(const vector& x, const vector& y)
|
|
2272
2369
|
{ return !(x == y); }
|
|
2273
2370
|
|
|
2274
2371
|
//! <b>Effects</b>: Returns true if x is less than y
|
|
2275
2372
|
//!
|
|
2276
2373
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2277
|
-
|
|
2374
|
+
BOOST_CONTAINER_NODISCARD friend bool operator<(const vector& x, const vector& y)
|
|
2278
2375
|
{ return boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
|
|
2279
2376
|
|
|
2280
2377
|
//! <b>Effects</b>: Returns true if x is greater than y
|
|
2281
2378
|
//!
|
|
2282
2379
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2283
|
-
|
|
2380
|
+
BOOST_CONTAINER_NODISCARD inline friend bool operator>(const vector& x, const vector& y)
|
|
2284
2381
|
{ return y < x; }
|
|
2285
2382
|
|
|
2286
2383
|
//! <b>Effects</b>: Returns true if x is equal or less than y
|
|
2287
2384
|
//!
|
|
2288
2385
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2289
|
-
|
|
2386
|
+
BOOST_CONTAINER_NODISCARD inline friend bool operator<=(const vector& x, const vector& y)
|
|
2290
2387
|
{ return !(y < x); }
|
|
2291
2388
|
|
|
2292
2389
|
//! <b>Effects</b>: Returns true if x is equal or greater than y
|
|
2293
2390
|
//!
|
|
2294
2391
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2295
|
-
|
|
2392
|
+
BOOST_CONTAINER_NODISCARD inline friend bool operator>=(const vector& x, const vector& y)
|
|
2296
2393
|
{ return !(x < y); }
|
|
2297
2394
|
|
|
2298
2395
|
//! <b>Effects</b>: x.swap(y)
|
|
@@ -2908,10 +3005,20 @@ private:
|
|
|
2908
3005
|
this->emplace_back(::boost::forward<U>(u));
|
|
2909
3006
|
}
|
|
2910
3007
|
|
|
3008
|
+
template <class U>
|
|
3009
|
+
BOOST_CONTAINER_FORCEINLINE void priv_unchecked_push_back(BOOST_FWD_REF(U) u)
|
|
3010
|
+
{
|
|
3011
|
+
this->unchecked_emplace_back(::boost::forward<U>(u));
|
|
3012
|
+
}
|
|
3013
|
+
|
|
2911
3014
|
//Overload to support compiler errors that instantiate too much
|
|
2912
3015
|
inline void priv_push_back(::boost::move_detail::nat)
|
|
2913
3016
|
{}
|
|
2914
3017
|
|
|
3018
|
+
//Overload to support compiler errors that instantiate too much
|
|
3019
|
+
inline void priv_unchecked_push_back(::boost::move_detail::nat)
|
|
3020
|
+
{}
|
|
3021
|
+
|
|
2915
3022
|
inline iterator priv_insert(const_iterator, ::boost::move_detail::nat)
|
|
2916
3023
|
{ return iterator(); }
|
|
2917
3024
|
|
|
@@ -3020,7 +3127,7 @@ private:
|
|
|
3020
3127
|
#endif
|
|
3021
3128
|
|
|
3022
3129
|
template <class InsertionProxy>
|
|
3023
|
-
|
|
3130
|
+
iterator priv_insert_forward_range_no_capacity
|
|
3024
3131
|
(T *const raw_pos, const size_type n, const InsertionProxy insert_range_proxy, version_1)
|
|
3025
3132
|
{
|
|
3026
3133
|
const size_type new_cap = this->m_holder.template next_capacity<growth_factor_type>(n);
|
|
@@ -3235,8 +3342,12 @@ private:
|
|
|
3235
3342
|
//There is enough memory
|
|
3236
3343
|
T* const old_finish = this->priv_raw_end();
|
|
3237
3344
|
allocator_type & a = this->m_holder.alloc();
|
|
3345
|
+
//Number of trailing elements [raw_pos, old_finish). Expressing the shift
|
|
3346
|
+
//length against the end pointer (n_after - 1) lets the compiler bound and
|
|
3347
|
+
//fold a near-end shift to inline moves instead of an out-of-line memmove.
|
|
3348
|
+
const size_type n_after = size_type(old_finish - raw_pos);
|
|
3238
3349
|
|
|
3239
|
-
if (
|
|
3350
|
+
if (!n_after){
|
|
3240
3351
|
insert_range_proxy.uninitialized_copy_n_and_update(a, old_finish, 1);
|
|
3241
3352
|
++this->m_holder.m_size;
|
|
3242
3353
|
}
|
|
@@ -3248,7 +3359,7 @@ private:
|
|
|
3248
3359
|
allocator_traits_type::construct(a, old_finish, ::boost::move(*before_old_finish));
|
|
3249
3360
|
++this->m_holder.m_size;
|
|
3250
3361
|
//Copy previous to last objects to the initialized end
|
|
3251
|
-
boost::container::
|
|
3362
|
+
boost::container::move_backward_n(before_old_finish, n_after - 1u, old_finish);
|
|
3252
3363
|
//Insert new objects in the raw_pos
|
|
3253
3364
|
insert_range_proxy.copy_n_and_update(a, raw_pos, 1);
|
|
3254
3365
|
}
|
|
@@ -3341,10 +3452,16 @@ private:
|
|
|
3341
3452
|
|
|
3342
3453
|
#ifndef BOOST_CONTAINER_NO_CXX17_CTAD
|
|
3343
3454
|
|
|
3455
|
+
//! <b>Deduction guide</b>: allows a `vector` to be constructed from the iterator
|
|
3456
|
+
//! range <code>[first, last)</code>, deducing the element type from the value type
|
|
3457
|
+
//! of `InputIterator` and using the default allocator.
|
|
3344
3458
|
template <typename InputIterator>
|
|
3345
3459
|
vector(InputIterator, InputIterator) ->
|
|
3346
3460
|
vector<typename iter_value<InputIterator>::type>;
|
|
3347
3461
|
|
|
3462
|
+
//! <b>Deduction guide</b>: allows a `vector` to be constructed from the iterator
|
|
3463
|
+
//! range <code>[first, last)</code>, deducing the element type from the value type
|
|
3464
|
+
//! of `InputIterator` and taking the allocator type from the supplied allocator.
|
|
3348
3465
|
template <typename InputIterator, typename Allocator>
|
|
3349
3466
|
vector(InputIterator, InputIterator, Allocator const&) ->
|
|
3350
3467
|
vector<typename iter_value<InputIterator>::type, Allocator>;
|
|
@@ -3385,7 +3502,7 @@ template <class T, class Allocator, class Options>
|
|
|
3385
3502
|
struct has_trivial_destructor_after_move<boost::container::vector<T, Allocator, Options> >
|
|
3386
3503
|
{
|
|
3387
3504
|
typedef typename boost::container::vector<T, Allocator, Options>::allocator_type allocator_type;
|
|
3388
|
-
typedef typename
|
|
3505
|
+
typedef typename boost::container::allocator_traits<allocator_type>::pointer pointer;
|
|
3389
3506
|
BOOST_STATIC_CONSTEXPR bool value = ::boost::has_trivial_destructor_after_move<allocator_type>::value &&
|
|
3390
3507
|
::boost::has_trivial_destructor_after_move<pointer>::value;
|
|
3391
3508
|
};
|