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,2856 @@
|
|
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
|
+
// Copyright (c) 1996,1997
|
11
|
+
// Silicon Graphics Computer Systems, Inc.
|
12
|
+
//
|
13
|
+
// Permission to use, copy, modify, distribute and sell this software
|
14
|
+
// and its documentation for any purpose is hereby granted without fee,
|
15
|
+
// provided that the above copyright notice appear in all copies and
|
16
|
+
// that both that copyright notice and this permission notice appear
|
17
|
+
// in supporting documentation. Silicon Graphics makes no
|
18
|
+
// representations about the suitability of this software for any
|
19
|
+
// purpose. It is provided "as is" without express or implied warranty.
|
20
|
+
//
|
21
|
+
//
|
22
|
+
// Copyright (c) 1994
|
23
|
+
// Hewlett-Packard Company
|
24
|
+
//
|
25
|
+
// Permission to use, copy, modify, distribute and sell this software
|
26
|
+
// and its documentation for any purpose is hereby granted without fee,
|
27
|
+
// provided that the above copyright notice appear in all copies and
|
28
|
+
// that both that copyright notice and this permission notice appear
|
29
|
+
// in supporting documentation. Hewlett-Packard Company makes no
|
30
|
+
// representations about the suitability of this software for any
|
31
|
+
// purpose. It is provided "as is" without express or implied warranty.
|
32
|
+
|
33
|
+
#ifndef BOOST_CONTAINER_STRING_HPP
|
34
|
+
#define BOOST_CONTAINER_STRING_HPP
|
35
|
+
|
36
|
+
#include <boost/container/detail/config_begin.hpp>
|
37
|
+
#include <boost/container/detail/workaround.hpp>
|
38
|
+
|
39
|
+
#include <boost/container/detail/workaround.hpp>
|
40
|
+
#include <boost/container/container_fwd.hpp>
|
41
|
+
#include <boost/container/throw_exception.hpp>
|
42
|
+
#include <boost/container/detail/utilities.hpp>
|
43
|
+
#include <boost/container/detail/iterators.hpp>
|
44
|
+
#include <boost/container/detail/algorithms.hpp>
|
45
|
+
#include <boost/container/detail/version_type.hpp>
|
46
|
+
#include <boost/container/detail/allocation_type.hpp>
|
47
|
+
#include <boost/container/allocator_traits.hpp>
|
48
|
+
#include <boost/container/detail/allocator_version_traits.hpp>
|
49
|
+
#include <boost/container/detail/mpl.hpp>
|
50
|
+
#include <boost/move/utility.hpp>
|
51
|
+
#include <boost/static_assert.hpp>
|
52
|
+
#include <boost/functional/hash.hpp>
|
53
|
+
#include <boost/intrusive/pointer_traits.hpp>
|
54
|
+
#include <boost/detail/no_exceptions_support.hpp>
|
55
|
+
|
56
|
+
#include <functional>
|
57
|
+
#include <string>
|
58
|
+
#include <utility>
|
59
|
+
#include <iterator>
|
60
|
+
#include <memory>
|
61
|
+
#include <algorithm>
|
62
|
+
#include <iosfwd>
|
63
|
+
#include <istream>
|
64
|
+
#include <ostream>
|
65
|
+
#include <ios>
|
66
|
+
#include <locale>
|
67
|
+
#include <cstddef>
|
68
|
+
#include <climits>
|
69
|
+
#include <boost/container/detail/type_traits.hpp>
|
70
|
+
#include <boost/detail/no_exceptions_support.hpp>
|
71
|
+
#include <boost/type_traits/has_trivial_destructor.hpp>
|
72
|
+
#include <boost/aligned_storage.hpp>
|
73
|
+
|
74
|
+
namespace boost {
|
75
|
+
namespace container {
|
76
|
+
|
77
|
+
/// @cond
|
78
|
+
namespace container_detail {
|
79
|
+
// ------------------------------------------------------------
|
80
|
+
// Class basic_string_base.
|
81
|
+
|
82
|
+
// basic_string_base is a helper class that makes it it easier to write
|
83
|
+
// an exception-safe version of basic_string. The constructor allocates,
|
84
|
+
// but does not initialize, a block of memory. The destructor
|
85
|
+
// deallocates, but does not destroy elements within, a block of
|
86
|
+
// memory. The destructor assumes that the memory either is the internal buffer,
|
87
|
+
// or else points to a block of memory that was allocated using string_base's
|
88
|
+
// allocator and whose size is this->m_storage.
|
89
|
+
template <class Allocator>
|
90
|
+
class basic_string_base
|
91
|
+
{
|
92
|
+
BOOST_MOVABLE_BUT_NOT_COPYABLE(basic_string_base)
|
93
|
+
|
94
|
+
typedef allocator_traits<Allocator> allocator_traits_type;
|
95
|
+
public:
|
96
|
+
typedef Allocator allocator_type;
|
97
|
+
typedef allocator_type stored_allocator_type;
|
98
|
+
typedef typename allocator_traits_type::pointer pointer;
|
99
|
+
typedef typename allocator_traits_type::value_type value_type;
|
100
|
+
typedef typename allocator_traits_type::size_type size_type;
|
101
|
+
typedef ::boost::intrusive::pointer_traits<pointer> pointer_traits;
|
102
|
+
|
103
|
+
basic_string_base()
|
104
|
+
: members_()
|
105
|
+
{ init(); }
|
106
|
+
|
107
|
+
basic_string_base(const allocator_type& a)
|
108
|
+
: members_(a)
|
109
|
+
{ init(); }
|
110
|
+
|
111
|
+
basic_string_base(const allocator_type& a, size_type n)
|
112
|
+
: members_(a)
|
113
|
+
{
|
114
|
+
this->init();
|
115
|
+
this->allocate_initial_block(n);
|
116
|
+
}
|
117
|
+
|
118
|
+
basic_string_base(BOOST_RV_REF(basic_string_base) b)
|
119
|
+
: members_(boost::move(b.alloc()))
|
120
|
+
{
|
121
|
+
this->init();
|
122
|
+
this->swap_data(b);
|
123
|
+
}
|
124
|
+
|
125
|
+
~basic_string_base()
|
126
|
+
{
|
127
|
+
if(!this->is_short()){
|
128
|
+
this->deallocate_block();
|
129
|
+
this->is_short(true);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
private:
|
134
|
+
|
135
|
+
//This is the structure controlling a long string
|
136
|
+
struct long_t
|
137
|
+
{
|
138
|
+
size_type is_short : 1;
|
139
|
+
size_type length : (sizeof(size_type)*CHAR_BIT - 1);
|
140
|
+
size_type storage;
|
141
|
+
pointer start;
|
142
|
+
|
143
|
+
long_t()
|
144
|
+
{}
|
145
|
+
|
146
|
+
long_t(const long_t &other)
|
147
|
+
{
|
148
|
+
this->is_short = other.is_short;
|
149
|
+
length = other.length;
|
150
|
+
storage = other.storage;
|
151
|
+
start = other.start;
|
152
|
+
}
|
153
|
+
|
154
|
+
long_t &operator =(const long_t &other)
|
155
|
+
{
|
156
|
+
this->is_short = other.is_short;
|
157
|
+
length = other.length;
|
158
|
+
storage = other.storage;
|
159
|
+
start = other.start;
|
160
|
+
return *this;
|
161
|
+
}
|
162
|
+
};
|
163
|
+
|
164
|
+
//This type is the first part of the structure controlling a short string
|
165
|
+
//The "data" member stores
|
166
|
+
struct short_header
|
167
|
+
{
|
168
|
+
unsigned char is_short : 1;
|
169
|
+
unsigned char length : (CHAR_BIT - 1);
|
170
|
+
};
|
171
|
+
|
172
|
+
//This type has the same alignment and size as long_t but it's POD
|
173
|
+
//so, unlike long_t, it can be placed in a union
|
174
|
+
|
175
|
+
typedef typename boost::aligned_storage< sizeof(long_t),
|
176
|
+
container_detail::alignment_of<long_t>::value>::type long_raw_t;
|
177
|
+
|
178
|
+
protected:
|
179
|
+
static const size_type MinInternalBufferChars = 8;
|
180
|
+
static const size_type AlignmentOfValueType =
|
181
|
+
alignment_of<value_type>::value;
|
182
|
+
static const size_type ShortDataOffset =
|
183
|
+
container_detail::ct_rounded_size<sizeof(short_header), AlignmentOfValueType>::value;
|
184
|
+
static const size_type ZeroCostInternalBufferChars =
|
185
|
+
(sizeof(long_t) - ShortDataOffset)/sizeof(value_type);
|
186
|
+
static const size_type UnalignedFinalInternalBufferChars =
|
187
|
+
(ZeroCostInternalBufferChars > MinInternalBufferChars) ?
|
188
|
+
ZeroCostInternalBufferChars : MinInternalBufferChars;
|
189
|
+
|
190
|
+
struct short_t
|
191
|
+
{
|
192
|
+
short_header h;
|
193
|
+
value_type data[UnalignedFinalInternalBufferChars];
|
194
|
+
};
|
195
|
+
|
196
|
+
union repr_t
|
197
|
+
{
|
198
|
+
long_raw_t r;
|
199
|
+
short_t s;
|
200
|
+
|
201
|
+
const short_t &short_repr() const
|
202
|
+
{ return s; }
|
203
|
+
|
204
|
+
const long_t &long_repr() const
|
205
|
+
{ return *static_cast<const long_t*>(static_cast<const void*>(&r)); }
|
206
|
+
|
207
|
+
short_t &short_repr()
|
208
|
+
{ return s; }
|
209
|
+
|
210
|
+
long_t &long_repr()
|
211
|
+
{ return *static_cast<long_t*>(static_cast<void*>(&r)); }
|
212
|
+
};
|
213
|
+
|
214
|
+
struct members_holder
|
215
|
+
: public Allocator
|
216
|
+
{
|
217
|
+
members_holder()
|
218
|
+
: Allocator()
|
219
|
+
{}
|
220
|
+
|
221
|
+
template<class AllocatorConvertible>
|
222
|
+
explicit members_holder(BOOST_FWD_REF(AllocatorConvertible) a)
|
223
|
+
: Allocator(boost::forward<AllocatorConvertible>(a))
|
224
|
+
{}
|
225
|
+
|
226
|
+
repr_t m_repr;
|
227
|
+
} members_;
|
228
|
+
|
229
|
+
const Allocator &alloc() const
|
230
|
+
{ return members_; }
|
231
|
+
|
232
|
+
Allocator &alloc()
|
233
|
+
{ return members_; }
|
234
|
+
|
235
|
+
static const size_type InternalBufferChars = (sizeof(repr_t) - ShortDataOffset)/sizeof(value_type);
|
236
|
+
|
237
|
+
private:
|
238
|
+
|
239
|
+
static const size_type MinAllocation = InternalBufferChars*2;
|
240
|
+
|
241
|
+
protected:
|
242
|
+
bool is_short() const
|
243
|
+
{ return static_cast<bool>(this->members_.m_repr.s.h.is_short != 0); }
|
244
|
+
|
245
|
+
void is_short(bool yes)
|
246
|
+
{
|
247
|
+
const bool was_short = this->is_short();
|
248
|
+
if(yes && !was_short){
|
249
|
+
allocator_traits_type::destroy
|
250
|
+
( this->alloc()
|
251
|
+
, static_cast<long_t*>(static_cast<void*>(&this->members_.m_repr.r))
|
252
|
+
);
|
253
|
+
this->members_.m_repr.s.h.is_short = true;
|
254
|
+
}
|
255
|
+
else if(!yes && was_short){
|
256
|
+
allocator_traits_type::construct
|
257
|
+
( this->alloc()
|
258
|
+
, static_cast<long_t*>(static_cast<void*>(&this->members_.m_repr.r))
|
259
|
+
);
|
260
|
+
this->members_.m_repr.s.h.is_short = false;
|
261
|
+
}
|
262
|
+
}
|
263
|
+
|
264
|
+
private:
|
265
|
+
void init()
|
266
|
+
{
|
267
|
+
this->members_.m_repr.s.h.is_short = 1;
|
268
|
+
this->members_.m_repr.s.h.length = 0;
|
269
|
+
}
|
270
|
+
|
271
|
+
protected:
|
272
|
+
|
273
|
+
typedef container_detail::integral_constant<unsigned, 1> allocator_v1;
|
274
|
+
typedef container_detail::integral_constant<unsigned, 2> allocator_v2;
|
275
|
+
typedef container_detail::integral_constant<unsigned,
|
276
|
+
boost::container::container_detail::version<Allocator>::value> alloc_version;
|
277
|
+
|
278
|
+
std::pair<pointer, bool>
|
279
|
+
allocation_command(allocation_type command,
|
280
|
+
size_type limit_size,
|
281
|
+
size_type preferred_size,
|
282
|
+
size_type &received_size, pointer reuse = 0)
|
283
|
+
{
|
284
|
+
if(this->is_short() && (command & (expand_fwd | expand_bwd)) ){
|
285
|
+
reuse = pointer();
|
286
|
+
command &= ~(expand_fwd | expand_bwd);
|
287
|
+
}
|
288
|
+
return container_detail::allocator_version_traits<Allocator>::allocation_command
|
289
|
+
(this->alloc(), command, limit_size, preferred_size, received_size, reuse);
|
290
|
+
}
|
291
|
+
|
292
|
+
size_type next_capacity(size_type additional_objects) const
|
293
|
+
{ return get_next_capacity(allocator_traits_type::max_size(this->alloc()), this->priv_storage(), additional_objects); }
|
294
|
+
|
295
|
+
void deallocate(pointer p, size_type n)
|
296
|
+
{
|
297
|
+
if (p && (n > InternalBufferChars))
|
298
|
+
this->alloc().deallocate(p, n);
|
299
|
+
}
|
300
|
+
|
301
|
+
void construct(pointer p, const value_type &value = value_type())
|
302
|
+
{
|
303
|
+
allocator_traits_type::construct
|
304
|
+
( this->alloc()
|
305
|
+
, container_detail::to_raw_pointer(p)
|
306
|
+
, value
|
307
|
+
);
|
308
|
+
}
|
309
|
+
|
310
|
+
void destroy(pointer p, size_type n)
|
311
|
+
{
|
312
|
+
value_type *raw_p = container_detail::to_raw_pointer(p);
|
313
|
+
for(; n--; ++raw_p){
|
314
|
+
allocator_traits_type::destroy( this->alloc(), raw_p);
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
void destroy(pointer p)
|
319
|
+
{
|
320
|
+
allocator_traits_type::destroy
|
321
|
+
( this->alloc()
|
322
|
+
, container_detail::to_raw_pointer(p)
|
323
|
+
);
|
324
|
+
}
|
325
|
+
|
326
|
+
void allocate_initial_block(size_type n)
|
327
|
+
{
|
328
|
+
if (n <= this->max_size()) {
|
329
|
+
if(n > InternalBufferChars){
|
330
|
+
size_type new_cap = this->next_capacity(n);
|
331
|
+
pointer p = this->allocation_command(allocate_new, n, new_cap, new_cap).first;
|
332
|
+
this->is_short(false);
|
333
|
+
this->priv_long_addr(p);
|
334
|
+
this->priv_long_size(0);
|
335
|
+
this->priv_storage(new_cap);
|
336
|
+
}
|
337
|
+
}
|
338
|
+
else{
|
339
|
+
throw_length_error("basic_string::allocate_initial_block max_size() exceeded");
|
340
|
+
}
|
341
|
+
}
|
342
|
+
|
343
|
+
void deallocate_block()
|
344
|
+
{ this->deallocate(this->priv_addr(), this->priv_storage()); }
|
345
|
+
|
346
|
+
size_type max_size() const
|
347
|
+
{ return allocator_traits_type::max_size(this->alloc()) - 1; }
|
348
|
+
|
349
|
+
protected:
|
350
|
+
size_type priv_capacity() const
|
351
|
+
{ return this->priv_storage() - 1; }
|
352
|
+
|
353
|
+
pointer priv_short_addr() const
|
354
|
+
{ return pointer_traits::pointer_to(const_cast<value_type&>(this->members_.m_repr.short_repr().data[0])); }
|
355
|
+
|
356
|
+
pointer priv_long_addr() const
|
357
|
+
{ return this->members_.m_repr.long_repr().start; }
|
358
|
+
|
359
|
+
pointer priv_addr() const
|
360
|
+
{
|
361
|
+
return this->is_short()
|
362
|
+
? priv_short_addr()
|
363
|
+
: priv_long_addr()
|
364
|
+
;
|
365
|
+
}
|
366
|
+
|
367
|
+
pointer priv_end_addr() const
|
368
|
+
{
|
369
|
+
return this->is_short()
|
370
|
+
? this->priv_short_addr() + this->priv_short_size()
|
371
|
+
: this->priv_long_addr() + this->priv_long_size()
|
372
|
+
;
|
373
|
+
}
|
374
|
+
|
375
|
+
void priv_long_addr(pointer addr)
|
376
|
+
{ this->members_.m_repr.long_repr().start = addr; }
|
377
|
+
|
378
|
+
size_type priv_storage() const
|
379
|
+
{ return this->is_short() ? priv_short_storage() : priv_long_storage(); }
|
380
|
+
|
381
|
+
size_type priv_short_storage() const
|
382
|
+
{ return InternalBufferChars; }
|
383
|
+
|
384
|
+
size_type priv_long_storage() const
|
385
|
+
{ return this->members_.m_repr.long_repr().storage; }
|
386
|
+
|
387
|
+
void priv_storage(size_type storage)
|
388
|
+
{
|
389
|
+
if(!this->is_short())
|
390
|
+
this->priv_long_storage(storage);
|
391
|
+
}
|
392
|
+
|
393
|
+
void priv_long_storage(size_type storage)
|
394
|
+
{
|
395
|
+
this->members_.m_repr.long_repr().storage = storage;
|
396
|
+
}
|
397
|
+
|
398
|
+
size_type priv_size() const
|
399
|
+
{ return this->is_short() ? this->priv_short_size() : this->priv_long_size(); }
|
400
|
+
|
401
|
+
size_type priv_short_size() const
|
402
|
+
{ return this->members_.m_repr.short_repr().h.length; }
|
403
|
+
|
404
|
+
size_type priv_long_size() const
|
405
|
+
{ return this->members_.m_repr.long_repr().length; }
|
406
|
+
|
407
|
+
void priv_size(size_type sz)
|
408
|
+
{
|
409
|
+
if(this->is_short())
|
410
|
+
this->priv_short_size(sz);
|
411
|
+
else
|
412
|
+
this->priv_long_size(sz);
|
413
|
+
}
|
414
|
+
|
415
|
+
void priv_short_size(size_type sz)
|
416
|
+
{
|
417
|
+
this->members_.m_repr.s.h.length = (unsigned char)sz;
|
418
|
+
}
|
419
|
+
|
420
|
+
void priv_long_size(size_type sz)
|
421
|
+
{
|
422
|
+
this->members_.m_repr.long_repr().length = sz;
|
423
|
+
}
|
424
|
+
|
425
|
+
void swap_data(basic_string_base& other)
|
426
|
+
{
|
427
|
+
if(this->is_short()){
|
428
|
+
if(other.is_short()){
|
429
|
+
std::swap(this->members_.m_repr, other.members_.m_repr);
|
430
|
+
}
|
431
|
+
else{
|
432
|
+
short_t short_backup(this->members_.m_repr.short_repr());
|
433
|
+
long_t long_backup (other.members_.m_repr.long_repr());
|
434
|
+
other.members_.m_repr.long_repr().~long_t();
|
435
|
+
::new(&this->members_.m_repr.long_repr()) long_t;
|
436
|
+
this->members_.m_repr.long_repr() = long_backup;
|
437
|
+
other.members_.m_repr.short_repr() = short_backup;
|
438
|
+
}
|
439
|
+
}
|
440
|
+
else{
|
441
|
+
if(other.is_short()){
|
442
|
+
short_t short_backup(other.members_.m_repr.short_repr());
|
443
|
+
long_t long_backup (this->members_.m_repr.long_repr());
|
444
|
+
this->members_.m_repr.long_repr().~long_t();
|
445
|
+
::new(&other.members_.m_repr.long_repr()) long_t;
|
446
|
+
other.members_.m_repr.long_repr() = long_backup;
|
447
|
+
this->members_.m_repr.short_repr() = short_backup;
|
448
|
+
}
|
449
|
+
else{
|
450
|
+
boost::container::swap_dispatch(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr());
|
451
|
+
}
|
452
|
+
}
|
453
|
+
}
|
454
|
+
};
|
455
|
+
|
456
|
+
} //namespace container_detail {
|
457
|
+
|
458
|
+
/// @endcond
|
459
|
+
|
460
|
+
//! The basic_string class represents a Sequence of characters. It contains all the
|
461
|
+
//! usual operations of a Sequence, and, additionally, it contains standard string
|
462
|
+
//! operations such as search and concatenation.
|
463
|
+
//!
|
464
|
+
//! The basic_string class is parameterized by character type, and by that type's
|
465
|
+
//! Character Traits.
|
466
|
+
//!
|
467
|
+
//! This class has performance characteristics very much like vector<>, meaning,
|
468
|
+
//! for example, that it does not perform reference-count or copy-on-write, and that
|
469
|
+
//! concatenation of two strings is an O(N) operation.
|
470
|
+
//!
|
471
|
+
//! Some of basic_string's member functions use an unusual method of specifying positions
|
472
|
+
//! and ranges. In addition to the conventional method using iterators, many of
|
473
|
+
//! basic_string's member functions use a single value pos of type size_type to represent a
|
474
|
+
//! position (in which case the position is begin() + pos, and many of basic_string's
|
475
|
+
//! member functions use two values, pos and n, to represent a range. In that case pos is
|
476
|
+
//! the beginning of the range and n is its size. That is, the range is
|
477
|
+
//! [begin() + pos, begin() + pos + n).
|
478
|
+
//!
|
479
|
+
//! Note that the C++ standard does not specify the complexity of basic_string operations.
|
480
|
+
//! In this implementation, basic_string has performance characteristics very similar to
|
481
|
+
//! those of vector: access to a single character is O(1), while copy and concatenation
|
482
|
+
//! are O(N).
|
483
|
+
//!
|
484
|
+
//! In this implementation, begin(),
|
485
|
+
//! end(), rbegin(), rend(), operator[], c_str(), and data() do not invalidate iterators.
|
486
|
+
//! In this implementation, iterators are only invalidated by member functions that
|
487
|
+
//! explicitly change the string's contents.
|
488
|
+
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
|
489
|
+
template <class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT> >
|
490
|
+
#else
|
491
|
+
template <class CharT, class Traits, class Allocator>
|
492
|
+
#endif
|
493
|
+
class basic_string
|
494
|
+
: private container_detail::basic_string_base<Allocator>
|
495
|
+
{
|
496
|
+
/// @cond
|
497
|
+
private:
|
498
|
+
typedef allocator_traits<Allocator> allocator_traits_type;
|
499
|
+
BOOST_COPYABLE_AND_MOVABLE(basic_string)
|
500
|
+
typedef container_detail::basic_string_base<Allocator> base_t;
|
501
|
+
static const typename base_t::size_type InternalBufferChars = base_t::InternalBufferChars;
|
502
|
+
|
503
|
+
protected:
|
504
|
+
// Allocator helper class to use a char_traits as a function object.
|
505
|
+
|
506
|
+
template <class Tr>
|
507
|
+
struct Eq_traits
|
508
|
+
: public std::binary_function<typename Tr::char_type,
|
509
|
+
typename Tr::char_type,
|
510
|
+
bool>
|
511
|
+
{
|
512
|
+
bool operator()(const typename Tr::char_type& x,
|
513
|
+
const typename Tr::char_type& y) const
|
514
|
+
{ return Tr::eq(x, y); }
|
515
|
+
};
|
516
|
+
|
517
|
+
template <class Tr>
|
518
|
+
struct Not_within_traits
|
519
|
+
: public std::unary_function<typename Tr::char_type, bool>
|
520
|
+
{
|
521
|
+
typedef const typename Tr::char_type* Pointer;
|
522
|
+
const Pointer m_first;
|
523
|
+
const Pointer m_last;
|
524
|
+
|
525
|
+
Not_within_traits(Pointer f, Pointer l)
|
526
|
+
: m_first(f), m_last(l) {}
|
527
|
+
|
528
|
+
bool operator()(const typename Tr::char_type& x) const
|
529
|
+
{
|
530
|
+
return std::find_if(m_first, m_last,
|
531
|
+
std::bind1st(Eq_traits<Tr>(), x)) == m_last;
|
532
|
+
}
|
533
|
+
};
|
534
|
+
/// @endcond
|
535
|
+
|
536
|
+
public:
|
537
|
+
//////////////////////////////////////////////
|
538
|
+
//
|
539
|
+
// types
|
540
|
+
//
|
541
|
+
//////////////////////////////////////////////
|
542
|
+
typedef Traits traits_type;
|
543
|
+
typedef CharT value_type;
|
544
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
|
545
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
|
546
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
|
547
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::const_reference const_reference;
|
548
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
|
549
|
+
typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
|
550
|
+
typedef Allocator allocator_type;
|
551
|
+
typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type;
|
552
|
+
typedef BOOST_CONTAINER_IMPDEF(pointer) iterator;
|
553
|
+
typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
|
554
|
+
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
|
555
|
+
typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
|
556
|
+
static const size_type npos = size_type(-1);
|
557
|
+
|
558
|
+
/// @cond
|
559
|
+
private:
|
560
|
+
typedef constant_iterator<CharT, difference_type> cvalue_iterator;
|
561
|
+
typedef typename base_t::allocator_v1 allocator_v1;
|
562
|
+
typedef typename base_t::allocator_v2 allocator_v2;
|
563
|
+
typedef typename base_t::alloc_version alloc_version;
|
564
|
+
typedef ::boost::intrusive::pointer_traits<pointer> pointer_traits;
|
565
|
+
/// @endcond
|
566
|
+
|
567
|
+
public: // Constructor, destructor, assignment.
|
568
|
+
//////////////////////////////////////////////
|
569
|
+
//
|
570
|
+
// construct/copy/destroy
|
571
|
+
//
|
572
|
+
//////////////////////////////////////////////
|
573
|
+
/// @cond
|
574
|
+
struct reserve_t {};
|
575
|
+
|
576
|
+
basic_string(reserve_t, size_type n,
|
577
|
+
const allocator_type& a = allocator_type())
|
578
|
+
//Select allocator as in copy constructor as reserve_t-based constructors
|
579
|
+
//are two step copies optimized for capacity
|
580
|
+
: base_t( allocator_traits_type::select_on_container_copy_construction(a)
|
581
|
+
, n + 1)
|
582
|
+
{ this->priv_terminate_string(); }
|
583
|
+
|
584
|
+
/// @endcond
|
585
|
+
|
586
|
+
//! <b>Effects</b>: Default constructs a basic_string.
|
587
|
+
//!
|
588
|
+
//! <b>Throws</b>: If allocator_type's default constructor throws.
|
589
|
+
basic_string()
|
590
|
+
: base_t()
|
591
|
+
{ this->priv_terminate_string(); }
|
592
|
+
|
593
|
+
|
594
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter.
|
595
|
+
//!
|
596
|
+
//! <b>Throws</b>: Nothing
|
597
|
+
explicit basic_string(const allocator_type& a) BOOST_CONTAINER_NOEXCEPT
|
598
|
+
: base_t(a)
|
599
|
+
{ this->priv_terminate_string(); }
|
600
|
+
|
601
|
+
//! <b>Effects</b>: Copy constructs a basic_string.
|
602
|
+
//!
|
603
|
+
//! <b>Postcondition</b>: x == *this.
|
604
|
+
//!
|
605
|
+
//! <b>Throws</b>: If allocator_type's default constructor throws.
|
606
|
+
basic_string(const basic_string& s)
|
607
|
+
: base_t(allocator_traits_type::select_on_container_copy_construction(s.alloc()))
|
608
|
+
{
|
609
|
+
this->priv_terminate_string();
|
610
|
+
this->assign(s.begin(), s.end());
|
611
|
+
}
|
612
|
+
|
613
|
+
//! <b>Effects</b>: Move constructor. Moves s's resources to *this.
|
614
|
+
//!
|
615
|
+
//! <b>Throws</b>: Nothing.
|
616
|
+
//!
|
617
|
+
//! <b>Complexity</b>: Constant.
|
618
|
+
basic_string(BOOST_RV_REF(basic_string) s) BOOST_CONTAINER_NOEXCEPT
|
619
|
+
: base_t(boost::move((base_t&)s))
|
620
|
+
{}
|
621
|
+
|
622
|
+
//! <b>Effects</b>: Copy constructs a basic_string using the specified allocator.
|
623
|
+
//!
|
624
|
+
//! <b>Postcondition</b>: x == *this.
|
625
|
+
//!
|
626
|
+
//! <b>Throws</b>: If allocation throws.
|
627
|
+
basic_string(const basic_string& s, const allocator_type &a)
|
628
|
+
: base_t(a)
|
629
|
+
{
|
630
|
+
this->priv_terminate_string();
|
631
|
+
this->assign(s.begin(), s.end());
|
632
|
+
}
|
633
|
+
|
634
|
+
//! <b>Effects</b>: Move constructor using the specified allocator.
|
635
|
+
//! Moves s's resources to *this.
|
636
|
+
//!
|
637
|
+
//! <b>Throws</b>: If allocation throws.
|
638
|
+
//!
|
639
|
+
//! <b>Complexity</b>: Constant if a == s.get_allocator(), linear otherwise.
|
640
|
+
basic_string(BOOST_RV_REF(basic_string) s, const allocator_type &a)
|
641
|
+
: base_t(a)
|
642
|
+
{
|
643
|
+
this->priv_terminate_string();
|
644
|
+
if(a == this->alloc()){
|
645
|
+
this->swap_data(s);
|
646
|
+
}
|
647
|
+
else{
|
648
|
+
this->assign(s.begin(), s.end());
|
649
|
+
}
|
650
|
+
}
|
651
|
+
|
652
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
|
653
|
+
//! and is initialized by a specific number of characters of the s string.
|
654
|
+
basic_string(const basic_string& s, size_type pos, size_type n = npos,
|
655
|
+
const allocator_type& a = allocator_type())
|
656
|
+
: base_t(a)
|
657
|
+
{
|
658
|
+
this->priv_terminate_string();
|
659
|
+
if (pos > s.size())
|
660
|
+
throw_out_of_range("basic_string::basic_string out of range position");
|
661
|
+
else
|
662
|
+
this->assign
|
663
|
+
(s.begin() + pos, s.begin() + pos + container_detail::min_value(n, s.size() - pos));
|
664
|
+
}
|
665
|
+
|
666
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
|
667
|
+
//! and is initialized by a specific number of characters of the s c-string.
|
668
|
+
basic_string(const CharT* s, size_type n, const allocator_type& a = allocator_type())
|
669
|
+
: base_t(a)
|
670
|
+
{
|
671
|
+
this->priv_terminate_string();
|
672
|
+
this->assign(s, s + n);
|
673
|
+
}
|
674
|
+
|
675
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
|
676
|
+
//! and is initialized by the null-terminated s c-string.
|
677
|
+
basic_string(const CharT* s, const allocator_type& a = allocator_type())
|
678
|
+
: base_t(a)
|
679
|
+
{
|
680
|
+
this->priv_terminate_string();
|
681
|
+
this->assign(s, s + Traits::length(s));
|
682
|
+
}
|
683
|
+
|
684
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
|
685
|
+
//! and is initialized by n copies of c.
|
686
|
+
basic_string(size_type n, CharT c, const allocator_type& a = allocator_type())
|
687
|
+
: base_t(a)
|
688
|
+
{
|
689
|
+
this->priv_terminate_string();
|
690
|
+
this->assign(n, c);
|
691
|
+
}
|
692
|
+
|
693
|
+
//! <b>Effects</b>: Constructs a basic_string taking the allocator as parameter,
|
694
|
+
//! and a range of iterators.
|
695
|
+
template <class InputIterator>
|
696
|
+
basic_string(InputIterator f, InputIterator l, const allocator_type& a = allocator_type())
|
697
|
+
: base_t(a)
|
698
|
+
{
|
699
|
+
this->priv_terminate_string();
|
700
|
+
this->assign(f, l);
|
701
|
+
}
|
702
|
+
|
703
|
+
//! <b>Effects</b>: Destroys the basic_string. All used memory is deallocated.
|
704
|
+
//!
|
705
|
+
//! <b>Throws</b>: Nothing.
|
706
|
+
//!
|
707
|
+
//! <b>Complexity</b>: Constant.
|
708
|
+
~basic_string() BOOST_CONTAINER_NOEXCEPT
|
709
|
+
{}
|
710
|
+
|
711
|
+
//! <b>Effects</b>: Copy constructs a string.
|
712
|
+
//!
|
713
|
+
//! <b>Postcondition</b>: x == *this.
|
714
|
+
//!
|
715
|
+
//! <b>Complexity</b>: Linear to the elements x contains.
|
716
|
+
basic_string& operator=(BOOST_COPY_ASSIGN_REF(basic_string) x)
|
717
|
+
{
|
718
|
+
if (&x != this){
|
719
|
+
allocator_type &this_alloc = this->alloc();
|
720
|
+
const allocator_type &x_alloc = x.alloc();
|
721
|
+
container_detail::bool_<allocator_traits_type::
|
722
|
+
propagate_on_container_copy_assignment::value> flag;
|
723
|
+
if(flag && this_alloc != x_alloc){
|
724
|
+
if(!this->is_short()){
|
725
|
+
this->deallocate_block();
|
726
|
+
this->is_short(true);
|
727
|
+
Traits::assign(*this->priv_addr(), CharT(0));
|
728
|
+
this->priv_short_size(0);
|
729
|
+
}
|
730
|
+
}
|
731
|
+
container_detail::assign_alloc(this->alloc(), x.alloc(), flag);
|
732
|
+
this->assign(x.begin(), x.end());
|
733
|
+
}
|
734
|
+
return *this;
|
735
|
+
}
|
736
|
+
|
737
|
+
//! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
|
738
|
+
//!
|
739
|
+
//! <b>Throws</b>: If allocator_type's copy constructor throws.
|
740
|
+
//!
|
741
|
+
//! <b>Complexity</b>: Constant.
|
742
|
+
basic_string& operator=(BOOST_RV_REF(basic_string) x) BOOST_CONTAINER_NOEXCEPT
|
743
|
+
{
|
744
|
+
if (&x != this){
|
745
|
+
allocator_type &this_alloc = this->alloc();
|
746
|
+
allocator_type &x_alloc = x.alloc();
|
747
|
+
//If allocators are equal we can just swap pointers
|
748
|
+
if(this_alloc == x_alloc){
|
749
|
+
//Destroy objects but retain memory in case x reuses it in the future
|
750
|
+
this->clear();
|
751
|
+
this->swap_data(x);
|
752
|
+
//Move allocator if needed
|
753
|
+
container_detail::bool_<allocator_traits_type::
|
754
|
+
propagate_on_container_move_assignment::value> flag;
|
755
|
+
container_detail::move_alloc(this_alloc, x_alloc, flag);
|
756
|
+
}
|
757
|
+
//If unequal allocators, then do a one by one move
|
758
|
+
else{
|
759
|
+
this->assign( x.begin(), x.end());
|
760
|
+
}
|
761
|
+
}
|
762
|
+
return *this;
|
763
|
+
}
|
764
|
+
|
765
|
+
//! <b>Effects</b>: Assignment from a null-terminated c-string.
|
766
|
+
basic_string& operator=(const CharT* s)
|
767
|
+
{ return this->assign(s, s + Traits::length(s)); }
|
768
|
+
|
769
|
+
//! <b>Effects</b>: Assignment from character.
|
770
|
+
basic_string& operator=(CharT c)
|
771
|
+
{ return this->assign(static_cast<size_type>(1), c); }
|
772
|
+
|
773
|
+
//! <b>Effects</b>: Returns a copy of the internal allocator.
|
774
|
+
//!
|
775
|
+
//! <b>Throws</b>: If allocator's copy constructor throws.
|
776
|
+
//!
|
777
|
+
//! <b>Complexity</b>: Constant.
|
778
|
+
allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
|
779
|
+
{ return this->alloc(); }
|
780
|
+
|
781
|
+
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
782
|
+
//!
|
783
|
+
//! <b>Throws</b>: Nothing
|
784
|
+
//!
|
785
|
+
//! <b>Complexity</b>: Constant.
|
786
|
+
//!
|
787
|
+
//! <b>Note</b>: Non-standard extension.
|
788
|
+
stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
|
789
|
+
{ return this->alloc(); }
|
790
|
+
|
791
|
+
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
792
|
+
//!
|
793
|
+
//! <b>Throws</b>: Nothing
|
794
|
+
//!
|
795
|
+
//! <b>Complexity</b>: Constant.
|
796
|
+
//!
|
797
|
+
//! <b>Note</b>: Non-standard extension.
|
798
|
+
const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
|
799
|
+
{ return this->alloc(); }
|
800
|
+
|
801
|
+
//////////////////////////////////////////////
|
802
|
+
//
|
803
|
+
// iterators
|
804
|
+
//
|
805
|
+
//////////////////////////////////////////////
|
806
|
+
|
807
|
+
//! <b>Effects</b>: Returns an iterator to the first element contained in the vector.
|
808
|
+
//!
|
809
|
+
//! <b>Throws</b>: Nothing.
|
810
|
+
//!
|
811
|
+
//! <b>Complexity</b>: Constant.
|
812
|
+
iterator begin() BOOST_CONTAINER_NOEXCEPT
|
813
|
+
{ return this->priv_addr(); }
|
814
|
+
|
815
|
+
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
816
|
+
//!
|
817
|
+
//! <b>Throws</b>: Nothing.
|
818
|
+
//!
|
819
|
+
//! <b>Complexity</b>: Constant.
|
820
|
+
const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
|
821
|
+
{ return this->priv_addr(); }
|
822
|
+
|
823
|
+
//! <b>Effects</b>: Returns an iterator to the end of the vector.
|
824
|
+
//!
|
825
|
+
//! <b>Throws</b>: Nothing.
|
826
|
+
//!
|
827
|
+
//! <b>Complexity</b>: Constant.
|
828
|
+
iterator end() BOOST_CONTAINER_NOEXCEPT
|
829
|
+
{ return this->priv_end_addr(); }
|
830
|
+
|
831
|
+
//! <b>Effects</b>: Returns a const_iterator to the end of the vector.
|
832
|
+
//!
|
833
|
+
//! <b>Throws</b>: Nothing.
|
834
|
+
//!
|
835
|
+
//! <b>Complexity</b>: Constant.
|
836
|
+
const_iterator end() const BOOST_CONTAINER_NOEXCEPT
|
837
|
+
{ return this->priv_end_addr(); }
|
838
|
+
|
839
|
+
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
|
840
|
+
//! of the reversed vector.
|
841
|
+
//!
|
842
|
+
//! <b>Throws</b>: Nothing.
|
843
|
+
//!
|
844
|
+
//! <b>Complexity</b>: Constant.
|
845
|
+
reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
|
846
|
+
{ return reverse_iterator(this->priv_end_addr()); }
|
847
|
+
|
848
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
849
|
+
//! of the reversed vector.
|
850
|
+
//!
|
851
|
+
//! <b>Throws</b>: Nothing.
|
852
|
+
//!
|
853
|
+
//! <b>Complexity</b>: Constant.
|
854
|
+
const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
|
855
|
+
{ return this->crbegin(); }
|
856
|
+
|
857
|
+
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
|
858
|
+
//! of the reversed vector.
|
859
|
+
//!
|
860
|
+
//! <b>Throws</b>: Nothing.
|
861
|
+
//!
|
862
|
+
//! <b>Complexity</b>: Constant.
|
863
|
+
reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
|
864
|
+
{ return reverse_iterator(this->priv_addr()); }
|
865
|
+
|
866
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
867
|
+
//! of the reversed vector.
|
868
|
+
//!
|
869
|
+
//! <b>Throws</b>: Nothing.
|
870
|
+
//!
|
871
|
+
//! <b>Complexity</b>: Constant.
|
872
|
+
const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
|
873
|
+
{ return this->crend(); }
|
874
|
+
|
875
|
+
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector.
|
876
|
+
//!
|
877
|
+
//! <b>Throws</b>: Nothing.
|
878
|
+
//!
|
879
|
+
//! <b>Complexity</b>: Constant.
|
880
|
+
const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
|
881
|
+
{ return this->priv_addr(); }
|
882
|
+
|
883
|
+
//! <b>Effects</b>: Returns a const_iterator to the end of the vector.
|
884
|
+
//!
|
885
|
+
//! <b>Throws</b>: Nothing.
|
886
|
+
//!
|
887
|
+
//! <b>Complexity</b>: Constant.
|
888
|
+
const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
|
889
|
+
{ return this->priv_end_addr(); }
|
890
|
+
|
891
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
892
|
+
//! of the reversed vector.
|
893
|
+
//!
|
894
|
+
//! <b>Throws</b>: Nothing.
|
895
|
+
//!
|
896
|
+
//! <b>Complexity</b>: Constant.
|
897
|
+
const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
|
898
|
+
{ return const_reverse_iterator(this->priv_end_addr()); }
|
899
|
+
|
900
|
+
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
901
|
+
//! of the reversed vector.
|
902
|
+
//!
|
903
|
+
//! <b>Throws</b>: Nothing.
|
904
|
+
//!
|
905
|
+
//! <b>Complexity</b>: Constant.
|
906
|
+
const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
|
907
|
+
{ return const_reverse_iterator(this->priv_addr()); }
|
908
|
+
|
909
|
+
//////////////////////////////////////////////
|
910
|
+
//
|
911
|
+
// capacity
|
912
|
+
//
|
913
|
+
//////////////////////////////////////////////
|
914
|
+
|
915
|
+
//! <b>Effects</b>: Returns true if the vector contains no elements.
|
916
|
+
//!
|
917
|
+
//! <b>Throws</b>: Nothing.
|
918
|
+
//!
|
919
|
+
//! <b>Complexity</b>: Constant.
|
920
|
+
bool empty() const BOOST_CONTAINER_NOEXCEPT
|
921
|
+
{ return !this->priv_size(); }
|
922
|
+
|
923
|
+
//! <b>Effects</b>: Returns the number of the elements contained in the vector.
|
924
|
+
//!
|
925
|
+
//! <b>Throws</b>: Nothing.
|
926
|
+
//!
|
927
|
+
//! <b>Complexity</b>: Constant.
|
928
|
+
size_type size() const BOOST_CONTAINER_NOEXCEPT
|
929
|
+
{ return this->priv_size(); }
|
930
|
+
|
931
|
+
//! <b>Effects</b>: Returns the number of the elements contained in the vector.
|
932
|
+
//!
|
933
|
+
//! <b>Throws</b>: Nothing.
|
934
|
+
//!
|
935
|
+
//! <b>Complexity</b>: Constant.
|
936
|
+
size_type length() const BOOST_CONTAINER_NOEXCEPT
|
937
|
+
{ return this->size(); }
|
938
|
+
|
939
|
+
//! <b>Effects</b>: Returns the largest possible size of the vector.
|
940
|
+
//!
|
941
|
+
//! <b>Throws</b>: Nothing.
|
942
|
+
//!
|
943
|
+
//! <b>Complexity</b>: Constant.
|
944
|
+
size_type max_size() const BOOST_CONTAINER_NOEXCEPT
|
945
|
+
{ return base_t::max_size(); }
|
946
|
+
|
947
|
+
//! <b>Effects</b>: Inserts or erases elements at the end such that
|
948
|
+
//! the size becomes n. New elements are copy constructed from x.
|
949
|
+
//!
|
950
|
+
//! <b>Throws</b>: If memory allocation throws
|
951
|
+
//!
|
952
|
+
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
|
953
|
+
void resize(size_type n, CharT c)
|
954
|
+
{
|
955
|
+
if (n <= this->size())
|
956
|
+
this->erase(this->begin() + n, this->end());
|
957
|
+
else
|
958
|
+
this->append(n - this->size(), c);
|
959
|
+
}
|
960
|
+
|
961
|
+
//! <b>Effects</b>: Inserts or erases elements at the end such that
|
962
|
+
//! the size becomes n. New elements are default constructed.
|
963
|
+
//!
|
964
|
+
//! <b>Throws</b>: If memory allocation throws
|
965
|
+
//!
|
966
|
+
//! <b>Complexity</b>: Linear to the difference between size() and new_size.
|
967
|
+
void resize(size_type n)
|
968
|
+
{ resize(n, CharT()); }
|
969
|
+
|
970
|
+
//! <b>Effects</b>: Number of elements for which memory has been allocated.
|
971
|
+
//! capacity() is always greater than or equal to size().
|
972
|
+
//!
|
973
|
+
//! <b>Throws</b>: Nothing.
|
974
|
+
//!
|
975
|
+
//! <b>Complexity</b>: Constant.
|
976
|
+
size_type capacity() const BOOST_CONTAINER_NOEXCEPT
|
977
|
+
{ return this->priv_capacity(); }
|
978
|
+
|
979
|
+
//! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
|
980
|
+
//! effect. Otherwise, it is a request for allocation of additional memory.
|
981
|
+
//! If the request is successful, then capacity() is greater than or equal to
|
982
|
+
//! n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
|
983
|
+
//!
|
984
|
+
//! <b>Throws</b>: If memory allocation allocation throws
|
985
|
+
void reserve(size_type res_arg)
|
986
|
+
{
|
987
|
+
if (res_arg > this->max_size()){
|
988
|
+
throw_length_error("basic_string::reserve max_size() exceeded");
|
989
|
+
}
|
990
|
+
|
991
|
+
if (this->capacity() < res_arg){
|
992
|
+
size_type n = container_detail::max_value(res_arg, this->size()) + 1;
|
993
|
+
size_type new_cap = this->next_capacity(n);
|
994
|
+
pointer new_start = this->allocation_command
|
995
|
+
(allocate_new, n, new_cap, new_cap).first;
|
996
|
+
size_type new_length = 0;
|
997
|
+
|
998
|
+
const pointer addr = this->priv_addr();
|
999
|
+
new_length += priv_uninitialized_copy
|
1000
|
+
(addr, addr + this->priv_size(), new_start);
|
1001
|
+
this->priv_construct_null(new_start + new_length);
|
1002
|
+
this->deallocate_block();
|
1003
|
+
this->is_short(false);
|
1004
|
+
this->priv_long_addr(new_start);
|
1005
|
+
this->priv_long_size(new_length);
|
1006
|
+
this->priv_storage(new_cap);
|
1007
|
+
}
|
1008
|
+
}
|
1009
|
+
|
1010
|
+
//! <b>Effects</b>: Tries to deallocate the excess of memory created
|
1011
|
+
//! with previous allocations. The size of the string is unchanged
|
1012
|
+
//!
|
1013
|
+
//! <b>Throws</b>: Nothing
|
1014
|
+
//!
|
1015
|
+
//! <b>Complexity</b>: Linear to size().
|
1016
|
+
void shrink_to_fit()
|
1017
|
+
{
|
1018
|
+
//Check if shrinking is possible
|
1019
|
+
if(this->priv_storage() > InternalBufferChars){
|
1020
|
+
//Check if we should pass from dynamically allocated buffer
|
1021
|
+
//to the internal storage
|
1022
|
+
if(this->priv_size() < InternalBufferChars){
|
1023
|
+
//Dynamically allocated buffer attributes
|
1024
|
+
pointer long_addr = this->priv_long_addr();
|
1025
|
+
size_type long_storage = this->priv_long_storage();
|
1026
|
+
size_type long_size = this->priv_long_size();
|
1027
|
+
//Shrink from allocated buffer to the internal one, including trailing null
|
1028
|
+
Traits::copy( container_detail::to_raw_pointer(this->priv_short_addr())
|
1029
|
+
, container_detail::to_raw_pointer(long_addr)
|
1030
|
+
, long_size+1);
|
1031
|
+
this->is_short(true);
|
1032
|
+
this->alloc().deallocate(long_addr, long_storage);
|
1033
|
+
}
|
1034
|
+
else{
|
1035
|
+
//Shrinking in dynamic buffer
|
1036
|
+
this->priv_shrink_to_fit_dynamic_buffer(alloc_version());
|
1037
|
+
}
|
1038
|
+
}
|
1039
|
+
}
|
1040
|
+
|
1041
|
+
//////////////////////////////////////////////
|
1042
|
+
//
|
1043
|
+
// element access
|
1044
|
+
//
|
1045
|
+
//////////////////////////////////////////////
|
1046
|
+
|
1047
|
+
//! <b>Requires</b>: size() > n.
|
1048
|
+
//!
|
1049
|
+
//! <b>Effects</b>: Returns a reference to the nth element
|
1050
|
+
//! from the beginning of the container.
|
1051
|
+
//!
|
1052
|
+
//! <b>Throws</b>: Nothing.
|
1053
|
+
//!
|
1054
|
+
//! <b>Complexity</b>: Constant.
|
1055
|
+
reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT
|
1056
|
+
{ return *(this->priv_addr() + n); }
|
1057
|
+
|
1058
|
+
//! <b>Requires</b>: size() > n.
|
1059
|
+
//!
|
1060
|
+
//! <b>Effects</b>: Returns a const reference to the nth element
|
1061
|
+
//! from the beginning of the container.
|
1062
|
+
//!
|
1063
|
+
//! <b>Throws</b>: Nothing.
|
1064
|
+
//!
|
1065
|
+
//! <b>Complexity</b>: Constant.
|
1066
|
+
const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
|
1067
|
+
{ return *(this->priv_addr() + n); }
|
1068
|
+
|
1069
|
+
//! <b>Requires</b>: size() > n.
|
1070
|
+
//!
|
1071
|
+
//! <b>Effects</b>: Returns a reference to the nth element
|
1072
|
+
//! from the beginning of the container.
|
1073
|
+
//!
|
1074
|
+
//! <b>Throws</b>: std::range_error if n >= size()
|
1075
|
+
//!
|
1076
|
+
//! <b>Complexity</b>: Constant.
|
1077
|
+
reference at(size_type n)
|
1078
|
+
{
|
1079
|
+
if (n >= this->size())
|
1080
|
+
throw_out_of_range("basic_string::at invalid subscript");
|
1081
|
+
return *(this->priv_addr() + n);
|
1082
|
+
}
|
1083
|
+
|
1084
|
+
//! <b>Requires</b>: size() > n.
|
1085
|
+
//!
|
1086
|
+
//! <b>Effects</b>: Returns a const reference to the nth element
|
1087
|
+
//! from the beginning of the container.
|
1088
|
+
//!
|
1089
|
+
//! <b>Throws</b>: std::range_error if n >= size()
|
1090
|
+
//!
|
1091
|
+
//! <b>Complexity</b>: Constant.
|
1092
|
+
const_reference at(size_type n) const {
|
1093
|
+
if (n >= this->size())
|
1094
|
+
throw_out_of_range("basic_string::at invalid subscript");
|
1095
|
+
return *(this->priv_addr() + n);
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
//////////////////////////////////////////////
|
1099
|
+
//
|
1100
|
+
// modifiers
|
1101
|
+
//
|
1102
|
+
//////////////////////////////////////////////
|
1103
|
+
|
1104
|
+
//! <b>Effects</b>: Calls append(str.data, str.size()).
|
1105
|
+
//!
|
1106
|
+
//! <b>Returns</b>: *this
|
1107
|
+
basic_string& operator+=(const basic_string& s)
|
1108
|
+
{ return this->append(s); }
|
1109
|
+
|
1110
|
+
//! <b>Effects</b>: Calls append(s).
|
1111
|
+
//!
|
1112
|
+
//! <b>Returns</b>: *this
|
1113
|
+
basic_string& operator+=(const CharT* s)
|
1114
|
+
{ return this->append(s); }
|
1115
|
+
|
1116
|
+
//! <b>Effects</b>: Calls append(1, c).
|
1117
|
+
//!
|
1118
|
+
//! <b>Returns</b>: *this
|
1119
|
+
basic_string& operator+=(CharT c)
|
1120
|
+
{ this->push_back(c); return *this; }
|
1121
|
+
|
1122
|
+
//! <b>Effects</b>: Calls append(str.data(), str.size()).
|
1123
|
+
//!
|
1124
|
+
//! <b>Returns</b>: *this
|
1125
|
+
basic_string& append(const basic_string& s)
|
1126
|
+
{ return this->append(s.begin(), s.end()); }
|
1127
|
+
|
1128
|
+
//! <b>Requires</b>: pos <= str.size()
|
1129
|
+
//!
|
1130
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to append
|
1131
|
+
//! as the smaller of n and str.size() - pos and calls append(str.data() + pos, rlen).
|
1132
|
+
//!
|
1133
|
+
//! <b>Throws</b>: If memory allocation throws and out_of_range if pos > str.size()
|
1134
|
+
//!
|
1135
|
+
//! <b>Returns</b>: *this
|
1136
|
+
basic_string& append(const basic_string& s, size_type pos, size_type n)
|
1137
|
+
{
|
1138
|
+
if (pos > s.size())
|
1139
|
+
throw_out_of_range("basic_string::append out of range position");
|
1140
|
+
return this->append(s.begin() + pos,
|
1141
|
+
s.begin() + pos + container_detail::min_value(n, s.size() - pos));
|
1142
|
+
}
|
1143
|
+
|
1144
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
1145
|
+
//!
|
1146
|
+
//! <b>Effects</b>: The function replaces the string controlled by *this with
|
1147
|
+
//! a string of length size() + n whose irst size() elements are a copy of the
|
1148
|
+
//! original string controlled by *this and whose remaining
|
1149
|
+
//! elements are a copy of the initial n elements of s.
|
1150
|
+
//!
|
1151
|
+
//! <b>Throws</b>: If memory allocation throws length_error if size() + n > max_size().
|
1152
|
+
//!
|
1153
|
+
//! <b>Returns</b>: *this
|
1154
|
+
basic_string& append(const CharT* s, size_type n)
|
1155
|
+
{ return this->append(s, s + n); }
|
1156
|
+
|
1157
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
1158
|
+
//!
|
1159
|
+
//! <b>Effects</b>: Calls append(s, traits::length(s)).
|
1160
|
+
//!
|
1161
|
+
//! <b>Returns</b>: *this
|
1162
|
+
basic_string& append(const CharT* s)
|
1163
|
+
{ return this->append(s, s + Traits::length(s)); }
|
1164
|
+
|
1165
|
+
//! <b>Effects</b>: Equivalent to append(basic_string(n, c)).
|
1166
|
+
//!
|
1167
|
+
//! <b>Returns</b>: *this
|
1168
|
+
basic_string& append(size_type n, CharT c)
|
1169
|
+
{ return this->append(cvalue_iterator(c, n), cvalue_iterator()); }
|
1170
|
+
|
1171
|
+
//! <b>Requires</b>: [first,last) is a valid range.
|
1172
|
+
//!
|
1173
|
+
//! <b>Effects</b>: Equivalent to append(basic_string(first, last)).
|
1174
|
+
//!
|
1175
|
+
//! <b>Returns</b>: *this
|
1176
|
+
template <class InputIter>
|
1177
|
+
basic_string& append(InputIter first, InputIter last)
|
1178
|
+
{ this->insert(this->end(), first, last); return *this; }
|
1179
|
+
|
1180
|
+
//! <b>Effects</b>: Equivalent to append(static_cast<size_type>(1), c).
|
1181
|
+
void push_back(CharT c)
|
1182
|
+
{
|
1183
|
+
const size_type old_size = this->priv_size();
|
1184
|
+
if (old_size < this->capacity()){
|
1185
|
+
const pointer addr = this->priv_addr();
|
1186
|
+
this->priv_construct_null(addr + old_size + 1);
|
1187
|
+
Traits::assign(addr[old_size], c);
|
1188
|
+
this->priv_size(old_size+1);
|
1189
|
+
}
|
1190
|
+
else{
|
1191
|
+
//No enough memory, insert a new object at the end
|
1192
|
+
this->append(size_type(1), c);
|
1193
|
+
}
|
1194
|
+
}
|
1195
|
+
|
1196
|
+
//! <b>Effects</b>: Equivalent to assign(str, 0, npos).
|
1197
|
+
//!
|
1198
|
+
//! <b>Returns</b>: *this
|
1199
|
+
basic_string& assign(const basic_string& s)
|
1200
|
+
{ return this->operator=(s); }
|
1201
|
+
|
1202
|
+
//! <b>Effects</b>: The function replaces the string controlled by *this
|
1203
|
+
//! with a string of length str.size() whose elements are a copy of the string
|
1204
|
+
//! controlled by str. Leaves str in a valid but unspecified state.
|
1205
|
+
//!
|
1206
|
+
//! <b>Throws</b>: Nothing
|
1207
|
+
//!
|
1208
|
+
//! <b>Returns</b>: *this
|
1209
|
+
basic_string& assign(BOOST_RV_REF(basic_string) ms) BOOST_CONTAINER_NOEXCEPT
|
1210
|
+
{ return this->swap_data(ms), *this; }
|
1211
|
+
|
1212
|
+
//! <b>Requires</b>: pos <= str.size()
|
1213
|
+
//!
|
1214
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to assign as
|
1215
|
+
//! the smaller of n and str.size() - pos and calls assign(str.data() + pos rlen).
|
1216
|
+
//!
|
1217
|
+
//! <b>Throws</b>: If memory allocation throws or out_of_range if pos > str.size().
|
1218
|
+
//!
|
1219
|
+
//! <b>Returns</b>: *this
|
1220
|
+
basic_string& assign(const basic_string& s, size_type pos, size_type n)
|
1221
|
+
{
|
1222
|
+
if (pos > s.size())
|
1223
|
+
throw_out_of_range("basic_string::assign out of range position");
|
1224
|
+
return this->assign(s.begin() + pos,
|
1225
|
+
s.begin() + pos + container_detail::min_value(n, s.size() - pos));
|
1226
|
+
}
|
1227
|
+
|
1228
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
1229
|
+
//!
|
1230
|
+
//! <b>Effects</b>: Replaces the string controlled by *this with a string of
|
1231
|
+
//! length n whose elements are a copy of those pointed to by s.
|
1232
|
+
//!
|
1233
|
+
//! <b>Throws</b>: If memory allocation throws or length_error if n > max_size().
|
1234
|
+
//!
|
1235
|
+
//! <b>Returns</b>: *this
|
1236
|
+
basic_string& assign(const CharT* s, size_type n)
|
1237
|
+
{ return this->assign(s, s + n); }
|
1238
|
+
|
1239
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
1240
|
+
//!
|
1241
|
+
//! <b>Effects</b>: Calls assign(s, traits::length(s)).
|
1242
|
+
//!
|
1243
|
+
//! <b>Returns</b>: *this
|
1244
|
+
basic_string& assign(const CharT* s)
|
1245
|
+
{ return this->assign(s, s + Traits::length(s)); }
|
1246
|
+
|
1247
|
+
//! <b>Effects</b>: Equivalent to assign(basic_string(n, c)).
|
1248
|
+
//!
|
1249
|
+
//! <b>Returns</b>: *this
|
1250
|
+
basic_string& assign(size_type n, CharT c)
|
1251
|
+
{ return this->assign(cvalue_iterator(c, n), cvalue_iterator()); }
|
1252
|
+
|
1253
|
+
//! <b>Effects</b>: Equivalent to assign(basic_string(first, last)).
|
1254
|
+
//!
|
1255
|
+
//! <b>Returns</b>: *this
|
1256
|
+
template <class InputIter>
|
1257
|
+
basic_string& assign(InputIter first, InputIter last
|
1258
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1259
|
+
, typename container_detail::enable_if_c
|
1260
|
+
< !container_detail::is_convertible<InputIter, size_type>::value
|
1261
|
+
>::type * = 0
|
1262
|
+
#endif
|
1263
|
+
)
|
1264
|
+
{
|
1265
|
+
size_type cur = 0;
|
1266
|
+
const pointer addr = this->priv_addr();
|
1267
|
+
CharT *ptr = container_detail::to_raw_pointer(addr);
|
1268
|
+
const size_type old_size = this->priv_size();
|
1269
|
+
while (first != last && cur != old_size) {
|
1270
|
+
Traits::assign(*ptr, *first);
|
1271
|
+
++first;
|
1272
|
+
++cur;
|
1273
|
+
++ptr;
|
1274
|
+
}
|
1275
|
+
if (first == last)
|
1276
|
+
this->erase(addr + cur, addr + old_size);
|
1277
|
+
else
|
1278
|
+
this->append(first, last);
|
1279
|
+
return *this;
|
1280
|
+
}
|
1281
|
+
|
1282
|
+
//! <b>Requires</b>: pos <= size().
|
1283
|
+
//!
|
1284
|
+
//! <b>Effects</b>: Calls insert(pos, str.data(), str.size()).
|
1285
|
+
//!
|
1286
|
+
//! <b>Throws</b>: If memory allocation throws or out_of_range if pos > size().
|
1287
|
+
//!
|
1288
|
+
//! <b>Returns</b>: *this
|
1289
|
+
basic_string& insert(size_type pos, const basic_string& s)
|
1290
|
+
{
|
1291
|
+
const size_type sz = this->size();
|
1292
|
+
if (pos > sz)
|
1293
|
+
throw_out_of_range("basic_string::insert out of range position");
|
1294
|
+
if (sz > this->max_size() - s.size())
|
1295
|
+
throw_length_error("basic_string::insert max_size() exceeded");
|
1296
|
+
this->insert(this->priv_addr() + pos, s.begin(), s.end());
|
1297
|
+
return *this;
|
1298
|
+
}
|
1299
|
+
|
1300
|
+
//! <b>Requires</b>: pos1 <= size() and pos2 <= str.size()
|
1301
|
+
//!
|
1302
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to insert as
|
1303
|
+
//! the smaller of n and str.size() - pos2 and calls insert(pos1, str.data() + pos2, rlen).
|
1304
|
+
//!
|
1305
|
+
//! <b>Throws</b>: If memory allocation throws or out_of_range if pos1 > size() or pos2 > str.size().
|
1306
|
+
//!
|
1307
|
+
//! <b>Returns</b>: *this
|
1308
|
+
basic_string& insert(size_type pos1, const basic_string& s, size_type pos2, size_type n)
|
1309
|
+
{
|
1310
|
+
const size_type sz = this->size();
|
1311
|
+
const size_type str_size = s.size();
|
1312
|
+
if (pos1 > sz || pos2 > str_size)
|
1313
|
+
throw_out_of_range("basic_string::insert out of range position");
|
1314
|
+
size_type len = container_detail::min_value(n, str_size - pos2);
|
1315
|
+
if (sz > this->max_size() - len)
|
1316
|
+
throw_length_error("basic_string::insert max_size() exceeded");
|
1317
|
+
const CharT *beg_ptr = container_detail::to_raw_pointer(s.begin()) + pos2;
|
1318
|
+
const CharT *end_ptr = beg_ptr + len;
|
1319
|
+
this->insert(this->priv_addr() + pos1, beg_ptr, end_ptr);
|
1320
|
+
return *this;
|
1321
|
+
}
|
1322
|
+
|
1323
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT and pos <= size().
|
1324
|
+
//!
|
1325
|
+
//! <b>Effects</b>: Replaces the string controlled by *this with a string of length size() + n
|
1326
|
+
//! whose first pos elements are a copy of the initial elements of the original string
|
1327
|
+
//! controlled by *this and whose next n elements are a copy of the elements in s and whose
|
1328
|
+
//! remaining elements are a copy of the remaining elements of the original string controlled by *this.
|
1329
|
+
//!
|
1330
|
+
//! <b>Throws</b>: If memory allocation throws, out_of_range if pos > size() or
|
1331
|
+
//! length_error if size() + n > max_size().
|
1332
|
+
//!
|
1333
|
+
//! <b>Returns</b>: *this
|
1334
|
+
basic_string& insert(size_type pos, const CharT* s, size_type n)
|
1335
|
+
{
|
1336
|
+
if (pos > this->size())
|
1337
|
+
throw_out_of_range("basic_string::insert out of range position");
|
1338
|
+
if (this->size() > this->max_size() - n)
|
1339
|
+
throw_length_error("basic_string::insert max_size() exceeded");
|
1340
|
+
this->insert(this->priv_addr() + pos, s, s + n);
|
1341
|
+
return *this;
|
1342
|
+
}
|
1343
|
+
|
1344
|
+
//! <b>Requires</b>: pos <= size() and s points to an array of at least traits::length(s) + 1 elements of CharT
|
1345
|
+
//!
|
1346
|
+
//! <b>Effects</b>: Calls insert(pos, s, traits::length(s)).
|
1347
|
+
//!
|
1348
|
+
//! <b>Throws</b>: If memory allocation throws, out_of_range if pos > size()
|
1349
|
+
//! length_error if size() > max_size() - Traits::length(s)
|
1350
|
+
//!
|
1351
|
+
//! <b>Returns</b>: *this
|
1352
|
+
basic_string& insert(size_type pos, const CharT* s)
|
1353
|
+
{
|
1354
|
+
if (pos > this->size())
|
1355
|
+
throw_out_of_range("basic_string::insert out of range position");
|
1356
|
+
size_type len = Traits::length(s);
|
1357
|
+
if (this->size() > this->max_size() - len)
|
1358
|
+
throw_length_error("basic_string::insert max_size() exceeded");
|
1359
|
+
this->insert(this->priv_addr() + pos, s, s + len);
|
1360
|
+
return *this;
|
1361
|
+
}
|
1362
|
+
|
1363
|
+
//! <b>Effects</b>: Equivalent to insert(pos, basic_string(n, c)).
|
1364
|
+
//!
|
1365
|
+
//! <b>Throws</b>: If memory allocation throws, out_of_range if pos > size()
|
1366
|
+
//! length_error if size() > max_size() - n
|
1367
|
+
//!
|
1368
|
+
//! <b>Returns</b>: *this
|
1369
|
+
basic_string& insert(size_type pos, size_type n, CharT c)
|
1370
|
+
{
|
1371
|
+
if (pos > this->size())
|
1372
|
+
throw_out_of_range("basic_string::insert out of range position");
|
1373
|
+
if (this->size() > this->max_size() - n)
|
1374
|
+
throw_length_error("basic_string::insert max_size() exceeded");
|
1375
|
+
this->insert(const_iterator(this->priv_addr() + pos), n, c);
|
1376
|
+
return *this;
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
//! <b>Requires</b>: p is a valid iterator on *this.
|
1380
|
+
//!
|
1381
|
+
//! <b>Effects</b>: inserts a copy of c before the character referred to by p.
|
1382
|
+
//!
|
1383
|
+
//! <b>Returns</b>: An iterator which refers to the copy of the inserted character.
|
1384
|
+
iterator insert(const_iterator p, CharT c)
|
1385
|
+
{
|
1386
|
+
size_type new_offset = p - this->priv_addr();
|
1387
|
+
this->insert(p, cvalue_iterator(c, 1), cvalue_iterator());
|
1388
|
+
return this->priv_addr() + new_offset;
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
|
1392
|
+
//! <b>Requires</b>: p is a valid iterator on *this.
|
1393
|
+
//!
|
1394
|
+
//! <b>Effects</b>: Inserts n copies of c before the character referred to by p.
|
1395
|
+
//!
|
1396
|
+
//! <b>Returns</b>: an iterator to the first inserted element or p if n is 0.
|
1397
|
+
iterator insert(const_iterator p, size_type n, CharT c)
|
1398
|
+
{ return this->insert(p, cvalue_iterator(c, n), cvalue_iterator()); }
|
1399
|
+
|
1400
|
+
//! <b>Requires</b>: p is a valid iterator on *this. [first,last) is a valid range.
|
1401
|
+
//!
|
1402
|
+
//! <b>Effects</b>: Equivalent to insert(p - begin(), basic_string(first, last)).
|
1403
|
+
//!
|
1404
|
+
//! <b>Returns</b>: an iterator to the first inserted element or p if first == last.
|
1405
|
+
template <class InputIter>
|
1406
|
+
iterator insert(const_iterator p, InputIter first, InputIter last
|
1407
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1408
|
+
, typename container_detail::enable_if_c
|
1409
|
+
< !container_detail::is_convertible<InputIter, size_type>::value
|
1410
|
+
&& container_detail::is_input_iterator<InputIter>::value
|
1411
|
+
>::type * = 0
|
1412
|
+
#endif
|
1413
|
+
)
|
1414
|
+
{
|
1415
|
+
const size_type n_pos = p - this->cbegin();
|
1416
|
+
for ( ; first != last; ++first, ++p) {
|
1417
|
+
p = this->insert(p, *first);
|
1418
|
+
}
|
1419
|
+
return this->begin() + n_pos;
|
1420
|
+
}
|
1421
|
+
|
1422
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1423
|
+
template <class ForwardIter>
|
1424
|
+
iterator insert(const_iterator p, ForwardIter first, ForwardIter last
|
1425
|
+
, typename container_detail::enable_if_c
|
1426
|
+
< !container_detail::is_convertible<ForwardIter, size_type>::value
|
1427
|
+
&& !container_detail::is_input_iterator<ForwardIter>::value
|
1428
|
+
>::type * = 0
|
1429
|
+
)
|
1430
|
+
{
|
1431
|
+
const size_type n_pos = p - this->cbegin();
|
1432
|
+
if (first != last) {
|
1433
|
+
const size_type n = std::distance(first, last);
|
1434
|
+
const size_type old_size = this->priv_size();
|
1435
|
+
const size_type remaining = this->capacity() - old_size;
|
1436
|
+
const pointer old_start = this->priv_addr();
|
1437
|
+
bool enough_capacity = false;
|
1438
|
+
std::pair<pointer, bool> allocation_ret;
|
1439
|
+
size_type new_cap = 0;
|
1440
|
+
|
1441
|
+
//Check if we have enough capacity
|
1442
|
+
if (remaining >= n){
|
1443
|
+
enough_capacity = true;
|
1444
|
+
}
|
1445
|
+
else {
|
1446
|
+
//Otherwise expand current buffer or allocate new storage
|
1447
|
+
new_cap = this->next_capacity(n);
|
1448
|
+
allocation_ret = this->allocation_command
|
1449
|
+
(allocate_new | expand_fwd | expand_bwd, old_size + n + 1,
|
1450
|
+
new_cap, new_cap, old_start);
|
1451
|
+
|
1452
|
+
//Check forward expansion
|
1453
|
+
if(old_start == allocation_ret.first){
|
1454
|
+
enough_capacity = true;
|
1455
|
+
this->priv_storage(new_cap);
|
1456
|
+
}
|
1457
|
+
}
|
1458
|
+
|
1459
|
+
//Reuse same buffer
|
1460
|
+
if(enough_capacity){
|
1461
|
+
const size_type elems_after = old_size - (p - old_start);
|
1462
|
+
const size_type old_length = old_size;
|
1463
|
+
if (elems_after >= n) {
|
1464
|
+
const pointer pointer_past_last = old_start + old_size + 1;
|
1465
|
+
priv_uninitialized_copy(old_start + (old_size - n + 1),
|
1466
|
+
pointer_past_last, pointer_past_last);
|
1467
|
+
|
1468
|
+
this->priv_size(old_size+n);
|
1469
|
+
Traits::move(const_cast<CharT*>(container_detail::to_raw_pointer(p + n)),
|
1470
|
+
container_detail::to_raw_pointer(p),
|
1471
|
+
(elems_after - n) + 1);
|
1472
|
+
this->priv_copy(first, last, const_cast<CharT*>(container_detail::to_raw_pointer(p)));
|
1473
|
+
}
|
1474
|
+
else {
|
1475
|
+
ForwardIter mid = first;
|
1476
|
+
std::advance(mid, elems_after + 1);
|
1477
|
+
|
1478
|
+
priv_uninitialized_copy(mid, last, old_start + old_size + 1);
|
1479
|
+
const size_type newer_size = old_size + (n - elems_after);
|
1480
|
+
this->priv_size(newer_size);
|
1481
|
+
priv_uninitialized_copy
|
1482
|
+
(p, const_iterator(old_start + old_length + 1),
|
1483
|
+
old_start + newer_size);
|
1484
|
+
this->priv_size(newer_size + elems_after);
|
1485
|
+
this->priv_copy(first, mid, const_cast<CharT*>(container_detail::to_raw_pointer(p)));
|
1486
|
+
}
|
1487
|
+
}
|
1488
|
+
else{
|
1489
|
+
pointer new_start = allocation_ret.first;
|
1490
|
+
if(!allocation_ret.second){
|
1491
|
+
//Copy data to new buffer
|
1492
|
+
size_type new_length = 0;
|
1493
|
+
//This can't throw, since characters are POD
|
1494
|
+
new_length += priv_uninitialized_copy
|
1495
|
+
(const_iterator(old_start), p, new_start);
|
1496
|
+
new_length += priv_uninitialized_copy
|
1497
|
+
(first, last, new_start + new_length);
|
1498
|
+
new_length += priv_uninitialized_copy
|
1499
|
+
(p, const_iterator(old_start + old_size),
|
1500
|
+
new_start + new_length);
|
1501
|
+
this->priv_construct_null(new_start + new_length);
|
1502
|
+
|
1503
|
+
this->deallocate_block();
|
1504
|
+
this->is_short(false);
|
1505
|
+
this->priv_long_addr(new_start);
|
1506
|
+
this->priv_long_size(new_length);
|
1507
|
+
this->priv_long_storage(new_cap);
|
1508
|
+
}
|
1509
|
+
else{
|
1510
|
+
//value_type is POD, so backwards expansion is much easier
|
1511
|
+
//than with vector<T>
|
1512
|
+
value_type * const oldbuf = container_detail::to_raw_pointer(old_start);
|
1513
|
+
value_type * const newbuf = container_detail::to_raw_pointer(new_start);
|
1514
|
+
const value_type *const pos = container_detail::to_raw_pointer(p);
|
1515
|
+
const size_type before = pos - oldbuf;
|
1516
|
+
|
1517
|
+
//First move old data
|
1518
|
+
Traits::move(newbuf, oldbuf, before);
|
1519
|
+
Traits::move(newbuf + before + n, pos, old_size - before);
|
1520
|
+
//Now initialize the new data
|
1521
|
+
priv_uninitialized_copy(first, last, new_start + before);
|
1522
|
+
this->priv_construct_null(new_start + (old_size + n));
|
1523
|
+
this->is_short(false);
|
1524
|
+
this->priv_long_addr(new_start);
|
1525
|
+
this->priv_long_size(old_size + n);
|
1526
|
+
this->priv_long_storage(new_cap);
|
1527
|
+
}
|
1528
|
+
}
|
1529
|
+
}
|
1530
|
+
return this->begin() + n_pos;
|
1531
|
+
}
|
1532
|
+
#endif
|
1533
|
+
|
1534
|
+
//! <b>Requires</b>: pos <= size()
|
1535
|
+
//!
|
1536
|
+
//! <b>Effects</b>: Determines the effective length xlen of the string to be removed as the smaller of n and size() - pos.
|
1537
|
+
//! The function then replaces the string controlled by *this with a string of length size() - xlen
|
1538
|
+
//! whose first pos elements are a copy of the initial elements of the original string controlled by *this,
|
1539
|
+
//! and whose remaining elements are a copy of the elements of the original string controlled by *this
|
1540
|
+
//! beginning at position pos + xlen.
|
1541
|
+
//!
|
1542
|
+
//! <b>Throws</b>: out_of_range if pos > size().
|
1543
|
+
//!
|
1544
|
+
//! <b>Returns</b>: *this
|
1545
|
+
basic_string& erase(size_type pos = 0, size_type n = npos)
|
1546
|
+
{
|
1547
|
+
if (pos > this->size())
|
1548
|
+
throw_out_of_range("basic_string::erase out of range position");
|
1549
|
+
const pointer addr = this->priv_addr();
|
1550
|
+
erase(addr + pos, addr + pos + container_detail::min_value(n, this->size() - pos));
|
1551
|
+
return *this;
|
1552
|
+
}
|
1553
|
+
|
1554
|
+
//! <b>Effects</b>: Removes the character referred to by p.
|
1555
|
+
//!
|
1556
|
+
//! <b>Throws</b>: Nothing
|
1557
|
+
//!
|
1558
|
+
//! <b>Returns</b>: An iterator which points to the element immediately following p prior to the element being
|
1559
|
+
//! erased. If no such element exists, end() is returned.
|
1560
|
+
iterator erase(const_iterator p) BOOST_CONTAINER_NOEXCEPT
|
1561
|
+
{
|
1562
|
+
// The move includes the terminating null.
|
1563
|
+
CharT * const ptr = const_cast<CharT*>(container_detail::to_raw_pointer(p));
|
1564
|
+
const size_type old_size = this->priv_size();
|
1565
|
+
Traits::move(ptr,
|
1566
|
+
container_detail::to_raw_pointer(p + 1),
|
1567
|
+
old_size - (p - this->priv_addr()));
|
1568
|
+
this->priv_size(old_size-1);
|
1569
|
+
return iterator(ptr);
|
1570
|
+
}
|
1571
|
+
|
1572
|
+
//! <b>Requires</b>: first and last are valid iterators on *this, defining a range [first,last).
|
1573
|
+
//!
|
1574
|
+
//! <b>Effects</b>: Removes the characters in the range [first,last).
|
1575
|
+
//!
|
1576
|
+
//! <b>Throws</b>: Nothing
|
1577
|
+
//!
|
1578
|
+
//! <b>Returns</b>: An iterator which points to the element pointed to by last prior to
|
1579
|
+
//! the other elements being erased. If no such element exists, end() is returned.
|
1580
|
+
iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
|
1581
|
+
{
|
1582
|
+
CharT * f = const_cast<CharT*>(container_detail::to_raw_pointer(first));
|
1583
|
+
if (first != last) { // The move includes the terminating null.
|
1584
|
+
const size_type num_erased = last - first;
|
1585
|
+
const size_type old_size = this->priv_size();
|
1586
|
+
Traits::move(f,
|
1587
|
+
container_detail::to_raw_pointer(last),
|
1588
|
+
(old_size + 1)-(last - this->priv_addr()));
|
1589
|
+
const size_type new_length = old_size - num_erased;
|
1590
|
+
this->priv_size(new_length);
|
1591
|
+
}
|
1592
|
+
return iterator(f);
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
//! <b>Requires</b>: !empty()
|
1596
|
+
//!
|
1597
|
+
//! <b>Throws</b>: Nothing
|
1598
|
+
//!
|
1599
|
+
//! <b>Effects</b>: Equivalent to erase(size() - 1, 1).
|
1600
|
+
void pop_back() BOOST_CONTAINER_NOEXCEPT
|
1601
|
+
{
|
1602
|
+
const size_type old_size = this->priv_size();
|
1603
|
+
Traits::assign(this->priv_addr()[old_size-1], CharT(0));
|
1604
|
+
this->priv_size(old_size-1);;
|
1605
|
+
}
|
1606
|
+
|
1607
|
+
//! <b>Effects</b>: Erases all the elements of the vector.
|
1608
|
+
//!
|
1609
|
+
//! <b>Throws</b>: Nothing.
|
1610
|
+
//!
|
1611
|
+
//! <b>Complexity</b>: Linear to the number of elements in the vector.
|
1612
|
+
void clear() BOOST_CONTAINER_NOEXCEPT
|
1613
|
+
{
|
1614
|
+
if (!this->empty()) {
|
1615
|
+
Traits::assign(*this->priv_addr(), CharT(0));
|
1616
|
+
this->priv_size(0);
|
1617
|
+
}
|
1618
|
+
}
|
1619
|
+
|
1620
|
+
//! <b>Requires</b>: pos1 <= size().
|
1621
|
+
//!
|
1622
|
+
//! <b>Effects</b>: Calls replace(pos1, n1, str.data(), str.size()).
|
1623
|
+
//!
|
1624
|
+
//! <b>Throws</b>: if memory allocation throws or out_of_range if pos1 > size().
|
1625
|
+
//!
|
1626
|
+
//! <b>Returns</b>: *this
|
1627
|
+
basic_string& replace(size_type pos1, size_type n1, const basic_string& str)
|
1628
|
+
{
|
1629
|
+
if (pos1 > this->size())
|
1630
|
+
throw_out_of_range("basic_string::replace out of range position");
|
1631
|
+
const size_type len = container_detail::min_value(n1, this->size() - pos1);
|
1632
|
+
if (this->size() - len >= this->max_size() - str.size())
|
1633
|
+
throw_length_error("basic_string::replace max_size() exceeded");
|
1634
|
+
const pointer addr = this->priv_addr();
|
1635
|
+
return this->replace( const_iterator(addr + pos1)
|
1636
|
+
, const_iterator(addr + pos1 + len)
|
1637
|
+
, str.begin(), str.end());
|
1638
|
+
}
|
1639
|
+
|
1640
|
+
//! <b>Requires</b>: pos1 <= size() and pos2 <= str.size().
|
1641
|
+
//!
|
1642
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to be
|
1643
|
+
//! inserted as the smaller of n2 and str.size() - pos2 and calls
|
1644
|
+
//! replace(pos1, n1, str.data() + pos2, rlen).
|
1645
|
+
//!
|
1646
|
+
//! <b>Throws</b>: if memory allocation throws, out_of_range if pos1 > size() or pos2 > str.size().
|
1647
|
+
//!
|
1648
|
+
//! <b>Returns</b>: *this
|
1649
|
+
basic_string& replace(size_type pos1, size_type n1,
|
1650
|
+
const basic_string& str, size_type pos2, size_type n2)
|
1651
|
+
{
|
1652
|
+
if (pos1 > this->size() || pos2 > str.size())
|
1653
|
+
throw_out_of_range("basic_string::replace out of range position");
|
1654
|
+
const size_type len1 = container_detail::min_value(n1, this->size() - pos1);
|
1655
|
+
const size_type len2 = container_detail::min_value(n2, str.size() - pos2);
|
1656
|
+
if (this->size() - len1 >= this->max_size() - len2)
|
1657
|
+
throw_length_error("basic_string::replace max_size() exceeded");
|
1658
|
+
const pointer addr = this->priv_addr();
|
1659
|
+
const pointer straddr = str.priv_addr();
|
1660
|
+
return this->replace(addr + pos1, addr + pos1 + len1,
|
1661
|
+
straddr + pos2, straddr + pos2 + len2);
|
1662
|
+
}
|
1663
|
+
|
1664
|
+
//! <b>Requires</b>: pos1 <= size() and s points to an array of at least n2 elements of CharT.
|
1665
|
+
//!
|
1666
|
+
//! <b>Effects</b>: Determines the effective length xlen of the string to be removed as the
|
1667
|
+
//! smaller of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error.
|
1668
|
+
//! Otherwise, the function replaces the string controlled by *this with a string of
|
1669
|
+
//! length size() - xlen + n2 whose first pos1 elements are a copy of the initial elements
|
1670
|
+
//! of the original string controlled by *this, whose next n2 elements are a copy of the
|
1671
|
+
//! initial n2 elements of s, and whose remaining elements are a copy of the elements of
|
1672
|
+
//! the original string controlled by *this beginning at position pos + xlen.
|
1673
|
+
//!
|
1674
|
+
//! <b>Throws</b>: if memory allocation throws, out_of_range if pos1 > size() or length_error
|
1675
|
+
//! if the length of the resulting string would exceed max_size()
|
1676
|
+
//!
|
1677
|
+
//! <b>Returns</b>: *this
|
1678
|
+
basic_string& replace(size_type pos1, size_type n1, const CharT* s, size_type n2)
|
1679
|
+
{
|
1680
|
+
if (pos1 > this->size())
|
1681
|
+
throw_out_of_range("basic_string::replace out of range position");
|
1682
|
+
const size_type len = container_detail::min_value(n1, this->size() - pos1);
|
1683
|
+
if (n2 > this->max_size() || size() - len >= this->max_size() - n2)
|
1684
|
+
throw_length_error("basic_string::replace max_size() exceeded");
|
1685
|
+
const pointer addr = this->priv_addr();
|
1686
|
+
return this->replace(addr + pos1, addr + pos1 + len, s, s + n2);
|
1687
|
+
}
|
1688
|
+
|
1689
|
+
//! <b>Requires</b>: pos1 <= size() and s points to an array of at least n2 elements of CharT.
|
1690
|
+
//!
|
1691
|
+
//! <b>Effects</b>: Determines the effective length xlen of the string to be removed as the smaller
|
1692
|
+
//! of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. Otherwise,
|
1693
|
+
//! the function replaces the string controlled by *this with a string of length size() - xlen + n2
|
1694
|
+
//! whose first pos1 elements are a copy of the initial elements of the original string controlled
|
1695
|
+
//! by *this, whose next n2 elements are a copy of the initial n2 elements of s, and whose
|
1696
|
+
//! remaining elements are a copy of the elements of the original string controlled by *this
|
1697
|
+
//! beginning at position pos + xlen.
|
1698
|
+
//!
|
1699
|
+
//! <b>Throws</b>: if memory allocation throws, out_of_range if pos1 > size() or length_error
|
1700
|
+
//! if the length of the resulting string would exceed max_size()
|
1701
|
+
//!
|
1702
|
+
//! <b>Returns</b>: *this
|
1703
|
+
basic_string& replace(size_type pos, size_type n1, const CharT* s)
|
1704
|
+
{
|
1705
|
+
if (pos > this->size())
|
1706
|
+
throw_out_of_range("basic_string::replace out of range position");
|
1707
|
+
const size_type len = container_detail::min_value(n1, this->size() - pos);
|
1708
|
+
const size_type n2 = Traits::length(s);
|
1709
|
+
if (n2 > this->max_size() || this->size() - len >= this->max_size() - n2)
|
1710
|
+
throw_length_error("basic_string::replace max_size() exceeded");
|
1711
|
+
const pointer addr = this->priv_addr();
|
1712
|
+
return this->replace(addr + pos, addr + pos + len,
|
1713
|
+
s, s + Traits::length(s));
|
1714
|
+
}
|
1715
|
+
|
1716
|
+
//! <b>Requires</b>: pos1 <= size().
|
1717
|
+
//!
|
1718
|
+
//! <b>Effects</b>: Equivalent to replace(pos1, n1, basic_string(n2, c)).
|
1719
|
+
//!
|
1720
|
+
//! <b>Throws</b>: if memory allocation throws, out_of_range if pos1 > size() or length_error
|
1721
|
+
//! if the length of the resulting string would exceed max_size()
|
1722
|
+
//!
|
1723
|
+
//! <b>Returns</b>: *this
|
1724
|
+
basic_string& replace(size_type pos1, size_type n1, size_type n2, CharT c)
|
1725
|
+
{
|
1726
|
+
if (pos1 > this->size())
|
1727
|
+
throw_out_of_range("basic_string::replace out of range position");
|
1728
|
+
const size_type len = container_detail::min_value(n1, this->size() - pos1);
|
1729
|
+
if (n2 > this->max_size() || this->size() - len >= this->max_size() - n2)
|
1730
|
+
throw_length_error("basic_string::replace max_size() exceeded");
|
1731
|
+
const pointer addr = this->priv_addr();
|
1732
|
+
return this->replace(addr + pos1, addr + pos1 + len, n2, c);
|
1733
|
+
}
|
1734
|
+
|
1735
|
+
//! <b>Requires</b>: [begin(),i1) and [i1,i2) are valid ranges.
|
1736
|
+
//!
|
1737
|
+
//! <b>Effects</b>: Calls replace(i1 - begin(), i2 - i1, str).
|
1738
|
+
//!
|
1739
|
+
//! <b>Throws</b>: if memory allocation throws
|
1740
|
+
//!
|
1741
|
+
//! <b>Returns</b>: *this
|
1742
|
+
basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str)
|
1743
|
+
{ return this->replace(i1, i2, str.begin(), str.end()); }
|
1744
|
+
|
1745
|
+
//! <b>Requires</b>: [begin(),i1) and [i1,i2) are valid ranges and
|
1746
|
+
//! s points to an array of at least n elements
|
1747
|
+
//!
|
1748
|
+
//! <b>Effects</b>: Calls replace(i1 - begin(), i2 - i1, s, n).
|
1749
|
+
//!
|
1750
|
+
//! <b>Throws</b>: if memory allocation throws
|
1751
|
+
//!
|
1752
|
+
//! <b>Returns</b>: *this
|
1753
|
+
basic_string& replace(const_iterator i1, const_iterator i2, const CharT* s, size_type n)
|
1754
|
+
{ return this->replace(i1, i2, s, s + n); }
|
1755
|
+
|
1756
|
+
//! <b>Requires</b>: [begin(),i1) and [i1,i2) are valid ranges and s points to an
|
1757
|
+
//! array of at least traits::length(s) + 1 elements of CharT.
|
1758
|
+
//!
|
1759
|
+
//! <b>Effects</b>: Calls replace(i1 - begin(), i2 - i1, s, traits::length(s)).
|
1760
|
+
//!
|
1761
|
+
//! <b>Throws</b>: if memory allocation throws
|
1762
|
+
//!
|
1763
|
+
//! <b>Returns</b>: *this
|
1764
|
+
basic_string& replace(const_iterator i1, const_iterator i2, const CharT* s)
|
1765
|
+
{ return this->replace(i1, i2, s, s + Traits::length(s)); }
|
1766
|
+
|
1767
|
+
//! <b>Requires</b>: [begin(),i1) and [i1,i2) are valid ranges.
|
1768
|
+
//!
|
1769
|
+
//! <b>Effects</b>: Calls replace(i1 - begin(), i2 - i1, basic_string(n, c)).
|
1770
|
+
//!
|
1771
|
+
//! <b>Throws</b>: if memory allocation throws
|
1772
|
+
//!
|
1773
|
+
//! <b>Returns</b>: *this
|
1774
|
+
basic_string& replace(const_iterator i1, const_iterator i2, size_type n, CharT c)
|
1775
|
+
{
|
1776
|
+
const size_type len = static_cast<size_type>(i2 - i1);
|
1777
|
+
if (len >= n) {
|
1778
|
+
Traits::assign(const_cast<CharT*>(container_detail::to_raw_pointer(i1)), n, c);
|
1779
|
+
erase(i1 + n, i2);
|
1780
|
+
}
|
1781
|
+
else {
|
1782
|
+
Traits::assign(const_cast<CharT*>(container_detail::to_raw_pointer(i1)), len, c);
|
1783
|
+
insert(i2, n - len, c);
|
1784
|
+
}
|
1785
|
+
return *this;
|
1786
|
+
}
|
1787
|
+
|
1788
|
+
//! <b>Requires</b>: [begin(),i1), [i1,i2) and [j1,j2) are valid ranges.
|
1789
|
+
//!
|
1790
|
+
//! <b>Effects</b>: Calls replace(i1 - begin(), i2 - i1, basic_string(j1, j2)).
|
1791
|
+
//!
|
1792
|
+
//! <b>Throws</b>: if memory allocation throws
|
1793
|
+
//!
|
1794
|
+
//! <b>Returns</b>: *this
|
1795
|
+
template <class InputIter>
|
1796
|
+
basic_string& replace(const_iterator i1, const_iterator i2, InputIter j1, InputIter j2
|
1797
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1798
|
+
, typename container_detail::enable_if_c
|
1799
|
+
< !container_detail::is_convertible<InputIter, size_type>::value
|
1800
|
+
&& container_detail::is_input_iterator<InputIter>::value
|
1801
|
+
>::type * = 0
|
1802
|
+
#endif
|
1803
|
+
)
|
1804
|
+
{
|
1805
|
+
for ( ; i1 != i2 && j1 != j2; ++i1, ++j1){
|
1806
|
+
Traits::assign(*const_cast<CharT*>(container_detail::to_raw_pointer(i1)), *j1);
|
1807
|
+
}
|
1808
|
+
|
1809
|
+
if (j1 == j2)
|
1810
|
+
this->erase(i1, i2);
|
1811
|
+
else
|
1812
|
+
this->insert(i2, j1, j2);
|
1813
|
+
return *this;
|
1814
|
+
}
|
1815
|
+
|
1816
|
+
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
1817
|
+
template <class ForwardIter>
|
1818
|
+
basic_string& replace(const_iterator i1, const_iterator i2, ForwardIter j1, ForwardIter j2
|
1819
|
+
, typename container_detail::enable_if_c
|
1820
|
+
< !container_detail::is_convertible<ForwardIter, size_type>::value
|
1821
|
+
&& !container_detail::is_input_iterator<ForwardIter>::value
|
1822
|
+
>::type * = 0
|
1823
|
+
)
|
1824
|
+
{
|
1825
|
+
difference_type n = std::distance(j1, j2);
|
1826
|
+
const difference_type len = i2 - i1;
|
1827
|
+
if (len >= n) {
|
1828
|
+
this->priv_copy(j1, j2, const_cast<CharT*>(container_detail::to_raw_pointer(i1)));
|
1829
|
+
this->erase(i1 + n, i2);
|
1830
|
+
}
|
1831
|
+
else {
|
1832
|
+
ForwardIter m = j1;
|
1833
|
+
std::advance(m, len);
|
1834
|
+
this->priv_copy(j1, m, const_cast<CharT*>(container_detail::to_raw_pointer(i1)));
|
1835
|
+
this->insert(i2, m, j2);
|
1836
|
+
}
|
1837
|
+
return *this;
|
1838
|
+
}
|
1839
|
+
#endif
|
1840
|
+
|
1841
|
+
//! <b>Requires</b>: pos <= size()
|
1842
|
+
//!
|
1843
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to copy as the
|
1844
|
+
//! smaller of n and size() - pos. s shall designate an array of at least rlen elements.
|
1845
|
+
//! The function then replaces the string designated by s with a string of length rlen
|
1846
|
+
//! whose elements are a copy of the string controlled by *this beginning at position pos.
|
1847
|
+
//! The function does not append a null object to the string designated by s.
|
1848
|
+
//!
|
1849
|
+
//! <b>Throws</b>: if memory allocation throws, out_of_range if pos > size().
|
1850
|
+
//!
|
1851
|
+
//! <b>Returns</b>: rlen
|
1852
|
+
size_type copy(CharT* s, size_type n, size_type pos = 0) const
|
1853
|
+
{
|
1854
|
+
if (pos > this->size())
|
1855
|
+
throw_out_of_range("basic_string::copy out of range position");
|
1856
|
+
const size_type len = container_detail::min_value(n, this->size() - pos);
|
1857
|
+
Traits::copy(s, container_detail::to_raw_pointer(this->priv_addr() + pos), len);
|
1858
|
+
return len;
|
1859
|
+
}
|
1860
|
+
|
1861
|
+
//! <b>Effects</b>: *this contains the same sequence of characters that was in s,
|
1862
|
+
//! s contains the same sequence of characters that was in *this.
|
1863
|
+
//!
|
1864
|
+
//! <b>Throws</b>: Nothing
|
1865
|
+
void swap(basic_string& x)
|
1866
|
+
{
|
1867
|
+
this->base_t::swap_data(x);
|
1868
|
+
container_detail::bool_<allocator_traits_type::propagate_on_container_swap::value> flag;
|
1869
|
+
container_detail::swap_alloc(this->alloc(), x.alloc(), flag);
|
1870
|
+
}
|
1871
|
+
|
1872
|
+
//////////////////////////////////////////////
|
1873
|
+
//
|
1874
|
+
// data access
|
1875
|
+
//
|
1876
|
+
//////////////////////////////////////////////
|
1877
|
+
|
1878
|
+
//! <b>Requires</b>: The program shall not alter any of the values stored in the character array.
|
1879
|
+
//!
|
1880
|
+
//! <b>Returns</b>: Allocator pointer p such that p + i == &operator[](i) for each i in [0,size()].
|
1881
|
+
//!
|
1882
|
+
//! <b>Complexity</b>: constant time.
|
1883
|
+
const CharT* c_str() const BOOST_CONTAINER_NOEXCEPT
|
1884
|
+
{ return container_detail::to_raw_pointer(this->priv_addr()); }
|
1885
|
+
|
1886
|
+
//! <b>Requires</b>: The program shall not alter any of the values stored in the character array.
|
1887
|
+
//!
|
1888
|
+
//! <b>Returns</b>: Allocator pointer p such that p + i == &operator[](i) for each i in [0,size()].
|
1889
|
+
//!
|
1890
|
+
//! <b>Complexity</b>: constant time.
|
1891
|
+
const CharT* data() const BOOST_CONTAINER_NOEXCEPT
|
1892
|
+
{ return container_detail::to_raw_pointer(this->priv_addr()); }
|
1893
|
+
|
1894
|
+
//////////////////////////////////////////////
|
1895
|
+
//
|
1896
|
+
// string operations
|
1897
|
+
//
|
1898
|
+
//////////////////////////////////////////////
|
1899
|
+
|
1900
|
+
//! <b>Effects</b>: Determines the lowest position xpos, if possible, such that both
|
1901
|
+
//! of the following conditions obtain: 19 pos <= xpos and xpos + str.size() <= size();
|
1902
|
+
//! 2) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str.
|
1903
|
+
//!
|
1904
|
+
//! <b>Throws</b>: Nothing
|
1905
|
+
//!
|
1906
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
1907
|
+
size_type find(const basic_string& s, size_type pos = 0) const
|
1908
|
+
{ return find(s.c_str(), pos, s.size()); }
|
1909
|
+
|
1910
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
1911
|
+
//!
|
1912
|
+
//! <b>Throws</b>: Nothing
|
1913
|
+
//!
|
1914
|
+
//! <b>Returns</b>: find(basic_string<CharT,traits,Allocator>(s,n),pos).
|
1915
|
+
size_type find(const CharT* s, size_type pos, size_type n) const
|
1916
|
+
{
|
1917
|
+
if (pos + n > this->size())
|
1918
|
+
return npos;
|
1919
|
+
else {
|
1920
|
+
const pointer addr = this->priv_addr();
|
1921
|
+
pointer finish = addr + this->priv_size();
|
1922
|
+
const const_iterator result =
|
1923
|
+
std::search(container_detail::to_raw_pointer(addr + pos),
|
1924
|
+
container_detail::to_raw_pointer(finish),
|
1925
|
+
s, s + n, Eq_traits<Traits>());
|
1926
|
+
return result != finish ? result - begin() : npos;
|
1927
|
+
}
|
1928
|
+
}
|
1929
|
+
|
1930
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
1931
|
+
//!
|
1932
|
+
//! <b>Throws</b>: Nothing
|
1933
|
+
//!
|
1934
|
+
//! <b>Returns</b>: find(basic_string(s), pos).
|
1935
|
+
size_type find(const CharT* s, size_type pos = 0) const
|
1936
|
+
{ return this->find(s, pos, Traits::length(s)); }
|
1937
|
+
|
1938
|
+
//! <b>Throws</b>: Nothing
|
1939
|
+
//!
|
1940
|
+
//! <b>Returns</b>: find(basic_string<CharT,traits,Allocator>(1,c), pos).
|
1941
|
+
size_type find(CharT c, size_type pos = 0) const
|
1942
|
+
{
|
1943
|
+
const size_type sz = this->size();
|
1944
|
+
if (pos >= sz)
|
1945
|
+
return npos;
|
1946
|
+
else {
|
1947
|
+
const pointer addr = this->priv_addr();
|
1948
|
+
pointer finish = addr + sz;
|
1949
|
+
const const_iterator result =
|
1950
|
+
std::find_if(addr + pos, finish,
|
1951
|
+
std::bind2nd(Eq_traits<Traits>(), c));
|
1952
|
+
return result != finish ? result - begin() : npos;
|
1953
|
+
}
|
1954
|
+
}
|
1955
|
+
|
1956
|
+
//! <b>Effects</b>: Determines the highest position xpos, if possible, such
|
1957
|
+
//! that both of the following conditions obtain:
|
1958
|
+
//! a) xpos <= pos and xpos + str.size() <= size();
|
1959
|
+
//! b) traits::eq(at(xpos+I), str.at(I)) for all elements I of the string controlled by str.
|
1960
|
+
//!
|
1961
|
+
//! <b>Throws</b>: Nothing
|
1962
|
+
//!
|
1963
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
1964
|
+
size_type rfind(const basic_string& str, size_type pos = npos) const
|
1965
|
+
{ return rfind(str.c_str(), pos, str.size()); }
|
1966
|
+
|
1967
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
1968
|
+
//!
|
1969
|
+
//! <b>Throws</b>: Nothing
|
1970
|
+
//!
|
1971
|
+
//! <b>Returns</b>: rfind(basic_string(s, n), pos).
|
1972
|
+
size_type rfind(const CharT* s, size_type pos, size_type n) const
|
1973
|
+
{
|
1974
|
+
const size_type len = this->size();
|
1975
|
+
|
1976
|
+
if (n > len)
|
1977
|
+
return npos;
|
1978
|
+
else if (n == 0)
|
1979
|
+
return container_detail::min_value(len, pos);
|
1980
|
+
else {
|
1981
|
+
const const_iterator last = begin() + container_detail::min_value(len - n, pos) + n;
|
1982
|
+
const const_iterator result = find_end(begin(), last,
|
1983
|
+
s, s + n,
|
1984
|
+
Eq_traits<Traits>());
|
1985
|
+
return result != last ? result - begin() : npos;
|
1986
|
+
}
|
1987
|
+
}
|
1988
|
+
|
1989
|
+
//! <b>Requires</b>: pos <= size() and s points to an array of at least
|
1990
|
+
//! traits::length(s) + 1 elements of CharT.
|
1991
|
+
//!
|
1992
|
+
//! <b>Throws</b>: Nothing
|
1993
|
+
//!
|
1994
|
+
//! <b>Returns</b>: rfind(basic_string(s), pos).
|
1995
|
+
size_type rfind(const CharT* s, size_type pos = npos) const
|
1996
|
+
{ return rfind(s, pos, Traits::length(s)); }
|
1997
|
+
|
1998
|
+
//! <b>Throws</b>: Nothing
|
1999
|
+
//!
|
2000
|
+
//! <b>Returns</b>: rfind(basic_string<CharT,traits,Allocator>(1,c),pos).
|
2001
|
+
size_type rfind(CharT c, size_type pos = npos) const
|
2002
|
+
{
|
2003
|
+
const size_type len = this->size();
|
2004
|
+
|
2005
|
+
if (len < 1)
|
2006
|
+
return npos;
|
2007
|
+
else {
|
2008
|
+
const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1;
|
2009
|
+
const_reverse_iterator rresult =
|
2010
|
+
std::find_if(const_reverse_iterator(last), rend(),
|
2011
|
+
std::bind2nd(Eq_traits<Traits>(), c));
|
2012
|
+
return rresult != rend() ? (rresult.base() - 1) - begin() : npos;
|
2013
|
+
}
|
2014
|
+
}
|
2015
|
+
|
2016
|
+
//! <b>Effects</b>: Determines the lowest position xpos, if possible, such that both of the
|
2017
|
+
//! following conditions obtain: a) pos <= xpos and xpos < size();
|
2018
|
+
//! b) traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str.
|
2019
|
+
//!
|
2020
|
+
//! <b>Throws</b>: Nothing
|
2021
|
+
//!
|
2022
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
2023
|
+
size_type find_first_of(const basic_string& s, size_type pos = 0) const
|
2024
|
+
{ return find_first_of(s.c_str(), pos, s.size()); }
|
2025
|
+
|
2026
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
2027
|
+
//!
|
2028
|
+
//! <b>Throws</b>: Nothing
|
2029
|
+
//!
|
2030
|
+
//! <b>Returns</b>: find_first_of(basic_string(s, n), pos).
|
2031
|
+
size_type find_first_of(const CharT* s, size_type pos, size_type n) const
|
2032
|
+
{
|
2033
|
+
const size_type sz = this->size();
|
2034
|
+
if (pos >= sz)
|
2035
|
+
return npos;
|
2036
|
+
else {
|
2037
|
+
const pointer addr = this->priv_addr();
|
2038
|
+
pointer finish = addr + sz;
|
2039
|
+
const_iterator result = std::find_first_of
|
2040
|
+
(addr + pos, finish, s, s + n, Eq_traits<Traits>());
|
2041
|
+
return result != finish ? result - this->begin() : npos;
|
2042
|
+
}
|
2043
|
+
}
|
2044
|
+
|
2045
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2046
|
+
//!
|
2047
|
+
//! <b>Throws</b>: Nothing
|
2048
|
+
//!
|
2049
|
+
//! <b>Returns</b>: find_first_of(basic_string(s), pos).
|
2050
|
+
size_type find_first_of(const CharT* s, size_type pos = 0) const
|
2051
|
+
{ return find_first_of(s, pos, Traits::length(s)); }
|
2052
|
+
|
2053
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2054
|
+
//!
|
2055
|
+
//! <b>Throws</b>: Nothing
|
2056
|
+
//!
|
2057
|
+
//! <b>Returns</b>: find_first_of(basic_string<CharT,traits,Allocator>(1,c), pos).
|
2058
|
+
size_type find_first_of(CharT c, size_type pos = 0) const
|
2059
|
+
{ return find(c, pos); }
|
2060
|
+
|
2061
|
+
//! <b>Effects</b>: Determines the highest position xpos, if possible, such that both of
|
2062
|
+
//! the following conditions obtain: a) xpos <= pos and xpos < size(); b)
|
2063
|
+
//! traits::eq(at(xpos), str.at(I)) for some element I of the string controlled by str.
|
2064
|
+
//!
|
2065
|
+
//! <b>Throws</b>: Nothing
|
2066
|
+
//!
|
2067
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
2068
|
+
size_type find_last_of(const basic_string& str, size_type pos = npos) const
|
2069
|
+
{ return find_last_of(str.c_str(), pos, str.size()); }
|
2070
|
+
|
2071
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
2072
|
+
//!
|
2073
|
+
//! <b>Throws</b>: Nothing
|
2074
|
+
//!
|
2075
|
+
//! <b>Returns</b>: find_last_of(basic_string(s, n), pos).
|
2076
|
+
size_type find_last_of(const CharT* s, size_type pos, size_type n) const
|
2077
|
+
{
|
2078
|
+
const size_type len = this->size();
|
2079
|
+
|
2080
|
+
if (len < 1)
|
2081
|
+
return npos;
|
2082
|
+
else {
|
2083
|
+
const pointer addr = this->priv_addr();
|
2084
|
+
const const_iterator last = addr + container_detail::min_value(len - 1, pos) + 1;
|
2085
|
+
const const_reverse_iterator rresult =
|
2086
|
+
std::find_first_of(const_reverse_iterator(last), rend(),
|
2087
|
+
s, s + n, Eq_traits<Traits>());
|
2088
|
+
return rresult != rend() ? (rresult.base() - 1) - addr : npos;
|
2089
|
+
}
|
2090
|
+
}
|
2091
|
+
|
2092
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2093
|
+
//!
|
2094
|
+
//! <b>Throws</b>: Nothing
|
2095
|
+
//!
|
2096
|
+
//! <b>Returns</b>: find_last_of(basic_string<CharT,traits,Allocator>(1,c),pos).
|
2097
|
+
size_type find_last_of(const CharT* s, size_type pos = npos) const
|
2098
|
+
{ return find_last_of(s, pos, Traits::length(s)); }
|
2099
|
+
|
2100
|
+
//! <b>Throws</b>: Nothing
|
2101
|
+
//!
|
2102
|
+
//! <b>Returns</b>: find_last_of(basic_string(s), pos).
|
2103
|
+
size_type find_last_of(CharT c, size_type pos = npos) const
|
2104
|
+
{ return rfind(c, pos); }
|
2105
|
+
|
2106
|
+
//! <b>Effects</b>: Determines the lowest position xpos, if possible, such that
|
2107
|
+
//! both of the following conditions obtain:
|
2108
|
+
//! a) pos <= xpos and xpos < size(); b) traits::eq(at(xpos), str.at(I)) for no
|
2109
|
+
//! element I of the string controlled by str.
|
2110
|
+
//!
|
2111
|
+
//! <b>Throws</b>: Nothing
|
2112
|
+
//!
|
2113
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
2114
|
+
size_type find_first_not_of(const basic_string& str, size_type pos = 0) const
|
2115
|
+
{ return find_first_not_of(str.c_str(), pos, str.size()); }
|
2116
|
+
|
2117
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2118
|
+
//!
|
2119
|
+
//! <b>Throws</b>: Nothing
|
2120
|
+
//!
|
2121
|
+
//! <b>Returns</b>: find_first_not_of(basic_string(s, n), pos).
|
2122
|
+
size_type find_first_not_of(const CharT* s, size_type pos, size_type n) const
|
2123
|
+
{
|
2124
|
+
if (pos > this->size())
|
2125
|
+
return npos;
|
2126
|
+
else {
|
2127
|
+
const pointer addr = this->priv_addr();
|
2128
|
+
const pointer finish = addr + this->priv_size();
|
2129
|
+
const const_iterator result = std::find_if
|
2130
|
+
(addr + pos, finish, Not_within_traits<Traits>(s, s + n));
|
2131
|
+
return result != finish ? result - addr : npos;
|
2132
|
+
}
|
2133
|
+
}
|
2134
|
+
|
2135
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2136
|
+
//!
|
2137
|
+
//! <b>Throws</b>: Nothing
|
2138
|
+
//!
|
2139
|
+
//! <b>Returns</b>: find_first_not_of(basic_string(s), pos).
|
2140
|
+
size_type find_first_not_of(const CharT* s, size_type pos = 0) const
|
2141
|
+
{ return find_first_not_of(s, pos, Traits::length(s)); }
|
2142
|
+
|
2143
|
+
//! <b>Throws</b>: Nothing
|
2144
|
+
//!
|
2145
|
+
//! <b>Returns</b>: find_first_not_of(basic_string(1, c), pos).
|
2146
|
+
size_type find_first_not_of(CharT c, size_type pos = 0) const
|
2147
|
+
{
|
2148
|
+
if (pos > this->size())
|
2149
|
+
return npos;
|
2150
|
+
else {
|
2151
|
+
const pointer addr = this->priv_addr();
|
2152
|
+
const pointer finish = addr + this->priv_size();
|
2153
|
+
const const_iterator result
|
2154
|
+
= std::find_if(addr + pos, finish,
|
2155
|
+
std::not1(std::bind2nd(Eq_traits<Traits>(), c)));
|
2156
|
+
return result != finish ? result - begin() : npos;
|
2157
|
+
}
|
2158
|
+
}
|
2159
|
+
|
2160
|
+
//! <b>Effects</b>: Determines the highest position xpos, if possible, such that
|
2161
|
+
//! both of the following conditions obtain: a) xpos <= pos and xpos < size();
|
2162
|
+
//! b) traits::eq(at(xpos), str.at(I)) for no element I of the string controlled by str.
|
2163
|
+
//!
|
2164
|
+
//! <b>Throws</b>: Nothing
|
2165
|
+
//!
|
2166
|
+
//! <b>Returns</b>: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
|
2167
|
+
size_type find_last_not_of(const basic_string& str, size_type pos = npos) const
|
2168
|
+
{ return find_last_not_of(str.c_str(), pos, str.size()); }
|
2169
|
+
|
2170
|
+
//! <b>Requires</b>: s points to an array of at least n elements of CharT.
|
2171
|
+
//!
|
2172
|
+
//! <b>Throws</b>: Nothing
|
2173
|
+
//!
|
2174
|
+
//! <b>Returns</b>: find_last_not_of(basic_string(s, n), pos).
|
2175
|
+
size_type find_last_not_of(const CharT* s, size_type pos, size_type n) const
|
2176
|
+
{
|
2177
|
+
const size_type len = this->size();
|
2178
|
+
|
2179
|
+
if (len < 1)
|
2180
|
+
return npos;
|
2181
|
+
else {
|
2182
|
+
const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1;
|
2183
|
+
const const_reverse_iterator rresult =
|
2184
|
+
std::find_if(const_reverse_iterator(last), rend(),
|
2185
|
+
Not_within_traits<Traits>(s, s + n));
|
2186
|
+
return rresult != rend() ? (rresult.base() - 1) - begin() : npos;
|
2187
|
+
}
|
2188
|
+
}
|
2189
|
+
|
2190
|
+
//! <b>Requires</b>: s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2191
|
+
//!
|
2192
|
+
//! <b>Throws</b>: Nothing
|
2193
|
+
//!
|
2194
|
+
//! <b>Returns</b>: find_last_not_of(basic_string(s), pos).
|
2195
|
+
size_type find_last_not_of(const CharT* s, size_type pos = npos) const
|
2196
|
+
{ return find_last_not_of(s, pos, Traits::length(s)); }
|
2197
|
+
|
2198
|
+
//! <b>Throws</b>: Nothing
|
2199
|
+
//!
|
2200
|
+
//! <b>Returns</b>: find_last_not_of(basic_string(1, c), pos).
|
2201
|
+
size_type find_last_not_of(CharT c, size_type pos = npos) const
|
2202
|
+
{
|
2203
|
+
const size_type len = this->size();
|
2204
|
+
|
2205
|
+
if (len < 1)
|
2206
|
+
return npos;
|
2207
|
+
else {
|
2208
|
+
const const_iterator last = begin() + container_detail::min_value(len - 1, pos) + 1;
|
2209
|
+
const const_reverse_iterator rresult =
|
2210
|
+
std::find_if(const_reverse_iterator(last), rend(),
|
2211
|
+
std::not1(std::bind2nd(Eq_traits<Traits>(), c)));
|
2212
|
+
return rresult != rend() ? (rresult.base() - 1) - begin() : npos;
|
2213
|
+
}
|
2214
|
+
}
|
2215
|
+
|
2216
|
+
//! <b>Requires</b>: Requires: pos <= size()
|
2217
|
+
//!
|
2218
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to copy as
|
2219
|
+
//! the smaller of n and size() - pos.
|
2220
|
+
//!
|
2221
|
+
//! <b>Throws</b>: If memory allocation throws or out_of_range if pos > size().
|
2222
|
+
//!
|
2223
|
+
//! <b>Returns</b>: basic_string<CharT,traits,Allocator>(data()+pos,rlen).
|
2224
|
+
basic_string substr(size_type pos = 0, size_type n = npos) const
|
2225
|
+
{
|
2226
|
+
if (pos > this->size())
|
2227
|
+
throw_out_of_range("basic_string::substr out of range position");
|
2228
|
+
const pointer addr = this->priv_addr();
|
2229
|
+
return basic_string(addr + pos,
|
2230
|
+
addr + pos + container_detail::min_value(n, size() - pos), this->alloc());
|
2231
|
+
}
|
2232
|
+
|
2233
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to copy as
|
2234
|
+
//! the smaller of size() and str.size(). The function then compares the two strings by
|
2235
|
+
//! calling traits::compare(data(), str.data(), rlen).
|
2236
|
+
//!
|
2237
|
+
//! <b>Throws</b>: Nothing
|
2238
|
+
//!
|
2239
|
+
//! <b>Returns</b>: The nonzero result if the result of the comparison is nonzero.
|
2240
|
+
//! Otherwise, returns a value < 0 if size() < str.size(), a 0 value if size() == str.size(),
|
2241
|
+
//! and value > 0 if size() > str.size()
|
2242
|
+
int compare(const basic_string& str) const
|
2243
|
+
{
|
2244
|
+
const pointer addr = this->priv_addr();
|
2245
|
+
const pointer str_addr = str.priv_addr();
|
2246
|
+
return s_compare(addr, addr + this->priv_size(), str_addr, str_addr + str.priv_size());
|
2247
|
+
}
|
2248
|
+
|
2249
|
+
//! <b>Requires</b>: pos1 <= size()
|
2250
|
+
//!
|
2251
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to copy as
|
2252
|
+
//! the smaller of
|
2253
|
+
//!
|
2254
|
+
//! <b>Throws</b>: out_of_range if pos1 > size()
|
2255
|
+
//!
|
2256
|
+
//! <b>Returns</b>:basic_string(*this,pos1,n1).compare(str).
|
2257
|
+
int compare(size_type pos1, size_type n1, const basic_string& str) const
|
2258
|
+
{
|
2259
|
+
if (pos1 > this->size())
|
2260
|
+
throw_out_of_range("basic_string::compare out of range position");
|
2261
|
+
const pointer addr = this->priv_addr();
|
2262
|
+
const pointer str_addr = str.priv_addr();
|
2263
|
+
return s_compare(addr + pos1,
|
2264
|
+
addr + pos1 + container_detail::min_value(n1, this->size() - pos1),
|
2265
|
+
str_addr, str_addr + str.priv_size());
|
2266
|
+
}
|
2267
|
+
|
2268
|
+
//! <b>Requires</b>: pos1 <= size() and pos2 <= str.size()
|
2269
|
+
//!
|
2270
|
+
//! <b>Effects</b>: Determines the effective length rlen of the string to copy as
|
2271
|
+
//! the smaller of
|
2272
|
+
//!
|
2273
|
+
//! <b>Throws</b>: out_of_range if pos1 > size() or pos2 > str.size()
|
2274
|
+
//!
|
2275
|
+
//! <b>Returns</b>: basic_string(*this, pos1, n1).compare(basic_string(str, pos2, n2)).
|
2276
|
+
int compare(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2) const
|
2277
|
+
{
|
2278
|
+
if (pos1 > this->size() || pos2 > str.size())
|
2279
|
+
throw_out_of_range("basic_string::compare out of range position");
|
2280
|
+
const pointer addr = this->priv_addr();
|
2281
|
+
const pointer str_addr = str.priv_addr();
|
2282
|
+
return s_compare(addr + pos1,
|
2283
|
+
addr + pos1 + container_detail::min_value(n1, this->size() - pos1),
|
2284
|
+
str_addr + pos2,
|
2285
|
+
str_addr + pos2 + container_detail::min_value(n2, str.size() - pos2));
|
2286
|
+
}
|
2287
|
+
|
2288
|
+
//! <b>Throws</b>: Nothing
|
2289
|
+
//!
|
2290
|
+
//! <b>Returns</b>: compare(basic_string(s)).
|
2291
|
+
int compare(const CharT* s) const
|
2292
|
+
{
|
2293
|
+
const pointer addr = this->priv_addr();
|
2294
|
+
return s_compare(addr, addr + this->priv_size(), s, s + Traits::length(s));
|
2295
|
+
}
|
2296
|
+
|
2297
|
+
|
2298
|
+
//! <b>Requires</b>: pos1 > size() and s points to an array of at least n2 elements of CharT.
|
2299
|
+
//!
|
2300
|
+
//! <b>Throws</b>: out_of_range if pos1 > size()
|
2301
|
+
//!
|
2302
|
+
//! <b>Returns</b>: basic_string(*this, pos, n1).compare(basic_string(s, n2)).
|
2303
|
+
int compare(size_type pos1, size_type n1, const CharT* s, size_type n2) const
|
2304
|
+
{
|
2305
|
+
if (pos1 > this->size())
|
2306
|
+
throw_out_of_range("basic_string::compare out of range position");
|
2307
|
+
const pointer addr = this->priv_addr();
|
2308
|
+
return s_compare( addr + pos1,
|
2309
|
+
addr + pos1 + container_detail::min_value(n1, this->size() - pos1),
|
2310
|
+
s, s + n2);
|
2311
|
+
}
|
2312
|
+
|
2313
|
+
//! <b>Requires</b>: pos1 > size() and s points to an array of at least traits::length(s) + 1 elements of CharT.
|
2314
|
+
//!
|
2315
|
+
//! <b>Throws</b>: out_of_range if pos1 > size()
|
2316
|
+
//!
|
2317
|
+
//! <b>Returns</b>: basic_string(*this, pos, n1).compare(basic_string(s, n2)).
|
2318
|
+
int compare(size_type pos1, size_type n1, const CharT* s) const
|
2319
|
+
{ return this->compare(pos1, n1, s, Traits::length(s)); }
|
2320
|
+
|
2321
|
+
/// @cond
|
2322
|
+
private:
|
2323
|
+
static int s_compare(const_pointer f1, const_pointer l1,
|
2324
|
+
const_pointer f2, const_pointer l2)
|
2325
|
+
{
|
2326
|
+
const difference_type n1 = l1 - f1;
|
2327
|
+
const difference_type n2 = l2 - f2;
|
2328
|
+
const int cmp = Traits::compare(container_detail::to_raw_pointer(f1),
|
2329
|
+
container_detail::to_raw_pointer(f2),
|
2330
|
+
container_detail::min_value(n1, n2));
|
2331
|
+
return cmp != 0 ? cmp : (n1 < n2 ? -1 : (n1 > n2 ? 1 : 0));
|
2332
|
+
}
|
2333
|
+
|
2334
|
+
template<class AllocVersion>
|
2335
|
+
void priv_shrink_to_fit_dynamic_buffer
|
2336
|
+
( AllocVersion
|
2337
|
+
, typename container_detail::enable_if<container_detail::is_same<AllocVersion, allocator_v1> >::type* = 0)
|
2338
|
+
{
|
2339
|
+
//Allocate a new buffer.
|
2340
|
+
size_type real_cap = 0;
|
2341
|
+
const pointer long_addr = this->priv_long_addr();
|
2342
|
+
const size_type long_size = this->priv_long_size();
|
2343
|
+
const size_type long_storage = this->priv_long_storage();
|
2344
|
+
//We can make this nothrow as chars are always NoThrowCopyables
|
2345
|
+
BOOST_TRY{
|
2346
|
+
const std::pair<pointer, bool> ret = this->allocation_command
|
2347
|
+
(allocate_new, long_size+1, long_size+1, real_cap, long_addr);
|
2348
|
+
//Copy and update
|
2349
|
+
Traits::copy( container_detail::to_raw_pointer(ret.first)
|
2350
|
+
, container_detail::to_raw_pointer(this->priv_long_addr())
|
2351
|
+
, long_size+1);
|
2352
|
+
this->priv_long_addr(ret.first);
|
2353
|
+
this->priv_storage(real_cap);
|
2354
|
+
//And release old buffer
|
2355
|
+
this->alloc().deallocate(long_addr, long_storage);
|
2356
|
+
}
|
2357
|
+
BOOST_CATCH(...){
|
2358
|
+
return;
|
2359
|
+
}
|
2360
|
+
BOOST_CATCH_END
|
2361
|
+
}
|
2362
|
+
|
2363
|
+
template<class AllocVersion>
|
2364
|
+
void priv_shrink_to_fit_dynamic_buffer
|
2365
|
+
( AllocVersion
|
2366
|
+
, typename container_detail::enable_if<container_detail::is_same<AllocVersion, allocator_v2> >::type* = 0)
|
2367
|
+
{
|
2368
|
+
size_type received_size;
|
2369
|
+
if(this->alloc().allocation_command
|
2370
|
+
( shrink_in_place | nothrow_allocation
|
2371
|
+
, this->priv_long_storage(), this->priv_long_size()+1
|
2372
|
+
, received_size, this->priv_long_addr()).first){
|
2373
|
+
this->priv_storage(received_size);
|
2374
|
+
}
|
2375
|
+
}
|
2376
|
+
|
2377
|
+
void priv_construct_null(pointer p)
|
2378
|
+
{ this->construct(p, CharT(0)); }
|
2379
|
+
|
2380
|
+
// Helper functions used by constructors. It is a severe error for
|
2381
|
+
// any of them to be called anywhere except from within constructors.
|
2382
|
+
void priv_terminate_string()
|
2383
|
+
{ this->priv_construct_null(this->priv_end_addr()); }
|
2384
|
+
|
2385
|
+
template<class FwdIt, class Count> inline
|
2386
|
+
void priv_uninitialized_fill_n(FwdIt first, Count count, const CharT val)
|
2387
|
+
{
|
2388
|
+
//Save initial position
|
2389
|
+
FwdIt init = first;
|
2390
|
+
|
2391
|
+
BOOST_TRY{
|
2392
|
+
//Construct objects
|
2393
|
+
for (; count--; ++first){
|
2394
|
+
this->construct(first, val);
|
2395
|
+
}
|
2396
|
+
}
|
2397
|
+
BOOST_CATCH(...){
|
2398
|
+
//Call destructors
|
2399
|
+
for (; init != first; ++init){
|
2400
|
+
this->destroy(init);
|
2401
|
+
}
|
2402
|
+
BOOST_RETHROW
|
2403
|
+
}
|
2404
|
+
BOOST_CATCH_END
|
2405
|
+
}
|
2406
|
+
|
2407
|
+
template<class InpIt, class FwdIt> inline
|
2408
|
+
size_type priv_uninitialized_copy(InpIt first, InpIt last, FwdIt dest)
|
2409
|
+
{
|
2410
|
+
//Save initial destination position
|
2411
|
+
FwdIt dest_init = dest;
|
2412
|
+
size_type constructed = 0;
|
2413
|
+
|
2414
|
+
BOOST_TRY{
|
2415
|
+
//Try to build objects
|
2416
|
+
for (; first != last; ++dest, ++first, ++constructed){
|
2417
|
+
this->construct(dest, *first);
|
2418
|
+
}
|
2419
|
+
}
|
2420
|
+
BOOST_CATCH(...){
|
2421
|
+
//Call destructors
|
2422
|
+
for (; constructed--; ++dest_init){
|
2423
|
+
this->destroy(dest_init);
|
2424
|
+
}
|
2425
|
+
BOOST_RETHROW
|
2426
|
+
}
|
2427
|
+
BOOST_CATCH_END
|
2428
|
+
return (constructed);
|
2429
|
+
}
|
2430
|
+
|
2431
|
+
template <class InputIterator, class OutIterator>
|
2432
|
+
void priv_copy(InputIterator first, InputIterator last, OutIterator result)
|
2433
|
+
{
|
2434
|
+
for ( ; first != last; ++first, ++result)
|
2435
|
+
Traits::assign(*result, *first);
|
2436
|
+
}
|
2437
|
+
|
2438
|
+
void priv_copy(const CharT* first, const CharT* last, CharT* result)
|
2439
|
+
{ Traits::copy(result, first, last - first); }
|
2440
|
+
|
2441
|
+
template <class Integer>
|
2442
|
+
basic_string& priv_replace_dispatch(const_iterator first, const_iterator last,
|
2443
|
+
Integer n, Integer x,
|
2444
|
+
container_detail::true_)
|
2445
|
+
{ return this->replace(first, last, (size_type) n, (CharT) x); }
|
2446
|
+
|
2447
|
+
template <class InputIter>
|
2448
|
+
basic_string& priv_replace_dispatch(const_iterator first, const_iterator last,
|
2449
|
+
InputIter f, InputIter l,
|
2450
|
+
container_detail::false_)
|
2451
|
+
{
|
2452
|
+
typedef typename std::iterator_traits<InputIter>::iterator_category Category;
|
2453
|
+
return this->priv_replace(first, last, f, l, Category());
|
2454
|
+
}
|
2455
|
+
|
2456
|
+
/// @endcond
|
2457
|
+
};
|
2458
|
+
|
2459
|
+
//!Typedef for a basic_string of
|
2460
|
+
//!narrow characters
|
2461
|
+
typedef basic_string
|
2462
|
+
<char
|
2463
|
+
,std::char_traits<char>
|
2464
|
+
,std::allocator<char> >
|
2465
|
+
string;
|
2466
|
+
|
2467
|
+
//!Typedef for a basic_string of
|
2468
|
+
//!narrow characters
|
2469
|
+
typedef basic_string
|
2470
|
+
<wchar_t
|
2471
|
+
,std::char_traits<wchar_t>
|
2472
|
+
,std::allocator<wchar_t> >
|
2473
|
+
wstring;
|
2474
|
+
|
2475
|
+
// ------------------------------------------------------------
|
2476
|
+
// Non-member functions.
|
2477
|
+
|
2478
|
+
// Operator+
|
2479
|
+
|
2480
|
+
template <class CharT, class Traits, class Allocator> inline
|
2481
|
+
basic_string<CharT,Traits,Allocator>
|
2482
|
+
operator+(const basic_string<CharT,Traits,Allocator>& x
|
2483
|
+
,const basic_string<CharT,Traits,Allocator>& y)
|
2484
|
+
{
|
2485
|
+
typedef basic_string<CharT,Traits,Allocator> str_t;
|
2486
|
+
typedef typename str_t::reserve_t reserve_t;
|
2487
|
+
reserve_t reserve;
|
2488
|
+
str_t result(reserve, x.size() + y.size(), x.get_stored_allocator());
|
2489
|
+
result.append(x);
|
2490
|
+
result.append(y);
|
2491
|
+
return result;
|
2492
|
+
}
|
2493
|
+
|
2494
|
+
template <class CharT, class Traits, class Allocator> inline
|
2495
|
+
basic_string<CharT, Traits, Allocator> operator+
|
2496
|
+
( BOOST_RV_REF_BEG basic_string<CharT, Traits, Allocator> BOOST_RV_REF_END mx
|
2497
|
+
, BOOST_RV_REF_BEG basic_string<CharT, Traits, Allocator> BOOST_RV_REF_END my)
|
2498
|
+
{
|
2499
|
+
mx += my;
|
2500
|
+
return boost::move(mx);
|
2501
|
+
}
|
2502
|
+
|
2503
|
+
template <class CharT, class Traits, class Allocator> inline
|
2504
|
+
basic_string<CharT, Traits, Allocator> operator+
|
2505
|
+
( BOOST_RV_REF_BEG basic_string<CharT, Traits, Allocator> BOOST_RV_REF_END mx
|
2506
|
+
, const basic_string<CharT,Traits,Allocator>& y)
|
2507
|
+
{
|
2508
|
+
mx += y;
|
2509
|
+
return boost::move(mx);
|
2510
|
+
}
|
2511
|
+
|
2512
|
+
template <class CharT, class Traits, class Allocator> inline
|
2513
|
+
basic_string<CharT, Traits, Allocator> operator+
|
2514
|
+
(const basic_string<CharT,Traits,Allocator>& x
|
2515
|
+
,BOOST_RV_REF_BEG basic_string<CharT, Traits, Allocator> BOOST_RV_REF_END my)
|
2516
|
+
{
|
2517
|
+
my.insert(my.begin(), x.begin(), x.end());
|
2518
|
+
return boost::move(my);
|
2519
|
+
}
|
2520
|
+
|
2521
|
+
template <class CharT, class Traits, class Allocator> inline
|
2522
|
+
basic_string<CharT, Traits, Allocator> operator+
|
2523
|
+
(const CharT* s, basic_string<CharT, Traits, Allocator> y)
|
2524
|
+
{
|
2525
|
+
y.insert(y.begin(), s, s + Traits::length(s));
|
2526
|
+
return y;
|
2527
|
+
}
|
2528
|
+
|
2529
|
+
template <class CharT, class Traits, class Allocator> inline
|
2530
|
+
basic_string<CharT,Traits,Allocator> operator+
|
2531
|
+
(basic_string<CharT,Traits,Allocator> x, const CharT* s)
|
2532
|
+
{
|
2533
|
+
x += s;
|
2534
|
+
return x;
|
2535
|
+
}
|
2536
|
+
|
2537
|
+
template <class CharT, class Traits, class Allocator> inline
|
2538
|
+
basic_string<CharT,Traits,Allocator> operator+
|
2539
|
+
(CharT c, basic_string<CharT,Traits,Allocator> y)
|
2540
|
+
{
|
2541
|
+
y.insert(y.begin(), c);
|
2542
|
+
return y;
|
2543
|
+
}
|
2544
|
+
|
2545
|
+
template <class CharT, class Traits, class Allocator> inline
|
2546
|
+
basic_string<CharT,Traits,Allocator> operator+
|
2547
|
+
(basic_string<CharT,Traits,Allocator> x, const CharT c)
|
2548
|
+
{
|
2549
|
+
x += c;
|
2550
|
+
return x;
|
2551
|
+
}
|
2552
|
+
|
2553
|
+
// Operator== and operator!=
|
2554
|
+
|
2555
|
+
template <class CharT, class Traits, class Allocator>
|
2556
|
+
inline bool
|
2557
|
+
operator==(const basic_string<CharT,Traits,Allocator>& x,
|
2558
|
+
const basic_string<CharT,Traits,Allocator>& y)
|
2559
|
+
{
|
2560
|
+
return x.size() == y.size() &&
|
2561
|
+
Traits::compare(x.data(), y.data(), x.size()) == 0;
|
2562
|
+
}
|
2563
|
+
|
2564
|
+
template <class CharT, class Traits, class Allocator>
|
2565
|
+
inline bool
|
2566
|
+
operator==(const CharT* s, const basic_string<CharT,Traits,Allocator>& y)
|
2567
|
+
{
|
2568
|
+
typename basic_string<CharT,Traits,Allocator>::size_type n = Traits::length(s);
|
2569
|
+
return n == y.size() && Traits::compare(s, y.data(), n) == 0;
|
2570
|
+
}
|
2571
|
+
|
2572
|
+
template <class CharT, class Traits, class Allocator>
|
2573
|
+
inline bool
|
2574
|
+
operator==(const basic_string<CharT,Traits,Allocator>& x, const CharT* s)
|
2575
|
+
{
|
2576
|
+
typename basic_string<CharT,Traits,Allocator>::size_type n = Traits::length(s);
|
2577
|
+
return x.size() == n && Traits::compare(x.data(), s, n) == 0;
|
2578
|
+
}
|
2579
|
+
|
2580
|
+
template <class CharT, class Traits, class Allocator>
|
2581
|
+
inline bool
|
2582
|
+
operator!=(const basic_string<CharT,Traits,Allocator>& x,
|
2583
|
+
const basic_string<CharT,Traits,Allocator>& y)
|
2584
|
+
{ return !(x == y); }
|
2585
|
+
|
2586
|
+
template <class CharT, class Traits, class Allocator>
|
2587
|
+
inline bool
|
2588
|
+
operator!=(const CharT* s, const basic_string<CharT,Traits,Allocator>& y)
|
2589
|
+
{ return !(s == y); }
|
2590
|
+
|
2591
|
+
template <class CharT, class Traits, class Allocator>
|
2592
|
+
inline bool
|
2593
|
+
operator!=(const basic_string<CharT,Traits,Allocator>& x, const CharT* s)
|
2594
|
+
{ return !(x == s); }
|
2595
|
+
|
2596
|
+
|
2597
|
+
// Operator< (and also >, <=, and >=).
|
2598
|
+
|
2599
|
+
template <class CharT, class Traits, class Allocator>
|
2600
|
+
inline bool
|
2601
|
+
operator<(const basic_string<CharT,Traits,Allocator>& x, const basic_string<CharT,Traits,Allocator>& y)
|
2602
|
+
{
|
2603
|
+
return x.compare(y) < 0;
|
2604
|
+
// return basic_string<CharT,Traits,Allocator>
|
2605
|
+
// ::s_compare(x.begin(), x.end(), y.begin(), y.end()) < 0;
|
2606
|
+
}
|
2607
|
+
|
2608
|
+
template <class CharT, class Traits, class Allocator>
|
2609
|
+
inline bool
|
2610
|
+
operator<(const CharT* s, const basic_string<CharT,Traits,Allocator>& y)
|
2611
|
+
{
|
2612
|
+
return y.compare(s) > 0;
|
2613
|
+
// basic_string<CharT,Traits,Allocator>::size_type n = Traits::length(s);
|
2614
|
+
// return basic_string<CharT,Traits,Allocator>
|
2615
|
+
// ::s_compare(s, s + n, y.begin(), y.end()) < 0;
|
2616
|
+
}
|
2617
|
+
|
2618
|
+
template <class CharT, class Traits, class Allocator>
|
2619
|
+
inline bool
|
2620
|
+
operator<(const basic_string<CharT,Traits,Allocator>& x,
|
2621
|
+
const CharT* s)
|
2622
|
+
{
|
2623
|
+
return x.compare(s) < 0;
|
2624
|
+
// basic_string<CharT,Traits,Allocator>::size_type n = Traits::length(s);
|
2625
|
+
// return basic_string<CharT,Traits,Allocator>
|
2626
|
+
// ::s_compare(x.begin(), x.end(), s, s + n) < 0;
|
2627
|
+
}
|
2628
|
+
|
2629
|
+
template <class CharT, class Traits, class Allocator>
|
2630
|
+
inline bool
|
2631
|
+
operator>(const basic_string<CharT,Traits,Allocator>& x,
|
2632
|
+
const basic_string<CharT,Traits,Allocator>& y) {
|
2633
|
+
return y < x;
|
2634
|
+
}
|
2635
|
+
|
2636
|
+
template <class CharT, class Traits, class Allocator>
|
2637
|
+
inline bool
|
2638
|
+
operator>(const CharT* s, const basic_string<CharT,Traits,Allocator>& y) {
|
2639
|
+
return y < s;
|
2640
|
+
}
|
2641
|
+
|
2642
|
+
template <class CharT, class Traits, class Allocator>
|
2643
|
+
inline bool
|
2644
|
+
operator>(const basic_string<CharT,Traits,Allocator>& x, const CharT* s)
|
2645
|
+
{
|
2646
|
+
return s < x;
|
2647
|
+
}
|
2648
|
+
|
2649
|
+
template <class CharT, class Traits, class Allocator>
|
2650
|
+
inline bool
|
2651
|
+
operator<=(const basic_string<CharT,Traits,Allocator>& x,
|
2652
|
+
const basic_string<CharT,Traits,Allocator>& y)
|
2653
|
+
{
|
2654
|
+
return !(y < x);
|
2655
|
+
}
|
2656
|
+
|
2657
|
+
template <class CharT, class Traits, class Allocator>
|
2658
|
+
inline bool
|
2659
|
+
operator<=(const CharT* s, const basic_string<CharT,Traits,Allocator>& y)
|
2660
|
+
{ return !(y < s); }
|
2661
|
+
|
2662
|
+
template <class CharT, class Traits, class Allocator>
|
2663
|
+
inline bool
|
2664
|
+
operator<=(const basic_string<CharT,Traits,Allocator>& x, const CharT* s)
|
2665
|
+
{ return !(s < x); }
|
2666
|
+
|
2667
|
+
template <class CharT, class Traits, class Allocator>
|
2668
|
+
inline bool
|
2669
|
+
operator>=(const basic_string<CharT,Traits,Allocator>& x,
|
2670
|
+
const basic_string<CharT,Traits,Allocator>& y)
|
2671
|
+
{ return !(x < y); }
|
2672
|
+
|
2673
|
+
template <class CharT, class Traits, class Allocator>
|
2674
|
+
inline bool
|
2675
|
+
operator>=(const CharT* s, const basic_string<CharT,Traits,Allocator>& y)
|
2676
|
+
{ return !(s < y); }
|
2677
|
+
|
2678
|
+
template <class CharT, class Traits, class Allocator>
|
2679
|
+
inline bool
|
2680
|
+
operator>=(const basic_string<CharT,Traits,Allocator>& x, const CharT* s)
|
2681
|
+
{ return !(x < s); }
|
2682
|
+
|
2683
|
+
// Swap.
|
2684
|
+
template <class CharT, class Traits, class Allocator>
|
2685
|
+
inline void swap(basic_string<CharT,Traits,Allocator>& x, basic_string<CharT,Traits,Allocator>& y)
|
2686
|
+
{ x.swap(y); }
|
2687
|
+
|
2688
|
+
/// @cond
|
2689
|
+
// I/O.
|
2690
|
+
namespace container_detail {
|
2691
|
+
|
2692
|
+
template <class CharT, class Traits>
|
2693
|
+
inline bool
|
2694
|
+
string_fill(std::basic_ostream<CharT, Traits>& os,
|
2695
|
+
std::basic_streambuf<CharT, Traits>* buf,
|
2696
|
+
std::size_t n)
|
2697
|
+
{
|
2698
|
+
CharT f = os.fill();
|
2699
|
+
std::size_t i;
|
2700
|
+
bool ok = true;
|
2701
|
+
|
2702
|
+
for (i = 0; i < n; i++)
|
2703
|
+
ok = ok && !Traits::eq_int_type(buf->sputc(f), Traits::eof());
|
2704
|
+
return ok;
|
2705
|
+
}
|
2706
|
+
|
2707
|
+
} //namespace container_detail {
|
2708
|
+
/// @endcond
|
2709
|
+
|
2710
|
+
template <class CharT, class Traits, class Allocator>
|
2711
|
+
std::basic_ostream<CharT, Traits>&
|
2712
|
+
operator<<(std::basic_ostream<CharT, Traits>& os, const basic_string<CharT,Traits,Allocator>& s)
|
2713
|
+
{
|
2714
|
+
typename std::basic_ostream<CharT, Traits>::sentry sentry(os);
|
2715
|
+
bool ok = false;
|
2716
|
+
|
2717
|
+
if (sentry) {
|
2718
|
+
ok = true;
|
2719
|
+
typename basic_string<CharT,Traits,Allocator>::size_type n = s.size();
|
2720
|
+
typename basic_string<CharT,Traits,Allocator>::size_type pad_len = 0;
|
2721
|
+
const bool left = (os.flags() & std::ios::left) != 0;
|
2722
|
+
const std::size_t w = os.width(0);
|
2723
|
+
std::basic_streambuf<CharT, Traits>* buf = os.rdbuf();
|
2724
|
+
|
2725
|
+
if (w != 0 && n < w)
|
2726
|
+
pad_len = w - n;
|
2727
|
+
|
2728
|
+
if (!left)
|
2729
|
+
ok = container_detail::string_fill(os, buf, pad_len);
|
2730
|
+
|
2731
|
+
ok = ok &&
|
2732
|
+
buf->sputn(s.data(), std::streamsize(n)) == std::streamsize(n);
|
2733
|
+
|
2734
|
+
if (left)
|
2735
|
+
ok = ok && container_detail::string_fill(os, buf, pad_len);
|
2736
|
+
}
|
2737
|
+
|
2738
|
+
if (!ok)
|
2739
|
+
os.setstate(std::ios_base::failbit);
|
2740
|
+
|
2741
|
+
return os;
|
2742
|
+
}
|
2743
|
+
|
2744
|
+
|
2745
|
+
template <class CharT, class Traits, class Allocator>
|
2746
|
+
std::basic_istream<CharT, Traits>&
|
2747
|
+
operator>>(std::basic_istream<CharT, Traits>& is, basic_string<CharT,Traits,Allocator>& s)
|
2748
|
+
{
|
2749
|
+
typename std::basic_istream<CharT, Traits>::sentry sentry(is);
|
2750
|
+
|
2751
|
+
if (sentry) {
|
2752
|
+
std::basic_streambuf<CharT, Traits>* buf = is.rdbuf();
|
2753
|
+
const std::ctype<CharT>& ctype = std::use_facet<std::ctype<CharT> >(is.getloc());
|
2754
|
+
|
2755
|
+
s.clear();
|
2756
|
+
std::size_t n = is.width(0);
|
2757
|
+
if (n == 0)
|
2758
|
+
n = static_cast<std::size_t>(-1);
|
2759
|
+
else
|
2760
|
+
s.reserve(n);
|
2761
|
+
|
2762
|
+
while (n-- > 0) {
|
2763
|
+
typename Traits::int_type c1 = buf->sbumpc();
|
2764
|
+
|
2765
|
+
if (Traits::eq_int_type(c1, Traits::eof())) {
|
2766
|
+
is.setstate(std::ios_base::eofbit);
|
2767
|
+
break;
|
2768
|
+
}
|
2769
|
+
else {
|
2770
|
+
CharT c = Traits::to_char_type(c1);
|
2771
|
+
|
2772
|
+
if (ctype.is(std::ctype<CharT>::space, c)) {
|
2773
|
+
if (Traits::eq_int_type(buf->sputbackc(c), Traits::eof()))
|
2774
|
+
is.setstate(std::ios_base::failbit);
|
2775
|
+
break;
|
2776
|
+
}
|
2777
|
+
else
|
2778
|
+
s.push_back(c);
|
2779
|
+
}
|
2780
|
+
}
|
2781
|
+
|
2782
|
+
// If we have read no characters, then set failbit.
|
2783
|
+
if (s.size() == 0)
|
2784
|
+
is.setstate(std::ios_base::failbit);
|
2785
|
+
}
|
2786
|
+
else
|
2787
|
+
is.setstate(std::ios_base::failbit);
|
2788
|
+
|
2789
|
+
return is;
|
2790
|
+
}
|
2791
|
+
|
2792
|
+
template <class CharT, class Traits, class Allocator>
|
2793
|
+
std::basic_istream<CharT, Traits>&
|
2794
|
+
getline(std::istream& is, basic_string<CharT,Traits,Allocator>& s,CharT delim)
|
2795
|
+
{
|
2796
|
+
typename basic_string<CharT,Traits,Allocator>::size_type nread = 0;
|
2797
|
+
typename std::basic_istream<CharT, Traits>::sentry sentry(is, true);
|
2798
|
+
if (sentry) {
|
2799
|
+
std::basic_streambuf<CharT, Traits>* buf = is.rdbuf();
|
2800
|
+
s.clear();
|
2801
|
+
|
2802
|
+
while (nread < s.max_size()) {
|
2803
|
+
int c1 = buf->sbumpc();
|
2804
|
+
if (Traits::eq_int_type(c1, Traits::eof())) {
|
2805
|
+
is.setstate(std::ios_base::eofbit);
|
2806
|
+
break;
|
2807
|
+
}
|
2808
|
+
else {
|
2809
|
+
++nread;
|
2810
|
+
CharT c = Traits::to_char_type(c1);
|
2811
|
+
if (!Traits::eq(c, delim))
|
2812
|
+
s.push_back(c);
|
2813
|
+
else
|
2814
|
+
break; // Character is extracted but not appended.
|
2815
|
+
}
|
2816
|
+
}
|
2817
|
+
}
|
2818
|
+
if (nread == 0 || nread >= s.max_size())
|
2819
|
+
is.setstate(std::ios_base::failbit);
|
2820
|
+
|
2821
|
+
return is;
|
2822
|
+
}
|
2823
|
+
|
2824
|
+
template <class CharT, class Traits, class Allocator>
|
2825
|
+
inline std::basic_istream<CharT, Traits>&
|
2826
|
+
getline(std::basic_istream<CharT, Traits>& is, basic_string<CharT,Traits,Allocator>& s)
|
2827
|
+
{
|
2828
|
+
return getline(is, s, '\n');
|
2829
|
+
}
|
2830
|
+
|
2831
|
+
template <class Ch, class Allocator>
|
2832
|
+
inline std::size_t hash_value(basic_string<Ch, std::char_traits<Ch>, Allocator> const& v)
|
2833
|
+
{
|
2834
|
+
return hash_range(v.begin(), v.end());
|
2835
|
+
}
|
2836
|
+
|
2837
|
+
}}
|
2838
|
+
|
2839
|
+
/// @cond
|
2840
|
+
|
2841
|
+
namespace boost {
|
2842
|
+
|
2843
|
+
//!has_trivial_destructor_after_move<> == true_type
|
2844
|
+
//!specialization for optimizations
|
2845
|
+
template <class C, class T, class Allocator>
|
2846
|
+
struct has_trivial_destructor_after_move<boost::container::basic_string<C, T, Allocator> >
|
2847
|
+
: public ::boost::has_trivial_destructor_after_move<Allocator>
|
2848
|
+
{};
|
2849
|
+
|
2850
|
+
}
|
2851
|
+
|
2852
|
+
/// @endcond
|
2853
|
+
|
2854
|
+
#include <boost/container/detail/config_end.hpp>
|
2855
|
+
|
2856
|
+
#endif // BOOST_CONTAINER_STRING_HPP
|