Changeset 4b2155 in git for Singular/iparith.cc
- Timestamp:
- Apr 16, 1999, 9:53:44 AM (25 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 0df02761ea5104747ff923eee578ddb4d27f4a45
- Parents:
- 04d56fffcf5bd9bd7b214fdec1609e8a293fd986
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iparith.cc
r04d56f r4b2155 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: iparith.cc,v 1.14 1 1999-04-15 09:57:03obachman Exp $ */4 /* $Id: iparith.cc,v 1.142 1999-04-16 07:53:37 obachman Exp $ */ 5 5 6 6 /* … … 2952 2952 return FALSE; 2953 2953 } 2954 static BOOLEAN jjSTRING(leftv res, leftv v)2955 {2956 res->data = (char *)v->String();2957 if (res->data==NULL)2958 {2959 Werror("cannot convert %s to string",Tok2Cmdname(v->Typ()));2960 return TRUE;2961 }2962 return FALSE;2963 }2964 2954 static BOOLEAN jjSort_Id(leftv res, leftv v) 2965 2955 { 2966 2956 res->data = (char *)idSort((ideal)v->Data()); 2967 return FALSE;2968 }2969 static BOOLEAN jjSTRING_PROC(leftv res, leftv v)2970 {2971 procinfov pi = IDPROC((idhdl)v->data);2972 if((pi->language == LANG_SINGULAR) && (pi->data.s.body!=NULL))2973 //if(pi->language == LANG_SINGULAR)2974 {2975 //if(pi->data.s.body==NULL)2976 // iiGetLibProcBuffer(IDPROC((idhdl)v->data));2977 res->data=mstrdup(pi->data.s.body);2978 }2979 else2980 res->data=mstrdup("");2981 2957 return FALSE; 2982 2958 } … … 3559 3535 ,{jjSTD, STD_CMD, MODUL_CMD, MODUL_CMD } 3560 3536 ,{jjDUMMY, STRING_CMD, STRING_CMD, STRING_CMD } 3561 ,{jjSTRING, STRING_CMD, STRING_CMD, INT_CMD }3562 ,{jjSTRING, STRING_CMD, STRING_CMD, POLY_CMD }3563 ,{jjSTRING, STRING_CMD, STRING_CMD, VECTOR_CMD }3564 ,{jjSTRING, STRING_CMD, STRING_CMD, NUMBER_CMD }3565 ,{jjSTRING, STRING_CMD, STRING_CMD, MATRIX_CMD }3566 ,{jjSTRING, STRING_CMD, STRING_CMD, MODUL_CMD }3567 ,{jjSTRING, STRING_CMD, STRING_CMD, IDEAL_CMD }3568 ,{jjSTRING, STRING_CMD, STRING_CMD, MAP_CMD }3569 ,{jjSTRING, STRING_CMD, STRING_CMD, INTVEC_CMD }3570 ,{jjSTRING, STRING_CMD, STRING_CMD, INTMAT_CMD }3571 ,{jjSTRING, STRING_CMD, STRING_CMD, LINK_CMD }3572 ,{jjSTRING_PROC,STRING_CMD, STRING_CMD, PROC_CMD }3573 ,{jjSTRING, STRING_CMD, STRING_CMD, RING_CMD }3574 ,{jjSTRING, STRING_CMD, STRING_CMD, QRING_CMD }3575 3537 ,{jjSYSTEM, SYSTEM_CMD, NONE, STRING_CMD } 3576 3538 ,{jjSYZYGY, SYZYGY_CMD, MODUL_CMD, IDEAL_CMD } … … 3926 3888 return FALSE; 3927 3889 } 3890 static BOOLEAN jjINTMAT3(leftv res, leftv u, leftv v,leftv w) 3891 { 3892 intvec* im= new intvec((int)v->Data(),(int)w->Data(), 0); 3893 intvec* arg = (intvec*) u->Data(); 3894 int i, n = min(im->cols()*im->rows(), arg->cols()*arg->rows()); 3895 3896 for (i=0; i<n; i++) 3897 { 3898 (*im)[i] = (*arg)[i]; 3899 } 3900 3901 res->data = (char *)im; 3902 return FALSE; 3903 } 3928 3904 static BOOLEAN jjJET_P_IV(leftv res, leftv u, leftv v, leftv w) 3929 3905 { … … 4227 4203 //,{jjCALL3MANY, INTERSECT_CMD, NONE, DEF_CMD, DEF_CMD, DEF_CMD } 4228 4204 ,{lInsert3, INSERT_CMD, LIST_CMD, LIST_CMD, DEF_CMD, INT_CMD } 4205 ,{jjINTMAT3, INTMAT_CMD, INTMAT_CMD, INTMAT_CMD, INT_CMD, INT_CMD} 4229 4206 ,{jjCALL3MANY, INTVEC_CMD, INTVEC_CMD, DEF_CMD, DEF_CMD, DEF_CMD } 4230 4207 ,{jjJET_P_IV, JET_CMD, POLY_CMD, POLY_CMD, INT_CMD, INTVEC_CMD } … … 4587 4564 static BOOLEAN jjSTRING_PL(leftv res, leftv v) 4588 4565 { 4589 if ((v!=NULL)&&(v->next==NULL)) 4590 return iiExprArith1(res,v,iiOp); 4591 int sl=0; 4592 leftv h=v,nachher; 4593 sleftv tmpR; 4594 BOOLEAN bo; 4595 char *sum=NULL; 4596 while(h!=NULL) 4597 { 4598 /* convert to string =================================*/ 4599 nachher=h->next; 4600 h->next=NULL; 4601 bo=iiExprArith1(&tmpR,h,iiOp); 4602 if(bo) 4603 { 4604 h->next=nachher; 4605 FreeL(sum); 4606 return TRUE; 4607 } 4608 /* append to 'sum' =================================*/ 4609 if(sum==NULL) 4610 { 4611 sum=(char *)tmpR.data; 4612 sl=strlen(sum); 4613 } 4614 else 4615 { 4616 int nl=strlen((char *)tmpR.data); 4617 char *s=(char *)AllocL(sl+nl+1); 4618 memcpy(s,sum,sl); 4619 memcpy(s+sl,(char *)tmpR.data,nl); 4620 s[sl+nl]='\0'; 4621 sl+=nl; 4622 FreeL(sum); 4623 sum=s; 4624 } 4625 /* next sleftv =================================*/ 4626 h->next=nachher; 4627 h=nachher; 4628 } 4629 if (sum==NULL) sum=mstrdup(""); 4630 res->data=(char *)sum; 4566 if (v == NULL) 4567 { 4568 res->data = mstrdup(""); 4569 return FALSE; 4570 } 4571 int n = v->listLength(); 4572 if (n == 1) 4573 { 4574 res->data = v->String(); 4575 return FALSE; 4576 } 4577 4578 char** slist = (char**) Alloc(n*sizeof(char*)); 4579 int i, j; 4580 4581 for (i=0, j=0; i<n; i++, v = v ->next) 4582 { 4583 slist[i] = v->String(); 4584 assume(slist[i] != NULL); 4585 j+=strlen(slist[i]); 4586 } 4587 char* s = (char*) AllocL((j+1)*sizeof(char)); 4588 *s='\0'; 4589 for (i=0;i<n;i++) 4590 { 4591 strcat(s, slist[i]); 4592 FreeL(slist[i]); 4593 } 4594 Free(slist, n*sizeof(char*)); 4595 res->data = s; 4631 4596 return FALSE; 4632 4597 }
Note: See TracChangeset
for help on using the changeset viewer.