1 #ifndef LISTS_H
2 #define LISTS_H
3 /****************************************
4 * Computer Algebra System SINGULAR *
5 ****************************************/
6 /*
7 * ABSTRACT: handling of the list type
8 */
9 #include "omalloc/omalloc.h"
10
11 #include "kernel/structs.h"
12 #include "kernel/ideals.h"
13 #include "Singular/subexpr.h"
14 #include "Singular/tok.h"
15
16 #ifdef MDEBUG
17 #define INLINE_THIS
18 #else
19 #define INLINE_THIS inline
20 #endif
21
22 EXTERN_VAR omBin slists_bin;
23 class slists
24 {
25 public:
26 void Clean(ring r=currRing)
27 {
28 assume (this!=NULL);
29
30 if (nr>=0)
31 {
32 int i;
33 for(i=nr;i>=0;i--)
34 {
35 if (m[i].rtyp!=DEF_CMD) m[i].CleanUp(r);
36 }
37 omFreeSize((ADDRESS)m, (nr+1)*sizeof(sleftv));
38 nr=-1;
39 }
40 //omFreeSize((ADDRESS)this, sizeof(slists));
41 omFreeBin((ADDRESS)this,slists_bin);
42 }
43 INLINE_THIS void Init(int l=0);
44 int nr; /* the number of elements in the list -1 */
45 /* -1: empty list */
46 sleftv *m; /* field of sleftv */
47 };
48
49 typedef slists * lists;
50
51 int lSize(lists L);
52 lists lCopy(lists L);
53 lists lInsert0(lists ul, leftv v, int pos);
54 BOOLEAN lInsert(leftv res, leftv u, leftv v);
55 BOOLEAN lInsert3(leftv res, leftv u, leftv v, leftv w);
56 BOOLEAN lAppend(leftv res, leftv u, leftv v);
57 BOOLEAN lDelete(leftv res, leftv u, leftv v);
58 BOOLEAN lAdd(leftv res, leftv u, leftv v);
59 BOOLEAN lRingDependend(lists L);
60 char* lString(lists l, BOOLEAN typed = FALSE, int dim = 1);
61
62
63 lists liMakeResolv(resolvente r, int length, int reallen, int typ0, intvec ** weights,int add_row_shift);
64 resolvente liFindRes(lists L, int * len, int *typ0,intvec *** weights=NULL);
65
66 #if ! defined(MDEBUG) || defined(LISTS_CC)
Init(int l)67 INLINE_THIS void slists::Init(int l)
68 { nr=l-1; m=(sleftv *)((l>0) ? omAlloc0(l*sizeof(sleftv)): NULL);
69 }
70 #endif
71
72 #undef INLINE_THIS
73
74 #endif
75