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,737 +0,0 @@
1
- // Boost Lambda Library -- member_ptr.hpp ---------------------
2
-
3
- // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
4
- // Copyright (C) 2000 Gary Powell (gary.powell@sierra.com)
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
- // --------------------------------------------------------------------------
13
-
14
- #if !defined(BOOST_LAMBDA_MEMBER_PTR_HPP)
15
- #define BOOST_LAMBDA_MEMBER_PTR_HPP
16
-
17
- namespace boost {
18
- namespace lambda {
19
-
20
-
21
- class member_pointer_action {};
22
-
23
-
24
- namespace detail {
25
-
26
- // the boost type_traits member_pointer traits are not enough,
27
- // need to know more details.
28
- template<class T>
29
- struct member_pointer {
30
- typedef typename boost::add_reference<T>::type type;
31
- typedef detail::unspecified class_type;
32
- typedef detail::unspecified qualified_class_type;
33
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
34
- BOOST_STATIC_CONSTANT(bool, is_function_member = false);
35
- };
36
-
37
- template<class T, class U>
38
- struct member_pointer<T U::*> {
39
- typedef typename boost::add_reference<T>::type type;
40
- typedef U class_type;
41
- typedef U qualified_class_type;
42
- BOOST_STATIC_CONSTANT(bool, is_data_member = true);
43
- BOOST_STATIC_CONSTANT(bool, is_function_member = false);
44
- };
45
-
46
- template<class T, class U>
47
- struct member_pointer<const T U::*> {
48
- typedef typename boost::add_reference<const T>::type type;
49
- typedef U class_type;
50
- typedef const U qualified_class_type;
51
- BOOST_STATIC_CONSTANT(bool, is_data_member = true);
52
- BOOST_STATIC_CONSTANT(bool, is_function_member = false);
53
- };
54
-
55
- template<class T, class U>
56
- struct member_pointer<volatile T U::*> {
57
- typedef typename boost::add_reference<volatile T>::type type;
58
- typedef U class_type;
59
- typedef volatile U qualified_class_type;
60
- BOOST_STATIC_CONSTANT(bool, is_data_member = true);
61
- BOOST_STATIC_CONSTANT(bool, is_function_member = false);
62
- };
63
-
64
- template<class T, class U>
65
- struct member_pointer<const volatile T U::*> {
66
- typedef typename boost::add_reference<const volatile T>::type type;
67
- typedef U class_type;
68
- typedef const volatile U qualified_class_type;
69
- BOOST_STATIC_CONSTANT(bool, is_data_member = true);
70
- BOOST_STATIC_CONSTANT(bool, is_function_member = false);
71
- };
72
-
73
- // -- nonconst member functions --
74
- template<class T, class U>
75
- struct member_pointer<T (U::*)()> {
76
- typedef T type;
77
- typedef U class_type;
78
- typedef U qualified_class_type;
79
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
80
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
81
- };
82
- template<class T, class U, class A1>
83
- struct member_pointer<T (U::*)(A1)> {
84
- typedef T type;
85
- typedef U class_type;
86
- typedef U qualified_class_type;
87
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
88
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
89
- };
90
- template<class T, class U, class A1, class A2>
91
- struct member_pointer<T (U::*)(A1, A2)> {
92
- typedef T type;
93
- typedef U class_type;
94
- typedef U qualified_class_type;
95
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
96
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
97
- };
98
- template<class T, class U, class A1, class A2, class A3>
99
- struct member_pointer<T (U::*)(A1, A2, A3)> {
100
- typedef T type;
101
- typedef U class_type;
102
- typedef U qualified_class_type;
103
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
104
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
105
- };
106
- template<class T, class U, class A1, class A2, class A3, class A4>
107
- struct member_pointer<T (U::*)(A1, A2, A3, A4)> {
108
- typedef T type;
109
- typedef U class_type;
110
- typedef U qualified_class_type;
111
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
112
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
113
- };
114
- template<class T, class U, class A1, class A2, class A3, class A4, class A5>
115
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5)> {
116
- typedef T type;
117
- typedef U class_type;
118
- typedef U qualified_class_type;
119
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
120
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
121
- };
122
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
123
- class A6>
124
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6)> {
125
- typedef T type;
126
- typedef U class_type;
127
- typedef U qualified_class_type;
128
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
129
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
130
- };
131
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
132
- class A6, class A7>
133
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7)> {
134
- typedef T type;
135
- typedef U class_type;
136
- typedef U qualified_class_type;
137
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
138
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
139
- };
140
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
141
- class A6, class A7, class A8>
142
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8)> {
143
- typedef T type;
144
- typedef U class_type;
145
- typedef U qualified_class_type;
146
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
147
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
148
- };
149
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
150
- class A6, class A7, class A8, class A9>
151
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9)> {
152
- typedef T type;
153
- typedef U class_type;
154
- typedef U qualified_class_type;
155
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
156
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
157
- };
158
- // -- const member functions --
159
- template<class T, class U>
160
- struct member_pointer<T (U::*)() const> {
161
- typedef T type;
162
- typedef U class_type;
163
- typedef const U qualified_class_type;
164
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
165
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
166
- };
167
- template<class T, class U, class A1>
168
- struct member_pointer<T (U::*)(A1) const> {
169
- typedef T type;
170
- typedef U class_type;
171
- typedef const U qualified_class_type;
172
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
173
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
174
- };
175
- template<class T, class U, class A1, class A2>
176
- struct member_pointer<T (U::*)(A1, A2) const> {
177
- typedef T type;
178
- typedef U class_type;
179
- typedef const U qualified_class_type;
180
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
181
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
182
- };
183
- template<class T, class U, class A1, class A2, class A3>
184
- struct member_pointer<T (U::*)(A1, A2, A3) const> {
185
- typedef T type;
186
- typedef U class_type;
187
- typedef const U qualified_class_type;
188
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
189
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
190
- };
191
- template<class T, class U, class A1, class A2, class A3, class A4>
192
- struct member_pointer<T (U::*)(A1, A2, A3, A4) const> {
193
- typedef T type;
194
- typedef U class_type;
195
- typedef const U qualified_class_type;
196
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
197
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
198
- };
199
- template<class T, class U, class A1, class A2, class A3, class A4, class A5>
200
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const> {
201
- typedef T type;
202
- typedef U class_type;
203
- typedef const U qualified_class_type;
204
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
205
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
206
- };
207
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
208
- class A6>
209
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const> {
210
- typedef T type;
211
- typedef U class_type;
212
- typedef const U qualified_class_type;
213
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
214
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
215
- };
216
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
217
- class A6, class A7>
218
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const> {
219
- typedef T type;
220
- typedef U class_type;
221
- typedef const U qualified_class_type;
222
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
223
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
224
- };
225
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
226
- class A6, class A7, class A8>
227
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const> {
228
- typedef T type;
229
- typedef U class_type;
230
- typedef const U qualified_class_type;
231
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
232
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
233
- };
234
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
235
- class A6, class A7, class A8, class A9>
236
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const> {
237
- typedef T type;
238
- typedef U class_type;
239
- typedef const U qualified_class_type;
240
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
241
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
242
- };
243
- // -- volatile --
244
- template<class T, class U>
245
- struct member_pointer<T (U::*)() volatile> {
246
- typedef T type;
247
- typedef U class_type;
248
- typedef volatile U qualified_class_type;
249
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
250
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
251
- };
252
- template<class T, class U, class A1>
253
- struct member_pointer<T (U::*)(A1) volatile> {
254
- typedef T type;
255
- typedef U class_type;
256
- typedef volatile U qualified_class_type;
257
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
258
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
259
- };
260
- template<class T, class U, class A1, class A2>
261
- struct member_pointer<T (U::*)(A1, A2) volatile> {
262
- typedef T type;
263
- typedef U class_type;
264
- typedef volatile U qualified_class_type;
265
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
266
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
267
- };
268
- template<class T, class U, class A1, class A2, class A3>
269
- struct member_pointer<T (U::*)(A1, A2, A3) volatile> {
270
- typedef T type;
271
- typedef U class_type;
272
- typedef volatile U qualified_class_type;
273
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
274
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
275
- };
276
- template<class T, class U, class A1, class A2, class A3, class A4>
277
- struct member_pointer<T (U::*)(A1, A2, A3, A4) volatile> {
278
- typedef T type;
279
- typedef U class_type;
280
- typedef volatile U qualified_class_type;
281
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
282
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
283
- };
284
- template<class T, class U, class A1, class A2, class A3, class A4, class A5>
285
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) volatile> {
286
- typedef T type;
287
- typedef U class_type;
288
- typedef volatile U qualified_class_type;
289
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
290
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
291
- };
292
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
293
- class A6>
294
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) volatile> {
295
- typedef T type;
296
- typedef U class_type;
297
- typedef volatile U qualified_class_type;
298
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
299
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
300
- };
301
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
302
- class A6, class A7>
303
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) volatile> {
304
- typedef T type;
305
- typedef U class_type;
306
- typedef volatile U qualified_class_type;
307
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
308
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
309
- };
310
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
311
- class A6, class A7, class A8>
312
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) volatile> {
313
- typedef T type;
314
- typedef U class_type;
315
- typedef volatile U qualified_class_type;
316
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
317
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
318
- };
319
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
320
- class A6, class A7, class A8, class A9>
321
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) volatile> {
322
- typedef T type;
323
- typedef U class_type;
324
- typedef volatile U qualified_class_type;
325
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
326
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
327
- };
328
- // -- const volatile
329
- template<class T, class U>
330
- struct member_pointer<T (U::*)() const volatile> {
331
- typedef T type;
332
- typedef U class_type;
333
- typedef const volatile U qualified_class_type;
334
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
335
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
336
- };
337
- template<class T, class U, class A1>
338
- struct member_pointer<T (U::*)(A1) const volatile> {
339
- typedef T type;
340
- typedef U class_type;
341
- typedef const volatile U qualified_class_type;
342
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
343
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
344
- };
345
- template<class T, class U, class A1, class A2>
346
- struct member_pointer<T (U::*)(A1, A2) const volatile> {
347
- typedef T type;
348
- typedef U class_type;
349
- typedef const volatile U qualified_class_type;
350
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
351
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
352
- };
353
- template<class T, class U, class A1, class A2, class A3>
354
- struct member_pointer<T (U::*)(A1, A2, A3) const volatile> {
355
- typedef T type;
356
- typedef U class_type;
357
- typedef const volatile U qualified_class_type;
358
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
359
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
360
- };
361
- template<class T, class U, class A1, class A2, class A3, class A4>
362
- struct member_pointer<T (U::*)(A1, A2, A3, A4) const volatile> {
363
- typedef T type;
364
- typedef U class_type;
365
- typedef const volatile U qualified_class_type;
366
- };
367
- template<class T, class U, class A1, class A2, class A3, class A4, class A5>
368
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5) const volatile> {
369
- typedef T type;
370
- typedef U class_type;
371
- typedef const volatile U qualified_class_type;
372
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
373
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
374
- };
375
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
376
- class A6>
377
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6) const volatile> {
378
- typedef T type;
379
- typedef U class_type;
380
- typedef const volatile U qualified_class_type;
381
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
382
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
383
- };
384
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
385
- class A6, class A7>
386
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7) const volatile> {
387
- typedef T type;
388
- typedef U class_type;
389
- typedef const volatile U qualified_class_type;
390
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
391
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
392
- };
393
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
394
- class A6, class A7, class A8>
395
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8) const volatile> {
396
- typedef T type;
397
- typedef U class_type;
398
- typedef const volatile U qualified_class_type;
399
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
400
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
401
- };
402
- template<class T, class U, class A1, class A2, class A3, class A4, class A5,
403
- class A6, class A7, class A8, class A9>
404
- struct member_pointer<T (U::*)(A1, A2, A3, A4, A5, A6, A7, A8, A9) const volatile> {
405
- typedef T type;
406
- typedef U class_type;
407
- typedef const volatile U qualified_class_type;
408
- BOOST_STATIC_CONSTANT(bool, is_data_member = false);
409
- BOOST_STATIC_CONSTANT(bool, is_function_member = true);
410
- };
411
-
412
- } // detail
413
-
414
- namespace detail {
415
-
416
- // this class holds a pointer to a member function and the object.
417
- // when called, it just calls the member function with the parameters
418
- // provided
419
-
420
- // It would have been possible to use existing lambda_functors to represent
421
- // a bound member function like this, but to have a separate template is
422
- // safer, since now this functor doesn't mix and match with lambda_functors
423
- // only thing you can do with this is to call it
424
-
425
- // note that previously instantiated classes
426
- // (other_action<member_pointer_action> and member_pointer_action_helper
427
- // guarantee, that A and B are
428
- // such types, that for objects a and b of corresponding types, a->*b leads
429
- // to the builtin ->* to be called. So types that would end in a call to
430
- // a user defined ->* do not create a member_pointer_caller object.
431
-
432
- template<class RET, class A, class B>
433
- class member_pointer_caller {
434
- A a; B b;
435
-
436
- public:
437
- member_pointer_caller(const A& aa, const B& bb) : a(aa), b(bb) {}
438
-
439
- RET operator()() const { return (a->*b)(); }
440
-
441
- template<class A1>
442
- RET operator()(const A1& a1) const { return (a->*b)(a1); }
443
-
444
- template<class A1, class A2>
445
- RET operator()(const A1& a1, const A2& a2) const { return (a->*b)(a1, a2); }
446
-
447
- template<class A1, class A2, class A3>
448
- RET operator()(const A1& a1, const A2& a2, const A3& a3) const {
449
- return (a->*b)(a1, a2, a3);
450
- }
451
-
452
- template<class A1, class A2, class A3, class A4>
453
- RET operator()(const A1& a1, const A2& a2, const A3& a3,
454
- const A4& a4) const {
455
- return (a->*b)(a1, a2, a3, a4);
456
- }
457
-
458
- template<class A1, class A2, class A3, class A4, class A5>
459
- RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
460
- const A5& a5) const {
461
- return (a->*b)(a1, a2, a3, a4, a5);
462
- }
463
-
464
- template<class A1, class A2, class A3, class A4, class A5, class A6>
465
- RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
466
- const A5& a5, const A6& a6) const {
467
- return (a->*b)(a1, a2, a3, a4, a5, a6);
468
- }
469
-
470
- template<class A1, class A2, class A3, class A4, class A5, class A6,
471
- class A7>
472
- RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
473
- const A5& a5, const A6& a6, const A7& a7) const {
474
- return (a->*b)(a1, a2, a3, a4, a5, a6, a7);
475
- }
476
-
477
- template<class A1, class A2, class A3, class A4, class A5, class A6,
478
- class A7, class A8>
479
- RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
480
- const A5& a5, const A6& a6, const A7& a7,
481
- const A8& a8) const {
482
- return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8);
483
- }
484
-
485
- template<class A1, class A2, class A3, class A4, class A5, class A6,
486
- class A7, class A8, class A9>
487
- RET operator()(const A1& a1, const A2& a2, const A3& a3, const A4& a4,
488
- const A5& a5, const A6& a6, const A7& a7,
489
- const A8& a8, const A9& a9) const {
490
- return (a->*b)(a1, a2, a3, a4, a5, a6, a7, a8, a9);
491
- }
492
-
493
- };
494
-
495
- // helper templates for return type deduction and action classes
496
- // different cases for data member, function member, neither
497
-
498
- // true-true case
499
- template <bool Is_data_member, bool Is_function_member>
500
- struct member_pointer_action_helper;
501
- // cannot be both, no body provided
502
-
503
- // data member case
504
- // this means, that B is a data member and A is a pointer type,
505
- // so either built-in ->* should be called, or there is an error
506
- template <>
507
- struct member_pointer_action_helper<true, false> {
508
- public:
509
-
510
- template<class RET, class A, class B>
511
- static RET apply(A& a, B& b) {
512
- return a->*b;
513
- }
514
-
515
- template<class A, class B>
516
- struct return_type {
517
- private:
518
- typedef typename detail::remove_reference_and_cv<B>::type plainB;
519
-
520
- typedef typename detail::member_pointer<plainB>::type type0;
521
- // we remove the reference now, as we may have to add cv:s
522
- typedef typename boost::remove_reference<type0>::type type1;
523
-
524
- // A is a reference to pointer
525
- // remove the top level cv qualifiers and reference
526
- typedef typename
527
- detail::remove_reference_and_cv<A>::type non_ref_A;
528
-
529
- // A is a pointer type, so take the type pointed to
530
- typedef typename ::boost::remove_pointer<non_ref_A>::type non_pointer_A;
531
-
532
- public:
533
- // For non-reference types, we must add const and/or volatile if
534
- // the pointer type has these qualifiers
535
- // If the member is a reference, these do not have any effect
536
- // (cv T == T if T is a reference type)
537
- typedef typename detail::IF<
538
- ::boost::is_const<non_pointer_A>::value,
539
- typename ::boost::add_const<type1>::type,
540
- type1
541
- >::RET type2;
542
- typedef typename detail::IF<
543
- ::boost::is_volatile<non_pointer_A>::value,
544
- typename ::boost::add_volatile<type2>::type,
545
- type2
546
- >::RET type3;
547
- // add reference back
548
- typedef typename ::boost::add_reference<type3>::type type;
549
- };
550
- };
551
-
552
- // neither case
553
- template <>
554
- struct member_pointer_action_helper<false, false> {
555
- public:
556
- template<class RET, class A, class B>
557
- static RET apply(A& a, B& b) {
558
- // not a built in member pointer operator, just call ->*
559
- return a->*b;
560
- }
561
- // an overloaded member pointer operators, user should have specified
562
- // the return type
563
- // At this point we know that there is no matching specialization for
564
- // return_type_2, so try return_type_2_plain
565
- template<class A, class B>
566
- struct return_type {
567
-
568
- typedef typename plain_return_type_2<
569
- other_action<member_pointer_action>, A, B
570
- >::type type;
571
- };
572
-
573
- };
574
-
575
-
576
- // member pointer function case
577
- // This is a built in ->* call for a member function,
578
- // the only thing that you can do with that, is to give it some arguments
579
- // note, it is guaranteed that A is a pointer type, and thus it cannot
580
- // be a call to overloaded ->*
581
- template <>
582
- struct member_pointer_action_helper<false, true> {
583
- public:
584
-
585
- template<class RET, class A, class B>
586
- static RET apply(A& a, B& b) {
587
- typedef typename ::boost::remove_cv<B>::type plainB;
588
- typedef typename detail::member_pointer<plainB>::type ret_t;
589
- typedef typename ::boost::remove_cv<A>::type plainA;
590
-
591
- // we always strip cv:s to
592
- // make the two routes (calling and type deduction)
593
- // to give the same results (and the const does not make any functional
594
- // difference)
595
- return detail::member_pointer_caller<ret_t, plainA, plainB>(a, b);
596
- }
597
-
598
- template<class A, class B>
599
- struct return_type {
600
- typedef typename detail::remove_reference_and_cv<B>::type plainB;
601
- typedef typename detail::member_pointer<plainB>::type ret_t;
602
- typedef typename detail::remove_reference_and_cv<A>::type plainA;
603
-
604
- typedef detail::member_pointer_caller<ret_t, plainA, plainB> type;
605
- };
606
- };
607
-
608
- } // detail
609
-
610
- template<> class other_action<member_pointer_action> {
611
- public:
612
- template<class RET, class A, class B>
613
- static RET apply(A& a, B& b) {
614
- typedef typename
615
- ::boost::remove_cv<B>::type plainB;
616
-
617
- return detail::member_pointer_action_helper<
618
- boost::is_pointer<A>::value &&
619
- detail::member_pointer<plainB>::is_data_member,
620
- boost::is_pointer<A>::value &&
621
- detail::member_pointer<plainB>::is_function_member
622
- >::template apply<RET>(a, b);
623
- }
624
- };
625
-
626
- // return type deduction --
627
-
628
- // If the right argument is a pointer to data member,
629
- // and the left argument is of compatible pointer to class type
630
- // return type is a reference to the data member type
631
-
632
- // if right argument is a pointer to a member function, and the left
633
- // argument is of a compatible type, the return type is a
634
- // member_pointer_caller (see above)
635
-
636
- // Otherwise, return type deduction fails. There is either an error,
637
- // or the user is trying to call an overloaded ->*
638
- // In such a case either ret<> must be used, or a return_type_2 user
639
- // defined specialization must be provided
640
-
641
-
642
- template<class A, class B>
643
- struct return_type_2<other_action<member_pointer_action>, A, B> {
644
- private:
645
- typedef typename
646
- detail::remove_reference_and_cv<B>::type plainB;
647
- public:
648
- typedef typename
649
- detail::member_pointer_action_helper<
650
- detail::member_pointer<plainB>::is_data_member,
651
- detail::member_pointer<plainB>::is_function_member
652
- >::template return_type<A, B>::type type;
653
- };
654
-
655
- // this is the way the generic lambda_functor_base functions instantiate
656
- // return type deduction. We turn it into return_type_2, so that the
657
- // user can provide specializations on that level.
658
- template<class Args>
659
- struct return_type_N<other_action<member_pointer_action>, Args> {
660
- typedef typename boost::tuples::element<0, Args>::type A;
661
- typedef typename boost::tuples::element<1, Args>::type B;
662
- typedef typename
663
- return_type_2<other_action<member_pointer_action>,
664
- typename boost::remove_reference<A>::type,
665
- typename boost::remove_reference<B>::type
666
- >::type type;
667
- };
668
-
669
-
670
- template<class Arg1, class Arg2>
671
- inline const
672
- lambda_functor<
673
- lambda_functor_base<
674
- action<2, other_action<member_pointer_action> >,
675
- tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
676
- >
677
- >
678
- operator->*(const lambda_functor<Arg1>& a1, const Arg2& a2)
679
- {
680
- return
681
- lambda_functor_base<
682
- action<2, other_action<member_pointer_action> >,
683
- tuple<lambda_functor<Arg1>, typename const_copy_argument<Arg2>::type>
684
- >
685
- (tuple<lambda_functor<Arg1>,
686
- typename const_copy_argument<Arg2>::type>(a1, a2));
687
- }
688
-
689
- template<class Arg1, class Arg2>
690
- inline const
691
- lambda_functor<
692
- lambda_functor_base<
693
- action<2, other_action<member_pointer_action> >,
694
- tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
695
- >
696
- >
697
- operator->*(const lambda_functor<Arg1>& a1, const lambda_functor<Arg2>& a2)
698
- {
699
- return
700
- lambda_functor_base<
701
- action<2, other_action<member_pointer_action> >,
702
- tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >
703
- >
704
- (tuple<lambda_functor<Arg1>, lambda_functor<Arg2> >(a1, a2));
705
- }
706
-
707
- template<class Arg1, class Arg2>
708
- inline const
709
- lambda_functor<
710
- lambda_functor_base<
711
- action<2, other_action<member_pointer_action> >,
712
- tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
713
- >
714
- >
715
- operator->*(const Arg1& a1, const lambda_functor<Arg2>& a2)
716
- {
717
- return
718
- lambda_functor_base<
719
- action<2, other_action<member_pointer_action> >,
720
- tuple<typename const_copy_argument<Arg1>::type, lambda_functor<Arg2> >
721
- >
722
- (tuple<typename const_copy_argument<Arg1>::type,
723
- lambda_functor<Arg2> >(a1, a2));
724
- }
725
-
726
-
727
- } // namespace lambda
728
- } // namespace boost
729
-
730
-
731
- #endif
732
-
733
-
734
-
735
-
736
-
737
-