f5lists.h
Go to the documentation of this file.
1 /****************************************
2 * Computer Algebra System SINGULAR *
3 ****************************************/
4 /*
5 * ABSTRACT: list interface
6 */
8 #ifndef F5LISTS_HEADER
9 #define F5LISTS_HEADER
10 
11 #ifdef HAVE_F5
12 /*
13 ============================
14 ============================
15 classes for lists used in F5
16 ============================
17 ============================
18 */
19 class PNode;
20 class PList;
21 class LNode;
22 class LList;
23 class LTagNode;
24 class LTagList;
25 class CNode;
26 class CListOld;
27 class RList;
28 class RNode;
29 class RTagNode;
30 class RTagList;
31 
32 
33 /**
34  * class PNode of nodes of polynomials
35  */
36 class PNode {
37  private:
40  public:
41  PNode(poly p, PNode* n);
42  poly getPoly();
43  PNode* getNext();
44  PNode* insert(poly p);
45 };
46 
47 /**
48  * class PList of lists of PNodes
49  */
50 class PList {
51  private:
53  public:
54  PList();
55  void insert(poly p);
56  bool check(poly p);
57  void print();
58 };
59 
60 /*
61 =======================================
62 class LNode (nodes for lists of LPolyOlds)
63 =======================================
64 */
65 class LNode {
66  private:
69  public:
70  // generating new list elements from the labeled / classical polynomial view
71  LNode();
72  LNode(LPolyOld* lp);
73  LNode(LPolyOld* lp, LNode* l);
74  LNode(poly t, int i, poly p, RuleOld* r=NULL);
75  LNode(poly t, int i, poly p, RuleOld* r, LNode* l);
76  LNode(LNode* ln);
77  ~LNode();
78  void deleteAll();
79  // insert new elements to the list at the end from the labeled / classical polynomial view
80  // needed for gPrev
81  LNode* insert(LPolyOld* lp);
82  LNode* insert(poly t, int i, poly p, RuleOld* r);
84  // insert new elements to the list in front from the labeled / classical polynomial view
85  // needed for sPolyList
86  LNode* insertSP(LPolyOld* lp);
87  LNode* insertSP(poly t, int i, poly p, RuleOld* r);
88  // insert new elements to the list with resp. to increasing labels
89  // only used for the S-polys to be reduced (TopReduction building new S-polys with higher label)
90  LNode* insertByLabel(poly t, int i, poly p, RuleOld* r);
93  // deletes the first elements of the list with the same degree
94  // get next & prev from current LNode
95  LNode* getNext();
96  LNode* getPrev();
97  // only used for the S-polys, which are already sorted by increasing degree by CListOld
98  LNode* deleteByDeg();
99  // get the LPolyOld* out of LNode*
101  // get the data from the LPolyOld saved in LNode
102  poly getPoly();
103  poly getTerm();
104  int getIndex();
105  RuleOld* getRuleOld();
106  bool getDel();
107  // set the data from the LPolyOld saved in LNode
108  void setPoly(poly p);
109  void setTerm(poly t);
110  void setIndex(int i);
111  void setNext(LNode* l);
112  void setRuleOld(RuleOld* r);
113  void setDel(bool d);
114  // test if for any list element the polynomial part of the data is equal to *p
115  bool polyTest(poly* p);
116  LNode* getNext(LNode* l);
117  void print();
118  int count(LNode* l);
119 };
120 
121 
122 /*
123 ============================
124 class LList(lists of LPolyOlds)
125 ============================
126 */
127 class LList {
128  private:
131  int length;
132  public:
133  LList();
134  LList(LPolyOld* lp);
135  LList(poly t,int i,poly p, RuleOld* r = NULL);
136  ~LList();
137  // insertion at the end of the list
138  // needed for gPrev
139  void insert(LPolyOld* lp);
140  void insert(poly t,int i, poly p, RuleOld* r = NULL);
141  void insertByDeg(LPolyOld* lp);
142  // insertion in front of the list
143  // needed for sPolyList
144  void insertSP(LPolyOld* lp);
145  void insertSP(poly t,int i, poly p, RuleOld* r = NULL);
146  void insertByLabel(poly t, int i, poly p, RuleOld* r = NULL);
147  void insertByLabel(LNode* l);
148  void insertFirst(LNode* l);
149  void deleteByDeg();
150  bool polyTest(poly* p);
151  LNode* getFirst();
152  LNode* getLast();
153  int getLength();
154  void setFirst(LNode* l);
155  void print();
156  int count(LNode* l);
157 };
158 
159 
160 
161 /*
162 ==============================================
163 class LtagNode (nodes for lists of LPolyOld tags)
164 ==============================================
165 */
166 class LTagNode {
167  private:
170  public:
171  LTagNode();
172  LTagNode(LNode* l);
173  LTagNode(LNode* l, LTagNode* n);
174  ~LTagNode();
175  // declaration with first as parameter due to sorting of LTagList
176  LTagNode* insert(LNode* l);
177  LNode* getLNode();
178  LTagNode* getNext();
179  LNode* get(int i, int length);
180 };
181 
182 
183 /*
184 =========================================================================
185 class LTagList(lists of LPolyOld tags, i.e. first elements of a given index)
186 =========================================================================
187 */
188 class LTagList {
189  private:
192  int length;
193  public:
194  LTagList();
195  LTagList(LNode* l);
196  ~LTagList();
197  // declaration with first as parameter in LTagNode due to sorting of LTagList
198  void insert(LNode* l);
199  void setFirstCurrentIdx(LNode* l);
200  LNode* get(int idx);
201  LNode* getFirst();
203 };
204 
207 
208 
209 /*
210 ======================================================================================
211 class TopRed(return values of subalgorithm TopRed in f5gb.cc), i.e. the first elements
212  of the lists LList* completed & LList* sPolyList
213 ======================================================================================
214 */
215 class TopRed {
216  private:
219  public:
220  TopRed();
221  TopRed(LList* c, LList* t);
222  LList* getCompleted();
223  LList* getToDo();
224 };
225 
226 
227 /*
228 =======================================
229 class CNode (nodes for lists of CPairOlds)
230 =======================================
231 */
232 class CNode {
233  private:
236  public:
237  CNode();
238  CNode(CPairOld* c);
239  CNode(CPairOld* c, CNode* n);
240  ~CNode();
241  CNode* insert(CPairOld* c);
243  CNode* getMinDeg();
244  CPairOld* getData();
245  CNode* getNext();
246  LPolyOld* getAdLp1();
247  LPolyOld* getAdLp2();
248  poly getLp1Poly();
249  poly getLp2Poly();
250  poly getLp1Term();
251  poly getLp2Term();
252  poly getT1();
253  poly* getAdT1();
254  poly getT2();
255  poly* getAdT2();
256  int getLp1Index();
257  int getLp2Index();
258  bool getDel();
260  void print();
261 };
262 
263 
264 /*
265 ============================
266 class CListOld(lists of CPairOlds)
267 ============================
268 */
269 class CListOld {
270  private:
272  public:
273  // for initialization of CListOlds, last element alwas has data=NULL and next=NULL
274  CListOld();
275  CListOld(CPairOld* c);
276  ~CListOld();
277  CNode* getFirst();
278  void insert(CPairOld* c);
279  void insertWithoutSort(CPairOld* c);
280  CNode* getMinDeg();
281  void print();
282 };
283 
284 
285 /*
286 ======================================
287 class RNode (nodes for lists of RuleOlds)
288 ======================================
289 */
290 class RNode {
291  private:
294  public:
295  RNode();
296  RNode(RuleOld* r);
297  ~RNode();
298  RNode* insert(RuleOld* r);
299  RNode* insert(int i, poly t);
301  RNode* getNext();
302  RuleOld* getRuleOld();
303  int getRuleOldIndex();
305  void print();
306 };
307 
308 /*
309 ============================
310 class RList (lists of RuleOlds)
311 ============================
312 */
313 class RList {
314  private:
316  // last alway has data=NULL and next=NULL, for initialization purposes used
318  public:
319  RList();
320  RList(RuleOld* r);
321  ~RList();
322  void insert(RuleOld* r);
323  void insert(int i, poly t);
324  void insertOrdered(RuleOld* r);
325  RNode* getFirst();
326  RuleOld* getRuleOld();
327  void print();
328 };
329 
330 
331 
332 /*
333 =============================================
334 class RtagNode (nodes for lists of RuleOld tags)
335 =============================================
336 */
337 class RTagNode {
338  private:
341  public:
342  RTagNode();
343  RTagNode(RNode* r);
344  RTagNode(RNode* r, RTagNode* n);
345  ~RTagNode();
346  // declaration with first as parameter due to sorting of LTagList
347  RTagNode* insert(RNode* r);
348  RNode* getRNode();
349  RTagNode* getNext();
350  RNode* get(int idx, int length);
351  void set(RNode*);
352  void print();
353 };
354 
355 
356 /*
357 ========================================================================
358 class RTagList(lists of RuleOld tags, i.e. first elements of a given index)
359 ========================================================================
360 */
361 class RTagList {
362  private:
364  int length;
365  public:
366  RTagList();
367  RTagList(RNode* r);
368  ~RTagList();
369  // declaration with first as parameter in LTagNode due to sorting of LTagList
370  void insert(RNode* r);
371  RNode* getFirst();
372  RNode* get(int idx);
373  void setFirst(RNode* r);
374  void print();
375  int getLength();
376 };
377 #endif
378 #endif
PNode(poly p, PNode *n)
functions working on the class PNode
Definition: f5lists.cc:26
RNode * getFirst()
Definition: f5lists.cc:1221
LNode * insertFirst(LNode *l)
Definition: f5lists.cc:266
RTagNode * insert(RNode *r)
Definition: f5lists.cc:1128
bool check(poly p)
Definition: f5lists.cc:94
LNode * getNext()
Definition: f5lists.cc:322
LNode()
Definition: f5lists.cc:130
poly getT2()
Definition: f5lists.cc:868
LList()
Definition: f5lists.cc:429
class PNode of nodes of polynomials
Definition: f5lists.h:36
void insert(LNode *l)
Definition: f5lists.cc:628
CNode * insert(CPairOld *c)
Definition: f5lists.cc:702
LList * getCompleted()
Definition: f5lists.cc:665
~RList()
Definition: f5lists.cc:1059
~CNode()
Definition: f5lists.cc:694
void insert(LPolyOld *lp)
Definition: f5lists.cc:457
CNode * first
Definition: f5lists.h:271
poly getPoly()
Definition: f5lists.cc:31
LNode * insertSP(LPolyOld *lp)
Definition: f5lists.cc:207
void insert(poly p)
Definition: f5lists.cc:81
int getLength()
Definition: f5lists.cc:527
return P p
Definition: myNF.cc:203
CNode()
Definition: f5lists.cc:679
CPairOld * getData()
Definition: f5lists.cc:820
LNode * insertByLabel(poly t, int i, poly p, RuleOld *r)
Definition: f5lists.cc:222
bool getDel()
Definition: f5lists.cc:352
poly data
Definition: f5lists.h:38
poly getTerm()
Definition: f5lists.cc:336
LNode * last
Definition: f5lists.h:130
poly * getAdT2()
Definition: f5lists.cc:872
RuleOld * getRuleOld()
Definition: f5lists.cc:344
poly getT1()
Definition: f5lists.cc:860
LNode * next
Definition: f5lists.h:68
Definition: f5lists.h:313
structure of RuleOlds(i.e.
Definition: f5data.h:232
void setFirstCurrentIdx(LNode *l)
Definition: f5lists.cc:633
const CanonicalForm CFMap CFMap int &both_non_zero int n
Definition: cfEzgcd.cc:52
LList * _toDo
Definition: f5lists.h:218
void setIndex(int i)
Definition: f5lists.cc:365
void setFirst(RNode *r)
Definition: f5lists.cc:1229
LList * getToDo()
Definition: f5lists.cc:669
int count(LNode *l)
Definition: f5lists.cc:542
poly getLp1Term()
Definition: f5lists.cc:844
RTagList()
Definition: f5lists.cc:1194
int length
Definition: f5lists.h:364
~RTagList()
Definition: f5lists.cc:1204
poly getPoly()
Definition: f5lists.cc:332
void insert(RNode *r)
Definition: f5lists.cc:1214
void insertByDeg(LPolyOld *lp)
RNode()
Definition: f5lists.cc:965
LTagNode * first
Definition: f5lists.h:190
void print()
Definition: f5lists.cc:885
LNode * getFirst()
Definition: f5lists.cc:641
RTagNode * first
Definition: f5lists.h:363
void setTerm(poly t)
Definition: f5lists.cc:361
void print()
Definition: f5lists.cc:538
void print()
Definition: f5lists.cc:956
void print()
Definition: f5lists.cc:1233
CNode * getMinDeg()
Definition: f5lists.cc:950
RNode * getNext()
Definition: f5lists.cc:1021
poly getLp1Poly()
Definition: f5lists.cc:836
~RNode()
Definition: f5lists.cc:976
poly getLp2Poly()
Definition: f5lists.cc:840
RuleOld * getTestedRuleOld()
Definition: f5lists.cc:880
class PList of lists of PNodes
Definition: f5lists.h:50
RTagNode * next
Definition: f5lists.h:340
LTagNode * getNext()
Definition: f5lists.cc:579
LNode * first
Definition: f5lists.h:129
const ring r
Definition: syzextra.cc:208
RNode * first
Definition: f5lists.h:315
int getLp1Index()
Definition: f5lists.cc:852
Definition: f5lists.h:65
~LNode()
Definition: f5lists.cc:162
Definition: f5lists.h:232
RuleOld * getRuleOld()
Definition: f5lists.cc:1093
int length
Definition: f5lists.h:192
LNode * getFirstCurrentIdx()
Definition: f5lists.cc:645
RNode * insert(RuleOld *r)
Definition: f5lists.cc:981
poly getRuleOldTerm()
Definition: f5lists.cc:1033
RTagNode * getNext()
Definition: f5lists.cc:1141
RuleOld * getRuleOld()
Definition: f5lists.cc:1025
int count(LNode *l)
Definition: f5lists.cc:408
LNode * getGPrevRedCheck()
class of labeled polynomials
Definition: f5data.h:28
bool polyTest(poly *p)
Definition: f5lists.cc:378
CListOld()
Definition: f5lists.cc:917
LPolyOld * getLPolyOld()
Definition: f5lists.cc:327
int getRuleOldIndex()
Definition: f5lists.cc:1029
~LList()
Definition: f5lists.cc:446
void insertFirst(LNode *l)
Definition: f5lists.cc:499
RList()
Definition: f5lists.cc:1051
LPolyOld * getAdLp2()
Definition: f5lists.cc:832
LTagNode * next
Definition: f5lists.h:169
int i
Definition: cfEzgcd.cc:123
PNode * getNext()
Definition: f5lists.cc:35
RNode * last
Definition: f5lists.h:317
void deleteAll()
Definition: f5lists.cc:168
PNode * first
Definition: f5lists.h:52
RNode * insertOrdered(RuleOld *r)
Definition: f5lists.cc:1000
void setPoly(poly p)
Definition: f5lists.cc:357
LPolyOld * data
Definition: f5lists.h:67
CNode * next
Definition: f5lists.h:235
PNode * next
Definition: f5lists.h:39
void insert(CPairOld *c)
Definition: f5lists.cc:936
LList * _completed
Definition: f5lists.h:217
LTagNode * insert(LNode *l)
Definition: f5lists.cc:570
int length
Definition: f5lists.h:131
void setDel(bool d)
Definition: f5lists.cc:373
RTagNode()
Definition: f5lists.cc:1107
~RTagNode()
Definition: f5lists.cc:1123
LNode * getPrev()
bool polyTest(poly *p)
Definition: f5lists.cc:515
int getLength()
Definition: f5lists.cc:1237
void print()
Definition: f5lists.cc:1172
LNode * getLNode()
Definition: f5lists.cc:575
CPairOld * data
Definition: f5lists.h:234
#define NULL
Definition: omList.c:10
RNode * data
Definition: f5lists.h:339
void setNext(LNode *l)
Definition: f5lists.cc:369
Definition: f5lists.h:127
PNode * insert(poly p)
Definition: f5lists.cc:38
~CListOld()
Definition: f5lists.cc:925
LNode * insert(LPolyOld *lp)
Definition: f5lists.cc:179
CNode * getNext()
Definition: f5lists.cc:824
CNode * insertWithoutSort(CPairOld *cp)
Definition: f5lists.cc:797
void insert(RuleOld *r)
Definition: f5lists.cc:1081
bool getDel()
Definition: f5lists.cc:876
void insertByLabel(poly t, int i, poly p, RuleOld *r=NULL)
Definition: f5lists.cc:493
LNode * getcompletedRedCheck()
void print()
Definition: f5lists.cc:1037
CNode * getMinDeg()
Definition: f5lists.cc:805
void print()
Definition: f5lists.cc:394
void deleteByDeg()
Definition: f5lists.cc:511
poly * getAdT1()
Definition: f5lists.cc:864
PList()
functions working on the class PList
Definition: f5lists.cc:76
LTagNode()
Definition: f5lists.cc:550
void insertWithoutSort(CPairOld *c)
Definition: f5lists.cc:940
RNode * next
Definition: f5lists.h:293
void setFirst(LNode *l)
Definition: f5lists.cc:531
int getLp2Index()
Definition: f5lists.cc:856
TopRed()
Definition: f5lists.cc:655
LPolyOld * getAdLp1()
Definition: f5lists.cc:828
LNode * insertByDeg(LPolyOld *lp)
poly getLp2Term()
Definition: f5lists.cc:848
polyrec * poly
Definition: hilb.h:10
Definition: f5lists.h:290
int getIndex()
Definition: f5lists.cc:340
LNode * getFirst()
Definition: f5lists.cc:519
LNode * firstCurrentIdx
Definition: f5lists.h:191
LNode * deleteByDeg()
Definition: f5lists.cc:317
void print()
Definition: f5lists.cc:115
void print()
Definition: f5lists.cc:1097
RuleOld * data
Definition: f5lists.h:292
RNode * getFirst()
Definition: f5lists.cc:1089
void insertSP(LPolyOld *lp)
Definition: f5lists.cc:480
void setRuleOld(RuleOld *r)
Definition: f5lists.cc:348
~LTagList()
Definition: f5lists.cc:617
void insertOrdered(RuleOld *r)
Definition: f5lists.cc:1085
LTagList()
Definition: f5lists.cc:606
int l
Definition: cfEzgcd.cc:94
~LTagNode()
Definition: f5lists.cc:565
void set(RNode *)
Definition: f5lists.cc:1167
LNode * getLast()
Definition: f5lists.cc:523
CNode * getFirst()
Definition: f5lists.cc:944
RNode * getRNode()
Definition: f5lists.cc:1135
LNode * data
Definition: f5lists.h:168
structure of labeled critical pairs
Definition: f5data.h:123