source: git/Singular/ipid.h

spielwiese
Last change on this file was 2c5e69, checked in by Hans Schoenemann <hannes@…>, 3 years ago
fix: assign rings for ring-dep stuff in newstruct
  • Property mode set to 100644
File size: 4.4 KB
RevLine 
[0e1846]1#ifndef IPID_H
2#define IPID_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
[d5add65]6
[0e1846]7/*
[6ae4f5]8* ABSTRACT: identfier handling
[0e1846]9*/
[bdae9a]10#include "misc/options.h"
[a4b31c]11#include "Singular/idrec.h"
12#include "Singular/subexpr.h"
13#include "Singular/lists.h"
[0e1846]14
[a3f0fea]15EXTERN_VAR idhdl currPackHdl;
16EXTERN_VAR idhdl basePackHdl;
17EXTERN_VAR package currPack;
18EXTERN_VAR package basePack;
[995a6a]19#define IDROOT (currPack->idroot)
20
[0e051f]21struct sip_command;
22typedef struct sip_command ip_command;
23typedef ip_command *       command;
24
[0e1846]25struct sip_command
26{
27  sleftv arg1; /*arg1 to build_in, proc to proc_call*/
28  sleftv arg2; /*NULL or arg2 to build_in, args to proc_call*/
29  sleftv arg3; /*NULL or arg3*/
30  short argc; /*0,1,2,3 to build_in, -1 otherwise*/
31  short op;   /* build_in or PROC_CMD*/
32};
33
34struct sip_package
35{
[daeb6d]36  idhdl         idroot; /* local objects */
37  char          *libname;
38  short         ref;
[0a3ddd]39  language_defs language;
[a8213b0]40  BOOLEAN       loaded;
[cd6b45]41  void          *handle;
[0e1846]42};
43
[daeb6d]44inline package paCopy(package pack)
45{
46  pack->ref++;
47  return pack;
48}
49
[a3bc95e]50inline void paKill(package pack)
51{
52  pack->ref--;
53}
54
[eaf66f]55class proclevel
56{
[bd4cb92]57  public:
58  proclevel * next;
[573da6]59  idhdl      cPackHdl;
60  package    cPack;
[bd4cb92]61  char      * name;
62  proclevel()  { memset(this,0,sizeof(*this)); }
[a3bc95e]63  void    push(char *);
64  void    pop();
65};
[a3f0fea]66EXTERN_VAR proclevel *procstack;
[bd4cb92]67
[46e47be]68typedef struct
69{
[ce0ca7]70  int (*iiAddCproc)(const char *libname, const char *procname, BOOLEAN pstatic,
[46e47be]71                    BOOLEAN(*func)(leftv res, leftv v));
[85e68dd]72  int (*iiArithAddCmd)(const char *szName, short nAlias, short nTokval,
[46e47be]73                       short nToktype, short nPos);
74
75} SModulFunctions;
76
77
[a3f0fea]78EXTERN_VAR idhdl      currRingHdl;
[801d2b]79/* ================================================================== */
80/* module support */
81typedef int (*SModulFunc_t)(SModulFunctions*);
[e2202ee]82BOOLEAN load_builtin(const char *newlib, BOOLEAN autoexport, SModulFunc_t init);
[36d920]83void module_help_main(const char *newlib,const char *help);
84void module_help_proc(const char *newlib,const char *p, const char *help);
[801d2b]85
86/* ================================================================== */
87
[eaf66f]88/*extern ring     currRing;  in ring.h */
[0e1846]89
[2e69cf]90idhdl enterid(const char * a, int lev, int t, idhdl* root, BOOLEAN init=TRUE, BOOLEAN search=TRUE);
[d2c80d]91idhdl ggetid(const char *n);
[653784]92//idhdl ggetid(const char *n, idhdl *packhdl);
[85e68dd]93void  killid(const char * a, idhdl * i);
[b4f04e]94void killhdl(idhdl h, package prooti=currPack);
[16acb0]95void  killhdl2(idhdl h, idhdl * ih, ring r);
[0e1846]96lists ipNameList(idhdl root);
[d5add65]97lists ipNameListLev(idhdl root, int lev);
[0e1846]98void  ipMoveId(idhdl h);
[0a3ddd]99BOOLEAN checkPackage(package pack);
[a3bc95e]100idhdl packFindHdl(package r);
[6f25ae]101poly jj_NormalizeQRingP(poly p, const ring r);
[6c4db17]102void jjNormalizeQRingId(leftv I);
[6f25ae]103#define jjNormalizeQRingP(p) jj_NormalizeQRingP(p,currRing)
[5816c3]104void *idrecDataInit(int t);
[0e1846]105
[bdae9a]106#define FLAG_STD        0 // is a SB wrt. currRing ("isSB")
107#define FLAG_TWOSTD     3 // is a 2-sided SB wrt. currRing (" 2SB")
108#define FLAG_QRING      4 // is normalized wrt. qring ("qringNF")
109#define FLAG_QRING_DEF  5 // is a qring to be defined
110#define FLAG_OTHER_RING 6 // mark newstruct parts as "write-only"
[2c5e69]111#define FLAG_RING       7 // mark newstruct parts as "ring dep."
[0e1846]112#define hasFlag(A,F) Sy_inset((F),(A)->flag)
113#define setFlag(A,F) (A)->flag|=Sy_bit(F)
114#define resetFlag(A,F) (A)->flag&=~Sy_bit(F)
115void ipListFlag(idhdl h);
[b7b08c]116
[eaf66f]117
118#define IDNEXT(a)    ((a)->next)
119#define IDTYP(a)     ((a)->typ)
120#define IDFLAG(a)    ((a)->flag)
121#define IDLEV(a)     ((a)->lev)
122#define IDID(a)      ((a)->id)
123#define IDATTR(a)    ((a)->attribute)
124
125#define IDINT(a)    ((int)(long)((a)->data.ustring))
126#define IDDATA(a)   ((a)->data.ustring)
127#define IDRING(a)   ((a)->data.uring)
128#define IDINTVEC(a) ((a)->data.iv)
[9127cc]129#define IDBIMAT(a)  ((a)->data.bim)
[eaf66f]130#define IDPOLY(a)   ((a)->data.p)
131#define IDBIGINT(a) ((a)->data.n)
132#define IDNUMBER(a) ((a)->data.n)
133#define IDIDEAL(a)  ((a)->data.uideal)
134#define IDMATRIX(a) ((a)->data.umatrix)
135#define IDMAP(a)    ((a)->data.umap)
136#define IDSTRING(a) ((a)->data.ustring)
137#define IDLIST(a)   ((a)->data.l)
138#define IDLINK(a)   ((a)->data.li)
139#define IDPACKAGE(a) ((a)->data.pack)
140#define IDPROC(a)   ((a)->data.pinf)
141
[a3f0fea]142EXTERN_VAR omBin sip_command_bin;
143EXTERN_VAR omBin sip_package_bin;
144EXTERN_VAR omBin idrec_bin;
145EXTERN_VAR omBin sleftv_bin;
[db45a2]146
[a3f0fea]147EXTERN_VAR coeffs coeffs_BIGINT;
[db45a2]148
[cd73d1]149/* options */
150struct soptionStruct
151{
152  const char * name;
153  unsigned   setval;
154  unsigned   resetval;
155};
156
157extern const struct soptionStruct optionStruct[];
158extern const struct soptionStruct verboseStruct[];
159
[0e1846]160#endif
[47faf56]161
162
Note: See TracBrowser for help on using the repository browser.