Functions
ipconv.h File Reference
#include <kernel/structs.h>
#include <Singular/table.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)
 

Function Documentation

§ iiConvert()

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

Definition at line 360 of file ipconv.cc.

361 {
362  memset(output,0,sizeof(sleftv));
363  if ((inputType==outputType)
364  || (outputType==DEF_CMD)
365  || ((outputType==IDHDL)&&(input->rtyp==IDHDL)))
366  {
367  memcpy(output,input,sizeof(*output));
368  memset(input,0,sizeof(*input));
369  return FALSE;
370  }
371  else if (outputType==ANY_TYPE)
372  {
373  output->rtyp=ANY_TYPE;
374  output->data=(char *)(long)input->Typ();
375  /* the name of the object:*/
376  if (input->e==NULL)
377  {
378  if (input->rtyp==IDHDL)
379  /* preserve name: copy it */
380  output->name=omStrDup(IDID((idhdl)(input->data)));
381  else if (input->name!=NULL)
382  {
383  if (input->rtyp==ALIAS_CMD)
384  output->name=omStrDup(input->name);
385  else
386  {
387  output->name=input->name;
388  input->name=NULL;
389  }
390  }
391  else if ((input->rtyp==POLY_CMD) && (input->name==NULL))
392  {
393  if (input->data!=NULL)
394  {
395  int nr=pIsPurePower((poly)input->data);
396  if (nr!=0)
397  {
398  if (pGetExp((poly)input->data,nr)==1)
399  {
400  output->name=omStrDup(currRing->names[nr-1]);
401  }
402  else
403  {
404  char *tmp=(char *)omAlloc(4);
405  sprintf(tmp,"%c%d",*(currRing->names[nr-1]),
406  (int)pGetExp((poly)input->data,nr));
407  output->name=tmp;
408  }
409  }
410  else if(pIsConstant((poly)input->data))
411  {
412  StringSetS("");
413  number n=(pGetCoeff((poly)input->data));
414  n_Write(n, currRing->cf);
415  (pGetCoeff((poly)input->data))=n;
416  output->name=StringEndS();
417  }
418  }
419  }
420  else if ((input->rtyp==NUMBER_CMD) && (input->name==NULL))
421  {
422  StringSetS("");
423  number n=(number)input->data;
424  n_Write(n, currRing->cf);
425  input->data=(void*)n;
426  output->name=StringEndS();
427  }
428  else
429  {
430  /* no need to preserve name: use it */
431  output->name=input->name;
432  memset(input,0,sizeof(*input));
433  }
434  }
435  output->next=input->next;
436  input->next=NULL;
437  return errorreported;
438  }
439  if (index!=0) /* iiTestConvert does not returned 'failure' */
440  {
441  index--;
442 
443  if((dConvertTypes[index].i_typ==inputType)
444  &&(dConvertTypes[index].o_typ==outputType))
445  {
446  if(traceit&TRACE_CONV)
447  {
448  Print("automatic conversion %s -> %s\n",
449  Tok2Cmdname(inputType),Tok2Cmdname(outputType));
450  }
451  if ((currRing==NULL) && (outputType>BEGIN_RING) && (outputType<END_RING))
452  return TRUE;
453  output->rtyp=outputType;
454  if (dConvertTypes[index].p!=NULL)
455  {
456  output->data=dConvertTypes[index].p(input->CopyD());
457  }
458  else
459  {
460  dConvertTypes[index].pl(output,input);
461  }
462  if ((output->data==NULL)
463  && ((outputType!=INT_CMD)
464  &&(outputType!=POLY_CMD)
465  &&(outputType!=VECTOR_CMD)
466  &&(outputType!=NUMBER_CMD)))
467  {
468  return TRUE;
469  }
470  if (errorreported) return TRUE;
471  output->next=input->next;
472  input->next=NULL;
473  //if (outputType==MATRIX_CMD) Print("convert %d -> matrix\n",inputType);
474  return FALSE;
475  }
476  }
477  return TRUE;
478 }
#define pIsPurePower(p)
Definition: polys.h:231
Class used for (list of) interpreter objects.
Definition: subexpr.h:84
#define ANY_TYPE
Definition: tok.h:30
#define Print
Definition: emacs.cc:83
Definition: tok.h:94
Subexpr e
Definition: subexpr.h:107
const struct sConvertTypes dConvertTypes[]
Definition: table.h:1184
#define IDID(a)
Definition: ipid.h:119
#define FALSE
Definition: auxiliary.h:97
return P p
Definition: myNF.cc:203
#define TRACE_CONV
Definition: reporter.h:47
#define TRUE
Definition: auxiliary.h:101
char * StringEndS()
Definition: reporter.cc:151
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
Definition: monomials.h:51
int traceit
Definition: febase.cc:47
int Typ()
Definition: subexpr.cc:979
#define omAlloc(size)
Definition: omAllocDecl.h:210
Definition: idrec.h:34
#define IDHDL
Definition: tok.h:31
void * data
Definition: subexpr.h:90
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:10
#define pGetExp(p, i)
Exponent.
Definition: polys.h:41
Definition: tok.h:57
const char * name
Definition: subexpr.h:89
void StringSetS(const char *st)
Definition: reporter.cc:128
static FORCE_INLINE void n_Write(number &n, const coeffs r, const BOOLEAN bShortOut=TRUE)
Definition: coeffs.h:595
#define pIsConstant(p)
like above, except that Comp might be != 0
Definition: polys.h:221
short errorreported
Definition: feFopen.cc:23
leftv next
Definition: subexpr.h:88
static int index(p_Length length, p_Ord ord)
Definition: p_Procs_Impl.h:592
Definition: tok.h:34
#define NULL
Definition: omList.c:10
const char * Tok2Cmdname(int tok)
Definition: gentable.cc:128
int rtyp
Definition: subexpr.h:93
polyrec * poly
Definition: hilb.h:10
void * CopyD(int t)
Definition: subexpr.cc:679
#define omStrDup(s)
Definition: omAllocDecl.h:263

§ iiTestConvert()

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

Definition at line 484 of file ipconv.cc.

485 {
486  if ((inputType==outputType)
487  || (outputType==DEF_CMD)
488  || (outputType==IDHDL)
489  || (outputType==ANY_TYPE))
490  {
491  return -1;
492  }
493  if (inputType==UNKNOWN) return 0;
494 
495  if ((currRing==NULL) && (outputType>BEGIN_RING) && (outputType<END_RING))
496  return 0;
497  //if ((currRing==NULL) && (outputType==CNUMBER_CMD))
498  // return 0;
499 
500  // search the list
501  int i=0;
502  while (dConvertTypes[i].i_typ!=0)
503  {
504  if((dConvertTypes[i].i_typ==inputType)
505  &&(dConvertTypes[i].o_typ==outputType))
506  {
507  //Print("test convert %d to %d (%s -> %s):%d\n",inputType,outputType,
508  //Tok2Cmdname(inputType), Tok2Cmdname(outputType),i+1);
509  return i+1;
510  }
511  i++;
512  }
513  //Print("test convert %d to %d (%s -> %s):0, tested:%d\n",inputType,outputType,
514  // Tok2Cmdname(inputType), Tok2Cmdname(outputType),i);
515  return 0;
516 }
#define ANY_TYPE
Definition: tok.h:30
const struct sConvertTypes dConvertTypes[]
Definition: table.h:1184
#define UNKNOWN
Definition: tok.h:217
#define IDHDL
Definition: tok.h:31
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:10
Definition: tok.h:57
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10