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.
- data/INSTALL +6 -0
- data/LICENSE +19 -0
- data/NEWS +270 -0
- data/README +45 -0
- data/Rakefile +918 -0
- data/benchmark/ApplicationPool.cpp +52 -0
- data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
- data/benchmark/dispatcher.rb +42 -0
- data/benchmark/overhead_of_password_checking.rb +81 -0
- data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
- data/benchmark/unix_sockets_vs_pipes.rb +83 -0
- data/bin/passenger-config +46 -0
- data/bin/passenger-install-apache2-module +224 -0
- data/bin/passenger-install-nginx-module +474 -0
- data/bin/passenger-make-enterprisey +83 -0
- data/bin/passenger-memory-stats +301 -0
- data/bin/passenger-spawn-server +68 -0
- data/bin/passenger-status +125 -0
- data/bin/passenger-stress-test +344 -0
- data/debian/compat +1 -0
- data/debian/control +21 -0
- data/debian/postinst +24 -0
- data/debian/prerm +2 -0
- data/doc/ApplicationPool algorithm.txt +402 -0
- data/doc/Architectural overview.txt +334 -0
- data/doc/Doxyfile +241 -0
- data/doc/Security of user switching support.txt +197 -0
- data/doc/Users guide Apache.txt +1848 -0
- data/doc/Users guide Nginx.txt +769 -0
- data/doc/definitions.h +5 -0
- data/doc/images/by_sa.png +0 -0
- data/doc/images/conservative_spawning.png +0 -0
- data/doc/images/conservative_spawning.svg +248 -0
- data/doc/images/icons/README +5 -0
- data/doc/images/icons/callouts/1.png +0 -0
- data/doc/images/icons/callouts/10.png +0 -0
- data/doc/images/icons/callouts/11.png +0 -0
- data/doc/images/icons/callouts/12.png +0 -0
- data/doc/images/icons/callouts/13.png +0 -0
- data/doc/images/icons/callouts/14.png +0 -0
- data/doc/images/icons/callouts/15.png +0 -0
- data/doc/images/icons/callouts/2.png +0 -0
- data/doc/images/icons/callouts/3.png +0 -0
- data/doc/images/icons/callouts/4.png +0 -0
- data/doc/images/icons/callouts/5.png +0 -0
- data/doc/images/icons/callouts/6.png +0 -0
- data/doc/images/icons/callouts/7.png +0 -0
- data/doc/images/icons/callouts/8.png +0 -0
- data/doc/images/icons/callouts/9.png +0 -0
- data/doc/images/icons/caution.png +0 -0
- data/doc/images/icons/example.png +0 -0
- data/doc/images/icons/home.png +0 -0
- data/doc/images/icons/important.png +0 -0
- data/doc/images/icons/next.png +0 -0
- data/doc/images/icons/note.png +0 -0
- data/doc/images/icons/prev.png +0 -0
- data/doc/images/icons/tip.png +0 -0
- data/doc/images/icons/up.png +0 -0
- data/doc/images/icons/warning.png +0 -0
- data/doc/images/passenger_architecture.png +0 -0
- data/doc/images/passenger_architecture.svg +401 -0
- data/doc/images/phusion_banner.png +0 -0
- data/doc/images/smart-lv2.png +0 -0
- data/doc/images/smart-lv2.svg +320 -0
- data/doc/images/spawn_server_architecture.png +0 -0
- data/doc/images/spawn_server_architecture.svg +655 -0
- data/doc/images/typical_isolated_web_application.png +0 -0
- data/doc/images/typical_isolated_web_application.svg +213 -0
- data/doc/template/horo.rb +613 -0
- data/doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt +144 -0
- data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
- data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +304 -0
- data/doc/users_guide_snippets/global_queueing_explained.txt +78 -0
- data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
- data/doc/users_guide_snippets/rails_spawn_method.txt +48 -0
- data/doc/users_guide_snippets/tips.txt +173 -0
- data/ext/apache2/Bucket.cpp +190 -0
- data/ext/apache2/Bucket.h +87 -0
- data/ext/apache2/Configuration.cpp +798 -0
- data/ext/apache2/Configuration.h +405 -0
- data/ext/apache2/DirectoryMapper.h +296 -0
- data/ext/apache2/Hooks.cpp +1617 -0
- data/ext/apache2/Hooks.h +45 -0
- data/ext/apache2/LICENSE-CNRI.TXT +79 -0
- data/ext/apache2/mod_passenger.c +38 -0
- data/ext/boost/LICENSE.TXT +23 -0
- data/ext/boost/VERSION.TXT +1 -0
- data/ext/boost/algorithm/string/case_conv.hpp +176 -0
- data/ext/boost/algorithm/string/compare.hpp +199 -0
- data/ext/boost/algorithm/string/concept.hpp +83 -0
- data/ext/boost/algorithm/string/config.hpp +28 -0
- data/ext/boost/algorithm/string/constants.hpp +36 -0
- data/ext/boost/algorithm/string/detail/case_conv.hpp +112 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +193 -0
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +263 -0
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +71 -0
- data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
- data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
- data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
- data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
- data/ext/boost/algorithm/string/detail/util.hpp +106 -0
- data/ext/boost/algorithm/string/erase.hpp +844 -0
- data/ext/boost/algorithm/string/find_format.hpp +269 -0
- data/ext/boost/algorithm/string/finder.hpp +270 -0
- data/ext/boost/algorithm/string/formatter.hpp +103 -0
- data/ext/boost/algorithm/string/replace.hpp +928 -0
- data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
- data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
- data/ext/boost/assert.hpp +50 -0
- data/ext/boost/bind.hpp +1689 -0
- data/ext/boost/bind/arg.hpp +62 -0
- data/ext/boost/bind/bind_cc.hpp +117 -0
- data/ext/boost/bind/bind_mf_cc.hpp +227 -0
- data/ext/boost/bind/bind_template.hpp +345 -0
- data/ext/boost/bind/mem_fn_cc.hpp +103 -0
- data/ext/boost/bind/mem_fn_template.hpp +1020 -0
- data/ext/boost/bind/placeholders.hpp +68 -0
- data/ext/boost/bind/storage.hpp +475 -0
- data/ext/boost/call_traits.hpp +24 -0
- data/ext/boost/checked_delete.hpp +69 -0
- data/ext/boost/concept/assert.hpp +46 -0
- data/ext/boost/concept/detail/concept_def.hpp +51 -0
- data/ext/boost/concept/detail/concept_undef.hpp +5 -0
- data/ext/boost/concept/detail/general.hpp +66 -0
- data/ext/boost/concept/detail/has_constraints.hpp +48 -0
- data/ext/boost/concept/usage.hpp +43 -0
- data/ext/boost/concept_check.hpp +988 -0
- data/ext/boost/config.hpp +70 -0
- data/ext/boost/config/abi/borland_prefix.hpp +27 -0
- data/ext/boost/config/abi/borland_suffix.hpp +12 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
- data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
- data/ext/boost/config/abi_prefix.hpp +25 -0
- data/ext/boost/config/abi_suffix.hpp +26 -0
- data/ext/boost/config/auto_link.hpp +368 -0
- data/ext/boost/config/compiler/borland.hpp +209 -0
- data/ext/boost/config/compiler/comeau.hpp +59 -0
- data/ext/boost/config/compiler/common_edg.hpp +62 -0
- data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
- data/ext/boost/config/compiler/digitalmars.hpp +67 -0
- data/ext/boost/config/compiler/gcc.hpp +149 -0
- data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
- data/ext/boost/config/compiler/greenhills.hpp +28 -0
- data/ext/boost/config/compiler/hp_acc.hpp +95 -0
- data/ext/boost/config/compiler/intel.hpp +162 -0
- data/ext/boost/config/compiler/kai.hpp +35 -0
- data/ext/boost/config/compiler/metrowerks.hpp +111 -0
- data/ext/boost/config/compiler/mpw.hpp +51 -0
- data/ext/boost/config/compiler/pgi.hpp +25 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +28 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +98 -0
- data/ext/boost/config/compiler/vacpp.hpp +60 -0
- data/ext/boost/config/compiler/visualc.hpp +191 -0
- data/ext/boost/config/no_tr1/complex.hpp +28 -0
- data/ext/boost/config/no_tr1/functional.hpp +28 -0
- data/ext/boost/config/no_tr1/memory.hpp +28 -0
- data/ext/boost/config/no_tr1/utility.hpp +28 -0
- data/ext/boost/config/platform/aix.hpp +33 -0
- data/ext/boost/config/platform/amigaos.hpp +15 -0
- data/ext/boost/config/platform/beos.hpp +26 -0
- data/ext/boost/config/platform/bsd.hpp +73 -0
- data/ext/boost/config/platform/cygwin.hpp +51 -0
- data/ext/boost/config/platform/hpux.hpp +84 -0
- data/ext/boost/config/platform/irix.hpp +31 -0
- data/ext/boost/config/platform/linux.hpp +98 -0
- data/ext/boost/config/platform/macos.hpp +78 -0
- data/ext/boost/config/platform/qnxnto.hpp +31 -0
- data/ext/boost/config/platform/solaris.hpp +21 -0
- data/ext/boost/config/platform/win32.hpp +58 -0
- data/ext/boost/config/posix_features.hpp +95 -0
- data/ext/boost/config/requires_threads.hpp +92 -0
- data/ext/boost/config/select_compiler_config.hpp +115 -0
- data/ext/boost/config/select_platform_config.hpp +90 -0
- data/ext/boost/config/select_stdlib_config.hpp +68 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
- data/ext/boost/config/stdlib/libcomo.hpp +46 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
- data/ext/boost/config/stdlib/modena.hpp +30 -0
- data/ext/boost/config/stdlib/msl.hpp +59 -0
- data/ext/boost/config/stdlib/roguewave.hpp +153 -0
- data/ext/boost/config/stdlib/sgi.hpp +111 -0
- data/ext/boost/config/stdlib/stlport.hpp +201 -0
- data/ext/boost/config/stdlib/vacpp.hpp +18 -0
- data/ext/boost/config/suffix.hpp +566 -0
- data/ext/boost/config/user.hpp +124 -0
- data/ext/boost/cstdint.hpp +449 -0
- data/ext/boost/current_function.hpp +67 -0
- data/ext/boost/date_time/adjust_functors.hpp +178 -0
- data/ext/boost/date_time/c_time.hpp +91 -0
- data/ext/boost/date_time/compiler_config.hpp +149 -0
- data/ext/boost/date_time/constrained_value.hpp +98 -0
- data/ext/boost/date_time/date.hpp +197 -0
- data/ext/boost/date_time/date_clock_device.hpp +77 -0
- data/ext/boost/date_time/date_defs.hpp +26 -0
- data/ext/boost/date_time/date_duration.hpp +147 -0
- data/ext/boost/date_time/date_duration_types.hpp +269 -0
- data/ext/boost/date_time/date_facet.hpp +775 -0
- data/ext/boost/date_time/date_format_simple.hpp +159 -0
- data/ext/boost/date_time/date_formatting.hpp +127 -0
- data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
- data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
- data/ext/boost/date_time/date_generator_formatter.hpp +263 -0
- data/ext/boost/date_time/date_generator_parser.hpp +329 -0
- data/ext/boost/date_time/date_generators.hpp +509 -0
- data/ext/boost/date_time/date_iterator.hpp +101 -0
- data/ext/boost/date_time/date_names_put.hpp +320 -0
- data/ext/boost/date_time/date_parsing.hpp +299 -0
- data/ext/boost/date_time/dst_rules.hpp +391 -0
- data/ext/boost/date_time/filetime_functions.hpp +78 -0
- data/ext/boost/date_time/format_date_parser.hpp +731 -0
- data/ext/boost/date_time/gregorian/conversion.hpp +73 -0
- data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
- data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
- data/ext/boost/date_time/gregorian/greg_calendar.hpp +47 -0
- data/ext/boost/date_time/gregorian/greg_date.hpp +135 -0
- data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
- data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
- data/ext/boost/date_time/gregorian/greg_duration.hpp +38 -0
- data/ext/boost/date_time/gregorian/greg_duration_types.hpp +34 -0
- data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
- data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
- data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
- data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
- data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
- data/ext/boost/date_time/gregorian/gregorian_io.hpp +777 -0
- data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
- data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
- data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
- data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
- data/ext/boost/date_time/int_adapter.hpp +507 -0
- data/ext/boost/date_time/iso_format.hpp +303 -0
- data/ext/boost/date_time/locale_config.hpp +31 -0
- data/ext/boost/date_time/microsec_time_clock.hpp +205 -0
- data/ext/boost/date_time/parse_format_base.hpp +29 -0
- data/ext/boost/date_time/period.hpp +377 -0
- data/ext/boost/date_time/period_formatter.hpp +196 -0
- data/ext/boost/date_time/period_parser.hpp +196 -0
- data/ext/boost/date_time/posix_time/conversion.hpp +93 -0
- data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
- data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
- data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
- data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
- data/ext/boost/date_time/posix_time/posix_time_io.hpp +246 -0
- data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
- data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
- data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
- data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
- data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
- data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
- data/ext/boost/date_time/special_defs.hpp +25 -0
- data/ext/boost/date_time/special_values_formatter.hpp +96 -0
- data/ext/boost/date_time/special_values_parser.hpp +159 -0
- data/ext/boost/date_time/string_convert.hpp +33 -0
- data/ext/boost/date_time/string_parse_tree.hpp +278 -0
- data/ext/boost/date_time/strings_from_facet.hpp +123 -0
- data/ext/boost/date_time/time.hpp +190 -0
- data/ext/boost/date_time/time_clock.hpp +83 -0
- data/ext/boost/date_time/time_defs.hpp +33 -0
- data/ext/boost/date_time/time_duration.hpp +281 -0
- data/ext/boost/date_time/time_facet.hpp +1263 -0
- data/ext/boost/date_time/time_formatting_streams.hpp +119 -0
- data/ext/boost/date_time/time_iterator.hpp +52 -0
- data/ext/boost/date_time/time_parsing.hpp +321 -0
- data/ext/boost/date_time/time_resolution_traits.hpp +140 -0
- data/ext/boost/date_time/time_system_counted.hpp +254 -0
- data/ext/boost/date_time/time_system_split.hpp +213 -0
- data/ext/boost/date_time/wrapping_int.hpp +163 -0
- data/ext/boost/date_time/year_month_day.hpp +45 -0
- data/ext/boost/detail/atomic_count.hpp +124 -0
- data/ext/boost/detail/atomic_count_gcc.hpp +68 -0
- data/ext/boost/detail/atomic_count_gcc_x86.hpp +84 -0
- data/ext/boost/detail/atomic_count_pthreads.hpp +96 -0
- data/ext/boost/detail/atomic_count_solaris.hpp +59 -0
- data/ext/boost/detail/atomic_count_sync.hpp +57 -0
- data/ext/boost/detail/atomic_count_win32.hpp +63 -0
- data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
- data/ext/boost/detail/call_traits.hpp +164 -0
- data/ext/boost/detail/endian.hpp +73 -0
- data/ext/boost/detail/indirect_traits.hpp +487 -0
- data/ext/boost/detail/iterator.hpp +494 -0
- data/ext/boost/detail/lcast_precision.hpp +184 -0
- data/ext/boost/detail/limits.hpp +449 -0
- data/ext/boost/detail/reference_content.hpp +141 -0
- data/ext/boost/detail/shared_count.hpp +375 -0
- data/ext/boost/detail/sp_counted_base.hpp +81 -0
- data/ext/boost/detail/sp_counted_base_acc_ia64.hpp +150 -0
- data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
- data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
- data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
- data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
- data/ext/boost/detail/sp_counted_base_gcc_sparc.hpp +166 -0
- data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
- data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
- data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
- data/ext/boost/detail/sp_counted_base_solaris.hpp +113 -0
- data/ext/boost/detail/sp_counted_base_sync.hpp +151 -0
- data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
- data/ext/boost/detail/sp_counted_impl.hpp +231 -0
- data/ext/boost/detail/sp_typeinfo.hpp +83 -0
- data/ext/boost/detail/workaround.hpp +202 -0
- data/ext/boost/enable_shared_from_this.hpp +73 -0
- data/ext/boost/function.hpp +66 -0
- data/ext/boost/function/detail/function_iterate.hpp +16 -0
- data/ext/boost/function/detail/maybe_include.hpp +267 -0
- data/ext/boost/function/detail/prologue.hpp +25 -0
- data/ext/boost/function/function_base.hpp +762 -0
- data/ext/boost/function/function_template.hpp +969 -0
- data/ext/boost/function_equal.hpp +28 -0
- data/ext/boost/get_pointer.hpp +29 -0
- data/ext/boost/implicit_cast.hpp +29 -0
- data/ext/boost/integer_traits.hpp +236 -0
- data/ext/boost/io/ios_state.hpp +431 -0
- data/ext/boost/io_fwd.hpp +67 -0
- data/ext/boost/is_placeholder.hpp +31 -0
- data/ext/boost/iterator.hpp +59 -0
- data/ext/boost/iterator/detail/config_def.hpp +135 -0
- data/ext/boost/iterator/detail/config_undef.hpp +25 -0
- data/ext/boost/iterator/detail/enable_if.hpp +86 -0
- data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
- data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
- data/ext/boost/iterator/interoperable.hpp +50 -0
- data/ext/boost/iterator/iterator_adaptor.hpp +366 -0
- data/ext/boost/iterator/iterator_categories.hpp +188 -0
- data/ext/boost/iterator/iterator_facade.hpp +879 -0
- data/ext/boost/iterator/iterator_traits.hpp +92 -0
- data/ext/boost/iterator/reverse_iterator.hpp +69 -0
- data/ext/boost/iterator/transform_iterator.hpp +188 -0
- data/ext/boost/lexical_cast.hpp +1205 -0
- data/ext/boost/limits.hpp +146 -0
- data/ext/boost/mem_fn.hpp +389 -0
- data/ext/boost/mpl/always.hpp +39 -0
- data/ext/boost/mpl/and.hpp +60 -0
- data/ext/boost/mpl/apply.hpp +229 -0
- data/ext/boost/mpl/apply_fwd.hpp +107 -0
- data/ext/boost/mpl/apply_wrap.hpp +203 -0
- data/ext/boost/mpl/arg.hpp +131 -0
- data/ext/boost/mpl/arg_fwd.hpp +28 -0
- data/ext/boost/mpl/assert.hpp +370 -0
- data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
- data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
- data/ext/boost/mpl/aux_/arity.hpp +39 -0
- data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
- data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
- data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
- data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
- data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
- data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
- data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
- data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
- data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
- data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
- data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
- data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
- data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
- data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
- data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
- data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
- data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
- data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
- data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
- data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/has_type.hpp +23 -0
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
- data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
- data/ext/boost/mpl/aux_/na.hpp +95 -0
- data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
- data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
- data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
- data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
- data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
- data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
- data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
- data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
- data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
- data/ext/boost/mpl/bind.hpp +551 -0
- data/ext/boost/mpl/bind_fwd.hpp +99 -0
- data/ext/boost/mpl/bool.hpp +39 -0
- data/ext/boost/mpl/bool_fwd.hpp +33 -0
- data/ext/boost/mpl/eval_if.hpp +71 -0
- data/ext/boost/mpl/has_xxx.hpp +272 -0
- data/ext/boost/mpl/identity.hpp +45 -0
- data/ext/boost/mpl/if.hpp +135 -0
- data/ext/boost/mpl/int.hpp +22 -0
- data/ext/boost/mpl/int_fwd.hpp +27 -0
- data/ext/boost/mpl/integral_c.hpp +51 -0
- data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
- data/ext/boost/mpl/integral_c_tag.hpp +26 -0
- data/ext/boost/mpl/lambda.hpp +29 -0
- data/ext/boost/mpl/lambda_fwd.hpp +57 -0
- data/ext/boost/mpl/limits/arity.hpp +21 -0
- data/ext/boost/mpl/logical.hpp +21 -0
- data/ext/boost/mpl/next.hpp +19 -0
- data/ext/boost/mpl/next_prior.hpp +49 -0
- data/ext/boost/mpl/not.hpp +51 -0
- data/ext/boost/mpl/or.hpp +61 -0
- data/ext/boost/mpl/placeholders.hpp +100 -0
- data/ext/boost/mpl/protect.hpp +55 -0
- data/ext/boost/mpl/quote.hpp +140 -0
- data/ext/boost/mpl/size_t.hpp +25 -0
- data/ext/boost/mpl/size_t_fwd.hpp +28 -0
- data/ext/boost/mpl/void.hpp +76 -0
- data/ext/boost/mpl/void_fwd.hpp +26 -0
- data/ext/boost/next_prior.hpp +51 -0
- data/ext/boost/non_type.hpp +27 -0
- data/ext/boost/noncopyable.hpp +36 -0
- data/ext/boost/none.hpp +28 -0
- data/ext/boost/none_t.hpp +24 -0
- data/ext/boost/operators.hpp +943 -0
- data/ext/boost/optional.hpp +18 -0
- data/ext/boost/optional/optional.hpp +922 -0
- data/ext/boost/optional/optional_fwd.hpp +22 -0
- data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
- data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
- data/ext/boost/preprocessor/array/data.hpp +28 -0
- data/ext/boost/preprocessor/array/elem.hpp +29 -0
- data/ext/boost/preprocessor/array/size.hpp +28 -0
- data/ext/boost/preprocessor/cat.hpp +35 -0
- data/ext/boost/preprocessor/comma_if.hpp +17 -0
- data/ext/boost/preprocessor/config/config.hpp +70 -0
- data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
- data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
- data/ext/boost/preprocessor/control/if.hpp +30 -0
- data/ext/boost/preprocessor/control/iif.hpp +34 -0
- data/ext/boost/preprocessor/control/while.hpp +312 -0
- data/ext/boost/preprocessor/debug/error.hpp +33 -0
- data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
- data/ext/boost/preprocessor/detail/check.hpp +48 -0
- data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
- data/ext/boost/preprocessor/empty.hpp +17 -0
- data/ext/boost/preprocessor/enum.hpp +17 -0
- data/ext/boost/preprocessor/enum_params.hpp +17 -0
- data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
- data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
- data/ext/boost/preprocessor/identity.hpp +17 -0
- data/ext/boost/preprocessor/inc.hpp +17 -0
- data/ext/boost/preprocessor/iterate.hpp +17 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
- data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
- data/ext/boost/preprocessor/list/adt.hpp +73 -0
- data/ext/boost/preprocessor/list/append.hpp +40 -0
- data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
- data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
- data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
- data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
- data/ext/boost/preprocessor/list/reverse.hpp +40 -0
- data/ext/boost/preprocessor/list/transform.hpp +49 -0
- data/ext/boost/preprocessor/logical/and.hpp +30 -0
- data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
- data/ext/boost/preprocessor/logical/bool.hpp +288 -0
- data/ext/boost/preprocessor/logical/compl.hpp +36 -0
- data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
- data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
- data/ext/boost/preprocessor/repeat.hpp +17 -0
- data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
- data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
- data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
- data/ext/boost/preprocessor/repetition/for.hpp +306 -0
- data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
- data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
- data/ext/boost/preprocessor/seq/elem.hpp +304 -0
- data/ext/boost/preprocessor/seq/enum.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
- data/ext/boost/preprocessor/seq/seq.hpp +44 -0
- data/ext/boost/preprocessor/seq/size.hpp +548 -0
- data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
- data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
- data/ext/boost/preprocessor/slot/slot.hpp +32 -0
- data/ext/boost/preprocessor/stringize.hpp +33 -0
- data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
- data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
- data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
- data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
- data/ext/boost/range/as_literal.hpp +131 -0
- data/ext/boost/range/begin.hpp +132 -0
- data/ext/boost/range/config.hpp +54 -0
- data/ext/boost/range/const_iterator.hpp +64 -0
- data/ext/boost/range/detail/common.hpp +117 -0
- data/ext/boost/range/detail/implementation_help.hpp +99 -0
- data/ext/boost/range/detail/sfinae.hpp +77 -0
- data/ext/boost/range/detail/str_types.hpp +38 -0
- data/ext/boost/range/difference_type.hpp +29 -0
- data/ext/boost/range/distance.hpp +34 -0
- data/ext/boost/range/empty.hpp +34 -0
- data/ext/boost/range/end.hpp +131 -0
- data/ext/boost/range/functions.hpp +27 -0
- data/ext/boost/range/iterator.hpp +72 -0
- data/ext/boost/range/iterator_range.hpp +643 -0
- data/ext/boost/range/mutable_iterator.hpp +64 -0
- data/ext/boost/range/rbegin.hpp +65 -0
- data/ext/boost/range/rend.hpp +65 -0
- data/ext/boost/range/reverse_iterator.hpp +40 -0
- data/ext/boost/range/size.hpp +36 -0
- data/ext/boost/range/size_type.hpp +78 -0
- data/ext/boost/range/value_type.hpp +34 -0
- data/ext/boost/ref.hpp +178 -0
- data/ext/boost/shared_ptr.hpp +619 -0
- data/ext/boost/src/pthread/exceptions.cpp +146 -0
- data/ext/boost/src/pthread/once.cpp +51 -0
- data/ext/boost/src/pthread/thread.cpp +709 -0
- data/ext/boost/src/pthread/timeconv.inl +130 -0
- data/ext/boost/src/tss_null.cpp +34 -0
- data/ext/boost/src/win32/exceptions.cpp +124 -0
- data/ext/boost/src/win32/thread.cpp +629 -0
- data/ext/boost/src/win32/timeconv.inl +130 -0
- data/ext/boost/src/win32/tss_dll.cpp +72 -0
- data/ext/boost/src/win32/tss_pe.cpp +269 -0
- data/ext/boost/static_assert.hpp +122 -0
- data/ext/boost/thread.hpp +21 -0
- data/ext/boost/thread/condition.hpp +16 -0
- data/ext/boost/thread/condition_variable.hpp +21 -0
- data/ext/boost/thread/detail/config.hpp +94 -0
- data/ext/boost/thread/detail/move.hpp +33 -0
- data/ext/boost/thread/detail/platform.hpp +71 -0
- data/ext/boost/thread/exceptions.hpp +109 -0
- data/ext/boost/thread/locks.hpp +589 -0
- data/ext/boost/thread/mutex.hpp +21 -0
- data/ext/boost/thread/once.hpp +29 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +184 -0
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +66 -0
- data/ext/boost/thread/pthread/mutex.hpp +211 -0
- data/ext/boost/thread/pthread/once.hpp +85 -0
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +50 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +249 -0
- data/ext/boost/thread/pthread/thread.hpp +339 -0
- data/ext/boost/thread/pthread/thread_data.hpp +102 -0
- data/ext/boost/thread/pthread/timespec.hpp +28 -0
- data/ext/boost/thread/pthread/tss.hpp +103 -0
- data/ext/boost/thread/recursive_mutex.hpp +21 -0
- data/ext/boost/thread/thread.hpp +22 -0
- data/ext/boost/thread/thread_time.hpp +46 -0
- data/ext/boost/thread/tss.hpp +18 -0
- data/ext/boost/thread/xtime.hpp +88 -0
- data/ext/boost/throw_exception.hpp +46 -0
- data/ext/boost/token_functions.hpp +621 -0
- data/ext/boost/token_iterator.hpp +128 -0
- data/ext/boost/tokenizer.hpp +98 -0
- data/ext/boost/type.hpp +18 -0
- data/ext/boost/type_traits/add_const.hpp +47 -0
- data/ext/boost/type_traits/add_pointer.hpp +72 -0
- data/ext/boost/type_traits/add_reference.hpp +89 -0
- data/ext/boost/type_traits/alignment_of.hpp +100 -0
- data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
- data/ext/boost/type_traits/composite_traits.hpp +29 -0
- data/ext/boost/type_traits/config.hpp +76 -0
- data/ext/boost/type_traits/conversion_traits.hpp +17 -0
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
- data/ext/boost/type_traits/detail/false_result.hpp +28 -0
- data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
- data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
- data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
- data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
- data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
- data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
- data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
- data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
- data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
- data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
- data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
- data/ext/boost/type_traits/function_traits.hpp +236 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
- data/ext/boost/type_traits/ice.hpp +20 -0
- data/ext/boost/type_traits/integral_constant.hpp +53 -0
- data/ext/boost/type_traits/intrinsics.hpp +153 -0
- data/ext/boost/type_traits/is_abstract.hpp +144 -0
- data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
- data/ext/boost/type_traits/is_array.hpp +90 -0
- data/ext/boost/type_traits/is_class.hpp +128 -0
- data/ext/boost/type_traits/is_const.hpp +142 -0
- data/ext/boost/type_traits/is_convertible.hpp +418 -0
- data/ext/boost/type_traits/is_enum.hpp +180 -0
- data/ext/boost/type_traits/is_float.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +95 -0
- data/ext/boost/type_traits/is_integral.hpp +73 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +134 -0
- data/ext/boost/type_traits/is_member_pointer.hpp +114 -0
- data/ext/boost/type_traits/is_pod.hpp +135 -0
- data/ext/boost/type_traits/is_pointer.hpp +160 -0
- data/ext/boost/type_traits/is_reference.hpp +116 -0
- data/ext/boost/type_traits/is_same.hpp +103 -0
- data/ext/boost/type_traits/is_scalar.hpp +55 -0
- data/ext/boost/type_traits/is_union.hpp +49 -0
- data/ext/boost/type_traits/is_void.hpp +33 -0
- data/ext/boost/type_traits/is_volatile.hpp +131 -0
- data/ext/boost/type_traits/remove_const.hpp +78 -0
- data/ext/boost/type_traits/remove_cv.hpp +61 -0
- data/ext/boost/type_traits/remove_pointer.hpp +43 -0
- data/ext/boost/type_traits/remove_reference.hpp +50 -0
- data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
- data/ext/boost/utility.hpp +19 -0
- data/ext/boost/utility/addressof.hpp +58 -0
- data/ext/boost/utility/base_from_member.hpp +87 -0
- data/ext/boost/utility/compare_pointees.hpp +68 -0
- data/ext/boost/utility/enable_if.hpp +119 -0
- data/ext/boost/visit_each.hpp +29 -0
- data/ext/boost/weak_ptr.hpp +188 -0
- data/ext/common/Application.h +511 -0
- data/ext/common/ApplicationPool.h +205 -0
- data/ext/common/ApplicationPoolServer.h +794 -0
- data/ext/common/ApplicationPoolServerExecutable.cpp +743 -0
- data/ext/common/ApplicationPoolStatusReporter.h +336 -0
- data/ext/common/Base64.cpp +143 -0
- data/ext/common/Base64.h +57 -0
- data/ext/common/CachedFileStat.cpp +62 -0
- data/ext/common/CachedFileStat.h +51 -0
- data/ext/common/CachedFileStat.hpp +243 -0
- data/ext/common/DummySpawnManager.h +108 -0
- data/ext/common/Exceptions.h +258 -0
- data/ext/common/FileChangeChecker.h +209 -0
- data/ext/common/Logging.cpp +65 -0
- data/ext/common/Logging.h +123 -0
- data/ext/common/MessageChannel.h +615 -0
- data/ext/common/PoolOptions.h +355 -0
- data/ext/common/SpawnManager.h +561 -0
- data/ext/common/StandardApplicationPool.h +821 -0
- data/ext/common/StaticString.h +148 -0
- data/ext/common/StringListCreator.h +83 -0
- data/ext/common/SystemTime.cpp +33 -0
- data/ext/common/SystemTime.h +88 -0
- data/ext/common/Timer.h +90 -0
- data/ext/common/Utils.cpp +681 -0
- data/ext/common/Utils.h +497 -0
- data/ext/common/Version.h +31 -0
- data/ext/nginx/Configuration.c +1098 -0
- data/ext/nginx/Configuration.h +71 -0
- data/ext/nginx/ContentHandler.c +1225 -0
- data/ext/nginx/ContentHandler.h +64 -0
- data/ext/nginx/HelperServer.cpp +850 -0
- data/ext/nginx/HttpStatusExtractor.h +350 -0
- data/ext/nginx/ScgiRequestParser.h +317 -0
- data/ext/nginx/StaticContentHandler.c +257 -0
- data/ext/nginx/StaticContentHandler.h +37 -0
- data/ext/nginx/config +45 -0
- data/ext/nginx/ngx_http_passenger_module.c +653 -0
- data/ext/nginx/ngx_http_passenger_module.h +72 -0
- data/ext/oxt/backtrace.cpp +177 -0
- data/ext/oxt/backtrace.hpp +135 -0
- data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
- data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
- data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
- data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
- data/ext/oxt/macros.hpp +58 -0
- data/ext/oxt/spin_lock.hpp +55 -0
- data/ext/oxt/system_calls.cpp +351 -0
- data/ext/oxt/system_calls.hpp +244 -0
- data/ext/oxt/thread.cpp +32 -0
- data/ext/oxt/thread.hpp +335 -0
- data/ext/oxt/tracable_exception.cpp +87 -0
- data/ext/oxt/tracable_exception.hpp +35 -0
- data/ext/phusion_passenger/extconf.rb +36 -0
- data/ext/phusion_passenger/native_support.c +308 -0
- data/lib/jeweler_spec.rb +86 -0
- data/lib/phusion_passenger/abstract_installer.rb +196 -0
- data/lib/phusion_passenger/abstract_request_handler.rb +475 -0
- data/lib/phusion_passenger/abstract_server.rb +369 -0
- data/lib/phusion_passenger/abstract_server_collection.rb +306 -0
- data/lib/phusion_passenger/admin_tools.rb +48 -0
- data/lib/phusion_passenger/admin_tools/control_process.rb +150 -0
- data/lib/phusion_passenger/application.rb +113 -0
- data/lib/phusion_passenger/console_text_template.rb +66 -0
- data/lib/phusion_passenger/constants.rb +31 -0
- data/lib/phusion_passenger/dependencies.rb +425 -0
- data/lib/phusion_passenger/events.rb +50 -0
- data/lib/phusion_passenger/exceptions.rb +103 -0
- data/lib/phusion_passenger/html_template.rb +109 -0
- data/lib/phusion_passenger/message_channel.rb +229 -0
- data/lib/phusion_passenger/packaging.rb +39 -0
- data/lib/phusion_passenger/platform_info.rb +550 -0
- data/lib/phusion_passenger/rack/application_spawner.rb +146 -0
- data/lib/phusion_passenger/rack/request_handler.rb +122 -0
- data/lib/phusion_passenger/railz/application_spawner.rb +412 -0
- data/lib/phusion_passenger/railz/cgi_fixed.rb +68 -0
- data/lib/phusion_passenger/railz/framework_spawner.rb +334 -0
- data/lib/phusion_passenger/railz/request_handler.rb +73 -0
- data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
- data/lib/phusion_passenger/spawn_manager.rb +372 -0
- data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
- data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
- data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +14 -0
- data/lib/phusion_passenger/templates/app_init_error.html.erb +46 -0
- data/lib/phusion_passenger/templates/database_error.html.erb +24 -0
- data/lib/phusion_passenger/templates/error_layout.css +97 -0
- data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +10 -0
- data/lib/phusion_passenger/templates/general_error.html.erb +8 -0
- data/lib/phusion_passenger/templates/invalid_app_root.html.erb +9 -0
- data/lib/phusion_passenger/templates/load_error.html.erb +6 -0
- data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
- data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
- data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/version_not_found.html.erb +6 -0
- data/lib/phusion_passenger/utils.rb +611 -0
- data/lib/phusion_passenger/utils/rewindable_input.rb +116 -0
- data/lib/phusion_passenger/wsgi/application_spawner.rb +104 -0
- data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
- data/man/passenger-config.1 +29 -0
- data/man/passenger-make-enterprisey.8 +23 -0
- data/man/passenger-memory-stats.8 +33 -0
- data/man/passenger-status.8 +43 -0
- data/man/passenger-stress-test.1 +43 -0
- data/misc/copy_boost_headers.rb +125 -0
- data/misc/find_owner_pipe_leaks.rb +128 -0
- data/misc/rake/cplusplus.rb +57 -0
- data/misc/rake/extensions.rb +182 -0
- data/misc/rake/gempackagetask.rb +99 -0
- data/misc/rake/packagetask.rb +186 -0
- data/misc/rake/rdoctask.rb +209 -0
- data/misc/render_error_pages.rb +116 -0
- data/test/ApplicationPoolServerTest.cpp +114 -0
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +33 -0
- data/test/ApplicationPoolTest.cpp +599 -0
- data/test/Base64Test.cpp +48 -0
- data/test/CachedFileStatTest.cpp +402 -0
- data/test/CxxTestMain.cpp +143 -0
- data/test/FileChangeCheckerTest.cpp +331 -0
- data/test/HttpStatusExtractorTest.cpp +198 -0
- data/test/MessageChannelTest.cpp +312 -0
- data/test/PoolOptionsTest.cpp +117 -0
- data/test/ScgiRequestParserTest.cpp +337 -0
- data/test/SpawnManagerTest.cpp +64 -0
- data/test/StandardApplicationPoolTest.cpp +27 -0
- data/test/StaticStringTest.cpp +51 -0
- data/test/SystemTimeTest.cpp +37 -0
- data/test/UtilsTest.cpp +257 -0
- data/test/config.yml.example +30 -0
- data/test/integration_tests/apache2_tests.rb +595 -0
- data/test/integration_tests/hello_world_rack_spec.rb +36 -0
- data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
- data/test/integration_tests/mycook_spec.rb +192 -0
- data/test/integration_tests/nginx_tests.rb +151 -0
- data/test/oxt/backtrace_test.cpp +128 -0
- data/test/oxt/oxt_test_main.cpp +25 -0
- data/test/oxt/syscall_interruption_test.cpp +38 -0
- data/test/ruby/abstract_request_handler_spec.rb +85 -0
- data/test/ruby/abstract_server_collection_spec.rb +246 -0
- data/test/ruby/abstract_server_spec.rb +51 -0
- data/test/ruby/application_spec.rb +43 -0
- data/test/ruby/message_channel_spec.rb +170 -0
- data/test/ruby/rack/application_spawner_spec.rb +99 -0
- data/test/ruby/rails/application_spawner_spec.rb +159 -0
- data/test/ruby/rails/framework_spawner_spec.rb +133 -0
- data/test/ruby/rails/minimal_spawner_spec.rb +93 -0
- data/test/ruby/rails/spawner_error_handling_spec.rb +107 -0
- data/test/ruby/rails/spawner_privilege_lowering_spec.rb +97 -0
- data/test/ruby/spawn_manager_spec.rb +205 -0
- data/test/ruby/spawn_server_spec.rb +26 -0
- data/test/ruby/utils_spec.rb +335 -0
- data/test/ruby/wsgi/application_spawner_spec.rb +54 -0
- data/test/stub/apache2/httpd.conf.erb +81 -0
- data/test/stub/apache2/mime.types +748 -0
- data/test/stub/garbage1.dat +0 -0
- data/test/stub/garbage2.dat +0 -0
- data/test/stub/garbage3.dat +0 -0
- data/test/stub/http_request.yml +23 -0
- data/test/stub/message_channel.rb +9 -0
- data/test/stub/message_channel_2.rb +10 -0
- data/test/stub/message_channel_3.rb +17 -0
- data/test/stub/nginx/koi-utf +109 -0
- data/test/stub/nginx/koi-win +103 -0
- data/test/stub/nginx/mime.types +70 -0
- data/test/stub/nginx/nginx.conf.erb +57 -0
- data/test/stub/nginx/win-utf +126 -0
- data/test/stub/rack/config.ru +4 -0
- data/test/stub/rack/public/rack.jpg +0 -0
- data/test/stub/rails_apps/foobar/app/controllers/application.rb +12 -0
- data/test/stub/rails_apps/foobar/app/controllers/bar_controller_1.rb +5 -0
- data/test/stub/rails_apps/foobar/app/controllers/bar_controller_2.rb +5 -0
- data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +21 -0
- data/test/stub/rails_apps/foobar/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/foobar/config/boot.rb +108 -0
- data/test/stub/rails_apps/foobar/config/database.yml +19 -0
- data/test/stub/rails_apps/foobar/config/environment.rb +59 -0
- data/test/stub/rails_apps/foobar/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/foobar/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/foobar/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/foobar/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/foobar/config/routes.rb +35 -0
- data/test/stub/rails_apps/mycook/app/controllers/application.rb +12 -0
- data/test/stub/rails_apps/mycook/app/controllers/recipes_controller.rb +5 -0
- data/test/stub/rails_apps/mycook/app/controllers/uploads_controller.rb +15 -0
- data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +71 -0
- data/test/stub/rails_apps/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/mycook/app/views/layouts/default.rhtml +26 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/create.rhtml +13 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/index.rhtml +3 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/new.rhtml +8 -0
- data/test/stub/rails_apps/mycook/app/views/uploads/index.rhtml +1 -0
- data/test/stub/rails_apps/mycook/app/views/uploads/new.html.erb +8 -0
- data/test/stub/rails_apps/mycook/app/views/welcome/cached.rhtml +1 -0
- data/test/stub/rails_apps/mycook/app/views/welcome/index.rhtml +20 -0
- data/test/stub/rails_apps/mycook/config/boot.rb +108 -0
- data/test/stub/rails_apps/mycook/config/database.yml +19 -0
- data/test/stub/rails_apps/mycook/config/environment.rb +61 -0
- data/test/stub/rails_apps/mycook/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/mycook/config/environments/production.rb +19 -0
- data/test/stub/rails_apps/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/mycook/config/routes.rb +38 -0
- data/test/stub/rails_apps/mycook/log/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/public/404.html +30 -0
- data/test/stub/rails_apps/mycook/public/422.html +30 -0
- data/test/stub/rails_apps/mycook/public/500.html +30 -0
- data/test/stub/rails_apps/mycook/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/mycook/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/mycook/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/mycook/public/favicon.ico +0 -0
- data/test/stub/rails_apps/mycook/public/images/angrywizard.gif +0 -0
- data/test/stub/rails_apps/mycook/public/images/cookbook.gif +0 -0
- data/test/stub/rails_apps/mycook/public/images/header.png +0 -0
- data/test/stub/rails_apps/mycook/public/images/rails.png +0 -0
- data/test/stub/rails_apps/mycook/public/javascripts/application.js +2 -0
- data/test/stub/rails_apps/mycook/public/javascripts/controls.js +963 -0
- data/test/stub/rails_apps/mycook/public/javascripts/dragdrop.js +972 -0
- data/test/stub/rails_apps/mycook/public/javascripts/effects.js +1120 -0
- data/test/stub/rails_apps/mycook/public/javascripts/prototype.js +4225 -0
- data/test/stub/rails_apps/mycook/public/robots.txt +5 -0
- data/test/stub/rails_apps/mycook/public/uploads.html +26 -0
- data/test/stub/rails_apps/mycook/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
- data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/mycook/tmp/cache/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/pids/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/sessions/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/sockets/useless.txt +1 -0
- data/test/stub/spawn_server.rb +20 -0
- data/test/stub/upload_data.txt +494 -0
- data/test/stub/vendor_rails/minimal/README +1 -0
- data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +19 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
- data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
- data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
- data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +52 -0
- data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
- data/test/stub/wsgi/passenger_wsgi.py +3 -0
- data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
- data/test/stub/zsfa/header.png +0 -0
- data/test/stub/zsfa/index.html +14 -0
- data/test/stub/zsfa/zsfa.png +0 -0
- data/test/support/Support.cpp +84 -0
- data/test/support/Support.h +118 -0
- data/test/support/apache2_controller.rb +250 -0
- data/test/support/config.rb +38 -0
- data/test/support/multipart.rb +62 -0
- data/test/support/nginx_controller.rb +98 -0
- data/test/support/run_rspec_tests.rb +10 -0
- data/test/support/test_helper.rb +207 -0
- data/test/support/tut.h +1234 -0
- data/test/support/tut_reporter.h +256 -0
- data/test/support/valgrind.h +2539 -0
- 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
|