source: git/Singular/subexpr.h @ 72a01e

spielwiese
Last change on this file since 72a01e was 72a01e, checked in by Hans Schoenemann <hannes@…>, 10 years ago
removed unused febase.h, moved parts to ipshell.h/subexpr.h/structs.h
  • Property mode set to 100644
File size: 4.9 KB
Line 
1#ifndef SUBEXPR_H
2#define SUBEXPR_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/*
7* ABSTRACT: handling of leftv
8*/
9
10#include <string.h>
11
12#include <polys/monomials/ring.h>
13
14//#include <Singular/ipid.h>
15
16#include <Singular/grammar.h>
17#include <Singular/tok.h>
18#include <Singular/attrib.h>
19
20typedef enum { LANG_NONE, LANG_TOP, LANG_SINGULAR, LANG_C, LANG_MAX} language_defs;
21class proc_singular
22{
23public:
24  long   proc_start;       // position where proc is starting
25  long   def_end;          // position where proc header is ending
26  long   help_start;       // position where help is starting
27  long   help_end;         // position where help is starting
28  long   body_start;       // position where proc-body is starting
29  long   body_end;         // position where proc-body is ending
30  long   example_start;    // position where example is starting
31  long   proc_end;         // position where proc is ending
32  int    proc_lineno;
33  int    body_lineno;
34  int    example_lineno;
35  char   *body;
36  long help_chksum;
37};
38struct proc_object
39{
40//public:
41  BOOLEAN (*function)(leftv res, leftv v);
42};
43
44union uprocinfodata
45{
46public:
47  proc_singular  s;        // data of Singular-procedure
48  struct proc_object    o; // pointer to binary-function
49};
50typedef union uprocinfodata procinfodata;
51
52class procinfo
53{
54public:
55  char          *libname;
56  char          *procname;
57  package       pack;
58  language_defs language;
59  short         ref;
60  char          is_static;        // if set, proc not accessible for user
61  char          trace_flag;
62  procinfodata  data;
63};
64
65typedef procinfo *         procinfov;
66
67struct _ssubexpr
68{
69  struct _ssubexpr * next;
70  int start;
71};
72
73typedef struct _ssubexpr *Subexpr;
74
75extern const char sNoName[];
76extern BOOLEAN siq;
77extern const char *iiSleftv2name(leftv v);
78
79class sleftv;
80typedef sleftv * leftv;
81
82/// Class used for (list of) interpreter objects
83class sleftv
84{
85  public:
86  /* !! do not change the first 6 entries !! (see ipid.h: idrec) */
87    leftv       next;
88    const char *name;
89    void *      data;
90    attr        attribute;
91    BITSET      flag;
92    int         rtyp;
93                 /* the type of the expression, describes the data field
94                  * (E) markes the type field in iparith
95                  * (S) markes the rtyp in sleftv
96                  * ANY_TYPE:   data is int: real type or 0    (E)
97                  * DEF_CMD:    all types, no change in sleftv (E)
98                  * IDHDL: existing variable         (E)
99                  * IDHDL: variable, data is idhdl   (S)
100                  * COMMAND: data is command         (S)
101                  * INT_CMD:      int constant, data is int  (E,S)
102                  * INTVEC_CMD:   intvec constant, data is intvec * (E,S)
103                  * POLY_CMD:     poly constant, data is poly (E,S)
104                  * ....
105                  */
106    Subexpr e;    /* holds the indices for indexed values */
107    package     req_packhdl;
108    inline void Init() { memset(this,0,sizeof(*this)); }
109    void CleanUp(ring r=currRing);
110
111    /// Called by type_cmd (e.g. "r;") or as default in jPRINT
112    void Print(leftv store=NULL,int spaces=0);
113
114    /// Called for conversion to string (used by string(..), write(..),..)
115    char * String(void *d=NULL, BOOLEAN typed = FALSE, int dim = 1);
116
117    void Copy(leftv e);
118    attr CopyA();
119    void * CopyD(int t);
120    void * CopyD() { return CopyD(Typ()); }
121    inline const char * Name()
122    {
123      if ((name!=NULL) && (e==NULL)) return name;
124      else return sNoName;
125    }
126    inline const char * Fullname()
127    {
128      if ((name!=NULL) && (e==NULL)) return(iiSleftv2name(this));
129      else return sNoName;
130    }
131    int  Typ();
132    int  LTyp(); /* returns LIST_CMD for l[i], otherwise returns Typ() */
133    void * Data();
134    leftv LData(); /* returns &(l[i]) for l[i], otherwise returns this */
135    //leftv LHdl();
136    attr * Attribute();
137    inline leftv Next() { return next; }
138    int listLength();
139    int Eval(); /*replace a COMMAND by its result otherwise by CopyD*/
140    BOOLEAN RingDependend();
141};
142
143inline BOOLEAN RingDependend(int t) { return (BEGIN_RING<t)&&(t<END_RING); }
144extern sleftv sLastPrinted;
145
146void syMake(leftv v,const char * name, idhdl packhdl = NULL);
147BOOLEAN assumeStdFlag(leftv h);
148
149inline procinfov piCopy(procinfov pi)
150{
151  pi->ref++;
152  return pi;
153}
154BOOLEAN piKill(procinfov l);
155const char *piProcinfo(procinfov pi, const char *request);
156void piShowProcinfo(procinfov pi, char *txt);
157#ifdef HAVE_LIBPARSER
158class libstack;
159typedef libstack *  libstackv;
160
161class libstack
162{
163 public:
164  libstackv next;
165  char      *libname;
166  BOOLEAN   to_be_done;
167  int       cnt;
168  void      push(const char *p, char * libname);
169  libstackv pop(const char *p);
170  inline char *get() { return(libname); }
171};
172#endif /* HAVE_LIBPARSER */
173
174extern omBin sSubexpr_bin;
175extern omBin procinfo_bin;
176extern omBin libstack_bin;
177
178void s_internalDelete(const int t,  void *d, const ring r);
179
180#endif
Note: See TracBrowser for help on using the repository browser.