From c8ce5a2fbf5ade435d424895b770a6d13a5b5a38 Mon Sep 17 00:00:00 2001 From: Alexei Sheplyakov Date: Thu, 21 Aug 2008 16:06:02 +0400 Subject: [PATCH] Get rid CL_REQUIRE/CL_PROVIDE(cl_fmt_scaleexp), it is not necessary. Move a bunch of static objects (tenth, SF_zero, FF_zero, etc) into the function get_float_params (which is the only user of those variables) in order to avoid possible static order initialization problems. --- src/real/format-output/cl_fmt_scaleexp.cc | 35 +++++++++++------------ src/real/format-output/cl_format.h | 2 -- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/real/format-output/cl_fmt_scaleexp.cc b/src/real/format-output/cl_fmt_scaleexp.cc index 404b71e..f982a18 100644 --- a/src/real/format-output/cl_fmt_scaleexp.cc +++ b/src/real/format-output/cl_fmt_scaleexp.cc @@ -3,8 +3,6 @@ // General includes. #include "cl_sysdep.h" -CL_PROVIDE(cl_fmt_scaleexp) - // Specification. #include "cl_format.h" @@ -38,24 +36,24 @@ struct float_format_params { : zero(a), one(b), ten(c), tenth(d), lg2(e) {} }; -static const cl_RA tenth = (cl_RA)"1/10"; -static const cl_SF SF_zero = cl_RA_to_SF(0); -static const cl_SF SF_one = cl_RA_to_SF(1); -static const cl_SF SF_ten = cl_RA_to_SF(10); -static const cl_SF SF_tenth = cl_RA_to_SF(tenth); -static const cl_FF FF_zero = cl_RA_to_FF(0); -static const cl_FF FF_one = cl_RA_to_FF(1); -static const cl_FF FF_ten = cl_RA_to_FF(10); -static const cl_FF FF_tenth = cl_RA_to_FF(tenth); -static const cl_DF DF_zero = cl_RA_to_DF(0); -static const cl_DF DF_one = cl_RA_to_DF(1); -static const cl_DF DF_ten = cl_RA_to_DF(10); -static const cl_DF DF_tenth = cl_RA_to_DF(tenth); -static const cl_SF SF_lg2 = (cl_SF)"0.30103"; -static const cl_DF DF_lg2 = (cl_DF)"0.30102999566"; - static const float_format_params get_float_params (const cl_F& arg) { + static const cl_RA tenth = (cl_RA)"1/10"; + static const cl_SF SF_zero = cl_RA_to_SF(0); + static const cl_SF SF_one = cl_RA_to_SF(1); + static const cl_SF SF_ten = cl_RA_to_SF(10); + static const cl_SF SF_tenth = cl_RA_to_SF(tenth); + static const cl_FF FF_zero = cl_RA_to_FF(0); + static const cl_FF FF_one = cl_RA_to_FF(1); + static const cl_FF FF_ten = cl_RA_to_FF(10); + static const cl_FF FF_tenth = cl_RA_to_FF(tenth); + static const cl_DF DF_zero = cl_RA_to_DF(0); + static const cl_DF DF_one = cl_RA_to_DF(1); + static const cl_DF DF_ten = cl_RA_to_DF(10); + static const cl_DF DF_tenth = cl_RA_to_DF(tenth); + static const cl_SF SF_lg2 = (cl_SF)"0.30103"; + static const cl_DF DF_lg2 = (cl_DF)"0.30102999566"; + floattypecase(arg , return float_format_params(SF_zero,SF_one,SF_ten,SF_tenth,SF_lg2); , return float_format_params(FF_zero,FF_one,FF_ten,FF_tenth,SF_lg2); @@ -115,4 +113,3 @@ const decoded_float format_scale_exponent (const cl_F& arg) } // namespace cln -CL_PROVIDE_END(cl_fmt_scaleexp) diff --git a/src/real/format-output/cl_format.h b/src/real/format-output/cl_format.h index 6ee9043..04662e5 100644 --- a/src/real/format-output/cl_format.h +++ b/src/real/format-output/cl_format.h @@ -52,7 +52,6 @@ extern void format_integer (std::ostream& stream, const cl_I& arg, unsigned int // arg = mantissa * 10^n * sign (also 10^(n-1) <= abs(arg) < 10^n ). // (Bei arg=0.0: 0.0 und n=0.) extern const decoded_float format_scale_exponent (const cl_F& arg); -CL_REQUIRE(cl_fmt_scaleexp) // format_float_to_string(arg,width,d,k,dmin) // ergibt einen String zum Floating-point arg: @@ -70,7 +69,6 @@ struct digits_with_dot { : string(s), length(l), dot_comes_first(df), dot_comes_last(dl), dot_position(dp) {} }; extern const digits_with_dot format_float_to_string (const cl_F& arg, const sintL width, const sintL d, const sintL k, const sintL dmin); -CL_REQUIRE(cl_fmt_floatstring) } // namespace cln