passenger 3.0.21 → 3.9.1.beta
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- data/DEVELOPERS.TXT +4 -10
- data/NEWS +19 -27
- data/Rakefile +20 -19
- data/bin/passenger +3 -2
- data/bin/passenger-config +35 -5
- data/bin/passenger-install-apache2-module +12 -12
- data/bin/passenger-install-nginx-module +55 -38
- data/bin/passenger-memory-stats +3 -1
- data/bin/passenger-status +7 -35
- data/build/agents.rb +107 -21
- data/build/apache2.rb +11 -46
- data/build/basics.rb +61 -9
- data/build/common_library.rb +59 -142
- data/build/cxx_tests.rb +111 -110
- data/build/documentation.rb +33 -0
- data/build/misc.rb +30 -12
- data/build/nginx.rb +10 -39
- data/build/oxt_tests.rb +1 -0
- data/build/ruby_extension.rb +1 -5
- data/build/test_basics.rb +3 -2
- data/dev/copy_boost_headers.rb +2 -1
- data/doc/Architectural overview.html +49 -90
- data/doc/DebuggingAndStressTesting.txt.md +49 -0
- data/doc/Packaging.txt.md +254 -0
- data/doc/Security of user switching support.html +35 -66
- data/doc/Users guide Apache.html +588 -758
- data/doc/Users guide Apache.idmap.txt +253 -136
- data/doc/Users guide Apache.txt +154 -109
- data/doc/Users guide Nginx.html +544 -660
- data/doc/Users guide Nginx.idmap.txt +179 -91
- data/doc/Users guide Nginx.txt +192 -118
- data/doc/Users guide Standalone.html +65 -48
- data/doc/Users guide Standalone.idmap.txt +10 -2
- data/doc/Users guide Standalone.txt +4 -0
- data/doc/images/glyphicons-halflings-white.png +0 -0
- data/doc/images/glyphicons-halflings.png +0 -0
- data/doc/images/phusion_banner_small.png +0 -0
- data/doc/images/{smart-lv2.png → smart.png} +0 -0
- data/doc/images/{smart-lv2.svg → smart.svg} +0 -0
- data/doc/templates/bootstrap.min.css +397 -0
- data/doc/templates/markdown.html.erb +117 -0
- data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +2 -1
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +26 -48
- data/doc/users_guide_snippets/passenger_spawn_method.txt +18 -30
- data/doc/users_guide_snippets/support_information.txt +30 -0
- data/ext/apache2/Bucket.cpp +9 -26
- data/ext/apache2/Bucket.h +13 -10
- data/ext/apache2/Configuration.cpp +70 -58
- data/ext/apache2/Configuration.hpp +19 -47
- data/ext/apache2/DirectoryMapper.h +7 -7
- data/ext/apache2/Hooks.cpp +150 -313
- data/ext/boost/algorithm/string/detail/case_conv.hpp +4 -2
- data/ext/boost/algorithm/string/detail/find_format.hpp +20 -20
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +23 -23
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +2 -2
- data/ext/boost/algorithm/string/detail/formatter.hpp +25 -0
- data/ext/boost/algorithm/string/formatter.hpp +20 -3
- data/ext/boost/assert.hpp +85 -4
- data/ext/boost/bind/bind.hpp +1 -1
- data/ext/boost/concept/detail/backward_compatibility.hpp +1 -1
- data/ext/boost/concept_check.hpp +140 -64
- data/ext/boost/config.hpp +1 -1
- data/ext/boost/config/auto_link.hpp +8 -6
- data/ext/boost/config/compiler/borland.hpp +12 -2
- data/ext/boost/config/compiler/clang.hpp +89 -30
- data/ext/boost/config/compiler/codegear.hpp +3 -2
- data/ext/boost/config/compiler/common_edg.hpp +7 -5
- data/ext/boost/config/compiler/cray.hpp +61 -0
- data/ext/boost/config/compiler/digitalmars.hpp +9 -1
- data/ext/boost/config/compiler/gcc.hpp +33 -24
- data/ext/boost/config/compiler/gcc_xml.hpp +4 -0
- data/ext/boost/config/compiler/hp_acc.hpp +12 -1
- data/ext/boost/config/compiler/intel.hpp +78 -4
- data/ext/boost/config/compiler/metrowerks.hpp +4 -1
- data/ext/boost/config/compiler/mpw.hpp +4 -1
- data/ext/boost/config/compiler/nvcc.hpp +8 -66
- data/ext/boost/config/compiler/pathscale.hpp +80 -0
- data/ext/boost/config/compiler/pgi.hpp +5 -5
- data/ext/boost/config/compiler/sunpro_cc.hpp +4 -1
- data/ext/boost/config/compiler/vacpp.hpp +37 -13
- data/ext/boost/config/compiler/visualc.hpp +24 -11
- data/ext/boost/config/platform/bsd.hpp +1 -1
- data/ext/boost/config/platform/cray.hpp +18 -0
- data/ext/boost/config/platform/cygwin.hpp +10 -0
- data/ext/boost/config/platform/linux.hpp +5 -0
- data/ext/boost/config/platform/macos.hpp +5 -4
- data/ext/boost/config/platform/symbian.hpp +5 -2
- data/ext/boost/config/platform/vms.hpp +25 -0
- data/ext/boost/config/platform/win32.hpp +7 -1
- data/ext/boost/config/select_compiler_config.hpp +8 -25
- data/ext/boost/config/select_platform_config.hpp +8 -1
- data/ext/boost/config/select_stdlib_config.hpp +9 -1
- data/ext/boost/config/stdlib/dinkumware.hpp +6 -9
- data/ext/boost/config/stdlib/libcomo.hpp +1 -4
- data/ext/boost/config/stdlib/libcpp.hpp +36 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +37 -11
- data/ext/boost/config/stdlib/modena.hpp +1 -4
- data/ext/boost/config/stdlib/msl.hpp +1 -4
- data/ext/boost/config/stdlib/roguewave.hpp +9 -6
- data/ext/boost/config/stdlib/sgi.hpp +12 -4
- data/ext/boost/config/stdlib/stlport.hpp +11 -4
- data/ext/boost/config/stdlib/vacpp.hpp +11 -4
- data/ext/boost/config/suffix.hpp +71 -6
- data/ext/boost/config/warning_disable.hpp +1 -1
- data/ext/boost/container/container_fwd.hpp +177 -0
- data/ext/boost/cstdint.hpp +17 -12
- data/ext/boost/current_function.hpp +2 -1
- data/ext/boost/date_time/c_time.hpp +17 -1
- data/ext/boost/date_time/compiler_config.hpp +13 -15
- data/ext/boost/date_time/date_formatting.hpp +7 -1
- data/ext/boost/date_time/filetime_functions.hpp +4 -4
- data/ext/boost/date_time/gregorian_calendar.ipp +2 -2
- data/ext/boost/date_time/strings_from_facet.hpp +3 -3
- data/ext/boost/date_time/time_facet.hpp +101 -101
- data/ext/boost/detail/endian.hpp +4 -2
- data/ext/boost/detail/fenv.hpp +74 -0
- data/ext/boost/detail/sp_typeinfo.hpp +6 -0
- data/ext/boost/exception/detail/clone_current_exception.hpp +47 -0
- data/ext/boost/exception/detail/exception_ptr.hpp +194 -122
- data/ext/boost/exception/detail/type_info.hpp +3 -3
- data/ext/boost/exception/diagnostic_information.hpp +37 -21
- data/ext/boost/exception/exception.hpp +21 -1
- data/ext/boost/exception/info.hpp +0 -1
- data/ext/boost/function.hpp +2 -2
- data/ext/boost/function/function_base.hpp +15 -9
- data/ext/boost/function/function_template.hpp +26 -48
- data/ext/boost/integer_fwd.hpp +0 -16
- data/ext/boost/integer_traits.hpp +2 -2
- data/ext/boost/iterator.hpp +1 -1
- data/ext/boost/iterator/iterator_adaptor.hpp +1 -7
- data/ext/boost/iterator/iterator_facade.hpp +13 -13
- data/ext/boost/iterator/transform_iterator.hpp +5 -20
- data/ext/boost/lexical_cast.hpp +1655 -673
- data/ext/boost/math/policies/policy.hpp +982 -0
- data/ext/boost/math/special_functions/detail/fp_traits.hpp +570 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +80 -0
- data/ext/boost/math/special_functions/fpclassify.hpp +533 -0
- data/ext/boost/math/special_functions/math_fwd.hpp +1070 -0
- data/ext/boost/math/special_functions/sign.hpp +145 -0
- data/ext/boost/math/tools/config.hpp +321 -0
- data/ext/boost/math/tools/promotion.hpp +150 -0
- data/ext/boost/math/tools/real_cast.hpp +29 -0
- data/ext/boost/math/tools/user.hpp +97 -0
- data/ext/boost/move/move.hpp +1222 -0
- data/ext/boost/mpl/O1_size.hpp +40 -0
- data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
- data/ext/boost/mpl/advance.hpp +76 -0
- data/ext/boost/mpl/advance_fwd.hpp +28 -0
- data/ext/boost/mpl/at.hpp +52 -0
- data/ext/boost/mpl/at_fwd.hpp +24 -0
- data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
- data/ext/boost/mpl/aux_/advance_backward.hpp +128 -0
- data/ext/boost/mpl/aux_/advance_forward.hpp +127 -0
- data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
- data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
- data/ext/boost/mpl/aux_/begin_end_impl.hpp +101 -0
- data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
- data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
- data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
- data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
- data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
- data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
- data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
- data/ext/boost/mpl/aux_/has_size.hpp +23 -0
- data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
- data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
- data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
- data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
- data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
- data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
- data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
- data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
- data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
- data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
- data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
- data/ext/boost/mpl/aux_/numeric_op.hpp +315 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
- data/ext/boost/mpl/aux_/push_back_impl.hpp +70 -0
- data/ext/boost/mpl/aux_/push_front_impl.hpp +71 -0
- data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
- data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
- data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +63 -0
- data/ext/boost/mpl/back_fwd.hpp +24 -0
- data/ext/boost/mpl/back_inserter.hpp +34 -0
- data/ext/boost/mpl/begin_end.hpp +57 -0
- data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
- data/ext/boost/mpl/clear.hpp +39 -0
- data/ext/boost/mpl/clear_fwd.hpp +24 -0
- data/ext/boost/mpl/comparison.hpp +24 -0
- data/ext/boost/mpl/contains.hpp +41 -0
- data/ext/boost/mpl/contains_fwd.hpp +25 -0
- data/ext/boost/mpl/deref.hpp +41 -0
- data/ext/boost/mpl/distance.hpp +78 -0
- data/ext/boost/mpl/distance_fwd.hpp +28 -0
- data/ext/boost/mpl/empty_fwd.hpp +24 -0
- data/ext/boost/mpl/equal_to.hpp +21 -0
- data/ext/boost/mpl/find.hpp +38 -0
- data/ext/boost/mpl/find_if.hpp +50 -0
- data/ext/boost/mpl/fold.hpp +48 -0
- data/ext/boost/mpl/front_fwd.hpp +24 -0
- data/ext/boost/mpl/front_inserter.hpp +33 -0
- data/ext/boost/mpl/greater.hpp +21 -0
- data/ext/boost/mpl/greater_equal.hpp +21 -0
- data/ext/boost/mpl/inserter.hpp +32 -0
- data/ext/boost/mpl/iter_fold.hpp +49 -0
- data/ext/boost/mpl/iter_fold_if.hpp +117 -0
- data/ext/boost/mpl/iterator_range.hpp +42 -0
- data/ext/boost/mpl/iterator_tags.hpp +27 -0
- data/ext/boost/mpl/less.hpp +21 -0
- data/ext/boost/mpl/less_equal.hpp +21 -0
- data/ext/boost/mpl/limits/list.hpp +21 -0
- data/ext/boost/mpl/limits/vector.hpp +21 -0
- data/ext/boost/mpl/list.hpp +57 -0
- data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
- data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
- data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
- data/ext/boost/mpl/list/aux_/front.hpp +33 -0
- data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
- data/ext/boost/mpl/list/aux_/item.hpp +55 -0
- data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
- data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
- data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
- data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
- data/ext/boost/mpl/list/aux_/size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
- data/ext/boost/mpl/list/list0.hpp +42 -0
- data/ext/boost/mpl/list/list10.hpp +43 -0
- data/ext/boost/mpl/list/list20.hpp +43 -0
- data/ext/boost/mpl/long.hpp +22 -0
- data/ext/boost/mpl/long_fwd.hpp +27 -0
- data/ext/boost/mpl/minus.hpp +21 -0
- data/ext/boost/mpl/multiplies.hpp +53 -0
- data/ext/boost/mpl/negate.hpp +81 -0
- data/ext/boost/mpl/not_equal_to.hpp +21 -0
- data/ext/boost/mpl/numeric_cast.hpp +41 -0
- data/ext/boost/mpl/pair.hpp +70 -0
- data/ext/boost/mpl/plus.hpp +21 -0
- data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
- data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
- data/ext/boost/mpl/prior.hpp +19 -0
- data/ext/boost/mpl/push_back.hpp +53 -0
- data/ext/boost/mpl/push_back_fwd.hpp +24 -0
- data/ext/boost/mpl/push_front.hpp +52 -0
- data/ext/boost/mpl/push_front_fwd.hpp +24 -0
- data/ext/boost/mpl/remove_if.hpp +83 -0
- data/ext/boost/mpl/reverse_fold.hpp +50 -0
- data/ext/boost/mpl/same_as.hpp +55 -0
- data/ext/boost/mpl/sequence_tag.hpp +124 -0
- data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
- data/ext/boost/mpl/size.hpp +42 -0
- data/ext/boost/mpl/size_fwd.hpp +24 -0
- data/ext/boost/mpl/tag.hpp +52 -0
- data/ext/boost/mpl/times.hpp +21 -0
- data/ext/boost/mpl/vector.hpp +57 -0
- data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
- data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
- data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
- data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
- data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
- data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
- data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
- data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
- data/ext/boost/mpl/vector/vector0.hpp +34 -0
- data/ext/boost/mpl/vector/vector10.hpp +45 -0
- data/ext/boost/mpl/vector/vector20.hpp +45 -0
- data/ext/boost/none.hpp +1 -1
- data/ext/boost/numeric/conversion/bounds.hpp +24 -0
- data/ext/boost/numeric/conversion/cast.hpp +61 -0
- data/ext/boost/numeric/conversion/conversion_traits.hpp +39 -0
- data/ext/boost/numeric/conversion/converter.hpp +68 -0
- data/ext/boost/numeric/conversion/converter_policies.hpp +186 -0
- data/ext/boost/numeric/conversion/detail/bounds.hpp +58 -0
- data/ext/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- data/ext/boost/numeric/conversion/detail/converter.hpp +602 -0
- data/ext/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- data/ext/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- data/ext/boost/numeric/conversion/detail/meta.hpp +120 -0
- data/ext/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- data/ext/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- data/ext/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- data/ext/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- data/ext/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- data/ext/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- data/ext/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- data/ext/boost/operators.hpp +3 -1
- data/ext/boost/optional/optional.hpp +146 -79
- data/ext/boost/optional/optional_fwd.hpp +8 -1
- data/ext/boost/preprocessor/cat.hpp +2 -2
- data/ext/boost/preprocessor/config/config.hpp +39 -4
- data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
- data/ext/boost/preprocessor/facilities/overload.hpp +25 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +3 -3
- data/ext/boost/preprocessor/iteration/iterate.hpp +3 -3
- data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
- data/ext/boost/preprocessor/seq/cat.hpp +5 -4
- data/ext/boost/preprocessor/seq/size.hpp +0 -1
- data/ext/boost/preprocessor/tuple/eat.hpp +83 -34
- data/ext/boost/preprocessor/tuple/elem.hpp +161 -355
- data/ext/boost/preprocessor/tuple/rem.hpp +110 -48
- data/ext/boost/preprocessor/tuple/to_list.hpp +90 -36
- data/ext/boost/preprocessor/variadic/elem.hpp +94 -0
- data/ext/boost/preprocessor/variadic/size.hpp +30 -0
- data/ext/boost/range/begin.hpp +17 -6
- data/ext/boost/range/concepts.hpp +37 -2
- data/ext/boost/range/detail/safe_bool.hpp +72 -0
- data/ext/boost/range/end.hpp +14 -9
- data/ext/boost/range/iterator_range_core.hpp +120 -12
- data/ext/boost/range/size.hpp +21 -5
- data/ext/boost/smart_ptr/detail/shared_count.hpp +88 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +142 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +9 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +10 -2
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +5 -1
- data/ext/boost/smart_ptr/detail/spinlock.hpp +4 -1
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +20 -3
- data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +4 -0
- data/ext/boost/smart_ptr/make_shared.hpp +591 -22
- data/ext/boost/smart_ptr/shared_array.hpp +29 -1
- data/ext/boost/smart_ptr/shared_ptr.hpp +29 -13
- data/ext/boost/smart_ptr/weak_ptr.hpp +24 -12
- data/ext/boost/src/pthread/once.cpp +9 -7
- data/ext/boost/src/pthread/thread.cpp +32 -28
- data/ext/boost/src/pthread/timeconv.inl +4 -5
- data/ext/boost/src/tss_null.cpp +5 -1
- data/ext/boost/static_assert.hpp +8 -2
- data/ext/boost/thread/detail/config.hpp +19 -4
- data/ext/boost/thread/detail/move.hpp +11 -5
- data/ext/boost/thread/detail/thread.hpp +59 -43
- data/ext/boost/thread/exceptions.hpp +9 -9
- data/ext/boost/thread/future.hpp +150 -82
- data/ext/boost/thread/locks.hpp +101 -60
- data/ext/boost/thread/pthread/condition_variable.hpp +79 -32
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +12 -3
- data/ext/boost/thread/pthread/mutex.hpp +17 -14
- data/ext/boost/thread/pthread/once.hpp +3 -4
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +12 -2
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -19
- data/ext/boost/thread/pthread/shared_mutex.hpp +13 -13
- data/ext/boost/thread/pthread/thread_data.hpp +40 -12
- data/ext/boost/thread/thread_time.hpp +5 -0
- data/ext/boost/throw_exception.hpp +1 -1
- data/ext/boost/token_functions.hpp +34 -10
- data/ext/boost/type_traits/add_rvalue_reference.hpp +66 -0
- data/ext/boost/type_traits/alignment_of.hpp +1 -1
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +26 -3
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +3 -2
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +1 -1
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +6 -4
- data/ext/boost/type_traits/detail/type_trait_def.hpp +8 -2
- data/ext/boost/type_traits/function_traits.hpp +1 -1
- data/ext/boost/type_traits/has_nothrow_constructor.hpp +53 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +19 -5
- data/ext/boost/type_traits/has_trivial_constructor.hpp +51 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +20 -5
- data/ext/boost/type_traits/has_trivial_destructor.hpp +12 -5
- data/ext/boost/type_traits/intrinsics.hpp +119 -71
- data/ext/boost/type_traits/is_const.hpp +5 -5
- data/ext/boost/type_traits/is_convertible.hpp +14 -13
- data/ext/boost/type_traits/is_enum.hpp +1 -1
- data/ext/boost/type_traits/is_floating_point.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +3 -3
- data/ext/boost/type_traits/is_fundamental.hpp +1 -1
- data/ext/boost/type_traits/is_member_function_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_member_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_pod.hpp +11 -3
- data/ext/boost/type_traits/is_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_signed.hpp +8 -3
- data/ext/boost/type_traits/is_union.hpp +8 -0
- data/ext/boost/type_traits/is_unsigned.hpp +9 -4
- data/ext/boost/type_traits/is_volatile.hpp +5 -5
- data/ext/boost/type_traits/remove_cv.hpp +4 -3
- data/ext/boost/type_traits/remove_pointer.hpp +51 -2
- data/ext/boost/type_traits/remove_reference.hpp +2 -2
- data/ext/boost/type_traits/type_with_alignment.hpp +8 -2
- data/ext/boost/utility/declval.hpp +44 -0
- data/ext/boost/utility/detail/in_place_factory_prefix.hpp +36 -0
- data/ext/boost/utility/detail/in_place_factory_suffix.hpp +23 -0
- data/ext/boost/utility/detail/result_of_iterate.hpp +142 -0
- data/ext/boost/utility/in_place_factory.hpp +88 -0
- data/ext/boost/utility/result_of.hpp +103 -0
- data/ext/boost/utility/swap.hpp +55 -0
- data/ext/common/AnsiColorConstants.h +36 -0
- data/ext/common/ApplicationPool2/Common.h +87 -0
- data/ext/common/ApplicationPool2/ComponentInfo.h +53 -0
- data/ext/common/ApplicationPool2/Group.h +648 -0
- data/ext/common/ApplicationPool2/Implementation.cpp +580 -0
- data/ext/common/ApplicationPool2/Options.h +576 -0
- data/ext/common/ApplicationPool2/PipeWatcher.h +61 -0
- data/ext/common/ApplicationPool2/Pool.h +1181 -0
- data/ext/common/ApplicationPool2/Process.h +425 -0
- data/ext/common/ApplicationPool2/README.md +96 -0
- data/ext/common/ApplicationPool2/Session.h +158 -0
- data/ext/common/ApplicationPool2/Socket.h +246 -0
- data/ext/common/ApplicationPool2/Spawner.h +2212 -0
- data/ext/common/ApplicationPool2/SuperGroup.h +749 -0
- data/ext/common/BackgroundEventLoop.cpp +129 -0
- data/ext/common/BackgroundEventLoop.h +61 -0
- data/ext/common/Constants.h +3 -1
- data/ext/common/EventedBufferedInput.h +331 -0
- data/ext/common/EventedMessageServer.h +17 -34
- data/ext/common/EventedServer.h +2 -2
- data/ext/common/Exceptions.h +71 -19
- data/ext/common/FileDescriptor.h +8 -6
- data/ext/common/HttpConstants.h +167 -0
- data/ext/common/IniFile.h +24 -0
- data/ext/common/Logging.h +62 -849
- data/ext/common/MessageReadersWriters.h +19 -0
- data/ext/common/MessageServer.h +11 -14
- data/ext/common/MultiLibeio.cpp +198 -0
- data/ext/common/MultiLibeio.h +67 -0
- data/ext/common/ResourceLocator.h +24 -41
- data/ext/common/SafeLibev.h +186 -14
- data/ext/common/StaticString.h +23 -3
- data/ext/common/UnionStation.h +972 -0
- data/ext/common/Utils.cpp +168 -24
- data/ext/common/Utils.h +25 -3
- data/ext/common/Utils/CachedFileStat.hpp +4 -3
- data/ext/common/Utils/FileChangeChecker.h +2 -2
- data/ext/common/Utils/HashMap.h +50 -0
- data/ext/common/Utils/IOUtils.cpp +229 -68
- data/ext/common/Utils/IOUtils.h +134 -3
- data/ext/common/Utils/Lock.h +28 -0
- data/ext/common/Utils/MemoryBarrier.h +52 -0
- data/ext/common/Utils/PriorityQueue.h +54 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +9 -11
- data/ext/common/Utils/ScopeGuard.h +50 -1
- data/ext/common/Utils/SmallVector.h +653 -0
- data/ext/common/Utils/StrIntUtils.cpp +26 -2
- data/ext/common/Utils/StrIntUtils.h +18 -2
- data/ext/common/Utils/StringMap.h +125 -8
- data/ext/common/Utils/Template.h +212 -0
- data/ext/common/Utils/fib.c +699 -0
- data/ext/common/Utils/fib.h +101 -0
- data/ext/common/Utils/fibpriv.h +67 -0
- data/ext/common/Utils/json-forwards.h +249 -0
- data/ext/common/Utils/json.h +1855 -0
- data/ext/common/Utils/jsoncpp.cpp +4230 -0
- data/ext/common/agents/Base.cpp +1126 -0
- data/ext/common/{AgentBase.h → agents/Base.h} +5 -1
- data/ext/common/agents/EnvPrinter.c +16 -0
- data/ext/common/agents/HelperAgent/AgentOptions.h +81 -0
- data/ext/common/{HelperAgent → agents/HelperAgent}/BacktracesServer.h +3 -2
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +732 -0
- data/ext/common/agents/HelperAgent/Main.cpp +497 -0
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +283 -0
- data/ext/common/agents/HelperAgent/RequestHandler.h +2139 -0
- data/ext/common/agents/HelperAgent/ScgiRequestParser.h +451 -0
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/DataStoreId.h +1 -1
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.cpp +1 -1
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.h +0 -0
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/LoggingServer.h +18 -16
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/Main.cpp +15 -13
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/RemoteSender.h +6 -6
- data/ext/common/agents/SpawnPreparer.cpp +127 -0
- data/ext/common/{Watchdog.cpp → agents/Watchdog/Main.cpp} +63 -25
- data/ext/libeio/Changes +72 -0
- data/ext/{google/COPYING → libeio/LICENSE} +17 -9
- data/ext/libeio/Makefile.am +15 -0
- data/ext/libeio/Makefile.in +694 -0
- data/ext/libeio/aclocal.m4 +9418 -0
- data/ext/libeio/autogen.sh +3 -0
- data/ext/libeio/config.guess +1501 -0
- data/ext/libeio/config.h.in +136 -0
- data/ext/libeio/config.sub +1705 -0
- data/ext/libeio/configure +14822 -0
- data/ext/libeio/configure.ac +22 -0
- data/ext/libeio/demo.c +194 -0
- data/ext/libeio/ecb.h +457 -0
- data/ext/libeio/eio.c +2816 -0
- data/ext/libeio/eio.h +411 -0
- data/ext/libeio/install-sh +520 -0
- data/ext/libeio/libeio.m4 +211 -0
- data/ext/libeio/ltmain.sh +9636 -0
- data/ext/libeio/missing +376 -0
- data/ext/libeio/xthread.h +166 -0
- data/ext/libev/Changes +125 -7
- data/ext/libev/Makefile.am +5 -3
- data/ext/libev/Makefile.in +209 -120
- data/ext/libev/aclocal.m4 +6027 -4619
- data/ext/libev/autogen.sh +1 -4
- data/ext/libev/config.h.in +11 -7
- data/ext/libev/configure +7312 -14993
- data/ext/libev/configure.ac +12 -5
- data/ext/libev/depcomp +630 -0
- data/ext/libev/ev++.h +48 -32
- data/ext/libev/ev.c +1173 -391
- data/ext/libev/ev.h +315 -181
- data/ext/libev/ev_epoll.c +66 -15
- data/ext/libev/ev_kqueue.c +20 -18
- data/ext/libev/ev_poll.c +27 -23
- data/ext/libev/ev_port.c +39 -19
- data/ext/libev/ev_select.c +23 -17
- data/ext/libev/ev_vars.h +25 -8
- data/ext/libev/ev_win32.c +6 -6
- data/ext/libev/ev_wrap.h +22 -2
- data/ext/libev/event.c +18 -17
- data/ext/libev/event.h +16 -4
- data/ext/libev/libev.m4 +10 -6
- data/ext/libev/ltmain.sh +7353 -5811
- data/ext/nginx/Configuration.c +74 -42
- data/ext/nginx/Configuration.h +3 -5
- data/ext/nginx/ContentHandler.c +26 -83
- data/ext/nginx/ContentHandler.h +1 -1
- data/ext/nginx/config +13 -9
- data/ext/nginx/ngx_http_passenger_module.c +3 -7
- data/ext/oxt/detail/backtrace_enabled.hpp +5 -102
- data/ext/oxt/detail/context.hpp +90 -0
- data/ext/oxt/detail/spin_lock_darwin.hpp +4 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +4 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +14 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +2 -2
- data/ext/oxt/dynamic_thread_group.hpp +27 -1
- data/ext/oxt/implementation.cpp +415 -0
- data/ext/oxt/{thread.cpp → initialize.hpp} +13 -6
- data/ext/oxt/macros.hpp +32 -1
- data/ext/oxt/spin_lock.hpp +6 -11
- data/ext/oxt/system_calls.cpp +204 -16
- data/ext/oxt/system_calls.hpp +85 -45
- data/ext/oxt/thread.hpp +13 -117
- data/ext/ruby/passenger_native_support.c +82 -237
- data/helper-scripts/backtrace-sanitizer.rb +114 -0
- data/helper-scripts/classic-rails-loader.rb +135 -0
- data/helper-scripts/classic-rails-preloader.rb +161 -0
- data/helper-scripts/node-loader.js +314 -0
- data/helper-scripts/rack-loader.rb +104 -0
- data/helper-scripts/rack-preloader.rb +132 -0
- data/helper-scripts/wsgi-loader.py +231 -0
- data/helper-scripts/wsgi-preloader.py +1 -0
- data/lib/phusion_passenger.rb +159 -61
- data/lib/phusion_passenger/abstract_installer.rb +182 -87
- data/lib/phusion_passenger/admin_tools/server_instance.rb +25 -19
- data/lib/phusion_passenger/analytics_logger.rb +5 -4
- data/lib/phusion_passenger/classic_rails/{request_handler.rb → thread_handler_extension.rb} +4 -40
- data/lib/phusion_passenger/classic_rails_extensions/init.rb +5 -3
- data/lib/phusion_passenger/common_library.rb +441 -0
- data/lib/phusion_passenger/console_text_template.rb +4 -16
- data/lib/phusion_passenger/constants.rb +1 -8
- data/lib/phusion_passenger/debug_logging.rb +5 -2
- data/lib/phusion_passenger/dependencies.rb +51 -13
- data/lib/phusion_passenger/loader_shared_helpers.rb +318 -0
- data/lib/phusion_passenger/message_channel.rb +3 -47
- data/lib/phusion_passenger/message_client.rb +2 -2
- data/lib/phusion_passenger/native_support.rb +36 -15
- data/lib/phusion_passenger/packaging.rb +8 -11
- data/lib/phusion_passenger/platform_info.rb +25 -17
- data/lib/phusion_passenger/platform_info/apache.rb +10 -7
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +10 -30
- data/lib/phusion_passenger/platform_info/compiler.rb +93 -34
- data/lib/phusion_passenger/platform_info/ruby.rb +37 -97
- data/lib/phusion_passenger/preloader_shared_helpers.rb +121 -0
- data/lib/phusion_passenger/public_api.rb +1 -4
- data/lib/phusion_passenger/rack/{request_handler.rb → thread_handler_extension.rb} +14 -63
- data/lib/phusion_passenger/rails3_extensions/init.rb +9 -8
- data/lib/phusion_passenger/request_handler.rb +500 -0
- data/lib/phusion_passenger/request_handler/thread_handler.rb +360 -0
- data/lib/phusion_passenger/ruby_core_enhancements.rb +142 -0
- data/lib/phusion_passenger/standalone/command.rb +36 -15
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +16 -8
- data/lib/phusion_passenger/standalone/runtime_installer.rb +169 -72
- data/lib/phusion_passenger/standalone/start_command.rb +44 -39
- data/lib/phusion_passenger/standalone/utils.rb +5 -5
- data/lib/phusion_passenger/utils.rb +35 -914
- data/lib/phusion_passenger/utils/ansi_colors.rb +59 -0
- data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
- data/lib/phusion_passenger/utils/robust_interruption.rb +134 -0
- data/lib/phusion_passenger/utils/tee_input.rb +174 -0
- data/lib/phusion_passenger/utils/tmpio.rb +33 -0
- data/lib/phusion_passenger/utils/unseekable_socket.rb +6 -0
- data/resources/mime.types +5 -1
- data/{lib/phusion_passenger/templates → resources}/standalone_default_root/index.html +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/config_snippets.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/deployment_example.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/no_write_permission_to_passenger_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/welcome.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/error_layout.css +6 -0
- data/resources/templates/error_layout.html.template +89 -0
- data/resources/templates/general_error.html.template +1 -0
- data/resources/templates/general_error_with_html.html.template +1 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/ask_for_extra_configure_flags.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/cannot_write_to_dir.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets_inserted.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/confirm_extra_configure_flags.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/deployment_example.txt.erb +0 -0
- data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +8 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_downloaded.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_extracted.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/query_download_and_install.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/welcome.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/cannot_write_to_dir.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/config.erb +26 -5
- data/{lib/phusion_passenger → resources}/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/welcome.txt.erb +0 -0
- data/resources/templates/undisclosed_error.html.template +25 -0
- data/test/config.json.example +42 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +86 -0
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +44 -0
- data/test/cxx/ApplicationPool2/PoolTest.cpp +1234 -0
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +131 -0
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +229 -0
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +744 -0
- data/test/cxx/BufferedIOTest.cpp +7 -7
- data/test/cxx/CxxTestMain.cpp +65 -2
- data/test/cxx/FileBackedPipeTest.cpp +626 -0
- data/test/cxx/FileChangeCheckerTest.cpp +20 -18
- data/test/cxx/FilterSupportTest.cpp +5 -5
- data/test/cxx/IOUtilsTest.cpp +11 -4
- data/test/cxx/MessageReadersWritersTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +31 -30
- data/test/cxx/RequestHandlerTest.cpp +777 -0
- data/test/cxx/ScgiRequestParserTest.cpp +36 -16
- data/test/cxx/ServerInstanceDirTest.cpp +1 -1
- data/test/cxx/StringMapTest.cpp +61 -0
- data/test/cxx/TemplateTest.cpp +118 -0
- data/test/cxx/TestSupport.cpp +25 -68
- data/test/cxx/TestSupport.h +81 -41
- data/test/cxx/{LoggingTest.cpp → UnionStationTest.cpp} +79 -74
- data/test/cxx/UtilsTest.cpp +59 -5
- data/test/integration_tests/apache2_tests.rb +2 -2
- data/test/integration_tests/nginx_tests.rb +1 -1
- data/test/integration_tests/spec_helper.rb +7 -5
- data/test/oxt/oxt_test_main.cpp +2 -0
- data/test/oxt/syscall_interruption_test.cpp +1 -0
- data/test/ruby/classic_rails/loader_spec.rb +48 -0
- data/test/ruby/classic_rails/preloader_spec.rb +54 -0
- data/test/ruby/rack/loader_spec.rb +62 -0
- data/test/ruby/rack/preloader_spec.rb +74 -0
- data/test/ruby/{abstract_request_handler_spec.rb → request_handler_spec.rb} +31 -68
- data/test/ruby/shared/loader_spec.rb +241 -0
- data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +141 -182
- data/test/ruby/shared/ruby_loader_spec.rb +55 -0
- data/test/ruby/spec_helper.rb +8 -53
- data/test/ruby/utils/file_system_watcher_spec.rb +9 -1
- data/test/ruby/utils_spec.rb +10 -683
- data/test/stub/rack/config.ru +28 -3
- data/test/stub/rack/start.rb +47 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/Rakefile +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/application_controller.rb +0 -2
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_1.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_2.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/foo_controller.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/helpers/application_helper.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/boot.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/database.yml +3 -3
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environment.rb +5 -2
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/development.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/production.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/staging.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/inflections.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/mime_types.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/routes.rb +1 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/about +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/console +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/dbconsole +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/destroy +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/generate +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/benchmarker +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/profiler +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/request +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/plugin +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/inspector +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/reaper +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/spawner +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/runner +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/server +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/Gemfile +0 -0
- data/test/stub/rails3.0/Gemfile.lock +80 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/Rakefile +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/controllers/application_controller.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/helpers/application_helper.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/views/layouts/application.html.erb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config.ru +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/application.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/boot.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/database.yml +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environment.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/development.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/production.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/test.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/backtrace_silencers.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/inflections.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/mime_types.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/passenger.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/secret_token.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/session_store.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/locales/en.yml +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/routes.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/db/seeds.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/doc/README_FOR_APP +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/404.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/422.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/500.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/favicon.ico +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/index.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/robots.txt +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/script/rails +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/performance/browsing_test.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/test_helper.rb +0 -0
- data/test/stub/start_error.pl +24 -0
- data/test/stub/wsgi/passenger_wsgi.py +71 -3
- data/test/support/apache2_controller.rb +2 -2
- data/test/support/placebo-preloader.rb +88 -0
- data/test/support/test_helper.rb +1 -14
- data/test/tut/tut.h +11 -4
- metadata +590 -326
- data.tar.gz.asc +0 -12
- data/PACKAGING.TXT +0 -25
- data/build/config.rb +0 -46
- data/ext/apache2/HelperAgent.cpp +0 -364
- data/ext/boost/call_traits.hpp +0 -24
- data/ext/boost/detail/call_traits.hpp +0 -164
- data/ext/common/AbstractSpawnManager.h +0 -110
- data/ext/common/AgentBase.cpp +0 -432
- data/ext/common/ApplicationPool/Client.h +0 -788
- data/ext/common/ApplicationPool/Interface.h +0 -295
- data/ext/common/ApplicationPool/Pool.h +0 -1327
- data/ext/common/ApplicationPool/Server.h +0 -479
- data/ext/common/MessageChannel.h +0 -494
- data/ext/common/PoolOptions.h +0 -518
- data/ext/common/Process.h +0 -253
- data/ext/common/Session.h +0 -436
- data/ext/common/SpawnManager.h +0 -611
- data/ext/google/ChangeLog +0 -167
- data/ext/google/dense_hash_map +0 -310
- data/ext/google/dense_hash_set +0 -287
- data/ext/google/sparse_hash_map +0 -294
- data/ext/google/sparse_hash_set +0 -275
- data/ext/google/sparsehash/densehashtable.h +0 -1062
- data/ext/google/sparsehash/sparseconfig.h +0 -55
- data/ext/google/sparsehash/sparsehashtable.h +0 -1015
- data/ext/google/sparsetable +0 -1468
- data/ext/google/type_traits.h +0 -250
- data/ext/nginx/HelperAgent.cpp +0 -1355
- data/ext/nginx/ScgiRequestParser.h +0 -375
- data/ext/oxt/backtrace.cpp +0 -185
- data/ext/oxt/tracable_exception.cpp +0 -89
- data/helper-scripts/passenger-spawn-server +0 -106
- data/lib/phusion_passenger/abstract_request_handler.rb +0 -766
- data/lib/phusion_passenger/abstract_server.rb +0 -372
- data/lib/phusion_passenger/abstract_server_collection.rb +0 -335
- data/lib/phusion_passenger/app_process.rb +0 -174
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +0 -344
- data/lib/phusion_passenger/classic_rails/framework_spawner.rb +0 -311
- data/lib/phusion_passenger/exceptions.rb +0 -103
- data/lib/phusion_passenger/html_template.rb +0 -107
- data/lib/phusion_passenger/rack/application_spawner.rb +0 -231
- data/lib/phusion_passenger/spawn_manager.rb +0 -359
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +0 -38
- data/lib/phusion_passenger/templates/app_init_error.html.erb +0 -64
- data/lib/phusion_passenger/templates/database_error.html.erb +0 -66
- data/lib/phusion_passenger/templates/error_layout.html.erb +0 -39
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +0 -39
- data/lib/phusion_passenger/templates/general_error.html.erb +0 -22
- data/lib/phusion_passenger/templates/load_error.html.erb +0 -46
- data/lib/phusion_passenger/templates/version_not_found.html.erb +0 -34
- data/lib/phusion_passenger/utils/rewindable_input.rb +0 -125
- data/lib/phusion_passenger/wsgi/application_spawner.rb +0 -108
- data/test/config.yml.example +0 -41
- data/test/cxx/ApplicationPool_PoolTest.cpp +0 -33
- data/test/cxx/ApplicationPool_PoolTestCases.cpp +0 -1029
- data/test/cxx/ApplicationPool_ServerTest.cpp +0 -308
- data/test/cxx/ApplicationPool_Server_PoolTest.cpp +0 -80
- data/test/cxx/MessageChannelTest.cpp +0 -557
- data/test/cxx/PoolOptionsTest.cpp +0 -116
- data/test/cxx/SpawnManagerTest.cpp +0 -161
- data/test/ruby/abstract_server_collection_spec.rb +0 -247
- data/test/ruby/abstract_server_spec.rb +0 -61
- data/test/ruby/app_process_spec.rb +0 -43
- data/test/ruby/classic_rails/application_spawner_spec.rb +0 -89
- data/test/ruby/classic_rails/framework_spawner_spec.rb +0 -92
- data/test/ruby/rack/application_spawner_spec.rb +0 -116
- data/test/ruby/shared/abstract_server_spec.rb +0 -23
- data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +0 -38
- data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +0 -19
- data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +0 -15
- data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +0 -27
- data/test/ruby/shared/spawners/preloading_spawner_spec.rb +0 -29
- data/test/ruby/shared/spawners/reload_all_spec.rb +0 -36
- data/test/ruby/shared/spawners/reload_single_spec.rb +0 -52
- data/test/ruby/shared/spawners/spawn_server_spec.rb +0 -28
- data/test/ruby/shared/spawners/spawner_spec.rb +0 -273
- data/test/ruby/shared/utils/pseudo_io_spec.rb +0 -60
- data/test/ruby/spawn_manager_spec.rb +0 -134
- data/test/ruby/wsgi/application_spawner_spec.rb +0 -50
- data/test/stub/message_channel.rb +0 -11
- data/test/stub/message_channel_2.rb +0 -12
- data/test/stub/message_channel_3.rb +0 -19
- data/test/stub/rails_apps/3.0/empty/Gemfile.lock +0 -73
- data/test/stub/spawn_server.rb +0 -22
- metadata.gz.asc +0 -12
@@ -0,0 +1,58 @@
|
|
1
|
+
// (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
|
2
|
+
// Use, modification, and distribution is subject to the Boost Software
|
3
|
+
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
5
|
+
|
6
|
+
// See library home page at http://www.boost.org/libs/numeric/conversion
|
7
|
+
//
|
8
|
+
// Contact the author at: fernando_cacciola@hotmail.com
|
9
|
+
//
|
10
|
+
#ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
|
11
|
+
#define BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP
|
12
|
+
|
13
|
+
#include "boost/limits.hpp"
|
14
|
+
#include "boost/config.hpp"
|
15
|
+
#include "boost/mpl/if.hpp"
|
16
|
+
|
17
|
+
namespace boost { namespace numeric { namespace boundsdetail
|
18
|
+
{
|
19
|
+
template<class N>
|
20
|
+
class Integral
|
21
|
+
{
|
22
|
+
typedef std::numeric_limits<N> limits ;
|
23
|
+
|
24
|
+
public :
|
25
|
+
|
26
|
+
static N lowest () { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
|
27
|
+
static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
|
28
|
+
static N smallest() { return static_cast<N>(1); }
|
29
|
+
} ;
|
30
|
+
|
31
|
+
template<class N>
|
32
|
+
class Float
|
33
|
+
{
|
34
|
+
typedef std::numeric_limits<N> limits ;
|
35
|
+
|
36
|
+
public :
|
37
|
+
|
38
|
+
static N lowest () { return static_cast<N>(-limits::max BOOST_PREVENT_MACRO_SUBSTITUTION ()) ; }
|
39
|
+
static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); }
|
40
|
+
static N smallest() { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); }
|
41
|
+
} ;
|
42
|
+
|
43
|
+
template<class N>
|
44
|
+
struct get_impl
|
45
|
+
{
|
46
|
+
typedef mpl::bool_< ::std::numeric_limits<N>::is_integer > is_int ;
|
47
|
+
|
48
|
+
typedef Integral<N> impl_int ;
|
49
|
+
typedef Float <N> impl_float ;
|
50
|
+
|
51
|
+
typedef typename mpl::if_<is_int,impl_int,impl_float>::type type ;
|
52
|
+
} ;
|
53
|
+
|
54
|
+
} } } // namespace boost::numeric::boundsdetail.
|
55
|
+
|
56
|
+
#endif
|
57
|
+
//
|
58
|
+
///////////////////////////////////////////////////////////////////////////////////////////////
|
@@ -0,0 +1,97 @@
|
|
1
|
+
// (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
|
2
|
+
// Use, modification, and distribution is subject to the Boost Software
|
3
|
+
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
5
|
+
|
6
|
+
// See library home page at http://www.boost.org/libs/numeric/conversion
|
7
|
+
//
|
8
|
+
// Contact the author at: fernando_cacciola@hotmail.com
|
9
|
+
//
|
10
|
+
#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
|
11
|
+
#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERSION_TRAITS_FLC_12NOV2002_HPP
|
12
|
+
|
13
|
+
#include "boost/type_traits/is_arithmetic.hpp"
|
14
|
+
#include "boost/type_traits/is_same.hpp"
|
15
|
+
#include "boost/type_traits/remove_cv.hpp"
|
16
|
+
|
17
|
+
#include "boost/numeric/conversion/detail/meta.hpp"
|
18
|
+
#include "boost/numeric/conversion/detail/int_float_mixture.hpp"
|
19
|
+
#include "boost/numeric/conversion/detail/sign_mixture.hpp"
|
20
|
+
#include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
|
21
|
+
#include "boost/numeric/conversion/detail/is_subranged.hpp"
|
22
|
+
|
23
|
+
namespace boost { namespace numeric { namespace convdetail
|
24
|
+
{
|
25
|
+
//-------------------------------------------------------------------
|
26
|
+
// Implementation of the Conversion Traits for T != S
|
27
|
+
//
|
28
|
+
// This is a VISIBLE base class of the user-level conversion_traits<> class.
|
29
|
+
//-------------------------------------------------------------------
|
30
|
+
template<class T,class S>
|
31
|
+
struct non_trivial_traits_impl
|
32
|
+
{
|
33
|
+
typedef typename get_int_float_mixture <T,S>::type int_float_mixture ;
|
34
|
+
typedef typename get_sign_mixture <T,S>::type sign_mixture ;
|
35
|
+
typedef typename get_udt_builtin_mixture <T,S>::type udt_builtin_mixture ;
|
36
|
+
|
37
|
+
typedef typename get_is_subranged<T,S>::type subranged ;
|
38
|
+
|
39
|
+
typedef mpl::false_ trivial ;
|
40
|
+
|
41
|
+
typedef T target_type ;
|
42
|
+
typedef S source_type ;
|
43
|
+
typedef T result_type ;
|
44
|
+
|
45
|
+
typedef typename mpl::if_< is_arithmetic<S>, S, S const&>::type argument_type ;
|
46
|
+
|
47
|
+
typedef typename mpl::if_<subranged,S,T>::type supertype ;
|
48
|
+
typedef typename mpl::if_<subranged,T,S>::type subtype ;
|
49
|
+
} ;
|
50
|
+
|
51
|
+
//-------------------------------------------------------------------
|
52
|
+
// Implementation of the Conversion Traits for T == S
|
53
|
+
//
|
54
|
+
// This is a VISIBLE base class of the user-level conversion_traits<> class.
|
55
|
+
//-------------------------------------------------------------------
|
56
|
+
template<class N>
|
57
|
+
struct trivial_traits_impl
|
58
|
+
{
|
59
|
+
typedef typename get_int_float_mixture <N,N>::type int_float_mixture ;
|
60
|
+
typedef typename get_sign_mixture <N,N>::type sign_mixture ;
|
61
|
+
typedef typename get_udt_builtin_mixture<N,N>::type udt_builtin_mixture ;
|
62
|
+
|
63
|
+
typedef mpl::false_ subranged ;
|
64
|
+
typedef mpl::true_ trivial ;
|
65
|
+
|
66
|
+
typedef N target_type ;
|
67
|
+
typedef N source_type ;
|
68
|
+
typedef N const& result_type ;
|
69
|
+
typedef N const& argument_type ;
|
70
|
+
|
71
|
+
typedef N supertype ;
|
72
|
+
typedef N subtype ;
|
73
|
+
|
74
|
+
} ;
|
75
|
+
|
76
|
+
//-------------------------------------------------------------------
|
77
|
+
// Top level implementation selector.
|
78
|
+
//-------------------------------------------------------------------
|
79
|
+
template<class T, class S>
|
80
|
+
struct get_conversion_traits
|
81
|
+
{
|
82
|
+
typedef typename remove_cv<T>::type target_type ;
|
83
|
+
typedef typename remove_cv<S>::type source_type ;
|
84
|
+
|
85
|
+
typedef typename is_same<target_type,source_type>::type is_trivial ;
|
86
|
+
|
87
|
+
typedef trivial_traits_impl <target_type> trivial_imp ;
|
88
|
+
typedef non_trivial_traits_impl<target_type,source_type> non_trivial_imp ;
|
89
|
+
|
90
|
+
typedef typename mpl::if_<is_trivial,trivial_imp,non_trivial_imp>::type type ;
|
91
|
+
} ;
|
92
|
+
|
93
|
+
} } } // namespace boost::numeric::convdetail
|
94
|
+
|
95
|
+
#endif
|
96
|
+
|
97
|
+
|
@@ -0,0 +1,602 @@
|
|
1
|
+
// (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
|
2
|
+
// Use, modification, and distribution is subject to the Boost Software
|
3
|
+
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
5
|
+
|
6
|
+
// See library home page at http://www.boost.org/libs/numeric/conversion
|
7
|
+
//
|
8
|
+
// Contact the author at: fernando_cacciola@hotmail.com
|
9
|
+
//
|
10
|
+
#ifndef BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
|
11
|
+
#define BOOST_NUMERIC_CONVERSION_DETAIL_CONVERTER_FLC_12NOV2002_HPP
|
12
|
+
|
13
|
+
#include <functional>
|
14
|
+
|
15
|
+
#include "boost/numeric/conversion/detail/meta.hpp"
|
16
|
+
#include "boost/numeric/conversion/detail/conversion_traits.hpp"
|
17
|
+
#include "boost/numeric/conversion/bounds.hpp"
|
18
|
+
|
19
|
+
#include "boost/type_traits/is_same.hpp"
|
20
|
+
|
21
|
+
#include "boost/mpl/integral_c.hpp"
|
22
|
+
|
23
|
+
namespace boost { namespace numeric { namespace convdetail
|
24
|
+
{
|
25
|
+
// Integral Constants representing rounding modes
|
26
|
+
typedef mpl::integral_c<std::float_round_style, std::round_toward_zero> round2zero_c ;
|
27
|
+
typedef mpl::integral_c<std::float_round_style, std::round_to_nearest> round2nearest_c ;
|
28
|
+
typedef mpl::integral_c<std::float_round_style, std::round_toward_infinity> round2inf_c ;
|
29
|
+
typedef mpl::integral_c<std::float_round_style, std::round_toward_neg_infinity> round2neg_inf_c ;
|
30
|
+
|
31
|
+
// Metafunction:
|
32
|
+
//
|
33
|
+
// for_round_style<RoundStyle,RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf>::type
|
34
|
+
//
|
35
|
+
// {RoundStyle} Integral Constant specifying a round style as declared above.
|
36
|
+
// {RoundToZero,RoundToNearest,RoundToInf,RoundToNegInf} arbitrary types.
|
37
|
+
//
|
38
|
+
// Selects one of the 4 types according to the value of RoundStyle.
|
39
|
+
//
|
40
|
+
template<class RoundStyle,class RoundToZero,class RoundToNearest,class RoundToInf,class RoundToNegInf>
|
41
|
+
struct for_round_style
|
42
|
+
{
|
43
|
+
typedef ct_switch4<RoundStyle
|
44
|
+
, round2zero_c, round2nearest_c, round2inf_c // round2neg_inf_c
|
45
|
+
, RoundToZero , RoundToNearest , RoundToInf , RoundToNegInf
|
46
|
+
> selector ;
|
47
|
+
|
48
|
+
typedef typename selector::type type ;
|
49
|
+
} ;
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
//--------------------------------------------------------------------------
|
69
|
+
// Range Checking Logic.
|
70
|
+
//
|
71
|
+
// The range checking logic is built up by combining 1 or 2 predicates.
|
72
|
+
// Each predicate is encapsulated in a template class and exposes
|
73
|
+
// the static member function 'apply'.
|
74
|
+
//
|
75
|
+
//--------------------------------------------------------------------------
|
76
|
+
|
77
|
+
|
78
|
+
// Because a particular logic can combine either 1 or two predicates, the following
|
79
|
+
// tags are used to allow the predicate applier to receive 2 preds, but optimize away
|
80
|
+
// one of them if it is 'non-applicable'
|
81
|
+
struct non_applicable { typedef mpl::false_ do_apply ; } ;
|
82
|
+
struct applicable { typedef mpl::true_ do_apply ; } ;
|
83
|
+
|
84
|
+
|
85
|
+
//--------------------------------------------------------------------------
|
86
|
+
//
|
87
|
+
// Range Checking Logic implementations.
|
88
|
+
//
|
89
|
+
// The following classes, collectivelly named 'Predicates', are instantiated within
|
90
|
+
// the corresponding range checkers.
|
91
|
+
// Their static member function 'apply' is called to perform the actual range checking logic.
|
92
|
+
//--------------------------------------------------------------------------
|
93
|
+
|
94
|
+
// s < Lowest(T) ? cNegOverflow : cInRange
|
95
|
+
//
|
96
|
+
template<class Traits>
|
97
|
+
struct LT_LoT : applicable
|
98
|
+
{
|
99
|
+
typedef typename Traits::target_type T ;
|
100
|
+
typedef typename Traits::source_type S ;
|
101
|
+
typedef typename Traits::argument_type argument_type ;
|
102
|
+
|
103
|
+
static range_check_result apply ( argument_type s )
|
104
|
+
{
|
105
|
+
return s < static_cast<S>(bounds<T>::lowest()) ? cNegOverflow : cInRange ;
|
106
|
+
}
|
107
|
+
} ;
|
108
|
+
|
109
|
+
// s < 0 ? cNegOverflow : cInRange
|
110
|
+
//
|
111
|
+
template<class Traits>
|
112
|
+
struct LT_Zero : applicable
|
113
|
+
{
|
114
|
+
typedef typename Traits::source_type S ;
|
115
|
+
typedef typename Traits::argument_type argument_type ;
|
116
|
+
|
117
|
+
static range_check_result apply ( argument_type s )
|
118
|
+
{
|
119
|
+
return s < static_cast<S>(0) ? cNegOverflow : cInRange ;
|
120
|
+
}
|
121
|
+
} ;
|
122
|
+
|
123
|
+
// s <= Lowest(T)-1 ? cNegOverflow : cInRange
|
124
|
+
//
|
125
|
+
template<class Traits>
|
126
|
+
struct LE_PrevLoT : applicable
|
127
|
+
{
|
128
|
+
typedef typename Traits::target_type T ;
|
129
|
+
typedef typename Traits::source_type S ;
|
130
|
+
typedef typename Traits::argument_type argument_type ;
|
131
|
+
|
132
|
+
static range_check_result apply ( argument_type s )
|
133
|
+
{
|
134
|
+
return s <= static_cast<S>(bounds<T>::lowest()) - static_cast<S>(1.0)
|
135
|
+
? cNegOverflow : cInRange ;
|
136
|
+
}
|
137
|
+
} ;
|
138
|
+
|
139
|
+
// s < Lowest(T)-0.5 ? cNegOverflow : cInRange
|
140
|
+
//
|
141
|
+
template<class Traits>
|
142
|
+
struct LT_HalfPrevLoT : applicable
|
143
|
+
{
|
144
|
+
typedef typename Traits::target_type T ;
|
145
|
+
typedef typename Traits::source_type S ;
|
146
|
+
typedef typename Traits::argument_type argument_type ;
|
147
|
+
|
148
|
+
static range_check_result apply ( argument_type s )
|
149
|
+
{
|
150
|
+
return s < static_cast<S>(bounds<T>::lowest()) - static_cast<S>(0.5)
|
151
|
+
? cNegOverflow : cInRange ;
|
152
|
+
}
|
153
|
+
} ;
|
154
|
+
|
155
|
+
// s > Highest(T) ? cPosOverflow : cInRange
|
156
|
+
//
|
157
|
+
template<class Traits>
|
158
|
+
struct GT_HiT : applicable
|
159
|
+
{
|
160
|
+
typedef typename Traits::target_type T ;
|
161
|
+
typedef typename Traits::source_type S ;
|
162
|
+
typedef typename Traits::argument_type argument_type ;
|
163
|
+
|
164
|
+
static range_check_result apply ( argument_type s )
|
165
|
+
{
|
166
|
+
return s > static_cast<S>(bounds<T>::highest())
|
167
|
+
? cPosOverflow : cInRange ;
|
168
|
+
}
|
169
|
+
} ;
|
170
|
+
|
171
|
+
// s >= Lowest(T) + 1 ? cPosOverflow : cInRange
|
172
|
+
//
|
173
|
+
template<class Traits>
|
174
|
+
struct GE_SuccHiT : applicable
|
175
|
+
{
|
176
|
+
typedef typename Traits::target_type T ;
|
177
|
+
typedef typename Traits::source_type S ;
|
178
|
+
typedef typename Traits::argument_type argument_type ;
|
179
|
+
|
180
|
+
static range_check_result apply ( argument_type s )
|
181
|
+
{
|
182
|
+
return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(1.0)
|
183
|
+
? cPosOverflow : cInRange ;
|
184
|
+
}
|
185
|
+
} ;
|
186
|
+
|
187
|
+
// s >= Lowest(T) + 0.5 ? cPosgOverflow : cInRange
|
188
|
+
//
|
189
|
+
template<class Traits>
|
190
|
+
struct GT_HalfSuccHiT : applicable
|
191
|
+
{
|
192
|
+
typedef typename Traits::target_type T ;
|
193
|
+
typedef typename Traits::source_type S ;
|
194
|
+
typedef typename Traits::argument_type argument_type ;
|
195
|
+
|
196
|
+
static range_check_result apply ( argument_type s )
|
197
|
+
{
|
198
|
+
return s >= static_cast<S>(bounds<T>::highest()) + static_cast<S>(0.5)
|
199
|
+
? cPosOverflow : cInRange ;
|
200
|
+
}
|
201
|
+
} ;
|
202
|
+
|
203
|
+
|
204
|
+
//--------------------------------------------------------------------------
|
205
|
+
//
|
206
|
+
// Predicate Combiner.
|
207
|
+
//
|
208
|
+
// This helper classes are used to possibly combine the range checking logic
|
209
|
+
// individually performed by the predicates
|
210
|
+
//
|
211
|
+
//--------------------------------------------------------------------------
|
212
|
+
|
213
|
+
|
214
|
+
// Applies both predicates: first 'PredA', and if it equals 'cInRange', 'PredB'
|
215
|
+
template<class PredA, class PredB>
|
216
|
+
struct applyBoth
|
217
|
+
{
|
218
|
+
typedef typename PredA::argument_type argument_type ;
|
219
|
+
|
220
|
+
static range_check_result apply ( argument_type s )
|
221
|
+
{
|
222
|
+
range_check_result r = PredA::apply(s) ;
|
223
|
+
if ( r == cInRange )
|
224
|
+
r = PredB::apply(s);
|
225
|
+
return r ;
|
226
|
+
}
|
227
|
+
} ;
|
228
|
+
|
229
|
+
template<class PredA, class PredB>
|
230
|
+
struct combine
|
231
|
+
{
|
232
|
+
typedef applyBoth<PredA,PredB> Both ;
|
233
|
+
typedef void NNone ; // 'None' is defined as a macro in (/usr/X11R6/include/X11/X.h)
|
234
|
+
|
235
|
+
typedef typename PredA::do_apply do_applyA ;
|
236
|
+
typedef typename PredB::do_apply do_applyB ;
|
237
|
+
|
238
|
+
typedef typename for_both<do_applyA, do_applyB, Both, PredA, PredB, NNone>::type type ;
|
239
|
+
} ;
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
//--------------------------------------------------------------------------
|
253
|
+
// Range Checker classes.
|
254
|
+
//
|
255
|
+
// The following classes are VISIBLE base classes of the user-level converter<> class.
|
256
|
+
// They supply the optimized 'out_of_range()' and 'validate_range()' static member functions
|
257
|
+
// visible in the user interface.
|
258
|
+
//
|
259
|
+
//--------------------------------------------------------------------------
|
260
|
+
|
261
|
+
// Dummy range checker.
|
262
|
+
template<class Traits>
|
263
|
+
struct dummy_range_checker
|
264
|
+
{
|
265
|
+
typedef typename Traits::argument_type argument_type ;
|
266
|
+
|
267
|
+
static range_check_result out_of_range ( argument_type ) { return cInRange ; }
|
268
|
+
static void validate_range ( argument_type ) {}
|
269
|
+
} ;
|
270
|
+
|
271
|
+
// Generic range checker.
|
272
|
+
//
|
273
|
+
// All the range checking logic for all possible combinations of source and target
|
274
|
+
// can be arranged in terms of one or two predicates, which test overflow on both neg/pos 'sides'
|
275
|
+
// of the ranges.
|
276
|
+
//
|
277
|
+
// These predicates are given here as IsNegOverflow and IsPosOverflow.
|
278
|
+
//
|
279
|
+
template<class Traits, class IsNegOverflow, class IsPosOverflow, class OverflowHandler>
|
280
|
+
struct generic_range_checker
|
281
|
+
{
|
282
|
+
typedef OverflowHandler overflow_handler ;
|
283
|
+
|
284
|
+
typedef typename Traits::argument_type argument_type ;
|
285
|
+
|
286
|
+
static range_check_result out_of_range ( argument_type s )
|
287
|
+
{
|
288
|
+
typedef typename combine<IsNegOverflow,IsPosOverflow>::type Predicate ;
|
289
|
+
|
290
|
+
return Predicate::apply(s);
|
291
|
+
}
|
292
|
+
|
293
|
+
static void validate_range ( argument_type s )
|
294
|
+
{ OverflowHandler()( out_of_range(s) ) ; }
|
295
|
+
} ;
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
//--------------------------------------------------------------------------
|
300
|
+
//
|
301
|
+
// Selectors for the optimized Range Checker class.
|
302
|
+
//
|
303
|
+
//--------------------------------------------------------------------------
|
304
|
+
|
305
|
+
template<class Traits,class OverflowHandler>
|
306
|
+
struct GetRC_Sig2Sig_or_Unsig2Unsig
|
307
|
+
{
|
308
|
+
typedef dummy_range_checker<Traits> Dummy ;
|
309
|
+
|
310
|
+
typedef LT_LoT<Traits> Pred1 ;
|
311
|
+
typedef GT_HiT<Traits> Pred2 ;
|
312
|
+
|
313
|
+
typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
|
314
|
+
|
315
|
+
typedef typename Traits::subranged subranged ;
|
316
|
+
|
317
|
+
typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
|
318
|
+
} ;
|
319
|
+
|
320
|
+
template<class Traits, class OverflowHandler>
|
321
|
+
struct GetRC_Sig2Unsig
|
322
|
+
{
|
323
|
+
typedef LT_Zero<Traits> Pred1 ;
|
324
|
+
typedef GT_HiT <Traits> Pred2 ;
|
325
|
+
|
326
|
+
typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ChoiceA ;
|
327
|
+
|
328
|
+
typedef generic_range_checker<Traits,Pred1,non_applicable,OverflowHandler> ChoiceB ;
|
329
|
+
|
330
|
+
typedef typename Traits::target_type T ;
|
331
|
+
typedef typename Traits::source_type S ;
|
332
|
+
|
333
|
+
typedef typename subranged_Unsig2Sig<S,T>::type oposite_subranged ;
|
334
|
+
|
335
|
+
typedef typename mpl::not_<oposite_subranged>::type positively_subranged ;
|
336
|
+
|
337
|
+
typedef typename mpl::if_<positively_subranged,ChoiceA,ChoiceB>::type type ;
|
338
|
+
} ;
|
339
|
+
|
340
|
+
template<class Traits, class OverflowHandler>
|
341
|
+
struct GetRC_Unsig2Sig
|
342
|
+
{
|
343
|
+
typedef GT_HiT<Traits> Pred1 ;
|
344
|
+
|
345
|
+
typedef generic_range_checker<Traits,non_applicable,Pred1,OverflowHandler> type ;
|
346
|
+
} ;
|
347
|
+
|
348
|
+
template<class Traits,class OverflowHandler>
|
349
|
+
struct GetRC_Int2Int
|
350
|
+
{
|
351
|
+
typedef GetRC_Sig2Sig_or_Unsig2Unsig<Traits,OverflowHandler> Sig2SigQ ;
|
352
|
+
typedef GetRC_Sig2Unsig <Traits,OverflowHandler> Sig2UnsigQ ;
|
353
|
+
typedef GetRC_Unsig2Sig <Traits,OverflowHandler> Unsig2SigQ ;
|
354
|
+
typedef Sig2SigQ Unsig2UnsigQ ;
|
355
|
+
|
356
|
+
typedef typename Traits::sign_mixture sign_mixture ;
|
357
|
+
|
358
|
+
typedef typename
|
359
|
+
for_sign_mixture<sign_mixture,Sig2SigQ,Sig2UnsigQ,Unsig2SigQ,Unsig2UnsigQ>::type
|
360
|
+
selector ;
|
361
|
+
|
362
|
+
typedef typename selector::type type ;
|
363
|
+
} ;
|
364
|
+
|
365
|
+
template<class Traits>
|
366
|
+
struct GetRC_Int2Float
|
367
|
+
{
|
368
|
+
typedef dummy_range_checker<Traits> type ;
|
369
|
+
} ;
|
370
|
+
|
371
|
+
template<class Traits, class OverflowHandler, class Float2IntRounder>
|
372
|
+
struct GetRC_Float2Int
|
373
|
+
{
|
374
|
+
typedef LE_PrevLoT <Traits> Pred1 ;
|
375
|
+
typedef GE_SuccHiT <Traits> Pred2 ;
|
376
|
+
typedef LT_HalfPrevLoT<Traits> Pred3 ;
|
377
|
+
typedef GT_HalfSuccHiT<Traits> Pred4 ;
|
378
|
+
typedef GT_HiT <Traits> Pred5 ;
|
379
|
+
typedef LT_LoT <Traits> Pred6 ;
|
380
|
+
|
381
|
+
typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> ToZero ;
|
382
|
+
typedef generic_range_checker<Traits,Pred3,Pred4,OverflowHandler> ToNearest ;
|
383
|
+
typedef generic_range_checker<Traits,Pred1,Pred5,OverflowHandler> ToInf ;
|
384
|
+
typedef generic_range_checker<Traits,Pred6,Pred2,OverflowHandler> ToNegInf ;
|
385
|
+
|
386
|
+
typedef typename Float2IntRounder::round_style round_style ;
|
387
|
+
|
388
|
+
typedef typename for_round_style<round_style,ToZero,ToNearest,ToInf,ToNegInf>::type type ;
|
389
|
+
} ;
|
390
|
+
|
391
|
+
template<class Traits, class OverflowHandler>
|
392
|
+
struct GetRC_Float2Float
|
393
|
+
{
|
394
|
+
typedef dummy_range_checker<Traits> Dummy ;
|
395
|
+
|
396
|
+
typedef LT_LoT<Traits> Pred1 ;
|
397
|
+
typedef GT_HiT<Traits> Pred2 ;
|
398
|
+
|
399
|
+
typedef generic_range_checker<Traits,Pred1,Pred2,OverflowHandler> Normal ;
|
400
|
+
|
401
|
+
typedef typename Traits::subranged subranged ;
|
402
|
+
|
403
|
+
typedef typename mpl::if_<subranged,Normal,Dummy>::type type ;
|
404
|
+
} ;
|
405
|
+
|
406
|
+
template<class Traits, class OverflowHandler, class Float2IntRounder>
|
407
|
+
struct GetRC_BuiltIn2BuiltIn
|
408
|
+
{
|
409
|
+
typedef GetRC_Int2Int<Traits,OverflowHandler> Int2IntQ ;
|
410
|
+
typedef GetRC_Int2Float<Traits> Int2FloatQ ;
|
411
|
+
typedef GetRC_Float2Int<Traits,OverflowHandler,Float2IntRounder> Float2IntQ ;
|
412
|
+
typedef GetRC_Float2Float<Traits,OverflowHandler> Float2FloatQ ;
|
413
|
+
|
414
|
+
typedef typename Traits::int_float_mixture int_float_mixture ;
|
415
|
+
|
416
|
+
typedef typename for_int_float_mixture<int_float_mixture, Int2IntQ, Int2FloatQ, Float2IntQ, Float2FloatQ>::type selector ;
|
417
|
+
|
418
|
+
typedef typename selector::type type ;
|
419
|
+
} ;
|
420
|
+
|
421
|
+
template<class Traits, class OverflowHandler, class Float2IntRounder>
|
422
|
+
struct GetRC
|
423
|
+
{
|
424
|
+
typedef GetRC_BuiltIn2BuiltIn<Traits,OverflowHandler,Float2IntRounder> BuiltIn2BuiltInQ ;
|
425
|
+
|
426
|
+
typedef dummy_range_checker<Traits> Dummy ;
|
427
|
+
|
428
|
+
typedef mpl::identity<Dummy> DummyQ ;
|
429
|
+
|
430
|
+
typedef typename Traits::udt_builtin_mixture udt_builtin_mixture ;
|
431
|
+
|
432
|
+
typedef typename for_udt_builtin_mixture<udt_builtin_mixture,BuiltIn2BuiltInQ,DummyQ,DummyQ,DummyQ>::type selector ;
|
433
|
+
|
434
|
+
typedef typename selector::type type ;
|
435
|
+
} ;
|
436
|
+
|
437
|
+
|
438
|
+
|
439
|
+
|
440
|
+
//--------------------------------------------------------------------------
|
441
|
+
// Converter classes.
|
442
|
+
//
|
443
|
+
// The following classes are VISIBLE base classes of the user-level converter<> class.
|
444
|
+
// They supply the optimized 'nearbyint()' and 'convert()' static member functions
|
445
|
+
// visible in the user interface.
|
446
|
+
//
|
447
|
+
//--------------------------------------------------------------------------
|
448
|
+
|
449
|
+
//
|
450
|
+
// Trivial Converter : used when (cv-unqualified) T == (cv-unqualified) S
|
451
|
+
//
|
452
|
+
template<class Traits>
|
453
|
+
struct trivial_converter_impl : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
|
454
|
+
,BOOST_DEDUCED_TYPENAME Traits::result_type
|
455
|
+
>
|
456
|
+
,public dummy_range_checker<Traits>
|
457
|
+
{
|
458
|
+
typedef Traits traits ;
|
459
|
+
|
460
|
+
typedef typename Traits::source_type source_type ;
|
461
|
+
typedef typename Traits::argument_type argument_type ;
|
462
|
+
typedef typename Traits::result_type result_type ;
|
463
|
+
|
464
|
+
static result_type low_level_convert ( argument_type s ) { return s ; }
|
465
|
+
static source_type nearbyint ( argument_type s ) { return s ; }
|
466
|
+
static result_type convert ( argument_type s ) { return s ; }
|
467
|
+
} ;
|
468
|
+
|
469
|
+
|
470
|
+
//
|
471
|
+
// Rounding Converter : used for float to integral conversions.
|
472
|
+
//
|
473
|
+
template<class Traits,class RangeChecker,class RawConverter,class Float2IntRounder>
|
474
|
+
struct rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
|
475
|
+
,BOOST_DEDUCED_TYPENAME Traits::result_type
|
476
|
+
>
|
477
|
+
,public RangeChecker
|
478
|
+
,public Float2IntRounder
|
479
|
+
,public RawConverter
|
480
|
+
{
|
481
|
+
typedef RangeChecker RangeCheckerBase ;
|
482
|
+
typedef Float2IntRounder Float2IntRounderBase ;
|
483
|
+
typedef RawConverter RawConverterBase ;
|
484
|
+
|
485
|
+
typedef Traits traits ;
|
486
|
+
|
487
|
+
typedef typename Traits::source_type source_type ;
|
488
|
+
typedef typename Traits::argument_type argument_type ;
|
489
|
+
typedef typename Traits::result_type result_type ;
|
490
|
+
|
491
|
+
static result_type convert ( argument_type s )
|
492
|
+
{
|
493
|
+
RangeCheckerBase::validate_range(s);
|
494
|
+
source_type s1 = Float2IntRounderBase::nearbyint(s);
|
495
|
+
return RawConverterBase::low_level_convert(s1);
|
496
|
+
}
|
497
|
+
} ;
|
498
|
+
|
499
|
+
|
500
|
+
//
|
501
|
+
// Non-Rounding Converter : used for all other conversions.
|
502
|
+
//
|
503
|
+
template<class Traits,class RangeChecker,class RawConverter>
|
504
|
+
struct non_rounding_converter : public std::unary_function< BOOST_DEDUCED_TYPENAME Traits::argument_type
|
505
|
+
,BOOST_DEDUCED_TYPENAME Traits::result_type
|
506
|
+
>
|
507
|
+
,public RangeChecker
|
508
|
+
,public RawConverter
|
509
|
+
{
|
510
|
+
typedef RangeChecker RangeCheckerBase ;
|
511
|
+
typedef RawConverter RawConverterBase ;
|
512
|
+
|
513
|
+
typedef Traits traits ;
|
514
|
+
|
515
|
+
typedef typename Traits::source_type source_type ;
|
516
|
+
typedef typename Traits::argument_type argument_type ;
|
517
|
+
typedef typename Traits::result_type result_type ;
|
518
|
+
|
519
|
+
static source_type nearbyint ( argument_type s ) { return s ; }
|
520
|
+
|
521
|
+
static result_type convert ( argument_type s )
|
522
|
+
{
|
523
|
+
RangeCheckerBase::validate_range(s);
|
524
|
+
return RawConverterBase::low_level_convert(s);
|
525
|
+
}
|
526
|
+
} ;
|
527
|
+
|
528
|
+
|
529
|
+
|
530
|
+
|
531
|
+
//--------------------------------------------------------------------------
|
532
|
+
//
|
533
|
+
// Selectors for the optimized Converter class.
|
534
|
+
//
|
535
|
+
//--------------------------------------------------------------------------
|
536
|
+
|
537
|
+
template<class Traits,class OverflowHandler,class Float2IntRounder,class RawConverter, class UserRangeChecker>
|
538
|
+
struct get_non_trivial_converter
|
539
|
+
{
|
540
|
+
typedef GetRC<Traits,OverflowHandler,Float2IntRounder> InternalRangeCheckerQ ;
|
541
|
+
|
542
|
+
typedef is_same<UserRangeChecker,UseInternalRangeChecker> use_internal_RC ;
|
543
|
+
|
544
|
+
typedef mpl::identity<UserRangeChecker> UserRangeCheckerQ ;
|
545
|
+
|
546
|
+
typedef typename
|
547
|
+
mpl::eval_if<use_internal_RC,InternalRangeCheckerQ,UserRangeCheckerQ>::type
|
548
|
+
RangeChecker ;
|
549
|
+
|
550
|
+
typedef non_rounding_converter<Traits,RangeChecker,RawConverter> NonRounding ;
|
551
|
+
typedef rounding_converter<Traits,RangeChecker,RawConverter,Float2IntRounder> Rounding ;
|
552
|
+
|
553
|
+
typedef mpl::identity<NonRounding> NonRoundingQ ;
|
554
|
+
typedef mpl::identity<Rounding> RoundingQ ;
|
555
|
+
|
556
|
+
typedef typename Traits::int_float_mixture int_float_mixture ;
|
557
|
+
|
558
|
+
typedef typename
|
559
|
+
for_int_float_mixture<int_float_mixture, NonRoundingQ, NonRoundingQ, RoundingQ, NonRoundingQ>::type
|
560
|
+
selector ;
|
561
|
+
|
562
|
+
typedef typename selector::type type ;
|
563
|
+
} ;
|
564
|
+
|
565
|
+
template< class Traits
|
566
|
+
,class OverflowHandler
|
567
|
+
,class Float2IntRounder
|
568
|
+
,class RawConverter
|
569
|
+
,class UserRangeChecker
|
570
|
+
>
|
571
|
+
struct get_converter_impl
|
572
|
+
{
|
573
|
+
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT( 0x0561 ) )
|
574
|
+
// bcc55 prefers sometimes template parameters to be explicit local types.
|
575
|
+
// (notice that is is illegal to reuse the names like this)
|
576
|
+
typedef Traits Traits ;
|
577
|
+
typedef OverflowHandler OverflowHandler ;
|
578
|
+
typedef Float2IntRounder Float2IntRounder ;
|
579
|
+
typedef RawConverter RawConverter ;
|
580
|
+
typedef UserRangeChecker UserRangeChecker ;
|
581
|
+
#endif
|
582
|
+
|
583
|
+
typedef trivial_converter_impl<Traits> Trivial ;
|
584
|
+
typedef mpl::identity <Trivial> TrivialQ ;
|
585
|
+
|
586
|
+
typedef get_non_trivial_converter< Traits
|
587
|
+
,OverflowHandler
|
588
|
+
,Float2IntRounder
|
589
|
+
,RawConverter
|
590
|
+
,UserRangeChecker
|
591
|
+
> NonTrivialQ ;
|
592
|
+
|
593
|
+
typedef typename Traits::trivial trivial ;
|
594
|
+
|
595
|
+
typedef typename mpl::eval_if<trivial,TrivialQ,NonTrivialQ>::type type ;
|
596
|
+
} ;
|
597
|
+
|
598
|
+
} } } // namespace boost::numeric::convdetail
|
599
|
+
|
600
|
+
#endif
|
601
|
+
|
602
|
+
|