extern const cl_univpoly_ring cl_no_univpoly_ring;
extern cl_class cl_class_no_univpoly_ring;
-CL_REQUIRE(cl_UP_no_ring)
+
+class cl_UP_no_ring_init_helper
+{
+ static int count;
+public:
+ cl_UP_no_ring_init_helper();
+ ~cl_UP_no_ring_init_helper();
+};
+static cl_UP_no_ring_init_helper cl_UP_no_ring_init_helper_instance;
inline cl_univpoly_ring::cl_univpoly_ring ()
: cl_ring (as_cl_private_thing(cl_no_univpoly_ring)) {}
// General includes.
#include "cl_sysdep.h"
-CL_PROVIDE(cl_UP_no_ring)
-
// Specification.
#include "cln/univpoly.h"
(*(cl_heap_no_univpoly_ring*)pointer).~cl_heap_no_univpoly_ring();
}
-cl_class cl_class_no_univpoly_ring = {
- cl_no_univpoly_ring_destructor,
- 0
-};
+cl_class cl_class_no_univpoly_ring;
+static cl_heap_no_univpoly_ring* cl_heap_no_univpoly_ring_instance;
+const cl_univpoly_ring cl_no_univpoly_ring = cl_no_univpoly_ring;
+
+int cl_UP_no_ring_init_helper::count = 0;
+
+cl_UP_no_ring_init_helper::cl_UP_no_ring_init_helper()
+{
+ if (count++ == 0) {
+ cl_class_no_univpoly_ring.destruct = cl_no_univpoly_ring_destructor;
+ cl_class_no_univpoly_ring.flags = 0;
+ cl_heap_no_univpoly_ring_instance = new cl_heap_no_univpoly_ring();
+ new ((void *)&cl_no_univpoly_ring) cl_univpoly_ring(cl_heap_no_univpoly_ring_instance);
+ }
+}
-const cl_univpoly_ring cl_no_univpoly_ring = cl_univpoly_ring (new cl_heap_no_univpoly_ring());
+cl_UP_no_ring_init_helper::~cl_UP_no_ring_init_helper()
+{
+ if (--count == 0) {
+ delete cl_heap_no_univpoly_ring_instance;
+ }
+}
} // namespace cln
-CL_PROVIDE_END(cl_UP_no_ring)