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.

Files changed (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. 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
@@ -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
-