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, struct sConvertTypes *dCT=dConvertTypes)
 
BOOLEAN iiConvert (int inputType, int outputType, int index, leftv input, leftv output, struct sConvertTypes *dCT=dConvertTypes)
 

Function Documentation

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

Definition at line 358 of file ipconv.cc.

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

Definition at line 482 of file ipconv.cc.

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