]> www.ginac.de Git - cln.git/blob - src/polynomial/elem/cl_UP_no_ring.cc
* */*: cl_istream -> std::istream, cl_ostream -> std::ostream.
[cln.git] / src / polynomial / elem / cl_UP_no_ring.cc
1 // Dummy ring.
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 CL_PROVIDE(cl_UP_no_ring)
7
8 // Specification.
9 #include "cln/univpoly.h"
10
11
12 // Implementation.
13
14 #include "cln/io.h"
15 #include "cln/abort.h"
16
17 namespace cln {
18
19 nonreturning_function(static, uninitialized_ring, (void));
20 static void uninitialized_ring ()
21 {
22         fprint(std::cerr, "Uninitialized ring operation called\n");
23         cl_abort();
24 }
25
26 nonreturning_function(static, uninitialized_error, (const _cl_UP&));
27 static void uninitialized_error (const _cl_UP& obj)
28 {
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");
34         cl_abort();
35 }
36
37 #if ((defined(__sparc__) || defined(__sparc64__)) && !defined(__GNUC__))
38   // avoid Sun C++ 4.1 compiler bug
39   #define RETDUMMY  return *(_cl_UP*)R
40 #else
41   #define RETDUMMY  return *(_cl_UP*)0
42 #endif
43
44 static const _cl_UP dummy_op0 (cl_heap_univpoly_ring* R)
45 {
46         unused R;
47         uninitialized_ring(); RETDUMMY;
48 }
49
50 static const _cl_UP dummy_op1 (cl_heap_univpoly_ring* R, const _cl_UP& x)
51 {
52         unused R;
53         uninitialized_error(x); RETDUMMY;
54 }
55
56 static const _cl_UP dummy_op2 (cl_heap_univpoly_ring* R, const _cl_UP& x, const _cl_UP& y)
57 {
58         unused R;
59         uninitialized_error(x); uninitialized_error(y); RETDUMMY;
60 }
61
62 static void dummy_fprint (cl_heap_univpoly_ring* R, std::ostream& stream, const _cl_UP& x)
63 {
64         unused R;
65         unused stream;
66         uninitialized_error(x);
67 }
68 static cl_boolean dummy_equal (cl_heap_univpoly_ring* R, const _cl_UP& x, const _cl_UP& y)
69 {
70         unused R;
71         uninitialized_error(x); uninitialized_error(y); return cl_false;
72 }
73
74 #define dummy_zero dummy_op0
75 static cl_boolean dummy_zerop (cl_heap_univpoly_ring* R, const _cl_UP& x)
76 {
77         unused R;
78         uninitialized_error(x); return cl_false;
79 }
80 #define dummy_plus dummy_op2
81 #define dummy_minus dummy_op2
82 #define dummy_uminus dummy_op1
83
84 #define dummy_one dummy_op0
85 static const _cl_UP dummy_canonhom (cl_heap_univpoly_ring* R, const cl_I& x)
86 {
87         unused R;
88         (void)&x; // unused x;
89         uninitialized_ring(); RETDUMMY;
90 }
91 #define dummy_mul dummy_op2
92 #define dummy_square dummy_op1
93 static const _cl_UP dummy_expt_pos (cl_heap_univpoly_ring* R, const _cl_UP& x, const cl_I& y)
94 {
95         unused R;
96         (void)&y; // unused y;
97         uninitialized_error(x); RETDUMMY;
98 }
99
100 static const _cl_UP dummy_scalmul (cl_heap_univpoly_ring* R, const cl_ring_element& x, const _cl_UP& y)
101 {
102         unused R;
103         unused x;
104         uninitialized_error(y); RETDUMMY;
105 }
106
107 static sintL dummy_degree (cl_heap_univpoly_ring* R, const _cl_UP& x)
108 {
109         unused R;
110         uninitialized_error(x); return 0;
111 }
112 static const _cl_UP dummy_monomial (cl_heap_univpoly_ring* R, const cl_ring_element& x, uintL e)
113 {
114         unused R;
115         unused x;
116         unused e;
117         uninitialized_ring(); RETDUMMY;
118 }
119 static const cl_ring_element dummy_coeff (cl_heap_univpoly_ring* R, const _cl_UP& x, uintL index)
120 {
121         unused R;
122         unused index;
123         uninitialized_error(x); return *(cl_ring_element*)0;
124 }
125 static const _cl_UP dummy_create (cl_heap_univpoly_ring* R, sintL deg)
126 {
127         unused R;
128         unused deg;
129         uninitialized_ring(); RETDUMMY;
130 }
131 static void dummy_set_coeff (cl_heap_univpoly_ring* R, _cl_UP& x, uintL index, const cl_ring_element& y)
132 {
133         unused R;
134         unused index;
135         unused y;
136         uninitialized_error(x);
137 }
138 static void dummy_finalize (cl_heap_univpoly_ring* R, _cl_UP& x)
139 {
140         unused R;
141         uninitialized_error(x);
142 }
143 static const cl_ring_element dummy_eval (cl_heap_univpoly_ring* R, const _cl_UP& x, const cl_ring_element& y)
144 {
145         unused R;
146         unused y;
147         uninitialized_error(x); return *(cl_ring_element*)0;
148 }
149
150 static cl_univpoly_setops dummy_setops = {
151         dummy_fprint,
152         dummy_equal
153 };
154 static cl_univpoly_addops dummy_addops = {
155         dummy_zero,
156         dummy_zerop,
157         dummy_plus,
158         dummy_minus,
159         dummy_uminus
160 };
161 static cl_univpoly_mulops dummy_mulops = {
162         dummy_one,
163         dummy_canonhom,
164         dummy_mul,
165         dummy_square,
166         dummy_expt_pos
167 };
168 static cl_univpoly_modulops dummy_modulops = {
169         dummy_scalmul
170 };
171 static cl_univpoly_polyops dummy_polyops = {
172         dummy_degree,
173         dummy_monomial,
174         dummy_coeff,
175         dummy_create,
176         dummy_set_coeff,
177         dummy_finalize,
178         dummy_eval
179 };
180
181 class cl_heap_no_univpoly_ring : public cl_heap_univpoly_ring {
182         SUBCLASS_cl_heap_univpoly_ring()
183 public:
184         // Constructor.
185         cl_heap_no_univpoly_ring ()
186                 : cl_heap_univpoly_ring (cl_no_ring,&dummy_setops,&dummy_addops,&dummy_mulops,&dummy_modulops,&dummy_polyops)
187                 { type = &cl_class_no_univpoly_ring; }
188         // Destructor.
189         ~cl_heap_no_univpoly_ring () {}
190 };
191
192 static void cl_no_univpoly_ring_destructor (cl_heap* pointer)
193 {
194         (*(cl_heap_no_univpoly_ring*)pointer).~cl_heap_no_univpoly_ring();
195 }
196
197 cl_class cl_class_no_univpoly_ring = {
198         cl_no_univpoly_ring_destructor,
199         0
200 };
201
202 const cl_univpoly_ring cl_no_univpoly_ring = cl_univpoly_ring (new cl_heap_no_univpoly_ring());
203
204 }  // namespace cln
205
206 CL_PROVIDE_END(cl_UP_no_ring)