passenger 3.9.1.beta → 3.9.2.beta

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 (1643) hide show
  1. data/.travis.yml +13 -0
  2. data/CONTRIBUTING.md +287 -0
  3. data/INSTALL.md +7 -0
  4. data/NEWS +32 -0
  5. data/README.md +46 -0
  6. data/Rakefile +2 -2
  7. data/bin/passenger +1 -1
  8. data/bin/passenger-config +1 -1
  9. data/bin/passenger-install-apache2-module +1 -1
  10. data/bin/passenger-install-nginx-module +1 -1
  11. data/bin/passenger-memory-stats +1 -1
  12. data/bin/passenger-status +1 -1
  13. data/build/agents.rb +7 -7
  14. data/build/apache2.rb +2 -2
  15. data/build/basics.rb +3 -7
  16. data/build/common_library.rb +14 -7
  17. data/build/cplusplus_support.rb +1 -1
  18. data/build/cxx_tests.rb +19 -7
  19. data/build/documentation.rb +1 -1
  20. data/build/integration_tests.rb +2 -2
  21. data/build/misc.rb +6 -6
  22. data/build/nginx.rb +1 -1
  23. data/build/oxt_tests.rb +1 -1
  24. data/build/packaging.rb +13 -23
  25. data/build/rake_extensions.rb +1 -1
  26. data/build/rpm.rb +1 -1
  27. data/build/ruby_extension.rb +2 -2
  28. data/build/ruby_tests.rb +4 -4
  29. data/build/test_basics.rb +15 -2
  30. data/dev/copy_boost_headers.rb +18 -8
  31. data/dev/find_owner_pipe_leaks.rb +1 -1
  32. data/dev/render_error_pages.rb +1 -1
  33. data/dev/run_travis.sh +39 -0
  34. data/doc/Architectural overview.html +55 -21
  35. data/doc/{DebuggingAndStressTesting.txt.md → DebuggingAndStressTesting.md} +12 -1
  36. data/doc/Security of user switching support.html +47 -16
  37. data/doc/Users guide Apache.html +802 -378
  38. data/doc/Users guide Apache.idmap.txt +85 -209
  39. data/doc/Users guide Apache.txt +65 -338
  40. data/doc/Users guide Nginx.html +715 -252
  41. data/doc/Users guide Nginx.idmap.txt +71 -147
  42. data/doc/Users guide Nginx.txt +29 -245
  43. data/doc/Users guide Standalone.html +45 -14
  44. data/doc/Users guide Standalone.idmap.txt +0 -2
  45. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +1 -1
  46. data/doc/users_guide_snippets/installation.txt +604 -0
  47. data/doc/users_guide_snippets/support_information.txt +5 -4
  48. data/doc/users_guide_snippets/tips.txt +54 -1
  49. data/ext/apache2/Bucket.cpp +1 -1
  50. data/ext/apache2/Bucket.h +1 -1
  51. data/ext/apache2/Configuration.cpp +2 -14
  52. data/ext/apache2/Configuration.h +1 -1
  53. data/ext/apache2/Configuration.hpp +3 -22
  54. data/ext/apache2/DirectoryMapper.h +1 -1
  55. data/ext/apache2/Hooks.cpp +5 -5
  56. data/ext/apache2/Hooks.h +1 -1
  57. data/ext/apache2/mod_passenger.c +1 -1
  58. data/ext/boost/aligned_storage.hpp +181 -0
  59. data/ext/boost/array.hpp +446 -0
  60. data/ext/boost/cerrno.hpp +331 -0
  61. data/ext/boost/chrono/ceil.hpp +36 -0
  62. data/ext/boost/chrono/clock_string.hpp +25 -0
  63. data/ext/boost/chrono/config.hpp +215 -0
  64. data/ext/boost/chrono/detail/is_evenly_divisible_by.hpp +31 -0
  65. data/ext/boost/chrono/detail/static_assert.hpp +30 -0
  66. data/ext/boost/chrono/detail/system.hpp +29 -0
  67. data/ext/boost/chrono/duration.hpp +795 -0
  68. data/ext/boost/chrono/system_clocks.hpp +233 -0
  69. data/ext/boost/chrono/time_point.hpp +379 -0
  70. data/ext/boost/concept_check.hpp +5 -5
  71. data/ext/boost/config/compiler/borland.hpp +29 -27
  72. data/ext/boost/config/compiler/clang.hpp +40 -26
  73. data/ext/boost/config/compiler/codegear.hpp +20 -19
  74. data/ext/boost/config/compiler/common_edg.hpp +27 -25
  75. data/ext/boost/config/compiler/cray.hpp +24 -22
  76. data/ext/boost/config/compiler/digitalmars.hpp +26 -24
  77. data/ext/boost/config/compiler/gcc.hpp +32 -30
  78. data/ext/boost/config/compiler/gcc_xml.hpp +26 -25
  79. data/ext/boost/config/compiler/hp_acc.hpp +26 -24
  80. data/ext/boost/config/compiler/intel.hpp +26 -24
  81. data/ext/boost/config/compiler/metrowerks.hpp +27 -25
  82. data/ext/boost/config/compiler/mpw.hpp +27 -25
  83. data/ext/boost/config/compiler/pathscale.hpp +41 -41
  84. data/ext/boost/config/compiler/pgi.hpp +70 -29
  85. data/ext/boost/config/compiler/sunpro_cc.hpp +27 -25
  86. data/ext/boost/config/compiler/vacpp.hpp +36 -26
  87. data/ext/boost/config/compiler/visualc.hpp +80 -57
  88. data/ext/boost/config/stdlib/dinkumware.hpp +25 -22
  89. data/ext/boost/config/stdlib/libcomo.hpp +23 -20
  90. data/ext/boost/config/stdlib/libcpp.hpp +5 -4
  91. data/ext/boost/config/stdlib/libstdcpp3.hpp +34 -25
  92. data/ext/boost/config/stdlib/modena.hpp +23 -20
  93. data/ext/boost/config/stdlib/msl.hpp +23 -20
  94. data/ext/boost/config/stdlib/roguewave.hpp +23 -20
  95. data/ext/boost/config/stdlib/sgi.hpp +23 -20
  96. data/ext/boost/config/stdlib/stlport.hpp +23 -24
  97. data/ext/boost/config/stdlib/vacpp.hpp +23 -20
  98. data/ext/boost/config/suffix.hpp +266 -75
  99. data/ext/boost/container/container_fwd.hpp +39 -43
  100. data/ext/boost/date_time/adjust_functors.hpp +1 -1
  101. data/ext/boost/date_time/c_time.hpp +1 -1
  102. data/ext/boost/date_time/compiler_config.hpp +1 -1
  103. data/ext/boost/date_time/constrained_value.hpp +1 -1
  104. data/ext/boost/date_time/date.hpp +3 -3
  105. data/ext/boost/date_time/date_clock_device.hpp +1 -1
  106. data/ext/boost/date_time/date_defs.hpp +1 -1
  107. data/ext/boost/date_time/date_duration.hpp +9 -9
  108. data/ext/boost/date_time/date_duration_types.hpp +1 -1
  109. data/ext/boost/date_time/date_facet.hpp +7 -4
  110. data/ext/boost/date_time/date_format_simple.hpp +1 -1
  111. data/ext/boost/date_time/date_formatting.hpp +4 -2
  112. data/ext/boost/date_time/date_formatting_limited.hpp +1 -1
  113. data/ext/boost/date_time/date_formatting_locales.hpp +1 -1
  114. data/ext/boost/date_time/date_generator_formatter.hpp +1 -1
  115. data/ext/boost/date_time/date_generator_parser.hpp +1 -1
  116. data/ext/boost/date_time/date_generators.hpp +35 -35
  117. data/ext/boost/date_time/date_iterator.hpp +15 -15
  118. data/ext/boost/date_time/date_names_put.hpp +26 -26
  119. data/ext/boost/date_time/date_parsing.hpp +3 -1
  120. data/ext/boost/date_time/dst_rules.hpp +2 -2
  121. data/ext/boost/date_time/filetime_functions.hpp +1 -1
  122. data/ext/boost/date_time/format_date_parser.hpp +1 -7
  123. data/ext/boost/date_time/gregorian/conversion.hpp +1 -1
  124. data/ext/boost/date_time/gregorian/formatters.hpp +1 -1
  125. data/ext/boost/date_time/gregorian/formatters_limited.hpp +1 -1
  126. data/ext/boost/date_time/gregorian/greg_calendar.hpp +1 -1
  127. data/ext/boost/date_time/gregorian/greg_date.hpp +1 -1
  128. data/ext/boost/date_time/gregorian/greg_day.hpp +1 -1
  129. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +1 -1
  130. data/ext/boost/date_time/gregorian/greg_duration.hpp +1 -1
  131. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +1 -1
  132. data/ext/boost/date_time/gregorian/greg_month.hpp +1 -1
  133. data/ext/boost/date_time/gregorian/greg_weekday.hpp +1 -1
  134. data/ext/boost/date_time/gregorian/greg_year.hpp +1 -1
  135. data/ext/boost/date_time/gregorian/greg_ymd.hpp +1 -1
  136. data/ext/boost/date_time/gregorian/gregorian.hpp +1 -1
  137. data/ext/boost/date_time/gregorian/gregorian_io.hpp +1 -1
  138. data/ext/boost/date_time/gregorian/gregorian_types.hpp +1 -1
  139. data/ext/boost/date_time/gregorian/parsers.hpp +1 -1
  140. data/ext/boost/date_time/gregorian_calendar.hpp +1 -1
  141. data/ext/boost/date_time/gregorian_calendar.ipp +1 -1
  142. data/ext/boost/date_time/int_adapter.hpp +1 -1
  143. data/ext/boost/date_time/iso_format.hpp +1 -1
  144. data/ext/boost/date_time/locale_config.hpp +1 -1
  145. data/ext/boost/date_time/microsec_time_clock.hpp +1 -1
  146. data/ext/boost/date_time/parse_format_base.hpp +1 -1
  147. data/ext/boost/date_time/period.hpp +1 -1
  148. data/ext/boost/date_time/period_formatter.hpp +5 -5
  149. data/ext/boost/date_time/period_parser.hpp +1 -1
  150. data/ext/boost/date_time/posix_time/conversion.hpp +1 -1
  151. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
  152. data/ext/boost/date_time/posix_time/posix_time.hpp +1 -1
  153. data/ext/boost/date_time/posix_time/posix_time_config.hpp +2 -2
  154. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +1 -1
  155. data/ext/boost/date_time/posix_time/posix_time_io.hpp +1 -1
  156. data/ext/boost/date_time/posix_time/posix_time_system.hpp +1 -1
  157. data/ext/boost/date_time/posix_time/ptime.hpp +1 -1
  158. data/ext/boost/date_time/posix_time/time_formatters.hpp +1 -1
  159. data/ext/boost/date_time/posix_time/time_parsers.hpp +1 -1
  160. data/ext/boost/date_time/posix_time/time_period.hpp +1 -1
  161. data/ext/boost/date_time/special_defs.hpp +1 -1
  162. data/ext/boost/date_time/special_values_formatter.hpp +1 -1
  163. data/ext/boost/date_time/string_convert.hpp +1 -1
  164. data/ext/boost/date_time/string_parse_tree.hpp +1 -1
  165. data/ext/boost/date_time/strings_from_facet.hpp +1 -1
  166. data/ext/boost/date_time/time.hpp +1 -1
  167. data/ext/boost/date_time/time_clock.hpp +1 -1
  168. data/ext/boost/date_time/time_defs.hpp +1 -1
  169. data/ext/boost/date_time/time_duration.hpp +17 -6
  170. data/ext/boost/date_time/time_facet.hpp +1 -1
  171. data/ext/boost/date_time/time_formatting_streams.hpp +1 -1
  172. data/ext/boost/date_time/time_iterator.hpp +17 -17
  173. data/ext/boost/date_time/time_parsing.hpp +6 -3
  174. data/ext/boost/date_time/time_resolution_traits.hpp +1 -1
  175. data/ext/boost/date_time/time_system_counted.hpp +1 -1
  176. data/ext/boost/date_time/time_system_split.hpp +1 -1
  177. data/ext/boost/date_time/wrapping_int.hpp +27 -27
  178. data/ext/boost/date_time/year_month_day.hpp +1 -1
  179. data/ext/boost/detail/container_fwd.hpp +162 -0
  180. data/ext/boost/detail/is_incrementable.hpp +134 -0
  181. data/ext/boost/detail/scoped_enum_emulation.hpp +337 -0
  182. data/ext/boost/exception/detail/attribute_noreturn.hpp +1 -1
  183. data/ext/boost/exception/detail/error_info_impl.hpp +2 -1
  184. data/ext/boost/exception/detail/exception_ptr.hpp +7 -2
  185. data/ext/boost/exception/exception.hpp +29 -2
  186. data/ext/boost/exception/info.hpp +1 -1
  187. data/ext/boost/foreach.hpp +1128 -0
  188. data/ext/boost/foreach_fwd.hpp +51 -0
  189. data/ext/boost/function/function_template.hpp +50 -1
  190. data/ext/boost/functional/hash.hpp +7 -0
  191. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +29 -0
  192. data/ext/boost/functional/hash/detail/float_functions.hpp +246 -0
  193. data/ext/boost/functional/hash/detail/hash_float.hpp +268 -0
  194. data/ext/boost/functional/hash/detail/limits.hpp +61 -0
  195. data/ext/boost/functional/hash/extensions.hpp +367 -0
  196. data/ext/boost/functional/hash/hash.hpp +509 -0
  197. data/ext/boost/functional/hash/hash_fwd.hpp +40 -0
  198. data/ext/boost/functional/hash_fwd.hpp +7 -0
  199. data/ext/boost/indirect_reference.hpp +43 -0
  200. data/ext/boost/integer.hpp +19 -15
  201. data/ext/boost/integer/static_log2.hpp +127 -0
  202. data/ext/boost/integer_traits.hpp +1 -1
  203. data/ext/boost/iterator/iterator_facade.hpp +32 -36
  204. data/ext/boost/iterator/reverse_iterator.hpp +1 -1
  205. data/ext/boost/iterator/transform_iterator.hpp +1 -1
  206. data/ext/boost/lambda/core.hpp +79 -0
  207. data/ext/boost/lambda/detail/actions.hpp +174 -0
  208. data/ext/boost/lambda/detail/arity_code.hpp +110 -0
  209. data/ext/boost/lambda/detail/function_adaptors.hpp +789 -0
  210. data/ext/boost/lambda/detail/is_instance_of.hpp +104 -0
  211. data/ext/boost/lambda/detail/lambda_config.hpp +48 -0
  212. data/ext/boost/lambda/detail/lambda_functor_base.hpp +615 -0
  213. data/ext/boost/lambda/detail/lambda_functors.hpp +324 -0
  214. data/ext/boost/lambda/detail/lambda_fwd.hpp +74 -0
  215. data/ext/boost/lambda/detail/lambda_traits.hpp +578 -0
  216. data/ext/boost/lambda/detail/member_ptr.hpp +737 -0
  217. data/ext/boost/lambda/detail/operator_actions.hpp +139 -0
  218. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +271 -0
  219. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +917 -0
  220. data/ext/boost/lambda/detail/operators.hpp +370 -0
  221. data/ext/boost/lambda/detail/ret.hpp +325 -0
  222. data/ext/boost/lambda/detail/return_type_traits.hpp +282 -0
  223. data/ext/boost/lambda/detail/select_functions.hpp +74 -0
  224. data/ext/boost/lambda/lambda.hpp +34 -0
  225. data/ext/boost/lexical_cast.hpp +807 -497
  226. data/ext/boost/libs/system/src/error_code.cpp +430 -0
  227. data/ext/boost/libs/system/src/local_free_on_destruction.hpp +40 -0
  228. data/ext/boost/libs/thread/src/future.cpp +61 -0
  229. data/ext/boost/{src → libs/thread/src}/pthread/once.cpp +28 -9
  230. data/ext/boost/{src → libs/thread/src}/pthread/thread.cpp +139 -47
  231. data/ext/boost/{src → libs/thread/src}/pthread/timeconv.inl +0 -0
  232. data/ext/boost/{src → libs/thread/src}/tss_null.cpp +2 -2
  233. data/ext/boost/math/policies/policy.hpp +4 -4
  234. data/ext/boost/math/special_functions/fpclassify.hpp +10 -6
  235. data/ext/boost/math/special_functions/math_fwd.hpp +226 -0
  236. data/ext/boost/math/tools/config.hpp +10 -1
  237. data/ext/boost/move/move.hpp +70 -19
  238. data/ext/boost/mpl/O1_size.hpp +1 -1
  239. data/ext/boost/mpl/O1_size_fwd.hpp +1 -1
  240. data/ext/boost/mpl/accumulate.hpp +39 -0
  241. data/ext/boost/mpl/advance.hpp +1 -1
  242. data/ext/boost/mpl/advance_fwd.hpp +1 -1
  243. data/ext/boost/mpl/alias.hpp +21 -0
  244. data/ext/boost/mpl/always.hpp +1 -1
  245. data/ext/boost/mpl/and.hpp +1 -1
  246. data/ext/boost/mpl/apply.hpp +1 -1
  247. data/ext/boost/mpl/apply_fwd.hpp +1 -1
  248. data/ext/boost/mpl/apply_wrap.hpp +1 -1
  249. data/ext/boost/mpl/arg.hpp +1 -1
  250. data/ext/boost/mpl/arg_fwd.hpp +1 -1
  251. data/ext/boost/mpl/arithmetic.hpp +25 -0
  252. data/ext/boost/mpl/as_sequence.hpp +38 -0
  253. data/ext/boost/mpl/assert.hpp +1 -1
  254. data/ext/boost/mpl/at.hpp +1 -1
  255. data/ext/boost/mpl/at_fwd.hpp +1 -1
  256. data/ext/boost/mpl/aux_/O1_size_impl.hpp +1 -1
  257. data/ext/boost/mpl/aux_/adl_barrier.hpp +1 -1
  258. data/ext/boost/mpl/aux_/advance_backward.hpp +1 -1
  259. data/ext/boost/mpl/aux_/advance_forward.hpp +1 -1
  260. data/ext/boost/mpl/aux_/apply_1st.hpp +35 -0
  261. data/ext/boost/mpl/aux_/arg_typedef.hpp +1 -1
  262. data/ext/boost/mpl/aux_/arithmetic_op.hpp +1 -1
  263. data/ext/boost/mpl/aux_/arity.hpp +1 -1
  264. data/ext/boost/mpl/aux_/arity_spec.hpp +1 -1
  265. data/ext/boost/mpl/aux_/at_impl.hpp +1 -1
  266. data/ext/boost/mpl/aux_/back_impl.hpp +43 -0
  267. data/ext/boost/mpl/aux_/basic_bind.hpp +21 -0
  268. data/ext/boost/mpl/aux_/begin_end_impl.hpp +1 -1
  269. data/ext/boost/mpl/aux_/clear_impl.hpp +1 -1
  270. data/ext/boost/mpl/aux_/common_name_wknd.hpp +1 -1
  271. data/ext/boost/mpl/aux_/comparison_op.hpp +1 -1
  272. data/ext/boost/mpl/aux_/config/adl.hpp +1 -1
  273. data/ext/boost/mpl/aux_/config/arrays.hpp +1 -1
  274. data/ext/boost/mpl/aux_/config/bind.hpp +1 -1
  275. data/ext/boost/mpl/aux_/config/compiler.hpp +1 -1
  276. data/ext/boost/mpl/aux_/config/ctps.hpp +1 -1
  277. data/ext/boost/mpl/aux_/config/dependent_nttp.hpp +35 -0
  278. data/ext/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +27 -0
  279. data/ext/boost/mpl/aux_/config/dtp.hpp +1 -1
  280. data/ext/boost/mpl/aux_/config/eti.hpp +1 -1
  281. data/ext/boost/mpl/aux_/config/forwarding.hpp +1 -1
  282. data/ext/boost/mpl/aux_/config/gcc.hpp +1 -1
  283. data/ext/boost/mpl/aux_/config/has_apply.hpp +1 -1
  284. data/ext/boost/mpl/aux_/config/has_xxx.hpp +1 -1
  285. data/ext/boost/mpl/aux_/config/integral.hpp +1 -1
  286. data/ext/boost/mpl/aux_/config/intel.hpp +1 -1
  287. data/ext/boost/mpl/aux_/config/lambda.hpp +1 -1
  288. data/ext/boost/mpl/aux_/config/msvc.hpp +1 -1
  289. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +1 -1
  290. data/ext/boost/mpl/aux_/config/nttp.hpp +1 -1
  291. data/ext/boost/mpl/aux_/config/operators.hpp +33 -0
  292. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +1 -1
  293. data/ext/boost/mpl/aux_/config/pp_counter.hpp +1 -1
  294. data/ext/boost/mpl/aux_/config/preprocessor.hpp +1 -1
  295. data/ext/boost/mpl/aux_/config/static_constant.hpp +1 -1
  296. data/ext/boost/mpl/aux_/config/ttp.hpp +1 -1
  297. data/ext/boost/mpl/aux_/config/typeof.hpp +1 -1
  298. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +1 -1
  299. data/ext/boost/mpl/aux_/config/workaround.hpp +1 -1
  300. data/ext/boost/mpl/aux_/contains_impl.hpp +1 -1
  301. data/ext/boost/mpl/aux_/count_args.hpp +105 -0
  302. data/ext/boost/mpl/aux_/count_impl.hpp +44 -0
  303. data/ext/boost/mpl/aux_/empty_impl.hpp +43 -0
  304. data/ext/boost/mpl/aux_/erase_impl.hpp +69 -0
  305. data/ext/boost/mpl/aux_/erase_key_impl.hpp +32 -0
  306. data/ext/boost/mpl/aux_/filter_iter.hpp +140 -0
  307. data/ext/boost/mpl/aux_/fold_impl.hpp +1 -1
  308. data/ext/boost/mpl/aux_/fold_impl_body.hpp +365 -0
  309. data/ext/boost/mpl/aux_/fold_op.hpp +37 -0
  310. data/ext/boost/mpl/aux_/fold_pred.hpp +37 -0
  311. data/ext/boost/mpl/aux_/front_impl.hpp +41 -0
  312. data/ext/boost/mpl/aux_/full_lambda.hpp +1 -1
  313. data/ext/boost/mpl/aux_/has_apply.hpp +1 -1
  314. data/ext/boost/mpl/aux_/has_begin.hpp +1 -1
  315. data/ext/boost/mpl/aux_/has_key_impl.hpp +34 -0
  316. data/ext/boost/mpl/aux_/has_rebind.hpp +99 -0
  317. data/ext/boost/mpl/aux_/has_size.hpp +1 -1
  318. data/ext/boost/mpl/aux_/has_tag.hpp +1 -1
  319. data/ext/boost/mpl/aux_/has_type.hpp +1 -1
  320. data/ext/boost/mpl/aux_/include_preprocessed.hpp +1 -1
  321. data/ext/boost/mpl/aux_/insert_impl.hpp +68 -0
  322. data/ext/boost/mpl/aux_/insert_range_impl.hpp +77 -0
  323. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +1 -1
  324. data/ext/boost/mpl/aux_/integral_wrapper.hpp +1 -1
  325. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +1 -1
  326. data/ext/boost/mpl/aux_/iter_apply.hpp +1 -1
  327. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +1 -1
  328. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +1 -1
  329. data/ext/boost/mpl/aux_/iter_push_front.hpp +36 -0
  330. data/ext/boost/mpl/aux_/joint_iter.hpp +120 -0
  331. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +1 -1
  332. data/ext/boost/mpl/aux_/lambda_no_ctps.hpp +193 -0
  333. data/ext/boost/mpl/aux_/lambda_spec.hpp +1 -1
  334. data/ext/boost/mpl/aux_/lambda_support.hpp +1 -1
  335. data/ext/boost/mpl/aux_/largest_int.hpp +1 -1
  336. data/ext/boost/mpl/aux_/logical_op.hpp +165 -0
  337. data/ext/boost/mpl/aux_/msvc_dtw.hpp +68 -0
  338. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +1 -1
  339. data/ext/boost/mpl/aux_/msvc_is_class.hpp +58 -0
  340. data/ext/boost/mpl/aux_/msvc_never_true.hpp +1 -1
  341. data/ext/boost/mpl/aux_/msvc_type.hpp +1 -1
  342. data/ext/boost/mpl/aux_/na.hpp +1 -1
  343. data/ext/boost/mpl/aux_/na_assert.hpp +1 -1
  344. data/ext/boost/mpl/aux_/na_fwd.hpp +1 -1
  345. data/ext/boost/mpl/aux_/na_spec.hpp +1 -1
  346. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +1 -1
  347. data/ext/boost/mpl/aux_/nttp_decl.hpp +1 -1
  348. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +1 -1
  349. data/ext/boost/mpl/aux_/numeric_op.hpp +1 -1
  350. data/ext/boost/mpl/aux_/order_impl.hpp +76 -0
  351. data/ext/boost/mpl/aux_/overload_names.hpp +48 -0
  352. data/ext/boost/mpl/aux_/partition_op.hpp +58 -0
  353. data/ext/boost/mpl/aux_/pop_back_impl.hpp +34 -0
  354. data/ext/boost/mpl/aux_/pop_front_impl.hpp +44 -0
  355. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp +97 -0
  356. data/ext/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp +97 -0
  357. data/ext/boost/mpl/aux_/preprocessed/bcc/and.hpp +69 -0
  358. data/ext/boost/mpl/aux_/preprocessed/bcc/apply.hpp +169 -0
  359. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp +52 -0
  360. data/ext/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp +461 -0
  361. data/ext/boost/mpl/aux_/preprocessed/bcc/arg.hpp +117 -0
  362. data/ext/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp +300 -0
  363. data/ext/boost/mpl/aux_/preprocessed/bcc/bind.hpp +397 -0
  364. data/ext/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp +46 -0
  365. data/ext/boost/mpl/aux_/preprocessed/bcc/bitand.hpp +147 -0
  366. data/ext/boost/mpl/aux_/preprocessed/bcc/bitor.hpp +147 -0
  367. data/ext/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp +147 -0
  368. data/ext/boost/mpl/aux_/preprocessed/bcc/deque.hpp +323 -0
  369. data/ext/boost/mpl/aux_/preprocessed/bcc/divides.hpp +146 -0
  370. data/ext/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +94 -0
  371. data/ext/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp +180 -0
  372. data/ext/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +558 -0
  373. data/ext/boost/mpl/aux_/preprocessed/bcc/greater.hpp +94 -0
  374. data/ext/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +94 -0
  375. data/ext/boost/mpl/aux_/preprocessed/bcc/inherit.hpp +139 -0
  376. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp +133 -0
  377. data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp +180 -0
  378. data/ext/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +229 -0
  379. data/ext/boost/mpl/aux_/preprocessed/bcc/less.hpp +94 -0
  380. data/ext/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +94 -0
  381. data/ext/boost/mpl/aux_/preprocessed/bcc/list.hpp +323 -0
  382. data/ext/boost/mpl/aux_/preprocessed/bcc/list_c.hpp +328 -0
  383. data/ext/boost/mpl/aux_/preprocessed/bcc/map.hpp +323 -0
  384. data/ext/boost/mpl/aux_/preprocessed/bcc/minus.hpp +146 -0
  385. data/ext/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +101 -0
  386. data/ext/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +94 -0
  387. data/ext/boost/mpl/aux_/preprocessed/bcc/or.hpp +69 -0
  388. data/ext/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp +105 -0
  389. data/ext/boost/mpl/aux_/preprocessed/bcc/plus.hpp +146 -0
  390. data/ext/boost/mpl/aux_/preprocessed/bcc/quote.hpp +119 -0
  391. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp +295 -0
  392. data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp +295 -0
  393. data/ext/boost/mpl/aux_/preprocessed/bcc/set.hpp +323 -0
  394. data/ext/boost/mpl/aux_/preprocessed/bcc/set_c.hpp +328 -0
  395. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +99 -0
  396. data/ext/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +99 -0
  397. data/ext/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp +40 -0
  398. data/ext/boost/mpl/aux_/preprocessed/bcc/times.hpp +146 -0
  399. data/ext/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp +97 -0
  400. data/ext/boost/mpl/aux_/preprocessed/bcc/vector.hpp +323 -0
  401. data/ext/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp +309 -0
  402. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp +97 -0
  403. data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp +97 -0
  404. data/ext/boost/mpl/aux_/preprocessed/bcc551/and.hpp +69 -0
  405. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply.hpp +169 -0
  406. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp +52 -0
  407. data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp +456 -0
  408. data/ext/boost/mpl/aux_/preprocessed/bcc551/arg.hpp +123 -0
  409. data/ext/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp +306 -0
  410. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind.hpp +403 -0
  411. data/ext/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp +46 -0
  412. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp +147 -0
  413. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp +147 -0
  414. data/ext/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp +147 -0
  415. data/ext/boost/mpl/aux_/preprocessed/bcc551/deque.hpp +323 -0
  416. data/ext/boost/mpl/aux_/preprocessed/bcc551/divides.hpp +146 -0
  417. data/ext/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +94 -0
  418. data/ext/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp +180 -0
  419. data/ext/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +558 -0
  420. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +94 -0
  421. data/ext/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +94 -0
  422. data/ext/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp +141 -0
  423. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp +133 -0
  424. data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp +180 -0
  425. data/ext/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +229 -0
  426. data/ext/boost/mpl/aux_/preprocessed/bcc551/less.hpp +94 -0
  427. data/ext/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +94 -0
  428. data/ext/boost/mpl/aux_/preprocessed/bcc551/list.hpp +323 -0
  429. data/ext/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp +328 -0
  430. data/ext/boost/mpl/aux_/preprocessed/bcc551/map.hpp +323 -0
  431. data/ext/boost/mpl/aux_/preprocessed/bcc551/minus.hpp +146 -0
  432. data/ext/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +101 -0
  433. data/ext/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +94 -0
  434. data/ext/boost/mpl/aux_/preprocessed/bcc551/or.hpp +69 -0
  435. data/ext/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp +105 -0
  436. data/ext/boost/mpl/aux_/preprocessed/bcc551/plus.hpp +146 -0
  437. data/ext/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +11 -0
  438. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp +295 -0
  439. data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp +295 -0
  440. data/ext/boost/mpl/aux_/preprocessed/bcc551/set.hpp +323 -0
  441. data/ext/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp +328 -0
  442. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +99 -0
  443. data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +99 -0
  444. data/ext/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp +40 -0
  445. data/ext/boost/mpl/aux_/preprocessed/bcc551/times.hpp +146 -0
  446. data/ext/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp +97 -0
  447. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector.hpp +323 -0
  448. data/ext/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp +309 -0
  449. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/advance_backward.hpp +97 -0
  450. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/advance_forward.hpp +97 -0
  451. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/and.hpp +69 -0
  452. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply.hpp +169 -0
  453. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply_fwd.hpp +52 -0
  454. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/apply_wrap.hpp +456 -0
  455. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/arg.hpp +117 -0
  456. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/basic_bind.hpp +300 -0
  457. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bind.hpp +397 -0
  458. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bind_fwd.hpp +46 -0
  459. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitand.hpp +147 -0
  460. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitor.hpp +147 -0
  461. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/bitxor.hpp +147 -0
  462. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/deque.hpp +323 -0
  463. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/divides.hpp +146 -0
  464. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/equal_to.hpp +94 -0
  465. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/fold_impl.hpp +180 -0
  466. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/full_lambda.hpp +558 -0
  467. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/greater.hpp +94 -0
  468. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/greater_equal.hpp +94 -0
  469. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/inherit.hpp +139 -0
  470. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_if_impl.hpp +133 -0
  471. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/iter_fold_impl.hpp +180 -0
  472. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/lambda_no_ctps.hpp +229 -0
  473. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/less.hpp +94 -0
  474. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/less_equal.hpp +94 -0
  475. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/list.hpp +323 -0
  476. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/list_c.hpp +328 -0
  477. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/map.hpp +323 -0
  478. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/minus.hpp +146 -0
  479. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/modulus.hpp +101 -0
  480. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/not_equal_to.hpp +94 -0
  481. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/or.hpp +69 -0
  482. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/placeholders.hpp +105 -0
  483. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/plus.hpp +146 -0
  484. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/quote.hpp +11 -0
  485. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_fold_impl.hpp +295 -0
  486. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/reverse_iter_fold_impl.hpp +295 -0
  487. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/set.hpp +323 -0
  488. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/set_c.hpp +328 -0
  489. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/shift_left.hpp +99 -0
  490. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/shift_right.hpp +99 -0
  491. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/template_arity.hpp +40 -0
  492. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/times.hpp +146 -0
  493. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/unpack_args.hpp +97 -0
  494. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/vector.hpp +323 -0
  495. data/ext/boost/mpl/aux_/preprocessed/bcc_pre590/vector_c.hpp +309 -0
  496. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp +97 -0
  497. data/ext/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp +97 -0
  498. data/ext/boost/mpl/aux_/preprocessed/dmc/and.hpp +69 -0
  499. data/ext/boost/mpl/aux_/preprocessed/dmc/apply.hpp +169 -0
  500. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp +52 -0
  501. data/ext/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp +84 -0
  502. data/ext/boost/mpl/aux_/preprocessed/dmc/arg.hpp +123 -0
  503. data/ext/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp +406 -0
  504. data/ext/boost/mpl/aux_/preprocessed/dmc/bind.hpp +515 -0
  505. data/ext/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp +53 -0
  506. data/ext/boost/mpl/aux_/preprocessed/dmc/bitand.hpp +147 -0
  507. data/ext/boost/mpl/aux_/preprocessed/dmc/bitor.hpp +147 -0
  508. data/ext/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp +147 -0
  509. data/ext/boost/mpl/aux_/preprocessed/dmc/deque.hpp +323 -0
  510. data/ext/boost/mpl/aux_/preprocessed/dmc/divides.hpp +146 -0
  511. data/ext/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +94 -0
  512. data/ext/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp +180 -0
  513. data/ext/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp +536 -0
  514. data/ext/boost/mpl/aux_/preprocessed/dmc/greater.hpp +94 -0
  515. data/ext/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +94 -0
  516. data/ext/boost/mpl/aux_/preprocessed/dmc/inherit.hpp +141 -0
  517. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp +133 -0
  518. data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp +180 -0
  519. data/ext/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp +229 -0
  520. data/ext/boost/mpl/aux_/preprocessed/dmc/less.hpp +94 -0
  521. data/ext/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +94 -0
  522. data/ext/boost/mpl/aux_/preprocessed/dmc/list.hpp +323 -0
  523. data/ext/boost/mpl/aux_/preprocessed/dmc/list_c.hpp +328 -0
  524. data/ext/boost/mpl/aux_/preprocessed/dmc/map.hpp +323 -0
  525. data/ext/boost/mpl/aux_/preprocessed/dmc/minus.hpp +146 -0
  526. data/ext/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +101 -0
  527. data/ext/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +94 -0
  528. data/ext/boost/mpl/aux_/preprocessed/dmc/or.hpp +69 -0
  529. data/ext/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp +105 -0
  530. data/ext/boost/mpl/aux_/preprocessed/dmc/plus.hpp +146 -0
  531. data/ext/boost/mpl/aux_/preprocessed/dmc/quote.hpp +123 -0
  532. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp +231 -0
  533. data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp +231 -0
  534. data/ext/boost/mpl/aux_/preprocessed/dmc/set.hpp +323 -0
  535. data/ext/boost/mpl/aux_/preprocessed/dmc/set_c.hpp +328 -0
  536. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +99 -0
  537. data/ext/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +99 -0
  538. data/ext/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp +11 -0
  539. data/ext/boost/mpl/aux_/preprocessed/dmc/times.hpp +146 -0
  540. data/ext/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp +94 -0
  541. data/ext/boost/mpl/aux_/preprocessed/dmc/vector.hpp +323 -0
  542. data/ext/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp +309 -0
  543. data/ext/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp +440 -0
  544. data/ext/boost/mpl/aux_/preprocessed/gcc/bitand.hpp +147 -0
  545. data/ext/boost/mpl/aux_/preprocessed/gcc/bitor.hpp +147 -0
  546. data/ext/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp +147 -0
  547. data/ext/boost/mpl/aux_/preprocessed/gcc/deque.hpp +323 -0
  548. data/ext/boost/mpl/aux_/preprocessed/gcc/divides.hpp +146 -0
  549. data/ext/boost/mpl/aux_/preprocessed/gcc/inherit.hpp +141 -0
  550. data/ext/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +229 -0
  551. data/ext/boost/mpl/aux_/preprocessed/gcc/list_c.hpp +328 -0
  552. data/ext/boost/mpl/aux_/preprocessed/gcc/map.hpp +323 -0
  553. data/ext/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +101 -0
  554. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp +231 -0
  555. data/ext/boost/mpl/aux_/preprocessed/gcc/set.hpp +323 -0
  556. data/ext/boost/mpl/aux_/preprocessed/gcc/set_c.hpp +328 -0
  557. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +99 -0
  558. data/ext/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +99 -0
  559. data/ext/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp +94 -0
  560. data/ext/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp +309 -0
  561. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp +132 -0
  562. data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp +132 -0
  563. data/ext/boost/mpl/aux_/preprocessed/msvc60/and.hpp +73 -0
  564. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply.hpp +166 -0
  565. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp +46 -0
  566. data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp +247 -0
  567. data/ext/boost/mpl/aux_/preprocessed/msvc60/arg.hpp +123 -0
  568. data/ext/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp +328 -0
  569. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind.hpp +432 -0
  570. data/ext/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp +46 -0
  571. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +149 -0
  572. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +149 -0
  573. data/ext/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +149 -0
  574. data/ext/boost/mpl/aux_/preprocessed/msvc60/deque.hpp +556 -0
  575. data/ext/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +148 -0
  576. data/ext/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp +102 -0
  577. data/ext/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp +293 -0
  578. data/ext/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +554 -0
  579. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater.hpp +102 -0
  580. data/ext/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp +102 -0
  581. data/ext/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp +166 -0
  582. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp +133 -0
  583. data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp +293 -0
  584. data/ext/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +229 -0
  585. data/ext/boost/mpl/aux_/preprocessed/msvc60/less.hpp +102 -0
  586. data/ext/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp +102 -0
  587. data/ext/boost/mpl/aux_/preprocessed/msvc60/list.hpp +556 -0
  588. data/ext/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp +534 -0
  589. data/ext/boost/mpl/aux_/preprocessed/msvc60/map.hpp +556 -0
  590. data/ext/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +148 -0
  591. data/ext/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp +115 -0
  592. data/ext/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp +102 -0
  593. data/ext/boost/mpl/aux_/preprocessed/msvc60/or.hpp +73 -0
  594. data/ext/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp +105 -0
  595. data/ext/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +148 -0
  596. data/ext/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +11 -0
  597. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp +343 -0
  598. data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp +343 -0
  599. data/ext/boost/mpl/aux_/preprocessed/msvc60/set.hpp +556 -0
  600. data/ext/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp +534 -0
  601. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp +114 -0
  602. data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp +114 -0
  603. data/ext/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp +46 -0
  604. data/ext/boost/mpl/aux_/preprocessed/msvc60/times.hpp +148 -0
  605. data/ext/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp +109 -0
  606. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector.hpp +556 -0
  607. data/ext/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp +534 -0
  608. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp +97 -0
  609. data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp +97 -0
  610. data/ext/boost/mpl/aux_/preprocessed/msvc70/and.hpp +71 -0
  611. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply.hpp +160 -0
  612. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp +46 -0
  613. data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp +138 -0
  614. data/ext/boost/mpl/aux_/preprocessed/msvc70/arg.hpp +123 -0
  615. data/ext/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp +328 -0
  616. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind.hpp +432 -0
  617. data/ext/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp +46 -0
  618. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +151 -0
  619. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +151 -0
  620. data/ext/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +151 -0
  621. data/ext/boost/mpl/aux_/preprocessed/msvc70/deque.hpp +556 -0
  622. data/ext/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +150 -0
  623. data/ext/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp +102 -0
  624. data/ext/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp +245 -0
  625. data/ext/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +554 -0
  626. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater.hpp +102 -0
  627. data/ext/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp +102 -0
  628. data/ext/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp +166 -0
  629. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp +133 -0
  630. data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp +245 -0
  631. data/ext/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +229 -0
  632. data/ext/boost/mpl/aux_/preprocessed/msvc70/less.hpp +102 -0
  633. data/ext/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp +102 -0
  634. data/ext/boost/mpl/aux_/preprocessed/msvc70/list.hpp +556 -0
  635. data/ext/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp +534 -0
  636. data/ext/boost/mpl/aux_/preprocessed/msvc70/map.hpp +556 -0
  637. data/ext/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +150 -0
  638. data/ext/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp +115 -0
  639. data/ext/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp +102 -0
  640. data/ext/boost/mpl/aux_/preprocessed/msvc70/or.hpp +71 -0
  641. data/ext/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp +105 -0
  642. data/ext/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +150 -0
  643. data/ext/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +116 -0
  644. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp +295 -0
  645. data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp +295 -0
  646. data/ext/boost/mpl/aux_/preprocessed/msvc70/set.hpp +556 -0
  647. data/ext/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp +534 -0
  648. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp +114 -0
  649. data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp +114 -0
  650. data/ext/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp +46 -0
  651. data/ext/boost/mpl/aux_/preprocessed/msvc70/times.hpp +150 -0
  652. data/ext/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp +109 -0
  653. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector.hpp +556 -0
  654. data/ext/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp +534 -0
  655. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp +97 -0
  656. data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp +97 -0
  657. data/ext/boost/mpl/aux_/preprocessed/mwcw/and.hpp +69 -0
  658. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply.hpp +169 -0
  659. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp +52 -0
  660. data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp +456 -0
  661. data/ext/boost/mpl/aux_/preprocessed/mwcw/arg.hpp +123 -0
  662. data/ext/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp +440 -0
  663. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind.hpp +561 -0
  664. data/ext/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp +52 -0
  665. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp +147 -0
  666. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp +147 -0
  667. data/ext/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp +147 -0
  668. data/ext/boost/mpl/aux_/preprocessed/mwcw/deque.hpp +323 -0
  669. data/ext/boost/mpl/aux_/preprocessed/mwcw/divides.hpp +146 -0
  670. data/ext/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +94 -0
  671. data/ext/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp +180 -0
  672. data/ext/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +554 -0
  673. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +94 -0
  674. data/ext/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +94 -0
  675. data/ext/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp +141 -0
  676. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp +133 -0
  677. data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp +180 -0
  678. data/ext/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +229 -0
  679. data/ext/boost/mpl/aux_/preprocessed/mwcw/less.hpp +94 -0
  680. data/ext/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +94 -0
  681. data/ext/boost/mpl/aux_/preprocessed/mwcw/list.hpp +323 -0
  682. data/ext/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp +328 -0
  683. data/ext/boost/mpl/aux_/preprocessed/mwcw/map.hpp +323 -0
  684. data/ext/boost/mpl/aux_/preprocessed/mwcw/minus.hpp +146 -0
  685. data/ext/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +101 -0
  686. data/ext/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +94 -0
  687. data/ext/boost/mpl/aux_/preprocessed/mwcw/or.hpp +69 -0
  688. data/ext/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp +105 -0
  689. data/ext/boost/mpl/aux_/preprocessed/mwcw/plus.hpp +146 -0
  690. data/ext/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +123 -0
  691. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp +231 -0
  692. data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp +231 -0
  693. data/ext/boost/mpl/aux_/preprocessed/mwcw/set.hpp +323 -0
  694. data/ext/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp +328 -0
  695. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +99 -0
  696. data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +99 -0
  697. data/ext/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp +11 -0
  698. data/ext/boost/mpl/aux_/preprocessed/mwcw/times.hpp +146 -0
  699. data/ext/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp +94 -0
  700. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector.hpp +323 -0
  701. data/ext/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp +309 -0
  702. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp +97 -0
  703. data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp +97 -0
  704. data/ext/boost/mpl/aux_/preprocessed/no_ctps/and.hpp +73 -0
  705. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp +268 -0
  706. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp +50 -0
  707. data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp +78 -0
  708. data/ext/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp +123 -0
  709. data/ext/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp +486 -0
  710. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp +590 -0
  711. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp +52 -0
  712. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +134 -0
  713. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +134 -0
  714. data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +134 -0
  715. data/ext/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp +556 -0
  716. data/ext/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +133 -0
  717. data/ext/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +94 -0
  718. data/ext/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp +245 -0
  719. data/ext/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +554 -0
  720. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +94 -0
  721. data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +94 -0
  722. data/ext/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp +166 -0
  723. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp +133 -0
  724. data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp +245 -0
  725. data/ext/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +229 -0
  726. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +94 -0
  727. data/ext/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +94 -0
  728. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list.hpp +556 -0
  729. data/ext/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp +534 -0
  730. data/ext/boost/mpl/aux_/preprocessed/no_ctps/map.hpp +556 -0
  731. data/ext/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +133 -0
  732. data/ext/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +101 -0
  733. data/ext/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +94 -0
  734. data/ext/boost/mpl/aux_/preprocessed/no_ctps/or.hpp +73 -0
  735. data/ext/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp +105 -0
  736. data/ext/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +133 -0
  737. data/ext/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +116 -0
  738. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp +295 -0
  739. data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp +295 -0
  740. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set.hpp +556 -0
  741. data/ext/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp +534 -0
  742. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +99 -0
  743. data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +99 -0
  744. data/ext/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp +40 -0
  745. data/ext/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +133 -0
  746. data/ext/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp +109 -0
  747. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp +556 -0
  748. data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp +534 -0
  749. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp +97 -0
  750. data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp +97 -0
  751. data/ext/boost/mpl/aux_/preprocessed/no_ttp/and.hpp +69 -0
  752. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp +169 -0
  753. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp +52 -0
  754. data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp +84 -0
  755. data/ext/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp +123 -0
  756. data/ext/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp +369 -0
  757. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp +466 -0
  758. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp +52 -0
  759. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp +157 -0
  760. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp +157 -0
  761. data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp +157 -0
  762. data/ext/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp +323 -0
  763. data/ext/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp +156 -0
  764. data/ext/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +98 -0
  765. data/ext/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp +180 -0
  766. data/ext/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp +554 -0
  767. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +98 -0
  768. data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +98 -0
  769. data/ext/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp +141 -0
  770. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp +133 -0
  771. data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp +180 -0
  772. data/ext/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp +229 -0
  773. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +98 -0
  774. data/ext/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +98 -0
  775. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list.hpp +323 -0
  776. data/ext/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp +328 -0
  777. data/ext/boost/mpl/aux_/preprocessed/no_ttp/map.hpp +323 -0
  778. data/ext/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp +156 -0
  779. data/ext/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +111 -0
  780. data/ext/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +98 -0
  781. data/ext/boost/mpl/aux_/preprocessed/no_ttp/or.hpp +69 -0
  782. data/ext/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp +105 -0
  783. data/ext/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp +156 -0
  784. data/ext/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp +11 -0
  785. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp +231 -0
  786. data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp +231 -0
  787. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set.hpp +323 -0
  788. data/ext/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp +328 -0
  789. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +110 -0
  790. data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +110 -0
  791. data/ext/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp +40 -0
  792. data/ext/boost/mpl/aux_/preprocessed/no_ttp/times.hpp +156 -0
  793. data/ext/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp +94 -0
  794. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp +323 -0
  795. data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp +309 -0
  796. data/ext/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp +97 -0
  797. data/ext/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp +97 -0
  798. data/ext/boost/mpl/aux_/preprocessed/plain/and.hpp +64 -0
  799. data/ext/boost/mpl/aux_/preprocessed/plain/apply.hpp +139 -0
  800. data/ext/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp +52 -0
  801. data/ext/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp +84 -0
  802. data/ext/boost/mpl/aux_/preprocessed/plain/arg.hpp +123 -0
  803. data/ext/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp +440 -0
  804. data/ext/boost/mpl/aux_/preprocessed/plain/bind.hpp +561 -0
  805. data/ext/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp +52 -0
  806. data/ext/boost/mpl/aux_/preprocessed/plain/bitand.hpp +142 -0
  807. data/ext/boost/mpl/aux_/preprocessed/plain/bitor.hpp +142 -0
  808. data/ext/boost/mpl/aux_/preprocessed/plain/bitxor.hpp +142 -0
  809. data/ext/boost/mpl/aux_/preprocessed/plain/deque.hpp +323 -0
  810. data/ext/boost/mpl/aux_/preprocessed/plain/divides.hpp +141 -0
  811. data/ext/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +92 -0
  812. data/ext/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp +180 -0
  813. data/ext/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +554 -0
  814. data/ext/boost/mpl/aux_/preprocessed/plain/greater.hpp +92 -0
  815. data/ext/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +92 -0
  816. data/ext/boost/mpl/aux_/preprocessed/plain/inherit.hpp +125 -0
  817. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp +133 -0
  818. data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp +180 -0
  819. data/ext/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +228 -0
  820. data/ext/boost/mpl/aux_/preprocessed/plain/less.hpp +92 -0
  821. data/ext/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +92 -0
  822. data/ext/boost/mpl/aux_/preprocessed/plain/list.hpp +323 -0
  823. data/ext/boost/mpl/aux_/preprocessed/plain/list_c.hpp +328 -0
  824. data/ext/boost/mpl/aux_/preprocessed/plain/map.hpp +323 -0
  825. data/ext/boost/mpl/aux_/preprocessed/plain/minus.hpp +141 -0
  826. data/ext/boost/mpl/aux_/preprocessed/plain/modulus.hpp +99 -0
  827. data/ext/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +92 -0
  828. data/ext/boost/mpl/aux_/preprocessed/plain/or.hpp +64 -0
  829. data/ext/boost/mpl/aux_/preprocessed/plain/placeholders.hpp +105 -0
  830. data/ext/boost/mpl/aux_/preprocessed/plain/plus.hpp +141 -0
  831. data/ext/boost/mpl/aux_/preprocessed/plain/quote.hpp +123 -0
  832. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp +231 -0
  833. data/ext/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp +231 -0
  834. data/ext/boost/mpl/aux_/preprocessed/plain/set.hpp +323 -0
  835. data/ext/boost/mpl/aux_/preprocessed/plain/set_c.hpp +328 -0
  836. data/ext/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +97 -0
  837. data/ext/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +97 -0
  838. data/ext/boost/mpl/aux_/preprocessed/plain/template_arity.hpp +11 -0
  839. data/ext/boost/mpl/aux_/preprocessed/plain/times.hpp +141 -0
  840. data/ext/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp +94 -0
  841. data/ext/boost/mpl/aux_/preprocessed/plain/vector.hpp +323 -0
  842. data/ext/boost/mpl/aux_/preprocessed/plain/vector_c.hpp +309 -0
  843. data/ext/boost/mpl/aux_/preprocessor/add.hpp +65 -0
  844. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +1 -1
  845. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +1 -1
  846. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +1 -1
  847. data/ext/boost/mpl/aux_/preprocessor/ext_params.hpp +78 -0
  848. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +1 -1
  849. data/ext/boost/mpl/aux_/preprocessor/is_seq.hpp +54 -0
  850. data/ext/boost/mpl/aux_/preprocessor/params.hpp +1 -1
  851. data/ext/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +32 -0
  852. data/ext/boost/mpl/aux_/preprocessor/range.hpp +23 -0
  853. data/ext/boost/mpl/aux_/preprocessor/repeat.hpp +51 -0
  854. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +1 -1
  855. data/ext/boost/mpl/aux_/preprocessor/token_equal.hpp +56 -0
  856. data/ext/boost/mpl/aux_/preprocessor/tuple.hpp +29 -0
  857. data/ext/boost/mpl/aux_/ptr_to_ref.hpp +46 -0
  858. data/ext/boost/mpl/aux_/push_back_impl.hpp +1 -1
  859. data/ext/boost/mpl/aux_/push_front_impl.hpp +1 -1
  860. data/ext/boost/mpl/aux_/range_c/O1_size.hpp +31 -0
  861. data/ext/boost/mpl/aux_/range_c/back.hpp +34 -0
  862. data/ext/boost/mpl/aux_/range_c/empty.hpp +37 -0
  863. data/ext/boost/mpl/aux_/range_c/front.hpp +33 -0
  864. data/ext/boost/mpl/aux_/range_c/iterator.hpp +106 -0
  865. data/ext/boost/mpl/aux_/range_c/size.hpp +37 -0
  866. data/ext/boost/mpl/aux_/range_c/tag.hpp +24 -0
  867. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +1 -1
  868. data/ext/boost/mpl/aux_/reverse_fold_impl_body.hpp +412 -0
  869. data/ext/boost/mpl/aux_/reverse_iter_fold_impl.hpp +43 -0
  870. data/ext/boost/mpl/aux_/sequence_wrapper.hpp +292 -0
  871. data/ext/boost/mpl/aux_/shift_op.hpp +87 -0
  872. data/ext/boost/mpl/aux_/single_element_iter.hpp +118 -0
  873. data/ext/boost/mpl/aux_/size_impl.hpp +1 -1
  874. data/ext/boost/mpl/aux_/sort_impl.hpp +121 -0
  875. data/ext/boost/mpl/aux_/static_cast.hpp +1 -1
  876. data/ext/boost/mpl/aux_/template_arity.hpp +1 -1
  877. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +1 -1
  878. data/ext/boost/mpl/aux_/test.hpp +32 -0
  879. data/ext/boost/mpl/aux_/test/assert.hpp +29 -0
  880. data/ext/boost/mpl/aux_/test/data.hpp +25 -0
  881. data/ext/boost/mpl/aux_/test/test_case.hpp +21 -0
  882. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +1 -1
  883. data/ext/boost/mpl/aux_/transform_iter.hpp +123 -0
  884. data/ext/boost/mpl/aux_/type_wrapper.hpp +1 -1
  885. data/ext/boost/mpl/aux_/unwrap.hpp +47 -0
  886. data/ext/boost/mpl/aux_/value_wknd.hpp +1 -1
  887. data/ext/boost/mpl/aux_/yes_no.hpp +1 -1
  888. data/ext/boost/mpl/back.hpp +39 -0
  889. data/ext/boost/mpl/back_fwd.hpp +1 -1
  890. data/ext/boost/mpl/back_inserter.hpp +1 -1
  891. data/ext/boost/mpl/base.hpp +35 -0
  892. data/ext/boost/mpl/begin.hpp +19 -0
  893. data/ext/boost/mpl/begin_end.hpp +1 -1
  894. data/ext/boost/mpl/begin_end_fwd.hpp +1 -1
  895. data/ext/boost/mpl/bind.hpp +1 -1
  896. data/ext/boost/mpl/bind_fwd.hpp +1 -1
  897. data/ext/boost/mpl/bitand.hpp +45 -0
  898. data/ext/boost/mpl/bitor.hpp +45 -0
  899. data/ext/boost/mpl/bitwise.hpp +24 -0
  900. data/ext/boost/mpl/bitxor.hpp +23 -0
  901. data/ext/boost/mpl/bool.hpp +1 -1
  902. data/ext/boost/mpl/bool_fwd.hpp +1 -1
  903. data/ext/boost/mpl/char.hpp +22 -0
  904. data/ext/boost/mpl/char_fwd.hpp +27 -0
  905. data/ext/boost/mpl/clear.hpp +1 -1
  906. data/ext/boost/mpl/clear_fwd.hpp +1 -1
  907. data/ext/boost/mpl/comparison.hpp +1 -1
  908. data/ext/boost/mpl/contains.hpp +1 -1
  909. data/ext/boost/mpl/contains_fwd.hpp +1 -1
  910. data/ext/boost/mpl/copy.hpp +58 -0
  911. data/ext/boost/mpl/copy_if.hpp +96 -0
  912. data/ext/boost/mpl/count.hpp +40 -0
  913. data/ext/boost/mpl/count_fwd.hpp +24 -0
  914. data/ext/boost/mpl/count_if.hpp +79 -0
  915. data/ext/boost/mpl/deque.hpp +58 -0
  916. data/ext/boost/mpl/deref.hpp +1 -1
  917. data/ext/boost/mpl/distance.hpp +1 -1
  918. data/ext/boost/mpl/distance_fwd.hpp +1 -1
  919. data/ext/boost/mpl/divides.hpp +21 -0
  920. data/ext/boost/mpl/empty.hpp +39 -0
  921. data/ext/boost/mpl/empty_base.hpp +59 -0
  922. data/ext/boost/mpl/empty_fwd.hpp +1 -1
  923. data/ext/boost/mpl/empty_sequence.hpp +42 -0
  924. data/ext/boost/mpl/end.hpp +19 -0
  925. data/ext/boost/mpl/equal.hpp +112 -0
  926. data/ext/boost/mpl/equal_to.hpp +1 -1
  927. data/ext/boost/mpl/erase.hpp +42 -0
  928. data/ext/boost/mpl/erase_fwd.hpp +24 -0
  929. data/ext/boost/mpl/erase_key.hpp +41 -0
  930. data/ext/boost/mpl/erase_key_fwd.hpp +24 -0
  931. data/ext/boost/mpl/eval_if.hpp +1 -1
  932. data/ext/boost/mpl/filter_view.hpp +46 -0
  933. data/ext/boost/mpl/find.hpp +1 -1
  934. data/ext/boost/mpl/find_if.hpp +1 -1
  935. data/ext/boost/mpl/fold.hpp +1 -1
  936. data/ext/boost/mpl/for_each.hpp +116 -0
  937. data/ext/boost/mpl/front.hpp +39 -0
  938. data/ext/boost/mpl/front_fwd.hpp +1 -1
  939. data/ext/boost/mpl/front_inserter.hpp +1 -1
  940. data/ext/boost/mpl/greater.hpp +1 -1
  941. data/ext/boost/mpl/greater_equal.hpp +1 -1
  942. data/ext/boost/mpl/has_key.hpp +41 -0
  943. data/ext/boost/mpl/has_key_fwd.hpp +25 -0
  944. data/ext/boost/mpl/has_xxx.hpp +1 -1
  945. data/ext/boost/mpl/identity.hpp +1 -1
  946. data/ext/boost/mpl/if.hpp +1 -1
  947. data/ext/boost/mpl/index_if.hpp +60 -0
  948. data/ext/boost/mpl/index_of.hpp +39 -0
  949. data/ext/boost/mpl/inherit.hpp +229 -0
  950. data/ext/boost/mpl/inherit_linearly.hpp +39 -0
  951. data/ext/boost/mpl/insert.hpp +41 -0
  952. data/ext/boost/mpl/insert_fwd.hpp +24 -0
  953. data/ext/boost/mpl/insert_range.hpp +41 -0
  954. data/ext/boost/mpl/insert_range_fwd.hpp +24 -0
  955. data/ext/boost/mpl/inserter.hpp +1 -1
  956. data/ext/boost/mpl/int.hpp +1 -1
  957. data/ext/boost/mpl/int_fwd.hpp +1 -1
  958. data/ext/boost/mpl/integral_c.hpp +1 -1
  959. data/ext/boost/mpl/integral_c_fwd.hpp +1 -1
  960. data/ext/boost/mpl/integral_c_tag.hpp +1 -1
  961. data/ext/boost/mpl/is_placeholder.hpp +67 -0
  962. data/ext/boost/mpl/is_sequence.hpp +112 -0
  963. data/ext/boost/mpl/iter_fold.hpp +1 -1
  964. data/ext/boost/mpl/iter_fold_if.hpp +1 -1
  965. data/ext/boost/mpl/iterator_category.hpp +35 -0
  966. data/ext/boost/mpl/iterator_range.hpp +1 -1
  967. data/ext/boost/mpl/iterator_tags.hpp +1 -1
  968. data/ext/boost/mpl/joint_view.hpp +65 -0
  969. data/ext/boost/mpl/key_type.hpp +42 -0
  970. data/ext/boost/mpl/key_type_fwd.hpp +25 -0
  971. data/ext/boost/mpl/lambda.hpp +1 -1
  972. data/ext/boost/mpl/lambda_fwd.hpp +1 -1
  973. data/ext/boost/mpl/less.hpp +1 -1
  974. data/ext/boost/mpl/less_equal.hpp +1 -1
  975. data/ext/boost/mpl/limits/arity.hpp +1 -1
  976. data/ext/boost/mpl/limits/list.hpp +1 -1
  977. data/ext/boost/mpl/limits/map.hpp +21 -0
  978. data/ext/boost/mpl/limits/set.hpp +21 -0
  979. data/ext/boost/mpl/limits/string.hpp +21 -0
  980. data/ext/boost/mpl/limits/unrolling.hpp +21 -0
  981. data/ext/boost/mpl/limits/vector.hpp +1 -1
  982. data/ext/boost/mpl/list.hpp +1 -1
  983. data/ext/boost/mpl/list/aux_/O1_size.hpp +1 -1
  984. data/ext/boost/mpl/list/aux_/begin_end.hpp +1 -1
  985. data/ext/boost/mpl/list/aux_/clear.hpp +1 -1
  986. data/ext/boost/mpl/list/aux_/empty.hpp +1 -1
  987. data/ext/boost/mpl/list/aux_/front.hpp +1 -1
  988. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +1 -1
  989. data/ext/boost/mpl/list/aux_/item.hpp +1 -1
  990. data/ext/boost/mpl/list/aux_/iterator.hpp +1 -1
  991. data/ext/boost/mpl/list/aux_/numbered.hpp +68 -0
  992. data/ext/boost/mpl/list/aux_/numbered_c.hpp +71 -0
  993. data/ext/boost/mpl/list/aux_/pop_front.hpp +1 -1
  994. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp +164 -0
  995. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp +173 -0
  996. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30.hpp +189 -0
  997. data/ext/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp +183 -0
  998. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40.hpp +209 -0
  999. data/ext/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp +193 -0
  1000. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50.hpp +229 -0
  1001. data/ext/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp +203 -0
  1002. data/ext/boost/mpl/list/aux_/push_back.hpp +1 -1
  1003. data/ext/boost/mpl/list/aux_/push_front.hpp +1 -1
  1004. data/ext/boost/mpl/list/aux_/size.hpp +1 -1
  1005. data/ext/boost/mpl/list/aux_/tag.hpp +1 -1
  1006. data/ext/boost/mpl/list/list0.hpp +1 -1
  1007. data/ext/boost/mpl/list/list0_c.hpp +31 -0
  1008. data/ext/boost/mpl/list/list10.hpp +1 -1
  1009. data/ext/boost/mpl/list/list10_c.hpp +43 -0
  1010. data/ext/boost/mpl/list/list20.hpp +1 -1
  1011. data/ext/boost/mpl/list/list20_c.hpp +43 -0
  1012. data/ext/boost/mpl/list/list30.hpp +43 -0
  1013. data/ext/boost/mpl/list/list30_c.hpp +43 -0
  1014. data/ext/boost/mpl/list/list40.hpp +43 -0
  1015. data/ext/boost/mpl/list/list40_c.hpp +43 -0
  1016. data/ext/boost/mpl/list/list50.hpp +43 -0
  1017. data/ext/boost/mpl/list/list50_c.hpp +43 -0
  1018. data/ext/boost/mpl/list_c.hpp +60 -0
  1019. data/ext/boost/mpl/logical.hpp +1 -1
  1020. data/ext/boost/mpl/long.hpp +1 -1
  1021. data/ext/boost/mpl/long_fwd.hpp +1 -1
  1022. data/ext/boost/mpl/lower_bound.hpp +143 -0
  1023. data/ext/boost/mpl/map.hpp +57 -0
  1024. data/ext/boost/mpl/map/aux_/at_impl.hpp +144 -0
  1025. data/ext/boost/mpl/map/aux_/begin_end_impl.hpp +50 -0
  1026. data/ext/boost/mpl/map/aux_/clear_impl.hpp +35 -0
  1027. data/ext/boost/mpl/map/aux_/contains_impl.hpp +43 -0
  1028. data/ext/boost/mpl/map/aux_/empty_impl.hpp +34 -0
  1029. data/ext/boost/mpl/map/aux_/erase_impl.hpp +41 -0
  1030. data/ext/boost/mpl/map/aux_/erase_key_impl.hpp +53 -0
  1031. data/ext/boost/mpl/map/aux_/has_key_impl.hpp +44 -0
  1032. data/ext/boost/mpl/map/aux_/include_preprocessed.hpp +53 -0
  1033. data/ext/boost/mpl/map/aux_/insert_impl.hpp +72 -0
  1034. data/ext/boost/mpl/map/aux_/item.hpp +138 -0
  1035. data/ext/boost/mpl/map/aux_/iterator.hpp +169 -0
  1036. data/ext/boost/mpl/map/aux_/key_type_impl.hpp +36 -0
  1037. data/ext/boost/mpl/map/aux_/map0.hpp +74 -0
  1038. data/ext/boost/mpl/map/aux_/numbered.hpp +110 -0
  1039. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp +350 -0
  1040. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp +370 -0
  1041. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp +390 -0
  1042. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp +410 -0
  1043. data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp +430 -0
  1044. data/ext/boost/mpl/map/aux_/preprocessed/plain/map10.hpp +290 -0
  1045. data/ext/boost/mpl/map/aux_/preprocessed/plain/map20.hpp +310 -0
  1046. data/ext/boost/mpl/map/aux_/preprocessed/plain/map30.hpp +330 -0
  1047. data/ext/boost/mpl/map/aux_/preprocessed/plain/map40.hpp +350 -0
  1048. data/ext/boost/mpl/map/aux_/preprocessed/plain/map50.hpp +370 -0
  1049. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp +150 -0
  1050. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp +170 -0
  1051. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp +190 -0
  1052. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp +210 -0
  1053. data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp +230 -0
  1054. data/ext/boost/mpl/map/aux_/size_impl.hpp +33 -0
  1055. data/ext/boost/mpl/map/aux_/tag.hpp +24 -0
  1056. data/ext/boost/mpl/map/aux_/value_type_impl.hpp +36 -0
  1057. data/ext/boost/mpl/map/map0.hpp +36 -0
  1058. data/ext/boost/mpl/map/map10.hpp +44 -0
  1059. data/ext/boost/mpl/map/map20.hpp +44 -0
  1060. data/ext/boost/mpl/map/map30.hpp +44 -0
  1061. data/ext/boost/mpl/map/map40.hpp +44 -0
  1062. data/ext/boost/mpl/map/map50.hpp +44 -0
  1063. data/ext/boost/mpl/math/fixed_c.hpp +36 -0
  1064. data/ext/boost/mpl/math/is_even.hpp +54 -0
  1065. data/ext/boost/mpl/math/rational_c.hpp +37 -0
  1066. data/ext/boost/mpl/max.hpp +19 -0
  1067. data/ext/boost/mpl/max_element.hpp +72 -0
  1068. data/ext/boost/mpl/min.hpp +19 -0
  1069. data/ext/boost/mpl/min_element.hpp +40 -0
  1070. data/ext/boost/mpl/min_max.hpp +46 -0
  1071. data/ext/boost/mpl/minus.hpp +1 -1
  1072. data/ext/boost/mpl/modulus.hpp +22 -0
  1073. data/ext/boost/mpl/multiplies.hpp +1 -1
  1074. data/ext/boost/mpl/multiset/aux_/count_impl.hpp +82 -0
  1075. data/ext/boost/mpl/multiset/aux_/insert_impl.hpp +34 -0
  1076. data/ext/boost/mpl/multiset/aux_/item.hpp +114 -0
  1077. data/ext/boost/mpl/multiset/aux_/multiset0.hpp +34 -0
  1078. data/ext/boost/mpl/multiset/aux_/tag.hpp +23 -0
  1079. data/ext/boost/mpl/multiset/multiset0.hpp +36 -0
  1080. data/ext/boost/mpl/negate.hpp +1 -1
  1081. data/ext/boost/mpl/next.hpp +1 -1
  1082. data/ext/boost/mpl/next_prior.hpp +1 -1
  1083. data/ext/boost/mpl/not.hpp +1 -1
  1084. data/ext/boost/mpl/not_equal_to.hpp +1 -1
  1085. data/ext/boost/mpl/numeric_cast.hpp +1 -1
  1086. data/ext/boost/mpl/or.hpp +1 -1
  1087. data/ext/boost/mpl/order.hpp +41 -0
  1088. data/ext/boost/mpl/order_fwd.hpp +25 -0
  1089. data/ext/boost/mpl/pair.hpp +1 -1
  1090. data/ext/boost/mpl/pair_view.hpp +169 -0
  1091. data/ext/boost/mpl/partition.hpp +53 -0
  1092. data/ext/boost/mpl/placeholders.hpp +1 -1
  1093. data/ext/boost/mpl/plus.hpp +1 -1
  1094. data/ext/boost/mpl/pop_back.hpp +39 -0
  1095. data/ext/boost/mpl/pop_back_fwd.hpp +1 -1
  1096. data/ext/boost/mpl/pop_front.hpp +39 -0
  1097. data/ext/boost/mpl/pop_front_fwd.hpp +1 -1
  1098. data/ext/boost/mpl/print.hpp +74 -0
  1099. data/ext/boost/mpl/prior.hpp +1 -1
  1100. data/ext/boost/mpl/protect.hpp +1 -1
  1101. data/ext/boost/mpl/push_back.hpp +1 -1
  1102. data/ext/boost/mpl/push_back_fwd.hpp +1 -1
  1103. data/ext/boost/mpl/push_front.hpp +1 -1
  1104. data/ext/boost/mpl/push_front_fwd.hpp +1 -1
  1105. data/ext/boost/mpl/quote.hpp +1 -1
  1106. data/ext/boost/mpl/range_c.hpp +48 -0
  1107. data/ext/boost/mpl/remove.hpp +52 -0
  1108. data/ext/boost/mpl/remove_if.hpp +1 -1
  1109. data/ext/boost/mpl/replace.hpp +55 -0
  1110. data/ext/boost/mpl/replace_if.hpp +88 -0
  1111. data/ext/boost/mpl/reverse.hpp +38 -0
  1112. data/ext/boost/mpl/reverse_fold.hpp +1 -1
  1113. data/ext/boost/mpl/reverse_iter_fold.hpp +56 -0
  1114. data/ext/boost/mpl/same_as.hpp +1 -1
  1115. data/ext/boost/mpl/sequence_tag.hpp +1 -1
  1116. data/ext/boost/mpl/sequence_tag_fwd.hpp +1 -1
  1117. data/ext/boost/mpl/set.hpp +57 -0
  1118. data/ext/boost/mpl/set/aux_/at_impl.hpp +40 -0
  1119. data/ext/boost/mpl/set/aux_/begin_end_impl.hpp +43 -0
  1120. data/ext/boost/mpl/set/aux_/clear_impl.hpp +35 -0
  1121. data/ext/boost/mpl/set/aux_/empty_impl.hpp +34 -0
  1122. data/ext/boost/mpl/set/aux_/erase_impl.hpp +41 -0
  1123. data/ext/boost/mpl/set/aux_/erase_key_impl.hpp +53 -0
  1124. data/ext/boost/mpl/set/aux_/has_key_impl.hpp +60 -0
  1125. data/ext/boost/mpl/set/aux_/include_preprocessed.hpp +42 -0
  1126. data/ext/boost/mpl/set/aux_/insert_impl.hpp +65 -0
  1127. data/ext/boost/mpl/set/aux_/item.hpp +80 -0
  1128. data/ext/boost/mpl/set/aux_/iterator.hpp +98 -0
  1129. data/ext/boost/mpl/set/aux_/key_type_impl.hpp +34 -0
  1130. data/ext/boost/mpl/set/aux_/numbered.hpp +48 -0
  1131. data/ext/boost/mpl/set/aux_/numbered_c.hpp +48 -0
  1132. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10.hpp +140 -0
  1133. data/ext/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp +145 -0
  1134. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20.hpp +168 -0
  1135. data/ext/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp +154 -0
  1136. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30.hpp +195 -0
  1137. data/ext/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp +164 -0
  1138. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40.hpp +221 -0
  1139. data/ext/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp +174 -0
  1140. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50.hpp +250 -0
  1141. data/ext/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp +184 -0
  1142. data/ext/boost/mpl/set/aux_/set0.hpp +69 -0
  1143. data/ext/boost/mpl/set/aux_/size_impl.hpp +33 -0
  1144. data/ext/boost/mpl/set/aux_/tag.hpp +24 -0
  1145. data/ext/boost/mpl/set/aux_/value_type_impl.hpp +34 -0
  1146. data/ext/boost/mpl/set/set0.hpp +35 -0
  1147. data/ext/boost/mpl/set/set0_c.hpp +32 -0
  1148. data/ext/boost/mpl/set/set10.hpp +44 -0
  1149. data/ext/boost/mpl/set/set10_c.hpp +45 -0
  1150. data/ext/boost/mpl/set/set20.hpp +44 -0
  1151. data/ext/boost/mpl/set/set20_c.hpp +45 -0
  1152. data/ext/boost/mpl/set/set30.hpp +44 -0
  1153. data/ext/boost/mpl/set/set30_c.hpp +45 -0
  1154. data/ext/boost/mpl/set/set40.hpp +44 -0
  1155. data/ext/boost/mpl/set/set40_c.hpp +45 -0
  1156. data/ext/boost/mpl/set/set50.hpp +44 -0
  1157. data/ext/boost/mpl/set/set50_c.hpp +45 -0
  1158. data/ext/boost/mpl/set_c.hpp +60 -0
  1159. data/ext/boost/mpl/shift_left.hpp +22 -0
  1160. data/ext/boost/mpl/shift_right.hpp +22 -0
  1161. data/ext/boost/mpl/single_view.hpp +38 -0
  1162. data/ext/boost/mpl/size.hpp +1 -1
  1163. data/ext/boost/mpl/size_fwd.hpp +1 -1
  1164. data/ext/boost/mpl/size_t.hpp +1 -1
  1165. data/ext/boost/mpl/size_t_fwd.hpp +1 -1
  1166. data/ext/boost/mpl/sizeof.hpp +36 -0
  1167. data/ext/boost/mpl/sort.hpp +27 -0
  1168. data/ext/boost/mpl/stable_partition.hpp +75 -0
  1169. data/ext/boost/mpl/string.hpp +607 -0
  1170. data/ext/boost/mpl/switch.hpp +49 -0
  1171. data/ext/boost/mpl/tag.hpp +1 -1
  1172. data/ext/boost/mpl/times.hpp +1 -1
  1173. data/ext/boost/mpl/transform.hpp +145 -0
  1174. data/ext/boost/mpl/transform_view.hpp +46 -0
  1175. data/ext/boost/mpl/unique.hpp +85 -0
  1176. data/ext/boost/mpl/unpack_args.hpp +150 -0
  1177. data/ext/boost/mpl/upper_bound.hpp +141 -0
  1178. data/ext/boost/mpl/value_type.hpp +42 -0
  1179. data/ext/boost/mpl/value_type_fwd.hpp +25 -0
  1180. data/ext/boost/mpl/vector.hpp +1 -1
  1181. data/ext/boost/mpl/vector/aux_/O1_size.hpp +1 -1
  1182. data/ext/boost/mpl/vector/aux_/at.hpp +1 -1
  1183. data/ext/boost/mpl/vector/aux_/back.hpp +1 -1
  1184. data/ext/boost/mpl/vector/aux_/begin_end.hpp +1 -1
  1185. data/ext/boost/mpl/vector/aux_/clear.hpp +1 -1
  1186. data/ext/boost/mpl/vector/aux_/empty.hpp +1 -1
  1187. data/ext/boost/mpl/vector/aux_/front.hpp +1 -1
  1188. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +1 -1
  1189. data/ext/boost/mpl/vector/aux_/item.hpp +1 -1
  1190. data/ext/boost/mpl/vector/aux_/iterator.hpp +1 -1
  1191. data/ext/boost/mpl/vector/aux_/numbered.hpp +218 -0
  1192. data/ext/boost/mpl/vector/aux_/numbered_c.hpp +77 -0
  1193. data/ext/boost/mpl/vector/aux_/pop_back.hpp +1 -1
  1194. data/ext/boost/mpl/vector/aux_/pop_front.hpp +1 -1
  1195. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp +1528 -0
  1196. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp +149 -0
  1197. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp +1804 -0
  1198. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp +195 -0
  1199. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp +2124 -0
  1200. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp +238 -0
  1201. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp +2444 -0
  1202. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp +281 -0
  1203. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp +2764 -0
  1204. data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp +325 -0
  1205. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp +149 -0
  1206. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp +195 -0
  1207. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp +1464 -0
  1208. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp +238 -0
  1209. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp +1784 -0
  1210. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp +281 -0
  1211. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp +2104 -0
  1212. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp +325 -0
  1213. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp +154 -0
  1214. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp +163 -0
  1215. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp +179 -0
  1216. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp +173 -0
  1217. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp +199 -0
  1218. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp +183 -0
  1219. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp +219 -0
  1220. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp +193 -0
  1221. data/ext/boost/mpl/vector/aux_/push_back.hpp +1 -1
  1222. data/ext/boost/mpl/vector/aux_/push_front.hpp +1 -1
  1223. data/ext/boost/mpl/vector/aux_/size.hpp +1 -1
  1224. data/ext/boost/mpl/vector/aux_/tag.hpp +1 -1
  1225. data/ext/boost/mpl/vector/aux_/vector0.hpp +1 -1
  1226. data/ext/boost/mpl/vector/vector0.hpp +1 -1
  1227. data/ext/boost/mpl/vector/vector0_c.hpp +31 -0
  1228. data/ext/boost/mpl/vector/vector10.hpp +1 -1
  1229. data/ext/boost/mpl/vector/vector10_c.hpp +46 -0
  1230. data/ext/boost/mpl/vector/vector20.hpp +1 -1
  1231. data/ext/boost/mpl/vector/vector20_c.hpp +46 -0
  1232. data/ext/boost/mpl/vector/vector30.hpp +45 -0
  1233. data/ext/boost/mpl/vector/vector30_c.hpp +47 -0
  1234. data/ext/boost/mpl/vector/vector40.hpp +45 -0
  1235. data/ext/boost/mpl/vector/vector40_c.hpp +46 -0
  1236. data/ext/boost/mpl/vector/vector50.hpp +45 -0
  1237. data/ext/boost/mpl/vector/vector50_c.hpp +46 -0
  1238. data/ext/boost/mpl/vector_c.hpp +61 -0
  1239. data/ext/boost/mpl/void.hpp +1 -1
  1240. data/ext/boost/mpl/void_fwd.hpp +1 -1
  1241. data/ext/boost/mpl/zip_view.hpp +65 -0
  1242. data/ext/boost/numeric/conversion/converter_policies.hpp +8 -0
  1243. data/ext/boost/optional/optional.hpp +2 -2
  1244. data/ext/boost/pointee.hpp +74 -0
  1245. data/ext/boost/preprocessor/{control/deduce_d.hpp → dec.hpp} +3 -8
  1246. data/ext/boost/preprocessor/enum_params_with_a_default.hpp +17 -0
  1247. data/ext/boost/preprocessor/enum_shifted_params.hpp +17 -0
  1248. data/ext/boost/preprocessor/iteration/detail/bounds/lower2.hpp +99 -0
  1249. data/ext/boost/preprocessor/iteration/detail/bounds/upper2.hpp +99 -0
  1250. data/ext/boost/preprocessor/iteration/detail/iter/forward2.hpp +1338 -0
  1251. data/ext/boost/preprocessor/iteration/detail/iter/reverse1.hpp +1296 -0
  1252. data/ext/boost/preprocessor/repeat_2nd.hpp +17 -0
  1253. data/ext/boost/preprocessor/repetition/enum_params_with_a_default.hpp +25 -0
  1254. data/ext/boost/range/algorithm/equal.hpp +15 -5
  1255. data/ext/boost/range/as_literal.hpp +1 -1
  1256. data/ext/boost/range/size.hpp +3 -3
  1257. data/ext/boost/range/size_type.hpp +33 -23
  1258. data/ext/boost/ratio/config.hpp +86 -0
  1259. data/ext/boost/ratio/detail/mpl/abs.hpp +89 -0
  1260. data/ext/boost/ratio/detail/mpl/gcd.hpp +124 -0
  1261. data/ext/boost/ratio/detail/mpl/lcm.hpp +126 -0
  1262. data/ext/boost/ratio/detail/mpl/sign.hpp +89 -0
  1263. data/ext/boost/ratio/detail/overflow_helpers.hpp +367 -0
  1264. data/ext/boost/ratio/ratio.hpp +233 -0
  1265. data/ext/boost/ratio/ratio_fwd.hpp +84 -0
  1266. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -3
  1267. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +150 -0
  1268. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +27 -2
  1269. data/ext/boost/swap.hpp +12 -0
  1270. data/ext/boost/system/api_config.hpp +42 -0
  1271. data/ext/boost/system/config.hpp +69 -0
  1272. data/ext/boost/system/error_code.hpp +513 -0
  1273. data/ext/boost/system/system_error.hpp +80 -0
  1274. data/ext/boost/thread/barrier.hpp +4 -4
  1275. data/ext/boost/thread/cv_status.hpp +26 -0
  1276. data/ext/boost/thread/detail/config.hpp +119 -5
  1277. data/ext/boost/thread/detail/delete.hpp +45 -0
  1278. data/ext/boost/thread/detail/memory.hpp +156 -0
  1279. data/ext/boost/thread/detail/move.hpp +181 -1
  1280. data/ext/boost/thread/detail/platform.hpp +3 -1
  1281. data/ext/boost/thread/detail/thread.hpp +254 -157
  1282. data/ext/boost/thread/detail/thread_interruption.hpp +12 -11
  1283. data/ext/boost/thread/exceptions.hpp +125 -136
  1284. data/ext/boost/thread/future.hpp +778 -353
  1285. data/ext/boost/thread/locks.hpp +548 -347
  1286. data/ext/boost/thread/once.hpp +3 -1
  1287. data/ext/boost/thread/pthread/condition_variable.hpp +140 -31
  1288. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +143 -15
  1289. data/ext/boost/thread/pthread/mutex.hpp +76 -24
  1290. data/ext/boost/thread/pthread/once.hpp +53 -22
  1291. data/ext/boost/thread/pthread/recursive_mutex.hpp +74 -27
  1292. data/ext/boost/thread/pthread/shared_mutex.hpp +250 -2
  1293. data/ext/boost/thread/pthread/thread_data.hpp +109 -6
  1294. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +4 -4
  1295. data/ext/boost/thread/reverse_lock.hpp +58 -0
  1296. data/ext/boost/thread/shared_lock_guard.hpp +52 -0
  1297. data/ext/boost/thread/shared_mutex.hpp +7 -2
  1298. data/ext/boost/thread/thread.hpp +2 -1
  1299. data/ext/boost/thread/v2/thread.hpp +56 -0
  1300. data/ext/boost/thread/xtime.hpp +4 -4
  1301. data/ext/boost/throw_exception.hpp +13 -4
  1302. data/ext/boost/tuple/detail/tuple_basic.hpp +980 -0
  1303. data/ext/boost/tuple/tuple.hpp +90 -0
  1304. data/ext/boost/type_traits/add_cv.hpp +48 -0
  1305. data/ext/boost/type_traits/common_type.hpp +158 -0
  1306. data/ext/boost/type_traits/cv_traits.hpp +24 -0
  1307. data/ext/boost/type_traits/decay.hpp +44 -0
  1308. data/ext/boost/type_traits/detail/bool_trait_def.hpp +1 -1
  1309. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +1 -1
  1310. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +1 -1
  1311. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +1 -1
  1312. data/ext/boost/type_traits/detail/type_trait_def.hpp +1 -1
  1313. data/ext/boost/type_traits/detail/type_trait_undef.hpp +1 -1
  1314. data/ext/boost/type_traits/has_nothrow_assign.hpp +44 -0
  1315. data/ext/boost/type_traits/has_trivial_assign.hpp +57 -0
  1316. data/ext/boost/type_traits/intrinsics.hpp +4 -3
  1317. data/ext/boost/type_traits/is_compound.hpp +46 -0
  1318. data/ext/boost/type_traits/is_empty.hpp +229 -0
  1319. data/ext/boost/type_traits/is_object.hpp +53 -0
  1320. data/ext/boost/type_traits/is_stateless.hpp +48 -0
  1321. data/ext/boost/type_traits/object_traits.hpp +33 -0
  1322. data/ext/boost/type_traits/remove_bounds.hpp +48 -0
  1323. data/ext/boost/type_traits/remove_volatile.hpp +88 -0
  1324. data/ext/boost/type_traits/same_traits.hpp +15 -0
  1325. data/ext/boost/type_traits/transform_traits.hpp +21 -0
  1326. data/ext/boost/typeof/message.hpp +8 -0
  1327. data/ext/boost/typeof/native.hpp +60 -0
  1328. data/ext/boost/typeof/typeof.hpp +218 -0
  1329. data/ext/boost/utility/declval.hpp +7 -2
  1330. data/ext/boost/utility/detail/result_of_iterate.hpp +98 -32
  1331. data/ext/boost/utility/result_of.hpp +92 -8
  1332. data/ext/boost/version.hpp +32 -0
  1333. data/ext/common/Account.h +1 -1
  1334. data/ext/common/AccountsDatabase.cpp +1 -1
  1335. data/ext/common/AccountsDatabase.h +1 -1
  1336. data/ext/common/AgentsStarter.cpp +5 -6
  1337. data/ext/common/AgentsStarter.h +4 -4
  1338. data/ext/common/AgentsStarter.hpp +4 -6
  1339. data/ext/common/AnsiColorConstants.h +1 -1
  1340. data/ext/common/ApplicationPool2/Common.h +62 -2
  1341. data/ext/common/ApplicationPool2/ComponentInfo.h +1 -1
  1342. data/ext/common/ApplicationPool2/Group.h +411 -150
  1343. data/ext/common/ApplicationPool2/Implementation.cpp +367 -86
  1344. data/ext/common/ApplicationPool2/Options.h +6 -2
  1345. data/ext/common/ApplicationPool2/PipeWatcher.h +1 -1
  1346. data/ext/common/ApplicationPool2/Pool.h +260 -137
  1347. data/ext/common/ApplicationPool2/Process.h +28 -27
  1348. data/ext/common/ApplicationPool2/Session.h +4 -2
  1349. data/ext/common/ApplicationPool2/Socket.h +1 -1
  1350. data/ext/common/ApplicationPool2/Spawner.h +133 -77
  1351. data/ext/common/ApplicationPool2/SuperGroup.h +16 -15
  1352. data/ext/common/BackgroundEventLoop.cpp +1 -1
  1353. data/ext/common/BackgroundEventLoop.h +1 -1
  1354. data/ext/common/Constants.h +2 -2
  1355. data/ext/common/EventedBufferedInput.h +1 -1
  1356. data/ext/common/EventedClient.h +1 -1
  1357. data/ext/common/EventedMessageServer.h +1 -1
  1358. data/ext/common/EventedServer.h +1 -1
  1359. data/ext/common/Exceptions.h +1 -1
  1360. data/ext/common/FileDescriptor.h +1 -1
  1361. data/ext/common/HttpConstants.h +8 -8
  1362. data/ext/common/IniFile.h +1 -1
  1363. data/ext/common/Logging.cpp +45 -20
  1364. data/ext/common/Logging.h +16 -65
  1365. data/ext/common/MessageClient.h +1 -1
  1366. data/ext/common/MessageReadersWriters.h +1 -1
  1367. data/ext/common/MessageServer.h +1 -1
  1368. data/ext/common/MultiLibeio.cpp +1 -1
  1369. data/ext/common/MultiLibeio.h +1 -1
  1370. data/ext/common/RandomGenerator.h +1 -1
  1371. data/ext/common/ResourceLocator.h +1 -1
  1372. data/ext/common/SafeLibev.h +1 -1
  1373. data/ext/common/ServerInstanceDir.h +1 -1
  1374. data/ext/common/StaticString.h +1 -1
  1375. data/ext/common/StringListCreator.h +1 -1
  1376. data/ext/common/UnionStation.h +1 -1
  1377. data/ext/common/Utils.cpp +6 -1
  1378. data/ext/common/Utils.h +9 -1
  1379. data/ext/common/Utils/BlockingQueue.h +1 -1
  1380. data/ext/common/Utils/CachedFileStat.cpp +1 -1
  1381. data/ext/common/Utils/CachedFileStat.h +1 -1
  1382. data/ext/common/Utils/CachedFileStat.hpp +1 -1
  1383. data/ext/common/Utils/FileChangeChecker.h +1 -1
  1384. data/ext/common/Utils/HashMap.h +1 -1
  1385. data/ext/common/Utils/HttpHeaderBufferer.h +1 -1
  1386. data/ext/common/Utils/IOUtils.cpp +3 -3
  1387. data/ext/common/Utils/IOUtils.h +1 -1
  1388. data/ext/common/Utils/MemZeroGuard.h +1 -1
  1389. data/ext/common/Utils/MemoryBarrier.h +1 -1
  1390. data/ext/common/Utils/MessageIO.h +1 -1
  1391. data/ext/common/Utils/MessagePassing.h +304 -0
  1392. data/ext/common/Utils/ProcessMetricsCollector.h +1 -1
  1393. data/ext/common/Utils/ScopeGuard.h +1 -1
  1394. data/ext/common/Utils/StrIntUtils.cpp +40 -1
  1395. data/ext/common/Utils/StrIntUtils.h +7 -1
  1396. data/ext/common/Utils/StringMap.h +1 -1
  1397. data/ext/common/Utils/SystemTime.cpp +1 -1
  1398. data/ext/common/Utils/SystemTime.h +1 -1
  1399. data/ext/common/Utils/Timer.h +1 -1
  1400. data/ext/common/Utils/VariantMap.h +1 -1
  1401. data/ext/common/agents/Base.cpp +182 -10
  1402. data/ext/common/agents/Base.h +1 -1
  1403. data/ext/common/agents/HelperAgent/AgentOptions.h +1 -1
  1404. data/ext/common/agents/HelperAgent/BacktracesServer.h +1 -1
  1405. data/ext/common/agents/HelperAgent/FileBackedPipe.h +1 -1
  1406. data/ext/common/agents/HelperAgent/Main.cpp +13 -5
  1407. data/ext/common/agents/HelperAgent/RequestHandler.cpp +1 -1
  1408. data/ext/common/agents/HelperAgent/RequestHandler.h +23 -9
  1409. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +1 -1
  1410. data/ext/common/agents/LoggingAgent/DataStoreId.h +1 -1
  1411. data/ext/common/agents/LoggingAgent/FilterSupport.cpp +1 -1
  1412. data/ext/common/agents/LoggingAgent/FilterSupport.h +1 -1
  1413. data/ext/common/agents/LoggingAgent/LoggingServer.h +89 -214
  1414. data/ext/common/agents/LoggingAgent/Main.cpp +9 -19
  1415. data/ext/common/agents/LoggingAgent/RemoteSender.h +9 -2
  1416. data/ext/common/agents/SpawnPreparer.cpp +70 -30
  1417. data/ext/common/agents/Watchdog/Main.cpp +1 -1
  1418. data/ext/libeio/Changes +4 -0
  1419. data/ext/libeio/ecb.h +281 -24
  1420. data/ext/libeio/eio.c +48 -63
  1421. data/ext/libeio/eio.h +7 -6
  1422. data/ext/libeio/libeio.m4 +0 -16
  1423. data/ext/libeio/xthread.h +2 -2
  1424. data/ext/libev/configure +299 -271
  1425. data/ext/nginx/Configuration.c +15 -52
  1426. data/ext/nginx/Configuration.h +0 -2
  1427. data/ext/nginx/ContentHandler.c +13 -2
  1428. data/ext/nginx/ngx_http_passenger_module.c +2 -19
  1429. data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
  1430. data/ext/oxt/dynamic_thread_group.hpp +2 -2
  1431. data/ext/oxt/spin_lock.hpp +1 -1
  1432. data/ext/oxt/system_calls.cpp +36 -13
  1433. data/ext/oxt/thread.hpp +11 -5
  1434. data/ext/ruby/extconf.rb +1 -1
  1435. data/ext/ruby/passenger_native_support.c +3 -2
  1436. data/helper-scripts/classic-rails-loader.rb +3 -1
  1437. data/helper-scripts/classic-rails-preloader.rb +4 -1
  1438. data/helper-scripts/node-loader.js +1 -1
  1439. data/helper-scripts/prespawn +1 -1
  1440. data/helper-scripts/rack-loader.rb +3 -1
  1441. data/helper-scripts/rack-preloader.rb +4 -1
  1442. data/helper-scripts/system-memory-stats.py +185 -0
  1443. data/helper-scripts/wsgi-loader.py +1 -1
  1444. data/lib/phusion_passenger.rb +3 -3
  1445. data/lib/phusion_passenger/abstract_installer.rb +1 -1
  1446. data/lib/phusion_passenger/admin_tools.rb +1 -1
  1447. data/lib/phusion_passenger/admin_tools/memory_stats.rb +1 -1
  1448. data/lib/phusion_passenger/admin_tools/server_instance.rb +1 -1
  1449. data/lib/phusion_passenger/analytics_logger.rb +10 -4
  1450. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +3 -2
  1451. data/lib/phusion_passenger/common_library.rb +1 -1
  1452. data/lib/phusion_passenger/console_text_template.rb +1 -1
  1453. data/lib/phusion_passenger/constants.rb +6 -5
  1454. data/lib/phusion_passenger/debug_logging.rb +5 -1
  1455. data/lib/phusion_passenger/dependencies.rb +3 -3
  1456. data/lib/phusion_passenger/loader_shared_helpers.rb +12 -7
  1457. data/lib/phusion_passenger/message_channel.rb +1 -1
  1458. data/lib/phusion_passenger/message_client.rb +1 -1
  1459. data/lib/phusion_passenger/native_support.rb +1 -1
  1460. data/lib/phusion_passenger/packaging.rb +7 -4
  1461. data/lib/phusion_passenger/platform_info.rb +1 -1
  1462. data/lib/phusion_passenger/platform_info/apache.rb +2 -2
  1463. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +14 -5
  1464. data/lib/phusion_passenger/platform_info/compiler.rb +8 -1
  1465. data/lib/phusion_passenger/platform_info/curl.rb +1 -1
  1466. data/lib/phusion_passenger/platform_info/linux.rb +1 -1
  1467. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  1468. data/lib/phusion_passenger/platform_info/ruby.rb +2 -2
  1469. data/lib/phusion_passenger/platform_info/zlib.rb +1 -1
  1470. data/lib/phusion_passenger/plugin.rb +2 -2
  1471. data/lib/phusion_passenger/preloader_shared_helpers.rb +14 -1
  1472. data/lib/phusion_passenger/public_api.rb +8 -2
  1473. data/lib/phusion_passenger/{classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb → rack/out_of_band_gc.rb} +35 -28
  1474. data/lib/phusion_passenger/rack/thread_handler_extension.rb +31 -6
  1475. data/lib/phusion_passenger/rails3_extensions/init.rb +15 -9
  1476. data/lib/phusion_passenger/request_handler.rb +104 -47
  1477. data/lib/phusion_passenger/request_handler/thread_handler.rb +28 -7
  1478. data/lib/phusion_passenger/ruby_core_enhancements.rb +34 -5
  1479. data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
  1480. data/lib/phusion_passenger/standalone/app_finder.rb +1 -1
  1481. data/lib/phusion_passenger/standalone/command.rb +5 -5
  1482. data/lib/phusion_passenger/standalone/config_file.rb +1 -1
  1483. data/lib/phusion_passenger/standalone/help_command.rb +1 -1
  1484. data/lib/phusion_passenger/standalone/main.rb +1 -1
  1485. data/lib/phusion_passenger/standalone/package_runtime_command.rb +1 -1
  1486. data/lib/phusion_passenger/standalone/runtime_installer.rb +1 -1
  1487. data/lib/phusion_passenger/standalone/start_command.rb +73 -21
  1488. data/lib/phusion_passenger/standalone/status_command.rb +1 -1
  1489. data/lib/phusion_passenger/standalone/stop_command.rb +1 -1
  1490. data/lib/phusion_passenger/standalone/utils.rb +2 -2
  1491. data/lib/phusion_passenger/standalone/version_command.rb +1 -1
  1492. data/lib/phusion_passenger/utils.rb +1 -1
  1493. data/lib/phusion_passenger/utils/ansi_colors.rb +2 -2
  1494. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  1495. data/lib/phusion_passenger/utils/hosts_file_parser.rb +2 -2
  1496. data/lib/phusion_passenger/utils/robust_interruption.rb +10 -6
  1497. data/lib/phusion_passenger/utils/tmpdir.rb +2 -2
  1498. data/lib/phusion_passenger/utils/unseekable_socket.rb +1 -1
  1499. data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
  1500. data/resources/templates/error_layout.html.template +4 -0
  1501. data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +1 -1
  1502. data/resources/templates/standalone/config.erb +1 -0
  1503. data/test/.rspec +3 -0
  1504. data/test/config.json.travis +15 -0
  1505. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -2
  1506. data/test/cxx/ApplicationPool2/PoolTest.cpp +349 -128
  1507. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +21 -18
  1508. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +141 -118
  1509. data/test/cxx/BufferedIOTest.cpp +11 -11
  1510. data/test/cxx/CxxTestMain.cpp +40 -11
  1511. data/test/cxx/EventedClientTest.cpp +18 -18
  1512. data/test/cxx/FilterSupportTest.cpp +1 -1
  1513. data/test/cxx/IOUtilsTest.cpp +18 -10
  1514. data/test/cxx/MessageIOTest.cpp +9 -9
  1515. data/test/cxx/MessagePassingTest.cpp +81 -0
  1516. data/test/cxx/MessageReadersWritersTest.cpp +3 -4
  1517. data/test/cxx/RequestHandlerTest.cpp +69 -9
  1518. data/test/cxx/TestSupport.h +3 -1
  1519. data/test/cxx/UnionStationTest.cpp +43 -82
  1520. data/test/gdbinit.example +31 -0
  1521. data/test/integration_tests/nginx_tests.rb +48 -0
  1522. data/test/integration_tests/spec_helper.rb +1 -0
  1523. data/test/ruby/analytics_logger_spec.rb +11 -19
  1524. data/test/ruby/classic_rails/loader_spec.rb +3 -4
  1525. data/test/ruby/classic_rails/preloader_spec.rb +3 -4
  1526. data/test/ruby/rack/loader_spec.rb +2 -22
  1527. data/test/ruby/rack/preloader_spec.rb +2 -28
  1528. data/test/ruby/rails3.0/loader_spec.rb +26 -0
  1529. data/test/ruby/rails3.0/preloader_spec.rb +32 -0
  1530. data/test/ruby/rails3.1/loader_spec.rb +26 -0
  1531. data/test/ruby/rails3.1/preloader_spec.rb +32 -0
  1532. data/test/ruby/rails3.2/loader_spec.rb +26 -0
  1533. data/test/ruby/rails3.2/preloader_spec.rb +32 -0
  1534. data/test/ruby/request_handler_spec.rb +104 -13
  1535. data/test/ruby/shared/{loader_spec.rb → loader_sharedspec.rb} +1 -1
  1536. data/test/ruby/shared/rails/{analytics_logging_extensions_spec.rb → analytics_logging_extensions_sharedspec.rb} +26 -27
  1537. data/test/ruby/shared/{ruby_loader_spec.rb → ruby_loader_sharedspec.rb} +1 -1
  1538. data/test/ruby/spec_helper.rb +3 -3
  1539. data/test/stub/rails2.3/app/helpers/bar_helper.rb +2 -0
  1540. data/test/stub/rails2.3/app/helpers/foo_helper.rb +2 -0
  1541. data/test/stub/rails3.0/config/environments/production.rb +1 -1
  1542. data/test/stub/rails3.1/Gemfile +37 -0
  1543. data/test/stub/rails3.1/Gemfile.lock +115 -0
  1544. data/test/stub/rails3.1/README +261 -0
  1545. data/test/stub/rails3.1/Rakefile +7 -0
  1546. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  1547. data/test/stub/rails3.1/app/assets/javascripts/application.js +9 -0
  1548. data/test/stub/rails3.1/app/assets/stylesheets/application.css +7 -0
  1549. data/test/stub/rails3.1/app/controllers/application_controller.rb +3 -0
  1550. data/test/stub/rails3.1/app/helpers/application_helper.rb +2 -0
  1551. data/test/stub/rails3.1/app/views/layouts/application.html.erb +14 -0
  1552. data/test/stub/rails3.1/config.ru +4 -0
  1553. data/test/stub/rails3.1/config/application.rb +48 -0
  1554. data/test/stub/rails3.1/config/boot.rb +6 -0
  1555. data/test/stub/rails3.1/config/database.yml +25 -0
  1556. data/test/stub/rails3.1/config/environment.rb +5 -0
  1557. data/test/stub/rails3.1/config/environments/development.rb +30 -0
  1558. data/test/stub/rails3.1/config/environments/production.rb +60 -0
  1559. data/test/stub/rails3.1/config/environments/test.rb +39 -0
  1560. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +7 -0
  1561. data/test/stub/rails3.1/config/initializers/inflections.rb +10 -0
  1562. data/test/stub/rails3.1/config/initializers/mime_types.rb +5 -0
  1563. data/test/stub/rails3.1/config/initializers/passenger.rb +1 -0
  1564. data/test/stub/rails3.1/config/initializers/secret_token.rb +7 -0
  1565. data/test/stub/rails3.1/config/initializers/session_store.rb +8 -0
  1566. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +14 -0
  1567. data/test/stub/rails3.1/config/locales/en.yml +5 -0
  1568. data/test/stub/rails3.1/config/routes.rb +58 -0
  1569. data/test/stub/rails3.1/db/seeds.rb +7 -0
  1570. data/test/stub/rails3.1/doc/README_FOR_APP +2 -0
  1571. data/test/stub/rails3.1/public/404.html +26 -0
  1572. data/test/stub/rails3.1/public/422.html +26 -0
  1573. data/test/stub/rails3.1/public/500.html +26 -0
  1574. data/test/stub/rails3.1/public/favicon.ico +0 -0
  1575. data/test/stub/rails3.1/public/index.html +241 -0
  1576. data/test/stub/rails3.1/public/robots.txt +5 -0
  1577. data/test/stub/rails3.1/script/rails +6 -0
  1578. data/test/stub/rails3.1/test/performance/browsing_test.rb +12 -0
  1579. data/test/stub/rails3.1/test/test_helper.rb +13 -0
  1580. data/test/stub/rails3.2/Gemfile +39 -0
  1581. data/test/stub/rails3.2/Gemfile.lock +113 -0
  1582. data/test/stub/rails3.2/Rakefile +7 -0
  1583. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  1584. data/test/stub/rails3.2/app/assets/javascripts/application.js +15 -0
  1585. data/test/stub/rails3.2/app/assets/stylesheets/application.css +13 -0
  1586. data/test/stub/rails3.2/app/controllers/application_controller.rb +3 -0
  1587. data/test/stub/rails3.2/app/helpers/application_helper.rb +2 -0
  1588. data/test/stub/rails3.2/app/views/layouts/application.html.erb +14 -0
  1589. data/test/stub/rails3.2/config.ru +4 -0
  1590. data/test/stub/rails3.2/config/application.rb +62 -0
  1591. data/test/stub/rails3.2/config/boot.rb +6 -0
  1592. data/test/stub/rails3.2/config/database.yml +25 -0
  1593. data/test/stub/rails3.2/config/environment.rb +5 -0
  1594. data/test/stub/rails3.2/config/environments/development.rb +37 -0
  1595. data/test/stub/rails3.2/config/environments/production.rb +67 -0
  1596. data/test/stub/rails3.2/config/environments/test.rb +37 -0
  1597. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +7 -0
  1598. data/test/stub/rails3.2/config/initializers/inflections.rb +15 -0
  1599. data/test/stub/rails3.2/config/initializers/mime_types.rb +5 -0
  1600. data/test/stub/rails3.2/config/initializers/passenger.rb +1 -0
  1601. data/test/stub/rails3.2/config/initializers/secret_token.rb +7 -0
  1602. data/test/stub/rails3.2/config/initializers/session_store.rb +8 -0
  1603. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +14 -0
  1604. data/test/stub/rails3.2/config/locales/en.yml +5 -0
  1605. data/test/stub/rails3.2/config/routes.rb +58 -0
  1606. data/test/stub/rails3.2/db/seeds.rb +7 -0
  1607. data/test/stub/rails3.2/doc/README_FOR_APP +2 -0
  1608. data/test/stub/rails3.2/public/404.html +26 -0
  1609. data/test/stub/rails3.2/public/422.html +26 -0
  1610. data/test/stub/rails3.2/public/500.html +25 -0
  1611. data/test/stub/rails3.2/public/favicon.ico +0 -0
  1612. data/test/stub/rails3.2/public/index.html +241 -0
  1613. data/test/stub/rails3.2/public/robots.txt +5 -0
  1614. data/test/stub/rails3.2/script/rails +6 -0
  1615. data/test/stub/rails3.2/test/performance/browsing_test.rb +12 -0
  1616. data/test/stub/rails3.2/test/test_helper.rb +13 -0
  1617. data/test/stub/wsgi/passenger_wsgi.py +12 -3
  1618. data/test/support/test_helper.rb +5 -3
  1619. data/test/tut/tut.h +61 -0
  1620. metadata +1173 -236
  1621. data/DEVELOPERS.TXT +0 -108
  1622. data/INSTALL +0 -6
  1623. data/README +0 -45
  1624. data/ext/boost/config/platform/win32.hpp +0 -71
  1625. data/ext/boost/implicit_cast.hpp +0 -29
  1626. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +0 -61
  1627. data/ext/boost/preprocessor/arithmetic/mod.hpp +0 -39
  1628. data/ext/boost/preprocessor/comparison/less_equal.hpp +0 -39
  1629. data/ext/boost/preprocessor/logical/not.hpp +0 -30
  1630. data/ext/boost/preprocessor/seq/cat.hpp +0 -49
  1631. data/ext/boost/preprocessor/seq/fold_left.hpp +0 -1070
  1632. data/ext/boost/preprocessor/seq/transform.hpp +0 -48
  1633. data/ext/boost/smart_ptr/detail/atomic_count_win32.hpp +0 -63
  1634. data/ext/boost/smart_ptr/detail/sp_counted_base_w32.hpp +0 -130
  1635. data/ext/boost/utility.hpp +0 -20
  1636. data/ext/boost/utility/base_from_member.hpp +0 -87
  1637. data/ext/boost/utility/binary.hpp +0 -708
  1638. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +0 -67
  1639. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +0 -48
  1640. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +0 -59
  1641. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +0 -130
  1642. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +0 -47
  1643. data/lib/phusion_passenger/classic_rails_extensions/init.rb +0 -125
@@ -4,6 +4,10 @@
4
4
  // accompanying file LICENSE_1_0.txt or copy at
5
5
  // http://www.boost.org/LICENSE_1_0.txt)
6
6
  // (C) Copyright 2007-9 Anthony Williams
7
+ // (C) Copyright 2012 Vicente J. Botet Escriba
8
+
9
+ #include <boost/thread/detail/config.hpp>
10
+ #include <boost/thread/detail/delete.hpp>
7
11
 
8
12
  namespace boost
9
13
  {
@@ -11,23 +15,20 @@ namespace boost
11
15
  {
12
16
  class BOOST_THREAD_DECL disable_interruption
13
17
  {
14
- disable_interruption(const disable_interruption&);
15
- disable_interruption& operator=(const disable_interruption&);
16
-
17
- bool interruption_was_enabled;
18
- friend class restore_interruption;
18
+ bool interruption_was_enabled;
19
+ friend class restore_interruption;
19
20
  public:
20
- disable_interruption();
21
- ~disable_interruption();
21
+ BOOST_THREAD_NO_COPYABLE(disable_interruption)
22
+ disable_interruption() BOOST_NOEXCEPT;
23
+ ~disable_interruption() BOOST_NOEXCEPT;
22
24
  };
23
25
 
24
26
  class BOOST_THREAD_DECL restore_interruption
25
27
  {
26
- restore_interruption(const restore_interruption&);
27
- restore_interruption& operator=(const restore_interruption&);
28
28
  public:
29
- explicit restore_interruption(disable_interruption& d);
30
- ~restore_interruption();
29
+ BOOST_THREAD_NO_COPYABLE(restore_interruption)
30
+ explicit restore_interruption(disable_interruption& d) BOOST_NOEXCEPT;
31
+ ~restore_interruption() BOOST_NOEXCEPT;
31
32
  };
32
33
  }
33
34
  }
@@ -1,15 +1,15 @@
1
1
  // Copyright (C) 2001-2003
2
2
  // William E. Kempf
3
3
  // Copyright (C) 2007-9 Anthony Williams
4
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
4
5
  //
5
- // Distributed under the Boost Software License, Version 1.0. (See accompanying
6
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
6
7
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
8
 
8
9
  #ifndef BOOST_THREAD_EXCEPTIONS_PDM070801_H
9
10
  #define BOOST_THREAD_EXCEPTIONS_PDM070801_H
10
11
 
11
12
  #include <boost/thread/detail/config.hpp>
12
- #include <oxt/tracable_exception.hpp>
13
13
 
14
14
  // pdm: Sorry, but this class is used all over the place & I end up
15
15
  // with recursive headers if I don't separate it
@@ -19,214 +19,203 @@
19
19
 
20
20
  #include <string>
21
21
  #include <stdexcept>
22
- #include <sstream>
23
- #include <cstring>
22
+ #include <boost/system/system_error.hpp>
23
+ #include <boost/system/error_code.hpp>
24
+ #include <oxt/tracable_exception.hpp>
25
+
24
26
 
25
27
  #include <boost/config/abi_prefix.hpp>
26
28
 
27
29
  namespace boost
28
30
  {
29
31
 
30
- class BOOST_SYMBOL_VISIBLE thread_interrupted:
31
- public oxt::tracable_exception
32
+ class BOOST_SYMBOL_VISIBLE thread_interrupted
33
+ : public oxt::tracable_exception
32
34
  {};
33
35
 
34
36
  class BOOST_SYMBOL_VISIBLE thread_exception:
35
- public oxt::tracable_exception
37
+ public system::system_error
38
+ //public std::exception
36
39
  {
37
- protected:
38
- std::string message;
39
-
40
- thread_exception():
41
- m_sys_err(-1)
40
+ typedef system::system_error base_type;
41
+ public:
42
+ thread_exception()
43
+ : base_type(0,system::system_category())
44
+ {}
45
+
46
+ thread_exception(int sys_error_code)
47
+ : base_type(sys_error_code, system::system_category())
42
48
  {}
43
-
44
- thread_exception(const std::string &description, int sys_err_code):
45
- m_sys_err(sys_err_code)
49
+
50
+ thread_exception( int ev, const char * what_arg )
51
+ : base_type(system::error_code(ev, system::system_category()), what_arg)
46
52
  {
47
- std::ostringstream s;
48
- s << description << ": ";
49
- s << strerror(sys_err_code) << " (" << sys_err_code << ")";
50
- message.assign(s.str());
51
53
  }
52
-
53
- thread_exception(int sys_err_code):
54
- m_sys_err(sys_err_code)
54
+ thread_exception( int ev, const std::string & what_arg )
55
+ : base_type(system::error_code(ev, system::system_category()), what_arg)
55
56
  {
56
- std::ostringstream s;
57
- s << strerror(sys_err_code) << " (" << sys_err_code << ")";
58
- message.assign(s.str());
59
57
  }
60
-
61
58
 
62
- public:
63
59
  ~thread_exception() throw()
64
60
  {}
65
-
61
+
66
62
 
67
63
  int native_error() const
68
64
  {
69
- return m_sys_err;
65
+ return code().value();
70
66
  }
71
-
72
- virtual const char *what() const throw()
73
- {
74
- if(message.empty())
75
- {
76
- return std::exception::what();
77
- }
78
- else
79
- {
80
- return message.c_str();
81
- }
82
- }
83
-
84
- private:
85
- int m_sys_err;
67
+
86
68
  };
87
69
 
88
70
  class BOOST_SYMBOL_VISIBLE condition_error:
89
- public oxt::tracable_exception
71
+ public system::system_error
72
+ //public std::exception
90
73
  {
74
+ typedef system::system_error base_type;
91
75
  public:
92
- const char* what() const throw()
93
- {
94
- return "Condition error";
95
- }
76
+ condition_error()
77
+ : base_type(system::error_code(0, system::system_category()), "Condition error")
78
+ {}
79
+ condition_error( int ev )
80
+ : base_type(system::error_code(ev, system::system_category()), "Condition error")
81
+ {
82
+ }
83
+ condition_error( int ev, const char * what_arg )
84
+ : base_type(system::error_code(ev, system::system_category()), what_arg)
85
+ {
86
+ }
87
+ condition_error( int ev, const std::string & what_arg )
88
+ : base_type(system::error_code(ev, system::system_category()), what_arg)
89
+ {
90
+ }
96
91
  };
97
-
92
+
98
93
 
99
94
  class BOOST_SYMBOL_VISIBLE lock_error:
100
95
  public thread_exception
101
96
  {
97
+ typedef thread_exception base_type;
102
98
  public:
103
99
  lock_error()
100
+ : base_type(0, "boost::lock_error")
104
101
  {}
105
-
106
- lock_error(int sys_err_code):
107
- thread_exception(sys_err_code)
108
- {}
109
-
110
- lock_error(const std::string &message)
102
+
103
+ lock_error( int ev )
104
+ : base_type(ev, "boost::lock_error")
105
+ {
106
+ }
107
+ lock_error( int ev, const char * what_arg )
108
+ : base_type(ev, what_arg)
109
+ {
110
+ }
111
+ lock_error( int ev, const std::string & what_arg )
112
+ : base_type(ev, what_arg)
111
113
  {
112
- this->message = "boost::lock_error: ";
113
- this->message.append(message);
114
114
  }
115
-
115
+
116
116
  ~lock_error() throw()
117
117
  {}
118
-
119
118
 
120
- virtual const char* what() const throw()
121
- {
122
- if(message.empty())
123
- {
124
- return "boost::lock_error";
125
- }
126
- else
127
- {
128
- return message.c_str();
129
- }
130
- }
131
119
  };
132
120
 
133
121
  class BOOST_SYMBOL_VISIBLE thread_resource_error:
134
122
  public thread_exception
135
123
  {
124
+ typedef thread_exception base_type;
136
125
  public:
137
- thread_resource_error()
138
- {}
139
-
140
- thread_resource_error(int sys_err_code):
141
- thread_exception(sys_err_code)
142
- {}
143
-
144
- thread_resource_error(const std::string &description, int sys_err_code):
145
- thread_exception(description, sys_err_code)
146
- {}
147
-
126
+ thread_resource_error()
127
+ : base_type(system::errc::resource_unavailable_try_again, "boost::thread_resource_error")
128
+ {}
129
+
130
+ thread_resource_error( int ev )
131
+ : base_type(ev, "boost::thread_resource_error")
132
+ {
133
+ }
134
+ thread_resource_error( int ev, const char * what_arg )
135
+ : base_type(ev, what_arg)
136
+ {
137
+ }
138
+ thread_resource_error( int ev, const std::string & what_arg )
139
+ : base_type(ev, what_arg)
140
+ {
141
+ }
142
+
143
+
148
144
  ~thread_resource_error() throw()
149
145
  {}
150
-
151
146
 
152
- virtual const char* what() const throw()
153
- {
154
- if(message.empty())
155
- {
156
- return "boost::thread_resource_error";
157
- }
158
- else
159
- {
160
- return message.c_str();
161
- }
162
- }
163
-
164
147
  };
165
148
 
166
149
  class BOOST_SYMBOL_VISIBLE unsupported_thread_option:
167
150
  public thread_exception
168
151
  {
152
+ typedef thread_exception base_type;
169
153
  public:
170
- unsupported_thread_option()
171
- {}
172
-
173
- unsupported_thread_option(int sys_err_code):
174
- thread_exception(sys_err_code)
175
- {}
176
-
177
- ~unsupported_thread_option() throw()
178
- {}
179
-
154
+ unsupported_thread_option()
155
+ : base_type(system::errc::invalid_argument, "boost::unsupported_thread_option")
156
+ {}
157
+
158
+ unsupported_thread_option( int ev )
159
+ : base_type(ev, "boost::unsupported_thread_option")
160
+ {
161
+ }
162
+ unsupported_thread_option( int ev, const char * what_arg )
163
+ : base_type(ev, what_arg)
164
+ {
165
+ }
166
+ unsupported_thread_option( int ev, const std::string & what_arg )
167
+ : base_type(ev, what_arg)
168
+ {
169
+ }
180
170
 
181
- virtual const char* what() const throw()
182
- {
183
- return "boost::unsupported_thread_option";
184
- }
185
-
186
171
  };
187
172
 
188
173
  class BOOST_SYMBOL_VISIBLE invalid_thread_argument:
189
174
  public thread_exception
190
175
  {
176
+ typedef thread_exception base_type;
191
177
  public:
192
178
  invalid_thread_argument()
179
+ : base_type(system::errc::invalid_argument, "boost::invalid_thread_argument")
193
180
  {}
194
-
195
- invalid_thread_argument(int sys_err_code):
196
- thread_exception(sys_err_code)
197
- {}
198
-
199
- ~invalid_thread_argument() throw()
200
- {}
201
-
202
181
 
203
- virtual const char* what() const throw()
182
+ invalid_thread_argument( int ev )
183
+ : base_type(ev, "boost::invalid_thread_argument")
184
+ {
185
+ }
186
+ invalid_thread_argument( int ev, const char * what_arg )
187
+ : base_type(ev, what_arg)
188
+ {
189
+ }
190
+ invalid_thread_argument( int ev, const std::string & what_arg )
191
+ : base_type(ev, what_arg)
204
192
  {
205
- return "boost::invalid_thread_argument";
206
193
  }
207
-
194
+
208
195
  };
209
196
 
210
197
  class BOOST_SYMBOL_VISIBLE thread_permission_error:
211
198
  public thread_exception
212
199
  {
200
+ typedef thread_exception base_type;
213
201
  public:
214
- thread_permission_error()
215
- {}
216
-
217
- thread_permission_error(int sys_err_code):
218
- thread_exception(sys_err_code)
219
- {}
220
-
221
- ~thread_permission_error() throw()
222
- {}
223
-
202
+ thread_permission_error()
203
+ : base_type(system::errc::permission_denied, "boost::thread_permission_error")
204
+ {}
205
+
206
+ thread_permission_error( int ev )
207
+ : base_type(ev, "boost::thread_permission_error")
208
+ {
209
+ }
210
+ thread_permission_error( int ev, const char * what_arg )
211
+ : base_type(ev, what_arg)
212
+ {
213
+ }
214
+ thread_permission_error( int ev, const std::string & what_arg )
215
+ : base_type(ev, what_arg)
216
+ {
217
+ }
224
218
 
225
- virtual const char* what() const throw()
226
- {
227
- return "boost::thread_permission_error";
228
- }
229
-
230
219
  };
231
220
 
232
221
  } // namespace boost
@@ -1,4 +1,5 @@
1
1
  // (C) Copyright 2008-10 Anthony Williams
2
+ // (C) Copyright 2011-2012 Vicente J. Botet Escriba
2
3
  //
3
4
  // Distributed under the Boost Software License, Version 1.0. (See
4
5
  // accompanying file LICENSE_1_0.txt or copy at
@@ -6,6 +7,15 @@
6
7
 
7
8
  #ifndef BOOST_THREAD_FUTURE_HPP
8
9
  #define BOOST_THREAD_FUTURE_HPP
10
+
11
+ #include <boost/thread/detail/config.hpp>
12
+
13
+ // boost::thread::future requires exception handling
14
+ // due to boost::exception::exception_ptr dependency
15
+
16
+ #ifndef BOOST_NO_EXCEPTIONS
17
+
18
+ #include <boost/detail/scoped_enum_emulation.hpp>
9
19
  #include <stdexcept>
10
20
  #include <boost/thread/detail/move.hpp>
11
21
  #include <boost/thread/thread_time.hpp>
@@ -16,6 +26,8 @@
16
26
  #include <boost/scoped_ptr.hpp>
17
27
  #include <boost/type_traits/is_fundamental.hpp>
18
28
  #include <boost/type_traits/is_convertible.hpp>
29
+ #include <boost/type_traits/remove_reference.hpp>
30
+ #include <boost/type_traits/remove_cv.hpp>
19
31
  #include <boost/mpl/if.hpp>
20
32
  #include <boost/config.hpp>
21
33
  #include <boost/throw_exception.hpp>
@@ -28,59 +40,168 @@
28
40
  #include <list>
29
41
  #include <boost/next_prior.hpp>
30
42
  #include <vector>
43
+ #include <boost/system/error_code.hpp>
44
+ #ifdef BOOST_THREAD_USES_CHRONO
45
+ #include <boost/chrono/system_clocks.hpp>
46
+ #endif
47
+
48
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
49
+ #include <boost/thread/detail/memory.hpp>
50
+ #endif
51
+
52
+ #include <boost/utility/result_of.hpp>
53
+ #include <boost/thread/thread.hpp>
54
+
55
+ #if defined BOOST_THREAD_PROVIDES_FUTURE
56
+ #define BOOST_THREAD_FUTURE future
57
+ #else
58
+ #define BOOST_THREAD_FUTURE unique_future
59
+ #endif
60
+
31
61
 
32
62
  namespace boost
33
63
  {
34
- class future_uninitialized:
35
- public std::logic_error
64
+
65
+ //enum class future_errc
66
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_errc)
67
+ {
68
+ broken_promise,
69
+ future_already_retrieved,
70
+ promise_already_satisfied,
71
+ no_state
72
+ }
73
+ BOOST_SCOPED_ENUM_DECLARE_END(future_errc)
74
+
75
+ namespace system
76
+ {
77
+ template <>
78
+ struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc> : public true_type {};
79
+
80
+ #ifdef BOOST_NO_CXX11_SCOPED_ENUMS
81
+ template <>
82
+ struct BOOST_SYMBOL_VISIBLE is_error_code_enum<future_errc::enum_type> : public true_type { };
83
+ #endif
84
+ }
85
+
86
+ //enum class launch
87
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(launch)
88
+ {
89
+ async = 1,
90
+ deferred = 2,
91
+ any = async | deferred
92
+ }
93
+ BOOST_SCOPED_ENUM_DECLARE_END(launch)
94
+
95
+ //enum class future_status
96
+ BOOST_SCOPED_ENUM_DECLARE_BEGIN(future_status)
97
+ {
98
+ ready,
99
+ timeout,
100
+ deferred
101
+ }
102
+ BOOST_SCOPED_ENUM_DECLARE_END(future_status)
103
+
104
+ BOOST_THREAD_DECL
105
+ const system::error_category& future_category() BOOST_NOEXCEPT;
106
+
107
+ namespace system
108
+ {
109
+ inline
110
+ error_code
111
+ make_error_code(future_errc e) //BOOST_NOEXCEPT
112
+ {
113
+ return error_code(underlying_cast<int>(e), boost::future_category());
114
+ }
115
+
116
+ inline
117
+ error_condition
118
+ make_error_condition(future_errc e) //BOOST_NOEXCEPT
119
+ {
120
+ return error_condition(underlying_cast<int>(e), future_category());
121
+ }
122
+ }
123
+
124
+ class BOOST_SYMBOL_VISIBLE future_error
125
+ : public std::logic_error
126
+ {
127
+ system::error_code ec_;
128
+ public:
129
+ future_error(system::error_code ec)
130
+ : logic_error(ec.message()),
131
+ ec_(ec)
132
+ {
133
+ }
134
+
135
+ const system::error_code& code() const BOOST_NOEXCEPT
136
+ {
137
+ return ec_;
138
+ }
139
+ const char* what() const BOOST_THREAD_NOEXCEPT_OR_THROW
140
+ {
141
+ return code().message().c_str();
142
+ }
143
+
144
+ };
145
+
146
+ class BOOST_SYMBOL_VISIBLE future_uninitialized:
147
+ public future_error
36
148
  {
37
149
  public:
38
- future_uninitialized():
39
- std::logic_error("Future Uninitialized")
150
+ future_uninitialized() :
151
+ future_error(system::make_error_code(future_errc::no_state))
40
152
  {}
41
153
  };
42
- class broken_promise:
43
- public std::logic_error
154
+ class BOOST_SYMBOL_VISIBLE broken_promise:
155
+ public future_error
44
156
  {
45
157
  public:
46
158
  broken_promise():
47
- std::logic_error("Broken promise")
159
+ future_error(system::make_error_code(future_errc::broken_promise))
48
160
  {}
49
161
  };
50
- class future_already_retrieved:
51
- public std::logic_error
162
+ class BOOST_SYMBOL_VISIBLE future_already_retrieved:
163
+ public future_error
52
164
  {
53
165
  public:
54
166
  future_already_retrieved():
55
- std::logic_error("Future already retrieved")
167
+ future_error(system::make_error_code(future_errc::future_already_retrieved))
56
168
  {}
57
169
  };
58
- class promise_already_satisfied:
59
- public std::logic_error
170
+ class BOOST_SYMBOL_VISIBLE promise_already_satisfied:
171
+ public future_error
60
172
  {
61
173
  public:
62
174
  promise_already_satisfied():
63
- std::logic_error("Promise already satisfied")
175
+ future_error(system::make_error_code(future_errc::promise_already_satisfied))
64
176
  {}
65
177
  };
66
178
 
67
- class task_already_started:
68
- public std::logic_error
179
+ class BOOST_SYMBOL_VISIBLE task_already_started:
180
+ public future_error
69
181
  {
70
182
  public:
71
183
  task_already_started():
72
- std::logic_error("Task already started")
184
+ future_error(system::make_error_code(future_errc::promise_already_satisfied))
73
185
  {}
74
186
  };
75
187
 
76
- class task_moved:
77
- public std::logic_error
78
- {
79
- public:
80
- task_moved():
81
- std::logic_error("Task moved")
82
- {}
83
- };
188
+ class BOOST_SYMBOL_VISIBLE task_moved:
189
+ public future_error
190
+ {
191
+ public:
192
+ task_moved():
193
+ future_error(system::make_error_code(future_errc::no_state))
194
+ {}
195
+ };
196
+
197
+ class promise_moved:
198
+ public future_error
199
+ {
200
+ public:
201
+ promise_moved():
202
+ future_error(system::make_error_code(future_errc::no_state))
203
+ {}
204
+ };
84
205
 
85
206
  namespace future_state
86
207
  {
@@ -93,6 +214,7 @@ namespace boost
93
214
  {
94
215
  boost::exception_ptr exception;
95
216
  bool done;
217
+ bool thread_was_interrupted;
96
218
  boost::mutex mutex;
97
219
  boost::condition_variable waiters;
98
220
  typedef std::list<boost::condition_variable_any*> waiter_list;
@@ -100,7 +222,8 @@ namespace boost
100
222
  boost::function<void()> callback;
101
223
 
102
224
  future_object_base():
103
- done(false)
225
+ done(false),
226
+ thread_was_interrupted(false)
104
227
  {}
105
228
  virtual ~future_object_base()
106
229
  {}
@@ -165,6 +288,10 @@ namespace boost
165
288
  {
166
289
  waiters.wait(lock);
167
290
  }
291
+ if(rethrow && thread_was_interrupted)
292
+ {
293
+ throw boost::thread_interrupted();
294
+ }
168
295
  if(rethrow && exception)
169
296
  {
170
297
  boost::rethrow_exception(exception);
@@ -186,6 +313,25 @@ namespace boost
186
313
  return true;
187
314
  }
188
315
 
316
+ #ifdef BOOST_THREAD_USES_CHRONO
317
+
318
+ template <class Clock, class Duration>
319
+ future_status
320
+ wait_until(const chrono::time_point<Clock, Duration>& abs_time)
321
+ {
322
+ boost::unique_lock<boost::mutex> lock(mutex);
323
+ do_callback(lock);
324
+ while(!done)
325
+ {
326
+ cv_status const st=waiters.wait_until(lock,abs_time);
327
+ if(st==cv_status::timeout && !done)
328
+ {
329
+ return future_status::timeout;
330
+ }
331
+ }
332
+ return future_status::ready;
333
+ }
334
+ #endif
189
335
  void mark_exceptional_finish_internal(boost::exception_ptr const& e)
190
336
  {
191
337
  exception=e;
@@ -196,16 +342,21 @@ namespace boost
196
342
  boost::lock_guard<boost::mutex> lock(mutex);
197
343
  mark_exceptional_finish_internal(boost::current_exception());
198
344
  }
199
-
345
+ void mark_interrupted_finish()
346
+ {
347
+ boost::lock_guard<boost::mutex> lock(mutex);
348
+ thread_was_interrupted=true;
349
+ mark_finished_internal();
350
+ }
200
351
  bool has_value()
201
352
  {
202
353
  boost::lock_guard<boost::mutex> lock(mutex);
203
- return done && !exception;
354
+ return done && !(exception || thread_was_interrupted);
204
355
  }
205
356
  bool has_exception()
206
357
  {
207
358
  boost::lock_guard<boost::mutex> lock(mutex);
208
- return done && exception;
359
+ return done && (exception || thread_was_interrupted);
209
360
  }
210
361
 
211
362
  template<typename F,typename U>
@@ -223,17 +374,23 @@ namespace boost
223
374
  struct future_traits
224
375
  {
225
376
  typedef boost::scoped_ptr<T> storage_type;
226
- #ifndef BOOST_NO_RVALUE_REFERENCES
377
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
227
378
  typedef T const& source_reference_type;
228
379
  struct dummy;
229
- typedef typename boost::mpl::if_<boost::is_fundamental<T>,dummy&,T&&>::type rvalue_source_type;
230
- typedef typename boost::mpl::if_<boost::is_fundamental<T>,T,T&&>::type move_dest_type;
380
+ typedef typename boost::mpl::if_<boost::is_fundamental<T>,dummy&,BOOST_THREAD_RV_REF(T)>::type rvalue_source_type;
381
+ typedef typename boost::mpl::if_<boost::is_fundamental<T>,T,BOOST_THREAD_RV_REF(T)>::type move_dest_type;
382
+ #elif defined BOOST_THREAD_USES_MOVE
383
+ typedef T& source_reference_type;
384
+ typedef typename boost::mpl::if_<boost::has_move_emulation_enabled<T>,BOOST_THREAD_RV_REF(T),T const&>::type rvalue_source_type;
385
+ typedef typename boost::mpl::if_<boost::has_move_emulation_enabled<T>,BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
231
386
  #else
232
387
  typedef T& source_reference_type;
233
- typedef typename boost::mpl::if_<boost::is_convertible<T&,boost::detail::thread_move_t<T> >,boost::detail::thread_move_t<T>,T const&>::type rvalue_source_type;
234
- typedef typename boost::mpl::if_<boost::is_convertible<T&,boost::detail::thread_move_t<T> >,boost::detail::thread_move_t<T>,T>::type move_dest_type;
388
+ typedef typename boost::mpl::if_<boost::is_convertible<T&,BOOST_THREAD_RV_REF(T) >,BOOST_THREAD_RV_REF(T),T const&>::type rvalue_source_type;
389
+ typedef typename boost::mpl::if_<boost::is_convertible<T&,BOOST_THREAD_RV_REF(T) >,BOOST_THREAD_RV_REF(T),T>::type move_dest_type;
235
390
  #endif
236
391
 
392
+ typedef const T& shared_future_get_result_type;
393
+
237
394
  static void init(storage_type& storage,source_reference_type t)
238
395
  {
239
396
  storage.reset(new T(t));
@@ -241,7 +398,7 @@ namespace boost
241
398
 
242
399
  static void init(storage_type& storage,rvalue_source_type t)
243
400
  {
244
- storage.reset(new T(static_cast<rvalue_source_type>(t)));
401
+ storage.reset(new T(static_cast<rvalue_source_type>(t)));
245
402
  }
246
403
 
247
404
  static void cleanup(storage_type& storage)
@@ -258,6 +415,7 @@ namespace boost
258
415
  struct rvalue_source_type
259
416
  {};
260
417
  typedef T& move_dest_type;
418
+ typedef T& shared_future_get_result_type;
261
419
 
262
420
  static void init(storage_type& storage,T& t)
263
421
  {
@@ -275,6 +433,7 @@ namespace boost
275
433
  {
276
434
  typedef bool storage_type;
277
435
  typedef void move_dest_type;
436
+ typedef void shared_future_get_result_type;
278
437
 
279
438
  static void init(storage_type& storage)
280
439
  {
@@ -296,6 +455,7 @@ namespace boost
296
455
  typedef typename future_traits<T>::source_reference_type source_reference_type;
297
456
  typedef typename future_traits<T>::rvalue_source_type rvalue_source_type;
298
457
  typedef typename future_traits<T>::move_dest_type move_dest_type;
458
+ typedef typename future_traits<T>::shared_future_get_result_type shared_future_get_result_type;
299
459
 
300
460
  storage_type result;
301
461
 
@@ -308,6 +468,7 @@ namespace boost
308
468
  future_traits<T>::init(result,result_);
309
469
  mark_finished_internal();
310
470
  }
471
+
311
472
  void mark_finished_with_result_internal(rvalue_source_type result_)
312
473
  {
313
474
  future_traits<T>::init(result,static_cast<rvalue_source_type>(result_));
@@ -319,10 +480,11 @@ namespace boost
319
480
  boost::lock_guard<boost::mutex> lock(mutex);
320
481
  mark_finished_with_result_internal(result_);
321
482
  }
483
+
322
484
  void mark_finished_with_result(rvalue_source_type result_)
323
485
  {
324
486
  boost::lock_guard<boost::mutex> lock(mutex);
325
- mark_finished_with_result_internal(result_);
487
+ mark_finished_with_result_internal(static_cast<rvalue_source_type>(result_));
326
488
  }
327
489
 
328
490
  move_dest_type get()
@@ -331,6 +493,12 @@ namespace boost
331
493
  return static_cast<move_dest_type>(*result);
332
494
  }
333
495
 
496
+ shared_future_get_result_type get_sh()
497
+ {
498
+ wait();
499
+ return static_cast<shared_future_get_result_type>(*result);
500
+ }
501
+
334
502
  future_state::state get_state()
335
503
  {
336
504
  boost::lock_guard<boost::mutex> guard(mutex);
@@ -353,7 +521,7 @@ namespace boost
353
521
  struct future_object<void>:
354
522
  detail::future_object_base
355
523
  {
356
- typedef void move_dest_type;
524
+ typedef void shared_future_get_result_type;
357
525
 
358
526
  future_object()
359
527
  {}
@@ -373,7 +541,10 @@ namespace boost
373
541
  {
374
542
  wait();
375
543
  }
376
-
544
+ void get_sh()
545
+ {
546
+ wait();
547
+ }
377
548
  future_state::state get_state()
378
549
  {
379
550
  boost::lock_guard<boost::mutex> guard(mutex);
@@ -386,27 +557,37 @@ namespace boost
386
557
  return future_state::ready;
387
558
  }
388
559
  }
389
-
390
560
  private:
391
561
  future_object(future_object const&);
392
562
  future_object& operator=(future_object const&);
393
563
  };
394
564
 
565
+ // template<typename T, typename Allocator>
566
+ // struct future_object_alloc: public future_object<T>
567
+ // {
568
+ // typedef future_object<T> base;
569
+ // Allocator alloc_;
570
+ //
571
+ // public:
572
+ // explicit future_object_alloc(const Allocator& a)
573
+ // : alloc_(a) {}
574
+ //
575
+ // };
395
576
  class future_waiter
396
577
  {
397
578
  struct registered_waiter;
398
- typedef std::vector<registered_waiter>::size_type count_type;
579
+ typedef std::vector<int>::size_type count_type;
399
580
 
400
581
  struct registered_waiter
401
582
  {
402
- boost::shared_ptr<detail::future_object_base> future;
583
+ boost::shared_ptr<detail::future_object_base> future_;
403
584
  detail::future_object_base::waiter_list::iterator wait_iterator;
404
585
  count_type index;
405
586
 
406
- registered_waiter(boost::shared_ptr<detail::future_object_base> const& future_,
587
+ registered_waiter(boost::shared_ptr<detail::future_object_base> const& a_future,
407
588
  detail::future_object_base::waiter_list::iterator wait_iterator_,
408
589
  count_type index_):
409
- future(future_),wait_iterator(wait_iterator_),index(index_)
590
+ future_(a_future),wait_iterator(wait_iterator_),index(index_)
410
591
  {}
411
592
 
412
593
  };
@@ -419,7 +600,6 @@ namespace boost
419
600
  typedef count_type count_type_portable;
420
601
  #endif
421
602
  count_type_portable count;
422
-
423
603
  boost::scoped_array<boost::unique_lock<boost::mutex> > locks;
424
604
 
425
605
  all_futures_lock(std::vector<registered_waiter>& futures):
@@ -427,10 +607,10 @@ namespace boost
427
607
  {
428
608
  for(count_type_portable i=0;i<count;++i)
429
609
  {
430
- #if defined __DECCXX || defined __SUNPRO_CC
431
- locks[i]=boost::unique_lock<boost::mutex>(futures[i].future->mutex).move();
610
+ #if defined __DECCXX || defined __SUNPRO_CC || defined __hpux
611
+ locks[i]=boost::unique_lock<boost::mutex>(futures[i].future_->mutex).move();
432
612
  #else
433
- locks[i]=boost::unique_lock<boost::mutex>(futures[i].future->mutex);
613
+ locks[i]=boost::unique_lock<boost::mutex>(futures[i].future_->mutex);
434
614
  #endif
435
615
  }
436
616
  }
@@ -461,9 +641,9 @@ namespace boost
461
641
  template<typename F>
462
642
  void add(F& f)
463
643
  {
464
- if(f.future)
644
+ if(f.future_)
465
645
  {
466
- futures.push_back(registered_waiter(f.future,f.future->register_external_waiter(cv),future_count));
646
+ futures.push_back(registered_waiter(f.future_,f.future_->register_external_waiter(cv),future_count));
467
647
  }
468
648
  ++future_count;
469
649
  }
@@ -475,7 +655,7 @@ namespace boost
475
655
  {
476
656
  for(count_type i=0;i<futures.size();++i)
477
657
  {
478
- if(futures[i].future->done)
658
+ if(futures[i].future_->done)
479
659
  {
480
660
  return futures[i].index;
481
661
  }
@@ -488,7 +668,7 @@ namespace boost
488
668
  {
489
669
  for(count_type i=0;i<futures.size();++i)
490
670
  {
491
- futures[i].future->remove_external_waiter(futures[i].wait_iterator);
671
+ futures[i].future_->remove_external_waiter(futures[i].wait_iterator);
492
672
  }
493
673
  }
494
674
 
@@ -497,7 +677,7 @@ namespace boost
497
677
  }
498
678
 
499
679
  template <typename R>
500
- class unique_future;
680
+ class BOOST_THREAD_FUTURE;
501
681
 
502
682
  template <typename R>
503
683
  class shared_future;
@@ -509,7 +689,7 @@ namespace boost
509
689
  };
510
690
 
511
691
  template<typename T>
512
- struct is_future_type<unique_future<T> >
692
+ struct is_future_type<BOOST_THREAD_FUTURE<T> >
513
693
  {
514
694
  BOOST_STATIC_CONSTANT(bool, value=true);
515
695
  };
@@ -626,14 +806,13 @@ namespace boost
626
806
  class packaged_task;
627
807
 
628
808
  template <typename R>
629
- class unique_future
809
+ class BOOST_THREAD_FUTURE
630
810
  {
631
- unique_future(unique_future & rhs);// = delete;
632
- unique_future& operator=(unique_future& rhs);// = delete;
811
+ private:
633
812
 
634
813
  typedef boost::shared_ptr<detail::future_object<R> > future_ptr;
635
814
 
636
- future_ptr future;
815
+ future_ptr future_;
637
816
 
638
817
  friend class shared_future<R>;
639
818
  friend class promise<R>;
@@ -642,99 +821,92 @@ namespace boost
642
821
 
643
822
  typedef typename detail::future_traits<R>::move_dest_type move_dest_type;
644
823
 
645
- unique_future(future_ptr future_):
646
- future(future_)
824
+ BOOST_THREAD_FUTURE(future_ptr a_future):
825
+ future_(a_future)
647
826
  {}
648
827
 
649
828
  public:
829
+ BOOST_THREAD_MOVABLE_ONLY(BOOST_THREAD_FUTURE)
650
830
  typedef future_state::state state;
651
831
 
652
- unique_future()
832
+ BOOST_THREAD_FUTURE()
653
833
  {}
654
834
 
655
- ~unique_future()
835
+ ~BOOST_THREAD_FUTURE()
656
836
  {}
657
837
 
658
- #ifndef BOOST_NO_RVALUE_REFERENCES
659
- unique_future(unique_future && other)
838
+ BOOST_THREAD_FUTURE(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE) other) BOOST_NOEXCEPT:
839
+ future_(BOOST_THREAD_RV(other).future_)
660
840
  {
661
- future.swap(other.future);
662
- }
663
- unique_future& operator=(unique_future && other)
664
- {
665
- future=other.future;
666
- other.future.reset();
667
- return *this;
668
- }
669
- #else
670
- unique_future(boost::detail::thread_move_t<unique_future> other):
671
- future(other->future)
672
- {
673
- other->future.reset();
841
+ BOOST_THREAD_RV(other).future_.reset();
674
842
  }
675
843
 
676
- unique_future& operator=(boost::detail::thread_move_t<unique_future> other)
844
+ BOOST_THREAD_FUTURE& operator=(BOOST_THREAD_RV_REF(BOOST_THREAD_FUTURE) other) BOOST_NOEXCEPT
677
845
  {
678
- future=other->future;
679
- other->future.reset();
846
+ future_=BOOST_THREAD_RV(other).future_;
847
+ BOOST_THREAD_RV(other).future_.reset();
680
848
  return *this;
681
849
  }
682
850
 
683
- operator boost::detail::thread_move_t<unique_future>()
851
+ shared_future<R> share()
684
852
  {
685
- return boost::detail::thread_move_t<unique_future>(*this);
853
+ return shared_future<R>(::boost::move(*this));
686
854
  }
687
- #endif
688
855
 
689
- void swap(unique_future& other)
856
+ void swap(BOOST_THREAD_FUTURE& other)
690
857
  {
691
- future.swap(other.future);
858
+ future_.swap(other.future_);
692
859
  }
693
860
 
694
861
  // retrieving the value
695
862
  move_dest_type get()
696
863
  {
697
- if(!future)
864
+ if(!future_)
698
865
  {
699
866
  boost::throw_exception(future_uninitialized());
700
867
  }
701
868
 
702
- return future->get();
869
+ return future_->get();
703
870
  }
704
871
 
705
872
  // functions to check state, and wait for ready
706
- state get_state() const
873
+ state get_state() const BOOST_NOEXCEPT
707
874
  {
708
- if(!future)
875
+ if(!future_)
709
876
  {
710
877
  return future_state::uninitialized;
711
878
  }
712
- return future->get_state();
879
+ return future_->get_state();
713
880
  }
714
881
 
715
-
716
- bool is_ready() const
882
+ bool is_ready() const BOOST_NOEXCEPT
717
883
  {
718
884
  return get_state()==future_state::ready;
719
885
  }
720
886
 
721
- bool has_exception() const
887
+ bool has_exception() const BOOST_NOEXCEPT
888
+ {
889
+ return future_ && future_->has_exception();
890
+ }
891
+
892
+ bool has_value() const BOOST_NOEXCEPT
722
893
  {
723
- return future && future->has_exception();
894
+ return future_ && future_->has_value();
724
895
  }
725
896
 
726
- bool has_value() const
897
+ bool valid() const BOOST_NOEXCEPT
727
898
  {
728
- return future && future->has_value();
899
+ return future_ != 0;
729
900
  }
730
901
 
902
+
731
903
  void wait() const
732
904
  {
733
- if(!future)
905
+ if(!future_)
734
906
  {
735
907
  boost::throw_exception(future_uninitialized());
736
908
  }
737
- future->wait(false);
909
+ future_->wait(false);
738
910
  }
739
911
 
740
912
  template<typename Duration>
@@ -745,43 +917,55 @@ namespace boost
745
917
 
746
918
  bool timed_wait_until(boost::system_time const& abs_time) const
747
919
  {
748
- if(!future)
920
+ if(!future_)
749
921
  {
750
922
  boost::throw_exception(future_uninitialized());
751
923
  }
752
- return future->timed_wait_until(abs_time);
924
+ return future_->timed_wait_until(abs_time);
753
925
  }
926
+ #ifdef BOOST_THREAD_USES_CHRONO
927
+ template <class Rep, class Period>
928
+ future_status
929
+ wait_for(const chrono::duration<Rep, Period>& rel_time) const
930
+ {
931
+ return wait_until(chrono::steady_clock::now() + rel_time);
754
932
 
933
+ }
934
+ template <class Clock, class Duration>
935
+ future_status
936
+ wait_until(const chrono::time_point<Clock, Duration>& abs_time) const
937
+ {
938
+ if(!future_)
939
+ {
940
+ boost::throw_exception(future_uninitialized());
941
+ }
942
+ return future_->wait_until(abs_time);
943
+ }
944
+ #endif
755
945
  };
756
946
 
757
- #ifdef BOOST_NO_RVALUE_REFERENCES
758
- template <typename T>
759
- struct has_move_emulation_enabled_aux<unique_future<T> >
760
- : BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
761
- {};
762
- #endif
947
+ BOOST_THREAD_DCL_MOVABLE_BEG(T) BOOST_THREAD_FUTURE<T> BOOST_THREAD_DCL_MOVABLE_END
763
948
 
764
949
  template <typename R>
765
950
  class shared_future
766
951
  {
767
952
  typedef boost::shared_ptr<detail::future_object<R> > future_ptr;
768
953
 
769
- future_ptr future;
770
-
771
- // shared_future(const unique_future<R>& other);
772
- // shared_future& operator=(const unique_future<R>& other);
954
+ future_ptr future_;
773
955
 
774
956
  friend class detail::future_waiter;
775
957
  friend class promise<R>;
776
958
  friend class packaged_task<R>;
777
959
 
778
- shared_future(future_ptr future_):
779
- future(future_)
960
+ shared_future(future_ptr a_future):
961
+ future_(a_future)
780
962
  {}
781
963
 
782
964
  public:
965
+ BOOST_THREAD_MOVABLE(shared_future)
966
+
783
967
  shared_future(shared_future const& other):
784
- future(other.future)
968
+ future_(other.future_)
785
969
  {}
786
970
 
787
971
  typedef future_state::state state;
@@ -794,112 +978,85 @@ namespace boost
794
978
 
795
979
  shared_future& operator=(shared_future const& other)
796
980
  {
797
- future=other.future;
798
- return *this;
799
- }
800
- #ifndef BOOST_NO_RVALUE_REFERENCES
801
- shared_future(shared_future && other)
802
- {
803
- future.swap(other.future);
804
- }
805
- shared_future(unique_future<R> && other)
806
- {
807
- future.swap(other.future);
808
- }
809
- shared_future& operator=(shared_future && other)
810
- {
811
- future.swap(other.future);
812
- other.future.reset();
813
- return *this;
814
- }
815
- shared_future& operator=(unique_future<R> && other)
816
- {
817
- future.swap(other.future);
818
- other.future.reset();
981
+ future_=other.future_;
819
982
  return *this;
820
983
  }
821
- #else
822
- shared_future(boost::detail::thread_move_t<shared_future> other):
823
- future(other->future)
984
+ shared_future(BOOST_THREAD_RV_REF(shared_future) other) BOOST_NOEXCEPT :
985
+ future_(BOOST_THREAD_RV(other).future_)
824
986
  {
825
- other->future.reset();
987
+ BOOST_THREAD_RV(other).future_.reset();
826
988
  }
827
- // shared_future(const unique_future<R> &) = delete;
828
- shared_future(boost::detail::thread_move_t<unique_future<R> > other):
829
- future(other->future)
989
+ shared_future(BOOST_THREAD_RV_REF_BEG BOOST_THREAD_FUTURE<R> BOOST_THREAD_RV_REF_END other) BOOST_NOEXCEPT :
990
+ future_(BOOST_THREAD_RV(other).future_)
830
991
  {
831
- other->future.reset();
992
+ BOOST_THREAD_RV(other).future_.reset();
832
993
  }
833
- shared_future& operator=(boost::detail::thread_move_t<shared_future> other)
994
+ shared_future& operator=(BOOST_THREAD_RV_REF(shared_future) other) BOOST_NOEXCEPT
834
995
  {
835
- future.swap(other->future);
836
- other->future.reset();
996
+ future_.swap(BOOST_THREAD_RV(other).future_);
997
+ BOOST_THREAD_RV(other).future_.reset();
837
998
  return *this;
838
999
  }
839
- shared_future& operator=(boost::detail::thread_move_t<unique_future<R> > other)
1000
+ shared_future& operator=(BOOST_THREAD_RV_REF_BEG BOOST_THREAD_FUTURE<R> BOOST_THREAD_RV_REF_END other) BOOST_NOEXCEPT
840
1001
  {
841
- future.swap(other->future);
842
- other->future.reset();
1002
+ future_.swap(BOOST_THREAD_RV(other).future_);
1003
+ BOOST_THREAD_RV(other).future_.reset();
843
1004
  return *this;
844
1005
  }
845
1006
 
846
- operator boost::detail::thread_move_t<shared_future>()
1007
+ void swap(shared_future& other) BOOST_NOEXCEPT
847
1008
  {
848
- return boost::detail::thread_move_t<shared_future>(*this);
849
- }
850
-
851
- #endif
852
-
853
- void swap(shared_future& other)
854
- {
855
- future.swap(other.future);
1009
+ future_.swap(other.future_);
856
1010
  }
857
1011
 
858
1012
  // retrieving the value
859
- //typename detail::future_object<R>::move_dest_type get()
860
- R get()
1013
+ typename detail::future_object<R>::shared_future_get_result_type get()
861
1014
  {
862
- if(!future)
1015
+ if(!future_)
863
1016
  {
864
1017
  boost::throw_exception(future_uninitialized());
865
1018
  }
866
1019
 
867
- return future->get();
1020
+ return future_->get_sh();
868
1021
  }
869
1022
 
870
1023
  // functions to check state, and wait for ready
871
- state get_state() const
1024
+ state get_state() const BOOST_NOEXCEPT
872
1025
  {
873
- if(!future)
1026
+ if(!future_)
874
1027
  {
875
1028
  return future_state::uninitialized;
876
1029
  }
877
- return future->get_state();
1030
+ return future_->get_state();
878
1031
  }
879
1032
 
1033
+ bool valid() const BOOST_NOEXCEPT
1034
+ {
1035
+ return future_ != 0;
1036
+ }
880
1037
 
881
- bool is_ready() const
1038
+ bool is_ready() const BOOST_NOEXCEPT
882
1039
  {
883
1040
  return get_state()==future_state::ready;
884
1041
  }
885
1042
 
886
- bool has_exception() const
1043
+ bool has_exception() const BOOST_NOEXCEPT
887
1044
  {
888
- return future && future->has_exception();
1045
+ return future_ && future_->has_exception();
889
1046
  }
890
1047
 
891
- bool has_value() const
1048
+ bool has_value() const BOOST_NOEXCEPT
892
1049
  {
893
- return future && future->has_value();
1050
+ return future_ && future_->has_value();
894
1051
  }
895
1052
 
896
1053
  void wait() const
897
1054
  {
898
- if(!future)
1055
+ if(!future_)
899
1056
  {
900
1057
  boost::throw_exception(future_uninitialized());
901
1058
  }
902
- future->wait(false);
1059
+ future_->wait(false);
903
1060
  }
904
1061
 
905
1062
  template<typename Duration>
@@ -910,157 +1067,173 @@ namespace boost
910
1067
 
911
1068
  bool timed_wait_until(boost::system_time const& abs_time) const
912
1069
  {
913
- if(!future)
1070
+ if(!future_)
914
1071
  {
915
1072
  boost::throw_exception(future_uninitialized());
916
1073
  }
917
- return future->timed_wait_until(abs_time);
1074
+ return future_->timed_wait_until(abs_time);
918
1075
  }
1076
+ #ifdef BOOST_THREAD_USES_CHRONO
919
1077
 
920
- };
1078
+ template <class Rep, class Period>
1079
+ future_status
1080
+ wait_for(const chrono::duration<Rep, Period>& rel_time) const
1081
+ {
1082
+ return wait_until(chrono::steady_clock::now() + rel_time);
921
1083
 
922
- #ifdef BOOST_NO_RVALUE_REFERENCES
923
- template <typename T>
924
- struct has_move_emulation_enabled_aux<shared_future<T> >
925
- : BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
926
- {};
1084
+ }
1085
+ template <class Clock, class Duration>
1086
+ future_status
1087
+ wait_until(const chrono::time_point<Clock, Duration>& abs_time) const
1088
+ {
1089
+ if(!future_)
1090
+ {
1091
+ boost::throw_exception(future_uninitialized());
1092
+ }
1093
+ return future_->wait_until(abs_time);
1094
+ }
927
1095
  #endif
1096
+ };
1097
+
1098
+ BOOST_THREAD_DCL_MOVABLE_BEG(T) shared_future<T> BOOST_THREAD_DCL_MOVABLE_END
928
1099
 
929
1100
  template <typename R>
930
1101
  class promise
931
1102
  {
932
1103
  typedef boost::shared_ptr<detail::future_object<R> > future_ptr;
933
1104
 
934
- future_ptr future;
1105
+ future_ptr future_;
935
1106
  bool future_obtained;
936
1107
 
937
- promise(promise & rhs);// = delete;
938
- promise & operator=(promise & rhs);// = delete;
939
-
940
1108
  void lazy_init()
941
1109
  {
942
- if(!atomic_load(&future))
1110
+ #if defined BOOST_THREAD_PROMISE_LAZY
1111
+ if(!atomic_load(&future_))
943
1112
  {
944
1113
  future_ptr blank;
945
- atomic_compare_exchange(&future,&blank,future_ptr(new detail::future_object<R>));
1114
+ atomic_compare_exchange(&future_,&blank,future_ptr(new detail::future_object<R>));
946
1115
  }
1116
+ #endif
947
1117
  }
948
1118
 
949
1119
  public:
950
- // template <class Allocator> explicit promise(Allocator a);
1120
+ BOOST_THREAD_MOVABLE_ONLY(promise)
1121
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1122
+ template <class Allocator>
1123
+ promise(boost::allocator_arg_t, Allocator a)
1124
+ {
1125
+ typedef typename Allocator::template rebind<detail::future_object<R> >::other A2;
1126
+ A2 a2(a);
1127
+ typedef thread_detail::allocator_destructor<A2> D;
951
1128
 
1129
+ future_ = future_ptr(::new(a2.allocate(1)) detail::future_object<R>(), D(a2, 1) );
1130
+ future_obtained = false;
1131
+ }
1132
+ #endif
952
1133
  promise():
953
- future(),future_obtained(false)
1134
+ #if defined BOOST_THREAD_PROMISE_LAZY
1135
+ future_(),
1136
+ #else
1137
+ future_(new detail::future_object<R>()),
1138
+ #endif
1139
+ future_obtained(false)
954
1140
  {}
955
1141
 
956
1142
  ~promise()
957
1143
  {
958
- if(future)
1144
+ if(future_)
959
1145
  {
960
- boost::lock_guard<boost::mutex> lock(future->mutex);
1146
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
961
1147
 
962
- if(!future->done)
1148
+ if(!future_->done)
963
1149
  {
964
- future->mark_exceptional_finish_internal(boost::copy_exception(broken_promise()));
1150
+ future_->mark_exceptional_finish_internal(boost::copy_exception(broken_promise()));
965
1151
  }
966
1152
  }
967
1153
  }
968
1154
 
969
1155
  // Assignment
970
- #ifndef BOOST_NO_RVALUE_REFERENCES
971
- promise(promise && rhs):
972
- future_obtained(rhs.future_obtained)
973
- {
974
- future.swap(rhs.future);
975
- rhs.future_obtained=false;
976
- }
977
- promise & operator=(promise&& rhs)
1156
+ promise(BOOST_THREAD_RV_REF(promise) rhs) BOOST_NOEXCEPT :
1157
+ future_(BOOST_THREAD_RV(rhs).future_),future_obtained(BOOST_THREAD_RV(rhs).future_obtained)
978
1158
  {
979
- future.swap(rhs.future);
980
- future_obtained=rhs.future_obtained;
981
- rhs.future.reset();
982
- rhs.future_obtained=false;
983
- return *this;
1159
+ BOOST_THREAD_RV(rhs).future_.reset();
1160
+ BOOST_THREAD_RV(rhs).future_obtained=false;
984
1161
  }
985
- #else
986
- promise(boost::detail::thread_move_t<promise> rhs):
987
- future(rhs->future),future_obtained(rhs->future_obtained)
1162
+ promise & operator=(BOOST_THREAD_RV_REF(promise) rhs) BOOST_NOEXCEPT
988
1163
  {
989
- rhs->future.reset();
990
- rhs->future_obtained=false;
991
- }
992
- promise & operator=(boost::detail::thread_move_t<promise> rhs)
993
- {
994
- future=rhs->future;
995
- future_obtained=rhs->future_obtained;
996
- rhs->future.reset();
997
- rhs->future_obtained=false;
1164
+ future_=BOOST_THREAD_RV(rhs).future_;
1165
+ future_obtained=BOOST_THREAD_RV(rhs).future_obtained;
1166
+ BOOST_THREAD_RV(rhs).future_.reset();
1167
+ BOOST_THREAD_RV(rhs).future_obtained=false;
998
1168
  return *this;
999
1169
  }
1000
1170
 
1001
- operator boost::detail::thread_move_t<promise>()
1002
- {
1003
- return boost::detail::thread_move_t<promise>(*this);
1004
- }
1005
- #endif
1006
-
1007
1171
  void swap(promise& other)
1008
1172
  {
1009
- future.swap(other.future);
1173
+ future_.swap(other.future_);
1010
1174
  std::swap(future_obtained,other.future_obtained);
1011
1175
  }
1012
1176
 
1013
1177
  // Result retrieval
1014
- unique_future<R> get_future()
1178
+ BOOST_THREAD_FUTURE<R> get_future()
1015
1179
  {
1016
1180
  lazy_init();
1017
- if(future_obtained)
1181
+ if (future_.get()==0)
1182
+ {
1183
+ boost::throw_exception(promise_moved());
1184
+ }
1185
+ if (future_obtained)
1018
1186
  {
1019
1187
  boost::throw_exception(future_already_retrieved());
1020
1188
  }
1021
1189
  future_obtained=true;
1022
- return unique_future<R>(future);
1190
+ return BOOST_THREAD_FUTURE<R>(future_);
1023
1191
  }
1024
1192
 
1025
1193
  void set_value(typename detail::future_traits<R>::source_reference_type r)
1026
1194
  {
1027
1195
  lazy_init();
1028
- boost::lock_guard<boost::mutex> lock(future->mutex);
1029
- if(future->done)
1196
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1197
+ if(future_->done)
1030
1198
  {
1031
1199
  boost::throw_exception(promise_already_satisfied());
1032
1200
  }
1033
- future->mark_finished_with_result_internal(r);
1201
+ future_->mark_finished_with_result_internal(r);
1034
1202
  }
1035
1203
 
1036
1204
  // void set_value(R && r);
1037
1205
  void set_value(typename detail::future_traits<R>::rvalue_source_type r)
1038
1206
  {
1039
1207
  lazy_init();
1040
- boost::lock_guard<boost::mutex> lock(future->mutex);
1041
- if(future->done)
1208
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1209
+ if(future_->done)
1042
1210
  {
1043
1211
  boost::throw_exception(promise_already_satisfied());
1044
1212
  }
1045
- future->mark_finished_with_result_internal(static_cast<typename detail::future_traits<R>::rvalue_source_type>(r));
1213
+ future_->mark_finished_with_result_internal(static_cast<typename detail::future_traits<R>::rvalue_source_type>(r));
1046
1214
  }
1047
1215
 
1048
1216
  void set_exception(boost::exception_ptr p)
1049
1217
  {
1050
1218
  lazy_init();
1051
- boost::lock_guard<boost::mutex> lock(future->mutex);
1052
- if(future->done)
1219
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1220
+ if(future_->done)
1053
1221
  {
1054
1222
  boost::throw_exception(promise_already_satisfied());
1055
1223
  }
1056
- future->mark_exceptional_finish_internal(p);
1224
+ future_->mark_exceptional_finish_internal(p);
1057
1225
  }
1058
1226
 
1227
+ // setting the result with deferred notification
1228
+ //void set_value_at_thread_exit(const R& r); // NOT YET IMPLEMENTED
1229
+ //void set_value_at_thread_exit(see below); // NOT YET IMPLEMENTED
1230
+ //void set_exception_at_thread_exit(exception_ptr p); // NOT YET IMPLEMENTED
1231
+
1059
1232
  template<typename F>
1060
1233
  void set_wait_callback(F f)
1061
1234
  {
1062
1235
  lazy_init();
1063
- future->set_wait_callback(f,this);
1236
+ future_->set_wait_callback(f,this);
1064
1237
  }
1065
1238
 
1066
1239
  };
@@ -1070,135 +1243,140 @@ namespace boost
1070
1243
  {
1071
1244
  typedef boost::shared_ptr<detail::future_object<void> > future_ptr;
1072
1245
 
1073
- future_ptr future;
1246
+ future_ptr future_;
1074
1247
  bool future_obtained;
1075
1248
 
1076
- promise(promise & rhs);// = delete;
1077
- promise & operator=(promise & rhs);// = delete;
1078
-
1079
1249
  void lazy_init()
1080
1250
  {
1081
- if(!atomic_load(&future))
1251
+ #if defined BOOST_THREAD_PROMISE_LAZY
1252
+ if(!atomic_load(&future_))
1082
1253
  {
1083
1254
  future_ptr blank;
1084
- atomic_compare_exchange(&future,&blank,future_ptr(new detail::future_object<void>));
1255
+ atomic_compare_exchange(&future_,&blank,future_ptr(new detail::future_object<void>));
1085
1256
  }
1257
+ #endif
1086
1258
  }
1087
1259
  public:
1088
- // template <class Allocator> explicit promise(Allocator a);
1260
+ BOOST_THREAD_MOVABLE_ONLY(promise)
1089
1261
 
1262
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1263
+ template <class Allocator>
1264
+ promise(boost::allocator_arg_t, Allocator a)
1265
+ {
1266
+ typedef typename Allocator::template rebind<detail::future_object<void> >::other A2;
1267
+ A2 a2(a);
1268
+ typedef thread_detail::allocator_destructor<A2> D;
1269
+
1270
+ future_ = future_ptr(::new(a2.allocate(1)) detail::future_object<void>(), D(a2, 1) );
1271
+ future_obtained = false;
1272
+ }
1273
+ #endif
1090
1274
  promise():
1091
- future(),future_obtained(false)
1275
+ #if defined BOOST_THREAD_PROMISE_LAZY
1276
+ future_(),
1277
+ #else
1278
+ future_(new detail::future_object<void>),
1279
+ #endif
1280
+ future_obtained(false)
1092
1281
  {}
1093
1282
 
1094
1283
  ~promise()
1095
1284
  {
1096
- if(future)
1285
+ if(future_)
1097
1286
  {
1098
- boost::lock_guard<boost::mutex> lock(future->mutex);
1287
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1099
1288
 
1100
- if(!future->done)
1289
+ if(!future_->done)
1101
1290
  {
1102
- future->mark_exceptional_finish_internal(boost::copy_exception(broken_promise()));
1291
+ future_->mark_exceptional_finish_internal(boost::copy_exception(broken_promise()));
1103
1292
  }
1104
1293
  }
1105
1294
  }
1106
1295
 
1107
1296
  // Assignment
1108
- #ifndef BOOST_NO_RVALUE_REFERENCES
1109
- promise(promise && rhs):
1110
- future_obtained(rhs.future_obtained)
1111
- {
1112
- future.swap(rhs.future);
1113
- rhs.future_obtained=false;
1114
- }
1115
- promise & operator=(promise&& rhs)
1116
- {
1117
- future.swap(rhs.future);
1118
- future_obtained=rhs.future_obtained;
1119
- rhs.future.reset();
1120
- rhs.future_obtained=false;
1121
- return *this;
1122
- }
1123
- #else
1124
- promise(boost::detail::thread_move_t<promise> rhs):
1125
- future(rhs->future),future_obtained(rhs->future_obtained)
1297
+ promise(BOOST_THREAD_RV_REF(promise) rhs) BOOST_NOEXCEPT :
1298
+ future_(BOOST_THREAD_RV(rhs).future_),future_obtained(BOOST_THREAD_RV(rhs).future_obtained)
1126
1299
  {
1127
- rhs->future.reset();
1128
- rhs->future_obtained=false;
1300
+ // we need to release the future as shared_ptr doesn't implements move semantics
1301
+ BOOST_THREAD_RV(rhs).future_.reset();
1302
+ BOOST_THREAD_RV(rhs).future_obtained=false;
1129
1303
  }
1130
- promise & operator=(boost::detail::thread_move_t<promise> rhs)
1304
+
1305
+ promise & operator=(BOOST_THREAD_RV_REF(promise) rhs) BOOST_NOEXCEPT
1131
1306
  {
1132
- future=rhs->future;
1133
- future_obtained=rhs->future_obtained;
1134
- rhs->future.reset();
1135
- rhs->future_obtained=false;
1307
+ future_=BOOST_THREAD_RV(rhs).future_;
1308
+ future_obtained=BOOST_THREAD_RV(rhs).future_obtained;
1309
+ BOOST_THREAD_RV(rhs).future_.reset();
1310
+ BOOST_THREAD_RV(rhs).future_obtained=false;
1136
1311
  return *this;
1137
1312
  }
1138
1313
 
1139
- operator boost::detail::thread_move_t<promise>()
1140
- {
1141
- return boost::detail::thread_move_t<promise>(*this);
1142
- }
1143
- #endif
1144
-
1145
1314
  void swap(promise& other)
1146
1315
  {
1147
- future.swap(other.future);
1316
+ future_.swap(other.future_);
1148
1317
  std::swap(future_obtained,other.future_obtained);
1149
1318
  }
1150
1319
 
1151
1320
  // Result retrieval
1152
- unique_future<void> get_future()
1321
+ BOOST_THREAD_FUTURE<void> get_future()
1153
1322
  {
1154
1323
  lazy_init();
1155
1324
 
1325
+ if (future_.get()==0)
1326
+ {
1327
+ boost::throw_exception(promise_moved());
1328
+ }
1156
1329
  if(future_obtained)
1157
1330
  {
1158
1331
  boost::throw_exception(future_already_retrieved());
1159
1332
  }
1160
1333
  future_obtained=true;
1161
- return unique_future<void>(future);
1334
+ return BOOST_THREAD_FUTURE<void>(future_);
1162
1335
  }
1163
1336
 
1164
1337
  void set_value()
1165
1338
  {
1166
1339
  lazy_init();
1167
- boost::lock_guard<boost::mutex> lock(future->mutex);
1168
- if(future->done)
1340
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1341
+ if(future_->done)
1169
1342
  {
1170
1343
  boost::throw_exception(promise_already_satisfied());
1171
1344
  }
1172
- future->mark_finished_with_result_internal();
1345
+ future_->mark_finished_with_result_internal();
1173
1346
  }
1174
1347
 
1175
1348
  void set_exception(boost::exception_ptr p)
1176
1349
  {
1177
1350
  lazy_init();
1178
- boost::lock_guard<boost::mutex> lock(future->mutex);
1179
- if(future->done)
1351
+ boost::lock_guard<boost::mutex> lock(future_->mutex);
1352
+ if(future_->done)
1180
1353
  {
1181
1354
  boost::throw_exception(promise_already_satisfied());
1182
1355
  }
1183
- future->mark_exceptional_finish_internal(p);
1356
+ future_->mark_exceptional_finish_internal(p);
1184
1357
  }
1185
1358
 
1186
1359
  template<typename F>
1187
1360
  void set_wait_callback(F f)
1188
1361
  {
1189
1362
  lazy_init();
1190
- future->set_wait_callback(f,this);
1363
+ future_->set_wait_callback(f,this);
1191
1364
  }
1192
1365
 
1193
1366
  };
1194
1367
 
1195
- #ifdef BOOST_NO_RVALUE_REFERENCES
1196
- template <typename T>
1197
- struct has_move_emulation_enabled_aux<promise<T> >
1198
- : BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
1199
- {};
1368
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1369
+ namespace container
1370
+ {
1371
+ template <class R, class Alloc>
1372
+ struct uses_allocator<promise<R> , Alloc> : true_type
1373
+ {
1374
+ };
1375
+ }
1200
1376
  #endif
1201
1377
 
1378
+ BOOST_THREAD_DCL_MOVABLE_BEG(T) promise<T> BOOST_THREAD_DCL_MOVABLE_END
1379
+
1202
1380
  namespace detail
1203
1381
  {
1204
1382
  template<typename R>
@@ -1211,6 +1389,10 @@ namespace boost
1211
1389
  started(false)
1212
1390
  {}
1213
1391
 
1392
+ void reset()
1393
+ {
1394
+ started=false;
1395
+ }
1214
1396
  void run()
1215
1397
  {
1216
1398
  {
@@ -1239,30 +1421,38 @@ namespace boost
1239
1421
  };
1240
1422
 
1241
1423
 
1424
+
1425
+
1242
1426
  template<typename R,typename F>
1243
1427
  struct task_object:
1244
1428
  task_base<R>
1245
1429
  {
1430
+ private:
1431
+ task_object(task_object&);
1432
+ public:
1246
1433
  F f;
1247
1434
  task_object(F const& f_):
1248
1435
  f(f_)
1249
1436
  {}
1250
- #ifndef BOOST_NO_RVALUE_REFERENCES
1251
- task_object(F&& f_):
1252
- f(f_)
1437
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
1438
+ task_object(BOOST_THREAD_RV_REF(F) f_):
1439
+ f(boost::forward<F>(f_))
1253
1440
  {}
1254
1441
  #else
1255
- task_object(boost::detail::thread_move_t<F> f_):
1256
- f(f_)
1442
+ task_object(BOOST_THREAD_RV_REF(F) f_):
1443
+ f(boost::move(f_))
1257
1444
  {}
1258
1445
  #endif
1259
-
1260
1446
  void do_run()
1261
1447
  {
1262
1448
  try
1263
1449
  {
1264
1450
  this->mark_finished_with_result(f());
1265
1451
  }
1452
+ catch(thread_interrupted& )
1453
+ {
1454
+ this->mark_interrupted_finish();
1455
+ }
1266
1456
  catch(...)
1267
1457
  {
1268
1458
  this->mark_exceptional_finish();
@@ -1270,21 +1460,52 @@ namespace boost
1270
1460
  }
1271
1461
  };
1272
1462
 
1463
+ template<typename R>
1464
+ struct task_object<R,R (*)()>:
1465
+ task_base<R>
1466
+ {
1467
+ private:
1468
+ task_object(task_object&);
1469
+ public:
1470
+ R (*f)();
1471
+ task_object(R (*f_)()):
1472
+ f(f_)
1473
+ {}
1474
+ void do_run()
1475
+ {
1476
+ try
1477
+ {
1478
+ this->mark_finished_with_result(f());
1479
+ }
1480
+ catch(thread_interrupted& )
1481
+ {
1482
+ this->mark_interrupted_finish();
1483
+ }
1484
+ catch(...)
1485
+ {
1486
+ this->mark_exceptional_finish();
1487
+ }
1488
+ }
1489
+ };
1490
+
1273
1491
  template<typename F>
1274
1492
  struct task_object<void,F>:
1275
1493
  task_base<void>
1276
1494
  {
1495
+ private:
1496
+ task_object(task_object&);
1497
+ public:
1277
1498
  F f;
1278
1499
  task_object(F const& f_):
1279
1500
  f(f_)
1280
1501
  {}
1281
- #ifndef BOOST_NO_RVALUE_REFERENCES
1282
- task_object(F&& f_):
1283
- f(f_)
1502
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
1503
+ task_object(BOOST_THREAD_RV_REF(F) f_):
1504
+ f(boost::forward<F>(f_))
1284
1505
  {}
1285
1506
  #else
1286
- task_object(boost::detail::thread_move_t<F> f_):
1287
- f(f_)
1507
+ task_object(BOOST_THREAD_RV_REF(F) f_):
1508
+ f(boost::move(f_))
1288
1509
  {}
1289
1510
  #endif
1290
1511
 
@@ -1295,6 +1516,10 @@ namespace boost
1295
1516
  f();
1296
1517
  this->mark_finished_with_result();
1297
1518
  }
1519
+ catch(thread_interrupted& )
1520
+ {
1521
+ this->mark_interrupted_finish();
1522
+ }
1298
1523
  catch(...)
1299
1524
  {
1300
1525
  this->mark_exceptional_finish();
@@ -1302,49 +1527,122 @@ namespace boost
1302
1527
  }
1303
1528
  };
1304
1529
 
1305
- }
1530
+ template<>
1531
+ struct task_object<void,void (*)()>:
1532
+ task_base<void>
1533
+ {
1534
+ private:
1535
+ task_object(task_object&);
1536
+ public:
1537
+ void (*f)();
1538
+ task_object(void (*f_)()):
1539
+ f(f_)
1540
+ {}
1541
+ void do_run()
1542
+ {
1543
+ try
1544
+ {
1545
+ f();
1546
+ this->mark_finished_with_result();
1547
+ }
1548
+ catch(thread_interrupted& )
1549
+ {
1550
+ this->mark_interrupted_finish();
1551
+ }
1552
+ catch(...)
1553
+ {
1554
+ this->mark_exceptional_finish();
1555
+ }
1556
+ }
1557
+ };
1306
1558
 
1559
+ }
1307
1560
 
1308
1561
  template<typename R>
1309
1562
  class packaged_task
1310
1563
  {
1564
+ typedef boost::shared_ptr<detail::task_base<R> > task_ptr;
1311
1565
  boost::shared_ptr<detail::task_base<R> > task;
1312
1566
  bool future_obtained;
1313
1567
 
1314
- packaged_task(packaged_task&);// = delete;
1315
- packaged_task& operator=(packaged_task&);// = delete;
1316
-
1317
1568
  public:
1569
+ typedef R result_type;
1570
+ BOOST_THREAD_MOVABLE_ONLY(packaged_task)
1571
+
1318
1572
  packaged_task():
1319
1573
  future_obtained(false)
1320
1574
  {}
1321
1575
 
1322
1576
  // construction and destruction
1323
- template <class F>
1324
- explicit packaged_task(F const& f):
1325
- task(new detail::task_object<R,F>(f)),future_obtained(false)
1326
- {}
1577
+
1327
1578
  explicit packaged_task(R(*f)()):
1328
1579
  task(new detail::task_object<R,R(*)()>(f)),future_obtained(false)
1329
1580
  {}
1330
-
1331
- #ifndef BOOST_NO_RVALUE_REFERENCES
1581
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
1332
1582
  template <class F>
1333
- explicit packaged_task(F&& f):
1334
- task(new detail::task_object<R,F>(f)),future_obtained(false)
1583
+ explicit packaged_task(BOOST_THREAD_RV_REF(F) f):
1584
+ task(new detail::task_object<R,
1585
+ typename remove_cv<typename remove_reference<F>::type>::type
1586
+ >(boost::forward<F>(f))),future_obtained(false)
1335
1587
  {}
1336
1588
  #else
1337
1589
  template <class F>
1338
- explicit packaged_task(boost::detail::thread_move_t<F> f):
1590
+ explicit packaged_task(F const& f):
1339
1591
  task(new detail::task_object<R,F>(f)),future_obtained(false)
1340
1592
  {}
1593
+ template <class F>
1594
+ explicit packaged_task(BOOST_THREAD_RV_REF(F) f):
1595
+ task(new detail::task_object<R,F>(boost::move(f))),future_obtained(false)
1596
+ {}
1341
1597
  #endif
1342
1598
 
1343
- // template <class F, class Allocator>
1344
- // explicit packaged_task(F const& f, Allocator a);
1345
- // template <class F, class Allocator>
1346
- // explicit packaged_task(F&& f, Allocator a);
1599
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1600
+ template <class Allocator>
1601
+ packaged_task(boost::allocator_arg_t, Allocator a, R(*f)())
1602
+ {
1603
+ typedef R(*FR)();
1604
+ typedef typename Allocator::template rebind<detail::task_object<R,FR> >::other A2;
1605
+ A2 a2(a);
1606
+ typedef thread_detail::allocator_destructor<A2> D;
1607
+
1608
+ task = task_ptr(::new(a2.allocate(1)) detail::task_object<R,FR>(f), D(a2, 1) );
1609
+ future_obtained = false;
1610
+ }
1611
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
1612
+ template <class F, class Allocator>
1613
+ packaged_task(boost::allocator_arg_t, Allocator a, BOOST_THREAD_RV_REF(F) f)
1614
+ {
1615
+ typedef typename remove_cv<typename remove_reference<F>::type>::type FR;
1616
+ typedef typename Allocator::template rebind<detail::task_object<R,FR> >::other A2;
1617
+ A2 a2(a);
1618
+ typedef thread_detail::allocator_destructor<A2> D;
1619
+
1620
+ task = task_ptr(::new(a2.allocate(1)) detail::task_object<R,FR>(boost::forward<F>(f)), D(a2, 1) );
1621
+ future_obtained = false;
1622
+ }
1623
+ #else
1624
+ template <class F, class Allocator>
1625
+ packaged_task(boost::allocator_arg_t, Allocator a, const F& f)
1626
+ {
1627
+ typedef typename Allocator::template rebind<detail::task_object<R,F> >::other A2;
1628
+ A2 a2(a);
1629
+ typedef thread_detail::allocator_destructor<A2> D;
1347
1630
 
1631
+ task = task_ptr(::new(a2.allocate(1)) detail::task_object<R,F>(f), D(a2, 1) );
1632
+ future_obtained = false;
1633
+ }
1634
+ template <class F, class Allocator>
1635
+ packaged_task(boost::allocator_arg_t, Allocator a, BOOST_THREAD_RV_REF(F) f)
1636
+ {
1637
+ typedef typename Allocator::template rebind<detail::task_object<R,F> >::other A2;
1638
+ A2 a2(a);
1639
+ typedef thread_detail::allocator_destructor<A2> D;
1640
+
1641
+ task = task_ptr(::new(a2.allocate(1)) detail::task_object<R,F>(boost::move(f)), D(a2, 1) );
1642
+ future_obtained = false;
1643
+ }
1644
+ #endif //BOOST_NO_CXX11_RVALUE_REFERENCES
1645
+ #endif // BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1348
1646
 
1349
1647
  ~packaged_task()
1350
1648
  {
@@ -1355,46 +1653,39 @@ namespace boost
1355
1653
  }
1356
1654
 
1357
1655
  // assignment
1358
- #ifndef BOOST_NO_RVALUE_REFERENCES
1359
- packaged_task(packaged_task&& other):
1360
- future_obtained(other.future_obtained)
1361
- {
1362
- task.swap(other.task);
1363
- other.future_obtained=false;
1364
- }
1365
- packaged_task& operator=(packaged_task&& other)
1656
+ packaged_task(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT :
1657
+ future_obtained(BOOST_THREAD_RV(other).future_obtained)
1366
1658
  {
1367
- packaged_task temp(static_cast<packaged_task&&>(other));
1368
- swap(temp);
1369
- return *this;
1659
+ task.swap(BOOST_THREAD_RV(other).task);
1660
+ BOOST_THREAD_RV(other).future_obtained=false;
1370
1661
  }
1371
- #else
1372
- packaged_task(boost::detail::thread_move_t<packaged_task> other):
1373
- future_obtained(other->future_obtained)
1662
+ packaged_task& operator=(BOOST_THREAD_RV_REF(packaged_task) other) BOOST_NOEXCEPT
1374
1663
  {
1375
- task.swap(other->task);
1376
- other->future_obtained=false;
1377
- }
1378
- packaged_task& operator=(boost::detail::thread_move_t<packaged_task> other)
1379
- {
1380
- packaged_task temp(other);
1664
+ packaged_task temp(static_cast<BOOST_THREAD_RV_REF(packaged_task)>(other));
1381
1665
  swap(temp);
1382
1666
  return *this;
1383
1667
  }
1384
- operator boost::detail::thread_move_t<packaged_task>()
1668
+
1669
+ void reset()
1385
1670
  {
1386
- return boost::detail::thread_move_t<packaged_task>(*this);
1671
+ if (!valid())
1672
+ throw future_error(system::make_error_code(future_errc::no_state));
1673
+ task->reset();
1674
+ future_obtained=false;
1387
1675
  }
1388
- #endif
1389
1676
 
1390
- void swap(packaged_task& other)
1677
+ void swap(packaged_task& other) BOOST_NOEXCEPT
1391
1678
  {
1392
1679
  task.swap(other.task);
1393
1680
  std::swap(future_obtained,other.future_obtained);
1394
1681
  }
1682
+ bool valid() const BOOST_NOEXCEPT
1683
+ {
1684
+ return task.get()!=0;
1685
+ }
1395
1686
 
1396
1687
  // result retrieval
1397
- unique_future<R> get_future()
1688
+ BOOST_THREAD_FUTURE<R> get_future()
1398
1689
  {
1399
1690
  if(!task)
1400
1691
  {
@@ -1403,12 +1694,14 @@ namespace boost
1403
1694
  else if(!future_obtained)
1404
1695
  {
1405
1696
  future_obtained=true;
1406
- return unique_future<R>(task);
1697
+ return BOOST_THREAD_FUTURE<R>(task);
1407
1698
  }
1408
1699
  else
1409
1700
  {
1410
1701
  boost::throw_exception(future_already_retrieved());
1411
1702
  }
1703
+ return BOOST_THREAD_FUTURE<R>();
1704
+
1412
1705
  }
1413
1706
 
1414
1707
 
@@ -1430,14 +1723,146 @@ namespace boost
1430
1723
 
1431
1724
  };
1432
1725
 
1433
- #ifdef BOOST_NO_RVALUE_REFERENCES
1434
- template <typename T>
1435
- struct has_move_emulation_enabled_aux<packaged_task<T> >
1436
- : BOOST_MOVE_BOOST_NS::integral_constant<bool, true>
1437
- {};
1726
+ #if defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
1727
+ namespace container
1728
+ {
1729
+ template <class R, class Alloc>
1730
+ struct uses_allocator<packaged_task<R>, Alloc>
1731
+ : public true_type {};
1732
+ }
1438
1733
  #endif
1439
1734
 
1440
- }
1735
+ BOOST_THREAD_DCL_MOVABLE_BEG(T) packaged_task<T> BOOST_THREAD_DCL_MOVABLE_END
1441
1736
 
1442
1737
 
1738
+ template <class R>
1739
+ BOOST_THREAD_FUTURE<R>
1740
+ async(launch policy, R(*f)())
1741
+ {
1742
+ if (int(policy) & int(launch::async))
1743
+ {
1744
+ packaged_task<R> pt( f );
1745
+
1746
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1747
+ boost::thread( boost::move(pt) ).detach();
1748
+ return ::boost::move(ret);
1749
+ }
1750
+ else if (int(policy) & int(launch::deferred))
1751
+ {
1752
+ packaged_task<R> pt( f );
1753
+
1754
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1755
+ return ::boost::move(ret);
1756
+ } else {
1757
+ BOOST_THREAD_FUTURE<R> ret;
1758
+ return ::boost::move(ret);
1759
+ }
1760
+ }
1761
+
1762
+ template <class R>
1763
+ BOOST_THREAD_FUTURE<R>
1764
+ async(R(*f)())
1765
+ {
1766
+ return async(launch::any, f);
1767
+ }
1768
+ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
1769
+ template <class F>
1770
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
1771
+ async(launch policy, BOOST_THREAD_FWD_REF(F) f)
1772
+ {
1773
+ typedef typename boost::result_of<typename decay<F>::type()>::type R;
1774
+ if (int(policy) & int(launch::async))
1775
+ {
1776
+ packaged_task<R> pt( boost::forward<F>(f) );
1777
+
1778
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1779
+ boost::thread( boost::move(pt) ).detach();
1780
+ return ::boost::move(ret);
1781
+ }
1782
+ else if (int(policy) & int(launch::deferred))
1783
+ {
1784
+ packaged_task<R> pt( boost::forward<F>(f) );
1785
+
1786
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1787
+ return ::boost::move(ret);
1788
+ } else {
1789
+ BOOST_THREAD_FUTURE<R> ret;
1790
+ return ::boost::move(ret);
1791
+ }
1792
+ }
1793
+ template <class F>
1794
+ BOOST_THREAD_FUTURE<typename boost::result_of<F()>::type>
1795
+ async(BOOST_THREAD_RV_REF(F) f)
1796
+ {
1797
+ return async(launch::any, boost::forward<F>(f));
1798
+ }
1799
+ #else
1800
+
1801
+ // template <class F>
1802
+ // BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
1803
+ // async(launch policy, F const& f)
1804
+ // {
1805
+ // typedef typename boost::result_of<typename decay<F>::type()>::type R;
1806
+ // if (int(policy) & int(launch::async))
1807
+ // {
1808
+ // packaged_task<R> pt( f );
1809
+ //
1810
+ // BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1811
+ // boost::thread( boost::move(pt) ).detach();
1812
+ // return ::boost::move(ret);
1813
+ // }
1814
+ // else if (int(policy) & int(launch::deferred))
1815
+ // {
1816
+ // packaged_task<R> pt( f );
1817
+ //
1818
+ // BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1819
+ // return ::boost::move(ret);
1820
+ // } else {
1821
+ // BOOST_THREAD_FUTURE<R> ret;
1822
+ // return ::boost::move(ret);
1823
+ // }
1824
+ // }
1825
+ // template <class F>
1826
+ // BOOST_THREAD_FUTURE<typename boost::result_of<F()>::type>
1827
+ // async(F const& f)
1828
+ // {
1829
+ // return async(launch::any, f);
1830
+ // }
1831
+
1832
+ template <class F>
1833
+ BOOST_THREAD_FUTURE<typename boost::result_of<typename decay<F>::type()>::type>
1834
+ async(launch policy, BOOST_THREAD_FWD_REF(F) f)
1835
+ {
1836
+ typedef typename boost::result_of<typename decay<F>::type()>::type R;
1837
+ if (int(policy) & int(launch::async))
1838
+ {
1839
+ packaged_task<R> pt( boost::forward<F>(f) );
1840
+
1841
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1842
+ boost::thread( boost::move(pt) ).detach();
1843
+ return ::boost::move(ret);
1844
+ }
1845
+ else if (int(policy) & int(launch::deferred))
1846
+ {
1847
+ packaged_task<R> pt( boost::forward<F>(f) );
1848
+
1849
+ BOOST_THREAD_FUTURE<R> ret = pt.get_future();
1850
+ return ::boost::move(ret);
1851
+ } else {
1852
+ BOOST_THREAD_FUTURE<R> ret;
1853
+ return ::boost::move(ret);
1854
+ }
1855
+ }
1856
+ template <class F>
1857
+ BOOST_THREAD_FUTURE<typename boost::result_of<F()>::type>
1858
+ async(BOOST_THREAD_FWD_REF(F) f)
1859
+ {
1860
+ return async(launch::any, boost::forward<F>(f));
1861
+ }
1862
+
1443
1863
  #endif
1864
+
1865
+ }
1866
+
1867
+ #endif // BOOST_NO_EXCEPTION
1868
+ #endif // header