]> www.ginac.de Git - cln.git/blob - src/integer/ring/cl_0_ring.cc
8ba2a2112b46a0cb2f9bc43b3878b7292b56972c
[cln.git] / src / integer / ring / cl_0_ring.cc
1 // Null ring.
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 CL_PROVIDE(cl_0_ring)
7
8 // Specification.
9 #include "cl_null_ring.h"
10
11
12 // Implementation.
13
14 #include "cl_integer_class.h"
15
16 static const _cl_ring_element null_op0 (cl_heap_ring* R)
17 {
18         return _cl_ring_element(R, (cl_I)0);
19 }
20
21 static const _cl_ring_element null_op1 (cl_heap_ring* R, const _cl_ring_element& x)
22 {
23         unused x;
24         return _cl_ring_element(R, (cl_I)0);
25 }
26
27 static const _cl_ring_element null_op2 (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
28 {
29         unused x;
30         unused y;
31         return _cl_ring_element(R, (cl_I)0);
32 }
33
34 static void null_fprint (cl_heap_ring* R, cl_ostream stream, const _cl_ring_element& x)
35 {
36         unused R;
37         unused x;
38         fprint(stream,"0");
39 }
40
41 static cl_boolean null_equal (cl_heap_ring* R, const _cl_ring_element& x, const _cl_ring_element& y)
42 {
43         unused R;
44         unused x;
45         unused y;
46         return cl_true;
47 }
48
49 #define null_zero null_op0
50 static cl_boolean null_zerop (cl_heap_ring* R, const _cl_ring_element& x)
51 {
52         unused R;
53         unused x;
54         return cl_true;
55 }
56 #define null_plus null_op2
57 #define null_minus null_op2
58 #define null_uminus null_op1
59
60 #define null_one null_op0
61 static const _cl_ring_element null_canonhom (cl_heap_ring* R, const cl_I& x)
62 {
63         unused x;
64         return _cl_ring_element(R, (cl_I)0);
65 }
66 #define null_mul null_op2
67 #define null_square null_op1
68 static const _cl_ring_element null_expt_pos (cl_heap_ring* R, const _cl_ring_element& x, const cl_I& y)
69 {
70         unused x;
71         unused y;
72         return _cl_ring_element(R, (cl_I)0);
73 }
74
75 static cl_ring_setops null_setops = {
76         null_fprint,
77         null_equal
78 };
79 static cl_ring_addops null_addops = {
80         null_zero,
81         null_zerop,
82         null_plus,
83         null_minus,
84         null_uminus
85 };
86 static cl_ring_mulops null_mulops = {
87         null_one,
88         null_canonhom,
89         null_mul,
90         null_square,
91         null_expt_pos
92 };
93
94 extern cl_class cl_class_null_ring;
95
96 class cl_heap_null_ring : public cl_heap_ring {
97         SUBCLASS_cl_heap_ring()
98 public:
99         // Constructor.
100         cl_heap_null_ring ()
101                 : cl_heap_ring (&null_setops,&null_addops,&null_mulops)
102                 { type = &cl_class_null_ring; }
103         // Destructor.
104         ~cl_heap_null_ring () {}
105 };
106
107 static void cl_null_ring_destructor (cl_heap* pointer)
108 {
109         (*(cl_heap_null_ring*)pointer).~cl_heap_null_ring();
110 }
111
112 static void cl_null_ring_dprint (cl_heap* pointer)
113 {
114         unused pointer;
115         fprint(cl_debugout, "(cl_null_ring) cl_0_ring");
116 }
117
118 cl_class cl_class_null_ring = {
119         cl_null_ring_destructor,
120         cl_class_flags_number_ring,
121         cl_null_ring_dprint
122 };
123
124 inline cl_null_ring::cl_null_ring ()
125         : cl_ring (new cl_heap_null_ring()) {}
126
127 const cl_null_ring cl_0_ring;
128
129 CL_PROVIDE_END(cl_0_ring)