source: git/libpolys/coeffs/OPAEQ.cc @ 2206753

spielwiese
Last change on this file since 2206753 was 2206753, checked in by Oleksandr Motsak <motsak@…>, 9 years ago
Hiding all the implementation details (or adding the counting) mostly by moving internal declarations from private headers into corresponding source files rm: Remove internal includes (hiding privates) + cleanup chg: cleanup internal headers fix the usage of internal implementation functions of coeffs from outside of libpolys/coeffs (or libpolys/polys/ext_fiels) fix header includes for coeffs/AE*.{h,cc} add: FIXME&TODO mark reused privates also starting to fix bigint handling
  • Property mode set to 100644
File size: 9.3 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/*
5*Dense Integer Polynomials
6*/
7//Schauen was hier ÃŒberhaupt sinn macht
8
9#include <misc/auxiliary.h>
10
11#ifdef SINGULAR_4_1
12
13#include <factory/factory.h>
14
15#include <string.h>
16#include <omalloc/omalloc.h>
17#include <coeffs/coeffs.h>
18#include <reporter/reporter.h>
19#include <coeffs/numbers.h>
20#include <coeffs/mpr_complex.h>
21#include <misc/mylimits.h>
22#include <coeffs/AEQ.h>
23
24
25BOOLEAN nAEQCoeffIsEqual     (number a, number b, const coeffs r);
26number  nAEQMult        (number a, number b, const coeffs r);
27number  nAEQSub         (number a, number b, const coeffs r);
28number  nAEQAdd         (number a, number b, const coeffs r);
29number  nAEQDiv         (number a, number b, const coeffs r);
30number  nAEQIntMod      (number a, number b, const coeffs r);// Hir wollte wir was gucken
31number  nAEQExactDiv    (number a, number b, const coeffs r);
32number  nAEQInit        (long i, const coeffs r);
33number  nAEQInitMPZ     (mpz_t m, const coeffs r); //nachgucken/fragen
34int     nAEQSize        (number a, const coeffs r);///
35int     nAEQInt         (number &a, const coeffs r);
36number  nAEQMPZ         (number a, const coeffs r); //nachgucken/fragen
37number  nAEQNeg         (number c, const coeffs r);
38number  nAEQCopy        (number a, number b, const coeffs r); // nachgicken
39number  nAEQRePart      (number a, number b, const coeffs r); // nachgicken
40number  nAEQImPart      (number a, number b, const coeffs r); // nachgicken
41
42void    nAEQWriteLong   (number &a, const coeffs r);//
43void    nAEQWriteShort  (number &a, const coeffs r);//
44
45
46const char *  nAEQRead  (const char *s, number *a, const coeffs r);
47number nAEQNormalize    (number a, number b, const coeffs r);//
48BOOLEAN nAEQGreater     (number a, number b, const coeffs r);//
49BOOLEAN nAEQEqual       (number a, number b, const coeffs r);
50BOOLEAN nAEQIsZero      (number a, const coeffs r);
51BOOLEAN nAEQIsOne       (number a, const coeffs r);
52BOOLEAN nAEQIsMOne      (number a, const coeffs r);
53BOOLEAN nAEQGreaterZero (number a, number b, const coeffs r);
54void    nAEQPower       (number a, int i, number * result, const coeffs r);
55number nAEQGetDenom     (number &a, const coeffs r);//
56number nAEQGetNumerator (number &a, const coeffs r);//
57number nAEQGcd          (number a, number b, const coeffs r);
58number nAEQLcm          (number a, number b, const coeffs r);
59
60void    nAEQDelete       (number *a, const coeffs r);//
61number    nAEQSetMap      (number a, const coeffs r);//
62void    nAEQInpMult      (number &a ,number b, const coeffs r);//
63void    nAEQCoeffWrite   (const coeffs r, BOOLEAN details);//
64
65BOOLEAN nAEQClearContent  (number a, const coeffs r);//
66BOOLEAN nAEQClearDenominators  (number a, const coeffs r);//
67
68
69
70
71// DEFINITION DER FUNKTIONEN
72
73number  nAEQAdd(number a, number b, const coeffs)
74{
75    Q_poly* f=reinterpret_cast<Q_poly*> (a);
76    Q_poly* g=reinterpret_cast<Q_poly*> (b);
77    Q_poly *res=new Q_poly;
78    res->Q_poly_set(*f);
79    res->Q_poly_add_to(*g);
80    return (number) res;
81}
82
83number  nAEQMult(number a, number b, const coeffs)
84{
85    Q_poly* f=reinterpret_cast<Q_poly*> (a);
86    Q_poly* g=reinterpret_cast<Q_poly*> (b);
87    Q_poly *res=new Q_poly;
88    res->Q_poly_set(*f);
89    res->Q_poly_mult_n_to(*g);
90    return (number) res;
91}
92
93number  nAEQSub(number a, number b, const coeffs)
94{
95    Q_poly* f=reinterpret_cast<Q_poly*> (a);
96    Q_poly* g=reinterpret_cast<Q_poly*> (b);
97    Q_poly *res=new Q_poly;
98    res->Q_poly_set(*f);
99    res->Q_poly_sub_to(*g);
100    return (number) res;
101}
102
103
104number  nAEQDiv(number a, number b, const coeffs)
105{
106    Q_poly* f=reinterpret_cast<Q_poly*> (a);
107    Q_poly* g=reinterpret_cast<Q_poly*> (b);
108    Q_poly *res=new Q_poly;
109    Q_poly *s=new Q_poly;
110    res->Q_poly_set(*f);
111    res->Q_poly_div_to(*res,*s,*g);
112    return (number) res;
113}
114
115
116number  nAEQIntMod(number a, number, const coeffs)
117{
118    return a;
119}
120
121number  nAEQExactDiv(number a, number b, const coeffs)
122{
123    Q_poly* f=reinterpret_cast<Q_poly*> (a);
124    Q_poly* g=reinterpret_cast<Q_poly*> (b);
125    Q_poly *res=new Q_poly;
126    Q_poly *s=new Q_poly;
127    res->Q_poly_set(*f);
128    res->Q_poly_div_to(*res,*s,*g);
129    return (number) res;
130}
131
132
133
134number nAEQInit(long i, const coeffs)
135{
136    number res = (number) i;
137    return res;
138}
139
140number nAEQInitMPZ(mpz_t m, const coeffs)
141{
142    number res= (number) m;
143    return res;
144}
145
146int nAEQSize (number a, const coeffs)
147{
148    Q_poly* f=reinterpret_cast<Q_poly*> (a);
149    return f->deg;
150}
151
152int nAEQInt(number &, const coeffs)
153{
154    return 1;
155}
156
157
158number nAEQMPZ(number a, const coeffs)
159{
160    return a;
161}
162
163
164number nAEQNeg(number c, const coeffs)
165{
166    Q_poly* f=reinterpret_cast<Q_poly*> (c);
167    Q_poly *res=new Q_poly;
168    res->Q_poly_set(*f);
169    res->Q_poly_neg();
170    return (number) res;
171}
172
173number nAEQCopy(number c, const coeffs)
174{
175    return (number) c;
176}
177
178number nAEQRePart(number c, const coeffs)
179{
180    return (number) c;
181}
182
183number nAEQImPart(number c, const coeffs)
184{
185    return (number) c;
186}
187
188void    nAEQWriteLong   (number &, const coeffs)
189{
190    return;
191}
192
193void    nAEQWriteShort  (number &, const coeffs)
194{
195    return ;
196}
197
198
199const char *  nAEQRead  (const char *, number *, const coeffs)
200{
201    return "";
202}
203
204number nAEQNormalize    (number a, number , const coeffs) // ?
205{
206    return a;
207}
208
209BOOLEAN nAEQGreater     (number a, number b, const coeffs)
210{
211    Q_poly* f=reinterpret_cast<Q_poly*> (a);
212    Q_poly* g=reinterpret_cast<Q_poly*> (b);
213    if (f->deg > g->deg) {return FALSE;}
214    else {return TRUE;}
215}
216
217BOOLEAN nAEQEqual     (number a, number b, const coeffs)
218{
219    Q_poly* f=reinterpret_cast<Q_poly*> (a);
220    Q_poly* g=reinterpret_cast<Q_poly*> (b);
221    if (f->is_equal(*g) == 1) {return FALSE;}
222    else {return TRUE;}
223}
224
225BOOLEAN nAEQIsZero      (number a, const coeffs)
226{
227    Q_poly* f=reinterpret_cast<Q_poly*> (a);
228    if (f->is_zero() == 1) {return FALSE;}
229    else {return TRUE;}
230}
231
232BOOLEAN nAEQIsOne      (number a, const coeffs)
233{
234    Q_poly* f=reinterpret_cast<Q_poly*> (a);
235    if (f->is_one() == 1) {return FALSE;}
236    else {return TRUE;}
237}
238
239BOOLEAN nAEQIsMOne      (number a, const coeffs)
240{
241    Q_poly* f=reinterpret_cast<Q_poly*> (a);
242    if (f->is_one() == 1) {return FALSE;}
243    else {return TRUE;}
244}
245
246BOOLEAN nAEQGreaterZero     (number a, const coeffs r)
247{
248    if (nAEQIsZero(a, r) == FALSE) { return TRUE; }
249    else { return FALSE; }
250}
251
252void    nAEQPower       (number, int, number *, const coeffs)
253{
254    return;
255}
256
257number nAEQGetDenom      (number &, const coeffs)
258{
259    return (number) 1;
260}
261
262number nAEQGetNumerator      (number &a, const coeffs)
263{
264    return a;
265}
266
267number nAEQGcd           (number a, number b, const coeffs)
268{
269    Q_poly* f=reinterpret_cast<Q_poly*> (a);
270    Q_poly* g=reinterpret_cast<Q_poly*> (b);
271    Q_poly *res=new Q_poly;
272    res->Q_poly_gcd(*f,*g);
273    return (number) res;
274}
275
276number nAEQLcm          (number a, number b, const coeffs)
277{
278    Q_poly* f=reinterpret_cast<Q_poly*> (a);
279    Q_poly* g=reinterpret_cast<Q_poly*> (b);
280    Q_poly *gcd=new Q_poly;
281    Q_poly *res=new Q_poly;
282    Q_poly *s=new Q_poly;
283    gcd->Q_poly_gcd(*f,*g);
284    res->Q_poly_mult_n(*f,*g);
285    res->Q_poly_div_to(*res,*s,*gcd);
286    return (number) res;
287}
288
289void    nAEQDelete       (number *, const coeffs)
290{
291    return;
292}
293
294/*
295number    nAEQSetMap        (number a, const coeffs)
296{
297        return a;
298}
299*/
300
301void    nAEQInpMult       (number &, number, const coeffs)
302{
303    return ;
304}
305
306void    nAEQCoeffWrite   (const coeffs, BOOLEAN)
307{
308    return;
309}
310
311BOOLEAN nAEQClearContent  (number, const coeffs)
312{
313    return FALSE;
314}
315
316BOOLEAN nAEQClearDenominators  (number, const coeffs)
317{
318    return FALSE;
319}
320
321static char * n_QAECoeffName(const coeffs r)
322{
323  return (char *)"QAE";
324}
325
326
327//INITIALISIERUNG FÜR SINGULAR
328
329
330BOOLEAN n_QAEInitChar(coeffs r, void *)
331{
332    // r->is_field,is_domain?
333    r->ch=0;
334    //r->cfKillChar=ndKillChar;
335    //r->nCoeffIsEqual=ndCoeffIsEqual;
336    r->cfMult  = nAEQMult;
337    r->cfSub   = nAEQSub;
338    r->cfAdd   = nAEQAdd;
339    r->cfDiv   = nAEQDiv;
340    r->cfIntMod= nAEQIntMod;
341    r->cfExactDiv= nAEQExactDiv;
342    r->cfInit = nAEQInit;
343    r->cfSize  = nAEQSize;
344    r->cfInt  = nAEQInt;
345    r->cfCoeffName = n_QAECoeffName;
346#ifdef HAVE_RINGS
347    //r->cfDivComp = NULL; // only for ring stuff
348    //r->cfIsUnit = NULL; // only for ring stuff
349    //r->cfGetUnit = NULL; // only for ring stuff
350    //r->cfExtGcd = NULL; // only for ring stuff
351    // r->cfDivBy = NULL; // only for ring stuff
352#endif
353    r->cfInpNeg   = nAEQNeg;
354    r->cfInvers= NULL;
355    //r->cfCopy  = ndCopy;
356    //r->cfRePart = ndCopy;
357    //r->cfImPart = ndReturn0;
358    r->cfWriteLong = nAEQWriteLong;
359    r->cfRead = nAEQRead;
360    //r->cfNormalize=ndNormalize;
361    r->cfGreater = nAEQGreater;
362    r->cfEqual = nAEQEqual;
363    r->cfIsZero = nAEQIsZero;
364    r->cfIsOne = nAEQIsOne;
365    r->cfIsMOne = nAEQIsOne;
366    r->cfGreaterZero = nAEQGreaterZero;
367    r->cfPower = nAEQPower; // ZU BEARBEITEN
368    r->cfGetDenom = nAEQGetDenom;
369    r->cfGetNumerator = nAEQGetNumerator;
370    r->cfGcd  = nAEQGcd;
371    r->cfLcm  = nAEQLcm; // ZU BEARBEITEN
372    r->cfDelete= nAEQDelete;
373   
374    extern nMapFunc npSetMap(const coeffs src, const coeffs dst); // FIXME: BUG?
375    r->cfSetMap = npSetMap; // WHY??? // TODO: this seems to be a bug!
376   
377    r->cfInpMult=nAEQInpMult; //????
378    r->cfCoeffWrite=nAEQCoeffWrite; //????
379
380
381    // the variables:
382    r->nNULL = (number) 0;
383    //r->type = n_AE;
384    r->has_simple_Alloc=TRUE;
385    r->has_simple_Inverse=TRUE;
386    return FALSE;
387}
388#endif
Note: See TracBrowser for help on using the repository browser.