15 #include "cln/abort.h"
19 nonreturning_function(static, uninitialized_ring, (void));
20 static void uninitialized_ring ()
22 fprint(std::cerr, "Uninitialized ring operation called\n");
26 nonreturning_function(static, uninitialized_error, (const _cl_ring_element&));
27 static void uninitialized_error (const _cl_ring_element& obj)
29 fprint(std::cerr, "Uninitialized ring element @0x");
30 fprinthexadecimal(std::cerr, (unsigned long)(void*)&obj);
31 fprint(std::cerr, ": 0x");
32 fprinthexadecimal(std::cerr, (unsigned long)obj.rep.word);
33 fprint(std::cerr, "\n");
37 #if (defined(__sparc__) && !defined(__GNUC__))
38 // avoid Sun C++ 4.1 compiler bug
39 #define RETDUMMY return *(_cl_ring_element*)R
41 #define RETDUMMY return *(_cl_ring_element*)0
44 static const _cl_ring_element dummy_op0 (cl_heap_ring* R)
47 uninitialized_ring(); RETDUMMY;
50 static const _cl_ring_element dummy_op1 (cl_heap_ring* R, const _cl_ring_element& x)
53 uninitialized_error(x); RETDUMMY;
56 static const _cl_ring_element dummy_op2 (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
59 uninitialized_error(x); uninitialized_error(y); RETDUMMY;
62 static void dummy_fprint (cl_heap_ring* R, std::ostream& stream, const _cl_ring_element& x)
66 uninitialized_error(x);
68 static cl_boolean dummy_equal (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
71 uninitialized_error(x); uninitialized_error(y); return cl_false;
74 #define dummy_zero dummy_op0
75 static cl_boolean dummy_zerop (cl_heap_ring* R, const _cl_ring_element& x)
78 uninitialized_error(x); return cl_false;
80 #define dummy_plus dummy_op2
81 #define dummy_minus dummy_op2
82 #define dummy_uminus dummy_op1
84 #define dummy_one dummy_op0
85 static const _cl_ring_element dummy_canonhom (cl_heap_ring* R, const cl_I& x)
88 (void)&x; // unused x;
89 uninitialized_ring(); RETDUMMY;
91 #define dummy_mul dummy_op2
92 #define dummy_square dummy_op1
93 static const _cl_ring_element dummy_expt_pos (cl_heap_ring* R, const _cl_ring_element& x, const cl_I& y)
96 (void)&y; // unused y;
97 uninitialized_error(x); RETDUMMY;
100 static cl_ring_setops dummy_setops = {
104 static cl_ring_addops dummy_addops = {
111 static cl_ring_mulops dummy_mulops = {
119 class cl_heap_no_ring : public cl_heap_ring {
120 SUBCLASS_cl_heap_ring()
124 : cl_heap_ring (&dummy_setops,&dummy_addops,&dummy_mulops)
125 { type = &cl_class_no_ring; }
127 ~cl_heap_no_ring () {}
130 static void cl_no_ring_destructor (cl_heap* pointer)
132 (*(cl_heap_no_ring*)pointer).~cl_heap_no_ring();
135 static void cl_no_ring_dprint (cl_heap* pointer)
138 fprint(cl_debugout, "(cl_ring) cl_no_ring");
141 cl_class cl_class_no_ring = {
142 cl_no_ring_destructor,
147 const cl_ring cl_no_ring = cl_ring (new cl_heap_no_ring());
151 CL_PROVIDE_END(cl_no_ring)