source: git/Singular/ring.h @ 6de26a0

spielwiese
Last change on this file since 6de26a0 was 6de26a0, checked in by Hans Schönemann <hannes@…>, 24 years ago
*hannes: rField* git-svn-id: file:///usr/local/Singular/svn/trunk@3214 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 4.2 KB
Line 
1#ifndef RING_H
2#define RING_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/*
7* ABSTRACT - the interpreter related ring operations
8*/
9/* $Id: ring.h,v 1.28 1999-07-01 16:40:44 Singular Exp $ */
10
11/* includes */
12#include "structs.h"
13#include "polys-impl.h"
14
15#ifdef DRING
16void   rChangeCurrRing(ring r, BOOLEAN complete = TRUE, idhdl h = NULL);
17#else
18void   rChangeCurrRing(ring r, BOOLEAN complete = TRUE);
19#endif
20void   rSetHdl(idhdl h, BOOLEAN complete = TRUE);
21idhdl  rInit(char *s, sleftv* pn, sleftv* rv, sleftv* ord,
22  BOOLEAN isDRing);
23idhdl  rDefault(char *s);
24int    rIsRingVar(char *n);
25char * RingVar(short);
26void   rWrite(ring r);
27void   rKill(idhdl h);
28void   rKill(ring r);
29ring   rCopy(ring r);
30idhdl  rFindHdl(ring r, idhdl n, idhdl w);
31#ifdef DRING
32void rDSet();
33#endif
34void   rDInit();
35int rOrderName(char * ordername);
36char * rOrdStr(ring r);
37char * rVarStr(ring r);
38char * rCharStr(ring r);
39char * rString(ring r);
40int    rChar(ring r=currRing);
41#define rPar(r) (r->P)
42char * rParStr(ring r);
43int    rIsExtension(ring r);
44int    rIsExtension();
45int    rSum(ring r1, ring r2, ring &sum);
46BOOLEAN   rComplete(ring r, int force = 0);
47void   rUnComplete(ring r);
48int    rBlocks(ring r);
49
50#define  rInternalChar(r) ((r)->ch)
51#ifndef ABS
52#define ABS(x) ((x) < 0 ? (-(x)) : (x))
53#endif
54inline BOOLEAN rField_is_Zp(ring r=currRing)
55{ return (r->ch > 1) && (r->parameter==NULL); }
56inline BOOLEAN rField_is_Zp(ring r, int p)
57{ return (r->ch > 1 && r->ch == ABS(p) && r->parameter==NULL); }
58inline BOOLEAN rField_is_Q(ring r=currRing)
59{ return (r->ch == 0) && (r->parameter==NULL); }
60inline BOOLEAN rField_is_numeric(ring r=currRing) /* R, long R, long C */
61{ return (r->ch ==  -1); }
62inline BOOLEAN rField_is_R(ring r=currRing)
63{
64  if (rField_is_numeric(r) && (r->ch_flags == (short)0)) return TRUE;
65  return FALSE;
66}
67inline BOOLEAN rField_is_GF(ring r=currRing)
68{ return (r->ch > 1) && (r->parameter!=NULL); }
69inline BOOLEAN rField_is_Zp_a(ring r=currRing)
70{ return (r->ch < -1); }
71inline BOOLEAN rField_is_Zp_a(ring r, int p)
72{ return (r->ch < -1 ) && (-(r->ch) == ABS(p)); }
73inline BOOLEAN rField_is_Q_a(ring r=currRing)
74{ return (r->ch == 1); }
75inline BOOLEAN rField_is_long_R(ring r=currRing)
76{
77  if (rField_is_numeric(r) && (r->ch_flags != (short)0))
78    return (r->parameter==NULL);
79  return FALSE;
80}
81inline BOOLEAN rField_is_long_C(ring r=currRing)
82{
83  if (rField_is_numeric(r) && (r->ch_flags != (short)0))
84    return (r->parameter!=NULL);
85  return FALSE;
86}
87inline BOOLEAN rField_has_simple_inverse(ring r=currRing)
88{ return (r->ch>1) || (r->ch== -1); } /* Z/p, GF(p,n), R, long_R, long_C*/
89inline BOOLEAN rField_is_Extension(ring r=currRing)
90{ return (rField_is_Q_a(r)) || (rField_is_Zp_a(r)); } /* Z/p(a) and Q(a)*/
91
92enum
93{
94  ringorder_no = 0,
95  ringorder_a,
96  ringorder_c,
97  ringorder_C,
98  ringorder_M,
99  ringorder_lp,
100  ringorder_dp,
101  ringorder_Dp,
102  ringorder_wp,
103  ringorder_Wp,
104  ringorder_ls,
105  ringorder_ds,
106  ringorder_Ds,
107  ringorder_ws,
108  ringorder_Ws,
109  ringorder_unspec
110};
111
112typedef enum rOrderType_t
113{
114  rOrderType_General = 0, // non-simple ordering as specified by currRing
115  rOrderType_CompExp,     // simple ordering, component has priority
116  rOrderType_ExpComp,     // simple ordering, exponent vector has priority
117                          // component not compatible with exp-vector order
118  rOrderType_Exp,         // simple ordering, exponent vector has priority
119                          // component is compatible with exp-vector order
120  rOrderType_Syz,         // syzygy ordering
121  rOrderType_Schreyer,     // Schreyer ordering
122  rOrderType_Syz2dpc,     // syzcomp2dpc
123  rOrderType_ExpNoComp    // simple ordering, differences in component are
124                          // not considered
125} rOrderType_t;
126
127BOOLEAN rHasSimpleOrder(ring r);
128// returns TRUE, if simple lp or ls ordering
129BOOLEAN rHasSimpleLexOrder(ring r);
130rOrderType_t    rGetOrderType(ring r);
131BOOLEAN rIsPolyVar(int i); /* returns TRUE if var(i) belongs to p-block */
132
133void rOptimizeOrder(ring r);
134
135#ifdef RDEBUG
136extern short rNumber; /* current ring id (r->no) */
137#define rTest(r)    rDBTest(r, __FILE__, __LINE__)
138extern BOOLEAN rDBTest(ring r, char* fn, int l);
139#else
140#define rTest(r)
141#endif
142
143#endif
144
Note: See TracBrowser for help on using the repository browser.