source: git/Singular/ipid.h @ c232af

spielwiese
Last change on this file since c232af was c232af, checked in by Olaf Bachmann <obachman@…>, 24 years ago
* omalloc stuff git-svn-id: file:///usr/local/Singular/svn/trunk@4524 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.0 KB
Line 
1#ifndef IPID_H
2#define IPID_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: ipid.h,v 1.29 2000-08-14 12:56:24 obachman Exp $ */
7/*
8* ABSTRACT: identfier handling
9*/
10#include <string.h>
11#include "structs.h"
12#include "subexpr.h"
13
14struct sip_command
15{
16  sleftv arg1; /*arg1 to build_in, proc to proc_call*/
17  sleftv arg2; /*NULL or arg2 to build_in, args to proc_call*/
18  sleftv arg3; /*NULL or arg3*/
19  short argc; /*0,1,2,3 to build_in, -1 otherwise*/
20  short op;   /* build_in or PROC_CMD*/
21};
22
23struct sip_package
24{
25  idhdl         idroot; /* local objects */
26  char          *libname;
27  short         ref;
28  language_defs language;
29  BOOLEAN       loaded;
30  void          *handle;
31};
32
33inline package paCopy(package pack)
34{
35  pack->ref++;
36  return pack;
37}
38
39union uutypes;
40
41union uutypes
42{
43  int           i;
44  ring          uring;
45  poly          p;
46  number        n;
47  ideal         uideal;
48  map           umap;
49  matrix        umatrix;
50  char *        ustring;
51  intvec *      iv;
52  lists         l;
53  si_link       li;
54  package       pack;
55  procinfo *    pinf;
56};
57
58class idrec
59{
60  public:
61  /* !! do not change the first 6 entries !! (see subexpr.h: sleftv) */
62  idhdl      next;
63  char *     id;
64  utypes     data;
65  attr       attribute;
66  BITSET     flag;
67  idtyp      typ;
68
69  short      lev;
70  short      ref;
71
72#define IDNEXT(a)    ((a)->next)
73#define IDTYP(a)     ((a)->typ)
74#define IDFLAG(a)    ((a)->flag)
75#define IDLEV(a)     ((a)->lev)
76#define IDID(a)      ((a)->id)
77#define IDATTR(a)    ((a)->attribute)
78
79#define IDINT(a)    ((a)->data.i)
80#define IDDATA(a)   ((a)->data.ustring)
81#define IDRING(a)   ((a)->data.uring)
82#define IDINTVEC(a) ((a)->data.iv)
83#define IDPOLY(a)   ((a)->data.p)
84#define IDNUMBER(a) ((a)->data.n)
85#define IDIDEAL(a)  (((a)->data).uideal)
86#define IDMATRIX(a) (((a)->data).umatrix)
87#define IDMAP(a)    (((a)->data).umap)
88#define IDSTRING(a) ((a)->data.ustring)
89#define IDLIST(a)   ((a)->data.l)
90#define IDLINK(a)   ((a)->data.li)
91#define IDPACKAGE(a) ((a)->data.pack)
92#define IDPROC(a)   ((a)->data.pinf)
93
94  idrec() { memset(this,0,sizeof(*this)); }
95  idhdl get(const char * s, int lev);
96  idhdl set(char * s, int lev, idtyp t, BOOLEAN init=TRUE);
97  char * String();
98//  ~idrec();
99};
100
101class namerec {
102  public:
103  namehdl    next;
104  namehdl    root;
105  package    pack;
106  char *     name;
107  int        lev;
108  BOOLEAN    isroot;
109#define NSROOT(a) ((a)->pack->idroot)
110#define NSPACK(a) ((a)->pack)
111
112  int        myynest;
113  idhdl      currRingHdl;
114  ring       currRing;
115
116 namerec()  { memset(this,0,sizeof(*this)); }
117  //namehdl    Set(idhdl root);
118  namehdl    pop(BOOLEAN change_nesting=FALSE);
119  namehdl    push(package pack, char *name, int nesting=-1, BOOLEAN init=FALSE);
120  idhdl      get(const char * s, int lev, BOOLEAN root=FALSE);
121};
122
123extern namehdl namespaceroot;
124#ifdef HAVE_NAMESPACES
125#  define IDROOT (NSROOT(namespaceroot))
126#else /* HAVE_NAMESPACES */
127extern idhdl      idroot;
128#  define IDROOT idroot
129#endif /* HAVE_NAMESPACES */
130
131extern idhdl      currRingHdl;
132/*extern ring     currRing;  in structs.h */
133extern ideal      currQuotient;
134
135char *idhdl2id(idhdl pck, idhdl h);
136void  iiname2hdl(const char *name, idhdl *pck, idhdl *id);
137idhdl enterid(char * a, int lev, idtyp t, idhdl* root, BOOLEAN init=TRUE);
138idhdl ggetid(const char *n, BOOLEAN local = FALSE);
139idhdl ggetid(const char *n, BOOLEAN local, idhdl *packhdl);
140void  killid(char * a, idhdl * i);
141void  killhdl(idhdl h);
142void  killhdl(idhdl h, idhdl * ih);
143lists ipNameList(idhdl root);
144void  ipMoveId(idhdl h);
145BOOLEAN checkPackage(package pack);
146
147#define FLAG_STD   0
148#define FLAG_DRING 1
149#define FLAG_DOPERATOR 2
150#define hasFlag(A,F) Sy_inset((F),(A)->flag)
151#define setFlag(A,F) (A)->flag|=Sy_bit(F)
152#define resetFlag(A,F) (A)->flag&=~Sy_bit(F)
153void ipListFlag(idhdl h);
154
155#ifndef OM_ALLOC_H
156struct omBin_s;
157#endif
158
159extern omBin_s* sip_command_bin;
160extern omBin_s* ip_command_bin;
161extern omBin_s* sip_package_bin;
162extern omBin_s* ip_package_bin;
163extern omBin_s* idrec_bin;
164extern omBin_s* namerec_bin;
165#endif
166
167
Note: See TracBrowser for help on using the repository browser.