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,370 +0,0 @@
1
- // Boost Lambda Library - operators.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_OPERATORS_HPP
14
- #define BOOST_LAMBDA_OPERATORS_HPP
15
-
16
- #include "boost/lambda/detail/is_instance_of.hpp"
17
-
18
- namespace boost {
19
- namespace lambda {
20
-
21
- #if defined BOOST_LAMBDA_BE1
22
- #error "Multiple defines of BOOST_LAMBDA_BE1"
23
- #endif
24
-
25
- // For all BOOSTA_LAMBDA_BE* macros:
26
-
27
- // CONSTA must be either 'A' or 'const A'
28
- // CONSTB must be either 'B' or 'const B'
29
-
30
- // It is stupid to have the names A and B as macro arguments, but it avoids
31
- // the need to pass in emtpy macro arguments, which gives warnings on some
32
- // compilers
33
-
34
- #define BOOST_LAMBDA_BE1(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
35
- template<class Arg, class B> \
36
- inline const \
37
- lambda_functor< \
38
- lambda_functor_base< \
39
- ACTION, \
40
- tuple<lambda_functor<Arg>, typename const_copy_argument <CONSTB>::type> \
41
- > \
42
- > \
43
- OPER_NAME (const lambda_functor<Arg>& a, CONSTB& b) { \
44
- return \
45
- lambda_functor_base< \
46
- ACTION, \
47
- tuple<lambda_functor<Arg>, typename const_copy_argument <CONSTB>::type>\
48
- > \
49
- (tuple<lambda_functor<Arg>, typename const_copy_argument <CONSTB>::type>(a, b)); \
50
- }
51
-
52
-
53
- #if defined BOOST_LAMBDA_BE2
54
- #error "Multiple defines of BOOST_LAMBDA_BE2"
55
- #endif
56
-
57
- #define BOOST_LAMBDA_BE2(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
58
- template<class A, class Arg> \
59
- inline const \
60
- lambda_functor< \
61
- lambda_functor_base< \
62
- ACTION, \
63
- tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> > \
64
- > \
65
- > \
66
- OPER_NAME (CONSTA& a, const lambda_functor<Arg>& b) { \
67
- return \
68
- lambda_functor_base< \
69
- ACTION, \
70
- tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> > \
71
- > \
72
- (tuple<typename CONVERSION <CONSTA>::type, lambda_functor<Arg> >(a, b)); \
73
- }
74
-
75
-
76
- #if defined BOOST_LAMBDA_BE3
77
- #error "Multiple defines of BOOST_LAMBDA_BE3"
78
- #endif
79
-
80
- #define BOOST_LAMBDA_BE3(OPER_NAME, ACTION, CONSTA, CONSTB, CONVERSION) \
81
- template<class ArgA, class ArgB> \
82
- inline const \
83
- lambda_functor< \
84
- lambda_functor_base< \
85
- ACTION, \
86
- tuple<lambda_functor<ArgA>, lambda_functor<ArgB> > \
87
- > \
88
- > \
89
- OPER_NAME (const lambda_functor<ArgA>& a, const lambda_functor<ArgB>& b) { \
90
- return \
91
- lambda_functor_base< \
92
- ACTION, \
93
- tuple<lambda_functor<ArgA>, lambda_functor<ArgB> > \
94
- > \
95
- (tuple<lambda_functor<ArgA>, lambda_functor<ArgB> >(a, b)); \
96
- }
97
-
98
- #if defined BOOST_LAMBDA_BE
99
- #error "Multiple defines of BOOST_LAMBDA_BE"
100
- #endif
101
-
102
- #define BOOST_LAMBDA_BE(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
103
- BOOST_LAMBDA_BE1(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
104
- BOOST_LAMBDA_BE2(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION) \
105
- BOOST_LAMBDA_BE3(OPER_NAME, ACTION, CONSTA, CONSTB, CONST_CONVERSION)
106
-
107
- #define BOOST_LAMBDA_EMPTY()
108
-
109
- BOOST_LAMBDA_BE(operator+, arithmetic_action<plus_action>, const A, const B, const_copy_argument)
110
- BOOST_LAMBDA_BE(operator-, arithmetic_action<minus_action>, const A, const B, const_copy_argument)
111
- BOOST_LAMBDA_BE(operator*, arithmetic_action<multiply_action>, const A, const B, const_copy_argument)
112
- BOOST_LAMBDA_BE(operator/, arithmetic_action<divide_action>, const A, const B, const_copy_argument)
113
- BOOST_LAMBDA_BE(operator%, arithmetic_action<remainder_action>, const A, const B, const_copy_argument)
114
- BOOST_LAMBDA_BE(operator<<, bitwise_action<leftshift_action>, const A, const B, const_copy_argument)
115
- BOOST_LAMBDA_BE(operator>>, bitwise_action<rightshift_action>, const A, const B, const_copy_argument)
116
- BOOST_LAMBDA_BE(operator&, bitwise_action<and_action>, const A, const B, const_copy_argument)
117
- BOOST_LAMBDA_BE(operator|, bitwise_action<or_action>, const A, const B, const_copy_argument)
118
- BOOST_LAMBDA_BE(operator^, bitwise_action<xor_action>, const A, const B, const_copy_argument)
119
- BOOST_LAMBDA_BE(operator&&, logical_action<and_action>, const A, const B, const_copy_argument)
120
- BOOST_LAMBDA_BE(operator||, logical_action<or_action>, const A, const B, const_copy_argument)
121
- BOOST_LAMBDA_BE(operator<, relational_action<less_action>, const A, const B, const_copy_argument)
122
- BOOST_LAMBDA_BE(operator>, relational_action<greater_action>, const A, const B, const_copy_argument)
123
- BOOST_LAMBDA_BE(operator<=, relational_action<lessorequal_action>, const A, const B, const_copy_argument)
124
- BOOST_LAMBDA_BE(operator>=, relational_action<greaterorequal_action>, const A, const B, const_copy_argument)
125
- BOOST_LAMBDA_BE(operator==, relational_action<equal_action>, const A, const B, const_copy_argument)
126
- BOOST_LAMBDA_BE(operator!=, relational_action<notequal_action>, const A, const B, const_copy_argument)
127
-
128
- BOOST_LAMBDA_BE(operator+=, arithmetic_assignment_action<plus_action>, A, const B, reference_argument)
129
- BOOST_LAMBDA_BE(operator-=, arithmetic_assignment_action<minus_action>, A, const B, reference_argument)
130
- BOOST_LAMBDA_BE(operator*=, arithmetic_assignment_action<multiply_action>, A, const B, reference_argument)
131
- BOOST_LAMBDA_BE(operator/=, arithmetic_assignment_action<divide_action>, A, const B, reference_argument)
132
- BOOST_LAMBDA_BE(operator%=, arithmetic_assignment_action<remainder_action>, A, const B, reference_argument)
133
- BOOST_LAMBDA_BE(operator<<=, bitwise_assignment_action<leftshift_action>, A, const B, reference_argument)
134
- BOOST_LAMBDA_BE(operator>>=, bitwise_assignment_action<rightshift_action>, A, const B, reference_argument)
135
- BOOST_LAMBDA_BE(operator&=, bitwise_assignment_action<and_action>, A, const B, reference_argument)
136
- BOOST_LAMBDA_BE(operator|=, bitwise_assignment_action<or_action>, A, const B, reference_argument)
137
- BOOST_LAMBDA_BE(operator^=, bitwise_assignment_action<xor_action>, A, const B, reference_argument)
138
-
139
-
140
- // A special trick for comma operator for correct preprocessing
141
- #if defined BOOST_LAMBDA_COMMA_OPERATOR_NAME
142
- #error "Multiple defines of BOOST_LAMBDA_COMMA_OPERATOR_NAME"
143
- #endif
144
-
145
- #define BOOST_LAMBDA_COMMA_OPERATOR_NAME operator,
146
-
147
- BOOST_LAMBDA_BE1(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
148
- BOOST_LAMBDA_BE2(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
149
- BOOST_LAMBDA_BE3(BOOST_LAMBDA_COMMA_OPERATOR_NAME, other_action<comma_action>, const A, const B, const_copy_argument)
150
-
151
-
152
-
153
- namespace detail {
154
-
155
- // special cases for ostream& << Any and istream& >> Any ---------------
156
- // the actual stream classes may vary and thus a specialisation for,
157
- // say ostream& does not match (the general case above is chosen).
158
- // Therefore we specialise for non-const reference:
159
- // if the left argument is a stream, we store the stream as reference
160
- // if it is something else, we store a const plain by default
161
-
162
- // Note that the overloading is const vs. non-const first argument
163
-
164
- #ifdef BOOST_NO_TEMPLATED_STREAMS
165
- template<class T> struct convert_ostream_to_ref_others_to_c_plain_by_default {
166
- typedef typename detail::IF<
167
- boost::is_convertible<T*, std::ostream*>::value,
168
- T&,
169
- typename const_copy_argument <T>::type
170
- >::RET type;
171
- };
172
-
173
- template<class T> struct convert_istream_to_ref_others_to_c_plain_by_default {
174
- typedef typename detail::IF<
175
- boost::is_convertible<T*, std::istream*>::value,
176
- T&,
177
- typename const_copy_argument <T>::type
178
- >::RET type;
179
- };
180
- #else
181
-
182
- template<class T> struct convert_ostream_to_ref_others_to_c_plain_by_default {
183
- typedef typename detail::IF<
184
- is_instance_of_2<
185
- T, std::basic_ostream
186
- >::value,
187
- T&,
188
- typename const_copy_argument <T>::type
189
- >::RET type;
190
- };
191
-
192
- template<class T> struct convert_istream_to_ref_others_to_c_plain_by_default {
193
- typedef typename detail::IF<
194
- is_instance_of_2<
195
- T, std::basic_istream
196
- >::value,
197
- T&,
198
- typename const_copy_argument <T>::type
199
- >::RET type;
200
- };
201
- #endif
202
-
203
- } // detail
204
-
205
- BOOST_LAMBDA_BE2(operator<<, bitwise_action< leftshift_action>, A, const B, detail::convert_ostream_to_ref_others_to_c_plain_by_default)
206
- BOOST_LAMBDA_BE2(operator>>, bitwise_action< rightshift_action>, A, const B, detail::convert_istream_to_ref_others_to_c_plain_by_default)
207
-
208
-
209
- // special case for io_manipulators.
210
- // function references cannot be given as arguments to lambda operator
211
- // expressions in general. With << and >> the use of manipulators is
212
- // so common, that specializations are provided to make them work.
213
-
214
- template<class Arg, class Ret, class ManipArg>
215
- inline const
216
- lambda_functor<
217
- lambda_functor_base<
218
- bitwise_action<leftshift_action>,
219
- tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
220
- >
221
- >
222
- operator<<(const lambda_functor<Arg>& a, Ret(&b)(ManipArg))
223
- {
224
- return
225
- lambda_functor_base<
226
- bitwise_action<leftshift_action>,
227
- tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
228
- >
229
- ( tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>(a, b) );
230
- }
231
-
232
- template<class Arg, class Ret, class ManipArg>
233
- inline const
234
- lambda_functor<
235
- lambda_functor_base<
236
- bitwise_action<rightshift_action>,
237
- tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
238
- >
239
- >
240
- operator>>(const lambda_functor<Arg>& a, Ret(&b)(ManipArg))
241
- {
242
- return
243
- lambda_functor_base<
244
- bitwise_action<rightshift_action>,
245
- tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>
246
- >
247
- ( tuple<lambda_functor<Arg>, Ret(&)(ManipArg)>(a, b) );
248
- }
249
-
250
-
251
- // (+ and -) take their arguments as const references.
252
- // This has consquences with pointer artihmetic
253
- // E.g int a[]; ... *a = 1 works but not *(a+1) = 1.
254
- // the result of a+1 would be const
255
- // To make the latter work too,
256
- // non-const arrays are taken as non-const and stored as non-const as well.
257
- #if defined BOOST_LAMBDA_PTR_ARITHMETIC_E1
258
- #error "Multiple defines of BOOST_LAMBDA_PTR_ARITHMETIC_E1"
259
- #endif
260
-
261
- #define BOOST_LAMBDA_PTR_ARITHMETIC_E1(OPER_NAME, ACTION, CONSTB) \
262
- template<class Arg, int N, class B> \
263
- inline const \
264
- lambda_functor< \
265
- lambda_functor_base<ACTION, tuple<lambda_functor<Arg>, CONSTB(&)[N]> > \
266
- > \
267
- OPER_NAME (const lambda_functor<Arg>& a, CONSTB(&b)[N]) \
268
- { \
269
- return \
270
- lambda_functor_base<ACTION, tuple<lambda_functor<Arg>, CONSTB(&)[N]> > \
271
- (tuple<lambda_functor<Arg>, CONSTB(&)[N]>(a, b)); \
272
- }
273
-
274
-
275
- #if defined BOOST_LAMBDA_PTR_ARITHMETIC_E2
276
- #error "Multiple defines of BOOST_LAMBDA_PTR_ARITHMETIC_E2"
277
- #endif
278
-
279
- #define BOOST_LAMBDA_PTR_ARITHMETIC_E2(OPER_NAME, ACTION, CONSTA) \
280
- template<int N, class A, class Arg> \
281
- inline const \
282
- lambda_functor< \
283
- lambda_functor_base<ACTION, tuple<CONSTA(&)[N], lambda_functor<Arg> > > \
284
- > \
285
- OPER_NAME (CONSTA(&a)[N], const lambda_functor<Arg>& b) \
286
- { \
287
- return \
288
- lambda_functor_base<ACTION, tuple<CONSTA(&)[N], lambda_functor<Arg> > > \
289
- (tuple<CONSTA(&)[N], lambda_functor<Arg> >(a, b)); \
290
- }
291
-
292
-
293
- BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator+, arithmetic_action<plus_action>, B)
294
- BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator+, arithmetic_action<plus_action>, A)
295
- BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator+, arithmetic_action<plus_action>,const B)
296
- BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator+, arithmetic_action<plus_action>,const A)
297
-
298
-
299
- //BOOST_LAMBDA_PTR_ARITHMETIC_E1(operator-, arithmetic_action<minus_action>)
300
- // This is not needed, since the result of ptr-ptr is an rvalue anyway
301
-
302
- BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator-, arithmetic_action<minus_action>, A)
303
- BOOST_LAMBDA_PTR_ARITHMETIC_E2(operator-, arithmetic_action<minus_action>, const A)
304
-
305
-
306
- #undef BOOST_LAMBDA_BE1
307
- #undef BOOST_LAMBDA_BE2
308
- #undef BOOST_LAMBDA_BE3
309
- #undef BOOST_LAMBDA_BE
310
- #undef BOOST_LAMBDA_COMMA_OPERATOR_NAME
311
-
312
- #undef BOOST_LAMBDA_PTR_ARITHMETIC_E1
313
- #undef BOOST_LAMBDA_PTR_ARITHMETIC_E2
314
-
315
-
316
- // ---------------------------------------------------------------------
317
- // unary operators -----------------------------------------------------
318
- // ---------------------------------------------------------------------
319
-
320
- #if defined BOOST_LAMBDA_UE
321
- #error "Multiple defines of BOOST_LAMBDA_UE"
322
- #endif
323
-
324
- #define BOOST_LAMBDA_UE(OPER_NAME, ACTION) \
325
- template<class Arg> \
326
- inline const \
327
- lambda_functor<lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > > \
328
- OPER_NAME (const lambda_functor<Arg>& a) \
329
- { \
330
- return \
331
- lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > \
332
- ( tuple<lambda_functor<Arg> >(a) ); \
333
- }
334
-
335
-
336
- BOOST_LAMBDA_UE(operator+, unary_arithmetic_action<plus_action>)
337
- BOOST_LAMBDA_UE(operator-, unary_arithmetic_action<minus_action>)
338
- BOOST_LAMBDA_UE(operator~, bitwise_action<not_action>)
339
- BOOST_LAMBDA_UE(operator!, logical_action<not_action>)
340
- BOOST_LAMBDA_UE(operator++, pre_increment_decrement_action<increment_action>)
341
- BOOST_LAMBDA_UE(operator--, pre_increment_decrement_action<decrement_action>)
342
- BOOST_LAMBDA_UE(operator*, other_action<contentsof_action>)
343
- BOOST_LAMBDA_UE(operator&, other_action<addressof_action>)
344
-
345
- #if defined BOOST_LAMBDA_POSTFIX_UE
346
- #error "Multiple defines of BOOST_LAMBDA_POSTFIX_UE"
347
- #endif
348
-
349
- #define BOOST_LAMBDA_POSTFIX_UE(OPER_NAME, ACTION) \
350
- template<class Arg> \
351
- inline const \
352
- lambda_functor<lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > > \
353
- OPER_NAME (const lambda_functor<Arg>& a, int) \
354
- { \
355
- return \
356
- lambda_functor_base<ACTION, tuple<lambda_functor<Arg> > > \
357
- ( tuple<lambda_functor<Arg> >(a) ); \
358
- }
359
-
360
-
361
- BOOST_LAMBDA_POSTFIX_UE(operator++, post_increment_decrement_action<increment_action>)
362
- BOOST_LAMBDA_POSTFIX_UE(operator--, post_increment_decrement_action<decrement_action>)
363
-
364
- #undef BOOST_LAMBDA_UE
365
- #undef BOOST_LAMBDA_POSTFIX_UE
366
-
367
- } // namespace lambda
368
- } // namespace boost
369
-
370
- #endif
@@ -1,325 +0,0 @@
1
- // Boost Lambda Library ret.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_RET_HPP
13
- #define BOOST_LAMBDA_RET_HPP
14
-
15
- namespace boost {
16
- namespace lambda {
17
-
18
- // TODO:
19
-
20
- // Add specializations for function references for ret, protect and unlambda
21
- // e.g void foo(); unlambda(foo); fails, as it would add a const qualifier
22
- // for a function type.
23
- // on the other hand unlambda(*foo) does work
24
-
25
-
26
- // -- ret -------------------------
27
- // the explicit return type template
28
-
29
- // TODO: It'd be nice to make ret a nop for other than lambda functors
30
- // but causes an ambiguiyty with gcc (not with KCC), check what is the
31
- // right interpretation.
32
-
33
- // // ret for others than lambda functors has no effect
34
- // template <class U, class T>
35
- // inline const T& ret(const T& t) { return t; }
36
-
37
-
38
- template<class RET, class Arg>
39
- inline const
40
- lambda_functor<
41
- lambda_functor_base<
42
- explicit_return_type_action<RET>,
43
- tuple<lambda_functor<Arg> >
44
- >
45
- >
46
- ret(const lambda_functor<Arg>& a1)
47
- {
48
- return
49
- lambda_functor_base<
50
- explicit_return_type_action<RET>,
51
- tuple<lambda_functor<Arg> >
52
- >
53
- (tuple<lambda_functor<Arg> >(a1));
54
- }
55
-
56
- // protect ------------------
57
-
58
- // protecting others than lambda functors has no effect
59
- template <class T>
60
- inline const T& protect(const T& t) { return t; }
61
-
62
- template<class Arg>
63
- inline const
64
- lambda_functor<
65
- lambda_functor_base<
66
- protect_action,
67
- tuple<lambda_functor<Arg> >
68
- >
69
- >
70
- protect(const lambda_functor<Arg>& a1)
71
- {
72
- return
73
- lambda_functor_base<
74
- protect_action,
75
- tuple<lambda_functor<Arg> >
76
- >
77
- (tuple<lambda_functor<Arg> >(a1));
78
- }
79
-
80
- // -------------------------------------------------------------------
81
-
82
- // Hides the lambda functorness of a lambda functor.
83
- // After this, the functor is immune to argument substitution, etc.
84
- // This can be used, e.g. to make it safe to pass lambda functors as
85
- // arguments to functions, which might use them as target functions
86
-
87
- // note, unlambda and protect are different things. Protect hides the lambda
88
- // functor for one application, unlambda for good.
89
-
90
- template <class LambdaFunctor>
91
- class non_lambda_functor
92
- {
93
- LambdaFunctor lf;
94
- public:
95
-
96
- // This functor defines the result_type typedef.
97
- // The result type must be deducible without knowing the arguments
98
-
99
- template <class SigArgs> struct sig {
100
- typedef typename
101
- LambdaFunctor::inherited::
102
- template sig<typename SigArgs::tail_type>::type type;
103
- };
104
-
105
- explicit non_lambda_functor(const LambdaFunctor& a) : lf(a) {}
106
-
107
- typename LambdaFunctor::nullary_return_type
108
- operator()() const {
109
- return lf.template
110
- call<typename LambdaFunctor::nullary_return_type>
111
- (cnull_type(), cnull_type(), cnull_type(), cnull_type());
112
- }
113
-
114
- template<class A>
115
- typename sig<tuple<const non_lambda_functor, A&> >::type
116
- operator()(A& a) const {
117
- return lf.template call<typename sig<tuple<const non_lambda_functor, A&> >::type >(a, cnull_type(), cnull_type(), cnull_type());
118
- }
119
-
120
- template<class A, class B>
121
- typename sig<tuple<const non_lambda_functor, A&, B&> >::type
122
- operator()(A& a, B& b) const {
123
- return lf.template call<typename sig<tuple<const non_lambda_functor, A&, B&> >::type >(a, b, cnull_type(), cnull_type());
124
- }
125
-
126
- template<class A, class B, class C>
127
- typename sig<tuple<const non_lambda_functor, A&, B&, C&> >::type
128
- operator()(A& a, B& b, C& c) const {
129
- return lf.template call<typename sig<tuple<const non_lambda_functor, A&, B&, C&> >::type>(a, b, c, cnull_type());
130
- }
131
- };
132
-
133
- template <class Arg>
134
- inline const Arg& unlambda(const Arg& a) { return a; }
135
-
136
- template <class Arg>
137
- inline const non_lambda_functor<lambda_functor<Arg> >
138
- unlambda(const lambda_functor<Arg>& a)
139
- {
140
- return non_lambda_functor<lambda_functor<Arg> >(a);
141
- }
142
-
143
- // Due to a language restriction, lambda functors cannot be made to
144
- // accept non-const rvalue arguments. Usually iterators do not return
145
- // temporaries, but sometimes they do. That's why a workaround is provided.
146
- // Note, that this potentially breaks const correctness, so be careful!
147
-
148
- // any lambda functor can be turned into a const_incorrect_lambda_functor
149
- // The operator() takes arguments as consts and then casts constness
150
- // away. So this breaks const correctness!!! but is a necessary workaround
151
- // in some cases due to language limitations.
152
- // Note, that this is not a lambda_functor anymore, so it can not be used
153
- // as a sub lambda expression.
154
-
155
- template <class LambdaFunctor>
156
- struct const_incorrect_lambda_functor {
157
- LambdaFunctor lf;
158
- public:
159
-
160
- explicit const_incorrect_lambda_functor(const LambdaFunctor& a) : lf(a) {}
161
-
162
- template <class SigArgs> struct sig {
163
- typedef typename
164
- LambdaFunctor::inherited::template
165
- sig<typename SigArgs::tail_type>::type type;
166
- };
167
-
168
- // The nullary case is not needed (no arguments, no parameter type problems)
169
-
170
- template<class A>
171
- typename sig<tuple<const const_incorrect_lambda_functor, A&> >::type
172
- operator()(const A& a) const {
173
- return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&> >::type >(const_cast<A&>(a), cnull_type(), cnull_type(), cnull_type());
174
- }
175
-
176
- template<class A, class B>
177
- typename sig<tuple<const const_incorrect_lambda_functor, A&, B&> >::type
178
- operator()(const A& a, const B& b) const {
179
- return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&, B&> >::type >(const_cast<A&>(a), const_cast<B&>(b), cnull_type(), cnull_type());
180
- }
181
-
182
- template<class A, class B, class C>
183
- typename sig<tuple<const const_incorrect_lambda_functor, A&, B&, C&> >::type
184
- operator()(const A& a, const B& b, const C& c) const {
185
- return lf.template call<typename sig<tuple<const const_incorrect_lambda_functor, A&, B&, C&> >::type>(const_cast<A&>(a), const_cast<B&>(b), const_cast<C&>(c), cnull_type());
186
- }
187
- };
188
-
189
- // ------------------------------------------------------------------------
190
- // any lambda functor can be turned into a const_parameter_lambda_functor
191
- // The operator() takes arguments as const.
192
- // This is useful if lambda functors are called with non-const rvalues.
193
- // Note, that this is not a lambda_functor anymore, so it can not be used
194
- // as a sub lambda expression.
195
-
196
- template <class LambdaFunctor>
197
- struct const_parameter_lambda_functor {
198
- LambdaFunctor lf;
199
- public:
200
-
201
- explicit const_parameter_lambda_functor(const LambdaFunctor& a) : lf(a) {}
202
-
203
- template <class SigArgs> struct sig {
204
- typedef typename
205
- LambdaFunctor::inherited::template
206
- sig<typename SigArgs::tail_type>::type type;
207
- };
208
-
209
- // The nullary case is not needed: no arguments, no constness problems.
210
-
211
- template<class A>
212
- typename sig<tuple<const const_parameter_lambda_functor, const A&> >::type
213
- operator()(const A& a) const {
214
- return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&> >::type >(a, cnull_type(), cnull_type(), cnull_type());
215
- }
216
-
217
- template<class A, class B>
218
- typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&> >::type
219
- operator()(const A& a, const B& b) const {
220
- return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&> >::type >(a, b, cnull_type(), cnull_type());
221
- }
222
-
223
- template<class A, class B, class C>
224
- typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&, const C&>
225
- >::type
226
- operator()(const A& a, const B& b, const C& c) const {
227
- return lf.template call<typename sig<tuple<const const_parameter_lambda_functor, const A&, const B&, const C&> >::type>(a, b, c, cnull_type());
228
- }
229
- };
230
-
231
- template <class Arg>
232
- inline const const_incorrect_lambda_functor<lambda_functor<Arg> >
233
- break_const(const lambda_functor<Arg>& lf)
234
- {
235
- return const_incorrect_lambda_functor<lambda_functor<Arg> >(lf);
236
- }
237
-
238
-
239
- template <class Arg>
240
- inline const const_parameter_lambda_functor<lambda_functor<Arg> >
241
- const_parameters(const lambda_functor<Arg>& lf)
242
- {
243
- return const_parameter_lambda_functor<lambda_functor<Arg> >(lf);
244
- }
245
-
246
- // make void ------------------------------------------------
247
- // make_void( x ) turns a lambda functor x with some return type y into
248
- // another lambda functor, which has a void return type
249
- // when called, the original return type is discarded
250
-
251
- // we use this action. The action class will be called, which means that
252
- // the wrapped lambda functor is evaluated, but we just don't do anything
253
- // with the result.
254
- struct voidifier_action {
255
- template<class Ret, class A> static void apply(A&) {}
256
- };
257
-
258
- template<class Args> struct return_type_N<voidifier_action, Args> {
259
- typedef void type;
260
- };
261
-
262
- template<class Arg1>
263
- inline const
264
- lambda_functor<
265
- lambda_functor_base<
266
- action<1, voidifier_action>,
267
- tuple<lambda_functor<Arg1> >
268
- >
269
- >
270
- make_void(const lambda_functor<Arg1>& a1) {
271
- return
272
- lambda_functor_base<
273
- action<1, voidifier_action>,
274
- tuple<lambda_functor<Arg1> >
275
- >
276
- (tuple<lambda_functor<Arg1> > (a1));
277
- }
278
-
279
- // for non-lambda functors, make_void does nothing
280
- // (the argument gets evaluated immediately)
281
-
282
- template<class Arg1>
283
- inline const
284
- lambda_functor<
285
- lambda_functor_base<do_nothing_action, null_type>
286
- >
287
- make_void(const Arg1& a1) {
288
- return
289
- lambda_functor_base<do_nothing_action, null_type>();
290
- }
291
-
292
- // std_functor -----------------------------------------------------
293
-
294
- // The STL uses the result_type typedef as the convention to let binders know
295
- // the return type of a function object.
296
- // LL uses the sig template.
297
- // To let LL know that the function object has the result_type typedef
298
- // defined, it can be wrapped with the std_functor function.
299
-
300
-
301
- // Just inherit form the template parameter (the standard functor),
302
- // and provide a sig template. So we have a class which is still the
303
- // same functor + the sig template.
304
-
305
- template<class T>
306
- struct result_type_to_sig : public T {
307
- template<class Args> struct sig { typedef typename T::result_type type; };
308
- result_type_to_sig(const T& t) : T(t) {}
309
- };
310
-
311
- template<class F>
312
- inline result_type_to_sig<F> std_functor(const F& f) { return f; }
313
-
314
-
315
- } // namespace lambda
316
- } // namespace boost
317
-
318
- #endif
319
-
320
-
321
-
322
-
323
-
324
-
325
-