1 #ifndef SINGULARWISHLIST_H
2 #define SINGULARWISHLIST_H
3
4 #include "polys/monomials/p_polys.h"
5 #include "libpolys/polys/simpleideals.h"
6
_p_LeadmonomDivisibleByNoComp(poly a,poly b,const ring r)7 static inline BOOLEAN _p_LeadmonomDivisibleByNoComp(poly a, poly b, const ring r)
8 {
9 int i=r->VarL_Size - 1;
10 unsigned long divmask = r->divmask;
11 unsigned long la, lb;
12
13 if (r->VarL_LowIndex >= 0)
14 {
15 i += r->VarL_LowIndex;
16 do
17 {
18 la = a->exp[i];
19 lb = b->exp[i];
20 if ((la > lb) ||
21 (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask)))
22 {
23 pDivAssume(p_DebugLmDivisibleByNoComp(a, b, r) == FALSE);
24 return FALSE;
25 }
26 i--;
27 }
28 while (i>=r->VarL_LowIndex);
29 }
30 else
31 {
32 do
33 {
34 la = a->exp[r->VarL_Offset[i]];
35 lb = b->exp[r->VarL_Offset[i]];
36 if ((la > lb) ||
37 (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask)))
38 {
39 pDivAssume(p_DebugLmDivisibleByNoComp(a, b, r) == FALSE);
40 return FALSE;
41 }
42 i--;
43 }
44 while (i>=0);
45 }
46 pDivAssume(p_DebugLmDivisibleByNoComp(a, b, r) == TRUE);
47 return TRUE;
48 }
49
50 /**
51 * p_LmDivisibleBy checks also the divisibility of coefficients
52 **/
p_LeadmonomDivisibleBy(poly a,poly b,const ring r)53 static inline BOOLEAN p_LeadmonomDivisibleBy(poly a, poly b, const ring r)
54 {
55 p_LmCheckPolyRing1(b, r);
56
57 pIfThen1(a != NULL, p_LmCheckPolyRing1(b, r));
58 if (p_GetComp(a, r) == 0 || p_GetComp(a,r) == p_GetComp(b,r))
59 return _p_LeadmonomDivisibleByNoComp(a, b, r);
60 return FALSE;
61 }
62
63 /**
64 * id_ShallowDelete deletes the monomials of the polynomials stored inside of it
65 **/
idShallowDelete(ideal * h)66 static inline void idShallowDelete (ideal *h)
67 {
68 if (*h != NULL)
69 {
70 int k;
71 k=(*h)->nrows*(*h)->ncols;
72 if (k>0)
73 omFreeSize((ADDRESS)((*h)->m),sizeof(poly)*k);
74 omFreeBin((ADDRESS)*h, sip_sideal_bin);
75 *h=NULL;
76 }
77 return;
78 }
79
deleteOrdering(ring r)80 static inline void deleteOrdering(ring r)
81 {
82 if (r->order != NULL)
83 {
84 int i=rBlocks(r);
85 assume(r->block0 != NULL && r->block1 != NULL && r->wvhdl != NULL);
86 /* delete order */
87 omFreeSize((ADDRESS)r->order,i*sizeof(rRingOrder_t));
88 omFreeSize((ADDRESS)r->block0,i*sizeof(int));
89 omFreeSize((ADDRESS)r->block1,i*sizeof(int));
90 /* delete weights */
91 for (int j=0; j<i; j++)
92 omfree(r->wvhdl[j]);
93 omFreeSize((ADDRESS)r->wvhdl,i*sizeof(int *));
94 }
95 else
96 assume(r->block0 == NULL && r->block1 == NULL && r->wvhdl == NULL);
97 }
98
99
100 void z_Write(number p, ring r);
101 void id_Write(const ideal I, const ring r);
102
103
104 #endif
105