4 #include "base/cl_sysdep.h"
8 #include "cln/null_ring.h"
13 #include "cln/integer_class.h"
17 static const _cl_ring_element null_op0 (cl_heap_ring* R)
19 return _cl_ring_element(R, (cl_I)0);
22 static const _cl_ring_element null_op1 (cl_heap_ring* R, const _cl_ring_element& x)
25 return _cl_ring_element(R, (cl_I)0);
28 static const _cl_ring_element null_op2 (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
32 return _cl_ring_element(R, (cl_I)0);
35 static void null_fprint (cl_heap_ring* R, std::ostream& stream, const _cl_ring_element& x)
42 static bool null_equal (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
50 #define null_zero null_op0
51 static bool null_zerop (cl_heap_ring* R, const _cl_ring_element& x)
57 #define null_plus null_op2
58 #define null_minus null_op2
59 #define null_uminus null_op1
61 #define null_one null_op0
62 static const _cl_ring_element null_canonhom (cl_heap_ring* R, const cl_I& x)
65 return _cl_ring_element(R, (cl_I)0);
67 #define null_mul null_op2
68 #define null_square null_op1
69 static const _cl_ring_element null_expt_pos (cl_heap_ring* R, const _cl_ring_element& x, const cl_I& y)
73 return _cl_ring_element(R, (cl_I)0);
76 static cl_ring_setops& null_setops()
78 static cl_ring_setops ops = {
85 static cl_ring_addops& null_addops()
87 static cl_ring_addops ops = {
97 static cl_ring_mulops& null_mulops()
99 static cl_ring_mulops ops = {
109 static const cl_class& cl_class_null_ring();
111 class cl_heap_null_ring : public cl_heap_ring {
112 SUBCLASS_cl_heap_ring()
116 : cl_heap_ring (&null_setops(),&null_addops(),&null_mulops())
117 { type = &cl_class_null_ring(); }
119 ~cl_heap_null_ring () {}
122 static void cl_null_ring_destructor (cl_heap* pointer)
124 (*(cl_heap_null_ring*)pointer).~cl_heap_null_ring();
127 static void cl_null_ring_dprint (cl_heap* pointer)
130 fprint(cl_debugout, "(cl_null_ring) cl_0_ring");
133 static const cl_class& cl_class_null_ring()
135 static const cl_class cl_class_null_ring_instance = {
136 cl_null_ring_destructor,
137 cl_class_flags_number_ring,
140 return cl_class_null_ring_instance;
143 cl_heap_null_ring* cl_heap_null_ring_instance;
144 const cl_null_ring cl_0_ring = cl_0_ring;
146 inline cl_null_ring::cl_null_ring ()
147 : cl_ring(cl_heap_null_ring_instance) {}
149 int cl_0_ring_init_helper::count = 0;
151 cl_0_ring_init_helper::cl_0_ring_init_helper()
154 cl_heap_null_ring_instance = new cl_heap_null_ring();
155 new ((void *)&cl_0_ring) cl_null_ring();
159 cl_0_ring_init_helper::~cl_0_ring_init_helper()
162 delete cl_heap_null_ring_instance;