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 450 of file ipconv.cc.

451{
452 output->Init();
453 if ((inputType==outputType)
454 || (outputType==DEF_CMD)
455 || ((outputType==IDHDL)&&(input->rtyp==IDHDL)))
456 {
457 memcpy(output,input,sizeof(*output));
458 input->Init();
459 return FALSE;
460 }
461 else if (outputType==ANY_TYPE)
462 {
463 output->rtyp=ANY_TYPE;
464 output->data=(char *)(long)input->Typ();
465 /* the name of the object:*/
466 if (input->e==NULL)
467 {
468 if (input->rtyp==IDHDL)
469 /* preserve name: copy it */
470 output->name=omStrDup(IDID((idhdl)(input->data)));
471 else if (input->name!=NULL)
472 {
473 if (input->rtyp==ALIAS_CMD)
474 output->name=omStrDup(input->name);
475 else
476 {
477 output->name=input->name;
478 input->name=NULL;
479 }
480 }
481 else if ((input->rtyp==POLY_CMD) && (input->name==NULL))
482 {
483 if (input->data!=NULL)
484 {
485 int nr=pIsPurePower((poly)input->data);
486 if (nr!=0)
487 {
488 if (pGetExp((poly)input->data,nr)==1)
489 {
490 output->name=omStrDup(currRing->names[nr-1]);
491 }
492 else
493 {
494 char *tmp=(char *)omAlloc(8);
495 snprintf(tmp,8,"%c%d",*(currRing->names[nr-1]),
496 (int)pGetExp((poly)input->data,nr));
497 output->name=tmp;
498 }
499 }
500 else if(pIsConstant((poly)input->data))
501 {
502 StringSetS("");
503 number n=(pGetCoeff((poly)input->data));
504 n_Write(n, currRing->cf);
505 (pGetCoeff((poly)input->data))=n; // n_Write may have changed n
506 output->name=StringEndS();
507 }
508 }
509 }
510 else if ((input->rtyp==NUMBER_CMD) && (input->name==NULL))
511 {
512 StringSetS("");
513 number n=(number)input->data;
514 n_Write(n, currRing->cf);
515 input->data=(void*)n; // n_Write may have changed n
516 output->name=StringEndS();
517 }
518 else
519 {
520 /* no need to preserve name: use it */
521 output->name=input->name;
522 input->name=NULL;
523 }
524 }
525 output->next=input->next;
526 input->next=NULL;
527 if (!errorreported) input->CleanUp();
528 return errorreported;
529 }
530 if (index!=0) /* iiTestConvert does not returned 'failure' */
531 {
532 index--;
533
534 if((dConvertTypes[index].i_typ==inputType)
535 &&(dConvertTypes[index].o_typ==outputType))
536 {
538 {
539 Print("automatic conversion %s -> %s\n",
540 Tok2Cmdname(inputType),Tok2Cmdname(outputType));
541 }
542 if ((currRing==NULL) && (outputType>BEGIN_RING) && (outputType<END_RING))
543 return TRUE;
544 output->rtyp=outputType;
546 {
547 output->data=dConvertTypes[index].p(input->CopyD());
548 }
549 else
550 {
551 dConvertTypes[index].pl(output,input);
552 }
553 if ((output->data==NULL)
554 && ((outputType!=INT_CMD)
555 &&(outputType!=POLY_CMD)
556 &&(outputType!=VECTOR_CMD)
557 &&(outputType!=NUMBER_CMD)))
558 {
559 return TRUE;
560 }
561 if (errorreported) return TRUE;
562 output->next=input->next;
563 input->next=NULL;
564 if ((input->rtyp!=IDHDL) && (input->attribute!=NULL))
565 {
566 input->attribute->killAll(currRing);
567 input->attribute=NULL;
568 }
569 if (input->e!=NULL)
570 {
571 Subexpr h;
572 while (input->e!=NULL)
573 {
574 h=input->e->next;
576 input->e=h;
577 }
578 }
579 //input->Init(); // seems that input (rtyp?) is still needed
580 return FALSE;
581 }
582 }
583 return TRUE;
584}
#define TRUE
Definition auxiliary.h:101
#define FALSE
Definition auxiliary.h:97
void * ADDRESS
Definition auxiliary.h:120
int p
Definition cfModGcd.cc:4086
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:137
@ 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:1321
#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:239
#define pGetExp(p, i)
Exponent.
Definition polys.h:42
#define pIsPurePower(p)
Definition polys.h:249
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
idrec * idhdl
Definition ring.h:22
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 590 of file ipconv.cc.

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

Variable Documentation

◆ dConvertTypes

const struct sConvertTypes dConvertTypes[]
extern

Definition at line 1321 of file table.h.

1322{
1323// input type output type convert procedure(destr.)/(non-destr.)
1324// int -> bigint
1327// int -> number
1330// int -> poly
1331 { INT_CMD, POLY_CMD, D(iiI2P) , NULL_VAL },
1334// int -> vector
1337// int -> ideal
1340// int -> matrix
1343// int -> intvec
1345// intvec -> intmat
1348// intvec -> matrix
1350// intmat -> bigintmat
1352// intmat -> matrix
1354// bigintvec -> bigintmat
1356// number -> poly
1358// number -> matrix
1360// number -> ideal
1361// number -> vector
1362// number -> module
1363// poly -> number
1364// poly -> ideal
1366// poly -> vector
1368// poly -> matrix
1370// the same for polyBucket:
1374// vector -> module
1376// vector -> matrix
1378// ideal -> module
1380// ideal -> matrix
1382// module -> matrix
1384// matrix -> ideal
1385// matrix -> module
1387// intvec
1388// string -> link
1390// resolution -> list
1392// list -> resolution
1394// matrix -> smatrix
1396// module -> smatrix
1398// smatrix -> matrix
1400// smatrix -> module
1402#ifdef SINGULAR_4_2
1403 { INT_CMD, CNUMBER_CMD, D(iiI2NN) , NULL_VAL },
1404 { BIGINT_CMD, CNUMBER_CMD, D(iiBI2NN) , NULL_VAL },
1405 { CNUMBER_CMD, NUMBER_CMD, D(iiNN2N) , NULL_VAL },
1406 { CNUMBER_CMD, POLY_CMD, D(iiNN2P) , NULL_VAL },
1407 { INT_CMD, CPOLY_CMD, D(iiI2CP), NULL_VAL },
1408 { BIGINT_CMD, CPOLY_CMD, D(iiBI2CP), NULL_VAL },
1409// { NUMBER_CMD, CPOLY_CMD, D(iiN2CP), NULL_VAL },
1410 { POLY_CMD, CPOLY_CMD, D(iiP2CP), NULL_VAL },
1411#endif
1412// end of list
1413 { 0, 0, NULL_VAL , NULL_VAL }
1414};
#define D(A)
Definition gentable.cc:128
#define NULL_VAL
Definition gentable.cc:129
@ 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:136
static void iiL2R(leftv out, leftv in)
Definition ipconv.cc:425
static void * iiIm2Ma(void *data)
Definition ipconv.cc:352
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:391
static void * iiN2P(void *data)
Definition ipconv.cc:377
static void * iiV2Ma(void *data)
Definition ipconv.cc:170
static void * iiIV2BIV(void *data)
Definition ipconv.cc:94
static void * iiDummy(void *data)
Definition ipconv.cc:183
static void * iiI2BI(void *data)
Definition ipconv.cc:213
static void * iiP2Id(void *data)
Definition ipconv.cc:157
static void * iiMa2Mo(void *data)
Definition ipconv.cc:194
static void * iiI2Id(void *data)
Definition ipconv.cc:101
static void * iiS2Link(void *data)
Definition ipconv.cc:406
static void * iiI2Iv(void *data)
Definition ipconv.cc:200
static void * iiI2N(void *data)
Definition ipconv.cc:207
static void * iiMo2Ma(void *data)
Definition ipconv.cc:188
static void iiR2L_l(leftv out, leftv in)
Definition ipconv.cc:414
static void * iiI2V(void *data)
Definition ipconv.cc:72
static void * iiIm2Bim(void *data)
Definition ipconv.cc:369
static void * iiI2BIV(void *data)
Definition ipconv.cc:219
static void * iiBu2Id(void *data)
Definition ipconv.cc:143
static void * iiBu2V(void *data)
Definition ipconv.cc:123
static void * iiBI2Id(void *data)
Definition ipconv.cc:108
static void * iiI2P(void *data)
Definition ipconv.cc:44
static void * iiBI2N(void *data)
Definition ipconv.cc:256
@ 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