My Project
Loading...
Searching...
No Matches
ipconv.h File Reference
#include "kernel/structs.h"

Go to the source code of this file.

Functions

int iiTestConvert (int inputType, int outputType, const struct sConvertTypes *dCT=dConvertTypes)
 
BOOLEAN iiConvert (int inputType, int outputType, int index, leftv input, leftv output, const struct sConvertTypes *dCT=dConvertTypes)
 

Variables

const struct sConvertTypes dConvertTypes []
 

Function Documentation

◆ iiConvert()

BOOLEAN iiConvert ( int inputType,
int outputType,
int index,
leftv input,
leftv output,
const struct sConvertTypes * dCT = dConvertTypes )

Definition at line 457 of file ipconv.cc.

458{
459 output->Init();
460 if ((inputType==outputType)
461 || (outputType==DEF_CMD)
462 || ((outputType==IDHDL)&&(input->rtyp==IDHDL)))
463 {
464 memcpy(output,input,sizeof(*output));
465 input->Init();
466 return FALSE;
467 }
468 else if (outputType==ANY_TYPE)
469 {
470 output->rtyp=ANY_TYPE;
471 output->data=(char *)(long)input->Typ();
472 /* the name of the object:*/
473 if (input->e==NULL)
474 {
475 if (input->rtyp==IDHDL)
476 /* preserve name: copy it */
477 output->name=omStrDup(IDID((idhdl)(input->data)));
478 else if (input->name!=NULL)
479 {
480 if (input->rtyp==ALIAS_CMD)
481 output->name=omStrDup(input->name);
482 else
483 {
484 output->name=input->name;
485 input->name=NULL;
486 }
487 }
488 else if ((input->rtyp==POLY_CMD) && (input->name==NULL))
489 {
490 if (input->data!=NULL)
491 {
492 int nr=pIsPurePower((poly)input->data);
493 if (nr!=0)
494 {
495 if (pGetExp((poly)input->data,nr)==1)
496 {
497 output->name=omStrDup(currRing->names[nr-1]);
498 }
499 else
500 {
501 char *tmp=(char *)omAlloc(8);
502 snprintf(tmp,8,"%c%d",*(currRing->names[nr-1]),
503 (int)pGetExp((poly)input->data,nr));
504 output->name=tmp;
505 }
506 }
507 else if(pIsConstant((poly)input->data))
508 {
509 StringSetS("");
510 number n=(pGetCoeff((poly)input->data));
511 n_Write(n, currRing->cf);
512 (pGetCoeff((poly)input->data))=n; // n_Write may have changed n
513 output->name=StringEndS();
514 }
515 }
516 }
517 else if ((input->rtyp==NUMBER_CMD) && (input->name==NULL))
518 {
519 StringSetS("");
520 number n=(number)input->data;
521 n_Write(n, currRing->cf);
522 input->data=(void*)n; // n_Write may have changed n
523 output->name=StringEndS();
524 }
525 else
526 {
527 /* no need to preserve name: use it */
528 output->name=input->name;
529 input->name=NULL;
530 }
531 }
532 output->next=input->next;
533 input->next=NULL;
534 if (!errorreported) input->CleanUp();
535 return errorreported;
536 }
537 if (index!=0) /* iiTestConvert does not returned 'failure' */
538 {
539 index--;
540
541 if((dConvertTypes[index].i_typ==inputType)
542 &&(dConvertTypes[index].o_typ==outputType))
543 {
545 {
546 Print("automatic conversion %s -> %s\n",
547 Tok2Cmdname(inputType),Tok2Cmdname(outputType));
548 }
549 if ((currRing==NULL) && (outputType>BEGIN_RING) && (outputType<END_RING))
550 return TRUE;
551 output->rtyp=outputType;
553 {
554 output->data=dConvertTypes[index].p(input->CopyD());
555 }
556 else
557 {
558 dConvertTypes[index].pl(output,input);
559 }
560 if ((output->data==NULL)
561 && ((outputType!=INT_CMD)
562 &&(outputType!=POLY_CMD)
563 &&(outputType!=VECTOR_CMD)
564 &&(outputType!=NUMBER_CMD)))
565 {
566 return TRUE;
567 }
568 if (errorreported) return TRUE;
569 output->next=input->next;
570 input->next=NULL;
571 if ((input->rtyp!=IDHDL) && (input->attribute!=NULL))
572 {
573 input->attribute->killAll(currRing);
574 input->attribute=NULL;
575 }
576 if (input->e!=NULL)
577 {
578 Subexpr h;
579 while (input->e!=NULL)
580 {
581 h=input->e->next;
583 input->e=h;
584 }
585 }
586 //input->Init(); // seems that input (rtyp?) is still needed
587 return FALSE;
588 }
589 }
590 return TRUE;
591}
#define TRUE
Definition auxiliary.h:100
#define FALSE
Definition auxiliary.h:96
void * ADDRESS
Definition auxiliary.h:119
int p
Definition cfModGcd.cc:4086
Definition idrec.h:35
void killAll(const ring r)
Definition attrib.cc:189
void * CopyD(int t)
Definition subexpr.cc:714
int Typ()
Definition subexpr.cc:1048
const char * name
Definition subexpr.h:87
int rtyp
Definition subexpr.h:91
void Init()
Definition subexpr.h:107
leftv next
Definition subexpr.h:86
void * data
Definition subexpr.h:88
void CleanUp(ring r=currRing)
Definition subexpr.cc:351
Subexpr e
Definition subexpr.h:105
attr attribute
Definition subexpr.h:89
static FORCE_INLINE void n_Write(number n, const coeffs r, const BOOLEAN bShortOut=TRUE)
Definition coeffs.h:592
#define Print
Definition emacs.cc:80
VAR short errorreported
Definition feFopen.cc:23
const char * Tok2Cmdname(int tok)
Definition gentable.cc:135
@ END_RING
Definition grammar.cc:311
@ BEGIN_RING
Definition grammar.cc:283
@ VECTOR_CMD
Definition grammar.cc:293
@ NUMBER_CMD
Definition grammar.cc:289
@ POLY_CMD
Definition grammar.cc:290
const struct sConvertTypes dConvertTypes[]
Definition table.h:1320
#define IDID(a)
Definition ipid.h:122
STATIC_VAR Poly * h
Definition janet.cc:971
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
Definition monomials.h:44
#define omStrDup(s)
#define omAlloc(size)
#define omFreeBin(addr, bin)
#define NULL
Definition omList.c:12
static int index(p_Length length, p_Ord ord)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition polys.cc:13
#define pIsConstant(p)
like above, except that Comp must be 0
Definition polys.h:238
#define pGetExp(p, i)
Exponent.
Definition polys.h:41
#define pIsPurePower(p)
Definition polys.h:248
void StringSetS(const char *st)
Definition reporter.cc:128
char * StringEndS()
Definition reporter.cc:151
EXTERN_VAR int traceit
Definition reporter.h:24
#define TRACE_CONV
Definition reporter.h:48
VAR omBin sSubexpr_bin
Definition subexpr.cc:40
#define IDHDL
Definition tok.h:31
@ ALIAS_CMD
Definition tok.h:34
@ DEF_CMD
Definition tok.h:58
@ INT_CMD
Definition tok.h:96
#define ANY_TYPE
Definition tok.h:30

◆ iiTestConvert()

int iiTestConvert ( int inputType,
int outputType,
const struct sConvertTypes * dCT = dConvertTypes )

Definition at line 597 of file ipconv.cc.

598{
599 if ((inputType==outputType)
600 || (outputType==DEF_CMD)
601 || (outputType==IDHDL)
602 || (outputType==ANY_TYPE))
603 {
604 return -1;
605 }
606 if (inputType==UNKNOWN) return 0;
607
608 if ((currRing==NULL) && (outputType>BEGIN_RING) && (outputType<END_RING))
609 return 0;
610 //if ((currRing==NULL) && (outputType==CNUMBER_CMD))
611 // return 0;
612
613 // search the list
614 int i=0;
615 while (dConvertTypes[i].i_typ!=0)
616 {
617 if((dConvertTypes[i].i_typ==inputType)
618 &&(dConvertTypes[i].o_typ==outputType))
619 {
620 //Print("test convert %d to %d (%s -> %s):%d\n",inputType,outputType,
621 //Tok2Cmdname(inputType), Tok2Cmdname(outputType),i+1);
622 return i+1;
623 }
624 i++;
625 }
626 //Print("test convert %d to %d (%s -> %s):0, tested:%d\n",inputType,outputType,
627 // Tok2Cmdname(inputType), Tok2Cmdname(outputType),i);
628 return 0;
629}
int i
Definition cfEzgcd.cc:132
#define UNKNOWN
Definition tok.h:224

Variable Documentation

◆ dConvertTypes

const struct sConvertTypes dConvertTypes[]
extern

Definition at line 1320 of file table.h.

1321{
1322// input type output type convert procedure(destr.)/(non-destr.)
1323// int -> bigint
1326// int -> number
1329// int -> poly
1330 { INT_CMD, POLY_CMD, D(iiI2P) , NULL_VAL },
1333// int -> vector
1336// int -> ideal
1339// int -> matrix
1342// int -> intvec
1344// intvec -> intmat
1347// intvec -> matrix
1349// intmat -> bigintmat
1351// intmat -> matrix
1353// bigintvec -> bigintmat
1355// number -> poly
1357// number -> matrix
1359// number -> ideal
1360// number -> vector
1361// number -> module
1362// poly -> number
1363// poly -> ideal
1365// poly -> vector
1367// poly -> matrix
1369// the same for polyBucket:
1373// vector -> module
1375// vector -> matrix
1377// ideal -> module
1379// ideal -> matrix
1381// module -> matrix
1383// matrix -> ideal
1384// matrix -> module
1386// intvec
1387// string -> link
1389// resolution -> list
1391// list -> resolution
1393// matrix -> smatrix
1395// module -> smatrix
1397// smatrix -> matrix
1399// smatrix -> module
1401#ifdef SINGULAR_4_2
1402 { INT_CMD, CNUMBER_CMD, D(iiI2NN) , NULL_VAL },
1403 { BIGINT_CMD, CNUMBER_CMD, D(iiBI2NN) , NULL_VAL },
1404 { CNUMBER_CMD, NUMBER_CMD, D(iiNN2N) , NULL_VAL },
1405 { CNUMBER_CMD, POLY_CMD, D(iiNN2P) , NULL_VAL },
1406 { INT_CMD, CPOLY_CMD, D(iiI2CP), NULL_VAL },
1407 { BIGINT_CMD, CPOLY_CMD, D(iiBI2CP), NULL_VAL },
1408// { NUMBER_CMD, CPOLY_CMD, D(iiN2CP), NULL_VAL },
1409 { POLY_CMD, CPOLY_CMD, D(iiP2CP), NULL_VAL },
1410#endif
1411// end of list
1412 { 0, 0, NULL_VAL , NULL_VAL }
1413};
#define D(A)
Definition gentable.cc:126
#define NULL_VAL
Definition gentable.cc:127
@ IDEAL_CMD
Definition grammar.cc:285
@ MATRIX_CMD
Definition grammar.cc:287
@ BUCKET_CMD
Definition grammar.cc:284
@ BIGINTMAT_CMD
Definition grammar.cc:278
@ INTMAT_CMD
Definition grammar.cc:280
@ MODUL_CMD
Definition grammar.cc:288
@ SMATRIX_CMD
Definition grammar.cc:292
@ RESOLUTION_CMD
Definition grammar.cc:291
@ BIGINTVEC_CMD
Definition grammar.cc:279
static void * iiBI2V(void *data)
Definition ipconv.cc:79
static void * iiP2V(void *data)
Definition ipconv.cc:143
static void iiL2R(leftv out, leftv in)
Definition ipconv.cc:432
static void * iiIm2Ma(void *data)
Definition ipconv.cc:359
static void * iiBI2P(void *data)
Definition ipconv.cc:50
static void iiBu2P(leftv out, leftv in)
Definition ipconv.cc:64
static void * iiN2Ma(void *data)
Definition ipconv.cc:398
static void * iiN2P(void *data)
Definition ipconv.cc:384
static void * iiV2Ma(void *data)
Definition ipconv.cc:177
static void * iiIV2BIV(void *data)
Definition ipconv.cc:94
static void * iiDummy(void *data)
Definition ipconv.cc:190
static void * iiI2BI(void *data)
Definition ipconv.cc:220
static void * iiP2Id(void *data)
Definition ipconv.cc:164
static void * iiMa2Mo(void *data)
Definition ipconv.cc:201
static void * iiI2Id(void *data)
Definition ipconv.cc:108
static void * iiS2Link(void *data)
Definition ipconv.cc:413
static void * iiI2Iv(void *data)
Definition ipconv.cc:207
static void * iiI2N(void *data)
Definition ipconv.cc:214
static void * iiMo2Ma(void *data)
Definition ipconv.cc:195
static void iiR2L_l(leftv out, leftv in)
Definition ipconv.cc:421
static void * iiI2V(void *data)
Definition ipconv.cc:72
static void * iiIm2Bim(void *data)
Definition ipconv.cc:376
static void * iiI2BIV(void *data)
Definition ipconv.cc:226
static void * iiBu2Id(void *data)
Definition ipconv.cc:150
static void * iiBu2V(void *data)
Definition ipconv.cc:130
static void * iiBI2Id(void *data)
Definition ipconv.cc:115
static void * iiI2P(void *data)
Definition ipconv.cc:44
static void * iiBI2N(void *data)
Definition ipconv.cc:263
@ BIGINT_CMD
Definition tok.h:38
@ LIST_CMD
Definition tok.h:118
@ INTVEC_CMD
Definition tok.h:101
@ CNUMBER_CMD
Definition tok.h:47
@ LINK_CMD
Definition tok.h:117
@ STRING_CMD
Definition tok.h:187
@ CPOLY_CMD
Definition tok.h:48