passenger 3.0.21 → 3.9.1.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 (835) hide show
  1. data/DEVELOPERS.TXT +4 -10
  2. data/NEWS +19 -27
  3. data/Rakefile +20 -19
  4. data/bin/passenger +3 -2
  5. data/bin/passenger-config +35 -5
  6. data/bin/passenger-install-apache2-module +12 -12
  7. data/bin/passenger-install-nginx-module +55 -38
  8. data/bin/passenger-memory-stats +3 -1
  9. data/bin/passenger-status +7 -35
  10. data/build/agents.rb +107 -21
  11. data/build/apache2.rb +11 -46
  12. data/build/basics.rb +61 -9
  13. data/build/common_library.rb +59 -142
  14. data/build/cxx_tests.rb +111 -110
  15. data/build/documentation.rb +33 -0
  16. data/build/misc.rb +30 -12
  17. data/build/nginx.rb +10 -39
  18. data/build/oxt_tests.rb +1 -0
  19. data/build/ruby_extension.rb +1 -5
  20. data/build/test_basics.rb +3 -2
  21. data/dev/copy_boost_headers.rb +2 -1
  22. data/doc/Architectural overview.html +49 -90
  23. data/doc/DebuggingAndStressTesting.txt.md +49 -0
  24. data/doc/Packaging.txt.md +254 -0
  25. data/doc/Security of user switching support.html +35 -66
  26. data/doc/Users guide Apache.html +588 -758
  27. data/doc/Users guide Apache.idmap.txt +253 -136
  28. data/doc/Users guide Apache.txt +154 -109
  29. data/doc/Users guide Nginx.html +544 -660
  30. data/doc/Users guide Nginx.idmap.txt +179 -91
  31. data/doc/Users guide Nginx.txt +192 -118
  32. data/doc/Users guide Standalone.html +65 -48
  33. data/doc/Users guide Standalone.idmap.txt +10 -2
  34. data/doc/Users guide Standalone.txt +4 -0
  35. data/doc/images/glyphicons-halflings-white.png +0 -0
  36. data/doc/images/glyphicons-halflings.png +0 -0
  37. data/doc/images/phusion_banner_small.png +0 -0
  38. data/doc/images/{smart-lv2.png → smart.png} +0 -0
  39. data/doc/images/{smart-lv2.svg → smart.svg} +0 -0
  40. data/doc/templates/bootstrap.min.css +397 -0
  41. data/doc/templates/markdown.html.erb +117 -0
  42. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +2 -1
  43. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +26 -48
  44. data/doc/users_guide_snippets/passenger_spawn_method.txt +18 -30
  45. data/doc/users_guide_snippets/support_information.txt +30 -0
  46. data/ext/apache2/Bucket.cpp +9 -26
  47. data/ext/apache2/Bucket.h +13 -10
  48. data/ext/apache2/Configuration.cpp +70 -58
  49. data/ext/apache2/Configuration.hpp +19 -47
  50. data/ext/apache2/DirectoryMapper.h +7 -7
  51. data/ext/apache2/Hooks.cpp +150 -313
  52. data/ext/boost/algorithm/string/detail/case_conv.hpp +4 -2
  53. data/ext/boost/algorithm/string/detail/find_format.hpp +20 -20
  54. data/ext/boost/algorithm/string/detail/find_format_all.hpp +23 -23
  55. data/ext/boost/algorithm/string/detail/find_format_store.hpp +2 -2
  56. data/ext/boost/algorithm/string/detail/formatter.hpp +25 -0
  57. data/ext/boost/algorithm/string/formatter.hpp +20 -3
  58. data/ext/boost/assert.hpp +85 -4
  59. data/ext/boost/bind/bind.hpp +1 -1
  60. data/ext/boost/concept/detail/backward_compatibility.hpp +1 -1
  61. data/ext/boost/concept_check.hpp +140 -64
  62. data/ext/boost/config.hpp +1 -1
  63. data/ext/boost/config/auto_link.hpp +8 -6
  64. data/ext/boost/config/compiler/borland.hpp +12 -2
  65. data/ext/boost/config/compiler/clang.hpp +89 -30
  66. data/ext/boost/config/compiler/codegear.hpp +3 -2
  67. data/ext/boost/config/compiler/common_edg.hpp +7 -5
  68. data/ext/boost/config/compiler/cray.hpp +61 -0
  69. data/ext/boost/config/compiler/digitalmars.hpp +9 -1
  70. data/ext/boost/config/compiler/gcc.hpp +33 -24
  71. data/ext/boost/config/compiler/gcc_xml.hpp +4 -0
  72. data/ext/boost/config/compiler/hp_acc.hpp +12 -1
  73. data/ext/boost/config/compiler/intel.hpp +78 -4
  74. data/ext/boost/config/compiler/metrowerks.hpp +4 -1
  75. data/ext/boost/config/compiler/mpw.hpp +4 -1
  76. data/ext/boost/config/compiler/nvcc.hpp +8 -66
  77. data/ext/boost/config/compiler/pathscale.hpp +80 -0
  78. data/ext/boost/config/compiler/pgi.hpp +5 -5
  79. data/ext/boost/config/compiler/sunpro_cc.hpp +4 -1
  80. data/ext/boost/config/compiler/vacpp.hpp +37 -13
  81. data/ext/boost/config/compiler/visualc.hpp +24 -11
  82. data/ext/boost/config/platform/bsd.hpp +1 -1
  83. data/ext/boost/config/platform/cray.hpp +18 -0
  84. data/ext/boost/config/platform/cygwin.hpp +10 -0
  85. data/ext/boost/config/platform/linux.hpp +5 -0
  86. data/ext/boost/config/platform/macos.hpp +5 -4
  87. data/ext/boost/config/platform/symbian.hpp +5 -2
  88. data/ext/boost/config/platform/vms.hpp +25 -0
  89. data/ext/boost/config/platform/win32.hpp +7 -1
  90. data/ext/boost/config/select_compiler_config.hpp +8 -25
  91. data/ext/boost/config/select_platform_config.hpp +8 -1
  92. data/ext/boost/config/select_stdlib_config.hpp +9 -1
  93. data/ext/boost/config/stdlib/dinkumware.hpp +6 -9
  94. data/ext/boost/config/stdlib/libcomo.hpp +1 -4
  95. data/ext/boost/config/stdlib/libcpp.hpp +36 -0
  96. data/ext/boost/config/stdlib/libstdcpp3.hpp +37 -11
  97. data/ext/boost/config/stdlib/modena.hpp +1 -4
  98. data/ext/boost/config/stdlib/msl.hpp +1 -4
  99. data/ext/boost/config/stdlib/roguewave.hpp +9 -6
  100. data/ext/boost/config/stdlib/sgi.hpp +12 -4
  101. data/ext/boost/config/stdlib/stlport.hpp +11 -4
  102. data/ext/boost/config/stdlib/vacpp.hpp +11 -4
  103. data/ext/boost/config/suffix.hpp +71 -6
  104. data/ext/boost/config/warning_disable.hpp +1 -1
  105. data/ext/boost/container/container_fwd.hpp +177 -0
  106. data/ext/boost/cstdint.hpp +17 -12
  107. data/ext/boost/current_function.hpp +2 -1
  108. data/ext/boost/date_time/c_time.hpp +17 -1
  109. data/ext/boost/date_time/compiler_config.hpp +13 -15
  110. data/ext/boost/date_time/date_formatting.hpp +7 -1
  111. data/ext/boost/date_time/filetime_functions.hpp +4 -4
  112. data/ext/boost/date_time/gregorian_calendar.ipp +2 -2
  113. data/ext/boost/date_time/strings_from_facet.hpp +3 -3
  114. data/ext/boost/date_time/time_facet.hpp +101 -101
  115. data/ext/boost/detail/endian.hpp +4 -2
  116. data/ext/boost/detail/fenv.hpp +74 -0
  117. data/ext/boost/detail/sp_typeinfo.hpp +6 -0
  118. data/ext/boost/exception/detail/clone_current_exception.hpp +47 -0
  119. data/ext/boost/exception/detail/exception_ptr.hpp +194 -122
  120. data/ext/boost/exception/detail/type_info.hpp +3 -3
  121. data/ext/boost/exception/diagnostic_information.hpp +37 -21
  122. data/ext/boost/exception/exception.hpp +21 -1
  123. data/ext/boost/exception/info.hpp +0 -1
  124. data/ext/boost/function.hpp +2 -2
  125. data/ext/boost/function/function_base.hpp +15 -9
  126. data/ext/boost/function/function_template.hpp +26 -48
  127. data/ext/boost/integer_fwd.hpp +0 -16
  128. data/ext/boost/integer_traits.hpp +2 -2
  129. data/ext/boost/iterator.hpp +1 -1
  130. data/ext/boost/iterator/iterator_adaptor.hpp +1 -7
  131. data/ext/boost/iterator/iterator_facade.hpp +13 -13
  132. data/ext/boost/iterator/transform_iterator.hpp +5 -20
  133. data/ext/boost/lexical_cast.hpp +1655 -673
  134. data/ext/boost/math/policies/policy.hpp +982 -0
  135. data/ext/boost/math/special_functions/detail/fp_traits.hpp +570 -0
  136. data/ext/boost/math/special_functions/detail/round_fwd.hpp +80 -0
  137. data/ext/boost/math/special_functions/fpclassify.hpp +533 -0
  138. data/ext/boost/math/special_functions/math_fwd.hpp +1070 -0
  139. data/ext/boost/math/special_functions/sign.hpp +145 -0
  140. data/ext/boost/math/tools/config.hpp +321 -0
  141. data/ext/boost/math/tools/promotion.hpp +150 -0
  142. data/ext/boost/math/tools/real_cast.hpp +29 -0
  143. data/ext/boost/math/tools/user.hpp +97 -0
  144. data/ext/boost/move/move.hpp +1222 -0
  145. data/ext/boost/mpl/O1_size.hpp +40 -0
  146. data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
  147. data/ext/boost/mpl/advance.hpp +76 -0
  148. data/ext/boost/mpl/advance_fwd.hpp +28 -0
  149. data/ext/boost/mpl/at.hpp +52 -0
  150. data/ext/boost/mpl/at_fwd.hpp +24 -0
  151. data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
  152. data/ext/boost/mpl/aux_/advance_backward.hpp +128 -0
  153. data/ext/boost/mpl/aux_/advance_forward.hpp +127 -0
  154. data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
  155. data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
  156. data/ext/boost/mpl/aux_/begin_end_impl.hpp +101 -0
  157. data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
  158. data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
  159. data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
  160. data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
  161. data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
  162. data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
  163. data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
  164. data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
  165. data/ext/boost/mpl/aux_/has_size.hpp +23 -0
  166. data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
  167. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
  168. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
  169. data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
  170. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
  171. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
  172. data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
  173. data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
  174. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
  175. data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
  176. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
  177. data/ext/boost/mpl/aux_/numeric_op.hpp +315 -0
  178. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
  179. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
  180. data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
  181. data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
  182. data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
  183. data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
  184. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
  185. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
  186. data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
  187. data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
  188. data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
  189. data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
  190. data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
  191. data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
  192. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
  193. data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
  194. data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
  195. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
  196. data/ext/boost/mpl/aux_/push_back_impl.hpp +70 -0
  197. data/ext/boost/mpl/aux_/push_front_impl.hpp +71 -0
  198. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
  199. data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
  200. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +63 -0
  201. data/ext/boost/mpl/back_fwd.hpp +24 -0
  202. data/ext/boost/mpl/back_inserter.hpp +34 -0
  203. data/ext/boost/mpl/begin_end.hpp +57 -0
  204. data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
  205. data/ext/boost/mpl/clear.hpp +39 -0
  206. data/ext/boost/mpl/clear_fwd.hpp +24 -0
  207. data/ext/boost/mpl/comparison.hpp +24 -0
  208. data/ext/boost/mpl/contains.hpp +41 -0
  209. data/ext/boost/mpl/contains_fwd.hpp +25 -0
  210. data/ext/boost/mpl/deref.hpp +41 -0
  211. data/ext/boost/mpl/distance.hpp +78 -0
  212. data/ext/boost/mpl/distance_fwd.hpp +28 -0
  213. data/ext/boost/mpl/empty_fwd.hpp +24 -0
  214. data/ext/boost/mpl/equal_to.hpp +21 -0
  215. data/ext/boost/mpl/find.hpp +38 -0
  216. data/ext/boost/mpl/find_if.hpp +50 -0
  217. data/ext/boost/mpl/fold.hpp +48 -0
  218. data/ext/boost/mpl/front_fwd.hpp +24 -0
  219. data/ext/boost/mpl/front_inserter.hpp +33 -0
  220. data/ext/boost/mpl/greater.hpp +21 -0
  221. data/ext/boost/mpl/greater_equal.hpp +21 -0
  222. data/ext/boost/mpl/inserter.hpp +32 -0
  223. data/ext/boost/mpl/iter_fold.hpp +49 -0
  224. data/ext/boost/mpl/iter_fold_if.hpp +117 -0
  225. data/ext/boost/mpl/iterator_range.hpp +42 -0
  226. data/ext/boost/mpl/iterator_tags.hpp +27 -0
  227. data/ext/boost/mpl/less.hpp +21 -0
  228. data/ext/boost/mpl/less_equal.hpp +21 -0
  229. data/ext/boost/mpl/limits/list.hpp +21 -0
  230. data/ext/boost/mpl/limits/vector.hpp +21 -0
  231. data/ext/boost/mpl/list.hpp +57 -0
  232. data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
  233. data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
  234. data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
  235. data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
  236. data/ext/boost/mpl/list/aux_/front.hpp +33 -0
  237. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
  238. data/ext/boost/mpl/list/aux_/item.hpp +55 -0
  239. data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
  240. data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
  241. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
  242. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
  243. data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
  244. data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
  245. data/ext/boost/mpl/list/aux_/size.hpp +33 -0
  246. data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
  247. data/ext/boost/mpl/list/list0.hpp +42 -0
  248. data/ext/boost/mpl/list/list10.hpp +43 -0
  249. data/ext/boost/mpl/list/list20.hpp +43 -0
  250. data/ext/boost/mpl/long.hpp +22 -0
  251. data/ext/boost/mpl/long_fwd.hpp +27 -0
  252. data/ext/boost/mpl/minus.hpp +21 -0
  253. data/ext/boost/mpl/multiplies.hpp +53 -0
  254. data/ext/boost/mpl/negate.hpp +81 -0
  255. data/ext/boost/mpl/not_equal_to.hpp +21 -0
  256. data/ext/boost/mpl/numeric_cast.hpp +41 -0
  257. data/ext/boost/mpl/pair.hpp +70 -0
  258. data/ext/boost/mpl/plus.hpp +21 -0
  259. data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
  260. data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
  261. data/ext/boost/mpl/prior.hpp +19 -0
  262. data/ext/boost/mpl/push_back.hpp +53 -0
  263. data/ext/boost/mpl/push_back_fwd.hpp +24 -0
  264. data/ext/boost/mpl/push_front.hpp +52 -0
  265. data/ext/boost/mpl/push_front_fwd.hpp +24 -0
  266. data/ext/boost/mpl/remove_if.hpp +83 -0
  267. data/ext/boost/mpl/reverse_fold.hpp +50 -0
  268. data/ext/boost/mpl/same_as.hpp +55 -0
  269. data/ext/boost/mpl/sequence_tag.hpp +124 -0
  270. data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
  271. data/ext/boost/mpl/size.hpp +42 -0
  272. data/ext/boost/mpl/size_fwd.hpp +24 -0
  273. data/ext/boost/mpl/tag.hpp +52 -0
  274. data/ext/boost/mpl/times.hpp +21 -0
  275. data/ext/boost/mpl/vector.hpp +57 -0
  276. data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
  277. data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
  278. data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
  279. data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
  280. data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
  281. data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
  282. data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
  283. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
  284. data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
  285. data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
  286. data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
  287. data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
  288. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
  289. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
  290. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
  291. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
  292. data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
  293. data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
  294. data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
  295. data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
  296. data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
  297. data/ext/boost/mpl/vector/vector0.hpp +34 -0
  298. data/ext/boost/mpl/vector/vector10.hpp +45 -0
  299. data/ext/boost/mpl/vector/vector20.hpp +45 -0
  300. data/ext/boost/none.hpp +1 -1
  301. data/ext/boost/numeric/conversion/bounds.hpp +24 -0
  302. data/ext/boost/numeric/conversion/cast.hpp +61 -0
  303. data/ext/boost/numeric/conversion/conversion_traits.hpp +39 -0
  304. data/ext/boost/numeric/conversion/converter.hpp +68 -0
  305. data/ext/boost/numeric/conversion/converter_policies.hpp +186 -0
  306. data/ext/boost/numeric/conversion/detail/bounds.hpp +58 -0
  307. data/ext/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  308. data/ext/boost/numeric/conversion/detail/converter.hpp +602 -0
  309. data/ext/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  310. data/ext/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  311. data/ext/boost/numeric/conversion/detail/meta.hpp +120 -0
  312. data/ext/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  313. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  314. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  315. data/ext/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  316. data/ext/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  317. data/ext/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  318. data/ext/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  319. data/ext/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  320. data/ext/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  321. data/ext/boost/operators.hpp +3 -1
  322. data/ext/boost/optional/optional.hpp +146 -79
  323. data/ext/boost/optional/optional_fwd.hpp +8 -1
  324. data/ext/boost/preprocessor/cat.hpp +2 -2
  325. data/ext/boost/preprocessor/config/config.hpp +39 -4
  326. data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
  327. data/ext/boost/preprocessor/facilities/overload.hpp +25 -0
  328. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +3 -3
  329. data/ext/boost/preprocessor/iteration/iterate.hpp +3 -3
  330. data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
  331. data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
  332. data/ext/boost/preprocessor/seq/cat.hpp +5 -4
  333. data/ext/boost/preprocessor/seq/size.hpp +0 -1
  334. data/ext/boost/preprocessor/tuple/eat.hpp +83 -34
  335. data/ext/boost/preprocessor/tuple/elem.hpp +161 -355
  336. data/ext/boost/preprocessor/tuple/rem.hpp +110 -48
  337. data/ext/boost/preprocessor/tuple/to_list.hpp +90 -36
  338. data/ext/boost/preprocessor/variadic/elem.hpp +94 -0
  339. data/ext/boost/preprocessor/variadic/size.hpp +30 -0
  340. data/ext/boost/range/begin.hpp +17 -6
  341. data/ext/boost/range/concepts.hpp +37 -2
  342. data/ext/boost/range/detail/safe_bool.hpp +72 -0
  343. data/ext/boost/range/end.hpp +14 -9
  344. data/ext/boost/range/iterator_range_core.hpp +120 -12
  345. data/ext/boost/range/size.hpp +21 -5
  346. data/ext/boost/smart_ptr/detail/shared_count.hpp +88 -0
  347. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -0
  348. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +142 -0
  349. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +9 -0
  350. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +10 -2
  351. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +5 -1
  352. data/ext/boost/smart_ptr/detail/spinlock.hpp +4 -1
  353. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +20 -3
  354. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +4 -0
  355. data/ext/boost/smart_ptr/make_shared.hpp +591 -22
  356. data/ext/boost/smart_ptr/shared_array.hpp +29 -1
  357. data/ext/boost/smart_ptr/shared_ptr.hpp +29 -13
  358. data/ext/boost/smart_ptr/weak_ptr.hpp +24 -12
  359. data/ext/boost/src/pthread/once.cpp +9 -7
  360. data/ext/boost/src/pthread/thread.cpp +32 -28
  361. data/ext/boost/src/pthread/timeconv.inl +4 -5
  362. data/ext/boost/src/tss_null.cpp +5 -1
  363. data/ext/boost/static_assert.hpp +8 -2
  364. data/ext/boost/thread/detail/config.hpp +19 -4
  365. data/ext/boost/thread/detail/move.hpp +11 -5
  366. data/ext/boost/thread/detail/thread.hpp +59 -43
  367. data/ext/boost/thread/exceptions.hpp +9 -9
  368. data/ext/boost/thread/future.hpp +150 -82
  369. data/ext/boost/thread/locks.hpp +101 -60
  370. data/ext/boost/thread/pthread/condition_variable.hpp +79 -32
  371. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +12 -3
  372. data/ext/boost/thread/pthread/mutex.hpp +17 -14
  373. data/ext/boost/thread/pthread/once.hpp +3 -4
  374. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +12 -2
  375. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -19
  376. data/ext/boost/thread/pthread/shared_mutex.hpp +13 -13
  377. data/ext/boost/thread/pthread/thread_data.hpp +40 -12
  378. data/ext/boost/thread/thread_time.hpp +5 -0
  379. data/ext/boost/throw_exception.hpp +1 -1
  380. data/ext/boost/token_functions.hpp +34 -10
  381. data/ext/boost/type_traits/add_rvalue_reference.hpp +66 -0
  382. data/ext/boost/type_traits/alignment_of.hpp +1 -1
  383. data/ext/boost/type_traits/detail/bool_trait_def.hpp +26 -3
  384. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +3 -2
  385. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +1 -1
  386. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +6 -4
  387. data/ext/boost/type_traits/detail/type_trait_def.hpp +8 -2
  388. data/ext/boost/type_traits/function_traits.hpp +1 -1
  389. data/ext/boost/type_traits/has_nothrow_constructor.hpp +53 -0
  390. data/ext/boost/type_traits/has_nothrow_copy.hpp +19 -5
  391. data/ext/boost/type_traits/has_trivial_constructor.hpp +51 -0
  392. data/ext/boost/type_traits/has_trivial_copy.hpp +20 -5
  393. data/ext/boost/type_traits/has_trivial_destructor.hpp +12 -5
  394. data/ext/boost/type_traits/intrinsics.hpp +119 -71
  395. data/ext/boost/type_traits/is_const.hpp +5 -5
  396. data/ext/boost/type_traits/is_convertible.hpp +14 -13
  397. data/ext/boost/type_traits/is_enum.hpp +1 -1
  398. data/ext/boost/type_traits/is_floating_point.hpp +27 -0
  399. data/ext/boost/type_traits/is_function.hpp +3 -3
  400. data/ext/boost/type_traits/is_fundamental.hpp +1 -1
  401. data/ext/boost/type_traits/is_member_function_pointer.hpp +2 -2
  402. data/ext/boost/type_traits/is_member_pointer.hpp +2 -2
  403. data/ext/boost/type_traits/is_pod.hpp +11 -3
  404. data/ext/boost/type_traits/is_pointer.hpp +2 -2
  405. data/ext/boost/type_traits/is_signed.hpp +8 -3
  406. data/ext/boost/type_traits/is_union.hpp +8 -0
  407. data/ext/boost/type_traits/is_unsigned.hpp +9 -4
  408. data/ext/boost/type_traits/is_volatile.hpp +5 -5
  409. data/ext/boost/type_traits/remove_cv.hpp +4 -3
  410. data/ext/boost/type_traits/remove_pointer.hpp +51 -2
  411. data/ext/boost/type_traits/remove_reference.hpp +2 -2
  412. data/ext/boost/type_traits/type_with_alignment.hpp +8 -2
  413. data/ext/boost/utility/declval.hpp +44 -0
  414. data/ext/boost/utility/detail/in_place_factory_prefix.hpp +36 -0
  415. data/ext/boost/utility/detail/in_place_factory_suffix.hpp +23 -0
  416. data/ext/boost/utility/detail/result_of_iterate.hpp +142 -0
  417. data/ext/boost/utility/in_place_factory.hpp +88 -0
  418. data/ext/boost/utility/result_of.hpp +103 -0
  419. data/ext/boost/utility/swap.hpp +55 -0
  420. data/ext/common/AnsiColorConstants.h +36 -0
  421. data/ext/common/ApplicationPool2/Common.h +87 -0
  422. data/ext/common/ApplicationPool2/ComponentInfo.h +53 -0
  423. data/ext/common/ApplicationPool2/Group.h +648 -0
  424. data/ext/common/ApplicationPool2/Implementation.cpp +580 -0
  425. data/ext/common/ApplicationPool2/Options.h +576 -0
  426. data/ext/common/ApplicationPool2/PipeWatcher.h +61 -0
  427. data/ext/common/ApplicationPool2/Pool.h +1181 -0
  428. data/ext/common/ApplicationPool2/Process.h +425 -0
  429. data/ext/common/ApplicationPool2/README.md +96 -0
  430. data/ext/common/ApplicationPool2/Session.h +158 -0
  431. data/ext/common/ApplicationPool2/Socket.h +246 -0
  432. data/ext/common/ApplicationPool2/Spawner.h +2212 -0
  433. data/ext/common/ApplicationPool2/SuperGroup.h +749 -0
  434. data/ext/common/BackgroundEventLoop.cpp +129 -0
  435. data/ext/common/BackgroundEventLoop.h +61 -0
  436. data/ext/common/Constants.h +3 -1
  437. data/ext/common/EventedBufferedInput.h +331 -0
  438. data/ext/common/EventedMessageServer.h +17 -34
  439. data/ext/common/EventedServer.h +2 -2
  440. data/ext/common/Exceptions.h +71 -19
  441. data/ext/common/FileDescriptor.h +8 -6
  442. data/ext/common/HttpConstants.h +167 -0
  443. data/ext/common/IniFile.h +24 -0
  444. data/ext/common/Logging.h +62 -849
  445. data/ext/common/MessageReadersWriters.h +19 -0
  446. data/ext/common/MessageServer.h +11 -14
  447. data/ext/common/MultiLibeio.cpp +198 -0
  448. data/ext/common/MultiLibeio.h +67 -0
  449. data/ext/common/ResourceLocator.h +24 -41
  450. data/ext/common/SafeLibev.h +186 -14
  451. data/ext/common/StaticString.h +23 -3
  452. data/ext/common/UnionStation.h +972 -0
  453. data/ext/common/Utils.cpp +168 -24
  454. data/ext/common/Utils.h +25 -3
  455. data/ext/common/Utils/CachedFileStat.hpp +4 -3
  456. data/ext/common/Utils/FileChangeChecker.h +2 -2
  457. data/ext/common/Utils/HashMap.h +50 -0
  458. data/ext/common/Utils/IOUtils.cpp +229 -68
  459. data/ext/common/Utils/IOUtils.h +134 -3
  460. data/ext/common/Utils/Lock.h +28 -0
  461. data/ext/common/Utils/MemoryBarrier.h +52 -0
  462. data/ext/common/Utils/PriorityQueue.h +54 -0
  463. data/ext/common/Utils/ProcessMetricsCollector.h +9 -11
  464. data/ext/common/Utils/ScopeGuard.h +50 -1
  465. data/ext/common/Utils/SmallVector.h +653 -0
  466. data/ext/common/Utils/StrIntUtils.cpp +26 -2
  467. data/ext/common/Utils/StrIntUtils.h +18 -2
  468. data/ext/common/Utils/StringMap.h +125 -8
  469. data/ext/common/Utils/Template.h +212 -0
  470. data/ext/common/Utils/fib.c +699 -0
  471. data/ext/common/Utils/fib.h +101 -0
  472. data/ext/common/Utils/fibpriv.h +67 -0
  473. data/ext/common/Utils/json-forwards.h +249 -0
  474. data/ext/common/Utils/json.h +1855 -0
  475. data/ext/common/Utils/jsoncpp.cpp +4230 -0
  476. data/ext/common/agents/Base.cpp +1126 -0
  477. data/ext/common/{AgentBase.h → agents/Base.h} +5 -1
  478. data/ext/common/agents/EnvPrinter.c +16 -0
  479. data/ext/common/agents/HelperAgent/AgentOptions.h +81 -0
  480. data/ext/common/{HelperAgent → agents/HelperAgent}/BacktracesServer.h +3 -2
  481. data/ext/common/agents/HelperAgent/FileBackedPipe.h +732 -0
  482. data/ext/common/agents/HelperAgent/Main.cpp +497 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.cpp +283 -0
  484. data/ext/common/agents/HelperAgent/RequestHandler.h +2139 -0
  485. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +451 -0
  486. data/ext/common/{LoggingAgent → agents/LoggingAgent}/DataStoreId.h +1 -1
  487. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.cpp +1 -1
  488. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.h +0 -0
  489. data/ext/common/{LoggingAgent → agents/LoggingAgent}/LoggingServer.h +18 -16
  490. data/ext/common/{LoggingAgent → agents/LoggingAgent}/Main.cpp +15 -13
  491. data/ext/common/{LoggingAgent → agents/LoggingAgent}/RemoteSender.h +6 -6
  492. data/ext/common/agents/SpawnPreparer.cpp +127 -0
  493. data/ext/common/{Watchdog.cpp → agents/Watchdog/Main.cpp} +63 -25
  494. data/ext/libeio/Changes +72 -0
  495. data/ext/{google/COPYING → libeio/LICENSE} +17 -9
  496. data/ext/libeio/Makefile.am +15 -0
  497. data/ext/libeio/Makefile.in +694 -0
  498. data/ext/libeio/aclocal.m4 +9418 -0
  499. data/ext/libeio/autogen.sh +3 -0
  500. data/ext/libeio/config.guess +1501 -0
  501. data/ext/libeio/config.h.in +136 -0
  502. data/ext/libeio/config.sub +1705 -0
  503. data/ext/libeio/configure +14822 -0
  504. data/ext/libeio/configure.ac +22 -0
  505. data/ext/libeio/demo.c +194 -0
  506. data/ext/libeio/ecb.h +457 -0
  507. data/ext/libeio/eio.c +2816 -0
  508. data/ext/libeio/eio.h +411 -0
  509. data/ext/libeio/install-sh +520 -0
  510. data/ext/libeio/libeio.m4 +211 -0
  511. data/ext/libeio/ltmain.sh +9636 -0
  512. data/ext/libeio/missing +376 -0
  513. data/ext/libeio/xthread.h +166 -0
  514. data/ext/libev/Changes +125 -7
  515. data/ext/libev/Makefile.am +5 -3
  516. data/ext/libev/Makefile.in +209 -120
  517. data/ext/libev/aclocal.m4 +6027 -4619
  518. data/ext/libev/autogen.sh +1 -4
  519. data/ext/libev/config.h.in +11 -7
  520. data/ext/libev/configure +7312 -14993
  521. data/ext/libev/configure.ac +12 -5
  522. data/ext/libev/depcomp +630 -0
  523. data/ext/libev/ev++.h +48 -32
  524. data/ext/libev/ev.c +1173 -391
  525. data/ext/libev/ev.h +315 -181
  526. data/ext/libev/ev_epoll.c +66 -15
  527. data/ext/libev/ev_kqueue.c +20 -18
  528. data/ext/libev/ev_poll.c +27 -23
  529. data/ext/libev/ev_port.c +39 -19
  530. data/ext/libev/ev_select.c +23 -17
  531. data/ext/libev/ev_vars.h +25 -8
  532. data/ext/libev/ev_win32.c +6 -6
  533. data/ext/libev/ev_wrap.h +22 -2
  534. data/ext/libev/event.c +18 -17
  535. data/ext/libev/event.h +16 -4
  536. data/ext/libev/libev.m4 +10 -6
  537. data/ext/libev/ltmain.sh +7353 -5811
  538. data/ext/nginx/Configuration.c +74 -42
  539. data/ext/nginx/Configuration.h +3 -5
  540. data/ext/nginx/ContentHandler.c +26 -83
  541. data/ext/nginx/ContentHandler.h +1 -1
  542. data/ext/nginx/config +13 -9
  543. data/ext/nginx/ngx_http_passenger_module.c +3 -7
  544. data/ext/oxt/detail/backtrace_enabled.hpp +5 -102
  545. data/ext/oxt/detail/context.hpp +90 -0
  546. data/ext/oxt/detail/spin_lock_darwin.hpp +4 -0
  547. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +4 -0
  548. data/ext/oxt/detail/spin_lock_pthreads.hpp +14 -0
  549. data/ext/oxt/detail/tracable_exception_enabled.hpp +2 -2
  550. data/ext/oxt/dynamic_thread_group.hpp +27 -1
  551. data/ext/oxt/implementation.cpp +415 -0
  552. data/ext/oxt/{thread.cpp → initialize.hpp} +13 -6
  553. data/ext/oxt/macros.hpp +32 -1
  554. data/ext/oxt/spin_lock.hpp +6 -11
  555. data/ext/oxt/system_calls.cpp +204 -16
  556. data/ext/oxt/system_calls.hpp +85 -45
  557. data/ext/oxt/thread.hpp +13 -117
  558. data/ext/ruby/passenger_native_support.c +82 -237
  559. data/helper-scripts/backtrace-sanitizer.rb +114 -0
  560. data/helper-scripts/classic-rails-loader.rb +135 -0
  561. data/helper-scripts/classic-rails-preloader.rb +161 -0
  562. data/helper-scripts/node-loader.js +314 -0
  563. data/helper-scripts/rack-loader.rb +104 -0
  564. data/helper-scripts/rack-preloader.rb +132 -0
  565. data/helper-scripts/wsgi-loader.py +231 -0
  566. data/helper-scripts/wsgi-preloader.py +1 -0
  567. data/lib/phusion_passenger.rb +159 -61
  568. data/lib/phusion_passenger/abstract_installer.rb +182 -87
  569. data/lib/phusion_passenger/admin_tools/server_instance.rb +25 -19
  570. data/lib/phusion_passenger/analytics_logger.rb +5 -4
  571. data/lib/phusion_passenger/classic_rails/{request_handler.rb → thread_handler_extension.rb} +4 -40
  572. data/lib/phusion_passenger/classic_rails_extensions/init.rb +5 -3
  573. data/lib/phusion_passenger/common_library.rb +441 -0
  574. data/lib/phusion_passenger/console_text_template.rb +4 -16
  575. data/lib/phusion_passenger/constants.rb +1 -8
  576. data/lib/phusion_passenger/debug_logging.rb +5 -2
  577. data/lib/phusion_passenger/dependencies.rb +51 -13
  578. data/lib/phusion_passenger/loader_shared_helpers.rb +318 -0
  579. data/lib/phusion_passenger/message_channel.rb +3 -47
  580. data/lib/phusion_passenger/message_client.rb +2 -2
  581. data/lib/phusion_passenger/native_support.rb +36 -15
  582. data/lib/phusion_passenger/packaging.rb +8 -11
  583. data/lib/phusion_passenger/platform_info.rb +25 -17
  584. data/lib/phusion_passenger/platform_info/apache.rb +10 -7
  585. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +10 -30
  586. data/lib/phusion_passenger/platform_info/compiler.rb +93 -34
  587. data/lib/phusion_passenger/platform_info/ruby.rb +37 -97
  588. data/lib/phusion_passenger/preloader_shared_helpers.rb +121 -0
  589. data/lib/phusion_passenger/public_api.rb +1 -4
  590. data/lib/phusion_passenger/rack/{request_handler.rb → thread_handler_extension.rb} +14 -63
  591. data/lib/phusion_passenger/rails3_extensions/init.rb +9 -8
  592. data/lib/phusion_passenger/request_handler.rb +500 -0
  593. data/lib/phusion_passenger/request_handler/thread_handler.rb +360 -0
  594. data/lib/phusion_passenger/ruby_core_enhancements.rb +142 -0
  595. data/lib/phusion_passenger/standalone/command.rb +36 -15
  596. data/lib/phusion_passenger/standalone/package_runtime_command.rb +16 -8
  597. data/lib/phusion_passenger/standalone/runtime_installer.rb +169 -72
  598. data/lib/phusion_passenger/standalone/start_command.rb +44 -39
  599. data/lib/phusion_passenger/standalone/utils.rb +5 -5
  600. data/lib/phusion_passenger/utils.rb +35 -914
  601. data/lib/phusion_passenger/utils/ansi_colors.rb +59 -0
  602. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  603. data/lib/phusion_passenger/utils/robust_interruption.rb +134 -0
  604. data/lib/phusion_passenger/utils/tee_input.rb +174 -0
  605. data/lib/phusion_passenger/utils/tmpio.rb +33 -0
  606. data/lib/phusion_passenger/utils/unseekable_socket.rb +6 -0
  607. data/resources/mime.types +5 -1
  608. data/{lib/phusion_passenger/templates → resources}/standalone_default_root/index.html +0 -0
  609. data/{lib/phusion_passenger → resources}/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  610. data/{lib/phusion_passenger → resources}/templates/apache2/config_snippets.txt.erb +0 -0
  611. data/{lib/phusion_passenger → resources}/templates/apache2/deployment_example.txt.erb +0 -0
  612. data/{lib/phusion_passenger → resources}/templates/apache2/no_write_permission_to_passenger_root.txt.erb +0 -0
  613. data/{lib/phusion_passenger → resources}/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  614. data/{lib/phusion_passenger → resources}/templates/apache2/run_installer_as_root.txt.erb +0 -0
  615. data/{lib/phusion_passenger → resources}/templates/apache2/welcome.txt.erb +0 -0
  616. data/{lib/phusion_passenger → resources}/templates/error_layout.css +6 -0
  617. data/resources/templates/error_layout.html.template +89 -0
  618. data/resources/templates/general_error.html.template +1 -0
  619. data/resources/templates/general_error_with_html.html.template +1 -0
  620. data/{lib/phusion_passenger → resources}/templates/nginx/ask_for_extra_configure_flags.txt.erb +0 -0
  621. data/{lib/phusion_passenger → resources}/templates/nginx/cannot_write_to_dir.txt.erb +0 -0
  622. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets.txt.erb +0 -0
  623. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets_inserted.txt.erb +0 -0
  624. data/{lib/phusion_passenger → resources}/templates/nginx/confirm_extra_configure_flags.txt.erb +0 -0
  625. data/{lib/phusion_passenger → resources}/templates/nginx/deployment_example.txt.erb +0 -0
  626. data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +8 -0
  627. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_downloaded.txt.erb +0 -0
  628. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_extracted.txt.erb +0 -0
  629. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  630. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  631. data/{lib/phusion_passenger → resources}/templates/nginx/query_download_and_install.txt.erb +0 -0
  632. data/{lib/phusion_passenger → resources}/templates/nginx/run_installer_as_root.txt.erb +0 -0
  633. data/{lib/phusion_passenger → resources}/templates/nginx/welcome.txt.erb +0 -0
  634. data/{lib/phusion_passenger → resources}/templates/standalone/cannot_write_to_dir.txt.erb +0 -0
  635. data/{lib/phusion_passenger → resources}/templates/standalone/config.erb +26 -5
  636. data/{lib/phusion_passenger → resources}/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  637. data/{lib/phusion_passenger → resources}/templates/standalone/run_installer_as_root.txt.erb +0 -0
  638. data/{lib/phusion_passenger → resources}/templates/standalone/welcome.txt.erb +0 -0
  639. data/resources/templates/undisclosed_error.html.template +25 -0
  640. data/test/config.json.example +42 -0
  641. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +86 -0
  642. data/test/cxx/ApplicationPool2/OptionsTest.cpp +44 -0
  643. data/test/cxx/ApplicationPool2/PoolTest.cpp +1234 -0
  644. data/test/cxx/ApplicationPool2/ProcessTest.cpp +131 -0
  645. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +229 -0
  646. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +744 -0
  647. data/test/cxx/BufferedIOTest.cpp +7 -7
  648. data/test/cxx/CxxTestMain.cpp +65 -2
  649. data/test/cxx/FileBackedPipeTest.cpp +626 -0
  650. data/test/cxx/FileChangeCheckerTest.cpp +20 -18
  651. data/test/cxx/FilterSupportTest.cpp +5 -5
  652. data/test/cxx/IOUtilsTest.cpp +11 -4
  653. data/test/cxx/MessageReadersWritersTest.cpp +1 -1
  654. data/test/cxx/MessageServerTest.cpp +31 -30
  655. data/test/cxx/RequestHandlerTest.cpp +777 -0
  656. data/test/cxx/ScgiRequestParserTest.cpp +36 -16
  657. data/test/cxx/ServerInstanceDirTest.cpp +1 -1
  658. data/test/cxx/StringMapTest.cpp +61 -0
  659. data/test/cxx/TemplateTest.cpp +118 -0
  660. data/test/cxx/TestSupport.cpp +25 -68
  661. data/test/cxx/TestSupport.h +81 -41
  662. data/test/cxx/{LoggingTest.cpp → UnionStationTest.cpp} +79 -74
  663. data/test/cxx/UtilsTest.cpp +59 -5
  664. data/test/integration_tests/apache2_tests.rb +2 -2
  665. data/test/integration_tests/nginx_tests.rb +1 -1
  666. data/test/integration_tests/spec_helper.rb +7 -5
  667. data/test/oxt/oxt_test_main.cpp +2 -0
  668. data/test/oxt/syscall_interruption_test.cpp +1 -0
  669. data/test/ruby/classic_rails/loader_spec.rb +48 -0
  670. data/test/ruby/classic_rails/preloader_spec.rb +54 -0
  671. data/test/ruby/rack/loader_spec.rb +62 -0
  672. data/test/ruby/rack/preloader_spec.rb +74 -0
  673. data/test/ruby/{abstract_request_handler_spec.rb → request_handler_spec.rb} +31 -68
  674. data/test/ruby/shared/loader_spec.rb +241 -0
  675. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +141 -182
  676. data/test/ruby/shared/ruby_loader_spec.rb +55 -0
  677. data/test/ruby/spec_helper.rb +8 -53
  678. data/test/ruby/utils/file_system_watcher_spec.rb +9 -1
  679. data/test/ruby/utils_spec.rb +10 -683
  680. data/test/stub/rack/config.ru +28 -3
  681. data/test/stub/rack/start.rb +47 -0
  682. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/Rakefile +0 -0
  683. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/application_controller.rb +0 -2
  684. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_1.rb +0 -0
  685. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_2.rb +0 -0
  686. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/foo_controller.rb +0 -0
  687. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/helpers/application_helper.rb +0 -0
  688. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/boot.rb +0 -0
  689. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/database.yml +3 -3
  690. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environment.rb +5 -2
  691. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/development.rb +0 -0
  692. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/production.rb +0 -0
  693. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/staging.rb +0 -0
  694. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/inflections.rb +0 -0
  695. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/mime_types.rb +0 -0
  696. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/routes.rb +1 -0
  697. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/about +0 -0
  698. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/console +0 -0
  699. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/dbconsole +0 -0
  700. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/destroy +0 -0
  701. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/generate +0 -0
  702. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/benchmarker +0 -0
  703. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/profiler +0 -0
  704. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/request +0 -0
  705. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/plugin +0 -0
  706. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/inspector +0 -0
  707. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/reaper +0 -0
  708. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/spawner +0 -0
  709. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/runner +0 -0
  710. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/server +0 -0
  711. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Gemfile +0 -0
  712. data/test/stub/rails3.0/Gemfile.lock +80 -0
  713. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Rakefile +0 -0
  714. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/controllers/application_controller.rb +0 -0
  715. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/helpers/application_helper.rb +0 -0
  716. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/views/layouts/application.html.erb +0 -0
  717. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config.ru +0 -0
  718. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/application.rb +0 -0
  719. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/boot.rb +0 -0
  720. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/database.yml +0 -0
  721. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environment.rb +0 -0
  722. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/development.rb +0 -0
  723. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/production.rb +0 -0
  724. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/test.rb +0 -0
  725. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/backtrace_silencers.rb +0 -0
  726. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/inflections.rb +0 -0
  727. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/mime_types.rb +0 -0
  728. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/passenger.rb +0 -0
  729. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/secret_token.rb +0 -0
  730. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/session_store.rb +0 -0
  731. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/locales/en.yml +0 -0
  732. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/routes.rb +0 -0
  733. data/test/stub/{rails_apps/3.0/empty → rails3.0}/db/seeds.rb +0 -0
  734. data/test/stub/{rails_apps/3.0/empty → rails3.0}/doc/README_FOR_APP +0 -0
  735. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/404.html +0 -0
  736. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/422.html +0 -0
  737. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/500.html +0 -0
  738. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/favicon.ico +0 -0
  739. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/index.html +0 -0
  740. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/robots.txt +0 -0
  741. data/test/stub/{rails_apps/3.0/empty → rails3.0}/script/rails +0 -0
  742. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/performance/browsing_test.rb +0 -0
  743. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/test_helper.rb +0 -0
  744. data/test/stub/start_error.pl +24 -0
  745. data/test/stub/wsgi/passenger_wsgi.py +71 -3
  746. data/test/support/apache2_controller.rb +2 -2
  747. data/test/support/placebo-preloader.rb +88 -0
  748. data/test/support/test_helper.rb +1 -14
  749. data/test/tut/tut.h +11 -4
  750. metadata +590 -326
  751. data.tar.gz.asc +0 -12
  752. data/PACKAGING.TXT +0 -25
  753. data/build/config.rb +0 -46
  754. data/ext/apache2/HelperAgent.cpp +0 -364
  755. data/ext/boost/call_traits.hpp +0 -24
  756. data/ext/boost/detail/call_traits.hpp +0 -164
  757. data/ext/common/AbstractSpawnManager.h +0 -110
  758. data/ext/common/AgentBase.cpp +0 -432
  759. data/ext/common/ApplicationPool/Client.h +0 -788
  760. data/ext/common/ApplicationPool/Interface.h +0 -295
  761. data/ext/common/ApplicationPool/Pool.h +0 -1327
  762. data/ext/common/ApplicationPool/Server.h +0 -479
  763. data/ext/common/MessageChannel.h +0 -494
  764. data/ext/common/PoolOptions.h +0 -518
  765. data/ext/common/Process.h +0 -253
  766. data/ext/common/Session.h +0 -436
  767. data/ext/common/SpawnManager.h +0 -611
  768. data/ext/google/ChangeLog +0 -167
  769. data/ext/google/dense_hash_map +0 -310
  770. data/ext/google/dense_hash_set +0 -287
  771. data/ext/google/sparse_hash_map +0 -294
  772. data/ext/google/sparse_hash_set +0 -275
  773. data/ext/google/sparsehash/densehashtable.h +0 -1062
  774. data/ext/google/sparsehash/sparseconfig.h +0 -55
  775. data/ext/google/sparsehash/sparsehashtable.h +0 -1015
  776. data/ext/google/sparsetable +0 -1468
  777. data/ext/google/type_traits.h +0 -250
  778. data/ext/nginx/HelperAgent.cpp +0 -1355
  779. data/ext/nginx/ScgiRequestParser.h +0 -375
  780. data/ext/oxt/backtrace.cpp +0 -185
  781. data/ext/oxt/tracable_exception.cpp +0 -89
  782. data/helper-scripts/passenger-spawn-server +0 -106
  783. data/lib/phusion_passenger/abstract_request_handler.rb +0 -766
  784. data/lib/phusion_passenger/abstract_server.rb +0 -372
  785. data/lib/phusion_passenger/abstract_server_collection.rb +0 -335
  786. data/lib/phusion_passenger/app_process.rb +0 -174
  787. data/lib/phusion_passenger/classic_rails/application_spawner.rb +0 -344
  788. data/lib/phusion_passenger/classic_rails/framework_spawner.rb +0 -311
  789. data/lib/phusion_passenger/exceptions.rb +0 -103
  790. data/lib/phusion_passenger/html_template.rb +0 -107
  791. data/lib/phusion_passenger/rack/application_spawner.rb +0 -231
  792. data/lib/phusion_passenger/spawn_manager.rb +0 -359
  793. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +0 -38
  794. data/lib/phusion_passenger/templates/app_init_error.html.erb +0 -64
  795. data/lib/phusion_passenger/templates/database_error.html.erb +0 -66
  796. data/lib/phusion_passenger/templates/error_layout.html.erb +0 -39
  797. data/lib/phusion_passenger/templates/framework_init_error.html.erb +0 -39
  798. data/lib/phusion_passenger/templates/general_error.html.erb +0 -22
  799. data/lib/phusion_passenger/templates/load_error.html.erb +0 -46
  800. data/lib/phusion_passenger/templates/version_not_found.html.erb +0 -34
  801. data/lib/phusion_passenger/utils/rewindable_input.rb +0 -125
  802. data/lib/phusion_passenger/wsgi/application_spawner.rb +0 -108
  803. data/test/config.yml.example +0 -41
  804. data/test/cxx/ApplicationPool_PoolTest.cpp +0 -33
  805. data/test/cxx/ApplicationPool_PoolTestCases.cpp +0 -1029
  806. data/test/cxx/ApplicationPool_ServerTest.cpp +0 -308
  807. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +0 -80
  808. data/test/cxx/MessageChannelTest.cpp +0 -557
  809. data/test/cxx/PoolOptionsTest.cpp +0 -116
  810. data/test/cxx/SpawnManagerTest.cpp +0 -161
  811. data/test/ruby/abstract_server_collection_spec.rb +0 -247
  812. data/test/ruby/abstract_server_spec.rb +0 -61
  813. data/test/ruby/app_process_spec.rb +0 -43
  814. data/test/ruby/classic_rails/application_spawner_spec.rb +0 -89
  815. data/test/ruby/classic_rails/framework_spawner_spec.rb +0 -92
  816. data/test/ruby/rack/application_spawner_spec.rb +0 -116
  817. data/test/ruby/shared/abstract_server_spec.rb +0 -23
  818. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +0 -38
  819. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +0 -19
  820. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +0 -15
  821. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +0 -27
  822. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +0 -29
  823. data/test/ruby/shared/spawners/reload_all_spec.rb +0 -36
  824. data/test/ruby/shared/spawners/reload_single_spec.rb +0 -52
  825. data/test/ruby/shared/spawners/spawn_server_spec.rb +0 -28
  826. data/test/ruby/shared/spawners/spawner_spec.rb +0 -273
  827. data/test/ruby/shared/utils/pseudo_io_spec.rb +0 -60
  828. data/test/ruby/spawn_manager_spec.rb +0 -134
  829. data/test/ruby/wsgi/application_spawner_spec.rb +0 -50
  830. data/test/stub/message_channel.rb +0 -11
  831. data/test/stub/message_channel_2.rb +0 -12
  832. data/test/stub/message_channel_3.rb +0 -19
  833. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +0 -73
  834. data/test/stub/spawn_server.rb +0 -22
  835. metadata.gz.asc +0 -12
@@ -15,6 +15,8 @@
15
15
  #include <locale>
16
16
  #include <functional>
17
17
 
18
+ #include <boost/type_traits/make_unsigned.hpp>
19
+
18
20
  namespace boost {
19
21
  namespace algorithm {
20
22
  namespace detail {
@@ -37,7 +39,7 @@ namespace boost {
37
39
  CharT operator ()( CharT Ch ) const
38
40
  {
39
41
  #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
40
- return std::tolower( Ch);
42
+ return std::tolower( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));
41
43
  #else
42
44
  return std::tolower<CharT>( Ch, *m_Loc );
43
45
  #endif
@@ -57,7 +59,7 @@ namespace boost {
57
59
  CharT operator ()( CharT Ch ) const
58
60
  {
59
61
  #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
60
- return std::toupper( Ch);
62
+ return std::toupper( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));
61
63
  #else
62
64
  return std::toupper<CharT>( Ch, *m_Loc );
63
65
  #endif
@@ -74,17 +74,17 @@ namespace boost {
74
74
  const InputT& Input,
75
75
  FormatterT Formatter,
76
76
  const FindResultT& FindResult )
77
- {
77
+ {
78
78
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
79
- return ::boost::algorithm::detail::find_format_copy_impl2(
80
- Output,
81
- Input,
82
- Formatter,
83
- FindResult,
84
- Formatter(FindResult) );
79
+ return ::boost::algorithm::detail::find_format_copy_impl2(
80
+ Output,
81
+ Input,
82
+ Formatter,
83
+ FindResult,
84
+ Formatter(FindResult) );
85
85
  } else {
86
86
  return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
87
- }
87
+ }
88
88
  }
89
89
 
90
90
 
@@ -137,14 +137,14 @@ namespace boost {
137
137
  const FindResultT& FindResult)
138
138
  {
139
139
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
140
- return ::boost::algorithm::detail::find_format_copy_impl2(
141
- Input,
142
- Formatter,
143
- FindResult,
144
- Formatter(FindResult) );
140
+ return ::boost::algorithm::detail::find_format_copy_impl2(
141
+ Input,
142
+ Formatter,
143
+ FindResult,
144
+ Formatter(FindResult) );
145
145
  } else {
146
146
  return Input;
147
- }
147
+ }
148
148
  }
149
149
 
150
150
  // replace implementation ----------------------------------------------------//
@@ -189,12 +189,12 @@ namespace boost {
189
189
  const FindResultT& FindResult)
190
190
  {
191
191
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
192
- ::boost::algorithm::detail::find_format_impl2(
193
- Input,
194
- Formatter,
195
- FindResult,
196
- Formatter(FindResult) );
197
- }
192
+ ::boost::algorithm::detail::find_format_impl2(
193
+ Input,
194
+ Formatter,
195
+ FindResult,
196
+ Formatter(FindResult) );
197
+ }
198
198
  }
199
199
 
200
200
  } // namespace detail
@@ -84,18 +84,18 @@ namespace boost {
84
84
  FinderT Finder,
85
85
  FormatterT Formatter,
86
86
  const FindResultT& FindResult )
87
- {
87
+ {
88
88
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
89
- return ::boost::algorithm::detail::find_format_all_copy_impl2(
90
- Output,
91
- Input,
92
- Finder,
93
- Formatter,
94
- FindResult,
95
- Formatter(FindResult) );
89
+ return ::boost::algorithm::detail::find_format_all_copy_impl2(
90
+ Output,
91
+ Input,
92
+ Finder,
93
+ Formatter,
94
+ FindResult,
95
+ Formatter(FindResult) );
96
96
  } else {
97
97
  return std::copy( ::boost::begin(Input), ::boost::end(Input), Output );
98
- }
98
+ }
99
99
  }
100
100
 
101
101
  // find_format_all_copy implementation ----------------------------------------------//
@@ -161,15 +161,15 @@ namespace boost {
161
161
  const FindResultT& FindResult)
162
162
  {
163
163
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
164
- return ::boost::algorithm::detail::find_format_all_copy_impl2(
165
- Input,
166
- Finder,
167
- Formatter,
168
- FindResult,
169
- Formatter(FindResult) );
164
+ return ::boost::algorithm::detail::find_format_all_copy_impl2(
165
+ Input,
166
+ Finder,
167
+ Formatter,
168
+ FindResult,
169
+ Formatter(FindResult) );
170
170
  } else {
171
171
  return Input;
172
- }
172
+ }
173
173
  }
174
174
 
175
175
  // find_format_all implementation ------------------------------------------------//
@@ -257,13 +257,13 @@ namespace boost {
257
257
  FindResultT FindResult)
258
258
  {
259
259
  if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) {
260
- ::boost::algorithm::detail::find_format_all_impl2(
261
- Input,
262
- Finder,
263
- Formatter,
264
- FindResult,
265
- Formatter(FindResult) );
266
- }
260
+ ::boost::algorithm::detail::find_format_all_impl2(
261
+ Input,
262
+ Finder,
263
+ Formatter,
264
+ FindResult,
265
+ Formatter(FindResult) );
266
+ }
267
267
  }
268
268
 
269
269
  } // namespace detail
@@ -53,7 +53,7 @@ namespace boost {
53
53
  {
54
54
  iterator_range<ForwardIteratorT>::operator=(FindResult);
55
55
  if( !this->empty() ) {
56
- m_FormatResult=m_Formatter(FindResult);
56
+ m_FormatResult=m_Formatter(FindResult);
57
57
  }
58
58
 
59
59
  return *this;
@@ -71,7 +71,7 @@ namespace boost {
71
71
  };
72
72
 
73
73
  template<typename InputT, typename FindResultT>
74
- bool check_find_result(InputT& Input, FindResultT& FindResult)
74
+ bool check_find_result(InputT&, FindResultT& FindResult)
75
75
  {
76
76
  typedef BOOST_STRING_TYPENAME
77
77
  range_const_iterator<InputT>::type input_iterator_type;
@@ -87,6 +87,31 @@ namespace boost {
87
87
  }
88
88
  };
89
89
 
90
+ // dissect format functor ----------------------------------------------------//
91
+
92
+ // dissect format functor
93
+ template<typename FinderT>
94
+ struct dissect_formatF
95
+ {
96
+ public:
97
+ // Construction
98
+ dissect_formatF(FinderT Finder) :
99
+ m_Finder(Finder) {}
100
+
101
+ // Operation
102
+ template<typename RangeT>
103
+ inline iterator_range<
104
+ BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
105
+ operator()(const RangeT& Replace) const
106
+ {
107
+ return m_Finder(::boost::begin(Replace), ::boost::end(Replace));
108
+ }
109
+
110
+ private:
111
+ FinderT m_Finder;
112
+ };
113
+
114
+
90
115
  } // namespace detail
91
116
  } // namespace algorithm
92
117
  } // namespace boost
@@ -36,7 +36,7 @@ namespace boost {
36
36
 
37
37
  //! Constant formatter
38
38
  /*!
39
- Construct the \c const_formatter. Const formatter always returns
39
+ Constructs a \c const_formatter. Const formatter always returns
40
40
  the same value, regardless of the parameter.
41
41
 
42
42
  \param Format A predefined value used as a result for formating
@@ -55,7 +55,7 @@ namespace boost {
55
55
 
56
56
  //! Identity formatter
57
57
  /*!
58
- Construct the \c identity_formatter. Identity formatter always returns
58
+ Constructs an \c identity_formatter. Identity formatter always returns
59
59
  the parameter.
60
60
 
61
61
  \return An instance of the \c identity_formatter object.
@@ -73,7 +73,7 @@ namespace boost {
73
73
 
74
74
  //! Empty formatter
75
75
  /*!
76
- Construct the \c empty_formatter. Empty formatter always returns an empty
76
+ Constructs an \c empty_formatter. Empty formatter always returns an empty
77
77
  sequence.
78
78
 
79
79
  \param Input container used to select a correct value_type for the
@@ -89,6 +89,22 @@ namespace boost {
89
89
  BOOST_STRING_TYPENAME range_value<RangeT>::type>();
90
90
  }
91
91
 
92
+ //! Empty formatter
93
+ /*!
94
+ Constructs a \c dissect_formatter. Dissect formatter uses a specified finder
95
+ to extract a portion of the formatted sequence. The first finder's match is returned
96
+ as a result
97
+
98
+ \param Finder a finder used to select a portion of the formated sequence
99
+ \return An instance of the \c dissect_formatter object.
100
+ */
101
+ template<typename FinderT>
102
+ inline detail::dissect_formatF< FinderT >
103
+ dissect_formatter(const FinderT& Finder)
104
+ {
105
+ return detail::dissect_formatF<FinderT>(Finder);
106
+ }
107
+
92
108
 
93
109
  } // namespace algorithm
94
110
 
@@ -96,6 +112,7 @@ namespace boost {
96
112
  using algorithm::const_formatter;
97
113
  using algorithm::identity_formatter;
98
114
  using algorithm::empty_formatter;
115
+ using algorithm::dissect_formatter;
99
116
 
100
117
  } // namespace boost
101
118
 
@@ -1,8 +1,11 @@
1
1
  //
2
2
  // boost/assert.hpp - BOOST_ASSERT(expr)
3
+ // BOOST_ASSERT_MSG(expr, msg)
4
+ // BOOST_VERIFY(expr)
3
5
  //
4
6
  // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
5
7
  // Copyright (c) 2007 Peter Dimov
8
+ // Copyright (c) Beman Dawes 2011
6
9
  //
7
10
  // Distributed under the Boost Software License, Version 1.0. (See
8
11
  // accompanying file LICENSE_1_0.txt or copy at
@@ -13,6 +16,16 @@
13
16
  // See http://www.boost.org/libs/utility/assert.html for documentation.
14
17
  //
15
18
 
19
+ //
20
+ // Stop inspect complaining about use of 'assert':
21
+ //
22
+ // boostinspect:naassert_macro
23
+ //
24
+
25
+ //--------------------------------------------------------------------------------------//
26
+ // BOOST_ASSERT //
27
+ //--------------------------------------------------------------------------------------//
28
+
16
29
  #undef BOOST_ASSERT
17
30
 
18
31
  #if defined(BOOST_DISABLE_ASSERTS)
@@ -25,18 +38,86 @@
25
38
 
26
39
  namespace boost
27
40
  {
28
-
29
- void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
30
-
41
+ void assertion_failed(char const * expr,
42
+ char const * function, char const * file, long line); // user defined
31
43
  } // namespace boost
32
44
 
33
- #define BOOST_ASSERT(expr) ((expr)? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
45
+ #define BOOST_ASSERT(expr) ((expr) \
46
+ ? ((void)0) \
47
+ : ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
34
48
 
35
49
  #else
36
50
  # include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
37
51
  # define BOOST_ASSERT(expr) assert(expr)
38
52
  #endif
39
53
 
54
+ //--------------------------------------------------------------------------------------//
55
+ // BOOST_ASSERT_MSG //
56
+ //--------------------------------------------------------------------------------------//
57
+
58
+ # undef BOOST_ASSERT_MSG
59
+
60
+ #if defined(BOOST_DISABLE_ASSERTS) || defined(NDEBUG)
61
+
62
+ #define BOOST_ASSERT_MSG(expr, msg) ((void)0)
63
+
64
+ #elif defined(BOOST_ENABLE_ASSERT_HANDLER)
65
+
66
+ #include <boost/current_function.hpp>
67
+
68
+ namespace boost
69
+ {
70
+ void assertion_failed_msg(char const * expr, char const * msg,
71
+ char const * function, char const * file, long line); // user defined
72
+ } // namespace boost
73
+
74
+ #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
75
+ ? ((void)0) \
76
+ : ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
77
+
78
+ #else
79
+ #ifndef BOOST_ASSERT_HPP
80
+ #define BOOST_ASSERT_HPP
81
+ #include <cstdlib>
82
+ #include <iostream>
83
+ #include <boost/current_function.hpp>
84
+
85
+ // IDE's like Visual Studio perform better if output goes to std::cout or
86
+ // some other stream, so allow user to configure output stream:
87
+ #ifndef BOOST_ASSERT_MSG_OSTREAM
88
+ # define BOOST_ASSERT_MSG_OSTREAM std::cerr
89
+ #endif
90
+
91
+ namespace boost
92
+ {
93
+ namespace assertion
94
+ {
95
+ namespace detail
96
+ {
97
+ inline void assertion_failed_msg(char const * expr, char const * msg, char const * function,
98
+ char const * file, long line)
99
+ {
100
+ BOOST_ASSERT_MSG_OSTREAM
101
+ << "***** Internal Program Error - assertion (" << expr << ") failed in "
102
+ << function << ":\n"
103
+ << file << '(' << line << "): " << msg << std::endl;
104
+ std::abort();
105
+ }
106
+ } // detail
107
+ } // assertion
108
+ } // detail
109
+ #endif
110
+
111
+ #define BOOST_ASSERT_MSG(expr, msg) ((expr) \
112
+ ? ((void)0) \
113
+ : ::boost::assertion::detail::assertion_failed_msg(#expr, msg, \
114
+ BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
115
+ #endif
116
+
117
+ //--------------------------------------------------------------------------------------//
118
+ // BOOST_VERIFY //
119
+ //--------------------------------------------------------------------------------------//
120
+
40
121
  #undef BOOST_VERIFY
41
122
 
42
123
  #if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
@@ -1680,7 +1680,7 @@ template< class R, class T > struct add_cref< R (T::*) (), 1 >
1680
1680
  typedef void type;
1681
1681
  };
1682
1682
 
1683
- #if !( defined(__IBMCPP__) && BOOST_WORKAROUND( __IBMCPP__, BOOST_TESTED_AT(600) ) )
1683
+ #if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION
1684
1684
 
1685
1685
  template< class R, class T > struct add_cref< R (T::*) () const, 1 >
1686
1686
  {
@@ -8,7 +8,7 @@ namespace boost
8
8
  {
9
9
  namespace concepts {}
10
10
 
11
- # if !defined(BOOST_NO_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD)
11
+ # if defined(BOOST_HAS_CONCEPTS) && !defined(BOOST_CONCEPT_NO_BACKWARD_KEYWORD)
12
12
  namespace concept = concepts;
13
13
  # endif
14
14
  } // namespace boost::concept
@@ -1,5 +1,7 @@
1
1
  //
2
2
  // (C) Copyright Jeremy Siek 2000.
3
+ // Copyright 2002 The Trustees of Indiana University.
4
+ //
3
5
  // Distributed under the Boost Software License, Version 1.0. (See
4
6
  // accompanying file LICENSE_1_0.txt or copy at
5
7
  // http://www.boost.org/LICENSE_1_0.txt)
@@ -36,14 +38,14 @@ namespace boost
36
38
  //
37
39
  // Backward compatibility
38
40
  //
39
-
41
+
40
42
  template <class Model>
41
43
  inline void function_requires(Model* = 0)
42
44
  {
43
45
  BOOST_CONCEPT_ASSERT((Model));
44
- }
46
+ }
45
47
  template <class T> inline void ignore_unused_variable_warning(T const&) {}
46
-
48
+
47
49
  # define BOOST_CLASS_REQUIRE(type_var, ns, concept) \
48
50
  BOOST_CONCEPT_ASSERT((ns::concept<type_var>))
49
51
 
@@ -56,20 +58,21 @@ namespace boost
56
58
  # define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \
57
59
  BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3,tv4>))
58
60
 
59
-
61
+
60
62
  //
61
63
  // Begin concept definitions
62
64
  //
63
65
  BOOST_concept(Integer, (T))
64
66
  {
65
67
  BOOST_CONCEPT_USAGE(Integer)
66
- {
68
+ {
67
69
  x.error_type_must_be_an_integer_type();
68
70
  }
69
71
  private:
70
72
  T x;
71
73
  };
72
74
 
75
+ template <> struct Integer<char> {};
73
76
  template <> struct Integer<signed char> {};
74
77
  template <> struct Integer<unsigned char> {};
75
78
  template <> struct Integer<short> {};
@@ -87,7 +90,7 @@ namespace boost
87
90
  # endif
88
91
 
89
92
  BOOST_concept(SignedInteger,(T)) {
90
- BOOST_CONCEPT_USAGE(SignedInteger) {
93
+ BOOST_CONCEPT_USAGE(SignedInteger) {
91
94
  x.error_type_must_be_a_signed_integer_type();
92
95
  }
93
96
  private:
@@ -101,16 +104,16 @@ namespace boost
101
104
  template <> struct SignedInteger< ::boost::long_long_type> {};
102
105
  # elif defined(BOOST_HAS_MS_INT64)
103
106
  template <> struct SignedInteger<__int64> {};
104
- # endif
107
+ # endif
105
108
 
106
109
  BOOST_concept(UnsignedInteger,(T)) {
107
- BOOST_CONCEPT_USAGE(UnsignedInteger) {
110
+ BOOST_CONCEPT_USAGE(UnsignedInteger) {
108
111
  x.error_type_must_be_an_unsigned_integer_type();
109
112
  }
110
113
  private:
111
114
  T x;
112
115
  };
113
-
116
+
114
117
  template <> struct UnsignedInteger<unsigned char> {};
115
118
  template <> struct UnsignedInteger<unsigned short> {};
116
119
  template <> struct UnsignedInteger<unsigned int> {};
@@ -136,23 +139,24 @@ namespace boost
136
139
  {
137
140
  BOOST_CONCEPT_USAGE(Assignable) {
138
141
  #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
139
- a = a; // require assignment operator
142
+ a = b; // require assignment operator
140
143
  #endif
141
- const_constraints(a);
144
+ const_constraints(b);
142
145
  }
143
146
  private:
144
- void const_constraints(const TT& b) {
147
+ void const_constraints(const TT& x) {
145
148
  #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
146
- a = b; // const required for argument to assignment
149
+ a = x; // const required for argument to assignment
147
150
  #else
148
- ignore_unused_variable_warning(b);
151
+ ignore_unused_variable_warning(x);
149
152
  #endif
150
153
  }
151
154
  private:
152
155
  TT a;
156
+ TT b;
153
157
  };
154
158
 
155
-
159
+
156
160
  BOOST_concept(CopyConstructible,(TT))
157
161
  {
158
162
  BOOST_CONCEPT_USAGE(CopyConstructible) {
@@ -180,22 +184,23 @@ namespace boost
180
184
  BOOST_concept(SGIAssignable,(TT))
181
185
  {
182
186
  BOOST_CONCEPT_USAGE(SGIAssignable) {
183
- TT b(a);
187
+ TT c(a);
184
188
  #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
185
- a = a; // require assignment operator
189
+ a = b; // require assignment operator
186
190
  #endif
187
- const_constraints(a);
188
- ignore_unused_variable_warning(b);
191
+ const_constraints(b);
192
+ ignore_unused_variable_warning(c);
189
193
  }
190
194
  private:
191
- void const_constraints(const TT& b) {
192
- TT c(b);
195
+ void const_constraints(const TT& x) {
196
+ TT c(x);
193
197
  #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
194
- a = b; // const required for argument to assignment
198
+ a = x; // const required for argument to assignment
195
199
  #endif
196
200
  ignore_unused_variable_warning(c);
197
201
  }
198
202
  TT a;
203
+ TT b;
199
204
  };
200
205
  #if (defined _MSC_VER)
201
206
  # pragma warning( pop )
@@ -297,7 +302,7 @@ namespace boost
297
302
  BOOST_concept(Generator,(Func)(Return))
298
303
  {
299
304
  BOOST_CONCEPT_USAGE(Generator) { test(is_void<Return>()); }
300
-
305
+
301
306
  private:
302
307
  void test(boost::mpl::false_)
303
308
  {
@@ -310,22 +315,22 @@ namespace boost
310
315
  {
311
316
  f();
312
317
  }
313
-
318
+
314
319
  Func f;
315
320
  };
316
321
 
317
322
  BOOST_concept(UnaryFunction,(Func)(Return)(Arg))
318
323
  {
319
324
  BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void<Return>()); }
320
-
325
+
321
326
  private:
322
327
  void test(boost::mpl::false_)
323
328
  {
324
329
  f(arg); // "priming the pump" this way keeps msvc6 happy (ICE)
325
330
  Return r = f(arg);
326
- ignore_unused_variable_warning(r);
331
+ ignore_unused_variable_warning(r);
327
332
  }
328
-
333
+
329
334
  void test(boost::mpl::true_)
330
335
  {
331
336
  f(arg);
@@ -354,12 +359,21 @@ namespace boost
354
359
  Return r = f(first, second); // require operator()
355
360
  (void)r;
356
361
  }
357
-
362
+
358
363
  void test(boost::mpl::true_)
359
364
  {
360
365
  f(first,second);
361
366
  }
362
-
367
+
368
+ #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
369
+ && BOOST_WORKAROUND(__GNUC__, > 3)))
370
+ // Declare a dummy constructor to make gcc happy.
371
+ // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
372
+ // (warning: non-static reference "const double& boost::BinaryFunction<YourClassHere>::arg"
373
+ // in class without a constructor [-Wuninitialized])
374
+ BinaryFunction();
375
+ #endif
376
+
363
377
  Func f;
364
378
  First first;
365
379
  Second second;
@@ -371,6 +385,15 @@ namespace boost
371
385
  require_boolean_expr(f(arg)); // require operator() returning bool
372
386
  }
373
387
  private:
388
+ #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
389
+ && BOOST_WORKAROUND(__GNUC__, > 3)))
390
+ // Declare a dummy constructor to make gcc happy.
391
+ // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
392
+ // (warning: non-static reference "const double& boost::UnaryPredicate<YourClassHere>::arg"
393
+ // in class without a constructor [-Wuninitialized])
394
+ UnaryPredicate();
395
+ #endif
396
+
374
397
  Func f;
375
398
  Arg arg;
376
399
  };
@@ -381,6 +404,14 @@ namespace boost
381
404
  require_boolean_expr(f(a, b)); // require operator() returning bool
382
405
  }
383
406
  private:
407
+ #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
408
+ && BOOST_WORKAROUND(__GNUC__, > 3)))
409
+ // Declare a dummy constructor to make gcc happy.
410
+ // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
411
+ // (warning: non-static reference "const double& boost::BinaryPredicate<YourClassHere>::arg"
412
+ // in class without a constructor [-Wuninitialized])
413
+ BinaryPredicate();
414
+ #endif
384
415
  Func f;
385
416
  First a;
386
417
  Second b;
@@ -390,7 +421,7 @@ namespace boost
390
421
  BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second))
391
422
  : BinaryPredicate<Func, First, Second>
392
423
  {
393
- BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {
424
+ BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {
394
425
  const_constraints(f);
395
426
  }
396
427
  private:
@@ -398,6 +429,15 @@ namespace boost
398
429
  // operator() must be a const member function
399
430
  require_boolean_expr(fun(a, b));
400
431
  }
432
+ #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \
433
+ && BOOST_WORKAROUND(__GNUC__, > 3)))
434
+ // Declare a dummy constructor to make gcc happy.
435
+ // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type.
436
+ // (warning: non-static reference "const double& boost::Const_BinaryPredicate<YourClassHere>::arg"
437
+ // in class without a constructor [-Wuninitialized])
438
+ Const_BinaryPredicate();
439
+ #endif
440
+
401
441
  Func f;
402
442
  First a;
403
443
  Second b;
@@ -407,7 +447,7 @@ namespace boost
407
447
  : Generator<Func, typename Func::result_type>
408
448
  {
409
449
  typedef typename Func::result_type result_type;
410
-
450
+
411
451
  BOOST_CONCEPT_USAGE(AdaptableGenerator)
412
452
  {
413
453
  BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
@@ -438,7 +478,7 @@ namespace boost
438
478
  typedef typename Func::first_argument_type first_argument_type;
439
479
  typedef typename Func::second_argument_type second_argument_type;
440
480
  typedef typename Func::result_type result_type;
441
-
481
+
442
482
  ~AdaptableBinaryFunction()
443
483
  {
444
484
  BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
@@ -476,7 +516,7 @@ namespace boost
476
516
  {
477
517
  BOOST_CONCEPT_ASSERT((SignedInteger<difference_type>));
478
518
  BOOST_CONCEPT_ASSERT((Convertible<iterator_category, std::input_iterator_tag>));
479
-
519
+
480
520
  TT j(i);
481
521
  (void)*i; // require dereference operator
482
522
  ++j; // require preincrement operator
@@ -490,7 +530,7 @@ namespace boost
490
530
  : Assignable<TT>
491
531
  {
492
532
  BOOST_CONCEPT_USAGE(OutputIterator) {
493
-
533
+
494
534
  ++i; // require preincrement operator
495
535
  i++; // require postincrement operator
496
536
  *i++ = t; // require postincrement and assignment
@@ -509,11 +549,11 @@ namespace boost
509
549
  BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category
510
550
  , std::forward_iterator_tag
511
551
  >));
512
-
552
+
513
553
  typename InputIterator<TT>::reference r = *i;
514
554
  ignore_unused_variable_warning(r);
515
555
  }
516
-
556
+
517
557
  private:
518
558
  TT i;
519
559
  };
@@ -575,7 +615,7 @@ namespace boost
575
615
  n = i - j; // require difference operator
576
616
  (void)i[n]; // require element access operator
577
617
  }
578
-
618
+
579
619
  private:
580
620
  TT a, b;
581
621
  TT i, j;
@@ -613,7 +653,7 @@ namespace boost
613
653
  BOOST_CONCEPT_ASSERT((InputIterator<const_iterator>));
614
654
  const_constraints(c);
615
655
  }
616
-
656
+
617
657
  private:
618
658
  void const_constraints(const C& cc) {
619
659
  i = cc.begin();
@@ -634,19 +674,19 @@ namespace boost
634
674
  typedef typename C::reference reference;
635
675
  typedef typename C::iterator iterator;
636
676
  typedef typename C::pointer pointer;
637
-
677
+
638
678
  BOOST_CONCEPT_USAGE(Mutable_Container)
639
679
  {
640
680
  BOOST_CONCEPT_ASSERT((
641
681
  Assignable<typename Mutable_Container::value_type>));
642
-
682
+
643
683
  BOOST_CONCEPT_ASSERT((InputIterator<iterator>));
644
-
684
+
645
685
  i = c.begin();
646
686
  i = c.end();
647
687
  c.swap(c2);
648
688
  }
649
-
689
+
650
690
  private:
651
691
  iterator i;
652
692
  C c, c2;
@@ -662,7 +702,7 @@ namespace boost
662
702
  typename ForwardContainer::const_iterator
663
703
  >));
664
704
  }
665
- };
705
+ };
666
706
 
667
707
  BOOST_concept(Mutable_ForwardContainer,(C))
668
708
  : ForwardContainer<C>
@@ -675,7 +715,7 @@ namespace boost
675
715
  typename Mutable_ForwardContainer::iterator
676
716
  >));
677
717
  }
678
- };
718
+ };
679
719
 
680
720
  BOOST_concept(ReversibleContainer,(C))
681
721
  : ForwardContainer<C>
@@ -689,9 +729,9 @@ namespace boost
689
729
  BOOST_CONCEPT_ASSERT((
690
730
  BidirectionalIterator<
691
731
  typename ReversibleContainer::const_iterator>));
692
-
732
+
693
733
  BOOST_CONCEPT_ASSERT((BidirectionalIterator<const_reverse_iterator>));
694
-
734
+
695
735
  const_constraints(c);
696
736
  }
697
737
  private:
@@ -708,17 +748,17 @@ namespace boost
708
748
  , ReversibleContainer<C>
709
749
  {
710
750
  typedef typename C::reverse_iterator reverse_iterator;
711
-
751
+
712
752
  BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer)
713
753
  {
714
754
  typedef typename Mutable_ForwardContainer<C>::iterator iterator;
715
755
  BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<iterator>));
716
756
  BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<reverse_iterator>));
717
-
757
+
718
758
  reverse_iterator i = c.rbegin();
719
759
  i = c.rend();
720
760
  }
721
- private:
761
+ private:
722
762
  C c;
723
763
  };
724
764
 
@@ -734,7 +774,7 @@ namespace boost
734
774
  RandomAccessIterator<
735
775
  typename RandomAccessContainer::const_iterator
736
776
  >));
737
-
777
+
738
778
  const_constraints(c);
739
779
  }
740
780
  private:
@@ -743,7 +783,7 @@ namespace boost
743
783
  const_reference r = cc[n];
744
784
  ignore_unused_variable_warning(r);
745
785
  }
746
-
786
+
747
787
  C c;
748
788
  size_type n;
749
789
  };
@@ -759,11 +799,11 @@ namespace boost
759
799
  {
760
800
  BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::iterator>));
761
801
  BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::reverse_iterator>));
762
-
802
+
763
803
  typename self::reference r = c[i];
764
804
  ignore_unused_variable_warning(r);
765
805
  }
766
-
806
+
767
807
  private:
768
808
  typename Mutable_ReversibleContainer<C>::size_type i;
769
809
  C c;
@@ -779,7 +819,7 @@ namespace boost
779
819
  {
780
820
  BOOST_CONCEPT_USAGE(Sequence)
781
821
  {
782
- S
822
+ S
783
823
  c(n),
784
824
  c2(n, t),
785
825
  c3(first, last);
@@ -804,7 +844,7 @@ namespace boost
804
844
  typename Sequence::const_reference r = c.front();
805
845
  ignore_unused_variable_warning(r);
806
846
  }
807
-
847
+
808
848
  typename S::value_type t;
809
849
  typename S::size_type n;
810
850
  typename S::value_type* first, *last;
@@ -863,11 +903,11 @@ namespace boost
863
903
  c.erase(r.first, r.second);
864
904
  const_constraints(c);
865
905
  BOOST_CONCEPT_ASSERT((BinaryPredicate<key_compare,key_type,key_type>));
866
-
906
+
867
907
  typedef typename AssociativeContainer::value_type value_type_;
868
908
  BOOST_CONCEPT_ASSERT((BinaryPredicate<value_compare,value_type_,value_type_>));
869
909
  }
870
-
910
+
871
911
  // Redundant with the base concept, but it helps below.
872
912
  typedef typename C::const_iterator const_iterator;
873
913
  private:
@@ -893,7 +933,7 @@ namespace boost
893
933
  BOOST_CONCEPT_USAGE(UniqueAssociativeContainer)
894
934
  {
895
935
  C c(first, last);
896
-
936
+
897
937
  pos_flag = c.insert(t);
898
938
  c.insert(first, last);
899
939
 
@@ -911,7 +951,7 @@ namespace boost
911
951
  BOOST_CONCEPT_USAGE(MultipleAssociativeContainer)
912
952
  {
913
953
  C c(first, last);
914
-
954
+
915
955
  pos = c.insert(t);
916
956
  c.insert(first, last);
917
957
 
@@ -954,7 +994,7 @@ namespace boost
954
994
  {
955
995
  BOOST_CONCEPT_USAGE(SortedAssociativeContainer)
956
996
  {
957
- C
997
+ C
958
998
  c(kc),
959
999
  c2(first, last),
960
1000
  c3(first, last, kc);
@@ -962,15 +1002,15 @@ namespace boost
962
1002
  p = c.upper_bound(k);
963
1003
  p = c.lower_bound(k);
964
1004
  r = c.equal_range(k);
965
-
1005
+
966
1006
  c.insert(p, t);
967
-
1007
+
968
1008
  ignore_unused_variable_warning(c);
969
1009
  ignore_unused_variable_warning(c2);
970
1010
  ignore_unused_variable_warning(c3);
971
1011
  const_constraints(c);
972
1012
  }
973
-
1013
+
974
1014
  void const_constraints(const C& c)
975
1015
  {
976
1016
  kc = c.key_comp();
@@ -980,7 +1020,7 @@ namespace boost
980
1020
  cp = c.lower_bound(k);
981
1021
  cr = c.equal_range(k);
982
1022
  }
983
-
1023
+
984
1024
  private:
985
1025
  typename C::key_compare kc;
986
1026
  typename C::value_compare vc;
@@ -999,6 +1039,42 @@ namespace boost
999
1039
 
1000
1040
  // HashedAssociativeContainer
1001
1041
 
1042
+ BOOST_concept(Collection,(C))
1043
+ {
1044
+ BOOST_CONCEPT_USAGE(Collection)
1045
+ {
1046
+ boost::function_requires<boost::InputIteratorConcept<iterator> >();
1047
+ boost::function_requires<boost::InputIteratorConcept<const_iterator> >();
1048
+ boost::function_requires<boost::CopyConstructibleConcept<value_type> >();
1049
+ const_constraints(c);
1050
+ i = c.begin();
1051
+ i = c.end();
1052
+ c.swap(c);
1053
+ }
1054
+
1055
+ void const_constraints(const C& c) {
1056
+ ci = c.begin();
1057
+ ci = c.end();
1058
+ n = c.size();
1059
+ b = c.empty();
1060
+ }
1061
+
1062
+ private:
1063
+ typedef typename C::value_type value_type;
1064
+ typedef typename C::iterator iterator;
1065
+ typedef typename C::const_iterator const_iterator;
1066
+ typedef typename C::reference reference;
1067
+ typedef typename C::const_reference const_reference;
1068
+ // typedef typename C::pointer pointer;
1069
+ typedef typename C::difference_type difference_type;
1070
+ typedef typename C::size_type size_type;
1071
+
1072
+ C c;
1073
+ bool b;
1074
+ iterator i;
1075
+ const_iterator ci;
1076
+ size_type n;
1077
+ };
1002
1078
  } // namespace boost
1003
1079
 
1004
1080
  # include <boost/concept/detail/concept_undef.hpp>