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,193 @@
1
+ // Boost string_algo library sequence_traits.hpp header file ---------------------------//
2
+
3
+ // Copyright Pavol Droba 2002-2003.
4
+ //
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // (See accompanying file LICENSE_1_0.txt or copy at
7
+ // http://www.boost.org/LICENSE_1_0.txt)
8
+
9
+ // See http://www.boost.org/ for updates, documentation, and revision history.
10
+
11
+ #ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP
12
+ #define BOOST_STRING_SEQUENCE_TRAITS_HPP
13
+
14
+ #include <boost/config.hpp>
15
+ #include <boost/mpl/bool.hpp>
16
+ #include <boost/algorithm/string/yes_no_type.hpp>
17
+
18
+ /*! \file
19
+ Traits defined in this header are used by various algorithms to achieve
20
+ better performance for specific containers.
21
+ Traits provide fail-safe defaults. If a container supports some of these
22
+ features, it is possible to specialize the specific trait for this container.
23
+ For lacking compilers, it is possible of define an override for a specific tester
24
+ function.
25
+
26
+ Due to a language restriction, it is not currently possible to define specializations for
27
+ stl containers without including the corresponding header. To decrease the overhead
28
+ needed by this inclusion, user can selectively include a specialization
29
+ header for a specific container. They are located in boost/algorithm/string/stl
30
+ directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp
31
+ header which contains specializations for all stl containers.
32
+ */
33
+
34
+ namespace boost {
35
+ namespace algorithm {
36
+
37
+ // sequence traits -----------------------------------------------//
38
+
39
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
40
+
41
+ //! Native replace tester
42
+ /*!
43
+ Declare an override of this tester function with return
44
+ type boost::string_algo::yes_type for a sequence with this property.
45
+
46
+ \return yes_type if the container has basic_string like native replace
47
+ method.
48
+ */
49
+ no_type has_native_replace_tester(...);
50
+
51
+ //! Stable iterators tester
52
+ /*!
53
+ Declare an override of this tester function with return
54
+ type boost::string_algo::yes_type for a sequence with this property.
55
+
56
+ \return yes_type if the sequence's insert/replace/erase methods do not invalidate
57
+ existing iterators.
58
+ */
59
+ no_type has_stable_iterators_tester(...);
60
+
61
+ //! const time insert tester
62
+ /*!
63
+ Declare an override of this tester function with return
64
+ type boost::string_algo::yes_type for a sequence with this property.
65
+
66
+ \return yes_type if the sequence's insert method is working in constant time
67
+ */
68
+ no_type has_const_time_insert_tester(...);
69
+
70
+ //! const time erase tester
71
+ /*!
72
+ Declare an override of this tester function with return
73
+ type boost::string_algo::yes_type for a sequence with this property.
74
+
75
+ \return yes_type if the sequence's erase method is working in constant time
76
+ */
77
+ no_type has_const_time_erase_tester(...);
78
+
79
+ #endif //BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
80
+
81
+ //! Native replace trait
82
+ /*!
83
+ This trait specifies that the sequence has \c std::string like replace method
84
+ */
85
+ template< typename T >
86
+ class has_native_replace
87
+ {
88
+
89
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
90
+ private:
91
+ static T* t;
92
+ public:
93
+ BOOST_STATIC_CONSTANT(bool, value=(
94
+ sizeof(has_native_replace_tester(t))==sizeof(yes_type) ) );
95
+ #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
96
+ public:
97
+ # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
98
+ enum { value = false };
99
+ # else
100
+ BOOST_STATIC_CONSTANT(bool, value=false);
101
+ # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
102
+ #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
103
+
104
+
105
+ typedef mpl::bool_<has_native_replace<T>::value> type;
106
+ };
107
+
108
+
109
+ //! Stable iterators trait
110
+ /*!
111
+ This trait specifies that the sequence has stable iterators. It means
112
+ that operations like insert/erase/replace do not invalidate iterators.
113
+ */
114
+ template< typename T >
115
+ class has_stable_iterators
116
+ {
117
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
118
+ private:
119
+ static T* t;
120
+ public:
121
+ BOOST_STATIC_CONSTANT(bool, value=(
122
+ sizeof(has_stable_iterators_tester(t))==sizeof(yes_type) ) );
123
+ #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
124
+ public:
125
+ # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
126
+ enum { value = false };
127
+ # else
128
+ BOOST_STATIC_CONSTANT(bool, value=false);
129
+ # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
130
+ #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
131
+
132
+ typedef mpl::bool_<has_stable_iterators<T>::value> type;
133
+ };
134
+
135
+
136
+ //! Const time insert trait
137
+ /*!
138
+ This trait specifies that the sequence's insert method has
139
+ constant time complexity.
140
+ */
141
+ template< typename T >
142
+ class has_const_time_insert
143
+ {
144
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
145
+ private:
146
+ static T* t;
147
+ public:
148
+ BOOST_STATIC_CONSTANT(bool, value=(
149
+ sizeof(has_const_time_insert_tester(t))==sizeof(yes_type) ) );
150
+ #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
151
+ public:
152
+ # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
153
+ enum { value = false };
154
+ # else
155
+ BOOST_STATIC_CONSTANT(bool, value=false);
156
+ # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
157
+ #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
158
+
159
+ typedef mpl::bool_<has_const_time_insert<T>::value> type;
160
+ };
161
+
162
+
163
+ //! Const time erase trait
164
+ /*!
165
+ This trait specifies that the sequence's erase method has
166
+ constant time complexity.
167
+ */
168
+ template< typename T >
169
+ class has_const_time_erase
170
+ {
171
+ #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
172
+ private:
173
+ static T* t;
174
+ public:
175
+ BOOST_STATIC_CONSTANT(bool, value=(
176
+ sizeof(has_const_time_erase_tester(t))==sizeof(yes_type) ) );
177
+ #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
178
+ public:
179
+ # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
180
+ enum { value = false };
181
+ # else
182
+ BOOST_STATIC_CONSTANT(bool, value=false);
183
+ # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
184
+ #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
185
+
186
+ typedef mpl::bool_<has_const_time_erase<T>::value> type;
187
+ };
188
+
189
+ } // namespace algorithm
190
+ } // namespace boost
191
+
192
+
193
+ #endif // BOOST_STRING_SEQUENCE_TRAITS_HPP
@@ -0,0 +1,33 @@
1
+ // Boost string_algo library yes_no_type.hpp header file ---------------------------//
2
+
3
+ // Copyright Pavol Droba 2002-2003.
4
+ //
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // (See accompanying file LICENSE_1_0.txt or copy at
7
+ // http://www.boost.org/LICENSE_1_0.txt)
8
+
9
+ // See http://www.boost.org/ for updates, documentation, and revision history.
10
+
11
+ #ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
12
+ #define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
13
+
14
+ namespace boost {
15
+ namespace algorithm {
16
+
17
+ // taken from boost mailing-list
18
+ // when yes_no_type will become officially
19
+ // a part of boost distribution, this header
20
+ // will be deprecated
21
+ template<int I> struct size_descriptor
22
+ {
23
+ typedef char (& type)[I];
24
+ };
25
+
26
+ typedef size_descriptor<1>::type yes_type;
27
+ typedef size_descriptor<2>::type no_type;
28
+
29
+ } // namespace algorithm
30
+ } // namespace boost
31
+
32
+
33
+ #endif // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP
@@ -0,0 +1,50 @@
1
+ //
2
+ // boost/assert.hpp - BOOST_ASSERT(expr)
3
+ //
4
+ // Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
5
+ // Copyright (c) 2007 Peter Dimov
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See
8
+ // accompanying file LICENSE_1_0.txt or copy at
9
+ // http://www.boost.org/LICENSE_1_0.txt)
10
+ //
11
+ // Note: There are no include guards. This is intentional.
12
+ //
13
+ // See http://www.boost.org/libs/utility/assert.html for documentation.
14
+ //
15
+
16
+ #undef BOOST_ASSERT
17
+
18
+ #if defined(BOOST_DISABLE_ASSERTS)
19
+
20
+ # define BOOST_ASSERT(expr) ((void)0)
21
+
22
+ #elif defined(BOOST_ENABLE_ASSERT_HANDLER)
23
+
24
+ #include <boost/current_function.hpp>
25
+
26
+ namespace boost
27
+ {
28
+
29
+ void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
30
+
31
+ } // namespace boost
32
+
33
+ #define BOOST_ASSERT(expr) ((expr)? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
34
+
35
+ #else
36
+ # include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
37
+ # define BOOST_ASSERT(expr) assert(expr)
38
+ #endif
39
+
40
+ #undef BOOST_VERIFY
41
+
42
+ #if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
43
+
44
+ # define BOOST_VERIFY(expr) ((void)(expr))
45
+
46
+ #else
47
+
48
+ # define BOOST_VERIFY(expr) BOOST_ASSERT(expr)
49
+
50
+ #endif
@@ -0,0 +1,1689 @@
1
+ #ifndef BOOST_BIND_HPP_INCLUDED
2
+ #define BOOST_BIND_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
+ // bind.hpp - binds function objects to arguments
12
+ //
13
+ // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
14
+ // Copyright (c) 2001 David Abrahams
15
+ // Copyright (c) 2005 Peter Dimov
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/bind/bind.html for documentation.
22
+ //
23
+
24
+ #include <boost/config.hpp>
25
+ #include <boost/ref.hpp>
26
+ #include <boost/mem_fn.hpp>
27
+ #include <boost/type.hpp>
28
+ #include <boost/is_placeholder.hpp>
29
+ #include <boost/bind/arg.hpp>
30
+ #include <boost/detail/workaround.hpp>
31
+ #include <boost/visit_each.hpp>
32
+
33
+ // Borland-specific bug, visit_each() silently fails to produce code
34
+
35
+ #if defined(__BORLANDC__)
36
+ # define BOOST_BIND_VISIT_EACH boost::visit_each
37
+ #else
38
+ # define BOOST_BIND_VISIT_EACH visit_each
39
+ #endif
40
+
41
+ #include <boost/bind/storage.hpp>
42
+
43
+ #ifdef BOOST_MSVC
44
+ # pragma warning(push)
45
+ # pragma warning(disable: 4512) // assignment operator could not be generated
46
+ #endif
47
+
48
+ namespace boost
49
+ {
50
+
51
+ namespace _bi // implementation details
52
+ {
53
+
54
+ // result_traits
55
+
56
+ template<class R, class F> struct result_traits
57
+ {
58
+ typedef R type;
59
+ };
60
+
61
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
62
+
63
+ struct unspecified {};
64
+
65
+ template<class F> struct result_traits<unspecified, F>
66
+ {
67
+ typedef typename F::result_type type;
68
+ };
69
+
70
+ template<class F> struct result_traits< unspecified, reference_wrapper<F> >
71
+ {
72
+ typedef typename F::result_type type;
73
+ };
74
+
75
+ #endif
76
+
77
+ // ref_compare
78
+
79
+ template<class T> bool ref_compare( T const & a, T const & b, long )
80
+ {
81
+ return a == b;
82
+ }
83
+
84
+ template<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )
85
+ {
86
+ return true;
87
+ }
88
+
89
+ template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )
90
+ {
91
+ return true;
92
+ }
93
+
94
+ template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )
95
+ {
96
+ return a.get_pointer() == b.get_pointer();
97
+ }
98
+
99
+ // bind_t forward declaration for listN
100
+
101
+ template<class R, class F, class L> class bind_t;
102
+
103
+ // value
104
+
105
+ template<class T> class value
106
+ {
107
+ public:
108
+
109
+ value(T const & t): t_(t) {}
110
+
111
+ T & get() { return t_; }
112
+ T const & get() const { return t_; }
113
+
114
+ bool operator==(value const & rhs) const
115
+ {
116
+ return t_ == rhs.t_;
117
+ }
118
+
119
+ private:
120
+
121
+ T t_;
122
+ };
123
+
124
+ // type
125
+
126
+ template<class T> class type {};
127
+
128
+ // unwrap
129
+
130
+ template<class F> struct unwrapper
131
+ {
132
+ static inline F & unwrap( F & f, long )
133
+ {
134
+ return f;
135
+ }
136
+
137
+ template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )
138
+ {
139
+ return rf.get();
140
+ }
141
+
142
+ template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )
143
+ {
144
+ return _mfi::dm<R, T>( pm );
145
+ }
146
+ };
147
+
148
+ // listN
149
+
150
+ class list0
151
+ {
152
+ public:
153
+
154
+ list0() {}
155
+
156
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
157
+
158
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
159
+
160
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
161
+
162
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
163
+
164
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
165
+
166
+ template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)
167
+ {
168
+ return unwrapper<F>::unwrap(f, 0)();
169
+ }
170
+
171
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const
172
+ {
173
+ return unwrapper<F const>::unwrap(f, 0)();
174
+ }
175
+
176
+ template<class F, class A> void operator()(type<void>, F & f, A &, int)
177
+ {
178
+ unwrapper<F>::unwrap(f, 0)();
179
+ }
180
+
181
+ template<class F, class A> void operator()(type<void>, F const & f, A &, int) const
182
+ {
183
+ unwrapper<F const>::unwrap(f, 0)();
184
+ }
185
+
186
+ template<class V> void accept(V &) const
187
+ {
188
+ }
189
+
190
+ bool operator==(list0 const &) const
191
+ {
192
+ return true;
193
+ }
194
+ };
195
+
196
+ template< class A1 > class list1: private storage1< A1 >
197
+ {
198
+ private:
199
+
200
+ typedef storage1< A1 > base_type;
201
+
202
+ public:
203
+
204
+ explicit list1( A1 a1 ): base_type( a1 ) {}
205
+
206
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
207
+
208
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
209
+
210
+ template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
211
+
212
+ template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
213
+
214
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
215
+
216
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
217
+
218
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
219
+
220
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
221
+ {
222
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
223
+ }
224
+
225
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
226
+ {
227
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
228
+ }
229
+
230
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
231
+ {
232
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
233
+ }
234
+
235
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
236
+ {
237
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
238
+ }
239
+
240
+ template<class V> void accept(V & v) const
241
+ {
242
+ base_type::accept(v);
243
+ }
244
+
245
+ bool operator==(list1 const & rhs) const
246
+ {
247
+ return ref_compare(base_type::a1_, rhs.a1_, 0);
248
+ }
249
+ };
250
+
251
+ template< class A1, class A2 > class list2: private storage2< A1, A2 >
252
+ {
253
+ private:
254
+
255
+ typedef storage2< A1, A2 > base_type;
256
+
257
+ public:
258
+
259
+ list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}
260
+
261
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
262
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
263
+
264
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
265
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
266
+
267
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
268
+
269
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
270
+
271
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
272
+
273
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
274
+
275
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
276
+
277
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
278
+ {
279
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
280
+ }
281
+
282
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
283
+ {
284
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
285
+ }
286
+
287
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
288
+ {
289
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
290
+ }
291
+
292
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
293
+ {
294
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
295
+ }
296
+
297
+ template<class V> void accept(V & v) const
298
+ {
299
+ base_type::accept(v);
300
+ }
301
+
302
+ bool operator==(list2 const & rhs) const
303
+ {
304
+ return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);
305
+ }
306
+ };
307
+
308
+ template< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >
309
+ {
310
+ private:
311
+
312
+ typedef storage3< A1, A2, A3 > base_type;
313
+
314
+ public:
315
+
316
+ list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}
317
+
318
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
319
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
320
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
321
+
322
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
323
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
324
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
325
+
326
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
327
+
328
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
329
+
330
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
331
+
332
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
333
+
334
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
335
+
336
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
337
+ {
338
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
339
+ }
340
+
341
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
342
+ {
343
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
344
+ }
345
+
346
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
347
+ {
348
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
349
+ }
350
+
351
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
352
+ {
353
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
354
+ }
355
+
356
+ template<class V> void accept(V & v) const
357
+ {
358
+ base_type::accept(v);
359
+ }
360
+
361
+ bool operator==(list3 const & rhs) const
362
+ {
363
+ return
364
+
365
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
366
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
367
+ ref_compare( base_type::a3_, rhs.a3_, 0 );
368
+ }
369
+ };
370
+
371
+ template< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >
372
+ {
373
+ private:
374
+
375
+ typedef storage4< A1, A2, A3, A4 > base_type;
376
+
377
+ public:
378
+
379
+ list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}
380
+
381
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
382
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
383
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
384
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
385
+
386
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
387
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
388
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
389
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
390
+
391
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
392
+
393
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
394
+
395
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
396
+
397
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
398
+
399
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
400
+
401
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
402
+ {
403
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
404
+ }
405
+
406
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
407
+ {
408
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
409
+ }
410
+
411
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
412
+ {
413
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
414
+ }
415
+
416
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
417
+ {
418
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
419
+ }
420
+
421
+ template<class V> void accept(V & v) const
422
+ {
423
+ base_type::accept(v);
424
+ }
425
+
426
+ bool operator==(list4 const & rhs) const
427
+ {
428
+ return
429
+
430
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
431
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
432
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
433
+ ref_compare( base_type::a4_, rhs.a4_, 0 );
434
+ }
435
+ };
436
+
437
+ template< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >
438
+ {
439
+ private:
440
+
441
+ typedef storage5< A1, A2, A3, A4, A5 > base_type;
442
+
443
+ public:
444
+
445
+ list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}
446
+
447
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
448
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
449
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
450
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
451
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
452
+
453
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
454
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
455
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
456
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
457
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
458
+
459
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
460
+
461
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
462
+
463
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
464
+
465
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
466
+
467
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
468
+
469
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
470
+ {
471
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
472
+ }
473
+
474
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
475
+ {
476
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
477
+ }
478
+
479
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
480
+ {
481
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
482
+ }
483
+
484
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
485
+ {
486
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
487
+ }
488
+
489
+ template<class V> void accept(V & v) const
490
+ {
491
+ base_type::accept(v);
492
+ }
493
+
494
+ bool operator==(list5 const & rhs) const
495
+ {
496
+ return
497
+
498
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
499
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
500
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
501
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
502
+ ref_compare( base_type::a5_, rhs.a5_, 0 );
503
+ }
504
+ };
505
+
506
+ template<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >
507
+ {
508
+ private:
509
+
510
+ typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;
511
+
512
+ public:
513
+
514
+ list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}
515
+
516
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
517
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
518
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
519
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
520
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
521
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
522
+
523
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
524
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
525
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
526
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
527
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
528
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
529
+
530
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
531
+
532
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
533
+
534
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
535
+
536
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
537
+
538
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
539
+
540
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
541
+ {
542
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
543
+ }
544
+
545
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
546
+ {
547
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
548
+ }
549
+
550
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
551
+ {
552
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
553
+ }
554
+
555
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
556
+ {
557
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
558
+ }
559
+
560
+ template<class V> void accept(V & v) const
561
+ {
562
+ base_type::accept(v);
563
+ }
564
+
565
+ bool operator==(list6 const & rhs) const
566
+ {
567
+ return
568
+
569
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
570
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
571
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
572
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
573
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
574
+ ref_compare( base_type::a6_, rhs.a6_, 0 );
575
+ }
576
+ };
577
+
578
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >
579
+ {
580
+ private:
581
+
582
+ typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;
583
+
584
+ public:
585
+
586
+ list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}
587
+
588
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
589
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
590
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
591
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
592
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
593
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
594
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
595
+
596
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
597
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
598
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
599
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
600
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
601
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
602
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
603
+
604
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
605
+
606
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
607
+
608
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
609
+
610
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
611
+
612
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
613
+
614
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
615
+ {
616
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
617
+ }
618
+
619
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
620
+ {
621
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
622
+ }
623
+
624
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
625
+ {
626
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
627
+ }
628
+
629
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
630
+ {
631
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
632
+ }
633
+
634
+ template<class V> void accept(V & v) const
635
+ {
636
+ base_type::accept(v);
637
+ }
638
+
639
+ bool operator==(list7 const & rhs) const
640
+ {
641
+ return
642
+
643
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
644
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
645
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
646
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
647
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
648
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
649
+ ref_compare( base_type::a7_, rhs.a7_, 0 );
650
+ }
651
+ };
652
+
653
+ template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
654
+ {
655
+ private:
656
+
657
+ typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;
658
+
659
+ public:
660
+
661
+ list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
662
+
663
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
664
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
665
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
666
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
667
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
668
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
669
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
670
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
671
+
672
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
673
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
674
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
675
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
676
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
677
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
678
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
679
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
680
+
681
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
682
+
683
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
684
+
685
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
686
+
687
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
688
+
689
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
690
+
691
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
692
+ {
693
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
694
+ }
695
+
696
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
697
+ {
698
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
699
+ }
700
+
701
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
702
+ {
703
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
704
+ }
705
+
706
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
707
+ {
708
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
709
+ }
710
+
711
+ template<class V> void accept(V & v) const
712
+ {
713
+ base_type::accept(v);
714
+ }
715
+
716
+ bool operator==(list8 const & rhs) const
717
+ {
718
+ return
719
+
720
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
721
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
722
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
723
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
724
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
725
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
726
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
727
+ ref_compare( base_type::a8_, rhs.a8_, 0 );
728
+ }
729
+ };
730
+
731
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >
732
+ {
733
+ private:
734
+
735
+ typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;
736
+
737
+ public:
738
+
739
+ list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}
740
+
741
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
742
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
743
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
744
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
745
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
746
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
747
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
748
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
749
+ A9 operator[] (boost::arg<9>) const { return base_type::a9_; }
750
+
751
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
752
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
753
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
754
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
755
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
756
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
757
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
758
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
759
+ A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }
760
+
761
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
762
+
763
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
764
+
765
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
766
+
767
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
768
+
769
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
770
+
771
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
772
+ {
773
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
774
+ }
775
+
776
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
777
+ {
778
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
779
+ }
780
+
781
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
782
+ {
783
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
784
+ }
785
+
786
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
787
+ {
788
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
789
+ }
790
+
791
+ template<class V> void accept(V & v) const
792
+ {
793
+ base_type::accept(v);
794
+ }
795
+
796
+ bool operator==(list9 const & rhs) const
797
+ {
798
+ return
799
+
800
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
801
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
802
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
803
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
804
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
805
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
806
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
807
+ ref_compare( base_type::a8_, rhs.a8_, 0 ) &&
808
+ ref_compare( base_type::a9_, rhs.a9_, 0 );
809
+ }
810
+ };
811
+
812
+ // bind_t
813
+
814
+ #ifndef BOOST_NO_VOID_RETURNS
815
+
816
+ template<class R, class F, class L> class bind_t
817
+ {
818
+ public:
819
+
820
+ typedef bind_t this_type;
821
+
822
+ bind_t(F f, L const & l): f_(f), l_(l) {}
823
+
824
+ #define BOOST_BIND_RETURN return
825
+ #include <boost/bind/bind_template.hpp>
826
+ #undef BOOST_BIND_RETURN
827
+
828
+ };
829
+
830
+ #else
831
+
832
+ template<class R> struct bind_t_generator
833
+ {
834
+
835
+ template<class F, class L> class implementation
836
+ {
837
+ public:
838
+
839
+ typedef implementation this_type;
840
+
841
+ implementation(F f, L const & l): f_(f), l_(l) {}
842
+
843
+ #define BOOST_BIND_RETURN return
844
+ #include <boost/bind/bind_template.hpp>
845
+ #undef BOOST_BIND_RETURN
846
+
847
+ };
848
+
849
+ };
850
+
851
+ template<> struct bind_t_generator<void>
852
+ {
853
+
854
+ template<class F, class L> class implementation
855
+ {
856
+ private:
857
+
858
+ typedef void R;
859
+
860
+ public:
861
+
862
+ typedef implementation this_type;
863
+
864
+ implementation(F f, L const & l): f_(f), l_(l) {}
865
+
866
+ #define BOOST_BIND_RETURN
867
+ #include <boost/bind/bind_template.hpp>
868
+ #undef BOOST_BIND_RETURN
869
+
870
+ };
871
+
872
+ };
873
+
874
+ template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>
875
+ {
876
+ public:
877
+
878
+ bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}
879
+
880
+ };
881
+
882
+ #endif
883
+
884
+ // function_equal
885
+
886
+ #ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
887
+
888
+ // put overloads in _bi, rely on ADL
889
+
890
+ # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
891
+
892
+ template<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )
893
+ {
894
+ return a.compare(b);
895
+ }
896
+
897
+ # else
898
+
899
+ template<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
900
+ {
901
+ return a.compare(b);
902
+ }
903
+
904
+ # endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
905
+
906
+ #else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
907
+
908
+ // put overloads in boost
909
+
910
+ } // namespace _bi
911
+
912
+ # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
913
+
914
+ template<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )
915
+ {
916
+ return a.compare(b);
917
+ }
918
+
919
+ # else
920
+
921
+ template<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )
922
+ {
923
+ return a.compare(b);
924
+ }
925
+
926
+ # endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
927
+
928
+ namespace _bi
929
+ {
930
+
931
+ #endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
932
+
933
+ // add_value
934
+
935
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)
936
+
937
+ #if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) )
938
+
939
+ template<class T> struct add_value
940
+ {
941
+ typedef _bi::value<T> type;
942
+ };
943
+
944
+ #else
945
+
946
+ template< class T, int I > struct add_value_2
947
+ {
948
+ typedef boost::arg<I> type;
949
+ };
950
+
951
+ template< class T > struct add_value_2< T, 0 >
952
+ {
953
+ typedef _bi::value< T > type;
954
+ };
955
+
956
+ template<class T> struct add_value
957
+ {
958
+ typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type;
959
+ };
960
+
961
+ #endif
962
+
963
+ template<class T> struct add_value< value<T> >
964
+ {
965
+ typedef _bi::value<T> type;
966
+ };
967
+
968
+ template<class T> struct add_value< reference_wrapper<T> >
969
+ {
970
+ typedef reference_wrapper<T> type;
971
+ };
972
+
973
+ template<int I> struct add_value< arg<I> >
974
+ {
975
+ typedef boost::arg<I> type;
976
+ };
977
+
978
+ template<int I> struct add_value< arg<I> (*) () >
979
+ {
980
+ typedef boost::arg<I> (*type) ();
981
+ };
982
+
983
+ template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
984
+ {
985
+ typedef bind_t<R, F, L> type;
986
+ };
987
+
988
+ #else
989
+
990
+ template<int I> struct _avt_0;
991
+
992
+ template<> struct _avt_0<1>
993
+ {
994
+ template<class T> struct inner
995
+ {
996
+ typedef T type;
997
+ };
998
+ };
999
+
1000
+ template<> struct _avt_0<2>
1001
+ {
1002
+ template<class T> struct inner
1003
+ {
1004
+ typedef value<T> type;
1005
+ };
1006
+ };
1007
+
1008
+ typedef char (&_avt_r1) [1];
1009
+ typedef char (&_avt_r2) [2];
1010
+
1011
+ template<class T> _avt_r1 _avt_f(value<T>);
1012
+ template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
1013
+ template<int I> _avt_r1 _avt_f(arg<I>);
1014
+ template<int I> _avt_r1 _avt_f(arg<I> (*) ());
1015
+ template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
1016
+
1017
+ _avt_r2 _avt_f(...);
1018
+
1019
+ template<class T> struct add_value
1020
+ {
1021
+ static T t();
1022
+ typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;
1023
+ };
1024
+
1025
+ #endif
1026
+
1027
+ // list_av_N
1028
+
1029
+ template<class A1> struct list_av_1
1030
+ {
1031
+ typedef typename add_value<A1>::type B1;
1032
+ typedef list1<B1> type;
1033
+ };
1034
+
1035
+ template<class A1, class A2> struct list_av_2
1036
+ {
1037
+ typedef typename add_value<A1>::type B1;
1038
+ typedef typename add_value<A2>::type B2;
1039
+ typedef list2<B1, B2> type;
1040
+ };
1041
+
1042
+ template<class A1, class A2, class A3> struct list_av_3
1043
+ {
1044
+ typedef typename add_value<A1>::type B1;
1045
+ typedef typename add_value<A2>::type B2;
1046
+ typedef typename add_value<A3>::type B3;
1047
+ typedef list3<B1, B2, B3> type;
1048
+ };
1049
+
1050
+ template<class A1, class A2, class A3, class A4> struct list_av_4
1051
+ {
1052
+ typedef typename add_value<A1>::type B1;
1053
+ typedef typename add_value<A2>::type B2;
1054
+ typedef typename add_value<A3>::type B3;
1055
+ typedef typename add_value<A4>::type B4;
1056
+ typedef list4<B1, B2, B3, B4> type;
1057
+ };
1058
+
1059
+ template<class A1, class A2, class A3, class A4, class A5> struct list_av_5
1060
+ {
1061
+ typedef typename add_value<A1>::type B1;
1062
+ typedef typename add_value<A2>::type B2;
1063
+ typedef typename add_value<A3>::type B3;
1064
+ typedef typename add_value<A4>::type B4;
1065
+ typedef typename add_value<A5>::type B5;
1066
+ typedef list5<B1, B2, B3, B4, B5> type;
1067
+ };
1068
+
1069
+ template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6
1070
+ {
1071
+ typedef typename add_value<A1>::type B1;
1072
+ typedef typename add_value<A2>::type B2;
1073
+ typedef typename add_value<A3>::type B3;
1074
+ typedef typename add_value<A4>::type B4;
1075
+ typedef typename add_value<A5>::type B5;
1076
+ typedef typename add_value<A6>::type B6;
1077
+ typedef list6<B1, B2, B3, B4, B5, B6> type;
1078
+ };
1079
+
1080
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7
1081
+ {
1082
+ typedef typename add_value<A1>::type B1;
1083
+ typedef typename add_value<A2>::type B2;
1084
+ typedef typename add_value<A3>::type B3;
1085
+ typedef typename add_value<A4>::type B4;
1086
+ typedef typename add_value<A5>::type B5;
1087
+ typedef typename add_value<A6>::type B6;
1088
+ typedef typename add_value<A7>::type B7;
1089
+ typedef list7<B1, B2, B3, B4, B5, B6, B7> type;
1090
+ };
1091
+
1092
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8
1093
+ {
1094
+ typedef typename add_value<A1>::type B1;
1095
+ typedef typename add_value<A2>::type B2;
1096
+ typedef typename add_value<A3>::type B3;
1097
+ typedef typename add_value<A4>::type B4;
1098
+ typedef typename add_value<A5>::type B5;
1099
+ typedef typename add_value<A6>::type B6;
1100
+ typedef typename add_value<A7>::type B7;
1101
+ typedef typename add_value<A8>::type B8;
1102
+ typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;
1103
+ };
1104
+
1105
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9
1106
+ {
1107
+ typedef typename add_value<A1>::type B1;
1108
+ typedef typename add_value<A2>::type B2;
1109
+ typedef typename add_value<A3>::type B3;
1110
+ typedef typename add_value<A4>::type B4;
1111
+ typedef typename add_value<A5>::type B5;
1112
+ typedef typename add_value<A6>::type B6;
1113
+ typedef typename add_value<A7>::type B7;
1114
+ typedef typename add_value<A8>::type B8;
1115
+ typedef typename add_value<A9>::type B9;
1116
+ typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
1117
+ };
1118
+
1119
+ // operator!
1120
+
1121
+ struct logical_not
1122
+ {
1123
+ template<class V> bool operator()(V const & v) const { return !v; }
1124
+ };
1125
+
1126
+ template<class R, class F, class L>
1127
+ bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
1128
+ operator! (bind_t<R, F, L> const & f)
1129
+ {
1130
+ typedef list1< bind_t<R, F, L> > list_type;
1131
+ return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
1132
+ }
1133
+
1134
+ // relational operators
1135
+
1136
+ #define BOOST_BIND_OPERATOR( op, name ) \
1137
+ \
1138
+ struct name \
1139
+ { \
1140
+ template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \
1141
+ }; \
1142
+ \
1143
+ template<class R, class F, class L, class A2> \
1144
+ bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \
1145
+ operator op (bind_t<R, F, L> const & f, A2 a2) \
1146
+ { \
1147
+ typedef typename add_value<A2>::type B2; \
1148
+ typedef list2< bind_t<R, F, L>, B2> list_type; \
1149
+ return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \
1150
+ }
1151
+
1152
+ BOOST_BIND_OPERATOR( ==, equal )
1153
+ BOOST_BIND_OPERATOR( !=, not_equal )
1154
+
1155
+ BOOST_BIND_OPERATOR( <, less )
1156
+ BOOST_BIND_OPERATOR( <=, less_equal )
1157
+
1158
+ BOOST_BIND_OPERATOR( >, greater )
1159
+ BOOST_BIND_OPERATOR( >=, greater_equal )
1160
+
1161
+ #undef BOOST_BIND_OPERATOR
1162
+
1163
+ #if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)
1164
+
1165
+ // resolve ambiguity with rel_ops
1166
+
1167
+ #define BOOST_BIND_OPERATOR( op, name ) \
1168
+ \
1169
+ template<class R, class F, class L> \
1170
+ bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \
1171
+ operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \
1172
+ { \
1173
+ typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \
1174
+ return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \
1175
+ }
1176
+
1177
+ BOOST_BIND_OPERATOR( !=, not_equal )
1178
+ BOOST_BIND_OPERATOR( <=, less_equal )
1179
+ BOOST_BIND_OPERATOR( >, greater )
1180
+ BOOST_BIND_OPERATOR( >=, greater_equal )
1181
+
1182
+ #endif
1183
+
1184
+ // visit_each, ADL
1185
+
1186
+ #if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \
1187
+ && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
1188
+
1189
+ template<class V, class T> void visit_each( V & v, value<T> const & t, int )
1190
+ {
1191
+ using boost::visit_each;
1192
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
1193
+ }
1194
+
1195
+ template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )
1196
+ {
1197
+ t.accept( v );
1198
+ }
1199
+
1200
+ #endif
1201
+
1202
+ } // namespace _bi
1203
+
1204
+ // visit_each, no ADL
1205
+
1206
+ #if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \
1207
+ || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
1208
+
1209
+ template<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )
1210
+ {
1211
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
1212
+ }
1213
+
1214
+ template<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )
1215
+ {
1216
+ t.accept( v );
1217
+ }
1218
+
1219
+ #endif
1220
+
1221
+ // is_bind_expression
1222
+
1223
+ template< class T > struct is_bind_expression
1224
+ {
1225
+ enum _vt { value = 0 };
1226
+ };
1227
+
1228
+ #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
1229
+
1230
+ template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > >
1231
+ {
1232
+ enum _vt { value = 1 };
1233
+ };
1234
+
1235
+ #endif
1236
+
1237
+ // bind
1238
+
1239
+ #ifndef BOOST_BIND
1240
+ #define BOOST_BIND bind
1241
+ #endif
1242
+
1243
+ // generic function objects
1244
+
1245
+ template<class R, class F>
1246
+ _bi::bind_t<R, F, _bi::list0>
1247
+ BOOST_BIND(F f)
1248
+ {
1249
+ typedef _bi::list0 list_type;
1250
+ return _bi::bind_t<R, F, list_type> (f, list_type());
1251
+ }
1252
+
1253
+ template<class R, class F, class A1>
1254
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
1255
+ BOOST_BIND(F f, A1 a1)
1256
+ {
1257
+ typedef typename _bi::list_av_1<A1>::type list_type;
1258
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
1259
+ }
1260
+
1261
+ template<class R, class F, class A1, class A2>
1262
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
1263
+ BOOST_BIND(F f, A1 a1, A2 a2)
1264
+ {
1265
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1266
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
1267
+ }
1268
+
1269
+ template<class R, class F, class A1, class A2, class A3>
1270
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
1271
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
1272
+ {
1273
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1274
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
1275
+ }
1276
+
1277
+ template<class R, class F, class A1, class A2, class A3, class A4>
1278
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1279
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
1280
+ {
1281
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1282
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
1283
+ }
1284
+
1285
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5>
1286
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1287
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1288
+ {
1289
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1290
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1291
+ }
1292
+
1293
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
1294
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1295
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1296
+ {
1297
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1298
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1299
+ }
1300
+
1301
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1302
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1303
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1304
+ {
1305
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1306
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1307
+ }
1308
+
1309
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1310
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1311
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1312
+ {
1313
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1314
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1315
+ }
1316
+
1317
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1318
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1319
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1320
+ {
1321
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1322
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1323
+ }
1324
+
1325
+ // generic function objects, alternative syntax
1326
+
1327
+ template<class R, class F>
1328
+ _bi::bind_t<R, F, _bi::list0>
1329
+ BOOST_BIND(boost::type<R>, F f)
1330
+ {
1331
+ typedef _bi::list0 list_type;
1332
+ return _bi::bind_t<R, F, list_type> (f, list_type());
1333
+ }
1334
+
1335
+ template<class R, class F, class A1>
1336
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
1337
+ BOOST_BIND(boost::type<R>, F f, A1 a1)
1338
+ {
1339
+ typedef typename _bi::list_av_1<A1>::type list_type;
1340
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
1341
+ }
1342
+
1343
+ template<class R, class F, class A1, class A2>
1344
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
1345
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)
1346
+ {
1347
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1348
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
1349
+ }
1350
+
1351
+ template<class R, class F, class A1, class A2, class A3>
1352
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
1353
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)
1354
+ {
1355
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1356
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
1357
+ }
1358
+
1359
+ template<class R, class F, class A1, class A2, class A3, class A4>
1360
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1361
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)
1362
+ {
1363
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1364
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
1365
+ }
1366
+
1367
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5>
1368
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1369
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1370
+ {
1371
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1372
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1373
+ }
1374
+
1375
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
1376
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1377
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1378
+ {
1379
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1380
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1381
+ }
1382
+
1383
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1384
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1385
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1386
+ {
1387
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1388
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1389
+ }
1390
+
1391
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1392
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1393
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1394
+ {
1395
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1396
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1397
+ }
1398
+
1399
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1400
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1401
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1402
+ {
1403
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1404
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1405
+ }
1406
+
1407
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
1408
+
1409
+ // adaptable function objects
1410
+
1411
+ template<class F>
1412
+ _bi::bind_t<_bi::unspecified, F, _bi::list0>
1413
+ BOOST_BIND(F f)
1414
+ {
1415
+ typedef _bi::list0 list_type;
1416
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());
1417
+ }
1418
+
1419
+ template<class F, class A1>
1420
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>
1421
+ BOOST_BIND(F f, A1 a1)
1422
+ {
1423
+ typedef typename _bi::list_av_1<A1>::type list_type;
1424
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));
1425
+ }
1426
+
1427
+ template<class F, class A1, class A2>
1428
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>
1429
+ BOOST_BIND(F f, A1 a1, A2 a2)
1430
+ {
1431
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1432
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));
1433
+ }
1434
+
1435
+ template<class F, class A1, class A2, class A3>
1436
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>
1437
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
1438
+ {
1439
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1440
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));
1441
+ }
1442
+
1443
+ template<class F, class A1, class A2, class A3, class A4>
1444
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1445
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
1446
+ {
1447
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1448
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));
1449
+ }
1450
+
1451
+ template<class F, class A1, class A2, class A3, class A4, class A5>
1452
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1453
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1454
+ {
1455
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1456
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1457
+ }
1458
+
1459
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6>
1460
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1461
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1462
+ {
1463
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1464
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1465
+ }
1466
+
1467
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1468
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1469
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1470
+ {
1471
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1472
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1473
+ }
1474
+
1475
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1476
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1477
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1478
+ {
1479
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1480
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1481
+ }
1482
+
1483
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1484
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1485
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1486
+ {
1487
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1488
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1489
+ }
1490
+
1491
+ #endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
1492
+
1493
+ // function pointers
1494
+
1495
+ #define BOOST_BIND_CC
1496
+ #define BOOST_BIND_ST
1497
+
1498
+ #include <boost/bind/bind_cc.hpp>
1499
+
1500
+ #undef BOOST_BIND_CC
1501
+ #undef BOOST_BIND_ST
1502
+
1503
+ #ifdef BOOST_BIND_ENABLE_STDCALL
1504
+
1505
+ #define BOOST_BIND_CC __stdcall
1506
+ #define BOOST_BIND_ST
1507
+
1508
+ #include <boost/bind/bind_cc.hpp>
1509
+
1510
+ #undef BOOST_BIND_CC
1511
+ #undef BOOST_BIND_ST
1512
+
1513
+ #endif
1514
+
1515
+ #ifdef BOOST_BIND_ENABLE_FASTCALL
1516
+
1517
+ #define BOOST_BIND_CC __fastcall
1518
+ #define BOOST_BIND_ST
1519
+
1520
+ #include <boost/bind/bind_cc.hpp>
1521
+
1522
+ #undef BOOST_BIND_CC
1523
+ #undef BOOST_BIND_ST
1524
+
1525
+ #endif
1526
+
1527
+ #ifdef BOOST_BIND_ENABLE_PASCAL
1528
+
1529
+ #define BOOST_BIND_ST pascal
1530
+ #define BOOST_BIND_CC
1531
+
1532
+ #include <boost/bind/bind_cc.hpp>
1533
+
1534
+ #undef BOOST_BIND_ST
1535
+ #undef BOOST_BIND_CC
1536
+
1537
+ #endif
1538
+
1539
+ // member function pointers
1540
+
1541
+ #define BOOST_BIND_MF_NAME(X) X
1542
+ #define BOOST_BIND_MF_CC
1543
+
1544
+ #include <boost/bind/bind_mf_cc.hpp>
1545
+
1546
+ #undef BOOST_BIND_MF_NAME
1547
+ #undef BOOST_BIND_MF_CC
1548
+
1549
+ #ifdef BOOST_MEM_FN_ENABLE_CDECL
1550
+
1551
+ #define BOOST_BIND_MF_NAME(X) X##_cdecl
1552
+ #define BOOST_BIND_MF_CC __cdecl
1553
+
1554
+ #include <boost/bind/bind_mf_cc.hpp>
1555
+
1556
+ #undef BOOST_BIND_MF_NAME
1557
+ #undef BOOST_BIND_MF_CC
1558
+
1559
+ #endif
1560
+
1561
+ #ifdef BOOST_MEM_FN_ENABLE_STDCALL
1562
+
1563
+ #define BOOST_BIND_MF_NAME(X) X##_stdcall
1564
+ #define BOOST_BIND_MF_CC __stdcall
1565
+
1566
+ #include <boost/bind/bind_mf_cc.hpp>
1567
+
1568
+ #undef BOOST_BIND_MF_NAME
1569
+ #undef BOOST_BIND_MF_CC
1570
+
1571
+ #endif
1572
+
1573
+ #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
1574
+
1575
+ #define BOOST_BIND_MF_NAME(X) X##_fastcall
1576
+ #define BOOST_BIND_MF_CC __fastcall
1577
+
1578
+ #include <boost/bind/bind_mf_cc.hpp>
1579
+
1580
+ #undef BOOST_BIND_MF_NAME
1581
+ #undef BOOST_BIND_MF_CC
1582
+
1583
+ #endif
1584
+
1585
+ // data member pointers
1586
+
1587
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
1588
+ || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, < 0x600 ) )
1589
+
1590
+ template<class R, class T, class A1>
1591
+ _bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
1592
+ BOOST_BIND(R T::*f, A1 a1)
1593
+ {
1594
+ typedef _mfi::dm<R, T> F;
1595
+ typedef typename _bi::list_av_1<A1>::type list_type;
1596
+ return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );
1597
+ }
1598
+
1599
+ #else
1600
+
1601
+ namespace _bi
1602
+ {
1603
+
1604
+ template< class Pm, int I > struct add_cref;
1605
+
1606
+ template< class M, class T > struct add_cref< M T::*, 0 >
1607
+ {
1608
+ typedef M type;
1609
+ };
1610
+
1611
+ template< class M, class T > struct add_cref< M T::*, 1 >
1612
+ {
1613
+ typedef M const & type;
1614
+ };
1615
+
1616
+ template< class R, class T > struct add_cref< R (T::*) (), 1 >
1617
+ {
1618
+ typedef void type;
1619
+ };
1620
+
1621
+ #if !( defined(__IBMCPP__) && BOOST_WORKAROUND( __IBMCPP__, BOOST_TESTED_AT(600) ) )
1622
+
1623
+ template< class R, class T > struct add_cref< R (T::*) () const, 1 >
1624
+ {
1625
+ typedef void type;
1626
+ };
1627
+
1628
+ #endif // __IBMCPP__
1629
+
1630
+ template<class R> struct isref
1631
+ {
1632
+ enum value_type { value = 0 };
1633
+ };
1634
+
1635
+ template<class R> struct isref< R& >
1636
+ {
1637
+ enum value_type { value = 1 };
1638
+ };
1639
+
1640
+ template<class R> struct isref< R* >
1641
+ {
1642
+ enum value_type { value = 1 };
1643
+ };
1644
+
1645
+ template<class Pm, class A1> struct dm_result
1646
+ {
1647
+ typedef typename add_cref< Pm, 1 >::type type;
1648
+ };
1649
+
1650
+ template<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >
1651
+ {
1652
+ typedef typename bind_t<R, F, L>::result_type result_type;
1653
+ typedef typename add_cref< Pm, isref< result_type >::value >::type type;
1654
+ };
1655
+
1656
+ } // namespace _bi
1657
+
1658
+ template< class A1, class M, class T >
1659
+
1660
+ _bi::bind_t<
1661
+ typename _bi::dm_result< M T::*, A1 >::type,
1662
+ _mfi::dm<M, T>,
1663
+ typename _bi::list_av_1<A1>::type
1664
+ >
1665
+
1666
+ BOOST_BIND( M T::*f, A1 a1 )
1667
+ {
1668
+ typedef typename _bi::dm_result< M T::*, A1 >::type result_type;
1669
+ typedef _mfi::dm<M, T> F;
1670
+ typedef typename _bi::list_av_1<A1>::type list_type;
1671
+ return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );
1672
+ }
1673
+
1674
+ #endif
1675
+
1676
+ } // namespace boost
1677
+
1678
+ #ifndef BOOST_BIND_NO_PLACEHOLDERS
1679
+
1680
+ # include <boost/bind/placeholders.hpp>
1681
+
1682
+ #endif
1683
+
1684
+ #ifdef BOOST_MSVC
1685
+ # pragma warning(default: 4512) // assignment operator could not be generated
1686
+ # pragma warning(pop)
1687
+ #endif
1688
+
1689
+ #endif // #ifndef BOOST_BIND_HPP_INCLUDED