extern const cl_FF cl_FF_0;
inline cl_FF::cl_FF ()
: cl_F ((cl_private_thing) (struct cl_heap_ffloat *) cl_FF_0) {}
-CL_REQUIRE(cl_FF_globals)
+class cl_FF_globals_init_helper
+{
+ static int count;
+public:
+ cl_FF_globals_init_helper();
+ ~cl_FF_globals_init_helper();
+};
+static cl_FF_globals_init_helper cl_FF_globals_init_helper_instance;
#if 0 // see cl_FF.h
inline cl_FF::cl_FF (struct cl_heap_ffloat * ptr)
: cl_F ((cl_private_thing) ptr) {}
// General includes.
#include "cl_sysdep.h"
-CL_PROVIDE(cl_FF_globals)
-
// Specification.
+#include "cln/ffloat_class.h"
#include "cl_FF.h"
#if !defined(CL_WIDE_POINTERS)
-const cl_FF cl_FF_0 = allocate_ffloat(0); // 0.0f0
+const cl_FF cl_FF_0 = cl_FF_0; // 0.0f0
+
+const cl_FF cl_FF_1 = cl_FF_1; // 1.0f0
+
+const cl_FF cl_FF_minus1 = cl_FF_minus1; // -1.0f0
-const cl_FF cl_FF_1 = encode_FF(0,1,bit(FF_mant_len)); // 1.0f0
+int cl_FF_globals_init_helper::count = 0;
-const cl_FF cl_FF_minus1 = encode_FF(-1,1,bit(FF_mant_len)); // -1.0f0
+cl_FF_globals_init_helper::cl_FF_globals_init_helper()
+{
+ if (count++ == 0) {
+ new ((void *)&cl_FF_0) cl_FF(allocate_ffloat(0)); // 0.0f0
+ new ((void *)&cl_FF_1) cl_FF(encode_FF(0,1,bit(FF_mant_len))); // 1.0f0
+ new ((void *)&cl_FF_minus1) cl_FF(encode_FF(-1,1,bit(FF_mant_len))); // -1.0f0
+ }
+}
+cl_FF_globals_init_helper::~cl_FF_globals_init_helper()
+{
+ if (--count == 0) {
+ // Nothing to clean up
+ }
+}
#endif
} // namespace cln
-CL_PROVIDE_END(cl_FF_globals)