Changeset e10683 in git
- Timestamp:
- Nov 30, 2000, 5:46:09 PM (23 years ago)
- Branches:
- (u'spielwiese', 'd1ec153efbb92b07a03c829a7f893fe854f169d2')
- Children:
- 379305282702a4d34d62437d3dfe5bf09925c710
- Parents:
- 50268a871f223956bed4c2b84352e38f543a574b
- Location:
- Singular
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/polys.cc
r50268a re10683 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys.cc,v 1.6 8 2000-11-09 16:32:53 obachmanExp $ */4 /* $Id: polys.cc,v 1.69 2000-11-30 16:46:09 Singular Exp $ */ 5 5 6 6 /* … … 55 55 pLDeg=r->pLDeg; 56 56 pLexOrder=r->LexOrder; 57 57 58 58 if (complete) 59 59 { … … 140 140 * convert monomial given as string to poly, e.g. 1x3y5z 141 141 */ 142 poly pmInit(char *st, BOOLEAN &ok)142 char * p_Read(char *st, poly &rc, ring r) 143 143 { 144 144 int i,j; 145 ok=FALSE; 146 BOOLEAN b=FALSE; 147 poly rc = pInit(); 148 char *s = nRead(st,&(rc->coef)); 145 rc = p_Init(r); 146 char *s = r->cf->nRead(st,&(rc->coef)); 149 147 if (s==st) 150 148 /* i.e. it does not start with a coeff: test if it is a ringvar*/ … … 154 152 { 155 153 pIncrExp(rc,1+j); 154 while (*s!='\0') s++; 156 155 goto done; 157 156 } 158 157 } 159 else160 b=TRUE;161 158 while (*s!='\0') 162 159 { … … 164 161 ss[0] = *s++; 165 162 ss[1] = '\0'; 166 j = r IsRingVar(ss);163 j = r_IsRingVar(ss,r); 167 164 if (j >= 0) 168 165 { 169 166 s = eati(s,&i); 170 p AddExp(rc,1+j, (Exponent_t)i);167 p_AddExp(rc,1+j, (Exponent_t)i, r); 171 168 } 172 169 else 173 170 { 174 if ((s!=st)&&isdigit(st[0])) 175 { 176 errorreported=TRUE; 177 } 178 pDelete(&rc); 179 return NULL; 171 s--; 172 return s; 180 173 } 181 174 } 182 175 done: 176 if (r->cf->nIsZero(pGetCoeff(rc))) p_DeleteLm(&rc,r); 177 else 178 { 179 p_Setm(rc,r); 180 } 181 return s; 182 } 183 184 poly pmInit(char *st, BOOLEAN &ok) 185 { 186 poly p; 187 char *s=p_Read(st,p,currRing); 188 if (*s!='\0') 189 { 190 if ((s!=st)&&isdigit(st[0])) 191 { 192 errorreported=TRUE; 193 } 194 ok=FALSE; 195 pDelete(&p); 196 return NULL; 197 } 183 198 ok=!errorreported; 184 if (nIsZero(pGetCoeff(rc))) pDeleteLm(&rc); 185 else 186 { 187 pSetm(rc); 188 } 189 return rc; 199 return p; 190 200 } 191 201 … … 229 239 return q; 230 240 } 231 232 241 233 242 /*2 -
Singular/polys.h
r50268a re10683 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: polys.h,v 1.4 7 2000-11-23 17:40:02Singular Exp $ */6 /* $Id: polys.h,v 1.48 2000-11-30 16:46:08 Singular Exp $ */ 7 7 /* 8 8 * ABSTRACT - all basic methods to manipulate polynomials of the … … 20 20 - debugging only if PDEBUG >= 2 21 21 - normally inlined, unless PDEBUG >= 2 || NO_INLINE2 22 Level 1: operations on monomials with time proportional to length 22 Level 1: operations on monomials with time proportional to length 23 23 - implemented in: pInline1.h 24 24 - debugging only if PDEBUG >= 1 25 - normally inlined, unless PDEBUG >= 1 || NO_INLINE1 25 - normally inlined, unless PDEBUG >= 1 || NO_INLINE1 26 26 Level 0: short operations on polynomials with time proportional to 27 27 length of poly … … 31 31 #define DO_PINLINE0 32 32 #include "pInline0.h" 33 Misc : operations on polynomials which do not fit in any of the 33 Misc : operations on polynomials which do not fit in any of the 34 34 above categories 35 35 - implemented in: polys*.cc … … 42 42 However, PDEBUG will only be in effect, if !NDEBUG. 43 43 44 All p_* operations take as last argument a ring 45 and are ring independent. Their corresponding p* operations are usually 44 All p_* operations take as last argument a ring 45 and are ring independent. Their corresponding p* operations are usually 46 46 just macros to the respective p_*(..,currRing). 47 47 … … 62 62 #define pSetOrder(p, o) p_SetOrder(p, o, currRing) 63 63 64 // Component 64 // Component 65 65 #define pGetComp(p) _p_GetComp(p, currRing) 66 66 #define pSetComp(p,v) p_SetComp(p,v, currRing) … … 83 83 /*************************************************************** 84 84 * 85 * Allocation/Initalization/Deletion 85 * Allocation/Initalization/Deletion 86 86 * except for pDeleteLm and pHead, all polys must be != NULL 87 87 * … … 91 91 // allocates a new monomial and initializes everything to 0 92 92 #define pInit() p_Init(currRing) 93 // like pInit, except that expvector is initialized to that of p, 93 // like pInit, except that expvector is initialized to that of p, 94 94 // p must be != NULL 95 95 #define pLmInit(p) p_LmInit(p, currRing) 96 // returns newly allocated copy of Lm(p), coef is copied, next=NULL, 96 // returns newly allocated copy of Lm(p), coef is copied, next=NULL, 97 97 // p might be NULL 98 98 #define pHead(p) p_Head(p, currRing) 99 // if *p_ptr != NULL, delete p_ptr->coef, *p_ptr, and set *p_ptr to 99 // if *p_ptr != NULL, delete p_ptr->coef, *p_ptr, and set *p_ptr to 100 100 // pNext(*p_ptr) 101 101 static inline void pDeleteLm(poly *p) {p_DeleteLm(p, currRing);} … … 155 155 #define pCmp(p1, p2) p_Cmp(p1, p2, currRing) 156 156 157 158 /*************************************************************** 159 * 160 * Divisiblity tests, args must be != NULL, except for 157 158 /*************************************************************** 159 * 160 * Divisiblity tests, args must be != NULL, except for 161 161 * pDivisbleBy 162 162 * 163 163 ***************************************************************/ 164 164 // returns TRUE, if leading monom of a divides leading monom of b 165 // i.e., if there exists a expvector c > 0, s.t. b = a + c; 165 // i.e., if there exists a expvector c > 0, s.t. b = a + c; 166 166 #define pDivisibleBy(a, b) p_DivisibleBy(a,b,currRing) 167 167 // like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL … … 282 282 283 283 284 poly pmInit(char *s, BOOLEAN &ok); /* monom -> poly */ 284 poly pmInit(char *s, BOOLEAN &ok); /* monom -> poly, interpreter */ 285 char * p_Read(char *s, poly &p, ring r); /* monom -> poly */ 285 286 void ppDelete(poly * a, ring r); 286 287 … … 301 302 int pMaxCompProc(poly p); 302 303 303 #define pOneComp(p) p_OneComp(p, currRing) 304 #define pOneComp(p) p_OneComp(p, currRing) 304 305 #define pSetCompP(a,i) p_SetCompP(a, i, currRing) 305 306
Note: See TracChangeset
for help on using the changeset viewer.