Changeset 3c85f1 in git
- Timestamp:
- May 13, 2014, 3:13:37 PM (10 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', '38077648e7239f98078663eb941c3c979511150a')
- Children:
- 199c1c827e8061d465d255caee5fce75bc264b04
- Parents:
- ebe8ba01aa526904424efa0b47af1640aaaaad9f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/links/ssiLink.cc
rebe8ba r3c85f1 57 57 #include <time.h> 58 58 59 #define SSI_VERSION 759 #define SSI_VERSION 8 60 60 // 5->6: changed newstruct representation 61 61 // 6->7: attributes 62 // 7->8: qring 62 63 63 64 // 64 bit version: … … 91 92 volatile BOOLEAN ssiToBeClosed_inactive=TRUE; 92 93 94 // forward declarations: 95 void ssiWritePoly_R(const ssiInfo *d, int typ, poly p, const ring r); 96 void ssiWriteIdeal(const ssiInfo *d, int typ,ideal I); 97 poly ssiReadPoly_R(const ssiInfo *D, const ring r); 98 ideal ssiReadIdeal_R(const ssiInfo *d,const ring r); 99 93 100 // the helper functions: 94 101 void ssiSetCurrRing(const ring r) … … 108 115 } 109 116 // the implementation of the functions: 110 void ssiWriteInt( ssiInfo *d,const int i)117 void ssiWriteInt(const ssiInfo *d,const int i) 111 118 { 112 119 fprintf(d->f_write,"%d ",i); … … 114 121 } 115 122 116 void ssiWriteString( ssiInfo *d,const char *s)123 void ssiWriteString(const ssiInfo *d,const char *s) 117 124 { 118 125 fprintf(d->f_write,"%d %s ",(int)strlen(s),s); 119 126 //if (d->f_debug!=NULL) fprintf(d->f_debug,"stringi: %d \"%s\" ",strlen(s),s); 120 127 } 121 122 128 123 129 void ssiWriteBigInt(const ssiInfo *d, const number n) … … 142 148 } 143 149 144 void ssiWritePoly_R(const ssiInfo *d, int typ, poly p, const ring r);145 150 void ssiWriteNumber_CF(const ssiInfo *d, const number n, const coeffs cf) 146 151 { … … 178 183 void ssiWriteRing(ssiInfo *d,const ring r) 179 184 { 180 /* 5 <ch> <N> <l1> <v1> ...<lN> <vN> <number of orderings> <ord1> <block0_1> <block1_1> .... */185 /* 5 <ch> <N> <l1> <v1> ...<lN> <vN> <number of orderings> <ord1> <block0_1> <block1_1> .... <Q-ideal> */ 181 186 /* ch=-1: transext, coeff ring follows */ 182 187 /* ch=-2: algext, coeff ring and minpoly follows */ … … 239 244 i++; 240 245 } 246 /* Q-ideal :*/ 247 if (r->qideal!=NULL) 248 { 249 ssiWriteIdeal(d,IDEAL_CMD,r->qideal); 250 } 251 else 252 { 253 fprintf(d->f_write,"0 "/*ideal with 0 entries */); 254 } 241 255 if ((rFieldType(r)==n_transExt) 242 256 || (rFieldType(r)==n_algExt)) … … 258 272 { 259 273 fprintf(d->f_write,"%d ",pLength(p));//number of terms 260 int i;261 274 262 275 while(p!=NULL) … … 279 292 } 280 293 281 void ssiWriteIdeal( ssiInfo *d, int typ,ideal I)294 void ssiWriteIdeal(const ssiInfo *d, int typ,ideal I) 282 295 { 283 296 // syntax: 7 # of elements <poly 1> <poly2>..... … … 320 333 } 321 334 322 void ssiWriteProc( ssiInfo *d,procinfov p)335 void ssiWriteProc(const ssiInfo *d,procinfov p) 323 336 { 324 337 if (p->data.s.body==NULL) … … 341 354 } 342 355 } 343 void ssiWriteIntvec( ssiInfo *d,intvec * v)356 void ssiWriteIntvec(const ssiInfo *d,intvec * v) 344 357 { 345 358 fprintf(d->f_write,"%d ",v->length()); … … 350 363 } 351 364 } 352 void ssiWriteIntmat( ssiInfo *d,intvec * v)365 void ssiWriteIntmat(const ssiInfo *d,intvec * v) 353 366 { 354 367 fprintf(d->f_write,"%d %d ",v->rows(),v->cols()); … … 360 373 } 361 374 362 void ssiWriteBigintmat( ssiInfo *d,bigintmat * v)375 void ssiWriteBigintmat(const ssiInfo *d,bigintmat * v) 363 376 { 364 377 fprintf(d->f_write,"%d %d ",v->rows(),v->cols()); … … 370 383 } 371 384 372 char *ssiReadString( ssiInfo *d)385 char *ssiReadString(const ssiInfo *d) 373 386 { 374 387 char *buf; … … 388 401 } 389 402 390 number ssiReadBigInt( ssiInfo *d)403 number ssiReadBigInt(const ssiInfo *d) 391 404 { 392 405 int sub_type=-1; … … 413 426 } 414 427 415 static number ssiReadQNumber(ssiInfo *d) 416 { 417 int sub_type=-1; 418 sub_type=s_readint(d->f_read); 419 switch(sub_type) 420 { 421 case 0: 422 case 1: 423 {// read mpz_t, mpz_t 424 number n=nlRInit(0); 425 mpz_init(n->n); 426 s_readmpz(d->f_read,n->z); 427 s_readmpz(d->f_read,n->n); 428 n->s=sub_type; 429 return n; 430 } 431 432 case 3: 433 {// read mpz_t 434 number n=nlRInit(0); 435 s_readmpz(d->f_read,n->z); 436 n->s=3; /*sub_type*/ 437 return n; 438 } 439 case 4: 440 { 441 LONG dd=s_readlong(d->f_read); 442 //#if SIZEOF_LONG == 8 443 return INT_TO_SR(dd); 444 //#else 445 //return nlInit(dd,NULL); 446 //#endif 447 } 448 case 5: 449 case 6: 450 {// read raw mpz_t, mpz_t 451 number n=nlRInit(0); 452 mpz_init(n->n); 453 s_readmpz_base (d->f_read,n->z, SSI_BASE); 454 s_readmpz_base (d->f_read,n->n, SSI_BASE); 455 n->s=sub_type-5; 456 return n; 457 } 458 case 8: 459 {// read raw mpz_t 460 number n=nlRInit(0); 461 s_readmpz_base (d->f_read,n->z, SSI_BASE); 462 n->s=sub_type=3; /*subtype-5*/ 463 return n; 464 } 465 466 default: Werror("error in reading number: invalid subtype %d",sub_type); 467 return NULL; 468 } 469 return NULL; 470 } 471 472 poly ssiReadPoly_R(ssiInfo *D, const ring r); 473 number ssiReadNumber_CF(ssiInfo *d, const coeffs cf) 428 number ssiReadNumber_CF(const ssiInfo *d, const coeffs cf) 474 429 { 475 430 if (cf->cfReadFd!=NULL) … … 495 450 } 496 451 497 number ssiReadNumber( ssiInfo *d)452 number ssiReadNumber(const ssiInfo *d) 498 453 { 499 454 return ssiReadNumber_CF(d,d->r->cf); 500 455 } 501 456 502 ring ssiReadRing( ssiInfo *d)503 { 504 /* syntax is <ch> <N> <l1> <v1> ...<lN> <vN> <number of orderings> <ord1> <block0_1> <block1_1> .... */505 int ch, N,i ,l;457 ring ssiReadRing(const ssiInfo *d) 458 { 459 /* syntax is <ch> <N> <l1> <v1> ...<lN> <vN> <number of orderings> <ord1> <block0_1> <block1_1> .... <Q-ideal> */ 460 int ch, N,i; 506 461 char **names; 507 462 ch=s_readint(d->f_read); … … 561 516 return NULL; 562 517 } 563 else if (ch>=0) /* Q, Z/p */564 return rDefault(ch,N,names,num_ord,ord,block0,block1,wvhdl);565 else if (ch==-1) /* trans ext. */566 {567 TransExtInfo T;568 T.r=ssiReadRing(d);569 coeffs cf=nInitChar(n_transExt,&T);570 return rDefault(cf,N,names,num_ord,ord,block0,block1,wvhdl);571 }572 else if (ch==-2) /* alg ext. */573 {574 TransExtInfo T;575 T.r=ssiReadRing(d);576 T.r->qideal=idInit(1,1);577 T.r->qideal->m[0]=ssiReadPoly_R(d,T.r);578 coeffs cf=nInitChar(n_algExt,&T);579 return rDefault(cf,N,names,num_ord,ord,block0,block1,wvhdl);580 }581 518 else 582 519 { 583 Werror("ssi: read unknown coeffs type (%d)",ch); 584 return NULL; 585 } 586 } 587 588 poly ssiReadPoly_R(ssiInfo *D, const ring r) 520 ring r=NULL; 521 if (ch>=0) /* Q, Z/p */ 522 r=rDefault(ch,N,names,num_ord,ord,block0,block1,wvhdl); 523 else if (ch==-1) /* trans ext. */ 524 { 525 TransExtInfo T; 526 T.r=ssiReadRing(d); 527 coeffs cf=nInitChar(n_transExt,&T); 528 r=rDefault(cf,N,names,num_ord,ord,block0,block1,wvhdl); 529 } 530 else if (ch==-2) /* alg ext. */ 531 { 532 TransExtInfo T; 533 T.r=ssiReadRing(d); 534 T.r->qideal=idInit(1,1); 535 T.r->qideal->m[0]=ssiReadPoly_R(d,T.r); 536 coeffs cf=nInitChar(n_algExt,&T); 537 r=rDefault(cf,N,names,num_ord,ord,block0,block1,wvhdl); 538 } 539 else 540 { 541 Werror("ssi: read unknown coeffs type (%d)",ch); 542 return NULL; 543 } 544 ideal q=ssiReadIdeal_R(d,r); 545 if (IDELEMS(q)==0) omFreeBin(q,sip_sideal_bin); 546 else r->qideal=q; 547 return r; 548 } 549 } 550 551 poly ssiReadPoly_R(const ssiInfo *D, const ring r) 589 552 { 590 553 // < # of terms> < term1> < ..... … … 593 556 //Print("poly: terms:%d\n",n); 594 557 poly p; 595 int j;596 j=0;597 558 poly ret=NULL; 598 559 poly prev=NULL; … … 619 580 } 620 581 621 poly ssiReadPoly( ssiInfo *D)582 poly ssiReadPoly(const ssiInfo *D) 622 583 { 623 584 // < # of terms> < term1> < ..... … … 625 586 } 626 587 627 ideal ssiReadIdeal (ssiInfo *d)588 ideal ssiReadIdeal_R(const ssiInfo *d,const ring r) 628 589 { 629 590 int n,i; … … 633 594 for(i=0;i<IDELEMS(I);i++) // read n terms 634 595 { 635 I->m [i]=ssiReadPoly (d);596 I->m [i]=ssiReadPoly_R(d,r); 636 597 } 637 598 return I; 638 599 } 639 600 640 matrix ssiReadMatrix(ssiInfo *d) 641 { 642 int n,m,i,j; 601 ideal ssiReadIdeal(const ssiInfo *d) 602 { 603 return ssiReadIdeal_R(d,d->r); 604 } 605 606 matrix ssiReadMatrix(const ssiInfo *d) 607 { 608 int n,m; 643 609 m=s_readint(d->f_read); 644 610 n=s_readint(d->f_read); … … 700 666 } 701 667 702 procinfov ssiReadProc( ssiInfo *d)668 procinfov ssiReadProc(const ssiInfo *d) 703 669 { 704 670 char *s=ssiReadString(d); … … 728 694 return L; 729 695 } 730 intvec* ssiReadIntvec( ssiInfo *d)696 intvec* ssiReadIntvec(const ssiInfo *d) 731 697 { 732 698 int nr; … … 739 705 return v; 740 706 } 741 intvec* ssiReadIntmat( ssiInfo *d)707 intvec* ssiReadIntmat(const ssiInfo *d) 742 708 { 743 709 int r,c; … … 751 717 return v; 752 718 } 753 bigintmat* ssiReadBigintmat( ssiInfo *d)719 bigintmat* ssiReadBigintmat(const ssiInfo *d) 754 720 { 755 721 int r,c; … … 889 855 d->fd_read=pc[0]; 890 856 d->fd_write=cp[1]; 891 892 857 //d->r=currRing; 858 //if (d->r!=NULL) d->r->ref++; 893 859 l->data=d; 894 860 omFree(l->mode); … … 928 894 SI_LINK_SET_RW_OPEN_P(l); 929 895 d->send_quit_at_exit=1; 930 931 896 //d->r=currRing; 897 //if (d->r!=NULL) d->r->ref++; 932 898 } 933 899 else … … 944 910 int sockfd, newsockfd, portno, clilen; 945 911 struct sockaddr_in serv_addr, cli_addr; 946 int n;947 912 sockfd = socket(AF_INET, SOCK_STREAM, 0); 948 913 if(sockfd < 0) … … 1005 970 int sockfd, newsockfd, portno, clilen; 1006 971 struct sockaddr_in serv_addr, cli_addr; 1007 int n;1008 972 sockfd = socket(AF_INET, SOCK_STREAM, 0); 1009 973 if(sockfd < 0) … … 1088 1052 { 1089 1053 char* host = (char*)omAlloc(256); 1090 int sockfd, portno , n;1054 int sockfd, portno; 1091 1055 struct sockaddr_in serv_addr; 1092 1056 struct hostent *server; … … 1296 1260 case 5:{ 1297 1261 d->r=ssiReadRing(d); 1298 res->rtyp=RING_CMD;1299 1262 res->data=(char*)d->r; 1263 if (d->r->qideal==NULL) 1264 res->rtyp=RING_CMD; 1265 else 1266 res->rtyp=QRING_CMD; 1300 1267 // we are in the top-level, so set the basering to d->r: 1301 1268 if (d->r!=NULL) … … 1470 1437 ssiWriteNumber(d,(number)dd); 1471 1438 break; 1439 case QRING_CMD: 1472 1440 case RING_CMD:fputs("5 ",d->f_write); 1473 1441 ssiWriteRing(d,(ring)dd); … … 1578 1546 && (strcmp(request, "read") == 0)) 1579 1547 { 1580 fd_set mask , fdmask;1548 fd_set mask; 1581 1549 struct timeval wt; 1582 1550 if (s_isready(d->f_read)) return "ready"; … … 1838 1806 } 1839 1807 int portno; 1840 int n;1841 1808 ssiReserved_sockfd = socket(AF_INET, SOCK_STREAM, 0); 1842 1809 if(ssiReserved_sockfd < 0)
Note: See TracChangeset
for help on using the changeset viewer.