passenger 4.0.60 → 5.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +5 -0
- data/.travis.yml +3 -2
- data/CHANGELOG +31 -53
- data/CONTRIBUTING.md +4 -4
- data/CONTRIBUTORS +0 -1
- data/Gemfile +18 -0
- data/Gemfile.lock +41 -0
- data/Rakefile +16 -0
- data/bin/passenger +2 -2
- data/bin/passenger-install-apache2-module +12 -12
- data/bin/passenger-install-nginx-module +9 -14
- data/bin/passenger-status +125 -87
- data/build/agents.rb +112 -140
- data/build/apache2.rb +4 -9
- data/build/basics.rb +5 -3
- data/build/common_library.rb +1 -0
- data/build/cxx_tests.rb +69 -47
- data/build/debian.rb +4 -2
- data/build/documentation.rb +1 -0
- data/build/integration_tests.rb +28 -43
- data/build/misc.rb +0 -18
- data/build/nginx.rb +2 -6
- data/build/packaging.rb +33 -22
- data/build/preprocessor.rb +2 -4
- data/build/ruby_tests.rb +7 -26
- data/build/test_basics.rb +24 -25
- data/debian.template/control.template +2 -2
- data/debian.template/locations.ini.template +2 -3
- data/debian.template/passenger.install.template +2 -2
- data/debian.template/rules.template +1 -1
- data/dev/ci/run_jenkins.sh +0 -1
- data/dev/ci/run_rpm_tests.sh +3 -0
- data/dev/ci/run_travis.sh +63 -17
- data/dev/copy_boost_headers +22 -6
- data/dev/ruby_server.rb +244 -0
- data/dev/vagrant/provision.sh +3 -1
- data/doc/DebuggingAndStressTesting.md +3 -3
- data/doc/Design and Architecture.txt +5 -6
- data/doc/Packaging.txt.md +35 -6
- data/doc/ServerOptimizationGuide.txt.md +339 -0
- data/doc/Users guide Apache.idmap.txt +177 -187
- data/doc/Users guide Apache.txt +143 -219
- data/doc/Users guide Nginx.idmap.txt +166 -166
- data/doc/Users guide Nginx.txt +265 -223
- data/doc/Users guide Standalone.txt +3 -3
- data/doc/templates/markdown.html.erb +37 -6
- data/doc/users_guide_snippets/environment_variables.txt +1 -1
- data/doc/users_guide_snippets/support_information.txt +1 -1
- data/doc/users_guide_snippets/tips.txt +2 -2
- data/ext/apache2/Configuration.cpp +23 -81
- data/ext/apache2/Configuration.hpp +18 -92
- data/ext/apache2/ConfigurationCommands.cpp +64 -15
- data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
- data/ext/apache2/ConfigurationFields.hpp +12 -0
- data/ext/apache2/ConfigurationSetters.cpp +73 -1
- data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
- data/ext/apache2/CreateDirConfig.cpp +6 -0
- data/ext/apache2/DirectoryMapper.h +11 -6
- data/ext/apache2/Hooks.cpp +291 -408
- data/ext/apache2/MergeDirConfig.cpp +42 -0
- data/ext/apache2/SetHeaders.cpp +61 -16
- data/ext/apache2/SetHeaders.cpp.erb +9 -7
- data/ext/boost/container/allocator_traits.hpp +400 -0
- data/ext/boost/container/deque.hpp +2012 -0
- data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
- data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
- data/ext/boost/container/detail/algorithms.hpp +84 -0
- data/ext/boost/container/detail/allocation_type.hpp +54 -0
- data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
- data/ext/boost/container/detail/config_begin.hpp +49 -0
- data/ext/boost/container/detail/config_end.hpp +17 -0
- data/ext/boost/container/detail/destroyers.hpp +365 -0
- data/ext/boost/container/detail/flat_tree.hpp +1055 -0
- data/ext/boost/container/detail/function_detector.hpp +88 -0
- data/ext/boost/container/detail/iterators.hpp +611 -0
- data/ext/boost/container/detail/math_functions.hpp +113 -0
- data/ext/boost/container/detail/memory_util.hpp +83 -0
- data/ext/boost/container/detail/mpl.hpp +160 -0
- data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
- data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
- data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
- data/ext/boost/container/detail/pair.hpp +354 -0
- data/ext/boost/container/detail/pool_common.hpp +52 -0
- data/ext/boost/container/detail/preprocessor.hpp +232 -0
- data/ext/boost/container/detail/transform_iterator.hpp +176 -0
- data/ext/boost/container/detail/tree.hpp +1134 -0
- data/ext/boost/container/detail/type_traits.hpp +210 -0
- data/ext/boost/container/detail/utilities.hpp +1141 -0
- data/ext/boost/container/detail/value_init.hpp +45 -0
- data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
- data/ext/boost/container/detail/version_type.hpp +92 -0
- data/ext/boost/container/detail/workaround.hpp +44 -0
- data/ext/boost/container/flat_map.hpp +1674 -0
- data/ext/boost/container/flat_set.hpp +1408 -0
- data/ext/boost/container/list.hpp +1475 -0
- data/ext/boost/container/map.hpp +1508 -0
- data/ext/boost/container/scoped_allocator.hpp +1503 -0
- data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
- data/ext/boost/container/set.hpp +1280 -0
- data/ext/boost/container/slist.hpp +1706 -0
- data/ext/boost/container/stable_vector.hpp +1869 -0
- data/ext/boost/container/static_vector.hpp +1053 -0
- data/ext/boost/container/string.hpp +2856 -0
- data/ext/boost/container/throw_exception.hpp +110 -0
- data/ext/boost/container/vector.hpp +2671 -0
- data/ext/boost/detail/is_xxx.hpp +61 -0
- data/ext/boost/intrusive/any_hook.hpp +344 -0
- data/ext/boost/intrusive/avl_set.hpp +2528 -0
- data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
- data/ext/boost/intrusive/avltree.hpp +1786 -0
- data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
- data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
- data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
- data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
- data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
- data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
- data/ext/boost/intrusive/detail/assert.hpp +41 -0
- data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
- data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
- data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
- data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
- data/ext/boost/intrusive/detail/config_end.hpp +15 -0
- data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
- data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
- data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
- data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
- data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
- data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
- data/ext/boost/intrusive/detail/list_node.hpp +196 -0
- data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
- data/ext/boost/intrusive/detail/mpl.hpp +383 -0
- data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
- data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
- data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
- data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
- data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
- data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
- data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
- data/ext/boost/intrusive/detail/utilities.hpp +858 -0
- data/ext/boost/intrusive/detail/workaround.hpp +22 -0
- data/ext/boost/intrusive/hashtable.hpp +3110 -0
- data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
- data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
- data/ext/boost/intrusive/link_mode.hpp +46 -0
- data/ext/boost/intrusive/list.hpp +1525 -0
- data/ext/boost/intrusive/list_hook.hpp +290 -0
- data/ext/boost/intrusive/member_value_traits.hpp +70 -0
- data/ext/boost/intrusive/options.hpp +810 -0
- data/ext/boost/intrusive/parent_from_member.hpp +42 -0
- data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
- data/ext/boost/intrusive/pointer_traits.hpp +265 -0
- data/ext/boost/intrusive/priority_compare.hpp +39 -0
- data/ext/boost/intrusive/rbtree.hpp +1785 -0
- data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
- data/ext/boost/intrusive/set.hpp +2554 -0
- data/ext/boost/intrusive/set_hook.hpp +300 -0
- data/ext/boost/intrusive/sg_set.hpp +2601 -0
- data/ext/boost/intrusive/sgtree.hpp +2009 -0
- data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
- data/ext/boost/intrusive/slist.hpp +2219 -0
- data/ext/boost/intrusive/slist_hook.hpp +294 -0
- data/ext/boost/intrusive/splay_set.hpp +2575 -0
- data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
- data/ext/boost/intrusive/splaytree.hpp +1784 -0
- data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
- data/ext/boost/intrusive/treap.hpp +1882 -0
- data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
- data/ext/boost/intrusive/treap_set.hpp +2751 -0
- data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
- data/ext/boost/intrusive/unordered_set.hpp +2115 -0
- data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
- data/ext/boost/intrusive_ptr.hpp +18 -0
- data/ext/boost/math/common_factor_ct.hpp +180 -0
- data/ext/boost/math_fwd.hpp +108 -0
- data/ext/boost/move/detail/move_helpers.hpp +175 -0
- data/ext/boost/parameter.hpp +21 -0
- data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
- data/ext/boost/parameter/aux_/cast.hpp +143 -0
- data/ext/boost/parameter/aux_/default.hpp +69 -0
- data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
- data/ext/boost/parameter/aux_/maybe.hpp +120 -0
- data/ext/boost/parameter/aux_/overloads.hpp +88 -0
- data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
- data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
- data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
- data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
- data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
- data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
- data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
- data/ext/boost/parameter/aux_/set.hpp +67 -0
- data/ext/boost/parameter/aux_/tag.hpp +38 -0
- data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
- data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
- data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
- data/ext/boost/parameter/aux_/void.hpp +29 -0
- data/ext/boost/parameter/aux_/yesno.hpp +26 -0
- data/ext/boost/parameter/binding.hpp +106 -0
- data/ext/boost/parameter/config.hpp +14 -0
- data/ext/boost/parameter/keyword.hpp +152 -0
- data/ext/boost/parameter/macros.hpp +99 -0
- data/ext/boost/parameter/match.hpp +55 -0
- data/ext/boost/parameter/name.hpp +156 -0
- data/ext/boost/parameter/parameters.hpp +931 -0
- data/ext/boost/parameter/preprocessor.hpp +1178 -0
- data/ext/boost/parameter/python.hpp +735 -0
- data/ext/boost/parameter/value_type.hpp +108 -0
- data/ext/boost/pool/detail/for.m4 +107 -0
- data/ext/boost/pool/detail/guard.hpp +69 -0
- data/ext/boost/pool/detail/mutex.hpp +42 -0
- data/ext/boost/pool/detail/pool_construct.bat +24 -0
- data/ext/boost/pool/detail/pool_construct.ipp +852 -0
- data/ext/boost/pool/detail/pool_construct.m4 +84 -0
- data/ext/boost/pool/detail/pool_construct.sh +12 -0
- data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
- data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
- data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
- data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
- data/ext/boost/pool/object_pool.hpp +287 -0
- data/ext/boost/pool/pool.hpp +1024 -0
- data/ext/boost/pool/pool_alloc.hpp +488 -0
- data/ext/boost/pool/poolfwd.hpp +82 -0
- data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
- data/ext/boost/pool/singleton_pool.hpp +251 -0
- data/ext/boost/preprocessor/arithmetic.hpp +25 -0
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
- data/ext/boost/preprocessor/array.hpp +32 -0
- data/ext/boost/preprocessor/array/enum.hpp +33 -0
- data/ext/boost/preprocessor/array/insert.hpp +55 -0
- data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
- data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
- data/ext/boost/preprocessor/array/push_back.hpp +33 -0
- data/ext/boost/preprocessor/array/push_front.hpp +33 -0
- data/ext/boost/preprocessor/array/remove.hpp +54 -0
- data/ext/boost/preprocessor/array/replace.hpp +49 -0
- data/ext/boost/preprocessor/array/reverse.hpp +29 -0
- data/ext/boost/preprocessor/array/to_list.hpp +33 -0
- data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
- data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
- data/ext/boost/preprocessor/assert_msg.hpp +17 -0
- data/ext/boost/preprocessor/comma.hpp +17 -0
- data/ext/boost/preprocessor/comparison.hpp +24 -0
- data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
- data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
- data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
- data/ext/boost/preprocessor/comparison/less.hpp +46 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
- data/ext/boost/preprocessor/config/limits.hpp +30 -0
- data/ext/boost/preprocessor/control.hpp +22 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
- data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
- data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
- data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
- data/ext/boost/preprocessor/debug.hpp +18 -0
- data/ext/boost/preprocessor/debug/assert.hpp +44 -0
- data/ext/boost/preprocessor/debug/line.hpp +35 -0
- data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
- data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
- data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
- data/ext/boost/preprocessor/detail/null.hpp +17 -0
- data/ext/boost/preprocessor/detail/split.hpp +35 -0
- data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
- data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
- data/ext/boost/preprocessor/expand.hpp +17 -0
- data/ext/boost/preprocessor/expr_if.hpp +17 -0
- data/ext/boost/preprocessor/facilities.hpp +23 -0
- data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
- data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
- data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
- data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
- data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
- data/ext/boost/preprocessor/for.hpp +17 -0
- data/ext/boost/preprocessor/if.hpp +17 -0
- data/ext/boost/preprocessor/iteration.hpp +19 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
- data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
- data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
- data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
- data/ext/boost/preprocessor/iteration/local.hpp +26 -0
- data/ext/boost/preprocessor/iteration/self.hpp +19 -0
- data/ext/boost/preprocessor/library.hpp +36 -0
- data/ext/boost/preprocessor/limits.hpp +17 -0
- data/ext/boost/preprocessor/list.hpp +37 -0
- data/ext/boost/preprocessor/list/at.hpp +39 -0
- data/ext/boost/preprocessor/list/cat.hpp +42 -0
- data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
- data/ext/boost/preprocessor/list/enum.hpp +41 -0
- data/ext/boost/preprocessor/list/filter.hpp +54 -0
- data/ext/boost/preprocessor/list/first_n.hpp +58 -0
- data/ext/boost/preprocessor/list/for_each.hpp +49 -0
- data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
- data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
- data/ext/boost/preprocessor/list/size.hpp +58 -0
- data/ext/boost/preprocessor/list/to_array.hpp +123 -0
- data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
- data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
- data/ext/boost/preprocessor/logical.hpp +29 -0
- data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
- data/ext/boost/preprocessor/logical/nor.hpp +30 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/logical/or.hpp +30 -0
- data/ext/boost/preprocessor/logical/xor.hpp +30 -0
- data/ext/boost/preprocessor/max.hpp +17 -0
- data/ext/boost/preprocessor/min.hpp +17 -0
- data/ext/boost/preprocessor/punctuation.hpp +20 -0
- data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
- data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repetition.hpp +32 -0
- data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
- data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
- data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
- data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
- data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
- data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
- data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
- data/ext/boost/preprocessor/selection.hpp +18 -0
- data/ext/boost/preprocessor/selection/max.hpp +39 -0
- data/ext/boost/preprocessor/selection/min.hpp +39 -0
- data/ext/boost/preprocessor/seq.hpp +43 -0
- data/ext/boost/preprocessor/seq/cat.hpp +49 -0
- data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
- data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
- data/ext/boost/preprocessor/seq/filter.hpp +54 -0
- data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
- data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
- data/ext/boost/preprocessor/seq/insert.hpp +28 -0
- data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
- data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
- data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
- data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
- data/ext/boost/preprocessor/seq/remove.hpp +29 -0
- data/ext/boost/preprocessor/seq/replace.hpp +29 -0
- data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
- data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
- data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/preprocessor/slot.hpp +17 -0
- data/ext/boost/preprocessor/slot/counter.hpp +25 -0
- data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
- data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
- data/ext/boost/preprocessor/tuple.hpp +28 -0
- data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
- data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
- data/ext/boost/preprocessor/tuple/size.hpp +28 -0
- data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
- data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
- data/ext/boost/preprocessor/variadic.hpp +23 -0
- data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
- data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
- data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
- data/ext/boost/preprocessor/while.hpp +17 -0
- data/ext/boost/preprocessor/wstringize.hpp +29 -0
- data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
- data/ext/common/AccountsDatabase.h +3 -4
- data/ext/common/AgentsStarter.cpp +12 -15
- data/ext/common/AgentsStarter.h +54 -120
- data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
- data/ext/common/ApplicationPool2/AppTypes.h +21 -14
- data/ext/common/ApplicationPool2/Common.h +36 -19
- data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
- data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
- data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
- data/ext/common/ApplicationPool2/Group.h +304 -171
- data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
- data/ext/common/ApplicationPool2/Options.h +50 -62
- data/ext/common/ApplicationPool2/Pool.h +285 -189
- data/ext/common/ApplicationPool2/Process.h +126 -115
- data/ext/common/ApplicationPool2/Session.h +70 -30
- data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
- data/ext/common/ApplicationPool2/Socket.h +57 -43
- data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
- data/ext/common/ApplicationPool2/Spawner.h +59 -38
- data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
- data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
- data/ext/common/BackgroundEventLoop.cpp +48 -1
- data/ext/common/BackgroundEventLoop.h +3 -1
- data/ext/common/Constants.h +30 -8
- data/ext/common/DataStructures/HashedStaticString.h +103 -0
- data/ext/common/DataStructures/LString.h +396 -0
- data/ext/common/DataStructures/StringKeyTable.h +588 -0
- data/ext/common/EventedMessageServer.h +1 -0
- data/ext/common/FileDescriptor.h +5 -0
- data/ext/common/InstanceDirectory.h +240 -0
- data/ext/common/Logging.cpp +38 -13
- data/ext/common/Logging.h +53 -22
- data/ext/common/MemoryKit/mbuf.cpp +413 -0
- data/ext/common/MemoryKit/mbuf.h +266 -0
- data/ext/common/MemoryKit/palloc.cpp +337 -0
- data/ext/common/MemoryKit/palloc.h +121 -0
- data/ext/common/ResourceLocator.h +62 -6
- data/ext/common/SafeLibev.h +4 -4
- data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
- data/ext/common/ServerKit/Channel.h +747 -0
- data/ext/common/ServerKit/Client.h +166 -0
- data/ext/common/ServerKit/ClientRef.h +130 -0
- data/ext/common/ServerKit/Context.h +129 -0
- data/ext/common/ServerKit/Errors.h +103 -0
- data/ext/common/ServerKit/FdSinkChannel.h +206 -0
- data/ext/common/ServerKit/FdSourceChannel.h +230 -0
- data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
- data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
- data/ext/common/ServerKit/HeaderTable.h +472 -0
- data/ext/common/ServerKit/Hooks.h +79 -0
- data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
- data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
- data/ext/common/ServerKit/HttpClient.h +94 -0
- data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
- data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
- data/ext/common/ServerKit/HttpRequest.h +276 -0
- data/ext/common/ServerKit/HttpRequestRef.h +130 -0
- data/ext/common/ServerKit/HttpServer.h +1152 -0
- data/ext/common/ServerKit/Implementation.cpp +47 -0
- data/ext/common/ServerKit/Server.h +1040 -0
- data/ext/common/ServerKit/http_parser.cpp +2259 -0
- data/ext/common/ServerKit/http_parser.h +330 -0
- data/ext/common/StaticString.h +8 -0
- data/ext/common/Utils.cpp +14 -12
- data/ext/common/Utils.h +9 -103
- data/ext/common/Utils/BufferedIO.h +1 -0
- data/ext/common/Utils/CachedFileStat.hpp +1 -7
- data/ext/common/Utils/DateParsing.h +379 -0
- data/ext/common/Utils/FileChangeChecker.h +3 -9
- data/ext/common/Utils/Hasher.cpp +52 -0
- data/ext/common/Utils/Hasher.h +58 -0
- data/ext/common/Utils/IOUtils.cpp +62 -62
- data/ext/common/Utils/JsonUtils.h +21 -0
- data/ext/common/Utils/OptionParsing.h +75 -0
- data/ext/common/Utils/StrIntUtils.cpp +112 -19
- data/ext/common/Utils/StrIntUtils.h +52 -12
- data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
- data/ext/common/Utils/VariantMap.h +18 -7
- data/ext/common/Utils/modp_b64.cpp +290 -0
- data/ext/common/Utils/modp_b64.h +241 -0
- data/ext/common/Utils/modp_b64_data.h +479 -0
- data/ext/common/Utils/sysqueue.h +811 -0
- data/ext/common/agents/Base.cpp +71 -98
- data/ext/common/agents/Base.h +11 -3
- data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
- data/ext/common/agents/HelperAgent/Main.cpp +899 -487
- data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
- data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
- data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
- data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
- data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
- data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
- data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
- data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
- data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
- data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
- data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
- data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
- data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
- data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/Main.cpp +107 -0
- data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
- data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
- data/ext/common/agents/Watchdog/AdminServer.h +390 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
- data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
- data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
- data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
- data/ext/common/agents/Watchdog/Main.cpp +743 -202
- data/ext/libeio/eio.c +17 -0
- data/ext/libeio/eio.h +2 -0
- data/ext/nginx/CacheLocationConfig.c +177 -198
- data/ext/nginx/CacheLocationConfig.c.erb +35 -22
- data/ext/nginx/Configuration.c +402 -236
- data/ext/nginx/Configuration.h +12 -5
- data/ext/nginx/ConfigurationCommands.c +35 -15
- data/ext/nginx/ConfigurationCommands.c.erb +4 -4
- data/ext/nginx/ConfigurationFields.h +9 -5
- data/ext/nginx/ConfigurationFields.h.erb +3 -1
- data/ext/nginx/ContentHandler.c +393 -362
- data/ext/nginx/CreateLocationConfig.c +8 -4
- data/ext/nginx/CreateLocationConfig.c.erb +8 -3
- data/ext/nginx/MergeLocationConfig.c +36 -6
- data/ext/nginx/MergeLocationConfig.c.erb +42 -1
- data/ext/nginx/ngx_http_passenger_module.c +28 -15
- data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
- data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
- data/ext/oxt/implementation.cpp +92 -20
- data/ext/oxt/thread.hpp +5 -0
- data/ext/ruby/extconf.rb +3 -6
- data/ext/ruby/passenger_native_support.c +13 -40
- data/helper-scripts/download_binaries/extconf.rb +4 -4
- data/helper-scripts/meteor-loader.rb +12 -112
- data/helper-scripts/node-loader.js +3 -91
- data/helper-scripts/rack-loader.rb +13 -14
- data/helper-scripts/rack-preloader.rb +16 -17
- data/helper-scripts/wsgi-loader.py +11 -7
- data/lib/phusion_passenger.rb +100 -79
- data/lib/phusion_passenger/abstract_installer.rb +28 -3
- data/lib/phusion_passenger/admin_tools.rb +3 -3
- data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
- data/lib/phusion_passenger/apache2/config_options.rb +72 -22
- data/lib/phusion_passenger/common_library.rb +79 -14
- data/lib/phusion_passenger/config/about_command.rb +17 -23
- data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
- data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
- data/lib/phusion_passenger/config/command.rb +1 -4
- data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
- data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
- data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
- data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
- data/lib/phusion_passenger/config/installation_utils.rb +241 -0
- data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
- data/lib/phusion_passenger/config/main.rb +43 -14
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
- data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
- data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
- data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
- data/lib/phusion_passenger/config/utils.rb +64 -39
- data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
- data/lib/phusion_passenger/constants.rb +27 -6
- data/lib/phusion_passenger/debug_logging.rb +32 -15
- data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
- data/lib/phusion_passenger/message_client.rb +21 -22
- data/lib/phusion_passenger/native_support.rb +26 -31
- data/lib/phusion_passenger/nginx/config_options.rb +32 -19
- data/lib/phusion_passenger/packaging.rb +7 -3
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
- data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
- data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
- data/lib/phusion_passenger/request_handler.rb +47 -82
- data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
- data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
- data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
- data/lib/phusion_passenger/standalone/command.rb +27 -275
- data/lib/phusion_passenger/standalone/command2.rb +292 -0
- data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
- data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
- data/lib/phusion_passenger/standalone/main.rb +69 -71
- data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
- data/lib/phusion_passenger/standalone/start_command.rb +406 -467
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
- data/lib/phusion_passenger/standalone/status_command.rb +64 -23
- data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
- data/lib/phusion_passenger/standalone/version_command.rb +1 -5
- data/lib/phusion_passenger/utils.rb +0 -4
- data/lib/phusion_passenger/utils/json.rb +70 -4
- data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
- data/lib/phusion_passenger/utils/tee_input.rb +3 -3
- data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
- data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
- data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
- data/packaging/rpm/setup-system +2 -1
- data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
- data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
- data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
- data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
- data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
- data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
- data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
- data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
- data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
- data/resources/templates/standalone/config.erb +14 -16
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
- data/test/.rspec +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
- data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
- data/test/cxx/BufferedIOTest.cpp +40 -40
- data/test/cxx/CxxTestMain.cpp +4 -22
- data/test/cxx/DataStructures/LStringTest.cpp +275 -0
- data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
- data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
- data/test/cxx/MessageServerTest.cpp +62 -55
- data/test/cxx/RequestHandlerTest.cpp +26 -27
- data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
- data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
- data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
- data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
- data/test/cxx/ServerKit/ServerTest.cpp +408 -0
- data/test/cxx/TestSupport.cpp +51 -15
- data/test/cxx/TestSupport.h +31 -21
- data/test/cxx/UnionStationTest.cpp +121 -122
- data/test/cxx/UtilsTest.cpp +9 -33
- data/test/integration_tests/apache2_tests.rb +65 -27
- data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
- data/test/integration_tests/native_packaging_spec.rb +32 -17
- data/test/integration_tests/nginx_tests.rb +28 -10
- data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
- data/test/integration_tests/standalone_tests.rb +232 -169
- data/test/ruby/debug_logging_spec.rb +44 -40
- data/test/ruby/rails3.0/preloader_spec.rb +1 -1
- data/test/ruby/rails3.1/preloader_spec.rb +1 -1
- data/test/ruby/rails3.2/preloader_spec.rb +1 -1
- data/test/ruby/rails4.0/preloader_spec.rb +1 -1
- data/test/ruby/rails4.1/preloader_spec.rb +1 -1
- data/test/ruby/request_handler_spec.rb +62 -24
- data/test/ruby/shared/loader_sharedspec.rb +10 -9
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
- data/test/ruby/spec_helper.rb +2 -11
- data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
- data/test/ruby/union_station_spec.rb +45 -40
- data/test/ruby/utils/tee_input_spec.rb +5 -5
- data/test/ruby/utils_spec.rb +3 -39
- data/test/stub/apache2/httpd.conf.erb +5 -2
- data/test/stub/nginx/nginx.conf.erb +3 -1
- data/test/support/apache2_controller.rb +25 -25
- data/test/support/nginx_controller.rb +14 -14
- data/test/support/test_helper.rb +74 -75
- metadata +439 -643
- metadata.gz.asc +7 -7
- data/ext/common/MultiLibeio.cpp +0 -204
- data/ext/common/MultiLibeio.h +0 -67
- data/ext/common/ServerInstanceDir.h +0 -402
- data/ext/common/Utils/Base64.cpp +0 -143
- data/ext/common/Utils/Base64.h +0 -83
- data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
- data/ext/common/Utils/PriorityQueue.h +0 -54
- data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
- data/ext/common/Utils/fib.c +0 -699
- data/ext/common/Utils/fib.h +0 -101
- data/ext/common/Utils/fibpriv.h +0 -67
- data/ext/common/agents/EnvPrinter.c +0 -16
- data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
- data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
- data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
- data/ext/common/agents/SpawnPreparer.cpp +0 -206
- data/ext/common/agents/TempDirToucher.c +0 -383
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
- data/helper-scripts/classic-rails-loader.rb +0 -166
- data/helper-scripts/classic-rails-preloader.rb +0 -193
- data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
- data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
- data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
- data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
- data/lib/phusion_passenger/standalone/config_file.rb +0 -119
- data/lib/phusion_passenger/standalone/help_command.rb +0 -57
- data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
- data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
- data/lib/phusion_passenger/standalone/utils.rb +0 -58
- data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
- data/packaging/debian/LICENSE.md +0 -19
- data/packaging/debian/README.md +0 -320
- data/packaging/debian/Vagrantfile +0 -25
- data/packaging/debian/build +0 -210
- data/packaging/debian/debian_specs/nginx/changelog +0 -1989
- data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
- data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
- data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
- data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
- data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
- data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
- data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
- data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
- data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
- data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
- data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
- data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
- data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
- data/packaging/debian/debian_specs/nginx/control.erb +0 -226
- data/packaging/debian/debian_specs/nginx/copyright +0 -196
- data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
- data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
- data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
- data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
- data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
- data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
- data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
- data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
- data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
- data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
- data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
- data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
- data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
- data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
- data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
- data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
- data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
- data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
- data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
- data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
- data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
- data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
- data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
- data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
- data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
- data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
- data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
- data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
- data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
- data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
- data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
- data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
- data/packaging/debian/debian_specs/nginx/patches/series +0 -1
- data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
- data/packaging/debian/debian_specs/nginx/source/format +0 -1
- data/packaging/debian/debian_specs/nginx/tests/control +0 -4
- data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
- data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
- data/packaging/debian/debian_specs/nginx/watch +0 -3
- data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger/changelog +0 -316
- data/packaging/debian/debian_specs/passenger/compat +0 -1
- data/packaging/debian/debian_specs/passenger/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger/copyright +0 -385
- data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
- data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
- data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
- data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
- data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
- data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
- data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
- data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger/source/format +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
- data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
- data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
- data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
- data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
- data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
- data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
- data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
- data/packaging/debian/docker_images/Makefile +0 -38
- data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
- data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
- data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
- data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
- data/packaging/debian/docker_images/buildbox/install.sh +0 -85
- data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
- data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
- data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
- data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
- data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
- data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
- data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
- data/packaging/debian/internal/build/Rakefile +0 -235
- data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
- data/packaging/debian/internal/build/build-source-package.rb +0 -121
- data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
- data/packaging/debian/internal/build/rakefile_support.rb +0 -96
- data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
- data/packaging/debian/internal/build/setup-environment.sh +0 -29
- data/packaging/debian/internal/lib/distro_info.rb +0 -82
- data/packaging/debian/internal/lib/distro_info.sh +0 -303
- data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
- data/packaging/debian/internal/lib/library.sh +0 -83
- data/packaging/debian/internal/lib/preprocessor.rb +0 -173
- data/packaging/debian/internal/lib/tracking.rb +0 -95
- data/packaging/debian/internal/lib/tracking_category.rb +0 -45
- data/packaging/debian/internal/lib/tracking_database.rb +0 -132
- data/packaging/debian/internal/lib/tracking_task.rb +0 -148
- data/packaging/debian/internal/lib/utils.rb +0 -78
- data/packaging/debian/internal/publish/Rakefile +0 -97
- data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
- data/packaging/debian/internal/publish/preinit.sh +0 -7
- data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
- data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
- data/packaging/debian/internal/scripts/initccache.sh +0 -35
- data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
- data/packaging/debian/internal/scripts/my_init +0 -340
- data/packaging/debian/internal/scripts/pin_certificates +0 -34
- data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
- data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
- data/packaging/debian/internal/scripts/setuser +0 -31
- data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
- data/packaging/debian/internal/shell/preinit.sh +0 -28
- data/packaging/debian/internal/shell/sudoers.conf +0 -1
- data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
- data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
- data/packaging/debian/internal/test/apache/vhost.conf +0 -17
- data/packaging/debian/internal/test/misc/config.json +0 -15
- data/packaging/debian/internal/test/misc/hosts.conf +0 -4
- data/packaging/debian/internal/test/misc/init.sh +0 -25
- data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
- data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
- data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
- data/packaging/debian/internal/test/misc/test_support.rb +0 -61
- data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
- data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
- data/packaging/debian/internal/test/test.sh +0 -141
- data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
- data/packaging/debian/jenkins/publish/publish.sh +0 -69
- data/packaging/debian/jenkins/test/test.sh +0 -63
- data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
- data/packaging/debian/publish +0 -172
- data/packaging/debian/shell +0 -116
- data/packaging/debian/test +0 -142
- data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
- data/test/cxx/Base64Test.cpp +0 -50
- data/test/cxx/FileBackedPipeTest.cpp +0 -626
- data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
- data/test/cxx/ScgiRequestParserTest.cpp +0 -423
- data/test/cxx/ServerInstanceDirTest.cpp +0 -175
- data/test/ruby/admin_tools_spec.rb +0 -360
- data/test/ruby/classic_rails/loader_spec.rb +0 -46
- data/test/ruby/classic_rails/preloader_spec.rb +0 -52
- data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
- data/test/stub/rails2.3/Rakefile +0 -10
- data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
- data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
- data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
- data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
- data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
- data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
- data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
- data/test/stub/rails2.3/config/boot.rb +0 -110
- data/test/stub/rails2.3/config/database.yml +0 -19
- data/test/stub/rails2.3/config/environment.rb +0 -62
- data/test/stub/rails2.3/config/environments/development.rb +0 -17
- data/test/stub/rails2.3/config/environments/production.rb +0 -18
- data/test/stub/rails2.3/config/environments/staging.rb +0 -18
- data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
- data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails2.3/config/routes.rb +0 -35
- data/test/stub/rails2.3/log/.gitignore +0 -1
- data/test/stub/rails2.3/public/.gitignore +0 -1
- data/test/stub/rails2.3/script/about +0 -3
- data/test/stub/rails2.3/script/console +0 -3
- data/test/stub/rails2.3/script/dbconsole +0 -3
- data/test/stub/rails2.3/script/destroy +0 -3
- data/test/stub/rails2.3/script/generate +0 -3
- data/test/stub/rails2.3/script/performance/benchmarker +0 -3
- data/test/stub/rails2.3/script/performance/profiler +0 -3
- data/test/stub/rails2.3/script/performance/request +0 -3
- data/test/stub/rails2.3/script/plugin +0 -3
- data/test/stub/rails2.3/script/process/inspector +0 -3
- data/test/stub/rails2.3/script/process/reaper +0 -3
- data/test/stub/rails2.3/script/process/spawner +0 -3
- data/test/stub/rails2.3/script/runner +0 -3
- data/test/stub/rails2.3/script/server +0 -3
- data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
- data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -0,0 +1,110 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
|
4
|
+
// Software License, Version 1.0. (See accompanying file
|
5
|
+
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
6
|
+
//
|
7
|
+
// See http://www.boost.org/libs/container for documentation.
|
8
|
+
//
|
9
|
+
//////////////////////////////////////////////////////////////////////////////
|
10
|
+
|
11
|
+
#ifndef BOOST_CONTAINER_THROW_EXCEPTION_HPP
|
12
|
+
#define BOOST_CONTAINER_THROW_EXCEPTION_HPP
|
13
|
+
|
14
|
+
#include <boost/container/detail/config_begin.hpp>
|
15
|
+
#include <boost/container/detail/workaround.hpp>
|
16
|
+
|
17
|
+
#if (defined _MSC_VER) && (_MSC_VER >= 1200)
|
18
|
+
# pragma once
|
19
|
+
#endif
|
20
|
+
|
21
|
+
#ifndef BOOST_NO_EXCEPTIONS
|
22
|
+
#include <stdexcept> //for std exception types
|
23
|
+
#include <new> //for std::bad_alloc
|
24
|
+
#else
|
25
|
+
#include <boost/assert.hpp>
|
26
|
+
#include <cstdlib> //for std::abort
|
27
|
+
#endif
|
28
|
+
|
29
|
+
namespace boost {
|
30
|
+
namespace container {
|
31
|
+
|
32
|
+
#if defined(BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS)
|
33
|
+
//The user must provide definitions for the following functions
|
34
|
+
|
35
|
+
void throw_bad_alloc();
|
36
|
+
|
37
|
+
void throw_out_of_range(const char* str);
|
38
|
+
|
39
|
+
void throw_length_error(const char* str);
|
40
|
+
|
41
|
+
void throw_logic_error(const char* str);
|
42
|
+
|
43
|
+
void throw_runtime_error(const char* str);
|
44
|
+
|
45
|
+
#elif defined(BOOST_NO_EXCEPTIONS)
|
46
|
+
|
47
|
+
inline void throw_bad_alloc()
|
48
|
+
{
|
49
|
+
BOOST_ASSERT(!"boost::container bad_alloc thrown");
|
50
|
+
std::abort();
|
51
|
+
}
|
52
|
+
|
53
|
+
inline void throw_out_of_range(const char* str)
|
54
|
+
{
|
55
|
+
BOOST_ASSERT_MSG(!"boost::container out_of_range thrown", str);
|
56
|
+
std::abort();
|
57
|
+
}
|
58
|
+
|
59
|
+
inline void throw_length_error(const char* str)
|
60
|
+
{
|
61
|
+
BOOST_ASSERT_MSG(!"boost::container length_error thrown", str);
|
62
|
+
std::abort();
|
63
|
+
}
|
64
|
+
|
65
|
+
inline void throw_logic_error(const char* str)
|
66
|
+
{
|
67
|
+
BOOST_ASSERT_MSG(!"boost::container logic_error thrown", str);
|
68
|
+
std::abort();
|
69
|
+
}
|
70
|
+
|
71
|
+
inline void throw_runtime_error(const char* str)
|
72
|
+
{
|
73
|
+
BOOST_ASSERT_MSG(!"boost::container runtime_error thrown", str);
|
74
|
+
std::abort();
|
75
|
+
}
|
76
|
+
|
77
|
+
#else //defined(BOOST_NO_EXCEPTIONS)
|
78
|
+
|
79
|
+
inline void throw_bad_alloc()
|
80
|
+
{
|
81
|
+
throw std::bad_alloc();
|
82
|
+
}
|
83
|
+
|
84
|
+
inline void throw_out_of_range(const char* str)
|
85
|
+
{
|
86
|
+
throw std::out_of_range(str);
|
87
|
+
}
|
88
|
+
|
89
|
+
inline void throw_length_error(const char* str)
|
90
|
+
{
|
91
|
+
throw std::length_error(str);
|
92
|
+
}
|
93
|
+
|
94
|
+
inline void throw_logic_error(const char* str)
|
95
|
+
{
|
96
|
+
throw std::logic_error(str);
|
97
|
+
}
|
98
|
+
|
99
|
+
inline void throw_runtime_error(const char* str)
|
100
|
+
{
|
101
|
+
throw std::runtime_error(str);
|
102
|
+
}
|
103
|
+
|
104
|
+
#endif
|
105
|
+
|
106
|
+
}} //namespace boost { namespace container {
|
107
|
+
|
108
|
+
#include <boost/container/detail/config_end.hpp>
|
109
|
+
|
110
|
+
#endif //#ifndef BOOST_CONTAINER_THROW_EXCEPTION_HPP
|
@@ -0,0 +1,2671 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost
|
4
|
+
// Software License, Version 1.0. (See accompanying file
|
5
|
+
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
6
|
+
//
|
7
|
+
// See http://www.boost.org/libs/container for documentation.
|
8
|
+
//
|
9
|
+
//////////////////////////////////////////////////////////////////////////////
|
10
|
+
|
11
|
+
#ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP
|
12
|
+
#define BOOST_CONTAINER_CONTAINER_VECTOR_HPP
|
13
|
+
|
14
|
+
#if (defined _MSC_VER) && (_MSC_VER >= 1200)
|
15
|
+
# pragma once
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#include <boost/container/detail/config_begin.hpp>
|
19
|
+
#include <boost/container/detail/workaround.hpp>
|
20
|
+
#include <boost/container/container_fwd.hpp>
|
21
|
+
|
22
|
+
#include <cstddef>
|
23
|
+
#include <memory>
|
24
|
+
#include <algorithm>
|
25
|
+
#include <iterator>
|
26
|
+
#include <utility>
|
27
|
+
#include <boost/detail/no_exceptions_support.hpp>
|
28
|
+
#include <boost/type_traits/has_trivial_destructor.hpp>
|
29
|
+
#include <boost/type_traits/has_trivial_copy.hpp>
|
30
|
+
#include <boost/type_traits/has_trivial_assign.hpp>
|
31
|
+
#include <boost/type_traits/has_nothrow_copy.hpp>
|
32
|
+
#include <boost/type_traits/has_nothrow_assign.hpp>
|
33
|
+
#include <boost/type_traits/has_nothrow_constructor.hpp>
|
34
|
+
#include <boost/container/container_fwd.hpp>
|
35
|
+
#include <boost/container/detail/version_type.hpp>
|
36
|
+
#include <boost/container/detail/allocation_type.hpp>
|
37
|
+
#include <boost/container/detail/utilities.hpp>
|
38
|
+
#include <boost/container/detail/iterators.hpp>
|
39
|
+
#include <boost/container/detail/algorithms.hpp>
|
40
|
+
#include <boost/container/detail/destroyers.hpp>
|
41
|
+
#include <boost/container/allocator_traits.hpp>
|
42
|
+
#include <boost/container/detail/allocator_version_traits.hpp>
|
43
|
+
#include <boost/container/throw_exception.hpp>
|
44
|
+
#include <boost/move/utility.hpp>
|
45
|
+
#include <boost/move/iterator.hpp>
|
46
|
+
#include <boost/move/detail/move_helpers.hpp>
|
47
|
+
#include <boost/intrusive/pointer_traits.hpp>
|
48
|
+
#include <boost/container/detail/mpl.hpp>
|
49
|
+
#include <boost/container/detail/type_traits.hpp>
|
50
|
+
#include <boost/container/detail/advanced_insert_int.hpp>
|
51
|
+
#include <boost/assert.hpp>
|
52
|
+
|
53
|
+
namespace boost {
|
54
|
+
namespace container {
|
55
|
+
|
56
|
+
/// @cond
|
57
|
+
|
58
|
+
//#define BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
59
|
+
|
60
|
+
namespace container_detail {
|
61
|
+
|
62
|
+
#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
63
|
+
|
64
|
+
//! Const vector_iterator used to iterate through a vector.
|
65
|
+
template <class Pointer>
|
66
|
+
class vector_const_iterator
|
67
|
+
{
|
68
|
+
public:
|
69
|
+
typedef std::random_access_iterator_tag iterator_category;
|
70
|
+
typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
|
71
|
+
typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
|
72
|
+
typedef typename boost::intrusive::pointer_traits<Pointer>::template
|
73
|
+
rebind_pointer<const value_type>::type pointer;
|
74
|
+
typedef const value_type& reference;
|
75
|
+
|
76
|
+
/// @cond
|
77
|
+
protected:
|
78
|
+
Pointer m_ptr;
|
79
|
+
|
80
|
+
public:
|
81
|
+
const Pointer &get_ptr() const BOOST_CONTAINER_NOEXCEPT
|
82
|
+
{ return m_ptr; }
|
83
|
+
|
84
|
+
Pointer &get_ptr() BOOST_CONTAINER_NOEXCEPT
|
85
|
+
{ return m_ptr; }
|
86
|
+
|
87
|
+
explicit vector_const_iterator(Pointer ptr) BOOST_CONTAINER_NOEXCEPT
|
88
|
+
: m_ptr(ptr)
|
89
|
+
{}
|
90
|
+
/// @endcond
|
91
|
+
|
92
|
+
public:
|
93
|
+
|
94
|
+
//Constructors
|
95
|
+
vector_const_iterator() BOOST_CONTAINER_NOEXCEPT
|
96
|
+
#ifndef NDEBUG
|
97
|
+
: m_ptr()
|
98
|
+
#else
|
99
|
+
// No value initialization of m_ptr() to speed up things a bit:
|
100
|
+
#endif
|
101
|
+
{}
|
102
|
+
|
103
|
+
//Pointer like operators
|
104
|
+
reference operator*() const BOOST_CONTAINER_NOEXCEPT
|
105
|
+
{ return *m_ptr; }
|
106
|
+
|
107
|
+
const value_type * operator->() const BOOST_CONTAINER_NOEXCEPT
|
108
|
+
{ return container_detail::to_raw_pointer(m_ptr); }
|
109
|
+
|
110
|
+
reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
|
111
|
+
{ return m_ptr[off]; }
|
112
|
+
|
113
|
+
//Increment / Decrement
|
114
|
+
vector_const_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
|
115
|
+
{ ++m_ptr; return *this; }
|
116
|
+
|
117
|
+
vector_const_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
|
118
|
+
{ return vector_const_iterator(m_ptr++); }
|
119
|
+
|
120
|
+
vector_const_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
|
121
|
+
{ --m_ptr; return *this; }
|
122
|
+
|
123
|
+
vector_const_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
|
124
|
+
{ return vector_const_iterator(m_ptr--); }
|
125
|
+
|
126
|
+
//Arithmetic
|
127
|
+
vector_const_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
|
128
|
+
{ m_ptr += off; return *this; }
|
129
|
+
|
130
|
+
vector_const_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
|
131
|
+
{ m_ptr -= off; return *this; }
|
132
|
+
|
133
|
+
friend vector_const_iterator operator+(const vector_const_iterator &x, difference_type off) BOOST_CONTAINER_NOEXCEPT
|
134
|
+
{ return vector_const_iterator(x.m_ptr+off); }
|
135
|
+
|
136
|
+
friend vector_const_iterator operator+(difference_type off, vector_const_iterator right) BOOST_CONTAINER_NOEXCEPT
|
137
|
+
{ right.m_ptr += off; return right; }
|
138
|
+
|
139
|
+
friend vector_const_iterator operator-(vector_const_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
|
140
|
+
{ left.m_ptr -= off; return left; }
|
141
|
+
|
142
|
+
friend difference_type operator-(const vector_const_iterator &left, const vector_const_iterator& right) BOOST_CONTAINER_NOEXCEPT
|
143
|
+
{ return left.m_ptr - right.m_ptr; }
|
144
|
+
|
145
|
+
//Comparison operators
|
146
|
+
friend bool operator== (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
147
|
+
{ return l.m_ptr == r.m_ptr; }
|
148
|
+
|
149
|
+
friend bool operator!= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
150
|
+
{ return l.m_ptr != r.m_ptr; }
|
151
|
+
|
152
|
+
friend bool operator< (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
153
|
+
{ return l.m_ptr < r.m_ptr; }
|
154
|
+
|
155
|
+
friend bool operator<= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
156
|
+
{ return l.m_ptr <= r.m_ptr; }
|
157
|
+
|
158
|
+
friend bool operator> (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
159
|
+
{ return l.m_ptr > r.m_ptr; }
|
160
|
+
|
161
|
+
friend bool operator>= (const vector_const_iterator& l, const vector_const_iterator& r) BOOST_CONTAINER_NOEXCEPT
|
162
|
+
{ return l.m_ptr >= r.m_ptr; }
|
163
|
+
};
|
164
|
+
|
165
|
+
//! Iterator used to iterate through a vector
|
166
|
+
template <class Pointer>
|
167
|
+
class vector_iterator
|
168
|
+
: public vector_const_iterator<Pointer>
|
169
|
+
{
|
170
|
+
typedef vector_const_iterator<Pointer> base_t;
|
171
|
+
public:
|
172
|
+
explicit vector_iterator(Pointer ptr) BOOST_CONTAINER_NOEXCEPT
|
173
|
+
: base_t(ptr)
|
174
|
+
{}
|
175
|
+
|
176
|
+
public:
|
177
|
+
typedef std::random_access_iterator_tag iterator_category;
|
178
|
+
typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
|
179
|
+
typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
|
180
|
+
typedef Pointer pointer;
|
181
|
+
typedef value_type& reference;
|
182
|
+
|
183
|
+
//Constructors
|
184
|
+
vector_iterator() BOOST_CONTAINER_NOEXCEPT
|
185
|
+
: base_t()
|
186
|
+
{}
|
187
|
+
|
188
|
+
//Pointer like operators
|
189
|
+
reference operator*() const BOOST_CONTAINER_NOEXCEPT
|
190
|
+
{ return *this->m_ptr; }
|
191
|
+
|
192
|
+
value_type* operator->() const BOOST_CONTAINER_NOEXCEPT
|
193
|
+
{ return container_detail::to_raw_pointer(this->m_ptr); }
|
194
|
+
|
195
|
+
reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
|
196
|
+
{ return this->m_ptr[off]; }
|
197
|
+
|
198
|
+
//Increment / Decrement
|
199
|
+
vector_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
|
200
|
+
{ ++this->m_ptr; return *this; }
|
201
|
+
|
202
|
+
vector_iterator operator++(int) BOOST_CONTAINER_NOEXCEPT
|
203
|
+
{ return vector_iterator(this->m_ptr++); }
|
204
|
+
|
205
|
+
vector_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
|
206
|
+
{ --this->m_ptr; return *this; }
|
207
|
+
|
208
|
+
vector_iterator operator--(int) BOOST_CONTAINER_NOEXCEPT
|
209
|
+
{ return vector_iterator(this->m_ptr--); }
|
210
|
+
|
211
|
+
// Arithmetic
|
212
|
+
vector_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
|
213
|
+
{ this->m_ptr += off; return *this; }
|
214
|
+
|
215
|
+
vector_iterator& operator-=(difference_type off) BOOST_CONTAINER_NOEXCEPT
|
216
|
+
{ this->m_ptr -= off; return *this; }
|
217
|
+
|
218
|
+
friend vector_iterator operator+(vector_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
|
219
|
+
{ left.m_ptr += off; return left; }
|
220
|
+
|
221
|
+
friend vector_iterator operator+(difference_type off, vector_iterator right) BOOST_CONTAINER_NOEXCEPT
|
222
|
+
{ right.m_ptr += off; return right; }
|
223
|
+
|
224
|
+
friend vector_iterator operator-(vector_iterator left, difference_type off) BOOST_CONTAINER_NOEXCEPT
|
225
|
+
{ left.m_ptr -= off; return left; }
|
226
|
+
};
|
227
|
+
|
228
|
+
} //namespace container_detail {
|
229
|
+
|
230
|
+
template<class Pointer>
|
231
|
+
const Pointer &vector_iterator_get_ptr(const container_detail::vector_const_iterator<Pointer> &it) BOOST_CONTAINER_NOEXCEPT
|
232
|
+
{ return it.get_ptr(); }
|
233
|
+
|
234
|
+
template<class Pointer>
|
235
|
+
Pointer &get_ptr(container_detail::vector_const_iterator<Pointer> &it) BOOST_CONTAINER_NOEXCEPT
|
236
|
+
{ return it.get_ptr(); }
|
237
|
+
|
238
|
+
namespace container_detail {
|
239
|
+
|
240
|
+
#else //ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
241
|
+
|
242
|
+
template< class MaybeConstPointer
|
243
|
+
, bool ElementTypeIsConst
|
244
|
+
= is_const< typename boost::intrusive::pointer_traits<MaybeConstPointer>::element_type>::value >
|
245
|
+
struct vector_get_ptr_pointer_to_non_const
|
246
|
+
{
|
247
|
+
typedef MaybeConstPointer const_pointer;
|
248
|
+
typedef boost::intrusive::pointer_traits<const_pointer> pointer_traits_t;
|
249
|
+
typedef typename pointer_traits_t::element_type element_type;
|
250
|
+
typedef typename remove_const<element_type>::type non_const_element_type;
|
251
|
+
typedef typename pointer_traits_t
|
252
|
+
::template rebind_pointer<non_const_element_type>::type return_type;
|
253
|
+
|
254
|
+
static return_type get_ptr(const const_pointer &ptr)
|
255
|
+
{ return boost::intrusive::pointer_traits<return_type>::const_cast_from(ptr); }
|
256
|
+
};
|
257
|
+
|
258
|
+
template<class Pointer>
|
259
|
+
struct vector_get_ptr_pointer_to_non_const<Pointer, false>
|
260
|
+
{
|
261
|
+
typedef const Pointer & return_type;
|
262
|
+
static return_type get_ptr(const Pointer &ptr)
|
263
|
+
{ return ptr; }
|
264
|
+
};
|
265
|
+
|
266
|
+
} //namespace container_detail {
|
267
|
+
|
268
|
+
template<class MaybeConstPointer>
|
269
|
+
typename container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::return_type
|
270
|
+
vector_iterator_get_ptr(const MaybeConstPointer &ptr) BOOST_CONTAINER_NOEXCEPT
|
271
|
+
{
|
272
|
+
return container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::get_ptr(ptr);
|
273
|
+
}
|
274
|
+
|
275
|
+
namespace container_detail {
|
276
|
+
|
277
|
+
#endif //#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
|
278
|
+
|
279
|
+
template <class T, class Allocator>
|
280
|
+
struct vector_value_traits
|
281
|
+
{
|
282
|
+
typedef T value_type;
|
283
|
+
typedef Allocator allocator_type;
|
284
|
+
static const bool trivial_dctr = boost::has_trivial_destructor<value_type>::value;
|
285
|
+
static const bool trivial_dctr_after_move = ::boost::has_trivial_destructor_after_move<value_type>::value;
|
286
|
+
static const bool trivial_copy = has_trivial_copy<value_type>::value;
|
287
|
+
static const bool nothrow_copy = has_nothrow_copy<value_type>::value || trivial_copy;
|
288
|
+
static const bool trivial_assign = has_trivial_assign<value_type>::value;
|
289
|
+
static const bool nothrow_assign = has_nothrow_assign<value_type>::value || trivial_assign;
|
290
|
+
|
291
|
+
//This is the anti-exception array destructor
|
292
|
+
//to deallocate values already constructed
|
293
|
+
typedef typename container_detail::if_c
|
294
|
+
<trivial_dctr
|
295
|
+
,container_detail::null_scoped_destructor_n<Allocator>
|
296
|
+
,container_detail::scoped_destructor_n<Allocator>
|
297
|
+
>::type OldArrayDestructor;
|
298
|
+
//This is the anti-exception array destructor
|
299
|
+
//to destroy objects created with copy construction
|
300
|
+
typedef typename container_detail::if_c
|
301
|
+
<nothrow_copy
|
302
|
+
,container_detail::null_scoped_destructor_n<Allocator>
|
303
|
+
,container_detail::scoped_destructor_n<Allocator>
|
304
|
+
>::type ArrayDestructor;
|
305
|
+
//This is the anti-exception array deallocator
|
306
|
+
typedef typename container_detail::if_c
|
307
|
+
<nothrow_copy
|
308
|
+
,container_detail::null_scoped_array_deallocator<Allocator>
|
309
|
+
,container_detail::scoped_array_deallocator<Allocator>
|
310
|
+
>::type ArrayDeallocator;
|
311
|
+
};
|
312
|
+
|
313
|
+
//!This struct deallocates and allocated memory
|
314
|
+
template < class Allocator
|
315
|
+
, class AllocatorVersion = container_detail::integral_constant
|
316
|
+
< unsigned
|
317
|
+
, boost::container::container_detail::version<Allocator>::value
|
318
|
+
>
|
319
|
+
>
|
320
|
+
struct vector_alloc_holder
|
321
|
+
: public Allocator
|
322
|
+
{
|
323
|
+
private:
|
324
|
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(vector_alloc_holder)
|
325
|
+
|
326
|
+
public:
|
327
|
+
typedef boost::container::allocator_traits<Allocator> allocator_traits_type;
|
328
|
+
typedef typename allocator_traits_type::pointer pointer;
|
329
|
+
typedef typename allocator_traits_type::size_type size_type;
|
330
|
+
typedef typename allocator_traits_type::value_type value_type;
|
331
|
+
|
332
|
+
//Constructor, does not throw
|
333
|
+
vector_alloc_holder()
|
334
|
+
BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor<Allocator>::value)
|
335
|
+
: Allocator(), m_start(), m_size(), m_capacity()
|
336
|
+
{}
|
337
|
+
|
338
|
+
//Constructor, does not throw
|
339
|
+
template<class AllocConvertible>
|
340
|
+
explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a) BOOST_CONTAINER_NOEXCEPT
|
341
|
+
: Allocator(boost::forward<AllocConvertible>(a)), m_start(), m_size(), m_capacity()
|
342
|
+
{}
|
343
|
+
|
344
|
+
//Constructor, does not throw
|
345
|
+
template<class AllocConvertible>
|
346
|
+
explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
|
347
|
+
: Allocator(boost::forward<AllocConvertible>(a))
|
348
|
+
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
|
349
|
+
{
|
350
|
+
m_start = this->allocation_command(allocate_new, initial_size, initial_size, m_capacity, m_start).first;
|
351
|
+
}
|
352
|
+
|
353
|
+
//Constructor, does not throw
|
354
|
+
explicit vector_alloc_holder(size_type initial_size)
|
355
|
+
: Allocator()
|
356
|
+
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
|
357
|
+
{
|
358
|
+
m_start = this->allocation_command
|
359
|
+
(allocate_new, initial_size, initial_size, m_capacity, m_start).first;
|
360
|
+
}
|
361
|
+
|
362
|
+
vector_alloc_holder(BOOST_RV_REF(vector_alloc_holder) holder) BOOST_CONTAINER_NOEXCEPT
|
363
|
+
: Allocator(boost::move(static_cast<Allocator&>(holder)))
|
364
|
+
, m_start(holder.m_start)
|
365
|
+
, m_size(holder.m_size)
|
366
|
+
, m_capacity(holder.m_capacity)
|
367
|
+
{
|
368
|
+
holder.m_start = pointer();
|
369
|
+
holder.m_size = holder.m_capacity = 0;
|
370
|
+
}
|
371
|
+
|
372
|
+
void first_allocation(size_type cap)
|
373
|
+
{
|
374
|
+
m_start = this->allocation_command
|
375
|
+
(allocate_new, cap, cap, m_capacity, m_start).first;
|
376
|
+
}
|
377
|
+
|
378
|
+
void first_allocation_same_allocator_type(size_type cap)
|
379
|
+
{ this->first_allocation(cap); }
|
380
|
+
|
381
|
+
~vector_alloc_holder() BOOST_CONTAINER_NOEXCEPT
|
382
|
+
{
|
383
|
+
if(this->m_capacity){
|
384
|
+
this->alloc().deallocate(this->m_start, this->m_capacity);
|
385
|
+
}
|
386
|
+
}
|
387
|
+
|
388
|
+
std::pair<pointer, bool>
|
389
|
+
allocation_command(allocation_type command,
|
390
|
+
size_type limit_size,
|
391
|
+
size_type preferred_size,
|
392
|
+
size_type &received_size, const pointer &reuse = pointer())
|
393
|
+
{
|
394
|
+
return allocator_version_traits<Allocator>::allocation_command
|
395
|
+
(this->alloc(), command, limit_size, preferred_size, received_size, reuse);
|
396
|
+
}
|
397
|
+
|
398
|
+
size_type next_capacity(size_type additional_objects) const
|
399
|
+
{
|
400
|
+
std::size_t num_objects = this->m_size + additional_objects;
|
401
|
+
std::size_t next_cap = this->m_capacity + this->m_capacity/2;
|
402
|
+
return num_objects > next_cap ? num_objects : next_cap;/*
|
403
|
+
return get_next_capacity( allocator_traits_type::max_size(this->m_holder.alloc())
|
404
|
+
, this->m_capacity, additional_objects);*/
|
405
|
+
}
|
406
|
+
|
407
|
+
pointer m_start;
|
408
|
+
size_type m_size;
|
409
|
+
size_type m_capacity;
|
410
|
+
|
411
|
+
void swap(vector_alloc_holder &x) BOOST_CONTAINER_NOEXCEPT
|
412
|
+
{
|
413
|
+
boost::container::swap_dispatch(this->m_start, x.m_start);
|
414
|
+
boost::container::swap_dispatch(this->m_size, x.m_size);
|
415
|
+
boost::container::swap_dispatch(this->m_capacity, x.m_capacity);
|
416
|
+
}
|
417
|
+
|
418
|
+
void move_from_empty(vector_alloc_holder &x) BOOST_CONTAINER_NOEXCEPT
|
419
|
+
{
|
420
|
+
this->m_start = x.m_start;
|
421
|
+
this->m_size = x.m_size;
|
422
|
+
this->m_capacity = x.m_capacity;
|
423
|
+
x.m_start = pointer();
|
424
|
+
x.m_size = x.m_capacity = 0;
|
425
|
+
}
|
426
|
+
|
427
|
+
Allocator &alloc() BOOST_CONTAINER_NOEXCEPT
|
428
|
+
{ return *this; }
|
429
|
+
|
430
|
+
const Allocator &alloc() const BOOST_CONTAINER_NOEXCEPT
|
431
|
+
{ return *this; }
|
432
|
+
|
433
|
+
const pointer &start() const BOOST_CONTAINER_NOEXCEPT { return m_start; }
|
434
|
+
const size_type &capacity() const BOOST_CONTAINER_NOEXCEPT { return m_capacity; }
|
435
|
+
void start(const pointer &p) BOOST_CONTAINER_NOEXCEPT { m_start = p; }
|
436
|
+
void capacity(const size_type &c) BOOST_CONTAINER_NOEXCEPT { m_capacity = c; }
|
437
|
+
};
|
438
|
+
|
439
|
+
//!This struct deallocates and allocated memory
|
440
|
+
template <class Allocator>
|
441
|
+
struct vector_alloc_holder<Allocator, container_detail::integral_constant<unsigned, 0> >
|
442
|
+
: public Allocator
|
443
|
+
{
|
444
|
+
private:
|
445
|
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(vector_alloc_holder)
|
446
|
+
|
447
|
+
public:
|
448
|
+
typedef boost::container::allocator_traits<Allocator> allocator_traits_type;
|
449
|
+
typedef typename allocator_traits_type::pointer pointer;
|
450
|
+
typedef typename allocator_traits_type::size_type size_type;
|
451
|
+
typedef typename allocator_traits_type::value_type value_type;
|
452
|
+
|
453
|
+
template <class OtherAllocator, class OtherAllocatorVersion>
|
454
|
+
friend struct vector_alloc_holder;
|
455
|
+
|
456
|
+
//Constructor, does not throw
|
457
|
+
vector_alloc_holder()
|
458
|
+
BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor<Allocator>::value)
|
459
|
+
: Allocator(), m_size()
|
460
|
+
{}
|
461
|
+
|
462
|
+
//Constructor, does not throw
|
463
|
+
template<class AllocConvertible>
|
464
|
+
explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a) BOOST_CONTAINER_NOEXCEPT
|
465
|
+
: Allocator(boost::forward<AllocConvertible>(a)), m_size()
|
466
|
+
{}
|
467
|
+
|
468
|
+
//Constructor, does not throw
|
469
|
+
template<class AllocConvertible>
|
470
|
+
explicit vector_alloc_holder(BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
|
471
|
+
: Allocator(boost::forward<AllocConvertible>(a))
|
472
|
+
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
|
473
|
+
{
|
474
|
+
this->first_allocation(initial_size);
|
475
|
+
}
|
476
|
+
|
477
|
+
//Constructor, does not throw
|
478
|
+
explicit vector_alloc_holder(size_type initial_size)
|
479
|
+
: Allocator()
|
480
|
+
, m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
|
481
|
+
{
|
482
|
+
this->first_allocation(initial_size);
|
483
|
+
}
|
484
|
+
|
485
|
+
vector_alloc_holder(BOOST_RV_REF(vector_alloc_holder) holder)
|
486
|
+
: Allocator(boost::move(static_cast<Allocator&>(holder)))
|
487
|
+
, m_size(holder.m_size) //Size is initialized here so vector should only call uninitialized_xxx after this
|
488
|
+
{
|
489
|
+
::boost::container::uninitialized_move_alloc_n
|
490
|
+
(this->alloc(), container_detail::to_raw_pointer(holder.start()), m_size, container_detail::to_raw_pointer(this->start()));
|
491
|
+
}
|
492
|
+
|
493
|
+
template<class OtherAllocator, class OtherAllocatorVersion>
|
494
|
+
vector_alloc_holder(BOOST_RV_REF_BEG vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> BOOST_RV_REF_END holder)
|
495
|
+
: Allocator()
|
496
|
+
, m_size(holder.m_size) //Initialize it to m_size as first_allocation can only succeed or abort
|
497
|
+
{
|
498
|
+
//Different allocator type so we must check we have enough storage
|
499
|
+
const size_type n = holder.m_size;
|
500
|
+
this->first_allocation(n);
|
501
|
+
::boost::container::uninitialized_move_alloc_n
|
502
|
+
(this->alloc(), container_detail::to_raw_pointer(holder.start()), n, container_detail::to_raw_pointer(this->start()));
|
503
|
+
}
|
504
|
+
|
505
|
+
void first_allocation(size_type cap)
|
506
|
+
{
|
507
|
+
if(cap > Allocator::internal_capacity){
|
508
|
+
throw_bad_alloc();
|
509
|
+
}
|
510
|
+
}
|
511
|
+
|
512
|
+
void first_allocation_same_allocator_type(size_type) BOOST_CONTAINER_NOEXCEPT
|
513
|
+
{}
|
514
|
+
|
515
|
+
//Destructor
|
516
|
+
~vector_alloc_holder() BOOST_CONTAINER_NOEXCEPT
|
517
|
+
{}
|
518
|
+
|
519
|
+
void swap(vector_alloc_holder &x)
|
520
|
+
{
|
521
|
+
this->priv_swap_members_impl(x);
|
522
|
+
}
|
523
|
+
|
524
|
+
template<class OtherAllocator, class OtherAllocatorVersion>
|
525
|
+
void swap(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
|
526
|
+
{
|
527
|
+
if(this->m_size > OtherAllocator::internal_capacity || x.m_size > Allocator::internal_capacity){
|
528
|
+
throw_bad_alloc();
|
529
|
+
}
|
530
|
+
this->priv_swap_members_impl(x);
|
531
|
+
}
|
532
|
+
|
533
|
+
void move_from_empty(vector_alloc_holder &)
|
534
|
+
{ //Containers with version 0 allocators can't be moved without move elements one by one
|
535
|
+
throw_bad_alloc();
|
536
|
+
}
|
537
|
+
|
538
|
+
Allocator &alloc() BOOST_CONTAINER_NOEXCEPT
|
539
|
+
{ return *this; }
|
540
|
+
|
541
|
+
const Allocator &alloc() const BOOST_CONTAINER_NOEXCEPT
|
542
|
+
{ return *this; }
|
543
|
+
|
544
|
+
pointer start() const BOOST_CONTAINER_NOEXCEPT { return Allocator::internal_storage(); }
|
545
|
+
size_type capacity() const BOOST_CONTAINER_NOEXCEPT { return Allocator::internal_capacity; }
|
546
|
+
size_type m_size;
|
547
|
+
|
548
|
+
private:
|
549
|
+
|
550
|
+
template<class OtherAllocator, class OtherAllocatorVersion>
|
551
|
+
void priv_swap_members_impl(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
|
552
|
+
{
|
553
|
+
const std::size_t MaxTmpStorage = sizeof(value_type)*Allocator::internal_capacity;
|
554
|
+
value_type *const first_this = container_detail::to_raw_pointer(this->start());
|
555
|
+
value_type *const first_x = container_detail::to_raw_pointer(x.start());
|
556
|
+
|
557
|
+
if(this->m_size < x.m_size){
|
558
|
+
boost::container::deep_swap_alloc_n<MaxTmpStorage>(this->alloc(), first_this, this->m_size, first_x, x.m_size);
|
559
|
+
}
|
560
|
+
else{
|
561
|
+
boost::container::deep_swap_alloc_n<MaxTmpStorage>(this->alloc(), first_x, x.m_size, first_this, this->m_size);
|
562
|
+
}
|
563
|
+
boost::container::swap_dispatch(this->m_size, x.m_size);
|
564
|
+
}
|
565
|
+
};
|
566
|
+
|
567
|
+
} //namespace container_detail {
|
568
|
+
/// @endcond
|
569
|
+
|
570
|
+
//! \class vector
|
571
|
+
//! A vector is a sequence that supports random access to elements, constant
|
572
|
+
//! time insertion and removal of elements at the end, and linear time insertion
|
573
|
+
//! and removal of elements at the beginning or in the middle. The number of
|
574
|
+
//! elements in a vector may vary dynamically; memory management is automatic.
|
575
|
+
//! boost::container::vector is similar to std::vector but it's compatible
|
576
|
+
//! with shared memory and memory mapped files.
|
577
|
+
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
|
578
|
+
template <class T, class Allocator = std::allocator<T> >
|
579
|
+
#else
|
580
|
+
template <class T, class Allocator>
|
581
|
+
#endif
|
582
|
+
class vector
|
583
|
+
{
|
584
|
+
/// @cond
|
585
|
+
typedef container_detail::integral_constant
|
586
|
+
<unsigned, boost::container::container_detail::version
|
587
|
+
<Allocator>::value > alloc_version;
|
588
|
+
boost::container::container_detail::vector_alloc_holder<Allocator, alloc_version> m_holder;
|
589
|
+
typedef container_detail::vector_alloc_holder<Allocator> base_t;
|
590
|
+
typedef allocator_traits<Allocator> allocator_traits_type;
|
591
|
+
template <class U, class UAllocator>
|
592
|
+
friend class vector;
|
593
|
+
/// @endcond
|
594
|
+
public:
|
595
|
+
//////////////////////////////////////////////
|
596
|
+
//
|
597
|
+
// types
|
598
|
+
//
|
599
|
+
//////////////////////////////////////////////
|
600
|
+
|
601
|
+
typedef T value_type;
|
602
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
|
603
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
|
604
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
|
605
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::const_reference const_reference;
|
606
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
|
607
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
|
608
|
+
typedef Allocator allocator_type;
|
609
|
+
typedef Allocator stored_allocator_type;
|
610
|
+
#if defined BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER && !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
611
|
+
typedef BOOST_CONTAINER_IMPDEF(pointer) iterator;
|
612
|
+
typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
|
613
|
+
#else
|
614
|
+
typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_iterator<pointer>) iterator;
|
615
|
+
typedef BOOST_CONTAINER_IMPDEF(container_detail::vector_const_iterator<pointer>) const_iterator;
|
616
|
+
#endif
|
617
|
+
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
618
|
+
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
619
|
+
|
620
|
+
/// @cond
|
621
|
+
private:
|
622
|
+
BOOST_COPYABLE_AND_MOVABLE(vector)
|
623
|
+
typedef container_detail::vector_value_traits<value_type, Allocator> value_traits;
|
624
|
+
|
625
|
+
typedef container_detail::integral_constant<unsigned, 0> allocator_v0;
|
626
|
+
typedef container_detail::integral_constant<unsigned, 1> allocator_v1;
|
627
|
+
typedef container_detail::integral_constant<unsigned, 2> allocator_v2;
|
628
|
+
|
629
|
+
typedef constant_iterator<T, difference_type> cvalue_iterator;
|
630
|
+
/// @endcond
|
631
|
+
|
632
|
+
public:
|
633
|
+
//////////////////////////////////////////////
|
634
|
+
//
|
635
|
+
// construct/copy/destroy
|
636
|
+
//
|
637
|
+
//////////////////////////////////////////////
|
638
|
+
|
639
|
+
//! <b>Effects</b>: Constructs a vector taking the allocator as parameter.
|
640
|
+
//!
|
641
|
+
//! <b>Throws</b>: If allocator_type's default constructor throws.
|
642
|
+
//!
|
643
|
+
//! <b>Complexity</b>: Constant.
|
644
|
+
vector()
|
645
|
+
BOOST_CONTAINER_NOEXCEPT_IF(::boost::has_nothrow_default_constructor<Allocator>::value)
|
646
|
+
: m_holder()
|
647
|
+
{}
|
648
|
+
|
649
|
+
//! <b>Effects</b>: Constructs a vector taking the allocator as parameter.
|
650
|
+
//!
|
651
|
+
//! <b>Throws</b>: Nothing
|
652
|
+
//!
|
653
|
+
//! <b>Complexity</b>: Constant.
|
654
|
+
explicit vector(const Allocator& a) BOOST_CONTAINER_NOEXCEPT
|
655
|
+
: m_holder(a)
|
656
|
+
{}
|
657
|
+
|
658
|
+
//! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
|
659
|
+
//! and inserts n default contructed values.
|
660
|
+
//!
|
661
|
+
//! <b>Throws</b>: If allocator_type's default constructor or allocation
|
662
|
+
//! throws or T's default constructor throws.
|
663
|
+
//!
|
664
|
+
//! <b>Complexity</b>: Linear to n.
|
665
|
+
explicit vector(size_type n)
|
666
|
+
: m_holder(n)
|
667
|
+
{
|
668
|
+
boost::container::uninitialized_default_alloc_n(this->m_holder.alloc(), n, container_detail::to_raw_pointer(this->m_holder.start()));
|
669
|
+
}
|
670
|
+
|
671
|
+
//! <b>Effects</b>: Constructs a vector
|
672
|
+
//! and inserts n copies of value.
|
673
|
+
//!
|
674
|
+
//! <b>Throws</b>: If allocator_type's default constructor or allocation
|
675
|
+
//! throws or T's copy constructor throws.
|
676
|
+
//!
|
677
|
+
//! <b>Complexity</b>: Linear to n.
|
678
|
+
vector(size_type n, const T& value)
|
679
|
+
: m_holder(n)
|
680
|
+
{
|
681
|
+
boost::container::uninitialized_fill_alloc_n
|
682
|
+
(this->m_holder.alloc(), value, n, container_detail::to_raw_pointer(this->m_holder.start()));
|
683
|
+
}
|
684
|
+
|
685
|
+
//! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
|
686
|
+
//! and inserts n copies of value.
|
687
|
+
//!
|
688
|
+
//! <b>Throws</b>: If allocation
|
689
|
+
//! throws or T's copy constructor throws.
|
690
|
+
//!
|
691
|
+
//! <b>Complexity</b>: Linear to n.
|
692
|
+
vector(size_type n, const T& value, const allocator_type& a)
|
693
|
+
: m_holder(a, n)
|
694
|
+
{
|
695
|
+
boost::container::uninitialized_fill_alloc_n
|
696
|
+
(this->m_holder.alloc(), value, n, container_detail::to_raw_pointer(this->m_holder.start()));
|
697
|
+
}
|
698
|
+
|
699
|
+
//! <b>Effects</b>: Constructs a vector
|
700
|
+
//! and inserts a copy of the range [first, last) in the vector.
|
701
|
+
//!
|
702
|
+
//! <b>Throws</b>: If allocator_type's default constructor or allocation
|
703
|
+
//! throws or T's constructor taking an dereferenced InIt throws.
|
704
|
+
//!
|
705
|
+
//! <b>Complexity</b>: Linear to the range [first, last).
|
706
|
+
template <class InIt>
|
707
|
+
vector(InIt first, InIt last)
|
708
|
+
: m_holder()
|
709
|
+
{ this->insert(this->cend(), first, last); }
|
710
|
+
|
711
|
+
//! <b>Effects</b>: Constructs a vector that will use a copy of allocator a
|
712
|
+
//! and inserts a copy of the range [first, last) in the vector.
|
713
|
+
//!
|
714
|
+
//! <b>Throws</b>: If allocator_type's default constructor or allocation
|
715
|
+
//! throws or T's constructor taking an dereferenced InIt throws.
|
716
|
+
//!
|
717
|
+
//! <b>Complexity</b>: Linear to the range [first, last).
|
718
|
+
template <class InIt>
|
719
|
+
vector(InIt first, InIt last, const allocator_type& a)
|
720
|
+
: m_holder(a)
|
721
|
+
{ this->insert(this->cend(), first, last); }
|
722
|
+
|
723
|
+
//! <b>Effects</b>: Copy constructs a vector.
|
724
|
+
//!
|
725
|
+
//! <b>Postcondition</b>: x == *this.
|
726
|
+
//!
|
727
|
+
//! <b>Throws</b>: If allocator_type's default constructor or allocation
|
728
|
+
//! throws or T's copy constructor throws.
|
729
|
+
//!
|
730
|
+
//! <b>Complexity</b>: Linear to the elements x contains.
|
731
|
+
vector(const vector &x)
|
732
|
+
: m_holder(allocator_traits_type::select_on_container_copy_construction(x.m_holder.alloc()), x.size())
|
733
|
+
{
|
734
|
+
::boost::container::uninitialized_copy_alloc_n
|
735
|
+
( this->m_holder.alloc(), container_detail::to_raw_pointer(x.m_holder.start())
|
736
|
+
, x.size(), container_detail::to_raw_pointer(this->m_holder.start()));
|
737
|
+
}
|
738
|
+
|
739
|
+
//! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
|
740
|
+
//!
|
741
|
+
//! <b>Throws</b>: Nothing
|
742
|
+
//!
|
743
|
+
//! <b>Complexity</b>: Constant.
|
744
|
+
vector(BOOST_RV_REF(vector) mx) BOOST_CONTAINER_NOEXCEPT
|
745
|
+
: m_holder(boost::move(mx.m_holder))
|
746
|
+
{}
|
747
|
+
|
748
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
749
|
+
|
750
|
+
//! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
|
751
|
+
//!
|
752
|
+
//! <b>Throws</b>: If T's move constructor or allocation throws
|
753
|
+
//!
|
754
|
+
//! <b>Complexity</b>: Linear.
|
755
|
+
//!
|
756
|
+
//! <b>Note</b>: Non-standard extension
|
757
|
+
template<class OtherAllocator>
|
758
|
+
vector(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END mx)
|
759
|
+
: m_holder(boost::move(mx.m_holder))
|
760
|
+
{}
|
761
|
+
|
762
|
+
#endif //!defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
763
|
+
|
764
|
+
//! <b>Effects</b>: Copy constructs a vector using the specified allocator.
|
765
|
+
//!
|
766
|
+
//! <b>Postcondition</b>: x == *this.
|
767
|
+
//!
|
768
|
+
//! <b>Throws</b>: If allocation
|
769
|
+
//! throws or T's copy constructor throws.
|
770
|
+
//!
|
771
|
+
//! <b>Complexity</b>: Linear to the elements x contains.
|
772
|
+
vector(const vector &x, const allocator_type &a)
|
773
|
+
: m_holder(a, x.size())
|
774
|
+
{
|
775
|
+
::boost::container::uninitialized_copy_alloc_n_source
|
776
|
+
( this->m_holder.alloc(), container_detail::to_raw_pointer(x.m_holder.start())
|
777
|
+
, x.size(), container_detail::to_raw_pointer(this->m_holder.start()));
|
778
|
+
}
|
779
|
+
|
780
|
+
//! <b>Effects</b>: Move constructor using the specified allocator.
|
781
|
+
//! Moves mx's resources to *this if a == allocator_type().
|
782
|
+
//! Otherwise copies values from x to *this.
|
783
|
+
//!
|
784
|
+
//! <b>Throws</b>: If allocation or T's copy constructor throws.
|
785
|
+
//!
|
786
|
+
//! <b>Complexity</b>: Constant if a == mx.get_allocator(), linear otherwise.
|
787
|
+
vector(BOOST_RV_REF(vector) mx, const allocator_type &a)
|
788
|
+
: m_holder(a)
|
789
|
+
{
|
790
|
+
if(mx.m_holder.alloc() == a){
|
791
|
+
this->m_holder.move_from_empty(mx.m_holder);
|
792
|
+
}
|
793
|
+
else{
|
794
|
+
const size_type n = mx.size();
|
795
|
+
this->m_holder.first_allocation_same_allocator_type(n);
|
796
|
+
::boost::container::uninitialized_move_alloc_n_source
|
797
|
+
( this->m_holder.alloc(), container_detail::to_raw_pointer(mx.m_holder.start())
|
798
|
+
, n, container_detail::to_raw_pointer(this->m_holder.start()));
|
799
|
+
this->m_holder.m_size = n;
|
800
|
+
}
|
801
|
+
}
|
802
|
+
|
803
|
+
//! <b>Effects</b>: Destroys the vector. All stored values are destroyed
|
804
|
+
//! and used memory is deallocated.
|
805
|
+
//!
|
806
|
+
//! <b>Throws</b>: Nothing.
|
807
|
+
//!
|
808
|
+
//! <b>Complexity</b>: Linear to the number of elements.
|
809
|
+
~vector() BOOST_CONTAINER_NOEXCEPT
|
810
|
+
{
|
811
|
+
boost::container::destroy_alloc_n
|
812
|
+
(this->get_stored_allocator(), container_detail::to_raw_pointer(this->m_holder.start()), this->m_holder.m_size);
|
813
|
+
//vector_alloc_holder deallocates the data
|
814
|
+
}
|
815
|
+
|
816
|
+
//! <b>Effects</b>: Makes *this contain the same elements as x.
|
817
|
+
//!
|
818
|
+
//! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
|
819
|
+
//! of each of x's elements.
|
820
|
+
//!
|
821
|
+
//! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment throws.
|
822
|
+
//!
|
823
|
+
//! <b>Complexity</b>: Linear to the number of elements in x.
|
824
|
+
vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x)
|
825
|
+
{
|
826
|
+
if (&x != this){
|
827
|
+
this->priv_copy_assign(boost::move(x), alloc_version());
|
828
|
+
}
|
829
|
+
return *this;
|
830
|
+
}
|
831
|
+
|
832
|
+
//! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
|
833
|
+
//!
|
834
|
+
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
|
835
|
+
//! before the function.
|
836
|
+
//!
|
837
|
+
//! <b>Throws</b>: Nothing
|
838
|
+
//!
|
839
|
+
//! <b>Complexity</b>: Linear.
|
840
|
+
vector& operator=(BOOST_RV_REF(vector) x)
|
841
|
+
//iG BOOST_CONTAINER_NOEXCEPT_IF(!allocator_type::propagate_on_container_move_assignment::value || is_nothrow_move_assignable<allocator_type>::value);)
|
842
|
+
BOOST_CONTAINER_NOEXCEPT
|
843
|
+
{
|
844
|
+
this->priv_move_assign(boost::move(x), alloc_version());
|
845
|
+
return *this;
|
846
|
+
}
|
847
|
+
|
848
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
849
|
+
|
850
|
+
//! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
|
851
|
+
//!
|
852
|
+
//! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
|
853
|
+
//! before the function.
|
854
|
+
//!
|
855
|
+
//! <b>Throws</b>: If move constructor/assignment of T throws or allocation throws
|
856
|
+
//!
|
857
|
+
//! <b>Complexity</b>: Linear.
|
858
|
+
template<class OtherAllocator, class OtherAllocatorVersion>
|
859
|
+
vector& operator=(BOOST_RV_REF_BEG vector<OtherAllocator, OtherAllocatorVersion> BOOST_RV_REF_END x)
|
860
|
+
{
|
861
|
+
this->priv_move_assign(boost::move(x), alloc_version());
|
862
|
+
return *this;
|
863
|
+
}
|
864
|
+
|
865
|
+
#endif
|
866
|
+
|
867
|
+
//! <b>Effects</b>: Assigns the the range [first, last) to *this.
|
868
|
+
//!
|
869
|
+
//! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment or
|
870
|
+
//! T's constructor/assignment from dereferencing InpIt throws.
|
871
|
+
//!
|
872
|
+
//! <b>Complexity</b>: Linear to n.
|
873
|
+
template <class InIt>
|
874
|
+
void assign(InIt first, InIt last
|
875
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
876
|
+
, typename container_detail::enable_if_c
|
877
|
+
< !container_detail::is_convertible<InIt, size_type>::value
|
878
|
+
//&& container_detail::is_input_iterator<InIt>::value
|
879
|
+
>::type * = 0
|
880
|
+
#endif
|
881
|
+
)
|
882
|
+
{
|
883
|
+
//Overwrite all elements we can from [first, last)
|
884
|
+
iterator cur = this->begin();
|
885
|
+
const iterator end_it = this->end();
|
886
|
+
for ( ; first != last && cur != end_it; ++cur, ++first){
|
887
|
+
*cur = *first;
|
888
|
+
}
|
889
|
+
|
890
|
+
if (first == last){
|
891
|
+
//There are no more elements in the sequence, erase remaining
|
892
|
+
T* const end_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
893
|
+
size_type n = static_cast<size_type>(end_pos - container_detail::to_raw_pointer(vector_iterator_get_ptr(cur)));
|
894
|
+
this->priv_destroy_last_n(n);
|
895
|
+
}
|
896
|
+
else{
|
897
|
+
//There are more elements in the range, insert the remaining ones
|
898
|
+
this->insert(this->cend(), first, last);
|
899
|
+
}
|
900
|
+
}
|
901
|
+
|
902
|
+
//! <b>Effects</b>: Assigns the n copies of val to *this.
|
903
|
+
//!
|
904
|
+
//! <b>Throws</b>: If memory allocation throws or
|
905
|
+
//! T's copy/move constructor/assignment throws.
|
906
|
+
//!
|
907
|
+
//! <b>Complexity</b>: Linear to n.
|
908
|
+
void assign(size_type n, const value_type& val)
|
909
|
+
{ this->assign(cvalue_iterator(val, n), cvalue_iterator()); }
|
910
|
+
|
911
|
+
//! <b>Effects</b>: Returns a copy of the internal allocator.
|
912
|
+
//!
|
913
|
+
//! <b>Throws</b>: If allocator's copy constructor throws.
|
914
|
+
//!
|
915
|
+
//! <b>Complexity</b>: Constant.
|
916
|
+
allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
|
917
|
+
{ return this->m_holder.alloc(); }
|
918
|
+
|
919
|
+
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
920
|
+
//!
|
921
|
+
//! <b>Throws</b>: Nothing
|
922
|
+
//!
|
923
|
+
//! <b>Complexity</b>: Constant.
|
924
|
+
//!
|
925
|
+
//! <b>Note</b>: Non-standard extension.
|
926
|
+
stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
|
927
|
+
{ return this->m_holder.alloc(); }
|
928
|
+
|
929
|
+
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
930
|
+
//!
|
931
|
+
//! <b>Throws</b>: Nothing
|
932
|
+
//!
|
933
|
+
//! <b>Complexity</b>: Constant.
|
934
|
+
//!
|
935
|
+
//! <b>Note</b>: Non-standard extension.
|
936
|
+
const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
|
937
|
+
{ return this->m_holder.alloc(); }
|
938
|
+
|
939
|
+
//////////////////////////////////////////////
|
940
|
+
//
|
941
|
+
// iterators
|
942
|
+
//
|
943
|
+
//////////////////////////////////////////////
|
944
|
+
|
945
|
+
//! <b>Effects</b>: Returns an iterator to the first element contained in the vector.
|
946
|
+
//!
|
947
|
+
//! <b>Throws</b>: Nothing.
|
948
|
+
//!
|
949
|
+
//! <b>Complexity</b>: Constant.
|
950
|
+
iterator begin() BOOST_CONTAINER_NOEXCEPT
|
951
|
+
{ return iterator(this->m_holder.start()); }
|
952
|
+
|
953
|
+
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
954
|
+
//!
|
955
|
+
//! <b>Throws</b>: Nothing.
|
956
|
+
//!
|
957
|
+
//! <b>Complexity</b>: Constant.
|
958
|
+
const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
|
959
|
+
{ return const_iterator(this->m_holder.start()); }
|
960
|
+
|
961
|
+
//! <b>Effects</b>: Returns an iterator to the end of the vector.
|
962
|
+
//!
|
963
|
+
//! <b>Throws</b>: Nothing.
|
964
|
+
//!
|
965
|
+
//! <b>Complexity</b>: Constant.
|
966
|
+
iterator end() BOOST_CONTAINER_NOEXCEPT
|
967
|
+
{ return iterator(this->m_holder.start() + this->m_holder.m_size); }
|
968
|
+
|
969
|
+
//! <b>Effects</b>: Returns a const_iterator to the end of the vector.
|
970
|
+
//!
|
971
|
+
//! <b>Throws</b>: Nothing.
|
972
|
+
//!
|
973
|
+
//! <b>Complexity</b>: Constant.
|
974
|
+
const_iterator end() const BOOST_CONTAINER_NOEXCEPT
|
975
|
+
{ return this->cend(); }
|
976
|
+
|
977
|
+
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
|
978
|
+
//! of the reversed vector.
|
979
|
+
//!
|
980
|
+
//! <b>Throws</b>: Nothing.
|
981
|
+
//!
|
982
|
+
//! <b>Complexity</b>: Constant.
|
983
|
+
reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
|
984
|
+
{ return reverse_iterator(this->end()); }
|
985
|
+
|
986
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
987
|
+
//! of the reversed vector.
|
988
|
+
//!
|
989
|
+
//! <b>Throws</b>: Nothing.
|
990
|
+
//!
|
991
|
+
//! <b>Complexity</b>: Constant.
|
992
|
+
const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
|
993
|
+
{ return this->crbegin(); }
|
994
|
+
|
995
|
+
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
|
996
|
+
//! of the reversed vector.
|
997
|
+
//!
|
998
|
+
//! <b>Throws</b>: Nothing.
|
999
|
+
//!
|
1000
|
+
//! <b>Complexity</b>: Constant.
|
1001
|
+
reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
|
1002
|
+
{ return reverse_iterator(this->begin()); }
|
1003
|
+
|
1004
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
1005
|
+
//! of the reversed vector.
|
1006
|
+
//!
|
1007
|
+
//! <b>Throws</b>: Nothing.
|
1008
|
+
//!
|
1009
|
+
//! <b>Complexity</b>: Constant.
|
1010
|
+
const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
|
1011
|
+
{ return this->crend(); }
|
1012
|
+
|
1013
|
+
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
1014
|
+
//!
|
1015
|
+
//! <b>Throws</b>: Nothing.
|
1016
|
+
//!
|
1017
|
+
//! <b>Complexity</b>: Constant.
|
1018
|
+
const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
|
1019
|
+
{ return const_iterator(this->m_holder.start()); }
|
1020
|
+
|
1021
|
+
//! <b>Effects</b>: Returns a const_iterator to the end of the vector.
|
1022
|
+
//!
|
1023
|
+
//! <b>Throws</b>: Nothing.
|
1024
|
+
//!
|
1025
|
+
//! <b>Complexity</b>: Constant.
|
1026
|
+
const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
|
1027
|
+
{ return const_iterator(this->m_holder.start() + this->m_holder.m_size); }
|
1028
|
+
|
1029
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
1030
|
+
//! of the reversed vector.
|
1031
|
+
//!
|
1032
|
+
//! <b>Throws</b>: Nothing.
|
1033
|
+
//!
|
1034
|
+
//! <b>Complexity</b>: Constant.
|
1035
|
+
const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
|
1036
|
+
{ return const_reverse_iterator(this->end());}
|
1037
|
+
|
1038
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
1039
|
+
//! of the reversed vector.
|
1040
|
+
//!
|
1041
|
+
//! <b>Throws</b>: Nothing.
|
1042
|
+
//!
|
1043
|
+
//! <b>Complexity</b>: Constant.
|
1044
|
+
const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
|
1045
|
+
{ return const_reverse_iterator(this->begin()); }
|
1046
|
+
|
1047
|
+
//////////////////////////////////////////////
|
1048
|
+
//
|
1049
|
+
// capacity
|
1050
|
+
//
|
1051
|
+
//////////////////////////////////////////////
|
1052
|
+
|
1053
|
+
//! <b>Effects</b>: Returns true if the vector contains no elements.
|
1054
|
+
//!
|
1055
|
+
//! <b>Throws</b>: Nothing.
|
1056
|
+
//!
|
1057
|
+
//! <b>Complexity</b>: Constant.
|
1058
|
+
bool empty() const BOOST_CONTAINER_NOEXCEPT
|
1059
|
+
{ return !this->m_holder.m_size; }
|
1060
|
+
|
1061
|
+
//! <b>Effects</b>: Returns the number of the elements contained in the vector.
|
1062
|
+
//!
|
1063
|
+
//! <b>Throws</b>: Nothing.
|
1064
|
+
//!
|
1065
|
+
//! <b>Complexity</b>: Constant.
|
1066
|
+
size_type size() const BOOST_CONTAINER_NOEXCEPT
|
1067
|
+
{ return this->m_holder.m_size; }
|
1068
|
+
|
1069
|
+
//! <b>Effects</b>: Returns the largest possible size of the vector.
|
1070
|
+
//!
|
1071
|
+
//! <b>Throws</b>: Nothing.
|
1072
|
+
//!
|
1073
|
+
//! <b>Complexity</b>: Constant.
|
1074
|
+
size_type max_size() const BOOST_CONTAINER_NOEXCEPT
|
1075
|
+
{ return allocator_traits_type::max_size(this->m_holder.alloc()); }
|
1076
|
+
|
1077
|
+
//! <b>Effects</b>: Inserts or erases elements at the end such that
|
1078
|
+
//! the size becomes n. New elements are default constructed.
|
1079
|
+
//!
|
1080
|
+
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
|
1081
|
+
//!
|
1082
|
+
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
|
1083
|
+
void resize(size_type new_size)
|
1084
|
+
{
|
1085
|
+
const size_type sz = this->size();
|
1086
|
+
if (new_size < sz){
|
1087
|
+
//Destroy last elements
|
1088
|
+
this->priv_destroy_last_n(sz - new_size);
|
1089
|
+
}
|
1090
|
+
else{
|
1091
|
+
const size_type n = new_size - this->size();
|
1092
|
+
container_detail::insert_default_constructed_n_proxy<Allocator, T*> proxy(this->m_holder.alloc());
|
1093
|
+
this->priv_forward_range_insert_at_end(n, proxy, alloc_version());
|
1094
|
+
}
|
1095
|
+
}
|
1096
|
+
|
1097
|
+
//! <b>Effects</b>: Inserts or erases elements at the end such that
|
1098
|
+
//! the size becomes n. New elements are copy constructed from x.
|
1099
|
+
//!
|
1100
|
+
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
|
1101
|
+
//!
|
1102
|
+
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
|
1103
|
+
void resize(size_type new_size, const T& x)
|
1104
|
+
{
|
1105
|
+
const size_type sz = this->size();
|
1106
|
+
if (new_size < sz){
|
1107
|
+
//Destroy last elements
|
1108
|
+
this->priv_destroy_last_n(sz - new_size);
|
1109
|
+
}
|
1110
|
+
else{
|
1111
|
+
const size_type n = new_size - this->size();
|
1112
|
+
container_detail::insert_n_copies_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
|
1113
|
+
this->priv_forward_range_insert_at_end(n, proxy, alloc_version());
|
1114
|
+
}
|
1115
|
+
}
|
1116
|
+
|
1117
|
+
//! <b>Effects</b>: Number of elements for which memory has been allocated.
|
1118
|
+
//! capacity() is always greater than or equal to size().
|
1119
|
+
//!
|
1120
|
+
//! <b>Throws</b>: Nothing.
|
1121
|
+
//!
|
1122
|
+
//! <b>Complexity</b>: Constant.
|
1123
|
+
size_type capacity() const BOOST_CONTAINER_NOEXCEPT
|
1124
|
+
{ return this->m_holder.capacity(); }
|
1125
|
+
|
1126
|
+
//! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
|
1127
|
+
//! effect. Otherwise, it is a request for allocation of additional memory.
|
1128
|
+
//! If the request is successful, then capacity() is greater than or equal to
|
1129
|
+
//! n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
|
1130
|
+
//!
|
1131
|
+
//! <b>Throws</b>: If memory allocation allocation throws or T's copy/move constructor throws.
|
1132
|
+
void reserve(size_type new_cap)
|
1133
|
+
{
|
1134
|
+
if (this->capacity() < new_cap){
|
1135
|
+
this->priv_reserve(new_cap, alloc_version());
|
1136
|
+
}
|
1137
|
+
}
|
1138
|
+
|
1139
|
+
//! <b>Effects</b>: Tries to deallocate the excess of memory created
|
1140
|
+
//! with previous allocations. The size of the vector is unchanged
|
1141
|
+
//!
|
1142
|
+
//! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws.
|
1143
|
+
//!
|
1144
|
+
//! <b>Complexity</b>: Linear to size().
|
1145
|
+
void shrink_to_fit()
|
1146
|
+
{ this->priv_shrink_to_fit(alloc_version()); }
|
1147
|
+
|
1148
|
+
//////////////////////////////////////////////
|
1149
|
+
//
|
1150
|
+
// element access
|
1151
|
+
//
|
1152
|
+
//////////////////////////////////////////////
|
1153
|
+
|
1154
|
+
//! <b>Requires</b>: !empty()
|
1155
|
+
//!
|
1156
|
+
//! <b>Effects</b>: Returns a reference to the first
|
1157
|
+
//! element of the container.
|
1158
|
+
//!
|
1159
|
+
//! <b>Throws</b>: Nothing.
|
1160
|
+
//!
|
1161
|
+
//! <b>Complexity</b>: Constant.
|
1162
|
+
reference front() BOOST_CONTAINER_NOEXCEPT
|
1163
|
+
{ return *this->m_holder.start(); }
|
1164
|
+
|
1165
|
+
//! <b>Requires</b>: !empty()
|
1166
|
+
//!
|
1167
|
+
//! <b>Effects</b>: Returns a const reference to the first
|
1168
|
+
//! element of the container.
|
1169
|
+
//!
|
1170
|
+
//! <b>Throws</b>: Nothing.
|
1171
|
+
//!
|
1172
|
+
//! <b>Complexity</b>: Constant.
|
1173
|
+
const_reference front() const BOOST_CONTAINER_NOEXCEPT
|
1174
|
+
{ return *this->m_holder.start(); }
|
1175
|
+
|
1176
|
+
//! <b>Requires</b>: !empty()
|
1177
|
+
//!
|
1178
|
+
//! <b>Effects</b>: Returns a reference to the last
|
1179
|
+
//! element of the container.
|
1180
|
+
//!
|
1181
|
+
//! <b>Throws</b>: Nothing.
|
1182
|
+
//!
|
1183
|
+
//! <b>Complexity</b>: Constant.
|
1184
|
+
reference back() BOOST_CONTAINER_NOEXCEPT
|
1185
|
+
{ return this->m_holder.start()[this->m_holder.m_size - 1]; }
|
1186
|
+
|
1187
|
+
//! <b>Requires</b>: !empty()
|
1188
|
+
//!
|
1189
|
+
//! <b>Effects</b>: Returns a const reference to the last
|
1190
|
+
//! element of the container.
|
1191
|
+
//!
|
1192
|
+
//! <b>Throws</b>: Nothing.
|
1193
|
+
//!
|
1194
|
+
//! <b>Complexity</b>: Constant.
|
1195
|
+
const_reference back() const BOOST_CONTAINER_NOEXCEPT
|
1196
|
+
{ return this->m_holder.start()[this->m_holder.m_size - 1]; }
|
1197
|
+
|
1198
|
+
//! <b>Requires</b>: size() > n.
|
1199
|
+
//!
|
1200
|
+
//! <b>Effects</b>: Returns a reference to the nth element
|
1201
|
+
//! from the beginning of the container.
|
1202
|
+
//!
|
1203
|
+
//! <b>Throws</b>: Nothing.
|
1204
|
+
//!
|
1205
|
+
//! <b>Complexity</b>: Constant.
|
1206
|
+
reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT
|
1207
|
+
{ return this->m_holder.start()[n]; }
|
1208
|
+
|
1209
|
+
//! <b>Requires</b>: size() > n.
|
1210
|
+
//!
|
1211
|
+
//! <b>Effects</b>: Returns a const reference to the nth element
|
1212
|
+
//! from the beginning of the container.
|
1213
|
+
//!
|
1214
|
+
//! <b>Throws</b>: Nothing.
|
1215
|
+
//!
|
1216
|
+
//! <b>Complexity</b>: Constant.
|
1217
|
+
const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
|
1218
|
+
{ return this->m_holder.start()[n]; }
|
1219
|
+
|
1220
|
+
//! <b>Requires</b>: size() > n.
|
1221
|
+
//!
|
1222
|
+
//! <b>Effects</b>: Returns a reference to the nth element
|
1223
|
+
//! from the beginning of the container.
|
1224
|
+
//!
|
1225
|
+
//! <b>Throws</b>: std::range_error if n >= size()
|
1226
|
+
//!
|
1227
|
+
//! <b>Complexity</b>: Constant.
|
1228
|
+
reference at(size_type n)
|
1229
|
+
{ this->priv_check_range(n); return this->m_holder.start()[n]; }
|
1230
|
+
|
1231
|
+
//! <b>Requires</b>: size() > n.
|
1232
|
+
//!
|
1233
|
+
//! <b>Effects</b>: Returns a const reference to the nth element
|
1234
|
+
//! from the beginning of the container.
|
1235
|
+
//!
|
1236
|
+
//! <b>Throws</b>: std::range_error if n >= size()
|
1237
|
+
//!
|
1238
|
+
//! <b>Complexity</b>: Constant.
|
1239
|
+
const_reference at(size_type n) const
|
1240
|
+
{ this->priv_check_range(n); return this->m_holder.start()[n]; }
|
1241
|
+
|
1242
|
+
//////////////////////////////////////////////
|
1243
|
+
//
|
1244
|
+
// data access
|
1245
|
+
//
|
1246
|
+
//////////////////////////////////////////////
|
1247
|
+
|
1248
|
+
//! <b>Returns</b>: Allocator pointer such that [data(),data() + size()) is a valid range.
|
1249
|
+
//! For a non-empty vector, data() == &front().
|
1250
|
+
//!
|
1251
|
+
//! <b>Throws</b>: Nothing.
|
1252
|
+
//!
|
1253
|
+
//! <b>Complexity</b>: Constant.
|
1254
|
+
T* data() BOOST_CONTAINER_NOEXCEPT
|
1255
|
+
{ return container_detail::to_raw_pointer(this->m_holder.start()); }
|
1256
|
+
|
1257
|
+
//! <b>Returns</b>: Allocator pointer such that [data(),data() + size()) is a valid range.
|
1258
|
+
//! For a non-empty vector, data() == &front().
|
1259
|
+
//!
|
1260
|
+
//! <b>Throws</b>: Nothing.
|
1261
|
+
//!
|
1262
|
+
//! <b>Complexity</b>: Constant.
|
1263
|
+
const T * data() const BOOST_CONTAINER_NOEXCEPT
|
1264
|
+
{ return container_detail::to_raw_pointer(this->m_holder.start()); }
|
1265
|
+
|
1266
|
+
//////////////////////////////////////////////
|
1267
|
+
//
|
1268
|
+
// modifiers
|
1269
|
+
//
|
1270
|
+
//////////////////////////////////////////////
|
1271
|
+
|
1272
|
+
#if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1273
|
+
//! <b>Effects</b>: Inserts an object of type T constructed with
|
1274
|
+
//! std::forward<Args>(args)... in the end of the vector.
|
1275
|
+
//!
|
1276
|
+
//! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
|
1277
|
+
//! T's move constructor throws.
|
1278
|
+
//!
|
1279
|
+
//! <b>Complexity</b>: Amortized constant time.
|
1280
|
+
template<class ...Args>
|
1281
|
+
void emplace_back(Args &&...args)
|
1282
|
+
{
|
1283
|
+
T* back_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
1284
|
+
if (this->m_holder.m_size < this->m_holder.capacity()){
|
1285
|
+
//There is more memory, just construct a new object at the end
|
1286
|
+
allocator_traits_type::construct(this->m_holder.alloc(), back_pos, ::boost::forward<Args>(args)...);
|
1287
|
+
++this->m_holder.m_size;
|
1288
|
+
}
|
1289
|
+
else{
|
1290
|
+
typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
|
1291
|
+
this->priv_forward_range_insert_no_capacity
|
1292
|
+
(vector_iterator_get_ptr(this->cend()), 1, type(this->m_holder.alloc(), ::boost::forward<Args>(args)...), alloc_version());
|
1293
|
+
}
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
//! <b>Requires</b>: position must be a valid iterator of *this.
|
1297
|
+
//!
|
1298
|
+
//! <b>Effects</b>: Inserts an object of type T constructed with
|
1299
|
+
//! std::forward<Args>(args)... before position
|
1300
|
+
//!
|
1301
|
+
//! <b>Throws</b>: If memory allocation throws or the in-place constructor throws or
|
1302
|
+
//! T's move constructor/assignment throws.
|
1303
|
+
//!
|
1304
|
+
//! <b>Complexity</b>: If position is end(), amortized constant time
|
1305
|
+
//! Linear time otherwise.
|
1306
|
+
template<class ...Args>
|
1307
|
+
iterator emplace(const_iterator position, Args && ...args)
|
1308
|
+
{
|
1309
|
+
//Just call more general insert(pos, size, value) and return iterator
|
1310
|
+
typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
|
1311
|
+
return this->priv_forward_range_insert( vector_iterator_get_ptr(position), 1, type(this->m_holder.alloc()
|
1312
|
+
, ::boost::forward<Args>(args)...), alloc_version());
|
1313
|
+
}
|
1314
|
+
|
1315
|
+
#else
|
1316
|
+
|
1317
|
+
#define BOOST_PP_LOCAL_MACRO(n) \
|
1318
|
+
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
|
1319
|
+
void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
|
1320
|
+
{ \
|
1321
|
+
T* back_pos = container_detail::to_raw_pointer \
|
1322
|
+
(this->m_holder.start()) + this->m_holder.m_size; \
|
1323
|
+
if (this->m_holder.m_size < this->m_holder.capacity()){ \
|
1324
|
+
allocator_traits_type::construct (this->m_holder.alloc() \
|
1325
|
+
, back_pos BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) ); \
|
1326
|
+
++this->m_holder.m_size; \
|
1327
|
+
} \
|
1328
|
+
else{ \
|
1329
|
+
container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
|
1330
|
+
<Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
|
1331
|
+
(this->m_holder.alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
|
1332
|
+
this->priv_forward_range_insert_no_capacity \
|
1333
|
+
(vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version()); \
|
1334
|
+
} \
|
1335
|
+
} \
|
1336
|
+
\
|
1337
|
+
BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
|
1338
|
+
iterator emplace(const_iterator pos \
|
1339
|
+
BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
|
1340
|
+
{ \
|
1341
|
+
container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
|
1342
|
+
<Allocator, T* BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
|
1343
|
+
(this->m_holder.alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
|
1344
|
+
return this->priv_forward_range_insert \
|
1345
|
+
(container_detail::to_raw_pointer(vector_iterator_get_ptr(pos)), 1, proxy, alloc_version()); \
|
1346
|
+
} \
|
1347
|
+
//!
|
1348
|
+
#define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
|
1349
|
+
#include BOOST_PP_LOCAL_ITERATE()
|
1350
|
+
|
1351
|
+
#endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
|
1352
|
+
|
1353
|
+
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1354
|
+
//! <b>Effects</b>: Inserts a copy of x at the end of the vector.
|
1355
|
+
//!
|
1356
|
+
//! <b>Throws</b>: If memory allocation throws or
|
1357
|
+
//! T's copy/move constructor throws.
|
1358
|
+
//!
|
1359
|
+
//! <b>Complexity</b>: Amortized constant time.
|
1360
|
+
void push_back(const T &x);
|
1361
|
+
|
1362
|
+
//! <b>Effects</b>: Constructs a new element in the end of the vector
|
1363
|
+
//! and moves the resources of mx to this new element.
|
1364
|
+
//!
|
1365
|
+
//! <b>Throws</b>: If memory allocation throws or
|
1366
|
+
//! T's move constructor throws.
|
1367
|
+
//!
|
1368
|
+
//! <b>Complexity</b>: Amortized constant time.
|
1369
|
+
void push_back(T &&x);
|
1370
|
+
#else
|
1371
|
+
BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
|
1372
|
+
#endif
|
1373
|
+
|
1374
|
+
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1375
|
+
//! <b>Requires</b>: position must be a valid iterator of *this.
|
1376
|
+
//!
|
1377
|
+
//! <b>Effects</b>: Insert a copy of x before position.
|
1378
|
+
//!
|
1379
|
+
//! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment throws.
|
1380
|
+
//!
|
1381
|
+
//! <b>Complexity</b>: If position is end(), amortized constant time
|
1382
|
+
//! Linear time otherwise.
|
1383
|
+
iterator insert(const_iterator position, const T &x);
|
1384
|
+
|
1385
|
+
//! <b>Requires</b>: position must be a valid iterator of *this.
|
1386
|
+
//!
|
1387
|
+
//! <b>Effects</b>: Insert a new element before position with mx's resources.
|
1388
|
+
//!
|
1389
|
+
//! <b>Throws</b>: If memory allocation throws.
|
1390
|
+
//!
|
1391
|
+
//! <b>Complexity</b>: If position is end(), amortized constant time
|
1392
|
+
//! Linear time otherwise.
|
1393
|
+
iterator insert(const_iterator position, T &&x);
|
1394
|
+
#else
|
1395
|
+
BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
|
1396
|
+
#endif
|
1397
|
+
|
1398
|
+
//! <b>Requires</b>: p must be a valid iterator of *this.
|
1399
|
+
//!
|
1400
|
+
//! <b>Effects</b>: Insert n copies of x before pos.
|
1401
|
+
//!
|
1402
|
+
//! <b>Returns</b>: an iterator to the first inserted element or p if n is 0.
|
1403
|
+
//!
|
1404
|
+
//! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
|
1405
|
+
//!
|
1406
|
+
//! <b>Complexity</b>: Linear to n.
|
1407
|
+
iterator insert(const_iterator p, size_type n, const T& x)
|
1408
|
+
{
|
1409
|
+
container_detail::insert_n_copies_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
|
1410
|
+
return this->priv_forward_range_insert(vector_iterator_get_ptr(p), n, proxy, alloc_version());
|
1411
|
+
}
|
1412
|
+
|
1413
|
+
//! <b>Requires</b>: p must be a valid iterator of *this.
|
1414
|
+
//!
|
1415
|
+
//! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
|
1416
|
+
//!
|
1417
|
+
//! <b>Returns</b>: an iterator to the first inserted element or pos if first == last.
|
1418
|
+
//!
|
1419
|
+
//! <b>Throws</b>: If memory allocation throws, T's constructor from a
|
1420
|
+
//! dereferenced InpIt throws or T's copy/move constructor/assignment throws.
|
1421
|
+
//!
|
1422
|
+
//! <b>Complexity</b>: Linear to std::distance [first, last).
|
1423
|
+
template <class InIt>
|
1424
|
+
iterator insert(const_iterator pos, InIt first, InIt last
|
1425
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1426
|
+
, typename container_detail::enable_if_c
|
1427
|
+
< !container_detail::is_convertible<InIt, size_type>::value
|
1428
|
+
&& container_detail::is_input_iterator<InIt>::value
|
1429
|
+
>::type * = 0
|
1430
|
+
#endif
|
1431
|
+
)
|
1432
|
+
{
|
1433
|
+
const size_type n_pos = pos - this->cbegin();
|
1434
|
+
iterator it(vector_iterator_get_ptr(pos));
|
1435
|
+
for(;first != last; ++first){
|
1436
|
+
it = this->emplace(it, *first);
|
1437
|
+
++it;
|
1438
|
+
}
|
1439
|
+
return iterator(this->m_holder.start() + n_pos);
|
1440
|
+
}
|
1441
|
+
|
1442
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1443
|
+
template <class FwdIt>
|
1444
|
+
iterator insert(const_iterator pos, FwdIt first, FwdIt last
|
1445
|
+
, typename container_detail::enable_if_c
|
1446
|
+
< !container_detail::is_convertible<FwdIt, size_type>::value
|
1447
|
+
&& !container_detail::is_input_iterator<FwdIt>::value
|
1448
|
+
>::type * = 0
|
1449
|
+
)
|
1450
|
+
{
|
1451
|
+
container_detail::insert_range_proxy<Allocator, FwdIt, T*> proxy(this->m_holder.alloc(), first);
|
1452
|
+
return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), std::distance(first, last), proxy, alloc_version());
|
1453
|
+
}
|
1454
|
+
#endif
|
1455
|
+
|
1456
|
+
//! <b>Effects</b>: Removes the last element from the vector.
|
1457
|
+
//!
|
1458
|
+
//! <b>Throws</b>: Nothing.
|
1459
|
+
//!
|
1460
|
+
//! <b>Complexity</b>: Constant time.
|
1461
|
+
void pop_back() BOOST_CONTAINER_NOEXCEPT
|
1462
|
+
{
|
1463
|
+
//Destroy last element
|
1464
|
+
--this->m_holder.m_size;
|
1465
|
+
this->priv_destroy(container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size);
|
1466
|
+
}
|
1467
|
+
|
1468
|
+
//! <b>Effects</b>: Erases the element at position pos.
|
1469
|
+
//!
|
1470
|
+
//! <b>Throws</b>: Nothing.
|
1471
|
+
//!
|
1472
|
+
//! <b>Complexity</b>: Linear to the elements between pos and the
|
1473
|
+
//! last element. Constant if pos is the last element.
|
1474
|
+
iterator erase(const_iterator position)
|
1475
|
+
{
|
1476
|
+
T *const pos = container_detail::to_raw_pointer(vector_iterator_get_ptr(position));
|
1477
|
+
T *const beg = container_detail::to_raw_pointer(this->m_holder.start());
|
1478
|
+
//Move elements forward and destroy last
|
1479
|
+
this->priv_destroy(::boost::move(pos + 1, beg + this->m_holder.m_size, pos));
|
1480
|
+
--this->m_holder.m_size;
|
1481
|
+
return iterator(vector_iterator_get_ptr(position));
|
1482
|
+
}
|
1483
|
+
|
1484
|
+
//! <b>Effects</b>: Erases the elements pointed by [first, last).
|
1485
|
+
//!
|
1486
|
+
//! <b>Throws</b>: Nothing.
|
1487
|
+
//!
|
1488
|
+
//! <b>Complexity</b>: Linear to the distance between first and last
|
1489
|
+
//! plus linear to the elements between pos and the last element.
|
1490
|
+
iterator erase(const_iterator first, const_iterator last)
|
1491
|
+
{
|
1492
|
+
if (first != last){
|
1493
|
+
T* const end_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
1494
|
+
T* const ptr = container_detail::to_raw_pointer(boost::move
|
1495
|
+
(container_detail::to_raw_pointer(vector_iterator_get_ptr(last))
|
1496
|
+
,end_pos
|
1497
|
+
,container_detail::to_raw_pointer(vector_iterator_get_ptr(first))
|
1498
|
+
));
|
1499
|
+
const size_type destroyed = (end_pos - ptr);
|
1500
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), ptr, destroyed);
|
1501
|
+
this->m_holder.m_size -= destroyed;
|
1502
|
+
}
|
1503
|
+
return iterator(vector_iterator_get_ptr(first));
|
1504
|
+
}
|
1505
|
+
|
1506
|
+
//! <b>Effects</b>: Swaps the contents of *this and x.
|
1507
|
+
//!
|
1508
|
+
//! <b>Throws</b>: Nothing.
|
1509
|
+
//!
|
1510
|
+
//! <b>Complexity</b>: Constant.
|
1511
|
+
void swap(vector& x) BOOST_CONTAINER_NOEXCEPT_IF((!container_detail::is_same<alloc_version, allocator_v0>::value))
|
1512
|
+
{
|
1513
|
+
//Just swap internals in case of !allocator_v0. Otherwise, deep swap
|
1514
|
+
this->m_holder.swap(x.m_holder);
|
1515
|
+
//And now the allocator
|
1516
|
+
container_detail::bool_<allocator_traits_type::propagate_on_container_swap::value> flag;
|
1517
|
+
container_detail::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), flag);
|
1518
|
+
}
|
1519
|
+
|
1520
|
+
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1521
|
+
|
1522
|
+
//! <b>Effects</b>: Swaps the contents of *this and x.
|
1523
|
+
//!
|
1524
|
+
//! <b>Throws</b>: If T's move constructor throws.
|
1525
|
+
//!
|
1526
|
+
//! <b>Complexity</b>: Linear
|
1527
|
+
//!
|
1528
|
+
//! <b>Note</b>: non-standard extension.
|
1529
|
+
template<class OtherAllocator>
|
1530
|
+
void swap(vector<T, OtherAllocator> & x)
|
1531
|
+
{
|
1532
|
+
this->m_holder.swap(x.m_holder);
|
1533
|
+
}
|
1534
|
+
|
1535
|
+
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
1536
|
+
|
1537
|
+
//! <b>Effects</b>: Erases all the elements of the vector.
|
1538
|
+
//!
|
1539
|
+
//! <b>Throws</b>: Nothing.
|
1540
|
+
//!
|
1541
|
+
//! <b>Complexity</b>: Linear to the number of elements in the vector.
|
1542
|
+
void clear() BOOST_CONTAINER_NOEXCEPT
|
1543
|
+
{ this->priv_destroy_all(); }
|
1544
|
+
|
1545
|
+
/// @cond
|
1546
|
+
|
1547
|
+
//Absolutely experimental. This function might change, disappear or simply crash!
|
1548
|
+
template<class BiDirPosConstIt, class BiDirValueIt>
|
1549
|
+
void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it)
|
1550
|
+
{
|
1551
|
+
const size_type *dummy = 0;
|
1552
|
+
this->priv_insert_ordered_at(element_count, last_position_it, false, &dummy[0], last_value_it);
|
1553
|
+
}
|
1554
|
+
|
1555
|
+
//Absolutely experimental. This function might change, disappear or simply crash!
|
1556
|
+
template<class BiDirPosConstIt, class BiDirSkipConstIt, class BiDirValueIt>
|
1557
|
+
void insert_ordered_at(size_type element_count, BiDirPosConstIt last_position_it, BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it)
|
1558
|
+
{
|
1559
|
+
this->priv_insert_ordered_at(element_count, last_position_it, true, last_skip_it, last_value_it);
|
1560
|
+
}
|
1561
|
+
|
1562
|
+
private:
|
1563
|
+
|
1564
|
+
template<class OtherAllocator, class AllocVersion>
|
1565
|
+
void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
|
1566
|
+
, AllocVersion
|
1567
|
+
, typename container_detail::enable_if_c
|
1568
|
+
< container_detail::is_same<AllocVersion, allocator_v0>::value &&
|
1569
|
+
!container_detail::is_same<OtherAllocator, allocator_type>::value
|
1570
|
+
>::type * = 0)
|
1571
|
+
{
|
1572
|
+
if(this->capacity() < x.size()){
|
1573
|
+
throw_bad_alloc();
|
1574
|
+
}
|
1575
|
+
this->priv_move_assign_impl(boost::move(x), AllocVersion());
|
1576
|
+
}
|
1577
|
+
|
1578
|
+
template<class OtherAllocator, class AllocVersion>
|
1579
|
+
void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
|
1580
|
+
, AllocVersion
|
1581
|
+
, typename container_detail::enable_if_c
|
1582
|
+
< !container_detail::is_same<AllocVersion, allocator_v0>::value ||
|
1583
|
+
container_detail::is_same<OtherAllocator, allocator_type>::value
|
1584
|
+
>::type * = 0)
|
1585
|
+
{
|
1586
|
+
this->priv_move_assign_impl(boost::move(x), AllocVersion());
|
1587
|
+
}
|
1588
|
+
|
1589
|
+
template<class OtherAllocator, class AllocVersion>
|
1590
|
+
void priv_move_assign_impl(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
|
1591
|
+
, AllocVersion
|
1592
|
+
, typename container_detail::enable_if_c
|
1593
|
+
< container_detail::is_same<AllocVersion, allocator_v0>::value
|
1594
|
+
>::type * = 0)
|
1595
|
+
{
|
1596
|
+
T* const this_start = container_detail::to_raw_pointer(m_holder.start());
|
1597
|
+
T* const other_start = container_detail::to_raw_pointer(x.m_holder.start());
|
1598
|
+
const size_type this_sz = m_holder.m_size;
|
1599
|
+
const size_type other_sz = static_cast<size_type>(x.m_holder.m_size);
|
1600
|
+
boost::container::move_assign_range_alloc_n(this->m_holder.alloc(), other_start, other_sz, this_start, this_sz);
|
1601
|
+
this->m_holder.m_size = other_sz;
|
1602
|
+
}
|
1603
|
+
|
1604
|
+
template<class OtherAllocator, class AllocVersion>
|
1605
|
+
void priv_move_assign_impl(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
|
1606
|
+
, AllocVersion
|
1607
|
+
, typename container_detail::enable_if_c
|
1608
|
+
< !container_detail::is_same<AllocVersion, allocator_v0>::value
|
1609
|
+
>::type * = 0)
|
1610
|
+
{
|
1611
|
+
//for move constructor, no aliasing (&x != this) is assummed.
|
1612
|
+
allocator_type &this_alloc = this->m_holder.alloc();
|
1613
|
+
allocator_type &x_alloc = x.m_holder.alloc();
|
1614
|
+
//If allocators are equal we can just swap pointers
|
1615
|
+
if(this_alloc == x_alloc){
|
1616
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
1617
|
+
this->clear();
|
1618
|
+
this->m_holder.swap(x.m_holder);
|
1619
|
+
//Move allocator if needed
|
1620
|
+
container_detail::bool_<allocator_traits_type::
|
1621
|
+
propagate_on_container_move_assignment::value> flag;
|
1622
|
+
container_detail::move_alloc(this_alloc, x_alloc, flag);
|
1623
|
+
}
|
1624
|
+
//If unequal allocators, then do a one by one move
|
1625
|
+
else{
|
1626
|
+
//TO-DO: optimize this
|
1627
|
+
this->assign( boost::make_move_iterator(container_detail::to_raw_pointer(x.m_holder.start()))
|
1628
|
+
, boost::make_move_iterator(container_detail::to_raw_pointer(x.m_holder.start() + x.m_holder.m_size)));
|
1629
|
+
}
|
1630
|
+
}
|
1631
|
+
|
1632
|
+
template<class AllocVersion>
|
1633
|
+
void priv_copy_assign(const vector &x, AllocVersion
|
1634
|
+
, typename container_detail::enable_if_c
|
1635
|
+
< container_detail::is_same<AllocVersion, allocator_v0>::value
|
1636
|
+
>::type * = 0)
|
1637
|
+
{
|
1638
|
+
T* const this_start = container_detail::to_raw_pointer(m_holder.start());
|
1639
|
+
T* const other_start = container_detail::to_raw_pointer(x.m_holder.start());
|
1640
|
+
const size_type this_sz = m_holder.m_size;
|
1641
|
+
const size_type other_sz = static_cast<size_type>(x.m_holder.m_size);
|
1642
|
+
boost::container::copy_assign_range_alloc_n(this->m_holder.alloc(), other_start, other_sz, this_start, this_sz);
|
1643
|
+
this->m_holder.m_size = other_sz;
|
1644
|
+
}
|
1645
|
+
|
1646
|
+
template<class AllocVersion>
|
1647
|
+
void priv_copy_assign(const vector &x, AllocVersion
|
1648
|
+
, typename container_detail::enable_if_c
|
1649
|
+
< !container_detail::is_same<AllocVersion, allocator_v0>::value
|
1650
|
+
>::type * = 0)
|
1651
|
+
{
|
1652
|
+
allocator_type &this_alloc = this->m_holder.alloc();
|
1653
|
+
const allocator_type &x_alloc = x.m_holder.alloc();
|
1654
|
+
container_detail::bool_<allocator_traits_type::
|
1655
|
+
propagate_on_container_copy_assignment::value> flag;
|
1656
|
+
if(flag && this_alloc != x_alloc){
|
1657
|
+
this->clear();
|
1658
|
+
this->shrink_to_fit();
|
1659
|
+
}
|
1660
|
+
container_detail::assign_alloc(this_alloc, x_alloc, flag);
|
1661
|
+
this->assign( container_detail::to_raw_pointer(x.m_holder.start())
|
1662
|
+
, container_detail::to_raw_pointer(x.m_holder.start() + x.m_holder.m_size));
|
1663
|
+
}
|
1664
|
+
|
1665
|
+
void priv_reserve(size_type, allocator_v0)
|
1666
|
+
{
|
1667
|
+
throw_bad_alloc();
|
1668
|
+
}
|
1669
|
+
|
1670
|
+
void priv_reserve(size_type new_cap, allocator_v1)
|
1671
|
+
{
|
1672
|
+
//There is not enough memory, allocate a new buffer
|
1673
|
+
pointer p = this->m_holder.allocate(new_cap);
|
1674
|
+
//Backwards (and possibly forward) expansion
|
1675
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1676
|
+
++this->num_alloc;
|
1677
|
+
#endif
|
1678
|
+
T * const raw_beg = container_detail::to_raw_pointer(this->m_holder.start());
|
1679
|
+
const size_type sz = m_holder.m_size;
|
1680
|
+
::boost::container::uninitialized_move_alloc_n_source
|
1681
|
+
( this->m_holder.alloc(), raw_beg, sz, container_detail::to_raw_pointer(p) );
|
1682
|
+
boost::container::destroy_alloc_n(this->m_holder.alloc(), raw_beg, sz);
|
1683
|
+
this->m_holder.start(p);
|
1684
|
+
this->m_holder.capacity(new_cap);
|
1685
|
+
}
|
1686
|
+
|
1687
|
+
void priv_reserve(size_type new_cap, allocator_v2)
|
1688
|
+
{
|
1689
|
+
//There is not enough memory, allocate a new
|
1690
|
+
//buffer or expand the old one.
|
1691
|
+
bool same_buffer_start;
|
1692
|
+
size_type real_cap = 0;
|
1693
|
+
std::pair<pointer, bool> ret =
|
1694
|
+
this->m_holder.allocation_command
|
1695
|
+
(allocate_new | expand_fwd | expand_bwd,
|
1696
|
+
new_cap, new_cap, real_cap, this->m_holder.start());
|
1697
|
+
|
1698
|
+
//Check for forward expansion
|
1699
|
+
same_buffer_start = ret.second && this->m_holder.start() == ret.first;
|
1700
|
+
if(same_buffer_start){
|
1701
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1702
|
+
++this->num_expand_fwd;
|
1703
|
+
#endif
|
1704
|
+
this->m_holder.capacity(real_cap);
|
1705
|
+
}
|
1706
|
+
//If there is no forward expansion, move objects
|
1707
|
+
else{
|
1708
|
+
//Backwards (and possibly forward) expansion
|
1709
|
+
if(ret.second){
|
1710
|
+
//We will reuse insert code, so create a dummy input iterator
|
1711
|
+
container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
|
1712
|
+
proxy(this->m_holder.alloc(), ::boost::make_move_iterator((T *)0));
|
1713
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1714
|
+
++this->num_expand_bwd;
|
1715
|
+
#endif
|
1716
|
+
this->priv_forward_range_insert_expand_backwards
|
1717
|
+
( container_detail::to_raw_pointer(ret.first)
|
1718
|
+
, real_cap
|
1719
|
+
, container_detail::to_raw_pointer(this->m_holder.start())
|
1720
|
+
, 0
|
1721
|
+
, proxy);
|
1722
|
+
}
|
1723
|
+
//New buffer
|
1724
|
+
else{
|
1725
|
+
//Backwards (and possibly forward) expansion
|
1726
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1727
|
+
++this->num_alloc;
|
1728
|
+
#endif
|
1729
|
+
T * const raw_beg = container_detail::to_raw_pointer(this->m_holder.start());
|
1730
|
+
const size_type sz = m_holder.m_size;
|
1731
|
+
::boost::container::uninitialized_move_alloc_n_source
|
1732
|
+
( this->m_holder.alloc(), raw_beg, sz, container_detail::to_raw_pointer(ret.first) );
|
1733
|
+
boost::container::destroy_alloc_n(this->m_holder.alloc(), raw_beg, sz);
|
1734
|
+
this->m_holder.start(ret.first);
|
1735
|
+
this->m_holder.capacity(real_cap);
|
1736
|
+
}
|
1737
|
+
}
|
1738
|
+
}
|
1739
|
+
|
1740
|
+
template<class Proxy>
|
1741
|
+
void priv_uninitialized_fill(Proxy proxy, size_type n) const
|
1742
|
+
{
|
1743
|
+
//Copy first new elements in pos
|
1744
|
+
proxy.uninitialized_copy_n_and_update
|
1745
|
+
(container_detail::to_raw_pointer(this->m_holder.start()), n);
|
1746
|
+
//m_holder.size was already initialized to n in vector_alloc_holder's constructor
|
1747
|
+
}
|
1748
|
+
|
1749
|
+
void priv_destroy(value_type* p) BOOST_CONTAINER_NOEXCEPT
|
1750
|
+
{
|
1751
|
+
if(!value_traits::trivial_dctr)
|
1752
|
+
allocator_traits_type::destroy(this->get_stored_allocator(), p);
|
1753
|
+
}
|
1754
|
+
|
1755
|
+
void priv_destroy_last_n(size_type n) BOOST_CONTAINER_NOEXCEPT
|
1756
|
+
{
|
1757
|
+
T* const end_pos = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
1758
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), end_pos-n, n);
|
1759
|
+
this->m_holder.m_size -= n;
|
1760
|
+
}
|
1761
|
+
|
1762
|
+
void priv_destroy_all() BOOST_CONTAINER_NOEXCEPT
|
1763
|
+
{
|
1764
|
+
boost::container::destroy_alloc_n
|
1765
|
+
(this->get_stored_allocator(), container_detail::to_raw_pointer(this->m_holder.start()), this->m_holder.m_size);
|
1766
|
+
this->m_holder.m_size = 0;
|
1767
|
+
}
|
1768
|
+
|
1769
|
+
template<class U>
|
1770
|
+
iterator priv_insert(const const_iterator &p, BOOST_FWD_REF(U) x)
|
1771
|
+
{
|
1772
|
+
return this->priv_forward_range_insert
|
1773
|
+
( vector_iterator_get_ptr(p), 1, container_detail::get_insert_value_proxy<T*>(this->m_holder.alloc()
|
1774
|
+
, ::boost::forward<U>(x)), alloc_version());
|
1775
|
+
}
|
1776
|
+
|
1777
|
+
void priv_push_back(const T &x)
|
1778
|
+
{
|
1779
|
+
if (this->m_holder.m_size < this->m_holder.capacity()){
|
1780
|
+
//There is more memory, just construct a new object at the end
|
1781
|
+
allocator_traits_type::construct
|
1782
|
+
( this->m_holder.alloc()
|
1783
|
+
, container_detail::to_raw_pointer(this->m_holder.start() + this->m_holder.m_size)
|
1784
|
+
, x );
|
1785
|
+
++this->m_holder.m_size;
|
1786
|
+
}
|
1787
|
+
else{
|
1788
|
+
container_detail::insert_copy_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
|
1789
|
+
this->priv_forward_range_insert_no_capacity(vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version());
|
1790
|
+
}
|
1791
|
+
}
|
1792
|
+
|
1793
|
+
void priv_push_back(BOOST_RV_REF(T) x)
|
1794
|
+
{
|
1795
|
+
if (this->m_holder.m_size < this->m_holder.capacity()){
|
1796
|
+
//There is more memory, just construct a new object at the end
|
1797
|
+
allocator_traits_type::construct
|
1798
|
+
( this->m_holder.alloc()
|
1799
|
+
, container_detail::to_raw_pointer(this->m_holder.start() + this->m_holder.m_size)
|
1800
|
+
, ::boost::move(x) );
|
1801
|
+
++this->m_holder.m_size;
|
1802
|
+
}
|
1803
|
+
else{
|
1804
|
+
container_detail::insert_move_proxy<Allocator, T*> proxy(this->m_holder.alloc(), x);
|
1805
|
+
this->priv_forward_range_insert_no_capacity(vector_iterator_get_ptr(this->cend()), 1, proxy, alloc_version());
|
1806
|
+
}
|
1807
|
+
}
|
1808
|
+
|
1809
|
+
void priv_shrink_to_fit(allocator_v0) BOOST_CONTAINER_NOEXCEPT
|
1810
|
+
{}
|
1811
|
+
|
1812
|
+
void priv_shrink_to_fit(allocator_v1)
|
1813
|
+
{
|
1814
|
+
const size_type cp = this->m_holder.capacity();
|
1815
|
+
if(cp){
|
1816
|
+
const size_type sz = this->size();
|
1817
|
+
if(!sz){
|
1818
|
+
this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
|
1819
|
+
this->m_holder.m_start = pointer();
|
1820
|
+
this->m_holder.m_capacity = 0;
|
1821
|
+
}
|
1822
|
+
else if(sz < cp){
|
1823
|
+
//Allocate a new buffer.
|
1824
|
+
pointer p = this->m_holder.allocate(sz);
|
1825
|
+
|
1826
|
+
//We will reuse insert code, so create a dummy input iterator
|
1827
|
+
container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
|
1828
|
+
proxy(this->m_holder.alloc(), ::boost::make_move_iterator((T *)0));
|
1829
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1830
|
+
++this->num_alloc;
|
1831
|
+
#endif
|
1832
|
+
this->priv_forward_range_insert_new_allocation
|
1833
|
+
( container_detail::to_raw_pointer(p)
|
1834
|
+
, sz
|
1835
|
+
, container_detail::to_raw_pointer(this->m_holder.start())
|
1836
|
+
, 0
|
1837
|
+
, proxy);
|
1838
|
+
}
|
1839
|
+
}
|
1840
|
+
}
|
1841
|
+
|
1842
|
+
void priv_shrink_to_fit(allocator_v2) BOOST_CONTAINER_NOEXCEPT
|
1843
|
+
{
|
1844
|
+
const size_type cp = this->m_holder.capacity();
|
1845
|
+
if(cp){
|
1846
|
+
const size_type sz = this->size();
|
1847
|
+
if(!sz){
|
1848
|
+
this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
|
1849
|
+
this->m_holder.m_start = pointer();
|
1850
|
+
this->m_holder.m_capacity = 0;
|
1851
|
+
}
|
1852
|
+
else{
|
1853
|
+
size_type received_size;
|
1854
|
+
if(this->m_holder.allocation_command
|
1855
|
+
( shrink_in_place | nothrow_allocation
|
1856
|
+
, cp, sz, received_size, this->m_holder.start()).first){
|
1857
|
+
this->m_holder.capacity(received_size);
|
1858
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1859
|
+
++this->num_shrink;
|
1860
|
+
#endif
|
1861
|
+
}
|
1862
|
+
}
|
1863
|
+
}
|
1864
|
+
}
|
1865
|
+
|
1866
|
+
template <class InsertionProxy>
|
1867
|
+
iterator priv_forward_range_insert_no_capacity
|
1868
|
+
(const pointer &pos, const size_type, const InsertionProxy , allocator_v0)
|
1869
|
+
{
|
1870
|
+
throw_bad_alloc();
|
1871
|
+
return iterator(pos);
|
1872
|
+
}
|
1873
|
+
|
1874
|
+
template <class InsertionProxy>
|
1875
|
+
iterator priv_forward_range_insert_no_capacity
|
1876
|
+
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v1)
|
1877
|
+
{
|
1878
|
+
//Check if we have enough memory or try to expand current memory
|
1879
|
+
const size_type n_pos = pos - this->m_holder.start();
|
1880
|
+
T *const raw_pos = container_detail::to_raw_pointer(pos);
|
1881
|
+
|
1882
|
+
const size_type new_cap = this->m_holder.next_capacity(n);
|
1883
|
+
T * new_buf = container_detail::to_raw_pointer(this->m_holder.alloc().allocate(new_cap));
|
1884
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1885
|
+
++this->num_alloc;
|
1886
|
+
#endif
|
1887
|
+
this->priv_forward_range_insert_new_allocation
|
1888
|
+
( new_buf, new_cap, raw_pos, n, insert_range_proxy);
|
1889
|
+
return iterator(this->m_holder.start() + n_pos);
|
1890
|
+
}
|
1891
|
+
|
1892
|
+
|
1893
|
+
template <class InsertionProxy>
|
1894
|
+
iterator priv_forward_range_insert_no_capacity
|
1895
|
+
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v2)
|
1896
|
+
{
|
1897
|
+
//Check if we have enough memory or try to expand current memory
|
1898
|
+
T *const raw_pos = container_detail::to_raw_pointer(pos);
|
1899
|
+
const size_type n_pos = raw_pos - container_detail::to_raw_pointer(this->m_holder.start());
|
1900
|
+
|
1901
|
+
size_type real_cap = 0;
|
1902
|
+
//There is not enough memory, allocate a new
|
1903
|
+
//buffer or expand the old one.
|
1904
|
+
std::pair<pointer, bool> ret = (this->m_holder.allocation_command
|
1905
|
+
(allocate_new | expand_fwd | expand_bwd,
|
1906
|
+
this->m_holder.m_size + n, this->m_holder.next_capacity(n), real_cap, this->m_holder.start()));
|
1907
|
+
|
1908
|
+
//Buffer reallocated
|
1909
|
+
if(ret.second){
|
1910
|
+
//Forward expansion, delay insertion
|
1911
|
+
if(this->m_holder.start() == ret.first){
|
1912
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1913
|
+
++this->num_expand_fwd;
|
1914
|
+
#endif
|
1915
|
+
this->m_holder.capacity(real_cap);
|
1916
|
+
//Expand forward
|
1917
|
+
this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
|
1918
|
+
}
|
1919
|
+
//Backwards (and possibly forward) expansion
|
1920
|
+
else{
|
1921
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1922
|
+
++this->num_expand_bwd;
|
1923
|
+
#endif
|
1924
|
+
this->priv_forward_range_insert_expand_backwards
|
1925
|
+
( container_detail::to_raw_pointer(ret.first)
|
1926
|
+
, real_cap, raw_pos, n, insert_range_proxy);
|
1927
|
+
}
|
1928
|
+
}
|
1929
|
+
//New buffer
|
1930
|
+
else{
|
1931
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
1932
|
+
++this->num_alloc;
|
1933
|
+
#endif
|
1934
|
+
this->priv_forward_range_insert_new_allocation
|
1935
|
+
( container_detail::to_raw_pointer(ret.first)
|
1936
|
+
, real_cap, raw_pos, n, insert_range_proxy);
|
1937
|
+
}
|
1938
|
+
|
1939
|
+
return iterator(this->m_holder.start() + n_pos);
|
1940
|
+
}
|
1941
|
+
|
1942
|
+
template <class InsertionProxy>
|
1943
|
+
iterator priv_forward_range_insert
|
1944
|
+
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v0)
|
1945
|
+
{
|
1946
|
+
//Check if we have enough memory or try to expand current memory
|
1947
|
+
const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
|
1948
|
+
|
1949
|
+
if (n > remaining){
|
1950
|
+
//This will trigger an error
|
1951
|
+
throw_bad_alloc();
|
1952
|
+
}
|
1953
|
+
const size_type n_pos = pos - this->m_holder.start();
|
1954
|
+
T *const raw_pos = container_detail::to_raw_pointer(pos);
|
1955
|
+
this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
|
1956
|
+
return iterator(this->m_holder.start() + n_pos);
|
1957
|
+
}
|
1958
|
+
|
1959
|
+
template <class InsertionProxy>
|
1960
|
+
iterator priv_forward_range_insert
|
1961
|
+
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v1)
|
1962
|
+
{
|
1963
|
+
//Check if we have enough memory or try to expand current memory
|
1964
|
+
const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
|
1965
|
+
T *const raw_pos = container_detail::to_raw_pointer(pos);
|
1966
|
+
|
1967
|
+
if (n <= remaining){
|
1968
|
+
const size_type n_pos = raw_pos - container_detail::to_raw_pointer(this->m_holder.start());
|
1969
|
+
this->priv_forward_range_insert_expand_forward
|
1970
|
+
(raw_pos, n, insert_range_proxy);
|
1971
|
+
return iterator(this->m_holder.start() + n_pos);
|
1972
|
+
}
|
1973
|
+
else{
|
1974
|
+
return this->priv_forward_range_insert_no_capacity(pos, n, insert_range_proxy, alloc_version());
|
1975
|
+
}
|
1976
|
+
}
|
1977
|
+
|
1978
|
+
template <class InsertionProxy>
|
1979
|
+
iterator priv_forward_range_insert
|
1980
|
+
(const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, allocator_v2)
|
1981
|
+
{
|
1982
|
+
//Check if we have enough memory or try to expand current memory
|
1983
|
+
const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
|
1984
|
+
|
1985
|
+
bool same_buffer_start = n <= remaining;
|
1986
|
+
if (!same_buffer_start){
|
1987
|
+
return priv_forward_range_insert_no_capacity(pos, n, insert_range_proxy, alloc_version());
|
1988
|
+
}
|
1989
|
+
else{
|
1990
|
+
//Expand forward
|
1991
|
+
T *const raw_pos = container_detail::to_raw_pointer(pos);
|
1992
|
+
const size_type n_pos = raw_pos - container_detail::to_raw_pointer(this->m_holder.start());
|
1993
|
+
this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
|
1994
|
+
return iterator(this->m_holder.start() + n_pos);
|
1995
|
+
}
|
1996
|
+
}
|
1997
|
+
|
1998
|
+
template <class InsertionProxy>
|
1999
|
+
iterator priv_forward_range_insert_at_end
|
2000
|
+
(const size_type n, const InsertionProxy insert_range_proxy, allocator_v0)
|
2001
|
+
{
|
2002
|
+
//Check if we have enough memory or try to expand current memory
|
2003
|
+
const size_type remaining = this->m_holder.capacity() - this->m_holder.m_size;
|
2004
|
+
|
2005
|
+
if (n > remaining){
|
2006
|
+
//This will trigger an error
|
2007
|
+
throw_bad_alloc();
|
2008
|
+
}
|
2009
|
+
this->priv_forward_range_insert_at_end_expand_forward(n, insert_range_proxy);
|
2010
|
+
return this->end();
|
2011
|
+
}
|
2012
|
+
|
2013
|
+
template <class InsertionProxy>
|
2014
|
+
iterator priv_forward_range_insert_at_end
|
2015
|
+
(const size_type n, const InsertionProxy insert_range_proxy, allocator_v1)
|
2016
|
+
{
|
2017
|
+
return this->priv_forward_range_insert(vector_iterator_get_ptr(this->cend()), n, insert_range_proxy, allocator_v1());
|
2018
|
+
}
|
2019
|
+
|
2020
|
+
template <class InsertionProxy>
|
2021
|
+
iterator priv_forward_range_insert_at_end
|
2022
|
+
(const size_type n, const InsertionProxy insert_range_proxy, allocator_v2)
|
2023
|
+
{
|
2024
|
+
return this->priv_forward_range_insert(vector_iterator_get_ptr(this->cend()), n, insert_range_proxy, allocator_v2());
|
2025
|
+
}
|
2026
|
+
|
2027
|
+
//Absolutely experimental. This function might change, disappear or simply crash!
|
2028
|
+
template<class BiDirPosConstIt, class BiDirSkipConstIt, class BiDirValueIt>
|
2029
|
+
void priv_insert_ordered_at( size_type element_count, BiDirPosConstIt last_position_it
|
2030
|
+
, bool do_skip, BiDirSkipConstIt last_skip_it, BiDirValueIt last_value_it)
|
2031
|
+
{
|
2032
|
+
const size_type old_size_pos = this->size();
|
2033
|
+
this->reserve(old_size_pos + element_count);
|
2034
|
+
T* const begin_ptr = container_detail::to_raw_pointer(this->m_holder.start());
|
2035
|
+
size_type insertions_left = element_count;
|
2036
|
+
size_type next_pos = old_size_pos;
|
2037
|
+
size_type hole_size = element_count;
|
2038
|
+
|
2039
|
+
//Exception rollback. If any copy throws before the hole is filled, values
|
2040
|
+
//already inserted/copied at the end of the buffer will be destroyed.
|
2041
|
+
typename value_traits::ArrayDestructor past_hole_values_destroyer
|
2042
|
+
(begin_ptr + old_size_pos + element_count, this->m_holder.alloc(), size_type(0u));
|
2043
|
+
//Loop for each insertion backwards, first moving the elements after the insertion point,
|
2044
|
+
//then inserting the element.
|
2045
|
+
while(insertions_left){
|
2046
|
+
if(do_skip){
|
2047
|
+
size_type n = *(--last_skip_it);
|
2048
|
+
std::advance(last_value_it, -difference_type(n));
|
2049
|
+
}
|
2050
|
+
const size_type pos = static_cast<size_type>(*(--last_position_it));
|
2051
|
+
BOOST_ASSERT(pos <= old_size_pos);
|
2052
|
+
//If needed shift the range after the insertion point and the previous insertion point.
|
2053
|
+
//Function will take care if the shift crosses the size() boundary, using copy/move
|
2054
|
+
//or uninitialized copy/move if necessary.
|
2055
|
+
size_type new_hole_size = (pos != next_pos)
|
2056
|
+
? priv_insert_ordered_at_shift_range(pos, next_pos, this->size(), insertions_left)
|
2057
|
+
: hole_size
|
2058
|
+
;
|
2059
|
+
if(new_hole_size > 0){
|
2060
|
+
//The hole was reduced by priv_insert_ordered_at_shift_range so expand exception rollback range backwards
|
2061
|
+
past_hole_values_destroyer.increment_size_backwards(next_pos - pos);
|
2062
|
+
//Insert the new value in the hole
|
2063
|
+
allocator_traits_type::construct(this->m_holder.alloc(), begin_ptr + pos + insertions_left - 1, *(--last_value_it));
|
2064
|
+
--new_hole_size;
|
2065
|
+
if(new_hole_size == 0){
|
2066
|
+
//Hole was just filled, disable exception rollback and change vector size
|
2067
|
+
past_hole_values_destroyer.release();
|
2068
|
+
this->m_holder.m_size += element_count;
|
2069
|
+
}
|
2070
|
+
else{
|
2071
|
+
//The hole was reduced by the new insertion by one
|
2072
|
+
past_hole_values_destroyer.increment_size_backwards(size_type(1u));
|
2073
|
+
}
|
2074
|
+
}
|
2075
|
+
else{
|
2076
|
+
if(hole_size){
|
2077
|
+
//Hole was just filled by priv_insert_ordered_at_shift_range, disable exception rollback and change vector size
|
2078
|
+
past_hole_values_destroyer.release();
|
2079
|
+
this->m_holder.m_size += element_count;
|
2080
|
+
}
|
2081
|
+
//Insert the new value in the already constructed range
|
2082
|
+
begin_ptr[pos + insertions_left - 1] = *(--last_value_it);
|
2083
|
+
}
|
2084
|
+
--insertions_left;
|
2085
|
+
hole_size = new_hole_size;
|
2086
|
+
next_pos = pos;
|
2087
|
+
}
|
2088
|
+
}
|
2089
|
+
|
2090
|
+
//Takes the range pointed by [first_pos, last_pos) and shifts it to the right
|
2091
|
+
//by 'shift_count'. 'limit_pos' marks the end of constructed elements.
|
2092
|
+
//
|
2093
|
+
//Precondition: first_pos <= last_pos <= limit_pos
|
2094
|
+
//
|
2095
|
+
//The shift operation might cross limit_pos so elements to moved beyond limit_pos
|
2096
|
+
//are uninitialized_moved with an allocator. Other elements are moved.
|
2097
|
+
//
|
2098
|
+
//The shift operation might left uninitialized elements after limit_pos
|
2099
|
+
//and the number of uninitialized elements is returned by the function.
|
2100
|
+
//
|
2101
|
+
//Old situation:
|
2102
|
+
// first_pos last_pos old_limit
|
2103
|
+
// | | |
|
2104
|
+
// ____________V_______V__________________V_____________
|
2105
|
+
//| prefix | range | suffix |raw_mem ~
|
2106
|
+
//|____________|_______|__________________|_____________~
|
2107
|
+
//
|
2108
|
+
//New situation in Case Allocator (hole_size == 0):
|
2109
|
+
// range is moved through move assignments
|
2110
|
+
//
|
2111
|
+
// first_pos last_pos limit_pos
|
2112
|
+
// | | |
|
2113
|
+
// ____________V_______V__________________V_____________
|
2114
|
+
//| prefix' | | | range |suffix'|raw_mem ~
|
2115
|
+
//|________________+______|___^___|_______|_____________~
|
2116
|
+
// | |
|
2117
|
+
// |_>_>_>_>_>^
|
2118
|
+
//
|
2119
|
+
//
|
2120
|
+
//New situation in Case B (hole_size > 0):
|
2121
|
+
// range is moved through uninitialized moves
|
2122
|
+
//
|
2123
|
+
// first_pos last_pos limit_pos
|
2124
|
+
// | | |
|
2125
|
+
// ____________V_______V__________________V________________
|
2126
|
+
//| prefix' | | | [hole] | range |
|
2127
|
+
//|_______________________________________|________|___^___|
|
2128
|
+
// | |
|
2129
|
+
// |_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_^
|
2130
|
+
//
|
2131
|
+
//New situation in Case C (hole_size == 0):
|
2132
|
+
// range is moved through move assignments and uninitialized moves
|
2133
|
+
//
|
2134
|
+
// first_pos last_pos limit_pos
|
2135
|
+
// | | |
|
2136
|
+
// ____________V_______V__________________V___
|
2137
|
+
//| prefix' | | | range |
|
2138
|
+
//|___________________________________|___^___|
|
2139
|
+
// | |
|
2140
|
+
// |_>_>_>_>_>_>_>_>_>_>_>^
|
2141
|
+
size_type priv_insert_ordered_at_shift_range
|
2142
|
+
(size_type first_pos, size_type last_pos, size_type limit_pos, size_type shift_count)
|
2143
|
+
{
|
2144
|
+
BOOST_ASSERT(first_pos <= last_pos);
|
2145
|
+
BOOST_ASSERT(last_pos <= limit_pos);
|
2146
|
+
//
|
2147
|
+
T* const begin_ptr = container_detail::to_raw_pointer(this->m_holder.start());
|
2148
|
+
T* const first_ptr = begin_ptr + first_pos;
|
2149
|
+
T* const last_ptr = begin_ptr + last_pos;
|
2150
|
+
|
2151
|
+
size_type hole_size = 0;
|
2152
|
+
//Case Allocator:
|
2153
|
+
if((last_pos + shift_count) <= limit_pos){
|
2154
|
+
//All move assigned
|
2155
|
+
boost::move_backward(first_ptr, last_ptr, last_ptr + shift_count);
|
2156
|
+
}
|
2157
|
+
//Case B:
|
2158
|
+
else if((first_pos + shift_count) >= limit_pos){
|
2159
|
+
//All uninitialized_moved
|
2160
|
+
::boost::container::uninitialized_move_alloc
|
2161
|
+
(this->m_holder.alloc(), first_ptr, last_ptr, first_ptr + shift_count);
|
2162
|
+
hole_size = last_pos + shift_count - limit_pos;
|
2163
|
+
}
|
2164
|
+
//Case C:
|
2165
|
+
else{
|
2166
|
+
//Some uninitialized_moved
|
2167
|
+
T* const limit_ptr = begin_ptr + limit_pos;
|
2168
|
+
T* const boundary_ptr = limit_ptr - shift_count;
|
2169
|
+
::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), boundary_ptr, last_ptr, limit_ptr);
|
2170
|
+
//The rest is move assigned
|
2171
|
+
boost::move_backward(first_ptr, boundary_ptr, limit_ptr);
|
2172
|
+
}
|
2173
|
+
return hole_size;
|
2174
|
+
}
|
2175
|
+
|
2176
|
+
private:
|
2177
|
+
template <class InsertionProxy>
|
2178
|
+
void priv_forward_range_insert_at_end_expand_forward(const size_type n, InsertionProxy insert_range_proxy)
|
2179
|
+
{
|
2180
|
+
T* const old_finish = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
2181
|
+
insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n);
|
2182
|
+
this->m_holder.m_size += n;
|
2183
|
+
}
|
2184
|
+
|
2185
|
+
template <class InsertionProxy>
|
2186
|
+
void priv_forward_range_insert_expand_forward(T* const pos, const size_type n, InsertionProxy insert_range_proxy)
|
2187
|
+
{
|
2188
|
+
//n can't be 0, because there is nothing to do in that case
|
2189
|
+
if(!n) return;
|
2190
|
+
//There is enough memory
|
2191
|
+
T* const old_finish = container_detail::to_raw_pointer(this->m_holder.start()) + this->m_holder.m_size;
|
2192
|
+
const size_type elems_after = old_finish - pos;
|
2193
|
+
|
2194
|
+
if (!elems_after){
|
2195
|
+
insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n);
|
2196
|
+
this->m_holder.m_size += n;
|
2197
|
+
}
|
2198
|
+
else if (elems_after >= n){
|
2199
|
+
//New elements can be just copied.
|
2200
|
+
//Move to uninitialized memory last objects
|
2201
|
+
::boost::container::uninitialized_move_alloc
|
2202
|
+
(this->m_holder.alloc(), old_finish - n, old_finish, old_finish);
|
2203
|
+
this->m_holder.m_size += n;
|
2204
|
+
//Copy previous to last objects to the initialized end
|
2205
|
+
boost::move_backward(pos, old_finish - n, old_finish);
|
2206
|
+
//Insert new objects in the pos
|
2207
|
+
insert_range_proxy.copy_n_and_update(pos, n);
|
2208
|
+
}
|
2209
|
+
else {
|
2210
|
+
//The new elements don't fit in the [pos, end()) range.
|
2211
|
+
|
2212
|
+
//Copy old [pos, end()) elements to the uninitialized memory (a gap is created)
|
2213
|
+
::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), pos, old_finish, pos + n);
|
2214
|
+
BOOST_TRY{
|
2215
|
+
//Copy first new elements in pos (gap is still there)
|
2216
|
+
insert_range_proxy.copy_n_and_update(pos, elems_after);
|
2217
|
+
//Copy to the beginning of the unallocated zone the last new elements (the gap is closed).
|
2218
|
+
insert_range_proxy.uninitialized_copy_n_and_update(old_finish, n - elems_after);
|
2219
|
+
this->m_holder.m_size += n;
|
2220
|
+
}
|
2221
|
+
BOOST_CATCH(...){
|
2222
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), pos + n, elems_after);
|
2223
|
+
BOOST_RETHROW
|
2224
|
+
}
|
2225
|
+
BOOST_CATCH_END
|
2226
|
+
}
|
2227
|
+
}
|
2228
|
+
|
2229
|
+
template <class InsertionProxy>
|
2230
|
+
void priv_forward_range_insert_new_allocation
|
2231
|
+
(T* const new_start, size_type new_cap, T* const pos, const size_type n, InsertionProxy insert_range_proxy)
|
2232
|
+
{
|
2233
|
+
//n can be zero, if we want to reallocate!
|
2234
|
+
T *new_finish = new_start;
|
2235
|
+
T *old_finish;
|
2236
|
+
//Anti-exception rollbacks
|
2237
|
+
typename value_traits::ArrayDeallocator scoped_alloc(new_start, this->m_holder.alloc(), new_cap);
|
2238
|
+
typename value_traits::ArrayDestructor constructed_values_destroyer(new_start, this->m_holder.alloc(), 0u);
|
2239
|
+
|
2240
|
+
//Initialize with [begin(), pos) old buffer
|
2241
|
+
//the start of the new buffer
|
2242
|
+
T *old_buffer = container_detail::to_raw_pointer(this->m_holder.start());
|
2243
|
+
if(old_buffer){
|
2244
|
+
new_finish = ::boost::container::uninitialized_move_alloc
|
2245
|
+
(this->m_holder.alloc(), container_detail::to_raw_pointer(this->m_holder.start()), pos, old_finish = new_finish);
|
2246
|
+
constructed_values_destroyer.increment_size(new_finish - old_finish);
|
2247
|
+
}
|
2248
|
+
//Initialize new objects, starting from previous point
|
2249
|
+
insert_range_proxy.uninitialized_copy_n_and_update(old_finish = new_finish, n);
|
2250
|
+
new_finish += n;
|
2251
|
+
constructed_values_destroyer.increment_size(new_finish - old_finish);
|
2252
|
+
//Initialize from the rest of the old buffer,
|
2253
|
+
//starting from previous point
|
2254
|
+
if(old_buffer){
|
2255
|
+
new_finish = ::boost::container::uninitialized_move_alloc
|
2256
|
+
(this->m_holder.alloc(), pos, old_buffer + this->m_holder.m_size, new_finish);
|
2257
|
+
//Destroy and deallocate old elements
|
2258
|
+
//If there is allocated memory, destroy and deallocate
|
2259
|
+
if(!value_traits::trivial_dctr_after_move)
|
2260
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), old_buffer, this->m_holder.m_size);
|
2261
|
+
this->m_holder.alloc().deallocate(this->m_holder.start(), this->m_holder.capacity());
|
2262
|
+
}
|
2263
|
+
this->m_holder.start(new_start);
|
2264
|
+
this->m_holder.m_size = new_finish - new_start;
|
2265
|
+
this->m_holder.capacity(new_cap);
|
2266
|
+
//All construction successful, disable rollbacks
|
2267
|
+
constructed_values_destroyer.release();
|
2268
|
+
scoped_alloc.release();
|
2269
|
+
}
|
2270
|
+
|
2271
|
+
template <class InsertionProxy>
|
2272
|
+
void priv_forward_range_insert_expand_backwards
|
2273
|
+
(T* const new_start, const size_type new_capacity,
|
2274
|
+
T* const pos, const size_type n, InsertionProxy insert_range_proxy)
|
2275
|
+
{
|
2276
|
+
//n can be zero to just expand capacity
|
2277
|
+
//Backup old data
|
2278
|
+
T* const old_start = container_detail::to_raw_pointer(this->m_holder.start());
|
2279
|
+
T* const old_finish = old_start + this->m_holder.m_size;
|
2280
|
+
const size_type old_size = this->m_holder.m_size;
|
2281
|
+
|
2282
|
+
//We can have 8 possibilities:
|
2283
|
+
const size_type elemsbefore = static_cast<size_type>(pos - old_start);
|
2284
|
+
const size_type s_before = static_cast<size_type>(old_start - new_start);
|
2285
|
+
const size_type before_plus_new = elemsbefore + n;
|
2286
|
+
|
2287
|
+
//Update the vector buffer information to a safe state
|
2288
|
+
this->m_holder.start(new_start);
|
2289
|
+
this->m_holder.capacity(new_capacity);
|
2290
|
+
this->m_holder.m_size = 0;
|
2291
|
+
|
2292
|
+
//If anything goes wrong, this object will destroy
|
2293
|
+
//all the old objects to fulfill previous vector state
|
2294
|
+
typename value_traits::OldArrayDestructor old_values_destroyer(old_start, this->m_holder.alloc(), old_size);
|
2295
|
+
//Check if s_before is big enough to hold the beginning of old data + new data
|
2296
|
+
if(s_before >= before_plus_new){
|
2297
|
+
//Copy first old values before pos, after that the new objects
|
2298
|
+
T *const new_elem_pos = ::boost::container::uninitialized_move_alloc(this->m_holder.alloc(), old_start, pos, new_start);
|
2299
|
+
this->m_holder.m_size = elemsbefore;
|
2300
|
+
insert_range_proxy.uninitialized_copy_n_and_update(new_elem_pos, n);
|
2301
|
+
this->m_holder.m_size += n;
|
2302
|
+
//Check if s_before is so big that even copying the old data + new data
|
2303
|
+
//there is a gap between the new data and the old data
|
2304
|
+
const size_type new_size = old_size + n;
|
2305
|
+
if(s_before >= new_size){
|
2306
|
+
//Old situation:
|
2307
|
+
// _________________________________________________________
|
2308
|
+
//| raw_mem | old_begin | old_end |
|
2309
|
+
//| __________________________________|___________|_________|
|
2310
|
+
//
|
2311
|
+
//New situation:
|
2312
|
+
// _________________________________________________________
|
2313
|
+
//| old_begin | new | old_end | raw_mem |
|
2314
|
+
//|___________|__________|_________|________________________|
|
2315
|
+
//
|
2316
|
+
//Now initialize the rest of memory with the last old values
|
2317
|
+
::boost::container::uninitialized_move_alloc
|
2318
|
+
(this->m_holder.alloc(), pos, old_finish, new_start + before_plus_new);
|
2319
|
+
//All new elements correctly constructed, avoid new element destruction
|
2320
|
+
this->m_holder.m_size = new_size;
|
2321
|
+
//Old values destroyed automatically with "old_values_destroyer"
|
2322
|
+
//when "old_values_destroyer" goes out of scope unless the have trivial
|
2323
|
+
//destructor after move.
|
2324
|
+
if(value_traits::trivial_dctr_after_move)
|
2325
|
+
old_values_destroyer.release();
|
2326
|
+
}
|
2327
|
+
//s_before is so big that divides old_end
|
2328
|
+
else{
|
2329
|
+
//Old situation:
|
2330
|
+
// __________________________________________________
|
2331
|
+
//| raw_mem | old_begin | old_end |
|
2332
|
+
//| ___________________________|___________|_________|
|
2333
|
+
//
|
2334
|
+
//New situation:
|
2335
|
+
// __________________________________________________
|
2336
|
+
//| old_begin | new | old_end | raw_mem |
|
2337
|
+
//|___________|__________|_________|_________________|
|
2338
|
+
//
|
2339
|
+
//Now initialize the rest of memory with the last old values
|
2340
|
+
//All new elements correctly constructed, avoid new element destruction
|
2341
|
+
const size_type raw_gap = s_before - before_plus_new;
|
2342
|
+
//Now initialize the rest of s_before memory with the
|
2343
|
+
//first of elements after new values
|
2344
|
+
::boost::container::uninitialized_move_alloc_n
|
2345
|
+
(this->m_holder.alloc(), pos, raw_gap, new_start + before_plus_new);
|
2346
|
+
//Update size since we have a contiguous buffer
|
2347
|
+
this->m_holder.m_size = old_size + s_before;
|
2348
|
+
//All new elements correctly constructed, avoid old element destruction
|
2349
|
+
old_values_destroyer.release();
|
2350
|
+
//Now copy remaining last objects in the old buffer begin
|
2351
|
+
T * const to_destroy = ::boost::move(pos + raw_gap, old_finish, old_start);
|
2352
|
+
//Now destroy redundant elements except if they were moved and
|
2353
|
+
//they have trivial destructor after move
|
2354
|
+
size_type n_destroy = old_finish - to_destroy;
|
2355
|
+
if(!value_traits::trivial_dctr_after_move)
|
2356
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), to_destroy, n_destroy);
|
2357
|
+
this->m_holder.m_size -= n_destroy;
|
2358
|
+
}
|
2359
|
+
}
|
2360
|
+
else{
|
2361
|
+
//Check if we have to do the insertion in two phases
|
2362
|
+
//since maybe s_before is not big enough and
|
2363
|
+
//the buffer was expanded both sides
|
2364
|
+
//
|
2365
|
+
//Old situation:
|
2366
|
+
// _________________________________________________
|
2367
|
+
//| raw_mem | old_begin + old_end | raw_mem |
|
2368
|
+
//|_________|_____________________|_________________|
|
2369
|
+
//
|
2370
|
+
//New situation with do_after:
|
2371
|
+
// _________________________________________________
|
2372
|
+
//| old_begin + new + old_end | raw_mem |
|
2373
|
+
//|___________________________________|_____________|
|
2374
|
+
//
|
2375
|
+
//New without do_after:
|
2376
|
+
// _________________________________________________
|
2377
|
+
//| old_begin + new + old_end | raw_mem |
|
2378
|
+
//|____________________________|____________________|
|
2379
|
+
//
|
2380
|
+
const bool do_after = n > s_before;
|
2381
|
+
|
2382
|
+
//Now we can have two situations: the raw_mem of the
|
2383
|
+
//beginning divides the old_begin, or the new elements:
|
2384
|
+
if (s_before <= elemsbefore) {
|
2385
|
+
//The raw memory divides the old_begin group:
|
2386
|
+
//
|
2387
|
+
//If we need two phase construction (do_after)
|
2388
|
+
//new group is divided in new = new_beg + new_end groups
|
2389
|
+
//In this phase only new_beg will be inserted
|
2390
|
+
//
|
2391
|
+
//Old situation:
|
2392
|
+
// _________________________________________________
|
2393
|
+
//| raw_mem | old_begin | old_end | raw_mem |
|
2394
|
+
//|_________|___________|_________|_________________|
|
2395
|
+
//
|
2396
|
+
//New situation with do_after(1):
|
2397
|
+
//This is not definitive situation, the second phase
|
2398
|
+
//will include
|
2399
|
+
// _________________________________________________
|
2400
|
+
//| old_begin | new_beg | old_end | raw_mem |
|
2401
|
+
//|___________|_________|_________|_________________|
|
2402
|
+
//
|
2403
|
+
//New situation without do_after:
|
2404
|
+
// _________________________________________________
|
2405
|
+
//| old_begin | new | old_end | raw_mem |
|
2406
|
+
//|___________|_____|_________|_____________________|
|
2407
|
+
//
|
2408
|
+
//Copy the first part of old_begin to raw_mem
|
2409
|
+
::boost::container::uninitialized_move_alloc_n
|
2410
|
+
(this->m_holder.alloc(), old_start, s_before, new_start);
|
2411
|
+
//The buffer is all constructed until old_end,
|
2412
|
+
//release destroyer and update size
|
2413
|
+
old_values_destroyer.release();
|
2414
|
+
this->m_holder.m_size = old_size + s_before;
|
2415
|
+
//Now copy the second part of old_begin overwriting itself
|
2416
|
+
T *const next = ::boost::move(old_start + s_before, pos, old_start);
|
2417
|
+
if(do_after){
|
2418
|
+
//Now copy the new_beg elements
|
2419
|
+
insert_range_proxy.copy_n_and_update(next, s_before);
|
2420
|
+
}
|
2421
|
+
else{
|
2422
|
+
//Now copy the all the new elements
|
2423
|
+
insert_range_proxy.copy_n_and_update(next, n);
|
2424
|
+
//Now displace old_end elements
|
2425
|
+
T* const move_end = ::boost::move(pos, old_finish, next + n);
|
2426
|
+
//Destroy remaining moved elements from old_end except if
|
2427
|
+
//they have trivial destructor after being moved
|
2428
|
+
const size_type n_destroy = s_before - n;
|
2429
|
+
if(!value_traits::trivial_dctr_after_move)
|
2430
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), move_end, n_destroy);
|
2431
|
+
this->m_holder.m_size -= n_destroy;
|
2432
|
+
}
|
2433
|
+
}
|
2434
|
+
else {
|
2435
|
+
//If we have to expand both sides,
|
2436
|
+
//we will play if the first new values so
|
2437
|
+
//calculate the upper bound of new values
|
2438
|
+
|
2439
|
+
//The raw memory divides the new elements
|
2440
|
+
//
|
2441
|
+
//If we need two phase construction (do_after)
|
2442
|
+
//new group is divided in new = new_beg + new_end groups
|
2443
|
+
//In this phase only new_beg will be inserted
|
2444
|
+
//
|
2445
|
+
//Old situation:
|
2446
|
+
// _______________________________________________________
|
2447
|
+
//| raw_mem | old_begin | old_end | raw_mem |
|
2448
|
+
//|_______________|___________|_________|_________________|
|
2449
|
+
//
|
2450
|
+
//New situation with do_after():
|
2451
|
+
// ____________________________________________________
|
2452
|
+
//| old_begin | new_beg | old_end | raw_mem |
|
2453
|
+
//|___________|_______________|_________|______________|
|
2454
|
+
//
|
2455
|
+
//New situation without do_after:
|
2456
|
+
// ______________________________________________________
|
2457
|
+
//| old_begin | new | old_end | raw_mem |
|
2458
|
+
//|___________|_____|_________|__________________________|
|
2459
|
+
//
|
2460
|
+
//First copy whole old_begin and part of new to raw_mem
|
2461
|
+
T * const new_pos = ::boost::container::uninitialized_move_alloc
|
2462
|
+
(this->m_holder.alloc(), old_start, pos, new_start);
|
2463
|
+
this->m_holder.m_size = elemsbefore;
|
2464
|
+
const size_type mid_n = s_before - elemsbefore;
|
2465
|
+
insert_range_proxy.uninitialized_copy_n_and_update(new_pos, mid_n);
|
2466
|
+
//The buffer is all constructed until old_end,
|
2467
|
+
//release destroyer
|
2468
|
+
this->m_holder.m_size = old_size + s_before;
|
2469
|
+
old_values_destroyer.release();
|
2470
|
+
|
2471
|
+
if(do_after){
|
2472
|
+
//Copy new_beg part
|
2473
|
+
insert_range_proxy.copy_n_and_update(old_start, elemsbefore);
|
2474
|
+
}
|
2475
|
+
else{
|
2476
|
+
//Copy all new elements
|
2477
|
+
const size_type rest_new = n - mid_n;
|
2478
|
+
insert_range_proxy.copy_n_and_update(old_start, rest_new);
|
2479
|
+
T* move_start = old_start + rest_new;
|
2480
|
+
//Displace old_end
|
2481
|
+
T* move_end = ::boost::move(pos, old_finish, move_start);
|
2482
|
+
//Destroy remaining moved elements from old_end except if they
|
2483
|
+
//have trivial destructor after being moved
|
2484
|
+
size_type n_destroy = s_before - n;
|
2485
|
+
if(!value_traits::trivial_dctr_after_move)
|
2486
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), move_end, n_destroy);
|
2487
|
+
this->m_holder.m_size -= n_destroy;
|
2488
|
+
}
|
2489
|
+
}
|
2490
|
+
|
2491
|
+
//This is only executed if two phase construction is needed
|
2492
|
+
if(do_after){
|
2493
|
+
//The raw memory divides the new elements
|
2494
|
+
//
|
2495
|
+
//Old situation:
|
2496
|
+
// ______________________________________________________
|
2497
|
+
//| raw_mem | old_begin | old_end | raw_mem |
|
2498
|
+
//|______________|___________|____________|______________|
|
2499
|
+
//
|
2500
|
+
//New situation with do_after(1):
|
2501
|
+
// _______________________________________________________
|
2502
|
+
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
2503
|
+
//|__________________________|_________|________|_________|
|
2504
|
+
//
|
2505
|
+
//New situation with do_after(2):
|
2506
|
+
// ______________________________________________________
|
2507
|
+
//| old_begin + new | old_end |raw |
|
2508
|
+
//|_______________________________________|_________|____|
|
2509
|
+
//
|
2510
|
+
const size_type n_after = n - s_before;
|
2511
|
+
const size_type elemsafter = old_size - elemsbefore;
|
2512
|
+
|
2513
|
+
//We can have two situations:
|
2514
|
+
if (elemsafter >= n_after){
|
2515
|
+
//The raw_mem from end will divide displaced old_end
|
2516
|
+
//
|
2517
|
+
//Old situation:
|
2518
|
+
// ______________________________________________________
|
2519
|
+
//| raw_mem | old_begin | old_end | raw_mem |
|
2520
|
+
//|______________|___________|____________|______________|
|
2521
|
+
//
|
2522
|
+
//New situation with do_after(1):
|
2523
|
+
// _______________________________________________________
|
2524
|
+
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
2525
|
+
//|__________________________|_________|________|_________|
|
2526
|
+
//
|
2527
|
+
//First copy the part of old_end raw_mem
|
2528
|
+
T* finish_n = old_finish - n_after;
|
2529
|
+
::boost::container::uninitialized_move_alloc
|
2530
|
+
(this->m_holder.alloc(), finish_n, old_finish, old_finish);
|
2531
|
+
this->m_holder.m_size += n_after;
|
2532
|
+
//Displace the rest of old_end to the new position
|
2533
|
+
boost::move_backward(pos, finish_n, old_finish);
|
2534
|
+
//Now overwrite with new_end
|
2535
|
+
//The new_end part is [first + (n - n_after), last)
|
2536
|
+
insert_range_proxy.copy_n_and_update(pos, n_after);
|
2537
|
+
}
|
2538
|
+
else {
|
2539
|
+
//The raw_mem from end will divide new_end part
|
2540
|
+
//
|
2541
|
+
//Old situation:
|
2542
|
+
// _____________________________________________________________
|
2543
|
+
//| raw_mem | old_begin | old_end | raw_mem |
|
2544
|
+
//|______________|___________|____________|_____________________|
|
2545
|
+
//
|
2546
|
+
//New situation with do_after(2):
|
2547
|
+
// _____________________________________________________________
|
2548
|
+
//| old_begin + new_beg | new_end |old_end | raw_mem |
|
2549
|
+
//|__________________________|_______________|________|_________|
|
2550
|
+
//
|
2551
|
+
|
2552
|
+
const size_type mid_last_dist = n_after - elemsafter;
|
2553
|
+
//First initialize data in raw memory
|
2554
|
+
|
2555
|
+
//Copy to the old_end part to the uninitialized zone leaving a gap.
|
2556
|
+
::boost::container::uninitialized_move_alloc
|
2557
|
+
(this->m_holder.alloc(), pos, old_finish, old_finish + mid_last_dist);
|
2558
|
+
|
2559
|
+
BOOST_TRY{
|
2560
|
+
//Copy the first part to the already constructed old_end zone
|
2561
|
+
insert_range_proxy.copy_n_and_update(pos, elemsafter);
|
2562
|
+
//Copy the rest to the uninitialized zone filling the gap
|
2563
|
+
insert_range_proxy.uninitialized_copy_n_and_update(old_finish, mid_last_dist);
|
2564
|
+
this->m_holder.m_size += n_after;
|
2565
|
+
}
|
2566
|
+
BOOST_CATCH(...){
|
2567
|
+
boost::container::destroy_alloc_n(this->get_stored_allocator(), pos, mid_last_dist);
|
2568
|
+
BOOST_RETHROW
|
2569
|
+
}
|
2570
|
+
BOOST_CATCH_END
|
2571
|
+
/*
|
2572
|
+
size_type mid_last_dist = n_after - elemsafter;
|
2573
|
+
//First initialize data in raw memory
|
2574
|
+
|
2575
|
+
//The new_end part is [first + (n - n_after), last)
|
2576
|
+
insert_range_proxy.uninitialized_copy_last_and_update(old_finish, elemsafter);
|
2577
|
+
this->m_holder.m_size += mid_last_dist;
|
2578
|
+
::boost::container::uninitialized_move_alloc
|
2579
|
+
(this->m_holder.alloc(), pos, old_finish, old_finish + mid_last_dist);
|
2580
|
+
this->m_holder.m_size += n_after - mid_last_dist;
|
2581
|
+
//Now copy the part of new_end over constructed elements
|
2582
|
+
insert_range_proxy.copy_remaining_to(pos);*/
|
2583
|
+
}
|
2584
|
+
}
|
2585
|
+
}
|
2586
|
+
}
|
2587
|
+
|
2588
|
+
void priv_check_range(size_type n) const
|
2589
|
+
{
|
2590
|
+
//If n is out of range, throw an out_of_range exception
|
2591
|
+
if (n >= this->size()){
|
2592
|
+
throw_out_of_range("vector::at out of range");
|
2593
|
+
}
|
2594
|
+
}
|
2595
|
+
|
2596
|
+
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
|
2597
|
+
public:
|
2598
|
+
unsigned int num_expand_fwd;
|
2599
|
+
unsigned int num_expand_bwd;
|
2600
|
+
unsigned int num_shrink;
|
2601
|
+
unsigned int num_alloc;
|
2602
|
+
void reset_alloc_stats()
|
2603
|
+
{ num_expand_fwd = num_expand_bwd = num_alloc = 0, num_shrink = 0; }
|
2604
|
+
#endif
|
2605
|
+
/// @endcond
|
2606
|
+
};
|
2607
|
+
|
2608
|
+
template <class T, class Allocator>
|
2609
|
+
inline bool
|
2610
|
+
operator==(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
|
2611
|
+
{
|
2612
|
+
//Check first size and each element if needed
|
2613
|
+
return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin());
|
2614
|
+
}
|
2615
|
+
|
2616
|
+
template <class T, class Allocator>
|
2617
|
+
inline bool
|
2618
|
+
operator!=(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
|
2619
|
+
{
|
2620
|
+
//Check first size and each element if needed
|
2621
|
+
return x.size() != y.size() || !std::equal(x.begin(), x.end(), y.begin());
|
2622
|
+
}
|
2623
|
+
|
2624
|
+
template <class T, class Allocator>
|
2625
|
+
inline bool
|
2626
|
+
operator<(const vector<T, Allocator>& x, const vector<T, Allocator>& y)
|
2627
|
+
{
|
2628
|
+
return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
|
2629
|
+
}
|
2630
|
+
|
2631
|
+
template <class T, class Allocator>
|
2632
|
+
inline void swap(vector<T, Allocator>& x, vector<T, Allocator>& y)
|
2633
|
+
{ x.swap(y); }
|
2634
|
+
|
2635
|
+
}}
|
2636
|
+
|
2637
|
+
/// @cond
|
2638
|
+
|
2639
|
+
namespace boost {
|
2640
|
+
|
2641
|
+
|
2642
|
+
//!has_trivial_destructor_after_move<> == true_type
|
2643
|
+
//!specialization for optimizations
|
2644
|
+
template <class T, class Allocator>
|
2645
|
+
struct has_trivial_destructor_after_move<boost::container::vector<T, Allocator> >
|
2646
|
+
: public ::boost::has_trivial_destructor_after_move<Allocator>
|
2647
|
+
{};
|
2648
|
+
|
2649
|
+
|
2650
|
+
}
|
2651
|
+
|
2652
|
+
//#define BOOST_CONTAINER_PUT_SWAP_OVERLOAD_IN_NAMESPACE_STD
|
2653
|
+
|
2654
|
+
#ifdef BOOST_CONTAINER_PUT_SWAP_OVERLOAD_IN_NAMESPACE_STD
|
2655
|
+
|
2656
|
+
namespace std {
|
2657
|
+
|
2658
|
+
template <class T, class Allocator>
|
2659
|
+
inline void swap(boost::container::vector<T, Allocator>& x, boost::container::vector<T, Allocator>& y)
|
2660
|
+
{ x.swap(y); }
|
2661
|
+
|
2662
|
+
} //namespace std {
|
2663
|
+
|
2664
|
+
#endif
|
2665
|
+
|
2666
|
+
/// @endcond
|
2667
|
+
|
2668
|
+
#include <boost/container/detail/config_end.hpp>
|
2669
|
+
|
2670
|
+
#endif // #ifndef BOOST_CONTAINER_CONTAINER_VECTOR_HPP
|
2671
|
+
|