]> www.ginac.de Git - cln.git/commitdiff
Get rid of CL_REQUIRE/CL_PROVIDE(cl_F_catalanconst_var).
authorAlexei Sheplyakov <varg@theor.jinr.ru>
Thu, 21 Aug 2008 16:44:33 +0000 (20:44 +0400)
committerAlexei Sheplyakov <varg@theor.jinr.ru>
Wed, 27 Aug 2008 04:41:07 +0000 (08:41 +0400)
Turn cl_[SDFL]F_catalanconst global variables into functions (which return
a reference to the static value) in order to avoid static initialization
order problems.

include/cln/float.h
src/float/transcendental/cl_F_catalanconst.cc
src/float/transcendental/cl_F_catalanconst_def.cc
src/float/transcendental/cl_F_catalanconst_f.cc
src/float/transcendental/cl_F_catalanconst_var.cc
src/float/transcendental/cl_F_tran.h
src/float/transcendental/cl_LF_catalanconst.cc

index 701811a49ba1fffb574afcf0362f2c4d90635e72..5032cbea520de1490a5d0c3f14525e8b3b64866e 100644 (file)
@@ -691,9 +691,6 @@ extern const cl_F catalanconst (float_format_t f);
 // catalanconst() liefert die Catalansche Konstante im Default-Float-Format.
 extern const cl_F catalanconst (void);
 
-//CL_REQUIRE(cl_F_catalanconst_var)
-
-
 // zeta(s) returns the Riemann zeta function at s>1.
 extern const cl_F zeta (int s, const cl_F& y);
 extern const cl_F zeta (int s, float_format_t f);
index 72b0adf76ae252c71a9209f32c58c8feabf42ca5..63ff3076a7b3a972308bb3eeaaf8356545647c56 100644 (file)
@@ -18,9 +18,9 @@ namespace cln {
 const cl_F catalanconst (const cl_F& y)
 {
        floattypecase(y
-       ,       return cl_SF_catalanconst;
-       ,       return cl_FF_catalanconst;
-       ,       return cl_DF_catalanconst;
+       ,       return cl_SF_catalanconst();
+       ,       return cl_FF_catalanconst();
+       ,       return cl_DF_catalanconst();
        ,       return catalanconst(TheLfloat(y)->len);
        );
 }
index 5b07c25fb66c5683563644733cbf79ab03f2b9d6..6e45a3b23b4fe16d8a8e31289e43a474cd84e97d 100644 (file)
@@ -17,9 +17,9 @@ namespace cln {
 const cl_F catalanconst (void)
 {
        floatformatcase(default_float_format
-       ,       return cl_SF_catalanconst;
-       ,       return cl_FF_catalanconst;
-       ,       return cl_DF_catalanconst;
+       ,       return cl_SF_catalanconst();
+       ,       return cl_FF_catalanconst();
+       ,       return cl_DF_catalanconst();
        ,       return catalanconst(len);
        );
 }
index bbdc1767712b6202cfe8191a1df29c8489eb5a0d..c23811d3d809f54214da1a3d6163b612453e8d1b 100644 (file)
@@ -17,9 +17,9 @@ namespace cln {
 const cl_F catalanconst (float_format_t f)
 {
        floatformatcase((uintC)f
-       ,       return cl_SF_catalanconst;
-       ,       return cl_FF_catalanconst;
-       ,       return cl_DF_catalanconst;
+       ,       return cl_SF_catalanconst();
+       ,       return cl_FF_catalanconst();
+       ,       return cl_DF_catalanconst();
        ,       return catalanconst(len);
        );
 }
index b4799d23051e7e743b4fd4bf359501310d5ca7fd..829f2694971330e82e12042e2f9b31447e153ea4 100644 (file)
@@ -3,8 +3,6 @@
 // General includes.
 #include "cl_sysdep.h"
 
-CL_PROVIDE(cl_F_catalanconst_var)
-
 // Specification.
 #include "cl_F_tran.h"
 
@@ -18,20 +16,36 @@ CL_PROVIDE(cl_F_catalanconst_var)
 
 namespace cln {
 
-// Mantisse der Catalanschen Konstante :
-  static const uintD catalanconst_mantisse [64/intDsize] =
-    #include "cl_F_catalanconst_var.h"
-
-cl_LF cl_LF_catalanconst = encode_LF_array(0,0,catalanconst_mantisse,64/intDsize);
+cl_LF& cl_LF_catalanconst()
+{
+       // Mantisse der Catalanschen Konstante :
+       static const uintD catalanconst_mantisse [64/intDsize] =
+       #include "cl_F_catalanconst_var.h"
+       static cl_LF val = encode_LF_array(0,0,catalanconst_mantisse,64/intDsize);
+       return val;
+}
 
 // Problem: If someone changes free_hook, the destructor of this
 // will call the new hook, passing it some pointer obtained by the old
 // malloc_hook. ??
 
-const cl_SF cl_SF_catalanconst = cl_LF_to_SF(cl_LF_catalanconst);
-const cl_FF cl_FF_catalanconst = cl_LF_to_FF(cl_LF_catalanconst);
-const cl_DF cl_DF_catalanconst = cl_LF_to_DF(cl_LF_catalanconst);
+const cl_SF& cl_SF_catalanconst()
+{
+       static const cl_SF val = cl_LF_to_SF(cl_LF_catalanconst());
+       return val;
+}
+
+const cl_DF& cl_DF_catalanconst()
+{
+       static const cl_DF val = cl_LF_to_DF(cl_LF_catalanconst());
+       return val;
+}
+
+const cl_FF& cl_FF_catalanconst()
+{
+       static const cl_FF val = cl_LF_to_FF(cl_LF_catalanconst());
+       return val;
+}
 
 }  // namespace cln
 
-CL_PROVIDE_END(cl_F_catalanconst_var)
index 10d7af33524fe61d97812c331546f7a0f9412c3b..0899d578cd8f49234c40cbeff50f9dc6378f615c 100644 (file)
@@ -133,10 +133,10 @@ extern cl_LF& cl_LF_eulerconst(); // as long as it has ever been computed
 extern const cl_LF eulerconst (uintC len); // computes it even further
 
 // Catalansche Konstante.
-extern const cl_SF cl_SF_catalanconst;
-extern const cl_FF cl_FF_catalanconst;
-extern const cl_DF cl_DF_catalanconst;
-extern cl_LF cl_LF_catalanconst; // as long as it has ever been computed
+extern const cl_SF& cl_SF_catalanconst();
+extern const cl_FF& cl_FF_catalanconst();
+extern const cl_DF& cl_DF_catalanconst();
+extern cl_LF& cl_LF_catalanconst(); // as long as it has ever been computed
 extern const cl_LF catalanconst (uintC len); // computes it even further
 
 // Zeta-Funktion für s>1 ganzzahlig.
index 40db8e9bdf2c09e317f27e7ab237f4a50d82ef41..9e742c2bc5b3791f60fd17a76aca66b0b8d6ad20 100644 (file)
@@ -300,13 +300,13 @@ const cl_LF compute_catalanconst (uintC len)
 
 const cl_LF catalanconst (uintC len)
 {
-       var uintC oldlen = TheLfloat(cl_LF_catalanconst)->len; // vorhandene Länge
+       var uintC oldlen = TheLfloat(cl_LF_catalanconst())->len; // vorhandene Länge
        if (len < oldlen)
-               return shorten(cl_LF_catalanconst,len);
+               return shorten(cl_LF_catalanconst(),len);
        if (len == oldlen)
-               return cl_LF_catalanconst;
+               return cl_LF_catalanconst();
 
-       // TheLfloat(cl_LF_catalanconst)->len um mindestens einen konstanten Faktor
+       // TheLfloat(cl_LF_catalanconst())->len um mindestens einen konstanten Faktor
        // > 1 wachsen lassen, damit es nicht zu häufig nachberechnet wird:
        var uintC newlen = len;
        oldlen += floor(oldlen,2); // oldlen * 3/2
@@ -314,8 +314,8 @@ const cl_LF catalanconst (uintC len)
                newlen = oldlen;
 
        // gewünschte > vorhandene Länge -> muß nachberechnen:
-       cl_LF_catalanconst = compute_catalanconst(newlen);
-       return (len < newlen ? shorten(cl_LF_catalanconst,len) : cl_LF_catalanconst);
+       cl_LF_catalanconst() = compute_catalanconst(newlen);
+       return (len < newlen ? shorten(cl_LF_catalanconst(),len) : cl_LF_catalanconst());
 }
 
 }  // namespace cln