passenger-jmazzi 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,269 @@
1
+ #ifndef DATE_DURATION_TYPES_HPP___
2
+ #define DATE_DURATION_TYPES_HPP___
3
+
4
+ /* Copyright (c) 2004 CrystalClear Software, Inc.
5
+ * Subject to the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * http://www.boost.org/LICENSE_1_0.txt)
8
+ * Author: Jeff Garland, Bart Garst
9
+ * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $
10
+ */
11
+
12
+ #include <boost/date_time/int_adapter.hpp>
13
+ #include <boost/date_time/special_defs.hpp>
14
+ #include <boost/date_time/date_duration.hpp>
15
+
16
+ namespace boost {
17
+ namespace date_time {
18
+
19
+
20
+ //! Additional duration type that represents a number of n*7 days
21
+ template <class duration_config>
22
+ class weeks_duration : public date_duration<duration_config> {
23
+ public:
24
+ weeks_duration(typename duration_config::impl_type w)
25
+ : date_duration<duration_config>(w * 7) {}
26
+ weeks_duration(special_values sv)
27
+ : date_duration<duration_config>(sv) {}
28
+ };
29
+
30
+ // predeclare
31
+ template<class t>
32
+ class years_duration;
33
+
34
+ //! additional duration type that represents a logical month
35
+ /*! A logical month enables things like: "date(2002,Mar,2) + months(2) ->
36
+ * 2002-May2". If the date is a last day-of-the-month, the result will
37
+ * also be a last-day-of-the-month.
38
+ */
39
+ template<class base_config>
40
+ class months_duration
41
+ {
42
+ private:
43
+ typedef typename base_config::int_rep int_rep;
44
+ typedef typename int_rep::int_type int_type;
45
+ typedef typename base_config::date_type date_type;
46
+ typedef typename date_type::duration_type duration_type;
47
+ typedef typename base_config::month_adjustor_type month_adjustor_type;
48
+ typedef months_duration<base_config> months_type;
49
+ typedef years_duration<base_config> years_type;
50
+ public:
51
+ months_duration(int_rep num) : _m(num) {}
52
+ months_duration(special_values sv) : _m(sv)
53
+ {
54
+ _m = int_rep::from_special(sv);
55
+ }
56
+ int_rep number_of_months() const { return _m; }
57
+ //! returns a negative duration
58
+ duration_type get_neg_offset(const date_type& d) const
59
+ {
60
+ month_adjustor_type m_adj(_m.as_number());
61
+ return duration_type(m_adj.get_neg_offset(d));
62
+ }
63
+ duration_type get_offset(const date_type& d) const
64
+ {
65
+ month_adjustor_type m_adj(_m.as_number());
66
+ return duration_type(m_adj.get_offset(d));
67
+ }
68
+ bool operator==(const months_type& rhs) const
69
+ {
70
+ return(_m == rhs._m);
71
+ }
72
+ bool operator!=(const months_type& rhs) const
73
+ {
74
+ return(_m != rhs._m);
75
+ }
76
+ months_type operator+(const months_type& rhs)const
77
+ {
78
+ return months_type(_m + rhs._m);
79
+ }
80
+ months_type& operator+=(const months_type& rhs)
81
+ {
82
+ _m = _m + rhs._m;
83
+ return *this;
84
+ }
85
+ months_type operator-(const months_type& rhs)const
86
+ {
87
+ return months_type(_m - rhs._m);
88
+ }
89
+ months_type& operator-=(const months_type& rhs)
90
+ {
91
+ _m = _m - rhs._m;
92
+ return *this;
93
+ }
94
+ months_type operator*(const int_type rhs)const
95
+ {
96
+ return months_type(_m * rhs);
97
+ }
98
+ months_type& operator*=(const int_type rhs)
99
+ {
100
+ _m = _m * rhs;
101
+ return *this;
102
+ }
103
+ months_type operator/(const int_type rhs)const
104
+ {
105
+ return months_type(_m / rhs);
106
+ }
107
+ months_type& operator/=(const int_type rhs)
108
+ {
109
+ _m = _m / rhs;
110
+ return *this;
111
+ }
112
+ months_type operator+(const years_type& y)const
113
+ {
114
+ return months_type(y.number_of_years() * 12 + _m);
115
+ }
116
+ months_type& operator+=(const years_type& y)
117
+ {
118
+ _m = y.number_of_years() * 12 + _m;
119
+ return *this;
120
+ }
121
+ months_type operator-(const years_type& y) const
122
+ {
123
+ return months_type(_m - y.number_of_years() * 12);
124
+ }
125
+ months_type& operator-=(const years_type& y)
126
+ {
127
+ _m = _m - y.number_of_years() * 12;
128
+ return *this;
129
+ }
130
+
131
+ //
132
+ friend date_type operator+(const date_type& d, const months_type& m)
133
+ {
134
+ return d + m.get_offset(d);
135
+ }
136
+ friend date_type operator+=(date_type& d, const months_type& m)
137
+ {
138
+ return d += m.get_offset(d);
139
+ }
140
+ friend date_type operator-(const date_type& d, const months_type& m)
141
+ {
142
+ // get_neg_offset returns a negative duration, so we add
143
+ return d + m.get_neg_offset(d);
144
+ }
145
+ friend date_type operator-=(date_type& d, const months_type& m)
146
+ {
147
+ // get_neg_offset returns a negative duration, so we add
148
+ return d += m.get_neg_offset(d);
149
+ }
150
+
151
+ private:
152
+ int_rep _m;
153
+ };
154
+
155
+ //! additional duration type that represents a logical year
156
+ /*! A logical year enables things like: "date(2002,Mar,2) + years(2) ->
157
+ * 2004-Mar-2". If the date is a last day-of-the-month, the result will
158
+ * also be a last-day-of-the-month (ie date(2001-Feb-28) + years(3) ->
159
+ * 2004-Feb-29).
160
+ */
161
+ template<class base_config>
162
+ class years_duration
163
+ {
164
+ private:
165
+ typedef typename base_config::int_rep int_rep;
166
+ typedef typename int_rep::int_type int_type;
167
+ typedef typename base_config::date_type date_type;
168
+ typedef typename date_type::duration_type duration_type;
169
+ typedef typename base_config::month_adjustor_type month_adjustor_type;
170
+ typedef years_duration<base_config> years_type;
171
+ typedef months_duration<base_config> months_type;
172
+ public:
173
+ years_duration(int_rep num) : _y(num) {}
174
+ years_duration(special_values sv) : _y(sv)
175
+ {
176
+ _y = int_rep::from_special(sv);
177
+ }
178
+ int_rep number_of_years() const { return _y; }
179
+ //! returns a negative duration
180
+ duration_type get_neg_offset(const date_type& d) const
181
+ {
182
+ month_adjustor_type m_adj(_y.as_number() * 12);
183
+ return duration_type(m_adj.get_neg_offset(d));
184
+ }
185
+ duration_type get_offset(const date_type& d) const
186
+ {
187
+ month_adjustor_type m_adj(_y.as_number() * 12);
188
+ return duration_type(m_adj.get_offset(d));
189
+ }
190
+ bool operator==(const years_type& rhs) const
191
+ {
192
+ return(_y == rhs._y);
193
+ }
194
+ bool operator!=(const years_type& rhs) const
195
+ {
196
+ return(_y != rhs._y);
197
+ }
198
+ years_type operator+(const years_type& rhs)const
199
+ {
200
+ return years_type(_y + rhs._y);
201
+ }
202
+ years_type& operator+=(const years_type& rhs)
203
+ {
204
+ _y = _y + rhs._y;
205
+ return *this;
206
+ }
207
+ years_type operator-(const years_type& rhs)const
208
+ {
209
+ return years_type(_y - rhs._y);
210
+ }
211
+ years_type& operator-=(const years_type& rhs)
212
+ {
213
+ _y = _y - rhs._y;
214
+ return *this;
215
+ }
216
+ years_type operator*(const int_type rhs)const
217
+ {
218
+ return years_type(_y * rhs);
219
+ }
220
+ years_type& operator*=(const int_type rhs)
221
+ {
222
+ _y = _y * rhs;
223
+ return *this;
224
+ }
225
+ years_type operator/(const int_type rhs)const
226
+ {
227
+ return years_type(_y / rhs);
228
+ }
229
+ years_type& operator/=(const int_type rhs)
230
+ {
231
+ _y = _y / rhs;
232
+ return *this;
233
+ }
234
+ months_type operator+(const months_type& m) const
235
+ {
236
+ return(months_type(_y * 12 + m.number_of_months()));
237
+ }
238
+ months_type operator-(const months_type& m) const
239
+ {
240
+ return(months_type(_y * 12 - m.number_of_months()));
241
+ }
242
+
243
+ //
244
+ friend date_type operator+(const date_type& d, const years_type& y)
245
+ {
246
+ return d + y.get_offset(d);
247
+ }
248
+ friend date_type operator+=(date_type& d, const years_type& y)
249
+ {
250
+ return d += y.get_offset(d);
251
+ }
252
+ friend date_type operator-(const date_type& d, const years_type& y)
253
+ {
254
+ // get_neg_offset returns a negative duration, so we add
255
+ return d + y.get_neg_offset(d);
256
+ }
257
+ friend date_type operator-=(date_type& d, const years_type& y)
258
+ {
259
+ // get_neg_offset returns a negative duration, so we add
260
+ return d += y.get_neg_offset(d);
261
+ }
262
+
263
+ private:
264
+ int_rep _y;
265
+ };
266
+
267
+ }} // namespace boost::date_time
268
+
269
+ #endif // DATE_DURATION_TYPES_HPP___
@@ -0,0 +1,775 @@
1
+ #ifndef _DATE_TIME_DATE_FACET__HPP___
2
+ #define _DATE_TIME_DATE_FACET__HPP___
3
+
4
+ /* Copyright (c) 2004-2005 CrystalClear Software, Inc.
5
+ * Use, modification and distribution is subject to the
6
+ * Boost Software License, Version 1.0. (See accompanying
7
+ * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8
+ * Author: Martin Andrian, Jeff Garland, Bart Garst
9
+ * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $
10
+ */
11
+
12
+
13
+ #include "boost/algorithm/string/replace.hpp"
14
+ #include "boost/date_time/period.hpp"
15
+ #include "boost/date_time/special_values_formatter.hpp"
16
+ #include "boost/date_time/period_formatter.hpp"
17
+ #include "boost/date_time/period_parser.hpp"
18
+ #include "boost/date_time/date_generator_formatter.hpp"
19
+ #include "boost/date_time/date_generator_parser.hpp"
20
+ #include "boost/date_time/format_date_parser.hpp"
21
+ #include <string>
22
+ #include <vector>
23
+
24
+ namespace boost { namespace date_time {
25
+
26
+
27
+ /*! Class that provides format based I/O facet for date types.
28
+ *
29
+ * This class allows the formatting of dates by using format string.
30
+ * Format strings are:
31
+ *
32
+ * - %A => long_weekday_format - Full name Ex: Tuesday
33
+ * - %a => short_weekday_format - Three letter abbreviation Ex: Tue
34
+ * - %B => long_month_format - Full name Ex: October
35
+ * - %b => short_month_format - Three letter abbreviation Ex: Oct
36
+ * - %x => standard_format_specifier - defined by the locale
37
+ * - %Y-%b-%d => default_date_format - YYYY-Mon-dd
38
+ *
39
+ * Default month format == %b
40
+ * Default weekday format == %a
41
+ */
42
+ template <class date_type,
43
+ class CharT,
44
+ class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
45
+ class date_facet : public std::locale::facet {
46
+ public:
47
+ typedef typename date_type::duration_type duration_type;
48
+ // greg_weekday is gregorian_calendar::day_of_week_type
49
+ typedef typename date_type::day_of_week_type day_of_week_type;
50
+ typedef typename date_type::day_type day_type;
51
+ typedef typename date_type::month_type month_type;
52
+ typedef boost::date_time::period<date_type,duration_type> period_type;
53
+ typedef std::basic_string<CharT> string_type;
54
+ typedef CharT char_type;
55
+ typedef boost::date_time::period_formatter<CharT> period_formatter_type;
56
+ typedef boost::date_time::special_values_formatter<CharT> special_values_formatter_type;
57
+ typedef std::vector<std::basic_string<CharT> > input_collection_type;
58
+ // used for the output of the date_generators
59
+ typedef date_generator_formatter<date_type, CharT> date_gen_formatter_type;
60
+ typedef partial_date<date_type> partial_date_type;
61
+ typedef nth_kday_of_month<date_type> nth_kday_type;
62
+ typedef first_kday_of_month<date_type> first_kday_type;
63
+ typedef last_kday_of_month<date_type> last_kday_type;
64
+ typedef first_kday_after<date_type> kday_after_type;
65
+ typedef first_kday_before<date_type> kday_before_type;
66
+ static const char_type long_weekday_format[3];
67
+ static const char_type short_weekday_format[3];
68
+ static const char_type long_month_format[3];
69
+ static const char_type short_month_format[3];
70
+ static const char_type default_period_separator[4];
71
+ static const char_type standard_format_specifier[3];
72
+ static const char_type iso_format_specifier[7];
73
+ static const char_type iso_format_extended_specifier[9];
74
+ static const char_type default_date_format[9]; // YYYY-Mon-DD
75
+ static std::locale::id id;
76
+
77
+ #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
78
+ std::locale::id& __get_id (void) const { return id; }
79
+ #endif
80
+
81
+ explicit date_facet(::size_t a_ref = 0)
82
+ : std::locale::facet(a_ref),
83
+ //m_format(standard_format_specifier)
84
+ m_format(default_date_format),
85
+ m_month_format(short_month_format),
86
+ m_weekday_format(short_weekday_format)
87
+ {}
88
+
89
+ explicit date_facet(const char_type* format_str,
90
+ const input_collection_type& short_names,
91
+ ::size_t ref_count = 0)
92
+ : std::locale::facet(ref_count),
93
+ m_format(format_str),
94
+ m_month_format(short_month_format),
95
+ m_weekday_format(short_weekday_format),
96
+ m_month_short_names(short_names)
97
+ {}
98
+
99
+
100
+ explicit date_facet(const char_type* format_str,
101
+ period_formatter_type per_formatter = period_formatter_type(),
102
+ special_values_formatter_type sv_formatter = special_values_formatter_type(),
103
+ date_gen_formatter_type dg_formatter = date_gen_formatter_type(),
104
+ ::size_t ref_count = 0)
105
+ : std::locale::facet(ref_count),
106
+ m_format(format_str),
107
+ m_month_format(short_month_format),
108
+ m_weekday_format(short_weekday_format),
109
+ m_period_formatter(per_formatter),
110
+ m_date_gen_formatter(dg_formatter),
111
+ m_special_values_formatter(sv_formatter)
112
+ {}
113
+ void format(const char_type* const format_str) {
114
+ m_format = format_str;
115
+ }
116
+ virtual void set_iso_format()
117
+ {
118
+ m_format = iso_format_specifier;
119
+ }
120
+ virtual void set_iso_extended_format()
121
+ {
122
+ m_format = iso_format_extended_specifier;
123
+ }
124
+ void month_format(const char_type* const format_str) {
125
+ m_month_format = format_str;
126
+ }
127
+ void weekday_format(const char_type* const format_str) {
128
+ m_weekday_format = format_str;
129
+ }
130
+
131
+ void period_formatter(period_formatter_type per_formatter) {
132
+ m_period_formatter= per_formatter;
133
+ }
134
+ void special_values_formatter(const special_values_formatter_type& svf)
135
+ {
136
+ m_special_values_formatter = svf;
137
+ }
138
+ void short_weekday_names(const input_collection_type& short_names)
139
+ {
140
+ m_weekday_short_names = short_names;
141
+ }
142
+ void long_weekday_names(const input_collection_type& long_names)
143
+ {
144
+ m_weekday_long_names = long_names;
145
+ }
146
+
147
+ void short_month_names(const input_collection_type& short_names)
148
+ {
149
+ m_month_short_names = short_names;
150
+ }
151
+
152
+ void long_month_names(const input_collection_type& long_names)
153
+ {
154
+ m_month_long_names = long_names;
155
+ }
156
+
157
+ void date_gen_phrase_strings(const input_collection_type& new_strings,
158
+ typename date_gen_formatter_type::phrase_elements beg_pos=date_gen_formatter_type::first)
159
+ {
160
+ m_date_gen_formatter.elements(new_strings, beg_pos);
161
+ }
162
+
163
+ OutItrT put(OutItrT next,
164
+ std::ios_base& a_ios,
165
+ char_type fill_char,
166
+ const date_type& d) const
167
+ {
168
+ if (d.is_special()) {
169
+ return do_put_special(next, a_ios, fill_char, d.as_special());
170
+ }
171
+ //The following line of code required the date to support a to_tm function
172
+ return do_put_tm(next, a_ios, fill_char, to_tm(d), m_format);
173
+ }
174
+
175
+ OutItrT put(OutItrT next,
176
+ std::ios_base& a_ios,
177
+ char_type fill_char,
178
+ const duration_type& dd) const
179
+ {
180
+ if (dd.is_special()) {
181
+ return do_put_special(next, a_ios, fill_char, dd.get_rep().as_special());
182
+ }
183
+
184
+ typedef std::num_put<CharT, OutItrT> num_put;
185
+ if (std::has_facet<num_put>(a_ios.getloc())) {
186
+ return std::use_facet<num_put>(a_ios.getloc()).put(next, a_ios, fill_char, dd.get_rep().as_number());
187
+ }
188
+ else {
189
+ num_put* f = new num_put();
190
+ std::locale l = std::locale(a_ios.getloc(), f);
191
+ a_ios.imbue(l);
192
+ return f->put(next, a_ios, fill_char, dd.get_rep().as_number());
193
+ }
194
+
195
+ }
196
+
197
+
198
+ OutItrT put(OutItrT next,
199
+ std::ios_base& a_ios,
200
+ char_type fill_char,
201
+ const month_type& m) const
202
+ {
203
+ //if (d.is_special()) {
204
+ // return do_put_special(next, a_ios, fill_char, d.as_special());
205
+ //}
206
+ //The following line of code required the date to support a to_tm function
207
+ tm dtm;
208
+ init_tm(dtm);
209
+ dtm.tm_mon = m -1;
210
+ return do_put_tm(next, a_ios, fill_char, dtm, m_month_format);
211
+ }
212
+
213
+ //! puts the day of month
214
+ OutItrT put(OutItrT next,
215
+ std::ios_base& a_ios,
216
+ char_type fill_char,
217
+ const day_type& day) const
218
+ {
219
+ tm dtm;
220
+ init_tm(dtm);
221
+ dtm.tm_mday = day.as_number();
222
+ char_type tmp[3] = {'%','d'};
223
+ string_type temp_format(tmp);
224
+ return do_put_tm(next, a_ios, fill_char, dtm, temp_format);
225
+ }
226
+
227
+ OutItrT put(OutItrT next,
228
+ std::ios_base& a_ios,
229
+ char_type fill_char,
230
+ const day_of_week_type& dow) const
231
+ {
232
+ //if (d.is_special()) {
233
+ // return do_put_special(next, a_ios, fill_char, d.as_special());
234
+ //}
235
+ //The following line of code required the date to support a to_tm function
236
+ tm dtm;
237
+ init_tm(dtm);
238
+ dtm.tm_wday = dow;
239
+ return do_put_tm(next, a_ios, fill_char, dtm, m_weekday_format);
240
+ }
241
+
242
+
243
+ OutItrT put(OutItrT next,
244
+ std::ios_base& a_ios,
245
+ char_type fill_char,
246
+ const period_type& p) const
247
+ {
248
+ return m_period_formatter.put_period(next, a_ios, fill_char, p, *this);
249
+ }
250
+
251
+ OutItrT put(OutItrT next,
252
+ std::ios_base& a_ios,
253
+ char_type fill_char,
254
+ const partial_date_type& pd) const
255
+ {
256
+ return m_date_gen_formatter.put_partial_date(next, a_ios, fill_char, pd, *this);
257
+ }
258
+
259
+ OutItrT put(OutItrT next,
260
+ std::ios_base& a_ios,
261
+ char_type fill_char,
262
+ const nth_kday_type& nkd) const
263
+ {
264
+ return m_date_gen_formatter.put_nth_kday(next, a_ios, fill_char, nkd, *this);
265
+ }
266
+
267
+ OutItrT put(OutItrT next,
268
+ std::ios_base& a_ios,
269
+ char_type fill_char,
270
+ const first_kday_type& fkd) const
271
+ {
272
+ return m_date_gen_formatter.put_first_kday(next, a_ios, fill_char, fkd, *this);
273
+ }
274
+
275
+ OutItrT put(OutItrT next,
276
+ std::ios_base& a_ios,
277
+ char_type fill_char,
278
+ const last_kday_type& lkd) const
279
+ {
280
+ return m_date_gen_formatter.put_last_kday(next, a_ios, fill_char, lkd, *this);
281
+ }
282
+
283
+ OutItrT put(OutItrT next,
284
+ std::ios_base& a_ios,
285
+ char_type fill_char,
286
+ const kday_before_type& fkb) const
287
+ {
288
+ return m_date_gen_formatter.put_kday_before(next, a_ios, fill_char, fkb, *this);
289
+ }
290
+
291
+ OutItrT put(OutItrT next,
292
+ std::ios_base& a_ios,
293
+ char_type fill_char,
294
+ const kday_after_type& fka) const
295
+ {
296
+ return m_date_gen_formatter.put_kday_after(next, a_ios, fill_char, fka, *this);
297
+ }
298
+
299
+ protected:
300
+ //! Helper function to initialize all fields in a tm struct
301
+ tm init_tm(tm& tm_value) const
302
+ {
303
+ tm_value.tm_sec = 0; /* seconds */
304
+ tm_value.tm_min = 0; /* minutes */
305
+ tm_value.tm_hour = 0; /* hours */
306
+ tm_value.tm_mday = 0; /* day of the month */
307
+ tm_value.tm_mon = 0; /* month */
308
+ tm_value.tm_year = 0; /* year */
309
+ tm_value.tm_wday = 0; /* day of the week */
310
+ tm_value.tm_yday = 0; /* day in the year */
311
+ tm_value.tm_isdst = 0; /* daylight saving time */
312
+ return tm_value;
313
+ }
314
+ virtual OutItrT do_put_special(OutItrT next,
315
+ std::ios_base& /*a_ios*/,
316
+ char_type /*fill_char*/,
317
+ const boost::date_time::special_values sv) const
318
+ {
319
+ m_special_values_formatter.put_special(next, sv);
320
+ return next;
321
+ }
322
+ virtual OutItrT do_put_tm(OutItrT next,
323
+ std::ios_base& a_ios,
324
+ char_type fill_char,
325
+ const tm& tm_value,
326
+ string_type a_format) const
327
+ {
328
+ // update format string with custom names
329
+ if (m_weekday_long_names.size()) {
330
+ boost::algorithm::replace_all(a_format,
331
+ long_weekday_format,
332
+ m_weekday_long_names[tm_value.tm_wday]);
333
+ }
334
+ if (m_weekday_short_names.size()) {
335
+ boost::algorithm::replace_all(a_format,
336
+ short_weekday_format,
337
+ m_weekday_short_names[tm_value.tm_wday]);
338
+
339
+ }
340
+ if (m_month_long_names.size()) {
341
+ boost::algorithm::replace_all(a_format,
342
+ long_month_format,
343
+ m_month_long_names[tm_value.tm_mon]);
344
+ }
345
+ if (m_month_short_names.size()) {
346
+ boost::algorithm::replace_all(a_format,
347
+ short_month_format,
348
+ m_month_short_names[tm_value.tm_mon]);
349
+ }
350
+ // use time_put facet to create final string
351
+ return std::use_facet<std::time_put<CharT> >(a_ios.getloc()).put(next, a_ios,
352
+ fill_char,
353
+ &tm_value,
354
+ &*a_format.begin(),
355
+ &*a_format.begin()+a_format.size());
356
+ }
357
+ protected:
358
+ string_type m_format;
359
+ string_type m_month_format;
360
+ string_type m_weekday_format;
361
+ period_formatter_type m_period_formatter;
362
+ date_gen_formatter_type m_date_gen_formatter;
363
+ special_values_formatter_type m_special_values_formatter;
364
+ input_collection_type m_month_short_names;
365
+ input_collection_type m_month_long_names;
366
+ input_collection_type m_weekday_short_names;
367
+ input_collection_type m_weekday_long_names;
368
+ private:
369
+ };
370
+
371
+ template <class date_type, class CharT, class OutItrT>
372
+ std::locale::id date_facet<date_type, CharT, OutItrT>::id;
373
+
374
+ template <class date_type, class CharT, class OutItrT>
375
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
376
+ date_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
377
+
378
+ template <class date_type, class CharT, class OutItrT>
379
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
380
+ date_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
381
+
382
+ template <class date_type, class CharT, class OutItrT>
383
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
384
+ date_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
385
+
386
+ template <class date_type, class CharT, class OutItrT>
387
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
388
+ date_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
389
+
390
+ template <class date_type, class CharT, class OutItrT>
391
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
392
+ date_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
393
+
394
+ template <class date_type, class CharT, class OutItrT>
395
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
396
+ date_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
397
+ {'%', 'x' };
398
+
399
+ template <class date_type, class CharT, class OutItrT>
400
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
401
+ date_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
402
+ {'%', 'Y', '%', 'm', '%', 'd' };
403
+
404
+ template <class date_type, class CharT, class OutItrT>
405
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
406
+ date_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
407
+ {'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
408
+
409
+ template <class date_type, class CharT, class OutItrT>
410
+ const typename date_facet<date_type, CharT, OutItrT>::char_type
411
+ date_facet<date_type, CharT, OutItrT>::default_date_format[9] =
412
+ {'%','Y','-','%','b','-','%','d'};
413
+
414
+
415
+
416
+ //! Input facet
417
+ template <class date_type,
418
+ class CharT,
419
+ class InItrT = std::istreambuf_iterator<CharT, std::char_traits<CharT> > >
420
+ class date_input_facet : public std::locale::facet {
421
+ public:
422
+ typedef typename date_type::duration_type duration_type;
423
+ // greg_weekday is gregorian_calendar::day_of_week_type
424
+ typedef typename date_type::day_of_week_type day_of_week_type;
425
+ typedef typename date_type::day_type day_type;
426
+ typedef typename date_type::month_type month_type;
427
+ typedef typename date_type::year_type year_type;
428
+ typedef boost::date_time::period<date_type,duration_type> period_type;
429
+ typedef std::basic_string<CharT> string_type;
430
+ typedef CharT char_type;
431
+ typedef boost::date_time::period_parser<date_type, CharT> period_parser_type;
432
+ typedef boost::date_time::special_values_parser<date_type,CharT> special_values_parser_type;
433
+ typedef std::vector<std::basic_string<CharT> > input_collection_type;
434
+ typedef format_date_parser<date_type, CharT> format_date_parser_type;
435
+ // date_generators stuff goes here
436
+ typedef date_generator_parser<date_type, CharT> date_gen_parser_type;
437
+ typedef partial_date<date_type> partial_date_type;
438
+ typedef nth_kday_of_month<date_type> nth_kday_type;
439
+ typedef first_kday_of_month<date_type> first_kday_type;
440
+ typedef last_kday_of_month<date_type> last_kday_type;
441
+ typedef first_kday_after<date_type> kday_after_type;
442
+ typedef first_kday_before<date_type> kday_before_type;
443
+
444
+ static const char_type long_weekday_format[3];
445
+ static const char_type short_weekday_format[3];
446
+ static const char_type long_month_format[3];
447
+ static const char_type short_month_format[3];
448
+ static const char_type four_digit_year_format[3];
449
+ static const char_type two_digit_year_format[3];
450
+ static const char_type default_period_separator[4];
451
+ static const char_type standard_format_specifier[3];
452
+ static const char_type iso_format_specifier[7];
453
+ static const char_type iso_format_extended_specifier[9];
454
+ static const char_type default_date_format[9]; // YYYY-Mon-DD
455
+ static std::locale::id id;
456
+
457
+ explicit date_input_facet(::size_t a_ref = 0)
458
+ : std::locale::facet(a_ref),
459
+ m_format(default_date_format),
460
+ m_month_format(short_month_format),
461
+ m_weekday_format(short_weekday_format),
462
+ m_year_format(four_digit_year_format),
463
+ m_parser(m_format, std::locale::classic())
464
+ // default period_parser & special_values_parser used
465
+ {}
466
+
467
+ explicit date_input_facet(const string_type& format_str,
468
+ ::size_t a_ref = 0)
469
+ : std::locale::facet(a_ref),
470
+ m_format(format_str),
471
+ m_month_format(short_month_format),
472
+ m_weekday_format(short_weekday_format),
473
+ m_year_format(four_digit_year_format),
474
+ m_parser(m_format, std::locale::classic())
475
+ // default period_parser & special_values_parser used
476
+ {}
477
+
478
+ explicit date_input_facet(const string_type& format_str,
479
+ const format_date_parser_type& date_parser,
480
+ const special_values_parser_type& sv_parser,
481
+ const period_parser_type& per_parser,
482
+ const date_gen_parser_type& date_gen_parser,
483
+ ::size_t ref_count = 0)
484
+ : std::locale::facet(ref_count),
485
+ m_format(format_str),
486
+ m_month_format(short_month_format),
487
+ m_weekday_format(short_weekday_format),
488
+ m_year_format(four_digit_year_format),
489
+ m_parser(date_parser),
490
+ m_date_gen_parser(date_gen_parser),
491
+ m_period_parser(per_parser),
492
+ m_sv_parser(sv_parser)
493
+ {}
494
+
495
+
496
+ void format(const char_type* const format_str) {
497
+ m_format = format_str;
498
+ }
499
+ virtual void set_iso_format()
500
+ {
501
+ m_format = iso_format_specifier;
502
+ }
503
+ virtual void set_iso_extended_format()
504
+ {
505
+ m_format = iso_format_extended_specifier;
506
+ }
507
+ void month_format(const char_type* const format_str) {
508
+ m_month_format = format_str;
509
+ }
510
+ void weekday_format(const char_type* const format_str) {
511
+ m_weekday_format = format_str;
512
+ }
513
+ void year_format(const char_type* const format_str) {
514
+ m_year_format = format_str;
515
+ }
516
+
517
+ void period_parser(period_parser_type per_parser) {
518
+ m_period_parser = per_parser;
519
+ }
520
+ void short_weekday_names(const input_collection_type& weekday_names)
521
+ {
522
+ m_parser.short_weekday_names(weekday_names);
523
+ }
524
+ void long_weekday_names(const input_collection_type& weekday_names)
525
+ {
526
+ m_parser.long_weekday_names(weekday_names);
527
+ }
528
+
529
+ void short_month_names(const input_collection_type& month_names)
530
+ {
531
+ m_parser.short_month_names(month_names);
532
+ }
533
+
534
+ void long_month_names(const input_collection_type& month_names)
535
+ {
536
+ m_parser.long_month_names(month_names);
537
+ }
538
+
539
+ void date_gen_element_strings(const input_collection_type& col)
540
+ {
541
+ m_date_gen_parser.element_strings(col);
542
+ }
543
+ void date_gen_element_strings(const string_type& first,
544
+ const string_type& second,
545
+ const string_type& third,
546
+ const string_type& fourth,
547
+ const string_type& fifth,
548
+ const string_type& last,
549
+ const string_type& before,
550
+ const string_type& after,
551
+ const string_type& of)
552
+
553
+ {
554
+ m_date_gen_parser.element_strings(first,second,third,fourth,fifth,last,before,after,of);
555
+ }
556
+
557
+ void special_values_parser(special_values_parser_type sv_parser)
558
+ {
559
+ m_sv_parser = sv_parser;
560
+ }
561
+
562
+ InItrT get(InItrT& from,
563
+ InItrT& to,
564
+ std::ios_base& /*a_ios*/,
565
+ date_type& d) const
566
+ {
567
+ d = m_parser.parse_date(from, to, m_format, m_sv_parser);
568
+ return from;
569
+ }
570
+ InItrT get(InItrT& from,
571
+ InItrT& to,
572
+ std::ios_base& /*a_ios*/,
573
+ month_type& m) const
574
+ {
575
+ m = m_parser.parse_month(from, to, m_month_format);
576
+ return from;
577
+ }
578
+ InItrT get(InItrT& from,
579
+ InItrT& to,
580
+ std::ios_base& /*a_ios*/,
581
+ day_of_week_type& wd) const
582
+ {
583
+ wd = m_parser.parse_weekday(from, to, m_weekday_format);
584
+ return from;
585
+ }
586
+ //! Expects 1 or 2 digit day range: 1-31
587
+ InItrT get(InItrT& from,
588
+ InItrT& to,
589
+ std::ios_base& /*a_ios*/,
590
+ day_type& d) const
591
+ {
592
+ d = m_parser.parse_var_day_of_month(from, to);
593
+ return from;
594
+ }
595
+ InItrT get(InItrT& from,
596
+ InItrT& to,
597
+ std::ios_base& /*a_ios*/,
598
+ year_type& y) const
599
+ {
600
+ y = m_parser.parse_year(from, to, m_year_format);
601
+ return from;
602
+ }
603
+ InItrT get(InItrT& from,
604
+ InItrT& to,
605
+ std::ios_base& a_ios,
606
+ duration_type& dd) const
607
+ {
608
+ // skip leading whitespace
609
+ while(std::isspace(*from) && from != to) { ++from; }
610
+
611
+ /* num_get.get() will always consume the first character if it
612
+ * is a sign indicator (+/-). Special value strings may begin
613
+ * with one of these signs so we'll need a copy of it
614
+ * in case num_get.get() fails. */
615
+ char_type c = '\0';
616
+ // TODO Are these characters somewhere in the locale?
617
+ if(*from == '-' || *from == '+') {
618
+ c = *from;
619
+ }
620
+ typedef std::num_get<CharT, InItrT> num_get;
621
+ typename duration_type::duration_rep_type val = 0;
622
+ std::ios_base::iostate err = std::ios_base::goodbit;
623
+
624
+ if (std::has_facet<num_get>(a_ios.getloc())) {
625
+ from = std::use_facet<num_get>(a_ios.getloc()).get(from, to, a_ios, err, val);
626
+ }
627
+ else {
628
+ num_get* ng = new num_get();
629
+ std::locale l = std::locale(a_ios.getloc(), ng);
630
+ a_ios.imbue(l);
631
+ from = ng->get(from, to, a_ios, err, val);
632
+ }
633
+ if(err & std::ios_base::failbit){
634
+ typedef typename special_values_parser_type::match_results match_results;
635
+ match_results mr;
636
+ if(c == '-' || c == '+') { // was the first character consumed?
637
+ mr.cache += c;
638
+ }
639
+ m_sv_parser.match(from, to, mr);
640
+ if(mr.current_match == match_results::PARSE_ERROR) {
641
+ throw std::ios_base::failure("Parse failed. No match found for '" + mr.cache + "'");
642
+ }
643
+ dd = duration_type(static_cast<special_values>(mr.current_match));
644
+ }
645
+ else {
646
+ dd = duration_type(val);
647
+ }
648
+ return from;
649
+ }
650
+ InItrT get(InItrT& from,
651
+ InItrT& to,
652
+ std::ios_base& a_ios,
653
+ period_type& p) const
654
+ {
655
+ p = m_period_parser.get_period(from, to, a_ios, p, duration_type::unit(), *this);
656
+ return from;
657
+ }
658
+ InItrT get(InItrT& from,
659
+ InItrT& to,
660
+ std::ios_base& a_ios,
661
+ nth_kday_type& nkd) const
662
+ {
663
+ nkd = m_date_gen_parser.get_nth_kday_type(from, to, a_ios, *this);
664
+ return from;
665
+ }
666
+ InItrT get(InItrT& from,
667
+ InItrT& to,
668
+ std::ios_base& a_ios,
669
+ partial_date_type& pd) const
670
+ {
671
+
672
+ pd = m_date_gen_parser.get_partial_date_type(from, to, a_ios, *this);
673
+ return from;
674
+ }
675
+ InItrT get(InItrT& from,
676
+ InItrT& to,
677
+ std::ios_base& a_ios,
678
+ first_kday_type& fkd) const
679
+ {
680
+ fkd = m_date_gen_parser.get_first_kday_type(from, to, a_ios, *this);
681
+ return from;
682
+ }
683
+ InItrT get(InItrT& from,
684
+ InItrT& to,
685
+ std::ios_base& a_ios,
686
+ last_kday_type& lkd) const
687
+ {
688
+ lkd = m_date_gen_parser.get_last_kday_type(from, to, a_ios, *this);
689
+ return from;
690
+ }
691
+ InItrT get(InItrT& from,
692
+ InItrT& to,
693
+ std::ios_base& a_ios,
694
+ kday_before_type& fkb) const
695
+ {
696
+ fkb = m_date_gen_parser.get_kday_before_type(from, to, a_ios, *this);
697
+ return from;
698
+ }
699
+ InItrT get(InItrT& from,
700
+ InItrT& to,
701
+ std::ios_base& a_ios,
702
+ kday_after_type& fka) const
703
+ {
704
+ fka = m_date_gen_parser.get_kday_after_type(from, to, a_ios, *this);
705
+ return from;
706
+ }
707
+
708
+ protected:
709
+ string_type m_format;
710
+ string_type m_month_format;
711
+ string_type m_weekday_format;
712
+ string_type m_year_format;
713
+ format_date_parser_type m_parser;
714
+ date_gen_parser_type m_date_gen_parser;
715
+ period_parser_type m_period_parser;
716
+ special_values_parser_type m_sv_parser;
717
+ private:
718
+ };
719
+
720
+
721
+ template <class date_type, class CharT, class OutItrT>
722
+ std::locale::id date_input_facet<date_type, CharT, OutItrT>::id;
723
+
724
+ template <class date_type, class CharT, class OutItrT>
725
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
726
+ date_input_facet<date_type, CharT, OutItrT>::long_weekday_format[3] = {'%','A'};
727
+
728
+ template <class date_type, class CharT, class OutItrT>
729
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
730
+ date_input_facet<date_type, CharT, OutItrT>::short_weekday_format[3] = {'%','a'};
731
+
732
+ template <class date_type, class CharT, class OutItrT>
733
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
734
+ date_input_facet<date_type, CharT, OutItrT>::long_month_format[3] = {'%','B'};
735
+
736
+ template <class date_type, class CharT, class OutItrT>
737
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
738
+ date_input_facet<date_type, CharT, OutItrT>::short_month_format[3] = {'%','b'};
739
+
740
+ template <class date_type, class CharT, class OutItrT>
741
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
742
+ date_input_facet<date_type, CharT, OutItrT>::four_digit_year_format[3] = {'%','Y'};
743
+
744
+ template <class date_type, class CharT, class OutItrT>
745
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
746
+ date_input_facet<date_type, CharT, OutItrT>::two_digit_year_format[3] = {'%','y'};
747
+
748
+ template <class date_type, class CharT, class OutItrT>
749
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
750
+ date_input_facet<date_type, CharT, OutItrT>::default_period_separator[4] = { ' ', '/', ' '};
751
+
752
+ template <class date_type, class CharT, class OutItrT>
753
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
754
+ date_input_facet<date_type, CharT, OutItrT>::standard_format_specifier[3] =
755
+ {'%', 'x' };
756
+
757
+ template <class date_type, class CharT, class OutItrT>
758
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
759
+ date_input_facet<date_type, CharT, OutItrT>::iso_format_specifier[7] =
760
+ {'%', 'Y', '%', 'm', '%', 'd' };
761
+
762
+ template <class date_type, class CharT, class OutItrT>
763
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
764
+ date_input_facet<date_type, CharT, OutItrT>::iso_format_extended_specifier[9] =
765
+ {'%', 'Y', '-', '%', 'm', '-', '%', 'd' };
766
+
767
+ template <class date_type, class CharT, class OutItrT>
768
+ const typename date_input_facet<date_type, CharT, OutItrT>::char_type
769
+ date_input_facet<date_type, CharT, OutItrT>::default_date_format[9] =
770
+ {'%','Y','-','%','b','-','%','d'};
771
+
772
+ } } // namespaces
773
+
774
+
775
+ #endif