passenger-jmazzi 2.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (912) hide show
  1. data/INSTALL +6 -0
  2. data/LICENSE +19 -0
  3. data/NEWS +270 -0
  4. data/README +45 -0
  5. data/Rakefile +918 -0
  6. data/benchmark/ApplicationPool.cpp +52 -0
  7. data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
  8. data/benchmark/dispatcher.rb +42 -0
  9. data/benchmark/overhead_of_password_checking.rb +81 -0
  10. data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
  11. data/benchmark/unix_sockets_vs_pipes.rb +83 -0
  12. data/bin/passenger-config +46 -0
  13. data/bin/passenger-install-apache2-module +224 -0
  14. data/bin/passenger-install-nginx-module +474 -0
  15. data/bin/passenger-make-enterprisey +83 -0
  16. data/bin/passenger-memory-stats +301 -0
  17. data/bin/passenger-spawn-server +68 -0
  18. data/bin/passenger-status +125 -0
  19. data/bin/passenger-stress-test +344 -0
  20. data/debian/compat +1 -0
  21. data/debian/control +21 -0
  22. data/debian/postinst +24 -0
  23. data/debian/prerm +2 -0
  24. data/doc/ApplicationPool algorithm.txt +402 -0
  25. data/doc/Architectural overview.txt +334 -0
  26. data/doc/Doxyfile +241 -0
  27. data/doc/Security of user switching support.txt +197 -0
  28. data/doc/Users guide Apache.txt +1848 -0
  29. data/doc/Users guide Nginx.txt +769 -0
  30. data/doc/definitions.h +5 -0
  31. data/doc/images/by_sa.png +0 -0
  32. data/doc/images/conservative_spawning.png +0 -0
  33. data/doc/images/conservative_spawning.svg +248 -0
  34. data/doc/images/icons/README +5 -0
  35. data/doc/images/icons/callouts/1.png +0 -0
  36. data/doc/images/icons/callouts/10.png +0 -0
  37. data/doc/images/icons/callouts/11.png +0 -0
  38. data/doc/images/icons/callouts/12.png +0 -0
  39. data/doc/images/icons/callouts/13.png +0 -0
  40. data/doc/images/icons/callouts/14.png +0 -0
  41. data/doc/images/icons/callouts/15.png +0 -0
  42. data/doc/images/icons/callouts/2.png +0 -0
  43. data/doc/images/icons/callouts/3.png +0 -0
  44. data/doc/images/icons/callouts/4.png +0 -0
  45. data/doc/images/icons/callouts/5.png +0 -0
  46. data/doc/images/icons/callouts/6.png +0 -0
  47. data/doc/images/icons/callouts/7.png +0 -0
  48. data/doc/images/icons/callouts/8.png +0 -0
  49. data/doc/images/icons/callouts/9.png +0 -0
  50. data/doc/images/icons/caution.png +0 -0
  51. data/doc/images/icons/example.png +0 -0
  52. data/doc/images/icons/home.png +0 -0
  53. data/doc/images/icons/important.png +0 -0
  54. data/doc/images/icons/next.png +0 -0
  55. data/doc/images/icons/note.png +0 -0
  56. data/doc/images/icons/prev.png +0 -0
  57. data/doc/images/icons/tip.png +0 -0
  58. data/doc/images/icons/up.png +0 -0
  59. data/doc/images/icons/warning.png +0 -0
  60. data/doc/images/passenger_architecture.png +0 -0
  61. data/doc/images/passenger_architecture.svg +401 -0
  62. data/doc/images/phusion_banner.png +0 -0
  63. data/doc/images/smart-lv2.png +0 -0
  64. data/doc/images/smart-lv2.svg +320 -0
  65. data/doc/images/spawn_server_architecture.png +0 -0
  66. data/doc/images/spawn_server_architecture.svg +655 -0
  67. data/doc/images/typical_isolated_web_application.png +0 -0
  68. data/doc/images/typical_isolated_web_application.svg +213 -0
  69. data/doc/template/horo.rb +613 -0
  70. data/doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt +144 -0
  71. data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
  72. data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
  73. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +304 -0
  74. data/doc/users_guide_snippets/global_queueing_explained.txt +78 -0
  75. data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
  76. data/doc/users_guide_snippets/rails_spawn_method.txt +48 -0
  77. data/doc/users_guide_snippets/tips.txt +173 -0
  78. data/ext/apache2/Bucket.cpp +190 -0
  79. data/ext/apache2/Bucket.h +87 -0
  80. data/ext/apache2/Configuration.cpp +798 -0
  81. data/ext/apache2/Configuration.h +405 -0
  82. data/ext/apache2/DirectoryMapper.h +296 -0
  83. data/ext/apache2/Hooks.cpp +1617 -0
  84. data/ext/apache2/Hooks.h +45 -0
  85. data/ext/apache2/LICENSE-CNRI.TXT +79 -0
  86. data/ext/apache2/mod_passenger.c +38 -0
  87. data/ext/boost/LICENSE.TXT +23 -0
  88. data/ext/boost/VERSION.TXT +1 -0
  89. data/ext/boost/algorithm/string/case_conv.hpp +176 -0
  90. data/ext/boost/algorithm/string/compare.hpp +199 -0
  91. data/ext/boost/algorithm/string/concept.hpp +83 -0
  92. data/ext/boost/algorithm/string/config.hpp +28 -0
  93. data/ext/boost/algorithm/string/constants.hpp +36 -0
  94. data/ext/boost/algorithm/string/detail/case_conv.hpp +112 -0
  95. data/ext/boost/algorithm/string/detail/find_format.hpp +193 -0
  96. data/ext/boost/algorithm/string/detail/find_format_all.hpp +263 -0
  97. data/ext/boost/algorithm/string/detail/find_format_store.hpp +71 -0
  98. data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
  99. data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
  100. data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
  101. data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
  102. data/ext/boost/algorithm/string/detail/util.hpp +106 -0
  103. data/ext/boost/algorithm/string/erase.hpp +844 -0
  104. data/ext/boost/algorithm/string/find_format.hpp +269 -0
  105. data/ext/boost/algorithm/string/finder.hpp +270 -0
  106. data/ext/boost/algorithm/string/formatter.hpp +103 -0
  107. data/ext/boost/algorithm/string/replace.hpp +928 -0
  108. data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
  109. data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
  110. data/ext/boost/assert.hpp +50 -0
  111. data/ext/boost/bind.hpp +1689 -0
  112. data/ext/boost/bind/arg.hpp +62 -0
  113. data/ext/boost/bind/bind_cc.hpp +117 -0
  114. data/ext/boost/bind/bind_mf_cc.hpp +227 -0
  115. data/ext/boost/bind/bind_template.hpp +345 -0
  116. data/ext/boost/bind/mem_fn_cc.hpp +103 -0
  117. data/ext/boost/bind/mem_fn_template.hpp +1020 -0
  118. data/ext/boost/bind/placeholders.hpp +68 -0
  119. data/ext/boost/bind/storage.hpp +475 -0
  120. data/ext/boost/call_traits.hpp +24 -0
  121. data/ext/boost/checked_delete.hpp +69 -0
  122. data/ext/boost/concept/assert.hpp +46 -0
  123. data/ext/boost/concept/detail/concept_def.hpp +51 -0
  124. data/ext/boost/concept/detail/concept_undef.hpp +5 -0
  125. data/ext/boost/concept/detail/general.hpp +66 -0
  126. data/ext/boost/concept/detail/has_constraints.hpp +48 -0
  127. data/ext/boost/concept/usage.hpp +43 -0
  128. data/ext/boost/concept_check.hpp +988 -0
  129. data/ext/boost/config.hpp +70 -0
  130. data/ext/boost/config/abi/borland_prefix.hpp +27 -0
  131. data/ext/boost/config/abi/borland_suffix.hpp +12 -0
  132. data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
  133. data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
  134. data/ext/boost/config/abi_prefix.hpp +25 -0
  135. data/ext/boost/config/abi_suffix.hpp +26 -0
  136. data/ext/boost/config/auto_link.hpp +368 -0
  137. data/ext/boost/config/compiler/borland.hpp +209 -0
  138. data/ext/boost/config/compiler/comeau.hpp +59 -0
  139. data/ext/boost/config/compiler/common_edg.hpp +62 -0
  140. data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
  141. data/ext/boost/config/compiler/digitalmars.hpp +67 -0
  142. data/ext/boost/config/compiler/gcc.hpp +149 -0
  143. data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
  144. data/ext/boost/config/compiler/greenhills.hpp +28 -0
  145. data/ext/boost/config/compiler/hp_acc.hpp +95 -0
  146. data/ext/boost/config/compiler/intel.hpp +162 -0
  147. data/ext/boost/config/compiler/kai.hpp +35 -0
  148. data/ext/boost/config/compiler/metrowerks.hpp +111 -0
  149. data/ext/boost/config/compiler/mpw.hpp +51 -0
  150. data/ext/boost/config/compiler/pgi.hpp +25 -0
  151. data/ext/boost/config/compiler/sgi_mipspro.hpp +28 -0
  152. data/ext/boost/config/compiler/sunpro_cc.hpp +98 -0
  153. data/ext/boost/config/compiler/vacpp.hpp +60 -0
  154. data/ext/boost/config/compiler/visualc.hpp +191 -0
  155. data/ext/boost/config/no_tr1/complex.hpp +28 -0
  156. data/ext/boost/config/no_tr1/functional.hpp +28 -0
  157. data/ext/boost/config/no_tr1/memory.hpp +28 -0
  158. data/ext/boost/config/no_tr1/utility.hpp +28 -0
  159. data/ext/boost/config/platform/aix.hpp +33 -0
  160. data/ext/boost/config/platform/amigaos.hpp +15 -0
  161. data/ext/boost/config/platform/beos.hpp +26 -0
  162. data/ext/boost/config/platform/bsd.hpp +73 -0
  163. data/ext/boost/config/platform/cygwin.hpp +51 -0
  164. data/ext/boost/config/platform/hpux.hpp +84 -0
  165. data/ext/boost/config/platform/irix.hpp +31 -0
  166. data/ext/boost/config/platform/linux.hpp +98 -0
  167. data/ext/boost/config/platform/macos.hpp +78 -0
  168. data/ext/boost/config/platform/qnxnto.hpp +31 -0
  169. data/ext/boost/config/platform/solaris.hpp +21 -0
  170. data/ext/boost/config/platform/win32.hpp +58 -0
  171. data/ext/boost/config/posix_features.hpp +95 -0
  172. data/ext/boost/config/requires_threads.hpp +92 -0
  173. data/ext/boost/config/select_compiler_config.hpp +115 -0
  174. data/ext/boost/config/select_platform_config.hpp +90 -0
  175. data/ext/boost/config/select_stdlib_config.hpp +68 -0
  176. data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
  177. data/ext/boost/config/stdlib/libcomo.hpp +46 -0
  178. data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
  179. data/ext/boost/config/stdlib/modena.hpp +30 -0
  180. data/ext/boost/config/stdlib/msl.hpp +59 -0
  181. data/ext/boost/config/stdlib/roguewave.hpp +153 -0
  182. data/ext/boost/config/stdlib/sgi.hpp +111 -0
  183. data/ext/boost/config/stdlib/stlport.hpp +201 -0
  184. data/ext/boost/config/stdlib/vacpp.hpp +18 -0
  185. data/ext/boost/config/suffix.hpp +566 -0
  186. data/ext/boost/config/user.hpp +124 -0
  187. data/ext/boost/cstdint.hpp +449 -0
  188. data/ext/boost/current_function.hpp +67 -0
  189. data/ext/boost/date_time/adjust_functors.hpp +178 -0
  190. data/ext/boost/date_time/c_time.hpp +91 -0
  191. data/ext/boost/date_time/compiler_config.hpp +149 -0
  192. data/ext/boost/date_time/constrained_value.hpp +98 -0
  193. data/ext/boost/date_time/date.hpp +197 -0
  194. data/ext/boost/date_time/date_clock_device.hpp +77 -0
  195. data/ext/boost/date_time/date_defs.hpp +26 -0
  196. data/ext/boost/date_time/date_duration.hpp +147 -0
  197. data/ext/boost/date_time/date_duration_types.hpp +269 -0
  198. data/ext/boost/date_time/date_facet.hpp +775 -0
  199. data/ext/boost/date_time/date_format_simple.hpp +159 -0
  200. data/ext/boost/date_time/date_formatting.hpp +127 -0
  201. data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
  202. data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
  203. data/ext/boost/date_time/date_generator_formatter.hpp +263 -0
  204. data/ext/boost/date_time/date_generator_parser.hpp +329 -0
  205. data/ext/boost/date_time/date_generators.hpp +509 -0
  206. data/ext/boost/date_time/date_iterator.hpp +101 -0
  207. data/ext/boost/date_time/date_names_put.hpp +320 -0
  208. data/ext/boost/date_time/date_parsing.hpp +299 -0
  209. data/ext/boost/date_time/dst_rules.hpp +391 -0
  210. data/ext/boost/date_time/filetime_functions.hpp +78 -0
  211. data/ext/boost/date_time/format_date_parser.hpp +731 -0
  212. data/ext/boost/date_time/gregorian/conversion.hpp +73 -0
  213. data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
  214. data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
  215. data/ext/boost/date_time/gregorian/greg_calendar.hpp +47 -0
  216. data/ext/boost/date_time/gregorian/greg_date.hpp +135 -0
  217. data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
  218. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
  219. data/ext/boost/date_time/gregorian/greg_duration.hpp +38 -0
  220. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +34 -0
  221. data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
  222. data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
  223. data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
  224. data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
  225. data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
  226. data/ext/boost/date_time/gregorian/gregorian_io.hpp +777 -0
  227. data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
  228. data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
  229. data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
  230. data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
  231. data/ext/boost/date_time/int_adapter.hpp +507 -0
  232. data/ext/boost/date_time/iso_format.hpp +303 -0
  233. data/ext/boost/date_time/locale_config.hpp +31 -0
  234. data/ext/boost/date_time/microsec_time_clock.hpp +205 -0
  235. data/ext/boost/date_time/parse_format_base.hpp +29 -0
  236. data/ext/boost/date_time/period.hpp +377 -0
  237. data/ext/boost/date_time/period_formatter.hpp +196 -0
  238. data/ext/boost/date_time/period_parser.hpp +196 -0
  239. data/ext/boost/date_time/posix_time/conversion.hpp +93 -0
  240. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
  241. data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
  242. data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
  243. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
  244. data/ext/boost/date_time/posix_time/posix_time_io.hpp +246 -0
  245. data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
  246. data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
  247. data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
  248. data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
  249. data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
  250. data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
  251. data/ext/boost/date_time/special_defs.hpp +25 -0
  252. data/ext/boost/date_time/special_values_formatter.hpp +96 -0
  253. data/ext/boost/date_time/special_values_parser.hpp +159 -0
  254. data/ext/boost/date_time/string_convert.hpp +33 -0
  255. data/ext/boost/date_time/string_parse_tree.hpp +278 -0
  256. data/ext/boost/date_time/strings_from_facet.hpp +123 -0
  257. data/ext/boost/date_time/time.hpp +190 -0
  258. data/ext/boost/date_time/time_clock.hpp +83 -0
  259. data/ext/boost/date_time/time_defs.hpp +33 -0
  260. data/ext/boost/date_time/time_duration.hpp +281 -0
  261. data/ext/boost/date_time/time_facet.hpp +1263 -0
  262. data/ext/boost/date_time/time_formatting_streams.hpp +119 -0
  263. data/ext/boost/date_time/time_iterator.hpp +52 -0
  264. data/ext/boost/date_time/time_parsing.hpp +321 -0
  265. data/ext/boost/date_time/time_resolution_traits.hpp +140 -0
  266. data/ext/boost/date_time/time_system_counted.hpp +254 -0
  267. data/ext/boost/date_time/time_system_split.hpp +213 -0
  268. data/ext/boost/date_time/wrapping_int.hpp +163 -0
  269. data/ext/boost/date_time/year_month_day.hpp +45 -0
  270. data/ext/boost/detail/atomic_count.hpp +124 -0
  271. data/ext/boost/detail/atomic_count_gcc.hpp +68 -0
  272. data/ext/boost/detail/atomic_count_gcc_x86.hpp +84 -0
  273. data/ext/boost/detail/atomic_count_pthreads.hpp +96 -0
  274. data/ext/boost/detail/atomic_count_solaris.hpp +59 -0
  275. data/ext/boost/detail/atomic_count_sync.hpp +57 -0
  276. data/ext/boost/detail/atomic_count_win32.hpp +63 -0
  277. data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
  278. data/ext/boost/detail/call_traits.hpp +164 -0
  279. data/ext/boost/detail/endian.hpp +73 -0
  280. data/ext/boost/detail/indirect_traits.hpp +487 -0
  281. data/ext/boost/detail/iterator.hpp +494 -0
  282. data/ext/boost/detail/lcast_precision.hpp +184 -0
  283. data/ext/boost/detail/limits.hpp +449 -0
  284. data/ext/boost/detail/reference_content.hpp +141 -0
  285. data/ext/boost/detail/shared_count.hpp +375 -0
  286. data/ext/boost/detail/sp_counted_base.hpp +81 -0
  287. data/ext/boost/detail/sp_counted_base_acc_ia64.hpp +150 -0
  288. data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
  289. data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
  290. data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
  291. data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
  292. data/ext/boost/detail/sp_counted_base_gcc_sparc.hpp +166 -0
  293. data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
  294. data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
  295. data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
  296. data/ext/boost/detail/sp_counted_base_solaris.hpp +113 -0
  297. data/ext/boost/detail/sp_counted_base_sync.hpp +151 -0
  298. data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
  299. data/ext/boost/detail/sp_counted_impl.hpp +231 -0
  300. data/ext/boost/detail/sp_typeinfo.hpp +83 -0
  301. data/ext/boost/detail/workaround.hpp +202 -0
  302. data/ext/boost/enable_shared_from_this.hpp +73 -0
  303. data/ext/boost/function.hpp +66 -0
  304. data/ext/boost/function/detail/function_iterate.hpp +16 -0
  305. data/ext/boost/function/detail/maybe_include.hpp +267 -0
  306. data/ext/boost/function/detail/prologue.hpp +25 -0
  307. data/ext/boost/function/function_base.hpp +762 -0
  308. data/ext/boost/function/function_template.hpp +969 -0
  309. data/ext/boost/function_equal.hpp +28 -0
  310. data/ext/boost/get_pointer.hpp +29 -0
  311. data/ext/boost/implicit_cast.hpp +29 -0
  312. data/ext/boost/integer_traits.hpp +236 -0
  313. data/ext/boost/io/ios_state.hpp +431 -0
  314. data/ext/boost/io_fwd.hpp +67 -0
  315. data/ext/boost/is_placeholder.hpp +31 -0
  316. data/ext/boost/iterator.hpp +59 -0
  317. data/ext/boost/iterator/detail/config_def.hpp +135 -0
  318. data/ext/boost/iterator/detail/config_undef.hpp +25 -0
  319. data/ext/boost/iterator/detail/enable_if.hpp +86 -0
  320. data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
  321. data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
  322. data/ext/boost/iterator/interoperable.hpp +50 -0
  323. data/ext/boost/iterator/iterator_adaptor.hpp +366 -0
  324. data/ext/boost/iterator/iterator_categories.hpp +188 -0
  325. data/ext/boost/iterator/iterator_facade.hpp +879 -0
  326. data/ext/boost/iterator/iterator_traits.hpp +92 -0
  327. data/ext/boost/iterator/reverse_iterator.hpp +69 -0
  328. data/ext/boost/iterator/transform_iterator.hpp +188 -0
  329. data/ext/boost/lexical_cast.hpp +1205 -0
  330. data/ext/boost/limits.hpp +146 -0
  331. data/ext/boost/mem_fn.hpp +389 -0
  332. data/ext/boost/mpl/always.hpp +39 -0
  333. data/ext/boost/mpl/and.hpp +60 -0
  334. data/ext/boost/mpl/apply.hpp +229 -0
  335. data/ext/boost/mpl/apply_fwd.hpp +107 -0
  336. data/ext/boost/mpl/apply_wrap.hpp +203 -0
  337. data/ext/boost/mpl/arg.hpp +131 -0
  338. data/ext/boost/mpl/arg_fwd.hpp +28 -0
  339. data/ext/boost/mpl/assert.hpp +370 -0
  340. data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
  341. data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
  342. data/ext/boost/mpl/aux_/arity.hpp +39 -0
  343. data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
  344. data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
  345. data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
  346. data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
  347. data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
  348. data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
  349. data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
  350. data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
  351. data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
  352. data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
  353. data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
  354. data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
  355. data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
  356. data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
  357. data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
  358. data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
  359. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
  360. data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
  361. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
  362. data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
  363. data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
  364. data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
  365. data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
  366. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
  367. data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
  368. data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
  369. data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
  370. data/ext/boost/mpl/aux_/has_type.hpp +23 -0
  371. data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
  372. data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
  373. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
  374. data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
  375. data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
  376. data/ext/boost/mpl/aux_/na.hpp +95 -0
  377. data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
  378. data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
  379. data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
  380. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
  381. data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
  382. data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
  383. data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
  384. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
  385. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
  386. data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
  387. data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
  388. data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
  389. data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
  390. data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
  391. data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
  392. data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
  393. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
  394. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
  395. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
  396. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
  397. data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
  398. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
  399. data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
  400. data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
  401. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
  402. data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
  403. data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
  404. data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
  405. data/ext/boost/mpl/bind.hpp +551 -0
  406. data/ext/boost/mpl/bind_fwd.hpp +99 -0
  407. data/ext/boost/mpl/bool.hpp +39 -0
  408. data/ext/boost/mpl/bool_fwd.hpp +33 -0
  409. data/ext/boost/mpl/eval_if.hpp +71 -0
  410. data/ext/boost/mpl/has_xxx.hpp +272 -0
  411. data/ext/boost/mpl/identity.hpp +45 -0
  412. data/ext/boost/mpl/if.hpp +135 -0
  413. data/ext/boost/mpl/int.hpp +22 -0
  414. data/ext/boost/mpl/int_fwd.hpp +27 -0
  415. data/ext/boost/mpl/integral_c.hpp +51 -0
  416. data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
  417. data/ext/boost/mpl/integral_c_tag.hpp +26 -0
  418. data/ext/boost/mpl/lambda.hpp +29 -0
  419. data/ext/boost/mpl/lambda_fwd.hpp +57 -0
  420. data/ext/boost/mpl/limits/arity.hpp +21 -0
  421. data/ext/boost/mpl/logical.hpp +21 -0
  422. data/ext/boost/mpl/next.hpp +19 -0
  423. data/ext/boost/mpl/next_prior.hpp +49 -0
  424. data/ext/boost/mpl/not.hpp +51 -0
  425. data/ext/boost/mpl/or.hpp +61 -0
  426. data/ext/boost/mpl/placeholders.hpp +100 -0
  427. data/ext/boost/mpl/protect.hpp +55 -0
  428. data/ext/boost/mpl/quote.hpp +140 -0
  429. data/ext/boost/mpl/size_t.hpp +25 -0
  430. data/ext/boost/mpl/size_t_fwd.hpp +28 -0
  431. data/ext/boost/mpl/void.hpp +76 -0
  432. data/ext/boost/mpl/void_fwd.hpp +26 -0
  433. data/ext/boost/next_prior.hpp +51 -0
  434. data/ext/boost/non_type.hpp +27 -0
  435. data/ext/boost/noncopyable.hpp +36 -0
  436. data/ext/boost/none.hpp +28 -0
  437. data/ext/boost/none_t.hpp +24 -0
  438. data/ext/boost/operators.hpp +943 -0
  439. data/ext/boost/optional.hpp +18 -0
  440. data/ext/boost/optional/optional.hpp +922 -0
  441. data/ext/boost/optional/optional_fwd.hpp +22 -0
  442. data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
  443. data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
  444. data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
  445. data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
  446. data/ext/boost/preprocessor/array/data.hpp +28 -0
  447. data/ext/boost/preprocessor/array/elem.hpp +29 -0
  448. data/ext/boost/preprocessor/array/size.hpp +28 -0
  449. data/ext/boost/preprocessor/cat.hpp +35 -0
  450. data/ext/boost/preprocessor/comma_if.hpp +17 -0
  451. data/ext/boost/preprocessor/config/config.hpp +70 -0
  452. data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
  453. data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
  454. data/ext/boost/preprocessor/control/if.hpp +30 -0
  455. data/ext/boost/preprocessor/control/iif.hpp +34 -0
  456. data/ext/boost/preprocessor/control/while.hpp +312 -0
  457. data/ext/boost/preprocessor/debug/error.hpp +33 -0
  458. data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
  459. data/ext/boost/preprocessor/detail/check.hpp +48 -0
  460. data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
  461. data/ext/boost/preprocessor/empty.hpp +17 -0
  462. data/ext/boost/preprocessor/enum.hpp +17 -0
  463. data/ext/boost/preprocessor/enum_params.hpp +17 -0
  464. data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
  465. data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
  466. data/ext/boost/preprocessor/identity.hpp +17 -0
  467. data/ext/boost/preprocessor/inc.hpp +17 -0
  468. data/ext/boost/preprocessor/iterate.hpp +17 -0
  469. data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
  470. data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
  471. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
  472. data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
  473. data/ext/boost/preprocessor/list/adt.hpp +73 -0
  474. data/ext/boost/preprocessor/list/append.hpp +40 -0
  475. data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
  476. data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
  477. data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
  478. data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
  479. data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
  480. data/ext/boost/preprocessor/list/reverse.hpp +40 -0
  481. data/ext/boost/preprocessor/list/transform.hpp +49 -0
  482. data/ext/boost/preprocessor/logical/and.hpp +30 -0
  483. data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
  484. data/ext/boost/preprocessor/logical/bool.hpp +288 -0
  485. data/ext/boost/preprocessor/logical/compl.hpp +36 -0
  486. data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
  487. data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
  488. data/ext/boost/preprocessor/repeat.hpp +17 -0
  489. data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
  490. data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
  491. data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
  492. data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
  493. data/ext/boost/preprocessor/repetition/for.hpp +306 -0
  494. data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
  495. data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
  496. data/ext/boost/preprocessor/seq/elem.hpp +304 -0
  497. data/ext/boost/preprocessor/seq/enum.hpp +288 -0
  498. data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
  499. data/ext/boost/preprocessor/seq/seq.hpp +44 -0
  500. data/ext/boost/preprocessor/seq/size.hpp +548 -0
  501. data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
  502. data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
  503. data/ext/boost/preprocessor/slot/slot.hpp +32 -0
  504. data/ext/boost/preprocessor/stringize.hpp +33 -0
  505. data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
  506. data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
  507. data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
  508. data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
  509. data/ext/boost/range/as_literal.hpp +131 -0
  510. data/ext/boost/range/begin.hpp +132 -0
  511. data/ext/boost/range/config.hpp +54 -0
  512. data/ext/boost/range/const_iterator.hpp +64 -0
  513. data/ext/boost/range/detail/common.hpp +117 -0
  514. data/ext/boost/range/detail/implementation_help.hpp +99 -0
  515. data/ext/boost/range/detail/sfinae.hpp +77 -0
  516. data/ext/boost/range/detail/str_types.hpp +38 -0
  517. data/ext/boost/range/difference_type.hpp +29 -0
  518. data/ext/boost/range/distance.hpp +34 -0
  519. data/ext/boost/range/empty.hpp +34 -0
  520. data/ext/boost/range/end.hpp +131 -0
  521. data/ext/boost/range/functions.hpp +27 -0
  522. data/ext/boost/range/iterator.hpp +72 -0
  523. data/ext/boost/range/iterator_range.hpp +643 -0
  524. data/ext/boost/range/mutable_iterator.hpp +64 -0
  525. data/ext/boost/range/rbegin.hpp +65 -0
  526. data/ext/boost/range/rend.hpp +65 -0
  527. data/ext/boost/range/reverse_iterator.hpp +40 -0
  528. data/ext/boost/range/size.hpp +36 -0
  529. data/ext/boost/range/size_type.hpp +78 -0
  530. data/ext/boost/range/value_type.hpp +34 -0
  531. data/ext/boost/ref.hpp +178 -0
  532. data/ext/boost/shared_ptr.hpp +619 -0
  533. data/ext/boost/src/pthread/exceptions.cpp +146 -0
  534. data/ext/boost/src/pthread/once.cpp +51 -0
  535. data/ext/boost/src/pthread/thread.cpp +709 -0
  536. data/ext/boost/src/pthread/timeconv.inl +130 -0
  537. data/ext/boost/src/tss_null.cpp +34 -0
  538. data/ext/boost/src/win32/exceptions.cpp +124 -0
  539. data/ext/boost/src/win32/thread.cpp +629 -0
  540. data/ext/boost/src/win32/timeconv.inl +130 -0
  541. data/ext/boost/src/win32/tss_dll.cpp +72 -0
  542. data/ext/boost/src/win32/tss_pe.cpp +269 -0
  543. data/ext/boost/static_assert.hpp +122 -0
  544. data/ext/boost/thread.hpp +21 -0
  545. data/ext/boost/thread/condition.hpp +16 -0
  546. data/ext/boost/thread/condition_variable.hpp +21 -0
  547. data/ext/boost/thread/detail/config.hpp +94 -0
  548. data/ext/boost/thread/detail/move.hpp +33 -0
  549. data/ext/boost/thread/detail/platform.hpp +71 -0
  550. data/ext/boost/thread/exceptions.hpp +109 -0
  551. data/ext/boost/thread/locks.hpp +589 -0
  552. data/ext/boost/thread/mutex.hpp +21 -0
  553. data/ext/boost/thread/once.hpp +29 -0
  554. data/ext/boost/thread/pthread/condition_variable.hpp +184 -0
  555. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +66 -0
  556. data/ext/boost/thread/pthread/mutex.hpp +211 -0
  557. data/ext/boost/thread/pthread/once.hpp +85 -0
  558. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +50 -0
  559. data/ext/boost/thread/pthread/recursive_mutex.hpp +249 -0
  560. data/ext/boost/thread/pthread/thread.hpp +339 -0
  561. data/ext/boost/thread/pthread/thread_data.hpp +102 -0
  562. data/ext/boost/thread/pthread/timespec.hpp +28 -0
  563. data/ext/boost/thread/pthread/tss.hpp +103 -0
  564. data/ext/boost/thread/recursive_mutex.hpp +21 -0
  565. data/ext/boost/thread/thread.hpp +22 -0
  566. data/ext/boost/thread/thread_time.hpp +46 -0
  567. data/ext/boost/thread/tss.hpp +18 -0
  568. data/ext/boost/thread/xtime.hpp +88 -0
  569. data/ext/boost/throw_exception.hpp +46 -0
  570. data/ext/boost/token_functions.hpp +621 -0
  571. data/ext/boost/token_iterator.hpp +128 -0
  572. data/ext/boost/tokenizer.hpp +98 -0
  573. data/ext/boost/type.hpp +18 -0
  574. data/ext/boost/type_traits/add_const.hpp +47 -0
  575. data/ext/boost/type_traits/add_pointer.hpp +72 -0
  576. data/ext/boost/type_traits/add_reference.hpp +89 -0
  577. data/ext/boost/type_traits/alignment_of.hpp +100 -0
  578. data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
  579. data/ext/boost/type_traits/composite_traits.hpp +29 -0
  580. data/ext/boost/type_traits/config.hpp +76 -0
  581. data/ext/boost/type_traits/conversion_traits.hpp +17 -0
  582. data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
  583. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
  584. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
  585. data/ext/boost/type_traits/detail/false_result.hpp +28 -0
  586. data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
  587. data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
  588. data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
  589. data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
  590. data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
  591. data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
  592. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
  593. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
  594. data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
  595. data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
  596. data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
  597. data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
  598. data/ext/boost/type_traits/function_traits.hpp +236 -0
  599. data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
  600. data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
  601. data/ext/boost/type_traits/ice.hpp +20 -0
  602. data/ext/boost/type_traits/integral_constant.hpp +53 -0
  603. data/ext/boost/type_traits/intrinsics.hpp +153 -0
  604. data/ext/boost/type_traits/is_abstract.hpp +144 -0
  605. data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
  606. data/ext/boost/type_traits/is_array.hpp +90 -0
  607. data/ext/boost/type_traits/is_class.hpp +128 -0
  608. data/ext/boost/type_traits/is_const.hpp +142 -0
  609. data/ext/boost/type_traits/is_convertible.hpp +418 -0
  610. data/ext/boost/type_traits/is_enum.hpp +180 -0
  611. data/ext/boost/type_traits/is_float.hpp +27 -0
  612. data/ext/boost/type_traits/is_function.hpp +95 -0
  613. data/ext/boost/type_traits/is_integral.hpp +73 -0
  614. data/ext/boost/type_traits/is_member_function_pointer.hpp +134 -0
  615. data/ext/boost/type_traits/is_member_pointer.hpp +114 -0
  616. data/ext/boost/type_traits/is_pod.hpp +135 -0
  617. data/ext/boost/type_traits/is_pointer.hpp +160 -0
  618. data/ext/boost/type_traits/is_reference.hpp +116 -0
  619. data/ext/boost/type_traits/is_same.hpp +103 -0
  620. data/ext/boost/type_traits/is_scalar.hpp +55 -0
  621. data/ext/boost/type_traits/is_union.hpp +49 -0
  622. data/ext/boost/type_traits/is_void.hpp +33 -0
  623. data/ext/boost/type_traits/is_volatile.hpp +131 -0
  624. data/ext/boost/type_traits/remove_const.hpp +78 -0
  625. data/ext/boost/type_traits/remove_cv.hpp +61 -0
  626. data/ext/boost/type_traits/remove_pointer.hpp +43 -0
  627. data/ext/boost/type_traits/remove_reference.hpp +50 -0
  628. data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
  629. data/ext/boost/utility.hpp +19 -0
  630. data/ext/boost/utility/addressof.hpp +58 -0
  631. data/ext/boost/utility/base_from_member.hpp +87 -0
  632. data/ext/boost/utility/compare_pointees.hpp +68 -0
  633. data/ext/boost/utility/enable_if.hpp +119 -0
  634. data/ext/boost/visit_each.hpp +29 -0
  635. data/ext/boost/weak_ptr.hpp +188 -0
  636. data/ext/common/Application.h +511 -0
  637. data/ext/common/ApplicationPool.h +205 -0
  638. data/ext/common/ApplicationPoolServer.h +794 -0
  639. data/ext/common/ApplicationPoolServerExecutable.cpp +743 -0
  640. data/ext/common/ApplicationPoolStatusReporter.h +336 -0
  641. data/ext/common/Base64.cpp +143 -0
  642. data/ext/common/Base64.h +57 -0
  643. data/ext/common/CachedFileStat.cpp +62 -0
  644. data/ext/common/CachedFileStat.h +51 -0
  645. data/ext/common/CachedFileStat.hpp +243 -0
  646. data/ext/common/DummySpawnManager.h +108 -0
  647. data/ext/common/Exceptions.h +258 -0
  648. data/ext/common/FileChangeChecker.h +209 -0
  649. data/ext/common/Logging.cpp +65 -0
  650. data/ext/common/Logging.h +123 -0
  651. data/ext/common/MessageChannel.h +615 -0
  652. data/ext/common/PoolOptions.h +355 -0
  653. data/ext/common/SpawnManager.h +561 -0
  654. data/ext/common/StandardApplicationPool.h +821 -0
  655. data/ext/common/StaticString.h +148 -0
  656. data/ext/common/StringListCreator.h +83 -0
  657. data/ext/common/SystemTime.cpp +33 -0
  658. data/ext/common/SystemTime.h +88 -0
  659. data/ext/common/Timer.h +90 -0
  660. data/ext/common/Utils.cpp +681 -0
  661. data/ext/common/Utils.h +497 -0
  662. data/ext/common/Version.h +31 -0
  663. data/ext/nginx/Configuration.c +1098 -0
  664. data/ext/nginx/Configuration.h +71 -0
  665. data/ext/nginx/ContentHandler.c +1225 -0
  666. data/ext/nginx/ContentHandler.h +64 -0
  667. data/ext/nginx/HelperServer.cpp +850 -0
  668. data/ext/nginx/HttpStatusExtractor.h +350 -0
  669. data/ext/nginx/ScgiRequestParser.h +317 -0
  670. data/ext/nginx/StaticContentHandler.c +257 -0
  671. data/ext/nginx/StaticContentHandler.h +37 -0
  672. data/ext/nginx/config +45 -0
  673. data/ext/nginx/ngx_http_passenger_module.c +653 -0
  674. data/ext/nginx/ngx_http_passenger_module.h +72 -0
  675. data/ext/oxt/backtrace.cpp +177 -0
  676. data/ext/oxt/backtrace.hpp +135 -0
  677. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  678. data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
  679. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
  680. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  681. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  682. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  683. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  684. data/ext/oxt/macros.hpp +58 -0
  685. data/ext/oxt/spin_lock.hpp +55 -0
  686. data/ext/oxt/system_calls.cpp +351 -0
  687. data/ext/oxt/system_calls.hpp +244 -0
  688. data/ext/oxt/thread.cpp +32 -0
  689. data/ext/oxt/thread.hpp +335 -0
  690. data/ext/oxt/tracable_exception.cpp +87 -0
  691. data/ext/oxt/tracable_exception.hpp +35 -0
  692. data/ext/phusion_passenger/extconf.rb +36 -0
  693. data/ext/phusion_passenger/native_support.c +308 -0
  694. data/lib/jeweler_spec.rb +86 -0
  695. data/lib/phusion_passenger/abstract_installer.rb +196 -0
  696. data/lib/phusion_passenger/abstract_request_handler.rb +475 -0
  697. data/lib/phusion_passenger/abstract_server.rb +369 -0
  698. data/lib/phusion_passenger/abstract_server_collection.rb +306 -0
  699. data/lib/phusion_passenger/admin_tools.rb +48 -0
  700. data/lib/phusion_passenger/admin_tools/control_process.rb +150 -0
  701. data/lib/phusion_passenger/application.rb +113 -0
  702. data/lib/phusion_passenger/console_text_template.rb +66 -0
  703. data/lib/phusion_passenger/constants.rb +31 -0
  704. data/lib/phusion_passenger/dependencies.rb +425 -0
  705. data/lib/phusion_passenger/events.rb +50 -0
  706. data/lib/phusion_passenger/exceptions.rb +103 -0
  707. data/lib/phusion_passenger/html_template.rb +109 -0
  708. data/lib/phusion_passenger/message_channel.rb +229 -0
  709. data/lib/phusion_passenger/packaging.rb +39 -0
  710. data/lib/phusion_passenger/platform_info.rb +550 -0
  711. data/lib/phusion_passenger/rack/application_spawner.rb +146 -0
  712. data/lib/phusion_passenger/rack/request_handler.rb +122 -0
  713. data/lib/phusion_passenger/railz/application_spawner.rb +412 -0
  714. data/lib/phusion_passenger/railz/cgi_fixed.rb +68 -0
  715. data/lib/phusion_passenger/railz/framework_spawner.rb +334 -0
  716. data/lib/phusion_passenger/railz/request_handler.rb +73 -0
  717. data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
  718. data/lib/phusion_passenger/spawn_manager.rb +372 -0
  719. data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
  720. data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
  721. data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
  722. data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
  723. data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  724. data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
  725. data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
  726. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +14 -0
  727. data/lib/phusion_passenger/templates/app_init_error.html.erb +46 -0
  728. data/lib/phusion_passenger/templates/database_error.html.erb +24 -0
  729. data/lib/phusion_passenger/templates/error_layout.css +97 -0
  730. data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
  731. data/lib/phusion_passenger/templates/framework_init_error.html.erb +10 -0
  732. data/lib/phusion_passenger/templates/general_error.html.erb +8 -0
  733. data/lib/phusion_passenger/templates/invalid_app_root.html.erb +9 -0
  734. data/lib/phusion_passenger/templates/load_error.html.erb +6 -0
  735. data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
  736. data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
  737. data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
  738. data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
  739. data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
  740. data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
  741. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
  742. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
  743. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  744. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
  745. data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
  746. data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
  747. data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
  748. data/lib/phusion_passenger/templates/version_not_found.html.erb +6 -0
  749. data/lib/phusion_passenger/utils.rb +611 -0
  750. data/lib/phusion_passenger/utils/rewindable_input.rb +116 -0
  751. data/lib/phusion_passenger/wsgi/application_spawner.rb +104 -0
  752. data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
  753. data/man/passenger-config.1 +29 -0
  754. data/man/passenger-make-enterprisey.8 +23 -0
  755. data/man/passenger-memory-stats.8 +33 -0
  756. data/man/passenger-status.8 +43 -0
  757. data/man/passenger-stress-test.1 +43 -0
  758. data/misc/copy_boost_headers.rb +125 -0
  759. data/misc/find_owner_pipe_leaks.rb +128 -0
  760. data/misc/rake/cplusplus.rb +57 -0
  761. data/misc/rake/extensions.rb +182 -0
  762. data/misc/rake/gempackagetask.rb +99 -0
  763. data/misc/rake/packagetask.rb +186 -0
  764. data/misc/rake/rdoctask.rb +209 -0
  765. data/misc/render_error_pages.rb +116 -0
  766. data/test/ApplicationPoolServerTest.cpp +114 -0
  767. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +33 -0
  768. data/test/ApplicationPoolTest.cpp +599 -0
  769. data/test/Base64Test.cpp +48 -0
  770. data/test/CachedFileStatTest.cpp +402 -0
  771. data/test/CxxTestMain.cpp +143 -0
  772. data/test/FileChangeCheckerTest.cpp +331 -0
  773. data/test/HttpStatusExtractorTest.cpp +198 -0
  774. data/test/MessageChannelTest.cpp +312 -0
  775. data/test/PoolOptionsTest.cpp +117 -0
  776. data/test/ScgiRequestParserTest.cpp +337 -0
  777. data/test/SpawnManagerTest.cpp +64 -0
  778. data/test/StandardApplicationPoolTest.cpp +27 -0
  779. data/test/StaticStringTest.cpp +51 -0
  780. data/test/SystemTimeTest.cpp +37 -0
  781. data/test/UtilsTest.cpp +257 -0
  782. data/test/config.yml.example +30 -0
  783. data/test/integration_tests/apache2_tests.rb +595 -0
  784. data/test/integration_tests/hello_world_rack_spec.rb +36 -0
  785. data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
  786. data/test/integration_tests/mycook_spec.rb +192 -0
  787. data/test/integration_tests/nginx_tests.rb +151 -0
  788. data/test/oxt/backtrace_test.cpp +128 -0
  789. data/test/oxt/oxt_test_main.cpp +25 -0
  790. data/test/oxt/syscall_interruption_test.cpp +38 -0
  791. data/test/ruby/abstract_request_handler_spec.rb +85 -0
  792. data/test/ruby/abstract_server_collection_spec.rb +246 -0
  793. data/test/ruby/abstract_server_spec.rb +51 -0
  794. data/test/ruby/application_spec.rb +43 -0
  795. data/test/ruby/message_channel_spec.rb +170 -0
  796. data/test/ruby/rack/application_spawner_spec.rb +99 -0
  797. data/test/ruby/rails/application_spawner_spec.rb +159 -0
  798. data/test/ruby/rails/framework_spawner_spec.rb +133 -0
  799. data/test/ruby/rails/minimal_spawner_spec.rb +93 -0
  800. data/test/ruby/rails/spawner_error_handling_spec.rb +107 -0
  801. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +97 -0
  802. data/test/ruby/spawn_manager_spec.rb +205 -0
  803. data/test/ruby/spawn_server_spec.rb +26 -0
  804. data/test/ruby/utils_spec.rb +335 -0
  805. data/test/ruby/wsgi/application_spawner_spec.rb +54 -0
  806. data/test/stub/apache2/httpd.conf.erb +81 -0
  807. data/test/stub/apache2/mime.types +748 -0
  808. data/test/stub/garbage1.dat +0 -0
  809. data/test/stub/garbage2.dat +0 -0
  810. data/test/stub/garbage3.dat +0 -0
  811. data/test/stub/http_request.yml +23 -0
  812. data/test/stub/message_channel.rb +9 -0
  813. data/test/stub/message_channel_2.rb +10 -0
  814. data/test/stub/message_channel_3.rb +17 -0
  815. data/test/stub/nginx/koi-utf +109 -0
  816. data/test/stub/nginx/koi-win +103 -0
  817. data/test/stub/nginx/mime.types +70 -0
  818. data/test/stub/nginx/nginx.conf.erb +57 -0
  819. data/test/stub/nginx/win-utf +126 -0
  820. data/test/stub/rack/config.ru +4 -0
  821. data/test/stub/rack/public/rack.jpg +0 -0
  822. data/test/stub/rails_apps/foobar/app/controllers/application.rb +12 -0
  823. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_1.rb +5 -0
  824. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_2.rb +5 -0
  825. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +21 -0
  826. data/test/stub/rails_apps/foobar/app/helpers/application_helper.rb +3 -0
  827. data/test/stub/rails_apps/foobar/config/boot.rb +108 -0
  828. data/test/stub/rails_apps/foobar/config/database.yml +19 -0
  829. data/test/stub/rails_apps/foobar/config/environment.rb +59 -0
  830. data/test/stub/rails_apps/foobar/config/environments/development.rb +17 -0
  831. data/test/stub/rails_apps/foobar/config/environments/production.rb +18 -0
  832. data/test/stub/rails_apps/foobar/config/initializers/inflections.rb +10 -0
  833. data/test/stub/rails_apps/foobar/config/initializers/mime_types.rb +5 -0
  834. data/test/stub/rails_apps/foobar/config/routes.rb +35 -0
  835. data/test/stub/rails_apps/mycook/app/controllers/application.rb +12 -0
  836. data/test/stub/rails_apps/mycook/app/controllers/recipes_controller.rb +5 -0
  837. data/test/stub/rails_apps/mycook/app/controllers/uploads_controller.rb +15 -0
  838. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +71 -0
  839. data/test/stub/rails_apps/mycook/app/helpers/application_helper.rb +3 -0
  840. data/test/stub/rails_apps/mycook/app/views/layouts/default.rhtml +26 -0
  841. data/test/stub/rails_apps/mycook/app/views/recipes/create.rhtml +13 -0
  842. data/test/stub/rails_apps/mycook/app/views/recipes/index.rhtml +3 -0
  843. data/test/stub/rails_apps/mycook/app/views/recipes/new.rhtml +8 -0
  844. data/test/stub/rails_apps/mycook/app/views/uploads/index.rhtml +1 -0
  845. data/test/stub/rails_apps/mycook/app/views/uploads/new.html.erb +8 -0
  846. data/test/stub/rails_apps/mycook/app/views/welcome/cached.rhtml +1 -0
  847. data/test/stub/rails_apps/mycook/app/views/welcome/index.rhtml +20 -0
  848. data/test/stub/rails_apps/mycook/config/boot.rb +108 -0
  849. data/test/stub/rails_apps/mycook/config/database.yml +19 -0
  850. data/test/stub/rails_apps/mycook/config/environment.rb +61 -0
  851. data/test/stub/rails_apps/mycook/config/environments/development.rb +18 -0
  852. data/test/stub/rails_apps/mycook/config/environments/production.rb +19 -0
  853. data/test/stub/rails_apps/mycook/config/initializers/inflections.rb +10 -0
  854. data/test/stub/rails_apps/mycook/config/initializers/mime_types.rb +5 -0
  855. data/test/stub/rails_apps/mycook/config/routes.rb +38 -0
  856. data/test/stub/rails_apps/mycook/log/useless.txt +1 -0
  857. data/test/stub/rails_apps/mycook/public/404.html +30 -0
  858. data/test/stub/rails_apps/mycook/public/422.html +30 -0
  859. data/test/stub/rails_apps/mycook/public/500.html +30 -0
  860. data/test/stub/rails_apps/mycook/public/dispatch.cgi +10 -0
  861. data/test/stub/rails_apps/mycook/public/dispatch.fcgi +24 -0
  862. data/test/stub/rails_apps/mycook/public/dispatch.rb +10 -0
  863. data/test/stub/rails_apps/mycook/public/favicon.ico +0 -0
  864. data/test/stub/rails_apps/mycook/public/images/angrywizard.gif +0 -0
  865. data/test/stub/rails_apps/mycook/public/images/cookbook.gif +0 -0
  866. data/test/stub/rails_apps/mycook/public/images/header.png +0 -0
  867. data/test/stub/rails_apps/mycook/public/images/rails.png +0 -0
  868. data/test/stub/rails_apps/mycook/public/javascripts/application.js +2 -0
  869. data/test/stub/rails_apps/mycook/public/javascripts/controls.js +963 -0
  870. data/test/stub/rails_apps/mycook/public/javascripts/dragdrop.js +972 -0
  871. data/test/stub/rails_apps/mycook/public/javascripts/effects.js +1120 -0
  872. data/test/stub/rails_apps/mycook/public/javascripts/prototype.js +4225 -0
  873. data/test/stub/rails_apps/mycook/public/robots.txt +5 -0
  874. data/test/stub/rails_apps/mycook/public/uploads.html +26 -0
  875. data/test/stub/rails_apps/mycook/public/welcome/cached.html +26 -0
  876. data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
  877. data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
  878. data/test/stub/rails_apps/mycook/tmp/cache/useless.txt +1 -0
  879. data/test/stub/rails_apps/mycook/tmp/pids/useless.txt +1 -0
  880. data/test/stub/rails_apps/mycook/tmp/sessions/useless.txt +1 -0
  881. data/test/stub/rails_apps/mycook/tmp/sockets/useless.txt +1 -0
  882. data/test/stub/spawn_server.rb +20 -0
  883. data/test/stub/upload_data.txt +494 -0
  884. data/test/stub/vendor_rails/minimal/README +1 -0
  885. data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
  886. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +19 -0
  887. data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
  888. data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
  889. data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
  890. data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
  891. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
  892. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
  893. data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
  894. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +52 -0
  895. data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
  896. data/test/stub/wsgi/passenger_wsgi.py +3 -0
  897. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
  898. data/test/stub/zsfa/header.png +0 -0
  899. data/test/stub/zsfa/index.html +14 -0
  900. data/test/stub/zsfa/zsfa.png +0 -0
  901. data/test/support/Support.cpp +84 -0
  902. data/test/support/Support.h +118 -0
  903. data/test/support/apache2_controller.rb +250 -0
  904. data/test/support/config.rb +38 -0
  905. data/test/support/multipart.rb +62 -0
  906. data/test/support/nginx_controller.rb +98 -0
  907. data/test/support/run_rspec_tests.rb +10 -0
  908. data/test/support/test_helper.rb +207 -0
  909. data/test/support/tut.h +1234 -0
  910. data/test/support/tut_reporter.h +256 -0
  911. data/test/support/valgrind.h +2539 -0
  912. metadata +1078 -0
@@ -0,0 +1,24 @@
1
+ // (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
2
+ // Use, modification and distribution are subject to the Boost Software License,
3
+ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4
+ // http://www.boost.org/LICENSE_1_0.txt).
5
+ //
6
+ // See http://www.boost.org/libs/utility for most recent version including documentation.
7
+
8
+ // See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp
9
+ // for full copyright notices.
10
+
11
+ #ifndef BOOST_CALL_TRAITS_HPP
12
+ #define BOOST_CALL_TRAITS_HPP
13
+
14
+ #ifndef BOOST_CONFIG_HPP
15
+ #include <boost/config.hpp>
16
+ #endif
17
+
18
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
19
+ #include <boost/detail/ob_call_traits.hpp>
20
+ #else
21
+ #include <boost/detail/call_traits.hpp>
22
+ #endif
23
+
24
+ #endif // BOOST_CALL_TRAITS_HPP
@@ -0,0 +1,69 @@
1
+ #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
2
+ #define BOOST_CHECKED_DELETE_HPP_INCLUDED
3
+
4
+ // MS compatible compilers support #pragma once
5
+
6
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7
+ # pragma once
8
+ #endif
9
+
10
+ //
11
+ // boost/checked_delete.hpp
12
+ //
13
+ // Copyright (c) 2002, 2003 Peter Dimov
14
+ // Copyright (c) 2003 Daniel Frey
15
+ // Copyright (c) 2003 Howard Hinnant
16
+ //
17
+ // Distributed under the Boost Software License, Version 1.0. (See
18
+ // accompanying file LICENSE_1_0.txt or copy at
19
+ // http://www.boost.org/LICENSE_1_0.txt)
20
+ //
21
+ // See http://www.boost.org/libs/utility/checked_delete.html for documentation.
22
+ //
23
+
24
+ namespace boost
25
+ {
26
+
27
+ // verify that types are complete for increased safety
28
+
29
+ template<class T> inline void checked_delete(T * x)
30
+ {
31
+ // intentionally complex - simplification causes regressions
32
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
33
+ (void) sizeof(type_must_be_complete);
34
+ delete x;
35
+ }
36
+
37
+ template<class T> inline void checked_array_delete(T * x)
38
+ {
39
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
40
+ (void) sizeof(type_must_be_complete);
41
+ delete [] x;
42
+ }
43
+
44
+ template<class T> struct checked_deleter
45
+ {
46
+ typedef void result_type;
47
+ typedef T * argument_type;
48
+
49
+ void operator()(T * x) const
50
+ {
51
+ // boost:: disables ADL
52
+ boost::checked_delete(x);
53
+ }
54
+ };
55
+
56
+ template<class T> struct checked_array_deleter
57
+ {
58
+ typedef void result_type;
59
+ typedef T * argument_type;
60
+
61
+ void operator()(T * x) const
62
+ {
63
+ boost::checked_array_delete(x);
64
+ }
65
+ };
66
+
67
+ } // namespace boost
68
+
69
+ #endif // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
@@ -0,0 +1,46 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_CONCEPT_ASSERT_DWA2006430_HPP
5
+ # define BOOST_CONCEPT_ASSERT_DWA2006430_HPP
6
+
7
+ # include <boost/config.hpp>
8
+ # include <boost/detail/workaround.hpp>
9
+
10
+ // The old protocol used a constraints() member function in concept
11
+ // checking classes. If the compiler supports SFINAE, we can detect
12
+ // that function and seamlessly support the old concept checking
13
+ // classes. In this release, backward compatibility with the old
14
+ // concept checking classes is enabled by default, where available.
15
+ // The old protocol is deprecated, though, and backward compatibility
16
+ // will no longer be the default in the next release.
17
+
18
+ # if !defined(BOOST_NO_OLD_CONCEPT_SUPPORT) \
19
+ && !defined(BOOST_NO_SFINAE) \
20
+ \
21
+ && !(BOOST_WORKAROUND(__GNUC__, == 3) && BOOST_WORKAROUND(__GNUC_MINOR__, < 4)) \
22
+ && !(BOOST_WORKAROUND(__GNUC__, == 2))
23
+
24
+ // Note: gcc-2.96 through 3.3.x have some SFINAE, but no ability to
25
+ // check for the presence of particularmember functions.
26
+
27
+ # define BOOST_OLD_CONCEPT_SUPPORT
28
+
29
+ # endif
30
+
31
+ # ifdef BOOST_MSVC
32
+ # include <boost/concept/detail/msvc.hpp>
33
+ # elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
34
+ # include <boost/concept/detail/borland.hpp>
35
+ # else
36
+ # include <boost/concept/detail/general.hpp>
37
+ # endif
38
+
39
+ // Usage, in class or function context:
40
+ //
41
+ // BOOST_CONCEPT_ASSERT((UnaryFunctionConcept<F,bool,int>));
42
+ //
43
+ # define BOOST_CONCEPT_ASSERT(ModelInParens) \
44
+ BOOST_CONCEPT_ASSERT_FN(void(*)ModelInParens)
45
+
46
+ #endif // BOOST_CONCEPT_ASSERT_DWA2006430_HPP
@@ -0,0 +1,51 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
5
+ # define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
6
+ # include <boost/preprocessor/seq/for_each_i.hpp>
7
+ # include <boost/preprocessor/seq/enum.hpp>
8
+ # include <boost/preprocessor/comma_if.hpp>
9
+ # include <boost/preprocessor/cat.hpp>
10
+ #endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
11
+
12
+ // BOOST_concept(SomeName, (p1)(p2)...(pN))
13
+ //
14
+ // Expands to "template <class p1, class p2, ...class pN> struct SomeName"
15
+ //
16
+ // Also defines an equivalent SomeNameConcept for backward compatibility.
17
+ // Maybe in the next release we can kill off the "Concept" suffix for good.
18
+ #if BOOST_WORKAROUND(__GNUC__, <= 3)
19
+ # define BOOST_concept(name, params) \
20
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
21
+ struct name; /* forward declaration */ \
22
+ \
23
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
24
+ struct BOOST_PP_CAT(name,Concept) \
25
+ : name< BOOST_PP_SEQ_ENUM(params) > \
26
+ { \
27
+ /* at least 2.96 and 3.4.3 both need this */ \
28
+ BOOST_PP_CAT(name,Concept)(); \
29
+ }; \
30
+ \
31
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
32
+ struct name
33
+ #else
34
+ # define BOOST_concept(name, params) \
35
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
36
+ struct name; /* forward declaration */ \
37
+ \
38
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
39
+ struct BOOST_PP_CAT(name,Concept) \
40
+ : name< BOOST_PP_SEQ_ENUM(params) > \
41
+ { \
42
+ }; \
43
+ \
44
+ template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
45
+ struct name
46
+ #endif
47
+
48
+ // Helper for BOOST_concept, above.
49
+ # define BOOST_CONCEPT_typename(r, ignored, index, t) \
50
+ BOOST_PP_COMMA_IF(index) typename t
51
+
@@ -0,0 +1,5 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ # undef BOOST_concept_typename
5
+ # undef BOOST_concept
@@ -0,0 +1,66 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
5
+ # define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
6
+
7
+ # include <boost/preprocessor/cat.hpp>
8
+
9
+ # ifdef BOOST_OLD_CONCEPT_SUPPORT
10
+ # include <boost/concept/detail/has_constraints.hpp>
11
+ # include <boost/mpl/if.hpp>
12
+ # endif
13
+
14
+ // This implementation works on Comeau and GCC, all the way back to
15
+ // 2.95
16
+ namespace boost { namespace concept {
17
+
18
+ template <class ModelFn>
19
+ struct requirement_;
20
+
21
+ namespace detail
22
+ {
23
+ template <void(*)()> struct instantiate {};
24
+ }
25
+
26
+ template <class Model>
27
+ struct requirement
28
+ {
29
+ static void failed() { ((Model*)0)->~Model(); }
30
+ };
31
+
32
+ # ifdef BOOST_OLD_CONCEPT_SUPPORT
33
+
34
+ template <class Model>
35
+ struct constraint
36
+ {
37
+ static void failed() { ((Model*)0)->constraints(); }
38
+ };
39
+
40
+ template <class Model>
41
+ struct requirement_<void(*)(Model)>
42
+ : mpl::if_<
43
+ concept::not_satisfied<Model>
44
+ , constraint<Model>
45
+ , requirement<Model>
46
+ >::type
47
+ {};
48
+
49
+ # else
50
+
51
+ // For GCC-2.x, these can't have exactly the same name
52
+ template <class Model>
53
+ struct requirement_<void(*)(Model)>
54
+ : requirement<Model>
55
+ {};
56
+
57
+ # endif
58
+
59
+ # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
60
+ typedef ::boost::concept::detail::instantiate< \
61
+ &::boost::concept::requirement_<ModelFnPtr>::failed> \
62
+ BOOST_PP_CAT(boost_concept_check,__LINE__)
63
+
64
+ }}
65
+
66
+ #endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
@@ -0,0 +1,48 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
5
+ # define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
6
+
7
+ # include <boost/mpl/bool.hpp>
8
+ # include <boost/detail/workaround.hpp>
9
+ namespace boost { namespace concept {
10
+
11
+ namespace detail
12
+ {
13
+
14
+ // Here we implement the metafunction that detects whether a
15
+ // constraints metafunction exists
16
+ typedef char yes;
17
+ typedef char (&no)[2];
18
+
19
+ template <class Model, void (Model::*)()>
20
+ struct wrap_constraints {};
21
+
22
+ #if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580)
23
+ // Work around the following bogus error in Sun Studio 11, by
24
+ // turning off the has_constraints function entirely:
25
+ // Error: complex expression not allowed in dependent template
26
+ // argument expression
27
+ inline no has_constraints_(...);
28
+ #else
29
+ template <class Model>
30
+ inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0);
31
+ inline no has_constraints_(...);
32
+ #endif
33
+ }
34
+
35
+ // This would be called "detail::has_constraints," but it has a strong
36
+ // tendency to show up in error messages.
37
+ template <class Model>
38
+ struct not_satisfied
39
+ {
40
+ BOOST_STATIC_CONSTANT(
41
+ bool
42
+ , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) );
43
+ typedef mpl::bool_<value> type;
44
+ };
45
+
46
+ }} // namespace boost::concept::detail
47
+
48
+ #endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
@@ -0,0 +1,43 @@
1
+ // Copyright David Abrahams 2006. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_CONCEPT_USAGE_DWA2006919_HPP
5
+ # define BOOST_CONCEPT_USAGE_DWA2006919_HPP
6
+
7
+ # include <boost/concept/assert.hpp>
8
+ # include <boost/detail/workaround.hpp>
9
+
10
+ namespace boost { namespace concept {
11
+
12
+ # if BOOST_WORKAROUND(__GNUC__, == 2)
13
+
14
+ # define BOOST_CONCEPT_USAGE(model) ~model()
15
+
16
+ # else
17
+
18
+ template <class Model>
19
+ struct usage_requirements
20
+ {
21
+ ~usage_requirements() { ((Model*)0)->~Model(); }
22
+ };
23
+
24
+ # if BOOST_WORKAROUND(__GNUC__, <= 3)
25
+
26
+ # define BOOST_CONCEPT_USAGE(model) \
27
+ model(); /* at least 2.96 and 3.4.3 both need this :( */ \
28
+ BOOST_CONCEPT_ASSERT((boost::concept::usage_requirements<model>)); \
29
+ ~model()
30
+
31
+ # else
32
+
33
+ # define BOOST_CONCEPT_USAGE(model) \
34
+ BOOST_CONCEPT_ASSERT((boost::concept::usage_requirements<model>)); \
35
+ ~model()
36
+
37
+ # endif
38
+
39
+ # endif
40
+
41
+ }} // namespace boost::concept
42
+
43
+ #endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP
@@ -0,0 +1,988 @@
1
+ //
2
+ // (C) Copyright Jeremy Siek 2000.
3
+ // Distributed under the Boost Software License, Version 1.0. (See
4
+ // accompanying file LICENSE_1_0.txt or copy at
5
+ // http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // Revision History:
8
+ // 05 May 2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek)
9
+ // 02 April 2001: Removed limits header altogether. (Jeremy Siek)
10
+ // 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock)
11
+ //
12
+
13
+ // See http://www.boost.org/libs/concept_check for documentation.
14
+
15
+ #ifndef BOOST_CONCEPT_CHECKS_HPP
16
+ # define BOOST_CONCEPT_CHECKS_HPP
17
+
18
+ # include <boost/concept/assert.hpp>
19
+
20
+ # include <boost/iterator.hpp>
21
+ # include <boost/type_traits/conversion_traits.hpp>
22
+ # include <utility>
23
+ # include <boost/type_traits/is_same.hpp>
24
+ # include <boost/type_traits/is_void.hpp>
25
+ # include <boost/mpl/assert.hpp>
26
+ # include <boost/mpl/bool.hpp>
27
+ # include <boost/detail/workaround.hpp>
28
+ # include <boost/detail/iterator.hpp>
29
+
30
+ # include <boost/concept/usage.hpp>
31
+ # include <boost/concept/detail/concept_def.hpp>
32
+
33
+ namespace boost
34
+ {
35
+
36
+ //
37
+ // Backward compatibility
38
+ //
39
+
40
+ template <class Model>
41
+ inline void function_requires(Model* = 0)
42
+ {
43
+ BOOST_CONCEPT_ASSERT((Model));
44
+ }
45
+ template <class T> inline void ignore_unused_variable_warning(T const&) {}
46
+
47
+ # define BOOST_CLASS_REQUIRE(type_var, ns, concept) \
48
+ BOOST_CONCEPT_ASSERT((ns::concept<type_var>))
49
+
50
+ # define BOOST_CLASS_REQUIRE2(type_var1, type_var2, ns, concept) \
51
+ BOOST_CONCEPT_ASSERT((ns::concept<type_var1,type_var2>))
52
+
53
+ # define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept) \
54
+ BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3>))
55
+
56
+ # define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \
57
+ BOOST_CONCEPT_ASSERT((ns::concept<tv1,tv2,tv3,tv4>))
58
+
59
+
60
+ //
61
+ // Begin concept definitions
62
+ //
63
+ BOOST_concept(Integer, (T))
64
+ {
65
+ BOOST_CONCEPT_USAGE(Integer)
66
+ {
67
+ x.error_type_must_be_an_integer_type();
68
+ }
69
+ private:
70
+ T x;
71
+ };
72
+
73
+ template <> struct Integer<signed char> {};
74
+ template <> struct Integer<unsigned char> {};
75
+ template <> struct Integer<short> {};
76
+ template <> struct Integer<unsigned short> {};
77
+ template <> struct Integer<int> {};
78
+ template <> struct Integer<unsigned int> {};
79
+ template <> struct Integer<long> {};
80
+ template <> struct Integer<unsigned long> {};
81
+ # if defined(BOOST_HAS_LONG_LONG)
82
+ template <> struct Integer< ::boost::long_long_type> {};
83
+ template <> struct Integer< ::boost::ulong_long_type> {};
84
+ # elif defined(BOOST_HAS_MS_INT64)
85
+ template <> struct Integer<__int64> {};
86
+ template <> struct Integer<unsigned __int64> {};
87
+ # endif
88
+
89
+ BOOST_concept(SignedInteger,(T)) {
90
+ BOOST_CONCEPT_USAGE(SignedInteger) {
91
+ x.error_type_must_be_a_signed_integer_type();
92
+ }
93
+ private:
94
+ T x;
95
+ };
96
+ template <> struct SignedInteger<signed char> { };
97
+ template <> struct SignedInteger<short> {};
98
+ template <> struct SignedInteger<int> {};
99
+ template <> struct SignedInteger<long> {};
100
+ # if defined(BOOST_HAS_LONG_LONG)
101
+ template <> struct SignedInteger< ::boost::long_long_type> {};
102
+ # elif defined(BOOST_HAS_MS_INT64)
103
+ template <> struct SignedInteger<__int64> {};
104
+ # endif
105
+
106
+ BOOST_concept(UnsignedInteger,(T)) {
107
+ BOOST_CONCEPT_USAGE(UnsignedInteger) {
108
+ x.error_type_must_be_an_unsigned_integer_type();
109
+ }
110
+ private:
111
+ T x;
112
+ };
113
+
114
+ template <> struct UnsignedInteger<unsigned char> {};
115
+ template <> struct UnsignedInteger<unsigned short> {};
116
+ template <> struct UnsignedInteger<unsigned int> {};
117
+ template <> struct UnsignedInteger<unsigned long> {};
118
+ # if defined(BOOST_HAS_LONG_LONG)
119
+ template <> struct UnsignedInteger< ::boost::ulong_long_type> {};
120
+ # elif defined(BOOST_HAS_MS_INT64)
121
+ template <> struct UnsignedInteger<unsigned __int64> {};
122
+ # endif
123
+
124
+ //===========================================================================
125
+ // Basic Concepts
126
+
127
+ BOOST_concept(DefaultConstructible,(TT))
128
+ {
129
+ BOOST_CONCEPT_USAGE(DefaultConstructible) {
130
+ TT a; // require default constructor
131
+ ignore_unused_variable_warning(a);
132
+ }
133
+ };
134
+
135
+ BOOST_concept(Assignable,(TT))
136
+ {
137
+ BOOST_CONCEPT_USAGE(Assignable) {
138
+ #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
139
+ a = a; // require assignment operator
140
+ #endif
141
+ const_constraints(a);
142
+ }
143
+ private:
144
+ void const_constraints(const TT& b) {
145
+ #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
146
+ a = b; // const required for argument to assignment
147
+ #endif
148
+ }
149
+ private:
150
+ TT a;
151
+ };
152
+
153
+
154
+ BOOST_concept(CopyConstructible,(TT))
155
+ {
156
+ BOOST_CONCEPT_USAGE(CopyConstructible) {
157
+ TT a(b); // require copy constructor
158
+ TT* ptr = &a; // require address of operator
159
+ const_constraints(a);
160
+ ignore_unused_variable_warning(ptr);
161
+ }
162
+ private:
163
+ void const_constraints(const TT& a) {
164
+ TT c(a); // require const copy constructor
165
+ const TT* ptr = &a; // require const address of operator
166
+ ignore_unused_variable_warning(c);
167
+ ignore_unused_variable_warning(ptr);
168
+ }
169
+ TT b;
170
+ };
171
+
172
+ // The SGI STL version of Assignable requires copy constructor and operator=
173
+ BOOST_concept(SGIAssignable,(TT))
174
+ {
175
+ BOOST_CONCEPT_USAGE(SGIAssignable) {
176
+ TT b(a);
177
+ #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
178
+ a = a; // require assignment operator
179
+ #endif
180
+ const_constraints(a);
181
+ ignore_unused_variable_warning(b);
182
+ }
183
+ private:
184
+ void const_constraints(const TT& b) {
185
+ TT c(b);
186
+ #if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
187
+ a = b; // const required for argument to assignment
188
+ #endif
189
+ ignore_unused_variable_warning(c);
190
+ }
191
+ TT a;
192
+ };
193
+
194
+ BOOST_concept(Convertible,(X)(Y))
195
+ {
196
+ BOOST_CONCEPT_USAGE(Convertible) {
197
+ Y y = x;
198
+ ignore_unused_variable_warning(y);
199
+ }
200
+ private:
201
+ X x;
202
+ };
203
+
204
+ // The C++ standard requirements for many concepts talk about return
205
+ // types that must be "convertible to bool". The problem with this
206
+ // requirement is that it leaves the door open for evil proxies that
207
+ // define things like operator|| with strange return types. Two
208
+ // possible solutions are:
209
+ // 1) require the return type to be exactly bool
210
+ // 2) stay with convertible to bool, and also
211
+ // specify stuff about all the logical operators.
212
+ // For now we just test for convertible to bool.
213
+ template <class TT>
214
+ void require_boolean_expr(const TT& t) {
215
+ bool x = t;
216
+ ignore_unused_variable_warning(x);
217
+ }
218
+
219
+ BOOST_concept(EqualityComparable,(TT))
220
+ {
221
+ BOOST_CONCEPT_USAGE(EqualityComparable) {
222
+ require_boolean_expr(a == b);
223
+ require_boolean_expr(a != b);
224
+ }
225
+ private:
226
+ TT a, b;
227
+ };
228
+
229
+ BOOST_concept(LessThanComparable,(TT))
230
+ {
231
+ BOOST_CONCEPT_USAGE(LessThanComparable) {
232
+ require_boolean_expr(a < b);
233
+ }
234
+ private:
235
+ TT a, b;
236
+ };
237
+
238
+ // This is equivalent to SGI STL's LessThanComparable.
239
+ BOOST_concept(Comparable,(TT))
240
+ {
241
+ BOOST_CONCEPT_USAGE(Comparable) {
242
+ require_boolean_expr(a < b);
243
+ require_boolean_expr(a > b);
244
+ require_boolean_expr(a <= b);
245
+ require_boolean_expr(a >= b);
246
+ }
247
+ private:
248
+ TT a, b;
249
+ };
250
+
251
+ #define BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(OP,NAME) \
252
+ BOOST_concept(NAME, (First)(Second)) \
253
+ { \
254
+ BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); } \
255
+ private: \
256
+ bool constraints_() { return a OP b; } \
257
+ First a; \
258
+ Second b; \
259
+ }
260
+
261
+ #define BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(OP,NAME) \
262
+ BOOST_concept(NAME, (Ret)(First)(Second)) \
263
+ { \
264
+ BOOST_CONCEPT_USAGE(NAME) { (void)constraints_(); } \
265
+ private: \
266
+ Ret constraints_() { return a OP b; } \
267
+ First a; \
268
+ Second b; \
269
+ }
270
+
271
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(==, EqualOp);
272
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(!=, NotEqualOp);
273
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<, LessThanOp);
274
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(<=, LessEqualOp);
275
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>, GreaterThanOp);
276
+ BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT(>=, GreaterEqualOp);
277
+
278
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(+, PlusOp);
279
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(*, TimesOp);
280
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(/, DivideOp);
281
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOp);
282
+ BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOp);
283
+
284
+ //===========================================================================
285
+ // Function Object Concepts
286
+
287
+ BOOST_concept(Generator,(Func)(Return))
288
+ {
289
+ BOOST_CONCEPT_USAGE(Generator) { test(is_void<Return>()); }
290
+
291
+ private:
292
+ void test(boost::mpl::false_)
293
+ {
294
+ // Do we really want a reference here?
295
+ const Return& r = f();
296
+ ignore_unused_variable_warning(r);
297
+ }
298
+
299
+ void test(boost::mpl::true_)
300
+ {
301
+ f();
302
+ }
303
+
304
+ Func f;
305
+ };
306
+
307
+ BOOST_concept(UnaryFunction,(Func)(Return)(Arg))
308
+ {
309
+ BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void<Return>()); }
310
+
311
+ private:
312
+ void test(boost::mpl::false_)
313
+ {
314
+ f(arg); // "priming the pump" this way keeps msvc6 happy (ICE)
315
+ Return r = f(arg);
316
+ ignore_unused_variable_warning(r);
317
+ }
318
+
319
+ void test(boost::mpl::true_)
320
+ {
321
+ f(arg);
322
+ }
323
+
324
+ Func f;
325
+ Arg arg;
326
+ };
327
+
328
+ BOOST_concept(BinaryFunction,(Func)(Return)(First)(Second))
329
+ {
330
+ BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void<Return>()); }
331
+ private:
332
+ void test(boost::mpl::false_)
333
+ {
334
+ f(first,second);
335
+ Return r = f(first, second); // require operator()
336
+ (void)r;
337
+ }
338
+
339
+ void test(boost::mpl::true_)
340
+ {
341
+ f(first,second);
342
+ }
343
+
344
+ Func f;
345
+ First first;
346
+ Second second;
347
+ };
348
+
349
+ BOOST_concept(UnaryPredicate,(Func)(Arg))
350
+ {
351
+ BOOST_CONCEPT_USAGE(UnaryPredicate) {
352
+ require_boolean_expr(f(arg)); // require operator() returning bool
353
+ }
354
+ private:
355
+ Func f;
356
+ Arg arg;
357
+ };
358
+
359
+ BOOST_concept(BinaryPredicate,(Func)(First)(Second))
360
+ {
361
+ BOOST_CONCEPT_USAGE(BinaryPredicate) {
362
+ require_boolean_expr(f(a, b)); // require operator() returning bool
363
+ }
364
+ private:
365
+ Func f;
366
+ First a;
367
+ Second b;
368
+ };
369
+
370
+ // use this when functor is used inside a container class like std::set
371
+ BOOST_concept(Const_BinaryPredicate,(Func)(First)(Second))
372
+ : BinaryPredicate<Func, First, Second>
373
+ {
374
+ BOOST_CONCEPT_USAGE(Const_BinaryPredicate) {
375
+ const_constraints(f);
376
+ }
377
+ private:
378
+ void const_constraints(const Func& fun) {
379
+ // operator() must be a const member function
380
+ require_boolean_expr(fun(a, b));
381
+ }
382
+ Func f;
383
+ First a;
384
+ Second b;
385
+ };
386
+
387
+ BOOST_concept(AdaptableGenerator,(Func)(Return))
388
+ : Generator<Func, typename Func::result_type>
389
+ {
390
+ typedef typename Func::result_type result_type;
391
+
392
+ BOOST_CONCEPT_USAGE(AdaptableGenerator)
393
+ {
394
+ BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
395
+ }
396
+ };
397
+
398
+ BOOST_concept(AdaptableUnaryFunction,(Func)(Return)(Arg))
399
+ : UnaryFunction<Func, typename Func::result_type, typename Func::argument_type>
400
+ {
401
+ typedef typename Func::argument_type argument_type;
402
+ typedef typename Func::result_type result_type;
403
+
404
+ ~AdaptableUnaryFunction()
405
+ {
406
+ BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
407
+ BOOST_CONCEPT_ASSERT((Convertible<Arg, argument_type>));
408
+ }
409
+ };
410
+
411
+ BOOST_concept(AdaptableBinaryFunction,(Func)(Return)(First)(Second))
412
+ : BinaryFunction<
413
+ Func
414
+ , typename Func::result_type
415
+ , typename Func::first_argument_type
416
+ , typename Func::second_argument_type
417
+ >
418
+ {
419
+ typedef typename Func::first_argument_type first_argument_type;
420
+ typedef typename Func::second_argument_type second_argument_type;
421
+ typedef typename Func::result_type result_type;
422
+
423
+ ~AdaptableBinaryFunction()
424
+ {
425
+ BOOST_CONCEPT_ASSERT((Convertible<result_type, Return>));
426
+ BOOST_CONCEPT_ASSERT((Convertible<First, first_argument_type>));
427
+ BOOST_CONCEPT_ASSERT((Convertible<Second, second_argument_type>));
428
+ }
429
+ };
430
+
431
+ BOOST_concept(AdaptablePredicate,(Func)(Arg))
432
+ : UnaryPredicate<Func, Arg>
433
+ , AdaptableUnaryFunction<Func, bool, Arg>
434
+ {
435
+ };
436
+
437
+ BOOST_concept(AdaptableBinaryPredicate,(Func)(First)(Second))
438
+ : BinaryPredicate<Func, First, Second>
439
+ , AdaptableBinaryFunction<Func, bool, First, Second>
440
+ {
441
+ };
442
+
443
+ //===========================================================================
444
+ // Iterator Concepts
445
+
446
+ BOOST_concept(InputIterator,(TT))
447
+ : Assignable<TT>
448
+ , EqualityComparable<TT>
449
+ {
450
+ typedef typename boost::detail::iterator_traits<TT>::value_type value_type;
451
+ typedef typename boost::detail::iterator_traits<TT>::difference_type difference_type;
452
+ typedef typename boost::detail::iterator_traits<TT>::reference reference;
453
+ typedef typename boost::detail::iterator_traits<TT>::pointer pointer;
454
+ typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category;
455
+
456
+ BOOST_CONCEPT_USAGE(InputIterator)
457
+ {
458
+ BOOST_CONCEPT_ASSERT((SignedInteger<difference_type>));
459
+ BOOST_CONCEPT_ASSERT((Convertible<iterator_category, std::input_iterator_tag>));
460
+
461
+ TT j(i);
462
+ (void)*i; // require dereference operator
463
+ ++j; // require preincrement operator
464
+ i++; // require postincrement operator
465
+ }
466
+ private:
467
+ TT i;
468
+ };
469
+
470
+ BOOST_concept(OutputIterator,(TT)(ValueT))
471
+ : Assignable<TT>
472
+ {
473
+ BOOST_CONCEPT_USAGE(OutputIterator) {
474
+
475
+ ++i; // require preincrement operator
476
+ i++; // require postincrement operator
477
+ *i++ = t; // require postincrement and assignment
478
+ }
479
+ private:
480
+ TT i, j;
481
+ ValueT t;
482
+ };
483
+
484
+ BOOST_concept(ForwardIterator,(TT))
485
+ : InputIterator<TT>
486
+ {
487
+ BOOST_CONCEPT_USAGE(ForwardIterator)
488
+ {
489
+ BOOST_CONCEPT_ASSERT((Convertible<
490
+ BOOST_DEDUCED_TYPENAME ForwardIterator::iterator_category
491
+ , std::forward_iterator_tag
492
+ >));
493
+
494
+ typename InputIterator<TT>::reference r = *i;
495
+ ignore_unused_variable_warning(r);
496
+ }
497
+
498
+ private:
499
+ TT i;
500
+ };
501
+
502
+ BOOST_concept(Mutable_ForwardIterator,(TT))
503
+ : ForwardIterator<TT>
504
+ {
505
+ BOOST_CONCEPT_USAGE(Mutable_ForwardIterator) {
506
+ *i++ = *i; // require postincrement and assignment
507
+ }
508
+ private:
509
+ TT i;
510
+ };
511
+
512
+ BOOST_concept(BidirectionalIterator,(TT))
513
+ : ForwardIterator<TT>
514
+ {
515
+ BOOST_CONCEPT_USAGE(BidirectionalIterator)
516
+ {
517
+ BOOST_CONCEPT_ASSERT((Convertible<
518
+ BOOST_DEDUCED_TYPENAME BidirectionalIterator::iterator_category
519
+ , std::bidirectional_iterator_tag
520
+ >));
521
+
522
+ --i; // require predecrement operator
523
+ i--; // require postdecrement operator
524
+ }
525
+ private:
526
+ TT i;
527
+ };
528
+
529
+ BOOST_concept(Mutable_BidirectionalIterator,(TT))
530
+ : BidirectionalIterator<TT>
531
+ , Mutable_ForwardIterator<TT>
532
+ {
533
+ BOOST_CONCEPT_USAGE(Mutable_BidirectionalIterator)
534
+ {
535
+ *i-- = *i; // require postdecrement and assignment
536
+ }
537
+ private:
538
+ TT i;
539
+ };
540
+
541
+ BOOST_concept(RandomAccessIterator,(TT))
542
+ : BidirectionalIterator<TT>
543
+ , Comparable<TT>
544
+ {
545
+ BOOST_CONCEPT_USAGE(RandomAccessIterator)
546
+ {
547
+ BOOST_CONCEPT_ASSERT((Convertible<
548
+ BOOST_DEDUCED_TYPENAME BidirectionalIterator<TT>::iterator_category
549
+ , std::random_access_iterator_tag
550
+ >));
551
+
552
+ i += n; // require assignment addition operator
553
+ i = i + n; i = n + i; // require addition with difference type
554
+ i -= n; // require assignment subtraction operator
555
+ i = i - n; // require subtraction with difference type
556
+ n = i - j; // require difference operator
557
+ (void)i[n]; // require element access operator
558
+ }
559
+
560
+ private:
561
+ TT a, b;
562
+ TT i, j;
563
+ typename boost::detail::iterator_traits<TT>::difference_type n;
564
+ };
565
+
566
+ BOOST_concept(Mutable_RandomAccessIterator,(TT))
567
+ : RandomAccessIterator<TT>
568
+ , Mutable_BidirectionalIterator<TT>
569
+ {
570
+ BOOST_CONCEPT_USAGE(Mutable_RandomAccessIterator)
571
+ {
572
+ i[n] = *i; // require element access and assignment
573
+ }
574
+ private:
575
+ TT i;
576
+ typename boost::detail::iterator_traits<TT>::difference_type n;
577
+ };
578
+
579
+ //===========================================================================
580
+ // Container s
581
+
582
+ BOOST_concept(Container,(C))
583
+ : Assignable<C>
584
+ {
585
+ typedef typename C::value_type value_type;
586
+ typedef typename C::difference_type difference_type;
587
+ typedef typename C::size_type size_type;
588
+ typedef typename C::const_reference const_reference;
589
+ typedef typename C::const_pointer const_pointer;
590
+ typedef typename C::const_iterator const_iterator;
591
+
592
+ BOOST_CONCEPT_USAGE(Container)
593
+ {
594
+ BOOST_CONCEPT_ASSERT((InputIterator<const_iterator>));
595
+ const_constraints(c);
596
+ }
597
+
598
+ private:
599
+ void const_constraints(const C& cc) {
600
+ i = cc.begin();
601
+ i = cc.end();
602
+ n = cc.size();
603
+ n = cc.max_size();
604
+ b = cc.empty();
605
+ }
606
+ C c;
607
+ bool b;
608
+ const_iterator i;
609
+ size_type n;
610
+ };
611
+
612
+ BOOST_concept(Mutable_Container,(C))
613
+ : Container<C>
614
+ {
615
+ typedef typename C::reference reference;
616
+ typedef typename C::iterator iterator;
617
+ typedef typename C::pointer pointer;
618
+
619
+ BOOST_CONCEPT_USAGE(Mutable_Container)
620
+ {
621
+ BOOST_CONCEPT_ASSERT((
622
+ Assignable<typename Mutable_Container::value_type>));
623
+
624
+ BOOST_CONCEPT_ASSERT((InputIterator<iterator>));
625
+
626
+ i = c.begin();
627
+ i = c.end();
628
+ c.swap(c2);
629
+ }
630
+
631
+ private:
632
+ iterator i;
633
+ C c, c2;
634
+ };
635
+
636
+ BOOST_concept(ForwardContainer,(C))
637
+ : Container<C>
638
+ {
639
+ BOOST_CONCEPT_USAGE(ForwardContainer)
640
+ {
641
+ BOOST_CONCEPT_ASSERT((
642
+ ForwardIterator<
643
+ typename ForwardContainer::const_iterator
644
+ >));
645
+ }
646
+ };
647
+
648
+ BOOST_concept(Mutable_ForwardContainer,(C))
649
+ : ForwardContainer<C>
650
+ , Mutable_Container<C>
651
+ {
652
+ BOOST_CONCEPT_USAGE(Mutable_ForwardContainer)
653
+ {
654
+ BOOST_CONCEPT_ASSERT((
655
+ Mutable_ForwardIterator<
656
+ typename Mutable_ForwardContainer::iterator
657
+ >));
658
+ }
659
+ };
660
+
661
+ BOOST_concept(ReversibleContainer,(C))
662
+ : ForwardContainer<C>
663
+ {
664
+ typedef typename
665
+ C::const_reverse_iterator
666
+ const_reverse_iterator;
667
+
668
+ BOOST_CONCEPT_USAGE(ReversibleContainer)
669
+ {
670
+ BOOST_CONCEPT_ASSERT((
671
+ BidirectionalIterator<
672
+ typename ReversibleContainer::const_iterator>));
673
+
674
+ BOOST_CONCEPT_ASSERT((BidirectionalIterator<const_reverse_iterator>));
675
+
676
+ const_constraints(c);
677
+ }
678
+ private:
679
+ void const_constraints(const C& cc)
680
+ {
681
+ const_reverse_iterator i = cc.rbegin();
682
+ i = cc.rend();
683
+ }
684
+ C c;
685
+ };
686
+
687
+ BOOST_concept(Mutable_ReversibleContainer,(C))
688
+ : Mutable_ForwardContainer<C>
689
+ , ReversibleContainer<C>
690
+ {
691
+ typedef typename C::reverse_iterator reverse_iterator;
692
+
693
+ BOOST_CONCEPT_USAGE(Mutable_ReversibleContainer)
694
+ {
695
+ typedef typename Mutable_ForwardContainer<C>::iterator iterator;
696
+ BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<iterator>));
697
+ BOOST_CONCEPT_ASSERT((Mutable_BidirectionalIterator<reverse_iterator>));
698
+
699
+ reverse_iterator i = c.rbegin();
700
+ i = c.rend();
701
+ }
702
+ private:
703
+ C c;
704
+ };
705
+
706
+ BOOST_concept(RandomAccessContainer,(C))
707
+ : ReversibleContainer<C>
708
+ {
709
+ typedef typename C::size_type size_type;
710
+ typedef typename C::const_reference const_reference;
711
+
712
+ BOOST_CONCEPT_USAGE(RandomAccessContainer)
713
+ {
714
+ BOOST_CONCEPT_ASSERT((
715
+ RandomAccessIterator<
716
+ typename RandomAccessContainer::const_iterator
717
+ >));
718
+
719
+ const_constraints(c);
720
+ }
721
+ private:
722
+ void const_constraints(const C& cc)
723
+ {
724
+ const_reference r = cc[n];
725
+ ignore_unused_variable_warning(r);
726
+ }
727
+
728
+ C c;
729
+ size_type n;
730
+ };
731
+
732
+ BOOST_concept(Mutable_RandomAccessContainer,(C))
733
+ : Mutable_ReversibleContainer<C>
734
+ , RandomAccessContainer<C>
735
+ {
736
+ private:
737
+ typedef Mutable_RandomAccessContainer self;
738
+ public:
739
+ BOOST_CONCEPT_USAGE(Mutable_RandomAccessContainer)
740
+ {
741
+ BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::iterator>));
742
+ BOOST_CONCEPT_ASSERT((Mutable_RandomAccessIterator<typename self::reverse_iterator>));
743
+
744
+ typename self::reference r = c[i];
745
+ ignore_unused_variable_warning(r);
746
+ }
747
+
748
+ private:
749
+ typename Mutable_ReversibleContainer<C>::size_type i;
750
+ C c;
751
+ };
752
+
753
+ // A Sequence is inherently mutable
754
+ BOOST_concept(Sequence,(S))
755
+ : Mutable_ForwardContainer<S>
756
+ // Matt Austern's book puts DefaultConstructible here, the C++
757
+ // standard places it in Container --JGS
758
+ // ... so why aren't we following the standard? --DWA
759
+ , DefaultConstructible<S>
760
+ {
761
+ BOOST_CONCEPT_USAGE(Sequence)
762
+ {
763
+ S
764
+ c(n),
765
+ c2(n, t),
766
+ c3(first, last);
767
+
768
+ c.insert(p, t);
769
+ c.insert(p, n, t);
770
+ c.insert(p, first, last);
771
+
772
+ c.erase(p);
773
+ c.erase(p, q);
774
+
775
+ typename Sequence::reference r = c.front();
776
+
777
+ ignore_unused_variable_warning(c);
778
+ ignore_unused_variable_warning(c2);
779
+ ignore_unused_variable_warning(c3);
780
+ ignore_unused_variable_warning(r);
781
+ const_constraints(c);
782
+ }
783
+ private:
784
+ void const_constraints(const S& c) {
785
+ typename Sequence::const_reference r = c.front();
786
+ ignore_unused_variable_warning(r);
787
+ }
788
+
789
+ typename S::value_type t;
790
+ typename S::size_type n;
791
+ typename S::value_type* first, *last;
792
+ typename S::iterator p, q;
793
+ };
794
+
795
+ BOOST_concept(FrontInsertionSequence,(S))
796
+ : Sequence<S>
797
+ {
798
+ BOOST_CONCEPT_USAGE(FrontInsertionSequence)
799
+ {
800
+ c.push_front(t);
801
+ c.pop_front();
802
+ }
803
+ private:
804
+ S c;
805
+ typename S::value_type t;
806
+ };
807
+
808
+ BOOST_concept(BackInsertionSequence,(S))
809
+ : Sequence<S>
810
+ {
811
+ BOOST_CONCEPT_USAGE(BackInsertionSequence)
812
+ {
813
+ c.push_back(t);
814
+ c.pop_back();
815
+ typename BackInsertionSequence::reference r = c.back();
816
+ ignore_unused_variable_warning(r);
817
+ const_constraints(c);
818
+ }
819
+ private:
820
+ void const_constraints(const S& cc) {
821
+ typename BackInsertionSequence::const_reference
822
+ r = cc.back();
823
+ ignore_unused_variable_warning(r);
824
+ };
825
+ S c;
826
+ typename S::value_type t;
827
+ };
828
+
829
+ BOOST_concept(AssociativeContainer,(C))
830
+ : ForwardContainer<C>
831
+ , DefaultConstructible<C>
832
+ {
833
+ typedef typename C::key_type key_type;
834
+ typedef typename C::key_compare key_compare;
835
+ typedef typename C::value_compare value_compare;
836
+ typedef typename C::iterator iterator;
837
+
838
+ BOOST_CONCEPT_USAGE(AssociativeContainer)
839
+ {
840
+ i = c.find(k);
841
+ r = c.equal_range(k);
842
+ c.erase(k);
843
+ c.erase(i);
844
+ c.erase(r.first, r.second);
845
+ const_constraints(c);
846
+ BOOST_CONCEPT_ASSERT((BinaryPredicate<key_compare,key_type,key_type>));
847
+
848
+ typedef typename AssociativeContainer::value_type value_type_;
849
+ BOOST_CONCEPT_ASSERT((BinaryPredicate<value_compare,value_type_,value_type_>));
850
+ }
851
+
852
+ // Redundant with the base concept, but it helps below.
853
+ typedef typename C::const_iterator const_iterator;
854
+ private:
855
+ void const_constraints(const C& cc)
856
+ {
857
+ ci = cc.find(k);
858
+ n = cc.count(k);
859
+ cr = cc.equal_range(k);
860
+ }
861
+
862
+ C c;
863
+ iterator i;
864
+ std::pair<iterator,iterator> r;
865
+ const_iterator ci;
866
+ std::pair<const_iterator,const_iterator> cr;
867
+ typename C::key_type k;
868
+ typename C::size_type n;
869
+ };
870
+
871
+ BOOST_concept(UniqueAssociativeContainer,(C))
872
+ : AssociativeContainer<C>
873
+ {
874
+ BOOST_CONCEPT_USAGE(UniqueAssociativeContainer)
875
+ {
876
+ C c(first, last);
877
+
878
+ pos_flag = c.insert(t);
879
+ c.insert(first, last);
880
+
881
+ ignore_unused_variable_warning(c);
882
+ }
883
+ private:
884
+ std::pair<typename C::iterator, bool> pos_flag;
885
+ typename C::value_type t;
886
+ typename C::value_type* first, *last;
887
+ };
888
+
889
+ BOOST_concept(MultipleAssociativeContainer,(C))
890
+ : AssociativeContainer<C>
891
+ {
892
+ BOOST_CONCEPT_USAGE(MultipleAssociativeContainer)
893
+ {
894
+ C c(first, last);
895
+
896
+ pos = c.insert(t);
897
+ c.insert(first, last);
898
+
899
+ ignore_unused_variable_warning(c);
900
+ ignore_unused_variable_warning(pos);
901
+ }
902
+ private:
903
+ typename C::iterator pos;
904
+ typename C::value_type t;
905
+ typename C::value_type* first, *last;
906
+ };
907
+
908
+ BOOST_concept(SimpleAssociativeContainer,(C))
909
+ : AssociativeContainer<C>
910
+ {
911
+ BOOST_CONCEPT_USAGE(SimpleAssociativeContainer)
912
+ {
913
+ typedef typename C::key_type key_type;
914
+ typedef typename C::value_type value_type;
915
+ BOOST_MPL_ASSERT((boost::is_same<key_type,value_type>));
916
+ }
917
+ };
918
+
919
+ BOOST_concept(PairAssociativeContainer,(C))
920
+ : AssociativeContainer<C>
921
+ {
922
+ BOOST_CONCEPT_USAGE(PairAssociativeContainer)
923
+ {
924
+ typedef typename C::key_type key_type;
925
+ typedef typename C::value_type value_type;
926
+ typedef typename C::mapped_type mapped_type;
927
+ typedef std::pair<const key_type, mapped_type> required_value_type;
928
+ BOOST_MPL_ASSERT((boost::is_same<value_type,required_value_type>));
929
+ }
930
+ };
931
+
932
+ BOOST_concept(SortedAssociativeContainer,(C))
933
+ : AssociativeContainer<C>
934
+ , ReversibleContainer<C>
935
+ {
936
+ BOOST_CONCEPT_USAGE(SortedAssociativeContainer)
937
+ {
938
+ C
939
+ c(kc),
940
+ c2(first, last),
941
+ c3(first, last, kc);
942
+
943
+ p = c.upper_bound(k);
944
+ p = c.lower_bound(k);
945
+ r = c.equal_range(k);
946
+
947
+ c.insert(p, t);
948
+
949
+ ignore_unused_variable_warning(c);
950
+ ignore_unused_variable_warning(c2);
951
+ ignore_unused_variable_warning(c3);
952
+ const_constraints(c);
953
+ }
954
+
955
+ void const_constraints(const C& c)
956
+ {
957
+ kc = c.key_comp();
958
+ vc = c.value_comp();
959
+
960
+ cp = c.upper_bound(k);
961
+ cp = c.lower_bound(k);
962
+ cr = c.equal_range(k);
963
+ }
964
+
965
+ private:
966
+ typename C::key_compare kc;
967
+ typename C::value_compare vc;
968
+ typename C::value_type t;
969
+ typename C::key_type k;
970
+ typedef typename C::iterator iterator;
971
+ typedef typename C::const_iterator const_iterator;
972
+
973
+ typedef SortedAssociativeContainer self;
974
+ iterator p;
975
+ const_iterator cp;
976
+ std::pair<typename self::iterator,typename self::iterator> r;
977
+ std::pair<typename self::const_iterator,typename self::const_iterator> cr;
978
+ typename C::value_type* first, *last;
979
+ };
980
+
981
+ // HashedAssociativeContainer
982
+
983
+ } // namespace boost
984
+
985
+ # include <boost/concept/detail/concept_undef.hpp>
986
+
987
+ #endif // BOOST_CONCEPT_CHECKS_HPP
988
+