passenger 4.0.20 → 4.0.21
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/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/NEWS +15 -0
- data/README.md +5 -3
- data/Rakefile +1 -0
- data/bin/passenger-config +1 -5
- data/bin/passenger-install-apache2-module +53 -5
- data/bin/passenger-install-nginx-module +19 -6
- data/bin/passenger-memory-stats +3 -3
- data/build/agents.rb +11 -8
- data/build/apache2.rb +9 -5
- data/build/basics.rb +15 -21
- data/build/common_library.rb +16 -6
- data/build/cplusplus_support.rb +5 -5
- data/build/cxx_tests.rb +3 -3
- data/build/documentation.rb +1 -1
- data/build/misc.rb +4 -37
- data/build/node_tests.rb +29 -0
- data/build/oxt_tests.rb +1 -1
- data/build/packaging.rb +29 -10
- data/build/preprocessor.rb +2 -1
- data/build/test_basics.rb +15 -6
- data/debian.template/locations.ini.template +1 -0
- data/debian.template/passenger.install.template +1 -0
- data/dev/copy_boost_headers.rb +7 -3
- data/dev/run_travis.sh +32 -16
- data/doc/Users guide Apache.idmap.txt +22 -34
- data/doc/Users guide Apache.txt +20 -234
- data/doc/Users guide Nginx.idmap.txt +84 -66
- data/doc/Users guide Nginx.txt +50 -1
- data/doc/Users guide Standalone.idmap.txt +74 -0
- data/doc/Users guide Standalone.txt +22 -9
- data/doc/Users guide.txt +51 -0
- data/doc/users_guide_snippets/environment_variables.txt +0 -3
- data/doc/users_guide_snippets/installation.txt +337 -380
- data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
- data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
- data/doc/users_guide_snippets/support_information.txt +2 -9
- data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
- data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
- data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
- data/ext/apache2/Bucket.h +1 -1
- data/ext/apache2/Configuration.hpp +0 -44
- data/ext/apache2/CreateDirConfig.cpp +1 -1
- data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
- data/ext/apache2/Hooks.cpp +28 -21
- data/ext/apache2/MergeDirConfig.cpp +1 -0
- data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
- data/ext/apache2/SetHeaders.cpp +73 -0
- data/ext/apache2/SetHeaders.cpp.erb +88 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
- data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
- data/ext/boost/algorithm/string/formatter.hpp +2 -2
- data/ext/boost/assert.hpp +6 -1
- data/ext/boost/atomic.hpp +18 -0
- data/ext/boost/atomic/atomic.hpp +241 -0
- data/ext/boost/atomic/detail/base.hpp +585 -0
- data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
- data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
- data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
- data/ext/boost/atomic/detail/config.hpp +54 -0
- data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
- data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
- data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
- data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
- data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
- data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
- data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
- data/ext/boost/atomic/detail/interlocked.hpp +200 -0
- data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
- data/ext/boost/atomic/detail/lockpool.hpp +97 -0
- data/ext/boost/atomic/detail/platform.hpp +62 -0
- data/ext/boost/atomic/detail/type-classification.hpp +45 -0
- data/ext/boost/chrono/config.hpp +8 -3
- data/ext/boost/chrono/duration.hpp +9 -10
- data/ext/boost/chrono/system_clocks.hpp +1 -1
- data/ext/boost/chrono/time_point.hpp +4 -3
- data/ext/boost/config/auto_link.hpp +53 -52
- data/ext/boost/config/compiler/borland.hpp +1 -0
- data/ext/boost/config/compiler/clang.hpp +24 -1
- data/ext/boost/config/compiler/codegear.hpp +1 -0
- data/ext/boost/config/compiler/common_edg.hpp +1 -0
- data/ext/boost/config/compiler/cray.hpp +1 -0
- data/ext/boost/config/compiler/digitalmars.hpp +1 -0
- data/ext/boost/config/compiler/gcc.hpp +29 -3
- data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
- data/ext/boost/config/compiler/hp_acc.hpp +1 -0
- data/ext/boost/config/compiler/intel.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -0
- data/ext/boost/config/compiler/mpw.hpp +1 -0
- data/ext/boost/config/compiler/pathscale.hpp +1 -0
- data/ext/boost/config/compiler/pgi.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
- data/ext/boost/config/compiler/vacpp.hpp +3 -2
- data/ext/boost/config/compiler/visualc.hpp +25 -11
- data/ext/boost/config/platform/vxworks.hpp +353 -15
- data/ext/boost/config/select_compiler_config.hpp +4 -4
- data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
- data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
- data/ext/boost/config/suffix.hpp +45 -19
- data/ext/boost/date_time/format_date_parser.hpp +1 -11
- data/ext/boost/date_time/strings_from_facet.hpp +5 -3
- data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
- data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
- data/ext/boost/detail/endian.hpp +52 -4
- data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
- data/ext/boost/detail/select_type.hpp +36 -0
- data/ext/boost/exception/current_exception_cast.hpp +1 -1
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
- data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
- data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
- data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
- data/ext/boost/exception/detail/type_info.hpp +1 -1
- data/ext/boost/exception/diagnostic_information.hpp +15 -14
- data/ext/boost/exception/exception.hpp +1 -1
- data/ext/boost/exception/get_error_info.hpp +1 -1
- data/ext/boost/exception/info.hpp +12 -13
- data/ext/boost/exception/to_string.hpp +6 -1
- data/ext/boost/exception/to_string_stub.hpp +9 -1
- data/ext/boost/foreach.hpp +5 -5
- data/ext/boost/function/function_template.hpp +6 -6
- data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
- data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
- data/ext/boost/functional/hash/extensions.hpp +14 -2
- data/ext/boost/functional/hash/hash.hpp +26 -5
- data/ext/boost/get_pointer.hpp +17 -2
- data/ext/boost/integer_traits.hpp +1 -1
- data/ext/boost/lexical_cast.hpp +615 -395
- data/ext/boost/libs/atomic/lockpool.cpp +24 -0
- data/ext/boost/libs/system/src/error_code.cpp +25 -18
- data/ext/boost/libs/thread/src/future.cpp +7 -5
- data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
- data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
- data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/math/policies/policy.hpp +10 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
- data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
- data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
- data/ext/boost/math/special_functions/sign.hpp +13 -8
- data/ext/boost/math/tools/config.hpp +38 -16
- data/ext/boost/move/algorithm.hpp +275 -0
- data/ext/boost/move/core.hpp +332 -0
- data/ext/boost/move/detail/config_begin.hpp +23 -0
- data/ext/boost/move/detail/config_end.hpp +20 -0
- data/ext/boost/move/detail/meta_utils.hpp +158 -0
- data/ext/boost/move/iterator.hpp +298 -0
- data/ext/boost/move/move.hpp +10 -1256
- data/ext/boost/move/traits.hpp +142 -0
- data/ext/boost/move/utility.hpp +194 -0
- data/ext/boost/mpl/assert.hpp +72 -4
- data/ext/boost/noncopyable.hpp +15 -3
- data/ext/boost/pointer_to_other.hpp +55 -0
- data/ext/boost/range/concepts.hpp +4 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
- data/ext/boost/range/empty.hpp +1 -1
- data/ext/boost/range/iterator_range_core.hpp +4 -1
- data/ext/boost/range/iterator_range_io.hpp +2 -2
- data/ext/boost/ratio/config.hpp +6 -0
- data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
- data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
- data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
- data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
- data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
- data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
- data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
- data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
- data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
- data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
- data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
- data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
- data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
- data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
- data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
- data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
- data/ext/boost/smart_ptr/shared_array.hpp +135 -20
- data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
- data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
- data/ext/boost/static_assert.hpp +74 -17
- data/ext/boost/system/error_code.hpp +76 -68
- data/ext/boost/system/system_error.hpp +5 -1
- data/ext/boost/thread/barrier.hpp +6 -2
- data/ext/boost/thread/completion_latch.hpp +233 -0
- data/ext/boost/thread/condition.hpp +6 -1
- data/ext/boost/thread/detail/async_func.hpp +571 -0
- data/ext/boost/thread/detail/config.hpp +248 -40
- data/ext/boost/thread/detail/counter.hpp +93 -0
- data/ext/boost/thread/detail/delete.hpp +12 -0
- data/ext/boost/thread/detail/invoke.hpp +1351 -0
- data/ext/boost/thread/detail/is_convertible.hpp +48 -0
- data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
- data/ext/boost/thread/detail/log.hpp +83 -0
- data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
- data/ext/boost/thread/detail/move.hpp +32 -16
- data/ext/boost/thread/detail/thread.hpp +236 -41
- data/ext/boost/thread/detail/thread_group.hpp +55 -9
- data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
- data/ext/boost/thread/exceptions.hpp +2 -0
- data/ext/boost/thread/externally_locked.hpp +351 -0
- data/ext/boost/thread/externally_locked_stream.hpp +170 -0
- data/ext/boost/thread/future.hpp +2517 -455
- data/ext/boost/thread/future_error_code.hpp +61 -0
- data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
- data/ext/boost/thread/latch.hpp +142 -0
- data/ext/boost/thread/lock_algorithms.hpp +468 -0
- data/ext/boost/thread/lock_concepts.hpp +197 -0
- data/ext/boost/thread/lock_factories.hpp +78 -0
- data/ext/boost/thread/lock_guard.hpp +88 -0
- data/ext/boost/thread/lock_options.hpp +31 -0
- data/ext/boost/thread/lock_traits.hpp +45 -0
- data/ext/boost/thread/lock_types.hpp +1226 -0
- data/ext/boost/thread/lockable_adapter.hpp +226 -0
- data/ext/boost/thread/lockable_concepts.hpp +157 -0
- data/ext/boost/thread/lockable_traits.hpp +207 -0
- data/ext/boost/thread/locks.hpp +5 -1816
- data/ext/boost/thread/mutex.hpp +33 -1
- data/ext/boost/thread/null_mutex.hpp +243 -0
- data/ext/boost/thread/once.hpp +10 -1
- data/ext/boost/thread/poly_lockable.hpp +68 -0
- data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
- data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
- data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
- data/ext/boost/thread/pthread/mutex.hpp +101 -38
- data/ext/boost/thread/pthread/once.hpp +459 -44
- data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
- data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
- data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
- data/ext/boost/thread/pthread/thread_data.hpp +53 -50
- data/ext/boost/thread/pthread/timespec.hpp +96 -12
- data/ext/boost/thread/recursive_mutex.hpp +44 -1
- data/ext/boost/thread/reverse_lock.hpp +3 -2
- data/ext/boost/thread/scoped_thread.hpp +285 -0
- data/ext/boost/thread/shared_lock_guard.hpp +2 -1
- data/ext/boost/thread/shared_mutex.hpp +23 -0
- data/ext/boost/thread/strict_lock.hpp +235 -0
- data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
- data/ext/boost/thread/sync_queue.hpp +516 -0
- data/ext/boost/thread/synchronized_value.hpp +1001 -0
- data/ext/boost/thread/testable_mutex.hpp +148 -0
- data/ext/boost/thread/thread.hpp +1 -13
- data/ext/boost/thread/thread_functors.hpp +57 -0
- data/ext/boost/thread/thread_guard.hpp +46 -0
- data/ext/boost/thread/thread_only.hpp +29 -0
- data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
- data/ext/boost/thread/v2/thread.hpp +37 -10
- data/ext/boost/thread/xtime.hpp +2 -1
- data/ext/boost/token_functions.hpp +16 -16
- data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
- data/ext/boost/type_traits/add_reference.hpp +1 -1
- data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/common_type.hpp +11 -12
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
- data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
- data/ext/boost/type_traits/has_left_shift.hpp +49 -0
- data/ext/boost/type_traits/has_right_shift.hpp +49 -0
- data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
- data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
- data/ext/boost/type_traits/intrinsics.hpp +18 -2
- data/ext/boost/type_traits/is_abstract.hpp +1 -1
- data/ext/boost/type_traits/is_array.hpp +1 -1
- data/ext/boost/type_traits/is_const.hpp +1 -1
- data/ext/boost/type_traits/is_convertible.hpp +78 -17
- data/ext/boost/type_traits/is_function.hpp +6 -1
- data/ext/boost/type_traits/is_integral.hpp +6 -1
- data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
- data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
- data/ext/boost/type_traits/is_pod.hpp +3 -1
- data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/ext/boost/type_traits/is_volatile.hpp +1 -1
- data/ext/boost/type_traits/make_signed.hpp +153 -0
- data/ext/boost/type_traits/make_unsigned.hpp +16 -0
- data/ext/boost/type_traits/remove_const.hpp +1 -1
- data/ext/boost/type_traits/remove_cv.hpp +1 -1
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/remove_volatile.hpp +1 -1
- data/ext/boost/unordered/detail/allocate.hpp +1120 -0
- data/ext/boost/unordered/detail/buckets.hpp +876 -0
- data/ext/boost/unordered/detail/equivalent.hpp +680 -0
- data/ext/boost/unordered/detail/extract_key.hpp +183 -0
- data/ext/boost/unordered/detail/fwd.hpp +23 -0
- data/ext/boost/unordered/detail/table.hpp +861 -0
- data/ext/boost/unordered/detail/unique.hpp +622 -0
- data/ext/boost/unordered/detail/util.hpp +260 -0
- data/ext/boost/unordered/unordered_map.hpp +1652 -0
- data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
- data/ext/boost/unordered/unordered_set.hpp +1549 -0
- data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
- data/ext/boost/unordered_map.hpp +18 -0
- data/ext/boost/unordered_set.hpp +18 -0
- data/ext/boost/utility/addressof.hpp +2 -2
- data/ext/boost/utility/result_of.hpp +8 -1
- data/ext/boost/version.hpp +2 -2
- data/ext/common/Account.h +1 -1
- data/ext/common/AccountsDatabase.h +1 -1
- data/ext/common/AgentsStarter.cpp +3 -1
- data/ext/common/AgentsStarter.h +2 -2
- data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
- data/ext/common/ApplicationPool2/AppTypes.h +17 -8
- data/ext/common/ApplicationPool2/Common.h +12 -12
- data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
- data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
- data/ext/common/ApplicationPool2/Group.h +6 -6
- data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
- data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
- data/ext/common/ApplicationPool2/Pool.h +21 -21
- data/ext/common/ApplicationPool2/Process.h +6 -6
- data/ext/common/ApplicationPool2/Session.h +1 -1
- data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
- data/ext/common/ApplicationPool2/Socket.h +2 -2
- data/ext/common/ApplicationPool2/Spawner.h +64 -14
- data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
- data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
- data/ext/common/BackgroundEventLoop.cpp +4 -4
- data/ext/common/BackgroundEventLoop.h +1 -1
- data/ext/common/Constants.h +13 -1
- data/ext/common/EventedBufferedInput.h +8 -8
- data/ext/common/Exceptions.cpp +71 -0
- data/ext/common/Exceptions.h +60 -7
- data/ext/common/FileDescriptor.h +4 -4
- data/ext/common/MessageClient.h +1 -1
- data/ext/common/MessageServer.h +5 -5
- data/ext/common/MultiLibeio.cpp +3 -3
- data/ext/common/MultiLibeio.h +2 -2
- data/ext/common/RandomGenerator.h +11 -11
- data/ext/common/ResourceLocator.h +8 -1
- data/ext/common/SafeLibev.h +12 -12
- data/ext/common/ServerInstanceDir.h +11 -3
- data/ext/common/UnionStation.h +10 -10
- data/ext/common/Utils.cpp +11 -13
- data/ext/common/Utils.h +9 -9
- data/ext/common/Utils/BlockingQueue.h +10 -10
- data/ext/common/Utils/BufferedIO.h +1 -1
- data/ext/common/Utils/CachedFileStat.hpp +2 -2
- data/ext/common/Utils/FileChangeChecker.h +1 -1
- data/ext/common/Utils/HashMap.h +13 -4
- data/ext/common/Utils/IOUtils.cpp +33 -10
- data/ext/common/Utils/IniFile.h +3 -3
- data/ext/common/Utils/Lock.h +2 -2
- data/ext/common/Utils/MessagePassing.h +10 -10
- data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
- data/ext/common/Utils/ScopeGuard.h +5 -5
- data/ext/common/Utils/jsoncpp.cpp +2 -0
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
- data/ext/common/agents/HelperAgent/Main.cpp +18 -18
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
- data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
- data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
- data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
- data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
- data/ext/common/agents/SpawnPreparer.cpp +1 -0
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
- data/ext/common/agents/Watchdog/Main.cpp +81 -73
- data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/Makefile.in +110 -50
- data/ext/libev/README +8 -8
- data/ext/libev/aclocal.m4 +1503 -861
- data/ext/libev/config.guess +290 -304
- data/ext/libev/config.sub +77 -198
- data/ext/libev/configure +1735 -890
- data/ext/libev/configure.ac +3 -2
- data/ext/libev/ev++.h +6 -6
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/libev/event.c +29 -6
- data/ext/libev/event.h +9 -2
- data/ext/libev/ltmain.sh +2632 -1384
- data/ext/nginx/ConfigurationCommands.c +1 -1
- data/ext/nginx/ConfigurationCommands.c.erb +3 -1
- data/ext/nginx/ContentHandler.c +25 -2
- data/ext/nginx/CreateLocationConfig.c +1 -0
- data/ext/nginx/CreateLocationConfig.c.erb +1 -1
- data/ext/nginx/MergeLocationConfig.c +1 -0
- data/ext/nginx/MergeLocationConfig.c.erb +1 -1
- data/ext/nginx/config +12 -0
- data/ext/oxt/dynamic_thread_group.hpp +7 -4
- data/ext/oxt/system_calls.cpp +5 -1
- data/ext/oxt/system_calls.hpp +3 -0
- data/helper-scripts/node-loader.js +117 -249
- data/lib/phusion_passenger.rb +27 -5
- data/lib/phusion_passenger/abstract_installer.rb +104 -9
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
- data/lib/phusion_passenger/apache2/config_options.rb +6 -3
- data/lib/phusion_passenger/common_library.rb +7 -1
- data/lib/phusion_passenger/constants.rb +6 -0
- data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
- data/lib/phusion_passenger/nginx/config_options.rb +2 -1
- data/lib/phusion_passenger/packaging.rb +3 -0
- data/lib/phusion_passenger/platform_info/apache.rb +43 -6
- data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
- data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
- data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
- data/lib/phusion_passenger/platform_info/linux.rb +2 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
- data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
- data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
- data/lib/phusion_passenger/standalone/start_command.rb +8 -2
- data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
- data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
- data/node_lib/phusion_passenger/line_reader.js +154 -0
- data/node_lib/phusion_passenger/request_handler.js +65 -0
- data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
- data/resources/templates/apache2/deployment_example.txt.erb +2 -1
- data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
- data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
- data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/general_error_with_html.html.template +1 -1
- data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
- data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
- data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
- data/resources/templates/nginx/deployment_example.txt.erb +2 -1
- data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
- data/resources/templates/standalone/config.erb +1 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
- data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
- data/test/cxx/EventedBufferedInputTest.cpp +6 -6
- data/test/cxx/FileBackedPipeTest.cpp +1 -1
- data/test/cxx/MessagePassingTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +4 -4
- data/test/cxx/RequestHandlerTest.cpp +7 -7
- data/test/cxx/UnionStationTest.cpp +2 -2
- data/test/node/line_reader_spec.js +338 -0
- data/test/node/spec_helper.js +27 -0
- data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
- metadata +131 -22
- metadata.gz.asc +7 -7
- data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
- data/ext/boost/lambda/core.hpp +0 -79
- data/ext/boost/lambda/detail/actions.hpp +0 -174
- data/ext/boost/lambda/detail/arity_code.hpp +0 -110
- data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
- data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
- data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
- data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
- data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
- data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
- data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
- data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
- data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
- data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
- data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
- data/ext/boost/lambda/detail/operators.hpp +0 -370
- data/ext/boost/lambda/detail/ret.hpp +0 -325
- data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
- data/ext/boost/lambda/detail/select_functions.hpp +0 -74
- data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,23 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2012-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/move for documentation.
|
8
|
+
//
|
9
|
+
//////////////////////////////////////////////////////////////////////////////
|
10
|
+
#include <boost/config.hpp>
|
11
|
+
|
12
|
+
#ifdef BOOST_MSVC
|
13
|
+
#ifndef _CRT_SECURE_NO_DEPRECATE
|
14
|
+
#define BOOST_MOVE_CRT_SECURE_NO_DEPRECATE
|
15
|
+
#define _CRT_SECURE_NO_DEPRECATE
|
16
|
+
#endif
|
17
|
+
#ifndef _SCL_SECURE_NO_WARNINGS
|
18
|
+
#define BOOST_MOVE_SCL_SECURE_NO_WARNINGS
|
19
|
+
#define _SCL_SECURE_NO_WARNINGS
|
20
|
+
#endif
|
21
|
+
#pragma warning (push)
|
22
|
+
#pragma warning (disable : 4996) // "function": was declared deprecated
|
23
|
+
#endif
|
@@ -0,0 +1,20 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2012-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
|
+
#if defined BOOST_MSVC
|
11
|
+
#pragma warning (pop)
|
12
|
+
#ifdef BOOST_MOVE_DETAIL_CRT_SECURE_NO_DEPRECATE
|
13
|
+
#undef BOOST_MOVE_DETAIL_CRT_SECURE_NO_DEPRECATE
|
14
|
+
#undef _CRT_SECURE_NO_DEPRECATE
|
15
|
+
#endif
|
16
|
+
#ifndef BOOST_MOVE_SCL_SECURE_NO_WARNINGS
|
17
|
+
#undef BOOST_MOVE_SCL_SECURE_NO_WARNINGS
|
18
|
+
#undef _SCL_SECURE_NO_WARNINGS
|
19
|
+
#endif
|
20
|
+
#endif
|
@@ -0,0 +1,158 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2012-2012.
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// See http://www.boost.org/libs/move for documentation.
|
9
|
+
//
|
10
|
+
//////////////////////////////////////////////////////////////////////////////
|
11
|
+
|
12
|
+
//! \file
|
13
|
+
|
14
|
+
#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP
|
15
|
+
#define BOOST_MOVE_DETAIL_META_UTILS_HPP
|
16
|
+
|
17
|
+
#include <boost/move/detail/config_begin.hpp>
|
18
|
+
|
19
|
+
//Small meta-typetraits to support move
|
20
|
+
|
21
|
+
namespace boost {
|
22
|
+
namespace move_detail {
|
23
|
+
|
24
|
+
//if_
|
25
|
+
template<bool C, typename T1, typename T2>
|
26
|
+
struct if_c
|
27
|
+
{
|
28
|
+
typedef T1 type;
|
29
|
+
};
|
30
|
+
|
31
|
+
template<typename T1, typename T2>
|
32
|
+
struct if_c<false,T1,T2>
|
33
|
+
{
|
34
|
+
typedef T2 type;
|
35
|
+
};
|
36
|
+
|
37
|
+
template<typename T1, typename T2, typename T3>
|
38
|
+
struct if_
|
39
|
+
{
|
40
|
+
typedef typename if_c<0 != T1::value, T2, T3>::type type;
|
41
|
+
};
|
42
|
+
|
43
|
+
//enable_if_
|
44
|
+
template <bool B, class T = void>
|
45
|
+
struct enable_if_c
|
46
|
+
{
|
47
|
+
typedef T type;
|
48
|
+
};
|
49
|
+
|
50
|
+
template <class T>
|
51
|
+
struct enable_if_c<false, T> {};
|
52
|
+
|
53
|
+
template <class Cond, class T = void>
|
54
|
+
struct enable_if : public enable_if_c<Cond::value, T> {};
|
55
|
+
|
56
|
+
template <class Cond, class T = void>
|
57
|
+
struct disable_if : public enable_if_c<!Cond::value, T> {};
|
58
|
+
|
59
|
+
//integral_constant
|
60
|
+
template<class T, T v>
|
61
|
+
struct integral_constant
|
62
|
+
{
|
63
|
+
static const T value = v;
|
64
|
+
typedef T value_type;
|
65
|
+
typedef integral_constant<T, v> type;
|
66
|
+
};
|
67
|
+
|
68
|
+
//identity
|
69
|
+
template <class T>
|
70
|
+
struct identity
|
71
|
+
{
|
72
|
+
typedef T type;
|
73
|
+
};
|
74
|
+
|
75
|
+
//is_convertible
|
76
|
+
template <class T, class U>
|
77
|
+
class is_convertible
|
78
|
+
{
|
79
|
+
typedef char true_t;
|
80
|
+
class false_t { char dummy[2]; };
|
81
|
+
static true_t dispatch(U);
|
82
|
+
static false_t dispatch(...);
|
83
|
+
static T &trigger();
|
84
|
+
public:
|
85
|
+
enum { value = sizeof(dispatch(trigger())) == sizeof(true_t) };
|
86
|
+
};
|
87
|
+
|
88
|
+
//and_ not_
|
89
|
+
template <typename Condition1, typename Condition2, typename Condition3 = integral_constant<bool, true> >
|
90
|
+
struct and_
|
91
|
+
: public integral_constant<bool, Condition1::value && Condition2::value && Condition3::value>
|
92
|
+
{};
|
93
|
+
|
94
|
+
template <typename Boolean>
|
95
|
+
struct not_
|
96
|
+
: public integral_constant<bool, !Boolean::value>
|
97
|
+
{};
|
98
|
+
|
99
|
+
//is_lvalue_reference
|
100
|
+
template<class T>
|
101
|
+
struct is_lvalue_reference
|
102
|
+
: public integral_constant<bool, false>
|
103
|
+
{};
|
104
|
+
|
105
|
+
template<class T>
|
106
|
+
struct is_lvalue_reference<T&>
|
107
|
+
: public integral_constant<bool, true>
|
108
|
+
{};
|
109
|
+
|
110
|
+
template<class T>
|
111
|
+
struct is_class_or_union
|
112
|
+
{
|
113
|
+
struct twochar { char _[2]; };
|
114
|
+
template <class U>
|
115
|
+
static char is_class_or_union_tester(void(U::*)(void));
|
116
|
+
template <class U>
|
117
|
+
static twochar is_class_or_union_tester(...);
|
118
|
+
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
|
119
|
+
};
|
120
|
+
|
121
|
+
struct empty{};
|
122
|
+
|
123
|
+
//addressof
|
124
|
+
template<class T> struct addr_impl_ref
|
125
|
+
{
|
126
|
+
T & v_;
|
127
|
+
inline addr_impl_ref( T & v ): v_( v ) {}
|
128
|
+
inline operator T& () const { return v_; }
|
129
|
+
|
130
|
+
private:
|
131
|
+
addr_impl_ref & operator=(const addr_impl_ref &);
|
132
|
+
};
|
133
|
+
|
134
|
+
template<class T> struct addressof_impl
|
135
|
+
{
|
136
|
+
static inline T * f( T & v, long )
|
137
|
+
{
|
138
|
+
return reinterpret_cast<T*>(
|
139
|
+
&const_cast<char&>(reinterpret_cast<const volatile char &>(v)));
|
140
|
+
}
|
141
|
+
|
142
|
+
static inline T * f( T * v, int )
|
143
|
+
{ return v; }
|
144
|
+
};
|
145
|
+
|
146
|
+
template<class T>
|
147
|
+
inline T * addressof( T & v )
|
148
|
+
{
|
149
|
+
return ::boost::move_detail::addressof_impl<T>::f
|
150
|
+
( ::boost::move_detail::addr_impl_ref<T>( v ), 0 );
|
151
|
+
}
|
152
|
+
|
153
|
+
} //namespace move_detail {
|
154
|
+
} //namespace boost {
|
155
|
+
|
156
|
+
#include <boost/move/detail/config_end.hpp>
|
157
|
+
|
158
|
+
#endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP
|
@@ -0,0 +1,298 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2012-2012.
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// See http://www.boost.org/libs/move for documentation.
|
9
|
+
//
|
10
|
+
//////////////////////////////////////////////////////////////////////////////
|
11
|
+
|
12
|
+
//! \file
|
13
|
+
|
14
|
+
#ifndef BOOST_MOVE_ITERATOR_HPP
|
15
|
+
#define BOOST_MOVE_ITERATOR_HPP
|
16
|
+
|
17
|
+
#include <boost/move/detail/config_begin.hpp>
|
18
|
+
#include <boost/move/utility.hpp>
|
19
|
+
#include <iterator> //std::iterator
|
20
|
+
|
21
|
+
namespace boost {
|
22
|
+
|
23
|
+
//////////////////////////////////////////////////////////////////////////////
|
24
|
+
//
|
25
|
+
// move_iterator
|
26
|
+
//
|
27
|
+
//////////////////////////////////////////////////////////////////////////////
|
28
|
+
|
29
|
+
//! Class template move_iterator is an iterator adaptor with the same behavior
|
30
|
+
//! as the underlying iterator except that its dereference operator implicitly
|
31
|
+
//! converts the value returned by the underlying iterator's dereference operator
|
32
|
+
//! to an rvalue reference. Some generic algorithms can be called with move
|
33
|
+
//! iterators to replace copying with moving.
|
34
|
+
template <class It>
|
35
|
+
class move_iterator
|
36
|
+
{
|
37
|
+
public:
|
38
|
+
typedef It iterator_type;
|
39
|
+
typedef typename std::iterator_traits<iterator_type>::value_type value_type;
|
40
|
+
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_DOXYGEN_INVOKED)
|
41
|
+
typedef value_type && reference;
|
42
|
+
#else
|
43
|
+
typedef typename ::boost::move_detail::if_
|
44
|
+
< ::boost::has_move_emulation_enabled<value_type>
|
45
|
+
, ::boost::rv<value_type>&
|
46
|
+
, value_type & >::type reference;
|
47
|
+
#endif
|
48
|
+
typedef It pointer;
|
49
|
+
typedef typename std::iterator_traits<iterator_type>::difference_type difference_type;
|
50
|
+
typedef typename std::iterator_traits<iterator_type>::iterator_category iterator_category;
|
51
|
+
|
52
|
+
move_iterator()
|
53
|
+
{}
|
54
|
+
|
55
|
+
explicit move_iterator(It i)
|
56
|
+
: m_it(i)
|
57
|
+
{}
|
58
|
+
|
59
|
+
template <class U>
|
60
|
+
move_iterator(const move_iterator<U>& u)
|
61
|
+
: m_it(u.base())
|
62
|
+
{}
|
63
|
+
|
64
|
+
iterator_type base() const
|
65
|
+
{ return m_it; }
|
66
|
+
|
67
|
+
reference operator*() const
|
68
|
+
{
|
69
|
+
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
|
70
|
+
return *m_it;
|
71
|
+
#else
|
72
|
+
return ::boost::move(*m_it);
|
73
|
+
#endif
|
74
|
+
}
|
75
|
+
|
76
|
+
pointer operator->() const
|
77
|
+
{ return m_it; }
|
78
|
+
|
79
|
+
move_iterator& operator++()
|
80
|
+
{ ++m_it; return *this; }
|
81
|
+
|
82
|
+
move_iterator<iterator_type> operator++(int)
|
83
|
+
{ move_iterator<iterator_type> tmp(*this); ++(*this); return tmp; }
|
84
|
+
|
85
|
+
move_iterator& operator--()
|
86
|
+
{ --m_it; return *this; }
|
87
|
+
|
88
|
+
move_iterator<iterator_type> operator--(int)
|
89
|
+
{ move_iterator<iterator_type> tmp(*this); --(*this); return tmp; }
|
90
|
+
|
91
|
+
move_iterator<iterator_type> operator+ (difference_type n) const
|
92
|
+
{ return move_iterator<iterator_type>(m_it + n); }
|
93
|
+
|
94
|
+
move_iterator& operator+=(difference_type n)
|
95
|
+
{ m_it += n; return *this; }
|
96
|
+
|
97
|
+
move_iterator<iterator_type> operator- (difference_type n) const
|
98
|
+
{ return move_iterator<iterator_type>(m_it - n); }
|
99
|
+
|
100
|
+
move_iterator& operator-=(difference_type n)
|
101
|
+
{ m_it -= n; return *this; }
|
102
|
+
|
103
|
+
reference operator[](difference_type n) const
|
104
|
+
{
|
105
|
+
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES)
|
106
|
+
return m_it[n];
|
107
|
+
#else
|
108
|
+
return ::boost::move(m_it[n]);
|
109
|
+
#endif
|
110
|
+
}
|
111
|
+
|
112
|
+
friend bool operator==(const move_iterator& x, const move_iterator& y)
|
113
|
+
{ return x.base() == y.base(); }
|
114
|
+
|
115
|
+
friend bool operator!=(const move_iterator& x, const move_iterator& y)
|
116
|
+
{ return x.base() != y.base(); }
|
117
|
+
|
118
|
+
friend bool operator< (const move_iterator& x, const move_iterator& y)
|
119
|
+
{ return x.base() < y.base(); }
|
120
|
+
|
121
|
+
friend bool operator<=(const move_iterator& x, const move_iterator& y)
|
122
|
+
{ return x.base() <= y.base(); }
|
123
|
+
|
124
|
+
friend bool operator> (const move_iterator& x, const move_iterator& y)
|
125
|
+
{ return x.base() > y.base(); }
|
126
|
+
|
127
|
+
friend bool operator>=(const move_iterator& x, const move_iterator& y)
|
128
|
+
{ return x.base() >= y.base(); }
|
129
|
+
|
130
|
+
friend difference_type operator-(const move_iterator& x, const move_iterator& y)
|
131
|
+
{ return x.base() - y.base(); }
|
132
|
+
|
133
|
+
friend move_iterator operator+(difference_type n, const move_iterator& x)
|
134
|
+
{ return move_iterator(x.base() + n); }
|
135
|
+
|
136
|
+
private:
|
137
|
+
It m_it;
|
138
|
+
};
|
139
|
+
|
140
|
+
//is_move_iterator
|
141
|
+
namespace move_detail {
|
142
|
+
|
143
|
+
template <class I>
|
144
|
+
struct is_move_iterator
|
145
|
+
: public ::boost::move_detail::integral_constant<bool, false>
|
146
|
+
{
|
147
|
+
};
|
148
|
+
|
149
|
+
template <class I>
|
150
|
+
struct is_move_iterator< ::boost::move_iterator<I> >
|
151
|
+
: public ::boost::move_detail::integral_constant<bool, true>
|
152
|
+
{
|
153
|
+
};
|
154
|
+
|
155
|
+
} //namespace move_detail {
|
156
|
+
|
157
|
+
//////////////////////////////////////////////////////////////////////////////
|
158
|
+
//
|
159
|
+
// move_iterator
|
160
|
+
//
|
161
|
+
//////////////////////////////////////////////////////////////////////////////
|
162
|
+
|
163
|
+
//!
|
164
|
+
//! <b>Returns</b>: move_iterator<It>(i).
|
165
|
+
template<class It>
|
166
|
+
inline move_iterator<It> make_move_iterator(const It &it)
|
167
|
+
{ return move_iterator<It>(it); }
|
168
|
+
|
169
|
+
//////////////////////////////////////////////////////////////////////////////
|
170
|
+
//
|
171
|
+
// back_move_insert_iterator
|
172
|
+
//
|
173
|
+
//////////////////////////////////////////////////////////////////////////////
|
174
|
+
|
175
|
+
|
176
|
+
//! A move insert iterator that move constructs elements at the
|
177
|
+
//! back of a container
|
178
|
+
template <typename C> // C models Container
|
179
|
+
class back_move_insert_iterator
|
180
|
+
: public std::iterator<std::output_iterator_tag, void, void, void, void>
|
181
|
+
{
|
182
|
+
C* container_m;
|
183
|
+
|
184
|
+
public:
|
185
|
+
typedef C container_type;
|
186
|
+
typedef typename C::value_type value_type;
|
187
|
+
typedef typename C::reference reference;
|
188
|
+
|
189
|
+
explicit back_move_insert_iterator(C& x) : container_m(&x) { }
|
190
|
+
|
191
|
+
back_move_insert_iterator& operator=(reference x)
|
192
|
+
{ container_m->push_back(boost::move(x)); return *this; }
|
193
|
+
|
194
|
+
back_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
|
195
|
+
{ reference rx = x; return this->operator=(rx); }
|
196
|
+
|
197
|
+
back_move_insert_iterator& operator*() { return *this; }
|
198
|
+
back_move_insert_iterator& operator++() { return *this; }
|
199
|
+
back_move_insert_iterator& operator++(int) { return *this; }
|
200
|
+
};
|
201
|
+
|
202
|
+
//!
|
203
|
+
//! <b>Returns</b>: back_move_insert_iterator<C>(x).
|
204
|
+
template <typename C> // C models Container
|
205
|
+
inline back_move_insert_iterator<C> back_move_inserter(C& x)
|
206
|
+
{
|
207
|
+
return back_move_insert_iterator<C>(x);
|
208
|
+
}
|
209
|
+
|
210
|
+
//////////////////////////////////////////////////////////////////////////////
|
211
|
+
//
|
212
|
+
// front_move_insert_iterator
|
213
|
+
//
|
214
|
+
//////////////////////////////////////////////////////////////////////////////
|
215
|
+
|
216
|
+
//! A move insert iterator that move constructs elements int the
|
217
|
+
//! front of a container
|
218
|
+
template <typename C> // C models Container
|
219
|
+
class front_move_insert_iterator
|
220
|
+
: public std::iterator<std::output_iterator_tag, void, void, void, void>
|
221
|
+
{
|
222
|
+
C* container_m;
|
223
|
+
|
224
|
+
public:
|
225
|
+
typedef C container_type;
|
226
|
+
typedef typename C::value_type value_type;
|
227
|
+
typedef typename C::reference reference;
|
228
|
+
|
229
|
+
explicit front_move_insert_iterator(C& x) : container_m(&x) { }
|
230
|
+
|
231
|
+
front_move_insert_iterator& operator=(reference x)
|
232
|
+
{ container_m->push_front(boost::move(x)); return *this; }
|
233
|
+
|
234
|
+
front_move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
|
235
|
+
{ reference rx = x; return this->operator=(rx); }
|
236
|
+
|
237
|
+
front_move_insert_iterator& operator*() { return *this; }
|
238
|
+
front_move_insert_iterator& operator++() { return *this; }
|
239
|
+
front_move_insert_iterator& operator++(int) { return *this; }
|
240
|
+
};
|
241
|
+
|
242
|
+
//!
|
243
|
+
//! <b>Returns</b>: front_move_insert_iterator<C>(x).
|
244
|
+
template <typename C> // C models Container
|
245
|
+
inline front_move_insert_iterator<C> front_move_inserter(C& x)
|
246
|
+
{
|
247
|
+
return front_move_insert_iterator<C>(x);
|
248
|
+
}
|
249
|
+
|
250
|
+
//////////////////////////////////////////////////////////////////////////////
|
251
|
+
//
|
252
|
+
// insert_move_iterator
|
253
|
+
//
|
254
|
+
//////////////////////////////////////////////////////////////////////////////
|
255
|
+
template <typename C> // C models Container
|
256
|
+
class move_insert_iterator
|
257
|
+
: public std::iterator<std::output_iterator_tag, void, void, void, void>
|
258
|
+
{
|
259
|
+
C* container_m;
|
260
|
+
typename C::iterator pos_;
|
261
|
+
|
262
|
+
public:
|
263
|
+
typedef C container_type;
|
264
|
+
typedef typename C::value_type value_type;
|
265
|
+
typedef typename C::reference reference;
|
266
|
+
|
267
|
+
explicit move_insert_iterator(C& x, typename C::iterator pos)
|
268
|
+
: container_m(&x), pos_(pos)
|
269
|
+
{}
|
270
|
+
|
271
|
+
move_insert_iterator& operator=(reference x)
|
272
|
+
{
|
273
|
+
pos_ = container_m->insert(pos_, ::boost::move(x));
|
274
|
+
++pos_;
|
275
|
+
return *this;
|
276
|
+
}
|
277
|
+
|
278
|
+
move_insert_iterator& operator=(BOOST_RV_REF(value_type) x)
|
279
|
+
{ reference rx = x; return this->operator=(rx); }
|
280
|
+
|
281
|
+
move_insert_iterator& operator*() { return *this; }
|
282
|
+
move_insert_iterator& operator++() { return *this; }
|
283
|
+
move_insert_iterator& operator++(int) { return *this; }
|
284
|
+
};
|
285
|
+
|
286
|
+
//!
|
287
|
+
//! <b>Returns</b>: move_insert_iterator<C>(x, it).
|
288
|
+
template <typename C> // C models Container
|
289
|
+
inline move_insert_iterator<C> move_inserter(C& x, typename C::iterator it)
|
290
|
+
{
|
291
|
+
return move_insert_iterator<C>(x, it);
|
292
|
+
}
|
293
|
+
|
294
|
+
} //namespace boost {
|
295
|
+
|
296
|
+
#include <boost/move/detail/config_end.hpp>
|
297
|
+
|
298
|
+
#endif //#ifndef BOOST_MOVE_ITERATOR_HPP
|