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
@@ -1,324 +0,0 @@
|
|
1
|
-
// Boost Lambda Library - lambda_functors.hpp -------------------------------
|
2
|
-
|
3
|
-
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
4
|
-
//
|
5
|
-
// Distributed under the Boost Software License, Version 1.0. (See
|
6
|
-
// accompanying file LICENSE_1_0.txt or copy at
|
7
|
-
// http://www.boost.org/LICENSE_1_0.txt)
|
8
|
-
//
|
9
|
-
// For more information, see http://www.boost.org
|
10
|
-
|
11
|
-
// ------------------------------------------------
|
12
|
-
|
13
|
-
#ifndef BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
|
14
|
-
#define BOOST_LAMBDA_LAMBDA_FUNCTORS_HPP
|
15
|
-
|
16
|
-
#include <boost/config.hpp>
|
17
|
-
#include <boost/detail/workaround.hpp>
|
18
|
-
|
19
|
-
#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
|
20
|
-
|
21
|
-
#include <boost/mpl/or.hpp>
|
22
|
-
#include <boost/utility/enable_if.hpp>
|
23
|
-
#include <boost/type_traits/is_array.hpp>
|
24
|
-
|
25
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY1(A1, R1)\
|
26
|
-
typename lazy_disable_if<is_array<A1>, typename R1 >::type
|
27
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY2(A1, A2, R1, R2) \
|
28
|
-
typename lazy_disable_if<mpl::or_<is_array<A1>, is_array<A2> >, typename R1, R2 >::type
|
29
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY3(A1, A2, A3, R1, R2, R3) \
|
30
|
-
typename lazy_disable_if<mpl::or_<is_array<A1>, is_array<A2>, is_array<A3> >, typename R1, R2, R3 >::type
|
31
|
-
|
32
|
-
#else
|
33
|
-
|
34
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY1(A1, R1) typename R1::type
|
35
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY2(A1, A2, R1, R2) typename R1, R2::type
|
36
|
-
#define BOOST_LAMBDA_DISABLE_IF_ARRAY3(A1, A2, A3, R1, R2, R3) typename R1, R2, R3::type
|
37
|
-
|
38
|
-
#endif
|
39
|
-
|
40
|
-
namespace boost {
|
41
|
-
namespace lambda {
|
42
|
-
|
43
|
-
// -- lambda_functor --------------------------------------------
|
44
|
-
// --------------------------------------------------------------
|
45
|
-
|
46
|
-
//inline const null_type const_null_type() { return null_type(); }
|
47
|
-
|
48
|
-
namespace detail {
|
49
|
-
namespace {
|
50
|
-
|
51
|
-
static const null_type constant_null_type = null_type();
|
52
|
-
|
53
|
-
} // unnamed
|
54
|
-
} // detail
|
55
|
-
|
56
|
-
class unused {};
|
57
|
-
|
58
|
-
#define cnull_type() detail::constant_null_type
|
59
|
-
|
60
|
-
// -- free variables types --------------------------------------------------
|
61
|
-
|
62
|
-
// helper to work around the case where the nullary return type deduction
|
63
|
-
// is always performed, even though the functor is not nullary
|
64
|
-
namespace detail {
|
65
|
-
template<int N, class Tuple> struct get_element_or_null_type {
|
66
|
-
typedef typename
|
67
|
-
detail::tuple_element_as_reference<N, Tuple>::type type;
|
68
|
-
};
|
69
|
-
template<int N> struct get_element_or_null_type<N, null_type> {
|
70
|
-
typedef null_type type;
|
71
|
-
};
|
72
|
-
}
|
73
|
-
|
74
|
-
template <int I> struct placeholder;
|
75
|
-
|
76
|
-
template<> struct placeholder<FIRST> {
|
77
|
-
|
78
|
-
template<class SigArgs> struct sig {
|
79
|
-
typedef typename detail::get_element_or_null_type<0, SigArgs>::type type;
|
80
|
-
};
|
81
|
-
|
82
|
-
template<class RET, CALL_TEMPLATE_ARGS>
|
83
|
-
RET call(CALL_FORMAL_ARGS) const {
|
84
|
-
BOOST_STATIC_ASSERT(boost::is_reference<RET>::value);
|
85
|
-
CALL_USE_ARGS; // does nothing, prevents warnings for unused args
|
86
|
-
return a;
|
87
|
-
}
|
88
|
-
};
|
89
|
-
|
90
|
-
template<> struct placeholder<SECOND> {
|
91
|
-
|
92
|
-
template<class SigArgs> struct sig {
|
93
|
-
typedef typename detail::get_element_or_null_type<1, SigArgs>::type type;
|
94
|
-
};
|
95
|
-
|
96
|
-
template<class RET, CALL_TEMPLATE_ARGS>
|
97
|
-
RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return b; }
|
98
|
-
};
|
99
|
-
|
100
|
-
template<> struct placeholder<THIRD> {
|
101
|
-
|
102
|
-
template<class SigArgs> struct sig {
|
103
|
-
typedef typename detail::get_element_or_null_type<2, SigArgs>::type type;
|
104
|
-
};
|
105
|
-
|
106
|
-
template<class RET, CALL_TEMPLATE_ARGS>
|
107
|
-
RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return c; }
|
108
|
-
};
|
109
|
-
|
110
|
-
template<> struct placeholder<EXCEPTION> {
|
111
|
-
|
112
|
-
template<class SigArgs> struct sig {
|
113
|
-
typedef typename detail::get_element_or_null_type<3, SigArgs>::type type;
|
114
|
-
};
|
115
|
-
|
116
|
-
template<class RET, CALL_TEMPLATE_ARGS>
|
117
|
-
RET call(CALL_FORMAL_ARGS) const { CALL_USE_ARGS; return env; }
|
118
|
-
};
|
119
|
-
|
120
|
-
typedef const lambda_functor<placeholder<FIRST> > placeholder1_type;
|
121
|
-
typedef const lambda_functor<placeholder<SECOND> > placeholder2_type;
|
122
|
-
typedef const lambda_functor<placeholder<THIRD> > placeholder3_type;
|
123
|
-
|
124
|
-
|
125
|
-
///////////////////////////////////////////////////////////////////////////////
|
126
|
-
|
127
|
-
|
128
|
-
// free variables are lambda_functors. This is to allow uniform handling with
|
129
|
-
// other lambda_functors.
|
130
|
-
// -------------------------------------------------------------------
|
131
|
-
|
132
|
-
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
133
|
-
#pragma warning(push)
|
134
|
-
#pragma warning(disable:4512) //assignment operator could not be generated
|
135
|
-
#endif
|
136
|
-
|
137
|
-
// -- lambda_functor NONE ------------------------------------------------
|
138
|
-
template <class T>
|
139
|
-
class lambda_functor : public T
|
140
|
-
{
|
141
|
-
|
142
|
-
BOOST_STATIC_CONSTANT(int, arity_bits = get_arity<T>::value);
|
143
|
-
|
144
|
-
public:
|
145
|
-
typedef T inherited;
|
146
|
-
|
147
|
-
lambda_functor() {}
|
148
|
-
lambda_functor(const lambda_functor& l) : inherited(l) {}
|
149
|
-
|
150
|
-
lambda_functor(const T& t) : inherited(t) {}
|
151
|
-
|
152
|
-
template <class SigArgs> struct sig {
|
153
|
-
typedef typename inherited::template
|
154
|
-
sig<typename SigArgs::tail_type>::type type;
|
155
|
-
};
|
156
|
-
|
157
|
-
// Note that this return type deduction template is instantiated, even
|
158
|
-
// if the nullary
|
159
|
-
// operator() is not called at all. One must make sure that it does not fail.
|
160
|
-
typedef typename
|
161
|
-
inherited::template sig<null_type>::type
|
162
|
-
nullary_return_type;
|
163
|
-
|
164
|
-
// Support for boost::result_of.
|
165
|
-
template <class Sig> struct result;
|
166
|
-
template <class F>
|
167
|
-
struct result<F()> {
|
168
|
-
typedef nullary_return_type type;
|
169
|
-
};
|
170
|
-
template <class F, class A>
|
171
|
-
struct result<F(A)> {
|
172
|
-
typedef typename sig<tuple<F, A> >::type type;
|
173
|
-
};
|
174
|
-
template <class F, class A, class B>
|
175
|
-
struct result<F(A, B)> {
|
176
|
-
typedef typename sig<tuple<F, A, B> >::type type;
|
177
|
-
};
|
178
|
-
template <class F, class A, class B, class C>
|
179
|
-
struct result<F(A, B, C)> {
|
180
|
-
typedef typename sig<tuple<F, A, B, C> >::type type;
|
181
|
-
};
|
182
|
-
|
183
|
-
nullary_return_type operator()() const {
|
184
|
-
return inherited::template
|
185
|
-
call<nullary_return_type>
|
186
|
-
(cnull_type(), cnull_type(), cnull_type(), cnull_type());
|
187
|
-
}
|
188
|
-
|
189
|
-
template<class A>
|
190
|
-
typename inherited::template sig<tuple<A&> >::type
|
191
|
-
operator()(A& a) const {
|
192
|
-
return inherited::template call<
|
193
|
-
typename inherited::template sig<tuple<A&> >::type
|
194
|
-
>(a, cnull_type(), cnull_type(), cnull_type());
|
195
|
-
}
|
196
|
-
|
197
|
-
template<class A>
|
198
|
-
BOOST_LAMBDA_DISABLE_IF_ARRAY1(A, inherited::template sig<tuple<A const&> >)
|
199
|
-
operator()(A const& a) const {
|
200
|
-
return inherited::template call<
|
201
|
-
typename inherited::template sig<tuple<A const&> >::type
|
202
|
-
>(a, cnull_type(), cnull_type(), cnull_type());
|
203
|
-
}
|
204
|
-
|
205
|
-
template<class A, class B>
|
206
|
-
typename inherited::template sig<tuple<A&, B&> >::type
|
207
|
-
operator()(A& a, B& b) const {
|
208
|
-
return inherited::template call<
|
209
|
-
typename inherited::template sig<tuple<A&, B&> >::type
|
210
|
-
>(a, b, cnull_type(), cnull_type());
|
211
|
-
}
|
212
|
-
|
213
|
-
template<class A, class B>
|
214
|
-
BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A const&, B&> >)
|
215
|
-
operator()(A const& a, B& b) const {
|
216
|
-
return inherited::template call<
|
217
|
-
typename inherited::template sig<tuple<A const&, B&> >::type
|
218
|
-
>(a, b, cnull_type(), cnull_type());
|
219
|
-
}
|
220
|
-
|
221
|
-
template<class A, class B>
|
222
|
-
BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A&, B const&> >)
|
223
|
-
operator()(A& a, B const& b) const {
|
224
|
-
return inherited::template call<
|
225
|
-
typename inherited::template sig<tuple<A&, B const&> >::type
|
226
|
-
>(a, b, cnull_type(), cnull_type());
|
227
|
-
}
|
228
|
-
|
229
|
-
template<class A, class B>
|
230
|
-
BOOST_LAMBDA_DISABLE_IF_ARRAY2(A, B, inherited::template sig<tuple<A const&, B const&> >)
|
231
|
-
operator()(A const& a, B const& b) const {
|
232
|
-
return inherited::template call<
|
233
|
-
typename inherited::template sig<tuple<A const&, B const&> >::type
|
234
|
-
>(a, b, cnull_type(), cnull_type());
|
235
|
-
}
|
236
|
-
|
237
|
-
template<class A, class B, class C>
|
238
|
-
typename inherited::template sig<tuple<A&, B&, C&> >::type
|
239
|
-
operator()(A& a, B& b, C& c) const
|
240
|
-
{
|
241
|
-
return inherited::template call<
|
242
|
-
typename inherited::template sig<tuple<A&, B&, C&> >::type
|
243
|
-
>(a, b, c, cnull_type());
|
244
|
-
}
|
245
|
-
|
246
|
-
template<class A, class B, class C>
|
247
|
-
BOOST_LAMBDA_DISABLE_IF_ARRAY3(A, B, C, inherited::template sig<tuple<A const&, B const&, C const&> >)
|
248
|
-
operator()(A const& a, B const& b, C const& c) const
|
249
|
-
{
|
250
|
-
return inherited::template call<
|
251
|
-
typename inherited::template sig<tuple<A const&, B const&, C const&> >::type
|
252
|
-
>(a, b, c, cnull_type());
|
253
|
-
}
|
254
|
-
|
255
|
-
// for internal calls with env
|
256
|
-
template<CALL_TEMPLATE_ARGS>
|
257
|
-
typename inherited::template sig<tuple<CALL_REFERENCE_TYPES> >::type
|
258
|
-
internal_call(CALL_FORMAL_ARGS) const {
|
259
|
-
return inherited::template
|
260
|
-
call<typename inherited::template
|
261
|
-
sig<tuple<CALL_REFERENCE_TYPES> >::type>(CALL_ACTUAL_ARGS);
|
262
|
-
}
|
263
|
-
|
264
|
-
template<class A>
|
265
|
-
const lambda_functor<lambda_functor_base<
|
266
|
-
other_action<assignment_action>,
|
267
|
-
boost::tuple<lambda_functor,
|
268
|
-
typename const_copy_argument <const A>::type> > >
|
269
|
-
operator=(const A& a) const {
|
270
|
-
return lambda_functor_base<
|
271
|
-
other_action<assignment_action>,
|
272
|
-
boost::tuple<lambda_functor,
|
273
|
-
typename const_copy_argument <const A>::type> >
|
274
|
-
( boost::tuple<lambda_functor,
|
275
|
-
typename const_copy_argument <const A>::type>(*this, a) );
|
276
|
-
}
|
277
|
-
|
278
|
-
template<class A>
|
279
|
-
const lambda_functor<lambda_functor_base<
|
280
|
-
other_action<subscript_action>,
|
281
|
-
boost::tuple<lambda_functor,
|
282
|
-
typename const_copy_argument <const A>::type> > >
|
283
|
-
operator[](const A& a) const {
|
284
|
-
return lambda_functor_base<
|
285
|
-
other_action<subscript_action>,
|
286
|
-
boost::tuple<lambda_functor,
|
287
|
-
typename const_copy_argument <const A>::type> >
|
288
|
-
( boost::tuple<lambda_functor,
|
289
|
-
typename const_copy_argument <const A>::type>(*this, a ) );
|
290
|
-
}
|
291
|
-
};
|
292
|
-
|
293
|
-
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
294
|
-
#pragma warning(pop)
|
295
|
-
#endif
|
296
|
-
|
297
|
-
} // namespace lambda
|
298
|
-
} // namespace boost
|
299
|
-
|
300
|
-
// is_placeholder
|
301
|
-
|
302
|
-
#include <boost/is_placeholder.hpp>
|
303
|
-
|
304
|
-
namespace boost
|
305
|
-
{
|
306
|
-
|
307
|
-
template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::FIRST> > >
|
308
|
-
{
|
309
|
-
enum _vt { value = 1 };
|
310
|
-
};
|
311
|
-
|
312
|
-
template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::SECOND> > >
|
313
|
-
{
|
314
|
-
enum _vt { value = 2 };
|
315
|
-
};
|
316
|
-
|
317
|
-
template<> struct is_placeholder< lambda::lambda_functor< lambda::placeholder<lambda::THIRD> > >
|
318
|
-
{
|
319
|
-
enum _vt { value = 3 };
|
320
|
-
};
|
321
|
-
|
322
|
-
} // namespace boost
|
323
|
-
|
324
|
-
#endif
|
@@ -1,74 +0,0 @@
|
|
1
|
-
// lambda_fwd.hpp - Boost Lambda Library -------------------------------
|
2
|
-
|
3
|
-
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
4
|
-
//
|
5
|
-
// Distributed under the Boost Software License, Version 1.0. (See
|
6
|
-
// accompanying file LICENSE_1_0.txt or copy at
|
7
|
-
// http://www.boost.org/LICENSE_1_0.txt)
|
8
|
-
//
|
9
|
-
// For more information, see www.boost.org
|
10
|
-
|
11
|
-
// -------------------------------------------------------
|
12
|
-
|
13
|
-
#ifndef BOOST_LAMBDA_FWD_HPP
|
14
|
-
#define BOOST_LAMBDA_FWD_HPP
|
15
|
-
|
16
|
-
namespace boost {
|
17
|
-
namespace lambda {
|
18
|
-
|
19
|
-
namespace detail {
|
20
|
-
|
21
|
-
template<class T> struct generate_error;
|
22
|
-
|
23
|
-
}
|
24
|
-
// -- placeholders --------------------------------------------
|
25
|
-
|
26
|
-
template <int I> struct placeholder;
|
27
|
-
|
28
|
-
// function_adaptors
|
29
|
-
template <class Func>
|
30
|
-
struct function_adaptor;
|
31
|
-
|
32
|
-
template <int I, class Act> class action;
|
33
|
-
|
34
|
-
template <class Base>
|
35
|
-
class lambda_functor;
|
36
|
-
|
37
|
-
template <class Act, class Args>
|
38
|
-
class lambda_functor_base;
|
39
|
-
|
40
|
-
} // namespace lambda
|
41
|
-
} // namespace boost
|
42
|
-
|
43
|
-
|
44
|
-
// #define CALL_TEMPLATE_ARGS class A, class Env
|
45
|
-
// #define CALL_FORMAL_ARGS A& a, Env& env
|
46
|
-
// #define CALL_ACTUAL_ARGS a, env
|
47
|
-
// #define CALL_ACTUAL_ARGS_NO_ENV a
|
48
|
-
// #define CALL_REFERENCE_TYPES A&, Env&
|
49
|
-
// #define CALL_PLAIN_TYPES A, Env
|
50
|
-
#define CALL_TEMPLATE_ARGS class A, class B, class C, class Env
|
51
|
-
#define CALL_FORMAL_ARGS A& a, B& b, C& c, Env& env
|
52
|
-
#define CALL_ACTUAL_ARGS a, b, c, env
|
53
|
-
#define CALL_ACTUAL_ARGS_NO_ENV a, b, c
|
54
|
-
#define CALL_REFERENCE_TYPES A&, B&, C&, Env&
|
55
|
-
#define CALL_PLAIN_TYPES A, B, C, Env
|
56
|
-
|
57
|
-
namespace boost {
|
58
|
-
namespace lambda {
|
59
|
-
namespace detail {
|
60
|
-
|
61
|
-
template<class A1, class A2, class A3, class A4>
|
62
|
-
void do_nothing(A1&, A2&, A3&, A4&) {}
|
63
|
-
|
64
|
-
} // detail
|
65
|
-
} // lambda
|
66
|
-
} // boost
|
67
|
-
|
68
|
-
// prevent the warnings from unused arguments
|
69
|
-
#define CALL_USE_ARGS \
|
70
|
-
::boost::lambda::detail::do_nothing(a, b, c, env)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
#endif
|
@@ -1,578 +0,0 @@
|
|
1
|
-
// - lambda_traits.hpp --- Boost Lambda Library ----------------------------
|
2
|
-
//
|
3
|
-
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
4
|
-
//
|
5
|
-
// Distributed under the Boost Software License, Version 1.0. (See
|
6
|
-
// accompanying file LICENSE_1_0.txt or copy at
|
7
|
-
// http://www.boost.org/LICENSE_1_0.txt)
|
8
|
-
//
|
9
|
-
// For more information, see www.boost.org
|
10
|
-
// -------------------------------------------------------------------------
|
11
|
-
|
12
|
-
#ifndef BOOST_LAMBDA_LAMBDA_TRAITS_HPP
|
13
|
-
#define BOOST_LAMBDA_LAMBDA_TRAITS_HPP
|
14
|
-
|
15
|
-
#include "boost/type_traits/transform_traits.hpp"
|
16
|
-
#include "boost/type_traits/cv_traits.hpp"
|
17
|
-
#include "boost/type_traits/function_traits.hpp"
|
18
|
-
#include "boost/type_traits/object_traits.hpp"
|
19
|
-
#include "boost/tuple/tuple.hpp"
|
20
|
-
|
21
|
-
namespace boost {
|
22
|
-
namespace lambda {
|
23
|
-
|
24
|
-
// -- if construct ------------------------------------------------
|
25
|
-
// Proposed by Krzysztof Czarnecki and Ulrich Eisenecker
|
26
|
-
|
27
|
-
namespace detail {
|
28
|
-
|
29
|
-
template <bool If, class Then, class Else> struct IF { typedef Then RET; };
|
30
|
-
|
31
|
-
template <class Then, class Else> struct IF<false, Then, Else> {
|
32
|
-
typedef Else RET;
|
33
|
-
};
|
34
|
-
|
35
|
-
|
36
|
-
// An if construct that doesn't instantiate the non-matching template:
|
37
|
-
|
38
|
-
// Called as:
|
39
|
-
// IF_type<condition, A, B>::type
|
40
|
-
// The matching template must define the typeded 'type'
|
41
|
-
// I.e. A::type if condition is true, B::type if condition is false
|
42
|
-
// Idea from Vesa Karvonen (from C&E as well I guess)
|
43
|
-
template<class T>
|
44
|
-
struct IF_type_
|
45
|
-
{
|
46
|
-
typedef typename T::type type;
|
47
|
-
};
|
48
|
-
|
49
|
-
|
50
|
-
template<bool C, class T, class E>
|
51
|
-
struct IF_type
|
52
|
-
{
|
53
|
-
typedef typename
|
54
|
-
IF_type_<typename IF<C, T, E>::RET >::type type;
|
55
|
-
};
|
56
|
-
|
57
|
-
// helper that can be used to give typedef T to some type
|
58
|
-
template <class T> struct identity_mapping { typedef T type; };
|
59
|
-
|
60
|
-
// An if construct for finding an integral constant 'value'
|
61
|
-
// Does not instantiate the non-matching branch
|
62
|
-
// Called as IF_value<condition, A, B>::value
|
63
|
-
// If condition is true A::value must be defined, otherwise B::value
|
64
|
-
|
65
|
-
template<class T>
|
66
|
-
struct IF_value_
|
67
|
-
{
|
68
|
-
BOOST_STATIC_CONSTANT(int, value = T::value);
|
69
|
-
};
|
70
|
-
|
71
|
-
|
72
|
-
template<bool C, class T, class E>
|
73
|
-
struct IF_value
|
74
|
-
{
|
75
|
-
BOOST_STATIC_CONSTANT(int, value = (IF_value_<typename IF<C, T, E>::RET>::value));
|
76
|
-
};
|
77
|
-
|
78
|
-
|
79
|
-
// --------------------------------------------------------------
|
80
|
-
|
81
|
-
// removes reference from other than function types:
|
82
|
-
template<class T> class remove_reference_if_valid
|
83
|
-
{
|
84
|
-
|
85
|
-
typedef typename boost::remove_reference<T>::type plainT;
|
86
|
-
public:
|
87
|
-
typedef typename IF<
|
88
|
-
boost::is_function<plainT>::value,
|
89
|
-
T,
|
90
|
-
plainT
|
91
|
-
>::RET type;
|
92
|
-
|
93
|
-
};
|
94
|
-
|
95
|
-
|
96
|
-
template<class T> struct remove_reference_and_cv {
|
97
|
-
typedef typename boost::remove_cv<
|
98
|
-
typename boost::remove_reference<T>::type
|
99
|
-
>::type type;
|
100
|
-
};
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
// returns a reference to the element of tuple T
|
105
|
-
template<int N, class T> struct tuple_element_as_reference {
|
106
|
-
typedef typename
|
107
|
-
boost::tuples::access_traits<
|
108
|
-
typename boost::tuples::element<N, T>::type
|
109
|
-
>::non_const_type type;
|
110
|
-
};
|
111
|
-
|
112
|
-
// returns the cv and reverence stripped type of a tuple element
|
113
|
-
template<int N, class T> struct tuple_element_stripped {
|
114
|
-
typedef typename
|
115
|
-
remove_reference_and_cv<
|
116
|
-
typename boost::tuples::element<N, T>::type
|
117
|
-
>::type type;
|
118
|
-
};
|
119
|
-
|
120
|
-
// is_lambda_functor -------------------------------------------------
|
121
|
-
|
122
|
-
template <class T> struct is_lambda_functor_ {
|
123
|
-
BOOST_STATIC_CONSTANT(bool, value = false);
|
124
|
-
};
|
125
|
-
|
126
|
-
template <class Arg> struct is_lambda_functor_<lambda_functor<Arg> > {
|
127
|
-
BOOST_STATIC_CONSTANT(bool, value = true);
|
128
|
-
};
|
129
|
-
|
130
|
-
} // end detail
|
131
|
-
|
132
|
-
|
133
|
-
template <class T> struct is_lambda_functor {
|
134
|
-
BOOST_STATIC_CONSTANT(bool,
|
135
|
-
value =
|
136
|
-
detail::is_lambda_functor_<
|
137
|
-
typename detail::remove_reference_and_cv<T>::type
|
138
|
-
>::value);
|
139
|
-
};
|
140
|
-
|
141
|
-
|
142
|
-
namespace detail {
|
143
|
-
|
144
|
-
// -- parameter_traits_ ---------------------------------------------
|
145
|
-
|
146
|
-
// An internal parameter type traits class that respects
|
147
|
-
// the reference_wrapper class.
|
148
|
-
|
149
|
-
// The conversions performed are:
|
150
|
-
// references -> compile_time_error
|
151
|
-
// T1 -> T2,
|
152
|
-
// reference_wrapper<T> -> T&
|
153
|
-
// const array -> ref to const array
|
154
|
-
// array -> ref to array
|
155
|
-
// function -> ref to function
|
156
|
-
|
157
|
-
// ------------------------------------------------------------------------
|
158
|
-
|
159
|
-
template<class T1, class T2>
|
160
|
-
struct parameter_traits_ {
|
161
|
-
typedef T2 type;
|
162
|
-
};
|
163
|
-
|
164
|
-
// Do not instantiate with reference types
|
165
|
-
template<class T, class Any> struct parameter_traits_<T&, Any> {
|
166
|
-
typedef typename
|
167
|
-
generate_error<T&>::
|
168
|
-
parameter_traits_class_instantiated_with_reference_type type;
|
169
|
-
};
|
170
|
-
|
171
|
-
// Arrays can't be stored as plain types; convert them to references
|
172
|
-
template<class T, int n, class Any> struct parameter_traits_<T[n], Any> {
|
173
|
-
typedef T (&type)[n];
|
174
|
-
};
|
175
|
-
|
176
|
-
template<class T, int n, class Any>
|
177
|
-
struct parameter_traits_<const T[n], Any> {
|
178
|
-
typedef const T (&type)[n];
|
179
|
-
};
|
180
|
-
|
181
|
-
template<class T, int n, class Any>
|
182
|
-
struct parameter_traits_<volatile T[n], Any> {
|
183
|
-
typedef volatile T (&type)[n];
|
184
|
-
};
|
185
|
-
template<class T, int n, class Any>
|
186
|
-
struct parameter_traits_<const volatile T[n], Any> {
|
187
|
-
typedef const volatile T (&type)[n];
|
188
|
-
};
|
189
|
-
|
190
|
-
|
191
|
-
template<class T, class Any>
|
192
|
-
struct parameter_traits_<boost::reference_wrapper<T>, Any >{
|
193
|
-
typedef T& type;
|
194
|
-
};
|
195
|
-
|
196
|
-
template<class T, class Any>
|
197
|
-
struct parameter_traits_<const boost::reference_wrapper<T>, Any >{
|
198
|
-
typedef T& type;
|
199
|
-
};
|
200
|
-
|
201
|
-
template<class T, class Any>
|
202
|
-
struct parameter_traits_<volatile boost::reference_wrapper<T>, Any >{
|
203
|
-
typedef T& type;
|
204
|
-
};
|
205
|
-
|
206
|
-
template<class T, class Any>
|
207
|
-
struct parameter_traits_<const volatile boost::reference_wrapper<T>, Any >{
|
208
|
-
typedef T& type;
|
209
|
-
};
|
210
|
-
|
211
|
-
template<class Any>
|
212
|
-
struct parameter_traits_<void, Any> {
|
213
|
-
typedef void type;
|
214
|
-
};
|
215
|
-
|
216
|
-
template<class Arg, class Any>
|
217
|
-
struct parameter_traits_<lambda_functor<Arg>, Any > {
|
218
|
-
typedef lambda_functor<Arg> type;
|
219
|
-
};
|
220
|
-
|
221
|
-
template<class Arg, class Any>
|
222
|
-
struct parameter_traits_<const lambda_functor<Arg>, Any > {
|
223
|
-
typedef lambda_functor<Arg> type;
|
224
|
-
};
|
225
|
-
|
226
|
-
// Are the volatile versions needed?
|
227
|
-
template<class Arg, class Any>
|
228
|
-
struct parameter_traits_<volatile lambda_functor<Arg>, Any > {
|
229
|
-
typedef lambda_functor<Arg> type;
|
230
|
-
};
|
231
|
-
|
232
|
-
template<class Arg, class Any>
|
233
|
-
struct parameter_traits_<const volatile lambda_functor<Arg>, Any > {
|
234
|
-
typedef lambda_functor<Arg> type;
|
235
|
-
};
|
236
|
-
|
237
|
-
} // end namespace detail
|
238
|
-
|
239
|
-
|
240
|
-
// ------------------------------------------------------------------------
|
241
|
-
// traits classes for lambda expressions (bind functions, operators ...)
|
242
|
-
|
243
|
-
// must be instantiated with non-reference types
|
244
|
-
|
245
|
-
// The default is const plain type -------------------------
|
246
|
-
// const T -> const T,
|
247
|
-
// T -> const T,
|
248
|
-
// references -> compile_time_error
|
249
|
-
// reference_wrapper<T> -> T&
|
250
|
-
// array -> const ref array
|
251
|
-
template<class T>
|
252
|
-
struct const_copy_argument {
|
253
|
-
typedef typename
|
254
|
-
detail::parameter_traits_<
|
255
|
-
T,
|
256
|
-
typename detail::IF<boost::is_function<T>::value, T&, const T>::RET
|
257
|
-
>::type type;
|
258
|
-
};
|
259
|
-
|
260
|
-
// T may be a function type. Without the IF test, const would be added
|
261
|
-
// to a function type, which is illegal.
|
262
|
-
|
263
|
-
// all arrays are converted to const.
|
264
|
-
// This traits template is used for 'const T&' parameter passing
|
265
|
-
// and thus the knowledge of the potential
|
266
|
-
// non-constness of an actual argument is lost.
|
267
|
-
template<class T, int n> struct const_copy_argument <T[n]> {
|
268
|
-
typedef const T (&type)[n];
|
269
|
-
};
|
270
|
-
template<class T, int n> struct const_copy_argument <volatile T[n]> {
|
271
|
-
typedef const volatile T (&type)[n];
|
272
|
-
};
|
273
|
-
|
274
|
-
template<class T>
|
275
|
-
struct const_copy_argument<T&> {};
|
276
|
-
// do not instantiate with references
|
277
|
-
// typedef typename detail::generate_error<T&>::references_not_allowed type;
|
278
|
-
|
279
|
-
|
280
|
-
template<>
|
281
|
-
struct const_copy_argument<void> {
|
282
|
-
typedef void type;
|
283
|
-
};
|
284
|
-
|
285
|
-
|
286
|
-
// Does the same as const_copy_argument, but passes references through as such
|
287
|
-
template<class T>
|
288
|
-
struct bound_argument_conversion {
|
289
|
-
typedef typename const_copy_argument<T>::type type;
|
290
|
-
};
|
291
|
-
|
292
|
-
template<class T>
|
293
|
-
struct bound_argument_conversion<T&> {
|
294
|
-
typedef T& type;
|
295
|
-
};
|
296
|
-
|
297
|
-
// The default is non-const reference -------------------------
|
298
|
-
// const T -> const T&,
|
299
|
-
// T -> T&,
|
300
|
-
// references -> compile_time_error
|
301
|
-
// reference_wrapper<T> -> T&
|
302
|
-
template<class T>
|
303
|
-
struct reference_argument {
|
304
|
-
typedef typename detail::parameter_traits_<T, T&>::type type;
|
305
|
-
};
|
306
|
-
|
307
|
-
template<class T>
|
308
|
-
struct reference_argument<T&> {
|
309
|
-
typedef typename detail::generate_error<T&>::references_not_allowed type;
|
310
|
-
};
|
311
|
-
|
312
|
-
template<class Arg>
|
313
|
-
struct reference_argument<lambda_functor<Arg> > {
|
314
|
-
typedef lambda_functor<Arg> type;
|
315
|
-
};
|
316
|
-
|
317
|
-
template<class Arg>
|
318
|
-
struct reference_argument<const lambda_functor<Arg> > {
|
319
|
-
typedef lambda_functor<Arg> type;
|
320
|
-
};
|
321
|
-
|
322
|
-
// Are the volatile versions needed?
|
323
|
-
template<class Arg>
|
324
|
-
struct reference_argument<volatile lambda_functor<Arg> > {
|
325
|
-
typedef lambda_functor<Arg> type;
|
326
|
-
};
|
327
|
-
|
328
|
-
template<class Arg>
|
329
|
-
struct reference_argument<const volatile lambda_functor<Arg> > {
|
330
|
-
typedef lambda_functor<Arg> type;
|
331
|
-
};
|
332
|
-
|
333
|
-
template<>
|
334
|
-
struct reference_argument<void> {
|
335
|
-
typedef void type;
|
336
|
-
};
|
337
|
-
|
338
|
-
namespace detail {
|
339
|
-
|
340
|
-
// Array to pointer conversion
|
341
|
-
template <class T>
|
342
|
-
struct array_to_pointer {
|
343
|
-
typedef T type;
|
344
|
-
};
|
345
|
-
|
346
|
-
template <class T, int N>
|
347
|
-
struct array_to_pointer <const T[N]> {
|
348
|
-
typedef const T* type;
|
349
|
-
};
|
350
|
-
template <class T, int N>
|
351
|
-
struct array_to_pointer <T[N]> {
|
352
|
-
typedef T* type;
|
353
|
-
};
|
354
|
-
|
355
|
-
template <class T, int N>
|
356
|
-
struct array_to_pointer <const T (&) [N]> {
|
357
|
-
typedef const T* type;
|
358
|
-
};
|
359
|
-
template <class T, int N>
|
360
|
-
struct array_to_pointer <T (&) [N]> {
|
361
|
-
typedef T* type;
|
362
|
-
};
|
363
|
-
|
364
|
-
|
365
|
-
// ---------------------------------------------------------------------------
|
366
|
-
// The call_traits for bind
|
367
|
-
// Respects the reference_wrapper class.
|
368
|
-
|
369
|
-
// These templates are used outside of bind functions as well.
|
370
|
-
// the bind_tuple_mapper provides a shorter notation for default
|
371
|
-
// bound argument storing semantics, if all arguments are treated
|
372
|
-
// uniformly.
|
373
|
-
|
374
|
-
// from template<class T> foo(const T& t) : bind_traits<const T>::type
|
375
|
-
// from template<class T> foo(T& t) : bind_traits<T>::type
|
376
|
-
|
377
|
-
// Conversions:
|
378
|
-
// T -> const T,
|
379
|
-
// cv T -> cv T,
|
380
|
-
// T& -> T&
|
381
|
-
// reference_wrapper<T> -> T&
|
382
|
-
// const reference_wrapper<T> -> T&
|
383
|
-
// array -> const ref array
|
384
|
-
|
385
|
-
// make bound arguments const, this is a deliberate design choice, the
|
386
|
-
// purpose is to prevent side effects to bound arguments that are stored
|
387
|
-
// as copies
|
388
|
-
template<class T>
|
389
|
-
struct bind_traits {
|
390
|
-
typedef const T type;
|
391
|
-
};
|
392
|
-
|
393
|
-
template<class T>
|
394
|
-
struct bind_traits<T&> {
|
395
|
-
typedef T& type;
|
396
|
-
};
|
397
|
-
|
398
|
-
// null_types are an exception, we always want to store them as non const
|
399
|
-
// so that other templates can assume that null_type is always without const
|
400
|
-
template<>
|
401
|
-
struct bind_traits<null_type> {
|
402
|
-
typedef null_type type;
|
403
|
-
};
|
404
|
-
|
405
|
-
// the bind_tuple_mapper, bind_type_generators may
|
406
|
-
// introduce const to null_type
|
407
|
-
template<>
|
408
|
-
struct bind_traits<const null_type> {
|
409
|
-
typedef null_type type;
|
410
|
-
};
|
411
|
-
|
412
|
-
// Arrays can't be stored as plain types; convert them to references.
|
413
|
-
// All arrays are converted to const. This is because bind takes its
|
414
|
-
// parameters as const T& and thus the knowledge of the potential
|
415
|
-
// non-constness of actual argument is lost.
|
416
|
-
template<class T, int n> struct bind_traits <T[n]> {
|
417
|
-
typedef const T (&type)[n];
|
418
|
-
};
|
419
|
-
|
420
|
-
template<class T, int n>
|
421
|
-
struct bind_traits<const T[n]> {
|
422
|
-
typedef const T (&type)[n];
|
423
|
-
};
|
424
|
-
|
425
|
-
template<class T, int n> struct bind_traits<volatile T[n]> {
|
426
|
-
typedef const volatile T (&type)[n];
|
427
|
-
};
|
428
|
-
|
429
|
-
template<class T, int n>
|
430
|
-
struct bind_traits<const volatile T[n]> {
|
431
|
-
typedef const volatile T (&type)[n];
|
432
|
-
};
|
433
|
-
|
434
|
-
template<class R>
|
435
|
-
struct bind_traits<R()> {
|
436
|
-
typedef R(&type)();
|
437
|
-
};
|
438
|
-
|
439
|
-
template<class R, class Arg1>
|
440
|
-
struct bind_traits<R(Arg1)> {
|
441
|
-
typedef R(&type)(Arg1);
|
442
|
-
};
|
443
|
-
|
444
|
-
template<class R, class Arg1, class Arg2>
|
445
|
-
struct bind_traits<R(Arg1, Arg2)> {
|
446
|
-
typedef R(&type)(Arg1, Arg2);
|
447
|
-
};
|
448
|
-
|
449
|
-
template<class R, class Arg1, class Arg2, class Arg3>
|
450
|
-
struct bind_traits<R(Arg1, Arg2, Arg3)> {
|
451
|
-
typedef R(&type)(Arg1, Arg2, Arg3);
|
452
|
-
};
|
453
|
-
|
454
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4>
|
455
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4)> {
|
456
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4);
|
457
|
-
};
|
458
|
-
|
459
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
|
460
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5)> {
|
461
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5);
|
462
|
-
};
|
463
|
-
|
464
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
|
465
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
|
466
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
|
467
|
-
};
|
468
|
-
|
469
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
|
470
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
|
471
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
|
472
|
-
};
|
473
|
-
|
474
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8>
|
475
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
|
476
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8);
|
477
|
-
};
|
478
|
-
|
479
|
-
template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9>
|
480
|
-
struct bind_traits<R(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
|
481
|
-
typedef R(&type)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9);
|
482
|
-
};
|
483
|
-
|
484
|
-
template<class T>
|
485
|
-
struct bind_traits<reference_wrapper<T> >{
|
486
|
-
typedef T& type;
|
487
|
-
};
|
488
|
-
|
489
|
-
template<class T>
|
490
|
-
struct bind_traits<const reference_wrapper<T> >{
|
491
|
-
typedef T& type;
|
492
|
-
};
|
493
|
-
|
494
|
-
template<>
|
495
|
-
struct bind_traits<void> {
|
496
|
-
typedef void type;
|
497
|
-
};
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
template <
|
502
|
-
class T0 = null_type, class T1 = null_type, class T2 = null_type,
|
503
|
-
class T3 = null_type, class T4 = null_type, class T5 = null_type,
|
504
|
-
class T6 = null_type, class T7 = null_type, class T8 = null_type,
|
505
|
-
class T9 = null_type
|
506
|
-
>
|
507
|
-
struct bind_tuple_mapper {
|
508
|
-
typedef
|
509
|
-
tuple<typename bind_traits<T0>::type,
|
510
|
-
typename bind_traits<T1>::type,
|
511
|
-
typename bind_traits<T2>::type,
|
512
|
-
typename bind_traits<T3>::type,
|
513
|
-
typename bind_traits<T4>::type,
|
514
|
-
typename bind_traits<T5>::type,
|
515
|
-
typename bind_traits<T6>::type,
|
516
|
-
typename bind_traits<T7>::type,
|
517
|
-
typename bind_traits<T8>::type,
|
518
|
-
typename bind_traits<T9>::type> type;
|
519
|
-
};
|
520
|
-
|
521
|
-
// bind_traits, except map const T& -> const T
|
522
|
-
// this is needed e.g. in currying. Const reference arguments can
|
523
|
-
// refer to temporaries, so it is not safe to store them as references.
|
524
|
-
template <class T> struct remove_const_reference {
|
525
|
-
typedef typename bind_traits<T>::type type;
|
526
|
-
};
|
527
|
-
|
528
|
-
template <class T> struct remove_const_reference<const T&> {
|
529
|
-
typedef const T type;
|
530
|
-
};
|
531
|
-
|
532
|
-
|
533
|
-
// maps the bind argument types to the resulting lambda functor type
|
534
|
-
template <
|
535
|
-
class T0 = null_type, class T1 = null_type, class T2 = null_type,
|
536
|
-
class T3 = null_type, class T4 = null_type, class T5 = null_type,
|
537
|
-
class T6 = null_type, class T7 = null_type, class T8 = null_type,
|
538
|
-
class T9 = null_type
|
539
|
-
>
|
540
|
-
class bind_type_generator {
|
541
|
-
|
542
|
-
typedef typename
|
543
|
-
detail::bind_tuple_mapper<
|
544
|
-
T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
|
545
|
-
>::type args_t;
|
546
|
-
|
547
|
-
BOOST_STATIC_CONSTANT(int, nof_elems = boost::tuples::length<args_t>::value);
|
548
|
-
|
549
|
-
typedef
|
550
|
-
action<
|
551
|
-
nof_elems,
|
552
|
-
function_action<nof_elems>
|
553
|
-
> action_type;
|
554
|
-
|
555
|
-
public:
|
556
|
-
typedef
|
557
|
-
lambda_functor<
|
558
|
-
lambda_functor_base<
|
559
|
-
action_type,
|
560
|
-
args_t
|
561
|
-
>
|
562
|
-
> type;
|
563
|
-
|
564
|
-
};
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
} // detail
|
569
|
-
|
570
|
-
template <class T> inline const T& make_const(const T& t) { return t; }
|
571
|
-
|
572
|
-
|
573
|
-
} // end of namespace lambda
|
574
|
-
} // end of namespace boost
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
#endif // BOOST_LAMBDA_TRAITS_HPP
|