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