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,29 +0,0 @@
|
|
1
|
-
|
2
|
-
// Copyright 2012 Daniel James.
|
3
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
4
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
5
|
-
|
6
|
-
#if !defined(BOOST_DETAIL_CONTAINER_FWD_0X_HPP)
|
7
|
-
#define BOOST_DETAIL_CONTAINER_FWD_0X_HPP
|
8
|
-
|
9
|
-
#include <boost/detail/container_fwd.hpp>
|
10
|
-
|
11
|
-
// std::array
|
12
|
-
|
13
|
-
#if !defined(BOOST_NO_CXX11_HDR_ARRAY)
|
14
|
-
# include <array>
|
15
|
-
#endif
|
16
|
-
|
17
|
-
// std::tuple
|
18
|
-
|
19
|
-
#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
|
20
|
-
# include <tuple>
|
21
|
-
#endif
|
22
|
-
|
23
|
-
// std::shared_ptr/std::unique_ptr
|
24
|
-
|
25
|
-
#if !defined(BOOST_NO_CXX11_HDR_MEMORY)
|
26
|
-
# include <memory>
|
27
|
-
#endif
|
28
|
-
|
29
|
-
#endif
|
data/ext/boost/lambda/core.hpp
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
// -- core.hpp -- Boost Lambda Library -------------------------------------
|
2
|
-
//
|
3
|
-
// Copyright (C) 2000 Gary Powell (powellg@amazon.com)
|
4
|
-
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
|
5
|
-
//
|
6
|
-
// Distributed under the Boost Software License, Version 1.0. (See
|
7
|
-
// accompanying file LICENSE_1_0.txt or copy at
|
8
|
-
// http://www.boost.org/LICENSE_1_0.txt)
|
9
|
-
//
|
10
|
-
// For more information, see www.boost.org
|
11
|
-
//
|
12
|
-
// Includes the core of LL, without any real features for client:
|
13
|
-
//
|
14
|
-
// tuples, lambda functors, return type deduction templates,
|
15
|
-
// argument substitution mechanism (select functions)
|
16
|
-
//
|
17
|
-
// Some functionality comes as well:
|
18
|
-
// Assignment and subscript operators, as well as function
|
19
|
-
// call operator for placeholder variables.
|
20
|
-
// -------------------------------------------------------------------------
|
21
|
-
|
22
|
-
#ifndef BOOST_LAMBDA_CORE_HPP
|
23
|
-
#define BOOST_LAMBDA_CORE_HPP
|
24
|
-
|
25
|
-
#include "boost/type_traits/transform_traits.hpp"
|
26
|
-
#include "boost/type_traits/cv_traits.hpp"
|
27
|
-
|
28
|
-
#include "boost/tuple/tuple.hpp"
|
29
|
-
|
30
|
-
// inject some of the tuple names into lambda
|
31
|
-
namespace boost {
|
32
|
-
namespace lambda {
|
33
|
-
|
34
|
-
using ::boost::tuples::tuple;
|
35
|
-
using ::boost::tuples::null_type;
|
36
|
-
|
37
|
-
} // lambda
|
38
|
-
} // boost
|
39
|
-
|
40
|
-
#include "boost/lambda/detail/lambda_config.hpp"
|
41
|
-
#include "boost/lambda/detail/lambda_fwd.hpp"
|
42
|
-
|
43
|
-
#include "boost/lambda/detail/arity_code.hpp"
|
44
|
-
#include "boost/lambda/detail/actions.hpp"
|
45
|
-
|
46
|
-
#include "boost/lambda/detail/lambda_traits.hpp"
|
47
|
-
|
48
|
-
#include "boost/lambda/detail/function_adaptors.hpp"
|
49
|
-
#include "boost/lambda/detail/return_type_traits.hpp"
|
50
|
-
|
51
|
-
#include "boost/lambda/detail/select_functions.hpp"
|
52
|
-
|
53
|
-
#include "boost/lambda/detail/lambda_functor_base.hpp"
|
54
|
-
|
55
|
-
#include "boost/lambda/detail/lambda_functors.hpp"
|
56
|
-
|
57
|
-
#include "boost/lambda/detail/ret.hpp"
|
58
|
-
|
59
|
-
namespace boost {
|
60
|
-
namespace lambda {
|
61
|
-
|
62
|
-
namespace {
|
63
|
-
|
64
|
-
// These are constants types and need to be initialised
|
65
|
-
boost::lambda::placeholder1_type free1 = boost::lambda::placeholder1_type();
|
66
|
-
boost::lambda::placeholder2_type free2 = boost::lambda::placeholder2_type();
|
67
|
-
boost::lambda::placeholder3_type free3 = boost::lambda::placeholder3_type();
|
68
|
-
|
69
|
-
boost::lambda::placeholder1_type& _1 = free1;
|
70
|
-
boost::lambda::placeholder2_type& _2 = free2;
|
71
|
-
boost::lambda::placeholder3_type& _3 = free3;
|
72
|
-
// _1, _2, ... naming scheme by Peter Dimov
|
73
|
-
} // unnamed
|
74
|
-
|
75
|
-
} // lambda
|
76
|
-
} // boost
|
77
|
-
|
78
|
-
|
79
|
-
#endif //BOOST_LAMBDA_CORE_HPP
|
@@ -1,174 +0,0 @@
|
|
1
|
-
// -- Boost Lambda Library - actions.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 www.boost.org
|
10
|
-
|
11
|
-
// ----------------------------------------------------------------
|
12
|
-
|
13
|
-
#ifndef BOOST_LAMBDA_ACTIONS_HPP
|
14
|
-
#define BOOST_LAMBDA_ACTIONS_HPP
|
15
|
-
|
16
|
-
namespace boost {
|
17
|
-
namespace lambda {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
template<int Arity, class Act> class action;
|
22
|
-
|
23
|
-
// these need to be defined here, since the corresponding lambda
|
24
|
-
// functions are members of lambda_functor classes
|
25
|
-
|
26
|
-
class assignment_action {};
|
27
|
-
class subscript_action {};
|
28
|
-
|
29
|
-
template <class Action> class other_action;
|
30
|
-
|
31
|
-
// action for specifying the explicit return type
|
32
|
-
template <class RET> class explicit_return_type_action {};
|
33
|
-
|
34
|
-
// action for preventing the expansion of a lambda expression
|
35
|
-
struct protect_action {};
|
36
|
-
|
37
|
-
// must be defined here, comma is a special case
|
38
|
-
struct comma_action {};
|
39
|
-
|
40
|
-
|
41
|
-
// actions, for which the existence of protect is checked in return type
|
42
|
-
// deduction.
|
43
|
-
|
44
|
-
template <class Action> struct is_protectable {
|
45
|
-
BOOST_STATIC_CONSTANT(bool, value = false);
|
46
|
-
};
|
47
|
-
|
48
|
-
// NOTE: comma action is protectable. Other protectable actions
|
49
|
-
// are listed in operator_actions.hpp
|
50
|
-
|
51
|
-
template<> struct is_protectable<other_action<comma_action> > {
|
52
|
-
BOOST_STATIC_CONSTANT(bool, value = true);
|
53
|
-
};
|
54
|
-
|
55
|
-
|
56
|
-
namespace detail {
|
57
|
-
|
58
|
-
// this type is used in return type deductions to signal that deduction
|
59
|
-
// did not find a result. It does not necessarily mean an error, it commonly
|
60
|
-
// means that something else should be tried.
|
61
|
-
class unspecified {};
|
62
|
-
}
|
63
|
-
|
64
|
-
// function action is a special case: bind functions can be called with
|
65
|
-
// the return type specialized explicitly e.g. bind<int>(foo);
|
66
|
-
// If this call syntax is used, the return type is stored in the latter
|
67
|
-
// argument of function_action template. Otherwise the argument gets the type
|
68
|
-
// 'unspecified'.
|
69
|
-
// This argument is only relevant in the return type deduction code
|
70
|
-
template <int I, class Result_type = detail::unspecified>
|
71
|
-
class function_action {};
|
72
|
-
|
73
|
-
template<class T> class function_action<1, T> {
|
74
|
-
public:
|
75
|
-
template<class RET, class A1>
|
76
|
-
static RET apply(A1& a1) {
|
77
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
78
|
-
template apply<RET>(a1);
|
79
|
-
}
|
80
|
-
};
|
81
|
-
|
82
|
-
template<class T> class function_action<2, T> {
|
83
|
-
public:
|
84
|
-
template<class RET, class A1, class A2>
|
85
|
-
static RET apply(A1& a1, A2& a2) {
|
86
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
87
|
-
template apply<RET>(a1, a2);
|
88
|
-
}
|
89
|
-
};
|
90
|
-
|
91
|
-
template<class T> class function_action<3, T> {
|
92
|
-
public:
|
93
|
-
template<class RET, class A1, class A2, class A3>
|
94
|
-
static RET apply(A1& a1, A2& a2, A3& a3) {
|
95
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
96
|
-
template apply<RET>(a1, a2, a3);
|
97
|
-
}
|
98
|
-
};
|
99
|
-
|
100
|
-
template<class T> class function_action<4, T> {
|
101
|
-
public:
|
102
|
-
template<class RET, class A1, class A2, class A3, class A4>
|
103
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4) {
|
104
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
105
|
-
template apply<RET>(a1, a2, a3, a4);
|
106
|
-
}
|
107
|
-
};
|
108
|
-
|
109
|
-
template<class T> class function_action<5, T> {
|
110
|
-
public:
|
111
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5>
|
112
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
113
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
114
|
-
template apply<RET>(a1, a2, a3, a4, a5);
|
115
|
-
}
|
116
|
-
};
|
117
|
-
|
118
|
-
template<class T> class function_action<6, T> {
|
119
|
-
public:
|
120
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5,
|
121
|
-
class A6>
|
122
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
123
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
124
|
-
template apply<RET>(a1, a2, a3, a4, a5, a6);
|
125
|
-
}
|
126
|
-
};
|
127
|
-
|
128
|
-
template<class T> class function_action<7, T> {
|
129
|
-
public:
|
130
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5,
|
131
|
-
class A6, class A7>
|
132
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
133
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
134
|
-
template apply<RET>(a1, a2, a3, a4, a5, a6, a7);
|
135
|
-
}
|
136
|
-
};
|
137
|
-
|
138
|
-
template<class T> class function_action<8, T> {
|
139
|
-
public:
|
140
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5,
|
141
|
-
class A6, class A7, class A8>
|
142
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
|
143
|
-
A8& a8) {
|
144
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
145
|
-
template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8);
|
146
|
-
}
|
147
|
-
};
|
148
|
-
|
149
|
-
template<class T> class function_action<9, T> {
|
150
|
-
public:
|
151
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5,
|
152
|
-
class A6, class A7, class A8, class A9>
|
153
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
|
154
|
-
A8& a8, A9& a9) {
|
155
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
156
|
-
template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
157
|
-
}
|
158
|
-
};
|
159
|
-
|
160
|
-
template<class T> class function_action<10, T> {
|
161
|
-
public:
|
162
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5,
|
163
|
-
class A6, class A7, class A8, class A9, class A10>
|
164
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7,
|
165
|
-
A8& a8, A9& a9, A10& a10) {
|
166
|
-
return function_adaptor<typename boost::remove_cv<A1>::type>::
|
167
|
-
template apply<RET>(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
|
168
|
-
}
|
169
|
-
};
|
170
|
-
|
171
|
-
} // namespace lambda
|
172
|
-
} // namespace boost
|
173
|
-
|
174
|
-
#endif
|
@@ -1,110 +0,0 @@
|
|
1
|
-
// -- 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_ARITY_CODE_HPP
|
14
|
-
#define BOOST_LAMBDA_ARITY_CODE_HPP
|
15
|
-
|
16
|
-
#include "boost/type_traits/cv_traits.hpp"
|
17
|
-
#include "boost/type_traits/transform_traits.hpp"
|
18
|
-
|
19
|
-
namespace boost {
|
20
|
-
namespace lambda {
|
21
|
-
|
22
|
-
// These constants state, whether a lambda_functor instantiation results from
|
23
|
-
// an expression which contains no placeholders (NONE),
|
24
|
-
// only free1 placeholders (FIRST),
|
25
|
-
// free2 placeholders and maybe free1 placeholders (SECOND),
|
26
|
-
// free3 and maybe free1 and free2 placeholders (THIRD),
|
27
|
-
// freeE placeholders and maybe free1 and free2 (EXCEPTION).
|
28
|
-
// RETHROW means, that a rethrow expression is used somewhere in the lambda_functor.
|
29
|
-
|
30
|
-
enum { NONE = 0x00, // Notice we are using bits as flags here.
|
31
|
-
FIRST = 0x01,
|
32
|
-
SECOND = 0x02,
|
33
|
-
THIRD = 0x04,
|
34
|
-
EXCEPTION = 0x08,
|
35
|
-
RETHROW = 0x10};
|
36
|
-
|
37
|
-
|
38
|
-
template<class T>
|
39
|
-
struct get_tuple_arity;
|
40
|
-
|
41
|
-
namespace detail {
|
42
|
-
|
43
|
-
template <class T> struct get_arity_;
|
44
|
-
|
45
|
-
} // end detail;
|
46
|
-
|
47
|
-
template <class T> struct get_arity {
|
48
|
-
|
49
|
-
BOOST_STATIC_CONSTANT(int, value = detail::get_arity_<typename boost::remove_cv<typename boost::remove_reference<T>::type>::type>::value);
|
50
|
-
|
51
|
-
};
|
52
|
-
|
53
|
-
namespace detail {
|
54
|
-
|
55
|
-
template<class T>
|
56
|
-
struct get_arity_ {
|
57
|
-
BOOST_STATIC_CONSTANT(int, value = 0);
|
58
|
-
};
|
59
|
-
|
60
|
-
template<class T>
|
61
|
-
struct get_arity_<lambda_functor<T> > {
|
62
|
-
BOOST_STATIC_CONSTANT(int, value = get_arity<T>::value);
|
63
|
-
};
|
64
|
-
|
65
|
-
template<class Action, class Args>
|
66
|
-
struct get_arity_<lambda_functor_base<Action, Args> > {
|
67
|
-
BOOST_STATIC_CONSTANT(int, value = get_tuple_arity<Args>::value);
|
68
|
-
};
|
69
|
-
|
70
|
-
template<int I>
|
71
|
-
struct get_arity_<placeholder<I> > {
|
72
|
-
BOOST_STATIC_CONSTANT(int, value = I);
|
73
|
-
};
|
74
|
-
|
75
|
-
} // detail
|
76
|
-
|
77
|
-
template<class T>
|
78
|
-
struct get_tuple_arity {
|
79
|
-
BOOST_STATIC_CONSTANT(int, value = get_arity<typename T::head_type>::value | get_tuple_arity<typename T::tail_type>::value);
|
80
|
-
};
|
81
|
-
|
82
|
-
|
83
|
-
template<>
|
84
|
-
struct get_tuple_arity<null_type> {
|
85
|
-
BOOST_STATIC_CONSTANT(int, value = 0);
|
86
|
-
};
|
87
|
-
|
88
|
-
|
89
|
-
// Does T have placeholder<I> as it's subexpression?
|
90
|
-
|
91
|
-
template<class T, int I>
|
92
|
-
struct has_placeholder {
|
93
|
-
BOOST_STATIC_CONSTANT(bool, value = (get_arity<T>::value & I) != 0);
|
94
|
-
};
|
95
|
-
|
96
|
-
template<int I, int J>
|
97
|
-
struct includes_placeholder {
|
98
|
-
BOOST_STATIC_CONSTANT(bool, value = (J & I) != 0);
|
99
|
-
};
|
100
|
-
|
101
|
-
template<int I, int J>
|
102
|
-
struct lacks_placeholder {
|
103
|
-
BOOST_STATIC_CONSTANT(bool, value = ((J & I) == 0));
|
104
|
-
};
|
105
|
-
|
106
|
-
|
107
|
-
} // namespace lambda
|
108
|
-
} // namespace boost
|
109
|
-
|
110
|
-
#endif
|
@@ -1,789 +0,0 @@
|
|
1
|
-
// Boost Lambda Library - function_adaptors.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 www.boost.org
|
10
|
-
|
11
|
-
|
12
|
-
#ifndef BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP
|
13
|
-
#define BOOST_LAMBDA_FUNCTION_ADAPTORS_HPP
|
14
|
-
|
15
|
-
#include "boost/mpl/has_xxx.hpp"
|
16
|
-
#include "boost/tuple/tuple.hpp"
|
17
|
-
#include "boost/type_traits/same_traits.hpp"
|
18
|
-
#include "boost/type_traits/remove_reference.hpp"
|
19
|
-
#include "boost/type_traits/remove_cv.hpp"
|
20
|
-
#include "boost/type_traits/add_const.hpp"
|
21
|
-
#include "boost/type_traits/add_volatile.hpp"
|
22
|
-
#include "boost/utility/result_of.hpp"
|
23
|
-
|
24
|
-
namespace boost {
|
25
|
-
namespace lambda {
|
26
|
-
|
27
|
-
namespace detail {
|
28
|
-
|
29
|
-
BOOST_MPL_HAS_XXX_TEMPLATE_DEF(sig)
|
30
|
-
|
31
|
-
template<class Tuple>
|
32
|
-
struct remove_references_from_elements {
|
33
|
-
typedef typename boost::tuples::cons<
|
34
|
-
typename boost::remove_reference<typename Tuple::head_type>::type,
|
35
|
-
typename remove_references_from_elements<typename Tuple::tail_type>::type
|
36
|
-
> type;
|
37
|
-
};
|
38
|
-
|
39
|
-
template<>
|
40
|
-
struct remove_references_from_elements<boost::tuples::null_type> {
|
41
|
-
typedef boost::tuples::null_type type;
|
42
|
-
};
|
43
|
-
|
44
|
-
}
|
45
|
-
|
46
|
-
template <class Func> struct function_adaptor {
|
47
|
-
|
48
|
-
typedef typename detail::remove_reference_and_cv<Func>::type plainF;
|
49
|
-
|
50
|
-
#if !defined(BOOST_NO_RESULT_OF)
|
51
|
-
// Support functors that use the boost::result_of return type convention.
|
52
|
-
template<class Tuple, int Length, bool HasSig>
|
53
|
-
struct result_converter;
|
54
|
-
template<class Tuple, int Length>
|
55
|
-
struct result_converter<Tuple, Length, true>
|
56
|
-
: plainF::template sig<
|
57
|
-
typename detail::remove_references_from_elements<Tuple>::type
|
58
|
-
>
|
59
|
-
{};
|
60
|
-
template<class Tuple>
|
61
|
-
struct result_converter<Tuple, 0, false>
|
62
|
-
: result_of<plainF()>
|
63
|
-
{};
|
64
|
-
template<class Tuple>
|
65
|
-
struct result_converter<Tuple, 1, false>
|
66
|
-
: result_of<plainF(
|
67
|
-
typename tuples::element<1, Tuple>::type)
|
68
|
-
>
|
69
|
-
{};
|
70
|
-
template<class Tuple>
|
71
|
-
struct result_converter<Tuple, 2, false>
|
72
|
-
: result_of<plainF(
|
73
|
-
typename tuples::element<1, Tuple>::type,
|
74
|
-
typename tuples::element<2, Tuple>::type)
|
75
|
-
>
|
76
|
-
{};
|
77
|
-
template<class Tuple>
|
78
|
-
struct result_converter<Tuple, 3, false>
|
79
|
-
: result_of<plainF(
|
80
|
-
typename tuples::element<1, Tuple>::type,
|
81
|
-
typename tuples::element<2, Tuple>::type,
|
82
|
-
typename tuples::element<3, Tuple>::type)
|
83
|
-
>
|
84
|
-
{};
|
85
|
-
template<class Tuple>
|
86
|
-
struct result_converter<Tuple, 4, false>
|
87
|
-
: result_of<plainF(
|
88
|
-
typename tuples::element<1, Tuple>::type,
|
89
|
-
typename tuples::element<2, Tuple>::type,
|
90
|
-
typename tuples::element<3, Tuple>::type,
|
91
|
-
typename tuples::element<4, Tuple>::type)
|
92
|
-
>
|
93
|
-
{};
|
94
|
-
template<class Tuple>
|
95
|
-
struct result_converter<Tuple, 5, false>
|
96
|
-
: result_of<plainF(
|
97
|
-
typename tuples::element<1, Tuple>::type,
|
98
|
-
typename tuples::element<2, Tuple>::type,
|
99
|
-
typename tuples::element<3, Tuple>::type,
|
100
|
-
typename tuples::element<4, Tuple>::type,
|
101
|
-
typename tuples::element<5, Tuple>::type)
|
102
|
-
>
|
103
|
-
{};
|
104
|
-
template<class Tuple>
|
105
|
-
struct result_converter<Tuple, 6, false>
|
106
|
-
: result_of<plainF(
|
107
|
-
typename tuples::element<1, Tuple>::type,
|
108
|
-
typename tuples::element<2, Tuple>::type,
|
109
|
-
typename tuples::element<3, Tuple>::type,
|
110
|
-
typename tuples::element<4, Tuple>::type,
|
111
|
-
typename tuples::element<5, Tuple>::type,
|
112
|
-
typename tuples::element<6, Tuple>::type)
|
113
|
-
>
|
114
|
-
{};
|
115
|
-
template<class Tuple>
|
116
|
-
struct result_converter<Tuple, 7, false>
|
117
|
-
: result_of<plainF(
|
118
|
-
typename tuples::element<1, Tuple>::type,
|
119
|
-
typename tuples::element<2, Tuple>::type,
|
120
|
-
typename tuples::element<3, Tuple>::type,
|
121
|
-
typename tuples::element<4, Tuple>::type,
|
122
|
-
typename tuples::element<5, Tuple>::type,
|
123
|
-
typename tuples::element<6, Tuple>::type,
|
124
|
-
typename tuples::element<7, Tuple>::type)
|
125
|
-
>
|
126
|
-
{};
|
127
|
-
template<class Tuple>
|
128
|
-
struct result_converter<Tuple, 8, false>
|
129
|
-
: result_of<plainF(
|
130
|
-
typename tuples::element<1, Tuple>::type,
|
131
|
-
typename tuples::element<2, Tuple>::type,
|
132
|
-
typename tuples::element<3, Tuple>::type,
|
133
|
-
typename tuples::element<4, Tuple>::type,
|
134
|
-
typename tuples::element<5, Tuple>::type,
|
135
|
-
typename tuples::element<6, Tuple>::type,
|
136
|
-
typename tuples::element<7, Tuple>::type,
|
137
|
-
typename tuples::element<8, Tuple>::type)
|
138
|
-
>
|
139
|
-
{};
|
140
|
-
template<class Tuple>
|
141
|
-
struct result_converter<Tuple, 9, false>
|
142
|
-
: result_of<plainF(
|
143
|
-
typename tuples::element<1, Tuple>::type,
|
144
|
-
typename tuples::element<2, Tuple>::type,
|
145
|
-
typename tuples::element<3, Tuple>::type,
|
146
|
-
typename tuples::element<4, Tuple>::type,
|
147
|
-
typename tuples::element<5, Tuple>::type,
|
148
|
-
typename tuples::element<6, Tuple>::type,
|
149
|
-
typename tuples::element<7, Tuple>::type,
|
150
|
-
typename tuples::element<8, Tuple>::type,
|
151
|
-
typename tuples::element<9, Tuple>::type)
|
152
|
-
>
|
153
|
-
{};
|
154
|
-
|
155
|
-
// we do not know the return type off-hand, we must ask it from Func
|
156
|
-
// To sig we pass a cons list, where the head is the function object type
|
157
|
-
// itself (potentially cv-qualified)
|
158
|
-
// and the tail contains the types of the actual arguments to be passed
|
159
|
-
// to the function object. The arguments can be cv qualified
|
160
|
-
// as well.
|
161
|
-
template <class Args>
|
162
|
-
struct sig
|
163
|
-
: result_converter<
|
164
|
-
Args
|
165
|
-
, tuples::length<typename Args::tail_type>::value
|
166
|
-
, detail::has_sig<plainF>::value
|
167
|
-
>
|
168
|
-
{};
|
169
|
-
#else // BOOST_NO_RESULT_OF
|
170
|
-
|
171
|
-
template <class Args> class sig {
|
172
|
-
typedef typename detail::remove_reference_and_cv<Func>::type plainF;
|
173
|
-
public:
|
174
|
-
typedef typename plainF::template sig<
|
175
|
-
typename detail::remove_references_from_elements<Args>::type
|
176
|
-
>::type type;
|
177
|
-
};
|
178
|
-
#endif
|
179
|
-
|
180
|
-
template<class RET, class A1>
|
181
|
-
static RET apply(A1& a1) {
|
182
|
-
return a1();
|
183
|
-
}
|
184
|
-
template<class RET, class A1, class A2>
|
185
|
-
static RET apply(A1& a1, A2& a2) {
|
186
|
-
return a1(a2);
|
187
|
-
}
|
188
|
-
template<class RET, class A1, class A2, class A3>
|
189
|
-
static RET apply(A1& a1, A2& a2, A3& a3) {
|
190
|
-
return a1(a2, a3);
|
191
|
-
}
|
192
|
-
template<class RET, class A1, class A2, class A3, class A4>
|
193
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4) {
|
194
|
-
return a1(a2, a3, a4);
|
195
|
-
}
|
196
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5>
|
197
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
198
|
-
return a1(a2, a3, a4, a5);
|
199
|
-
}
|
200
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
201
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
202
|
-
return a1(a2, a3, a4, a5, a6);
|
203
|
-
}
|
204
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
|
205
|
-
class A7>
|
206
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
|
207
|
-
A7& a7) {
|
208
|
-
return a1(a2, a3, a4, a5, a6, a7);
|
209
|
-
}
|
210
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
|
211
|
-
class A7, class A8>
|
212
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
|
213
|
-
A7& a7, A8& a8) {
|
214
|
-
return a1(a2, a3, a4, a5, a6, a7, a8);
|
215
|
-
}
|
216
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
|
217
|
-
class A7, class A8, class A9>
|
218
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
|
219
|
-
A7& a7, A8& a8, A9& a9) {
|
220
|
-
return a1(a2, a3, a4, a5, a6, a7, a8, a9);
|
221
|
-
}
|
222
|
-
template<class RET, class A1, class A2, class A3, class A4, class A5, class A6,
|
223
|
-
class A7, class A8, class A9, class A10>
|
224
|
-
static RET apply(A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6,
|
225
|
-
A7& a7, A8& a8, A9& a9, A10& a10) {
|
226
|
-
return a1(a2, a3, a4, a5, a6, a7, a8, a9, a10);
|
227
|
-
}
|
228
|
-
};
|
229
|
-
|
230
|
-
template <class Func> struct function_adaptor<const Func>; // error
|
231
|
-
|
232
|
-
// -- function adaptors with data member access
|
233
|
-
template <class Object, class T>
|
234
|
-
struct function_adaptor<T Object::*> {
|
235
|
-
|
236
|
-
// typedef detail::unspecified type;
|
237
|
-
|
238
|
-
// T can have qualifiers and can be a reference type
|
239
|
-
// We get the return type by adding const, if the object through which
|
240
|
-
// the data member is accessed is const, and finally adding a reference
|
241
|
-
template<class Args> class sig {
|
242
|
-
typedef typename boost::tuples::element<1, Args>::type argument_type;
|
243
|
-
typedef typename boost::remove_reference<
|
244
|
-
argument_type
|
245
|
-
>::type unref_type;
|
246
|
-
|
247
|
-
typedef typename detail::IF<boost::is_const<unref_type>::value,
|
248
|
-
typename boost::add_const<T>::type,
|
249
|
-
T
|
250
|
-
>::RET properly_consted_return_type;
|
251
|
-
|
252
|
-
typedef typename detail::IF<boost::is_volatile<unref_type>::value,
|
253
|
-
typename boost::add_volatile<properly_consted_return_type>::type,
|
254
|
-
properly_consted_return_type
|
255
|
-
>::RET properly_cvd_return_type;
|
256
|
-
|
257
|
-
|
258
|
-
public:
|
259
|
-
typedef typename detail::IF<boost::is_reference<argument_type>::value,
|
260
|
-
typename boost::add_reference<properly_cvd_return_type>::type,
|
261
|
-
typename boost::remove_cv<T>::type
|
262
|
-
>::RET type;
|
263
|
-
};
|
264
|
-
|
265
|
-
template <class RET>
|
266
|
-
static RET apply( T Object::*data, Object& o) {
|
267
|
-
return o.*data;
|
268
|
-
}
|
269
|
-
template <class RET>
|
270
|
-
static RET apply( T Object::*data, const Object& o) {
|
271
|
-
return o.*data;
|
272
|
-
}
|
273
|
-
template <class RET>
|
274
|
-
static RET apply( T Object::*data, volatile Object& o) {
|
275
|
-
return o.*data;
|
276
|
-
}
|
277
|
-
template <class RET>
|
278
|
-
static RET apply( T Object::*data, const volatile Object& o) {
|
279
|
-
return o.*data;
|
280
|
-
}
|
281
|
-
template <class RET>
|
282
|
-
static RET apply( T Object::*data, Object* o) {
|
283
|
-
return o->*data;
|
284
|
-
}
|
285
|
-
template <class RET>
|
286
|
-
static RET apply( T Object::*data, const Object* o) {
|
287
|
-
return o->*data;
|
288
|
-
}
|
289
|
-
template <class RET>
|
290
|
-
static RET apply( T Object::*data, volatile Object* o) {
|
291
|
-
return o->*data;
|
292
|
-
}
|
293
|
-
template <class RET>
|
294
|
-
static RET apply( T Object::*data, const volatile Object* o) {
|
295
|
-
return o->*data;
|
296
|
-
}
|
297
|
-
};
|
298
|
-
|
299
|
-
// -- function adaptors with 1 argument apply
|
300
|
-
|
301
|
-
template <class Result>
|
302
|
-
struct function_adaptor<Result (void)> {
|
303
|
-
|
304
|
-
template<class T> struct sig { typedef Result type; };
|
305
|
-
template <class RET>
|
306
|
-
static Result apply(Result (*func)()) {
|
307
|
-
return func();
|
308
|
-
}
|
309
|
-
};
|
310
|
-
|
311
|
-
template <class Result>
|
312
|
-
struct function_adaptor<Result (*)(void)> {
|
313
|
-
|
314
|
-
template<class T> struct sig { typedef Result type; };
|
315
|
-
template <class RET>
|
316
|
-
static Result apply(Result (*func)()) {
|
317
|
-
return func();
|
318
|
-
}
|
319
|
-
};
|
320
|
-
|
321
|
-
|
322
|
-
// -- function adaptors with 2 argument apply
|
323
|
-
template <class Object, class Result>
|
324
|
-
struct function_adaptor<Result (Object::*)() const> {
|
325
|
-
|
326
|
-
template<class T> struct sig { typedef Result type; };
|
327
|
-
template <class RET>
|
328
|
-
static Result apply( Result (Object::*func)() const, const Object* o) {
|
329
|
-
return (o->*func)();
|
330
|
-
}
|
331
|
-
template <class RET>
|
332
|
-
static Result apply( Result (Object::*func)() const, const Object& o) {
|
333
|
-
return (o.*func)();
|
334
|
-
}
|
335
|
-
};
|
336
|
-
|
337
|
-
template <class Object, class Result>
|
338
|
-
struct function_adaptor<Result (Object::*)()> {
|
339
|
-
|
340
|
-
template<class T> struct sig { typedef Result type; };
|
341
|
-
template <class RET>
|
342
|
-
static Result apply( Result (Object::*func)(), Object* o) {
|
343
|
-
return (o->*func)();
|
344
|
-
}
|
345
|
-
template <class RET>
|
346
|
-
static Result apply( Result (Object::*func)(), Object& o) {
|
347
|
-
return (o.*func)();
|
348
|
-
}
|
349
|
-
};
|
350
|
-
|
351
|
-
template <class Arg1, class Result>
|
352
|
-
struct function_adaptor<Result (Arg1)> {
|
353
|
-
|
354
|
-
template<class T> struct sig { typedef Result type; };
|
355
|
-
template <class RET, class A1>
|
356
|
-
static Result apply(Result (*func)(Arg1), A1& a1) {
|
357
|
-
return func(a1);
|
358
|
-
}
|
359
|
-
};
|
360
|
-
|
361
|
-
template <class Arg1, class Result>
|
362
|
-
struct function_adaptor<Result (*)(Arg1)> {
|
363
|
-
|
364
|
-
template<class T> struct sig { typedef Result type; };
|
365
|
-
template <class RET, class A1>
|
366
|
-
static Result apply(Result (*func)(Arg1), A1& a1) {
|
367
|
-
return func(a1);
|
368
|
-
}
|
369
|
-
};
|
370
|
-
|
371
|
-
|
372
|
-
// -- function adaptors with 3 argument apply
|
373
|
-
template <class Object, class Arg1, class Result>
|
374
|
-
struct function_adaptor<Result (Object::*)(Arg1) const> {
|
375
|
-
|
376
|
-
template<class T> struct sig { typedef Result type; };
|
377
|
-
template <class RET, class A1>
|
378
|
-
static Result apply( Result (Object::*func)(Arg1) const, const Object* o,
|
379
|
-
A1& a1) {
|
380
|
-
return (o->*func)(a1);
|
381
|
-
}
|
382
|
-
template <class RET, class A1>
|
383
|
-
static Result apply( Result (Object::*func)(Arg1) const, const Object& o,
|
384
|
-
A1& a1) {
|
385
|
-
return (o.*func)(a1);
|
386
|
-
}
|
387
|
-
};
|
388
|
-
|
389
|
-
template <class Object, class Arg1, class Result>
|
390
|
-
struct function_adaptor<Result (Object::*)(Arg1)> {
|
391
|
-
|
392
|
-
template<class T> struct sig { typedef Result type; };
|
393
|
-
template <class RET, class A1>
|
394
|
-
static Result apply( Result (Object::*func)(Arg1), Object* o, A1& a1) {
|
395
|
-
return (o->*func)(a1);
|
396
|
-
}
|
397
|
-
template <class RET, class A1>
|
398
|
-
static Result apply( Result (Object::*func)(Arg1), Object& o, A1& a1) {
|
399
|
-
return (o.*func)(a1);
|
400
|
-
}
|
401
|
-
};
|
402
|
-
|
403
|
-
template <class Arg1, class Arg2, class Result>
|
404
|
-
struct function_adaptor<Result (Arg1, Arg2)> {
|
405
|
-
|
406
|
-
template<class T> struct sig { typedef Result type; };
|
407
|
-
template <class RET, class A1, class A2>
|
408
|
-
static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) {
|
409
|
-
return func(a1, a2);
|
410
|
-
}
|
411
|
-
};
|
412
|
-
|
413
|
-
template <class Arg1, class Arg2, class Result>
|
414
|
-
struct function_adaptor<Result (*)(Arg1, Arg2)> {
|
415
|
-
|
416
|
-
template<class T> struct sig { typedef Result type; };
|
417
|
-
template <class RET, class A1, class A2>
|
418
|
-
static Result apply(Result (*func)(Arg1, Arg2), A1& a1, A2& a2) {
|
419
|
-
return func(a1, a2);
|
420
|
-
}
|
421
|
-
};
|
422
|
-
|
423
|
-
|
424
|
-
// -- function adaptors with 4 argument apply
|
425
|
-
template <class Object, class Arg1, class Arg2, class Result>
|
426
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2) const> {
|
427
|
-
|
428
|
-
template<class T> struct sig { typedef Result type; };
|
429
|
-
template <class RET, class A1, class A2>
|
430
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object* o, A1& a1, A2& a2) {
|
431
|
-
return (o->*func)(a1, a2);
|
432
|
-
}
|
433
|
-
template <class RET, class A1, class A2>
|
434
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2) const, const Object& o, A1& a1, A2& a2) {
|
435
|
-
return (o.*func)(a1, a2);
|
436
|
-
}
|
437
|
-
};
|
438
|
-
|
439
|
-
template <class Object, class Arg1, class Arg2, class Result>
|
440
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2)> {
|
441
|
-
|
442
|
-
template<class T> struct sig { typedef Result type; };
|
443
|
-
template <class RET, class A1, class A2>
|
444
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2), Object* o, A1& a1, A2& a2) {
|
445
|
-
return (o->*func)(a1, a2);
|
446
|
-
}
|
447
|
-
template <class RET, class A1, class A2>
|
448
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2), Object& o, A1& a1, A2& a2) {
|
449
|
-
return (o.*func)(a1, a2);
|
450
|
-
}
|
451
|
-
};
|
452
|
-
|
453
|
-
template <class Arg1, class Arg2, class Arg3, class Result>
|
454
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3)> {
|
455
|
-
|
456
|
-
template<class T> struct sig { typedef Result type; };
|
457
|
-
template <class RET, class A1, class A2, class A3>
|
458
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) {
|
459
|
-
return func(a1, a2, a3);
|
460
|
-
}
|
461
|
-
};
|
462
|
-
|
463
|
-
template <class Arg1, class Arg2, class Arg3, class Result>
|
464
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3)> {
|
465
|
-
|
466
|
-
template<class T> struct sig { typedef Result type; };
|
467
|
-
template <class RET, class A1, class A2, class A3>
|
468
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3), A1& a1, A2& a2, A3& a3) {
|
469
|
-
return func(a1, a2, a3);
|
470
|
-
}
|
471
|
-
};
|
472
|
-
|
473
|
-
|
474
|
-
// -- function adaptors with 5 argument apply
|
475
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Result>
|
476
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3) const> {
|
477
|
-
|
478
|
-
template<class T> struct sig { typedef Result type; };
|
479
|
-
template <class RET, class A1, class A2, class A3>
|
480
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object* o, A1& a1, A2& a2, A3& a3) {
|
481
|
-
return (o->*func)(a1, a2, a3);
|
482
|
-
}
|
483
|
-
template <class RET, class A1, class A2, class A3>
|
484
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3) const, const Object& o, A1& a1, A2& a2, A3& a3) {
|
485
|
-
return (o.*func)(a1, a2, a3);
|
486
|
-
}
|
487
|
-
};
|
488
|
-
|
489
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Result>
|
490
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3)> {
|
491
|
-
|
492
|
-
template<class T> struct sig { typedef Result type; };
|
493
|
-
template <class RET, class A1, class A2, class A3>
|
494
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object* o, A1& a1, A2& a2, A3& a3) {
|
495
|
-
return (o->*func)(a1, a2, a3);
|
496
|
-
}
|
497
|
-
template <class RET, class A1, class A2, class A3>
|
498
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3), Object& o, A1& a1, A2& a2, A3& a3) {
|
499
|
-
return (o.*func)(a1, a2, a3);
|
500
|
-
}
|
501
|
-
};
|
502
|
-
|
503
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>
|
504
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4)> {
|
505
|
-
|
506
|
-
template<class T> struct sig { typedef Result type; };
|
507
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
508
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) {
|
509
|
-
return func(a1, a2, a3, a4);
|
510
|
-
}
|
511
|
-
};
|
512
|
-
|
513
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Result>
|
514
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4)> {
|
515
|
-
|
516
|
-
template<class T> struct sig { typedef Result type; };
|
517
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
518
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4), A1& a1, A2& a2, A3& a3, A4& a4) {
|
519
|
-
return func(a1, a2, a3, a4);
|
520
|
-
}
|
521
|
-
};
|
522
|
-
|
523
|
-
|
524
|
-
// -- function adaptors with 6 argument apply
|
525
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>
|
526
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4) const> {
|
527
|
-
|
528
|
-
template<class T> struct sig { typedef Result type; };
|
529
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
530
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4) {
|
531
|
-
return (o->*func)(a1, a2, a3, a4);
|
532
|
-
}
|
533
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
534
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4) {
|
535
|
-
return (o.*func)(a1, a2, a3, a4);
|
536
|
-
}
|
537
|
-
};
|
538
|
-
|
539
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Result>
|
540
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4)> {
|
541
|
-
|
542
|
-
template<class T> struct sig { typedef Result type; };
|
543
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
544
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object* o, A1& a1, A2& a2, A3& a3, A4& a4) {
|
545
|
-
return (o->*func)(a1, a2, a3, a4);
|
546
|
-
}
|
547
|
-
template <class RET, class A1, class A2, class A3, class A4>
|
548
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4), Object& o, A1& a1, A2& a2, A3& a3, A4& a4) {
|
549
|
-
return (o.*func)(a1, a2, a3, a4);
|
550
|
-
}
|
551
|
-
};
|
552
|
-
|
553
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
|
554
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5)> {
|
555
|
-
|
556
|
-
template<class T> struct sig { typedef Result type; };
|
557
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
558
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
559
|
-
return func(a1, a2, a3, a4, a5);
|
560
|
-
}
|
561
|
-
};
|
562
|
-
|
563
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
|
564
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5)> {
|
565
|
-
|
566
|
-
template<class T> struct sig { typedef Result type; };
|
567
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
568
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
569
|
-
return func(a1, a2, a3, a4, a5);
|
570
|
-
}
|
571
|
-
};
|
572
|
-
|
573
|
-
|
574
|
-
// -- function adaptors with 7 argument apply
|
575
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
|
576
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5) const> {
|
577
|
-
|
578
|
-
template<class T> struct sig { typedef Result type; };
|
579
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
580
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
581
|
-
return (o->*func)(a1, a2, a3, a4, a5);
|
582
|
-
}
|
583
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
584
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
585
|
-
return (o.*func)(a1, a2, a3, a4, a5);
|
586
|
-
}
|
587
|
-
};
|
588
|
-
|
589
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Result>
|
590
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5)> {
|
591
|
-
|
592
|
-
template<class T> struct sig { typedef Result type; };
|
593
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
594
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
595
|
-
return (o->*func)(a1, a2, a3, a4, a5);
|
596
|
-
}
|
597
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5>
|
598
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5) {
|
599
|
-
return (o.*func)(a1, a2, a3, a4, a5);
|
600
|
-
}
|
601
|
-
};
|
602
|
-
|
603
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
|
604
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
|
605
|
-
|
606
|
-
template<class T> struct sig { typedef Result type; };
|
607
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
608
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
609
|
-
return func(a1, a2, a3, a4, a5, a6);
|
610
|
-
}
|
611
|
-
};
|
612
|
-
|
613
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
|
614
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
|
615
|
-
|
616
|
-
template<class T> struct sig { typedef Result type; };
|
617
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
618
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
619
|
-
return func(a1, a2, a3, a4, a5, a6);
|
620
|
-
}
|
621
|
-
};
|
622
|
-
|
623
|
-
|
624
|
-
// -- function adaptors with 8 argument apply
|
625
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
|
626
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const> {
|
627
|
-
|
628
|
-
template<class T> struct sig { typedef Result type; };
|
629
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
630
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
631
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6);
|
632
|
-
}
|
633
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
634
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
635
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6);
|
636
|
-
}
|
637
|
-
};
|
638
|
-
|
639
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Result>
|
640
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)> {
|
641
|
-
|
642
|
-
template<class T> struct sig { typedef Result type; };
|
643
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
644
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
645
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6);
|
646
|
-
}
|
647
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6>
|
648
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6) {
|
649
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6);
|
650
|
-
}
|
651
|
-
};
|
652
|
-
|
653
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
|
654
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
|
655
|
-
|
656
|
-
template<class T> struct sig { typedef Result type; };
|
657
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
658
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
659
|
-
return func(a1, a2, a3, a4, a5, a6, a7);
|
660
|
-
}
|
661
|
-
};
|
662
|
-
|
663
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
|
664
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
|
665
|
-
|
666
|
-
template<class T> struct sig { typedef Result type; };
|
667
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
668
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
669
|
-
return func(a1, a2, a3, a4, a5, a6, a7);
|
670
|
-
}
|
671
|
-
};
|
672
|
-
|
673
|
-
|
674
|
-
// -- function adaptors with 9 argument apply
|
675
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
|
676
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const> {
|
677
|
-
|
678
|
-
template<class T> struct sig { typedef Result type; };
|
679
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
680
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
681
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6, a7);
|
682
|
-
}
|
683
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
684
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
685
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6, a7);
|
686
|
-
}
|
687
|
-
};
|
688
|
-
|
689
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Result>
|
690
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)> {
|
691
|
-
|
692
|
-
template<class T> struct sig { typedef Result type; };
|
693
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
694
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
695
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6, a7);
|
696
|
-
}
|
697
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
698
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7) {
|
699
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6, a7);
|
700
|
-
}
|
701
|
-
};
|
702
|
-
|
703
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
|
704
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
|
705
|
-
|
706
|
-
template<class T> struct sig { typedef Result type; };
|
707
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
708
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
709
|
-
return func(a1, a2, a3, a4, a5, a6, a7, a8);
|
710
|
-
}
|
711
|
-
};
|
712
|
-
|
713
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
|
714
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
|
715
|
-
|
716
|
-
template<class T> struct sig { typedef Result type; };
|
717
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
718
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
719
|
-
return func(a1, a2, a3, a4, a5, a6, a7, a8);
|
720
|
-
}
|
721
|
-
};
|
722
|
-
|
723
|
-
|
724
|
-
// -- function adaptors with 10 argument apply
|
725
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
|
726
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const> {
|
727
|
-
|
728
|
-
template<class T> struct sig { typedef Result type; };
|
729
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
730
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
731
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8);
|
732
|
-
}
|
733
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
734
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8) const, const Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
735
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8);
|
736
|
-
}
|
737
|
-
};
|
738
|
-
|
739
|
-
template <class Object, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Result>
|
740
|
-
struct function_adaptor<Result (Object::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8)> {
|
741
|
-
|
742
|
-
template<class T> struct sig { typedef Result type; };
|
743
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
744
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object* o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
745
|
-
return (o->*func)(a1, a2, a3, a4, a5, a6, a7, a8);
|
746
|
-
}
|
747
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
748
|
-
static Result apply( Result (Object::*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8), Object& o, A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8) {
|
749
|
-
return (o.*func)(a1, a2, a3, a4, a5, a6, a7, a8);
|
750
|
-
}
|
751
|
-
};
|
752
|
-
|
753
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>
|
754
|
-
struct function_adaptor<Result (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
|
755
|
-
|
756
|
-
template<class T> struct sig { typedef Result type; };
|
757
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
|
758
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) {
|
759
|
-
return func(a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
760
|
-
}
|
761
|
-
};
|
762
|
-
|
763
|
-
template <class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7, class Arg8, class Arg9, class Result>
|
764
|
-
struct function_adaptor<Result (*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9)> {
|
765
|
-
|
766
|
-
template<class T> struct sig { typedef Result type; };
|
767
|
-
template <class RET, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
|
768
|
-
static Result apply(Result (*func)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9), A1& a1, A2& a2, A3& a3, A4& a4, A5& a5, A6& a6, A7& a7, A8& a8, A9& a9) {
|
769
|
-
return func(a1, a2, a3, a4, a5, a6, a7, a8, a9);
|
770
|
-
}
|
771
|
-
};
|
772
|
-
|
773
|
-
} // namespace lambda
|
774
|
-
} // namespace boost
|
775
|
-
|
776
|
-
#endif
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|