source: git/coeffs/coeffs.h @ 87cb4d5

spielwiese
Last change on this file since 87cb4d5 was 87cb4d5, checked in by Oleksandr Motsak <motsak@…>, 14 years ago
Trying to compile coeffs by fooling it. Undefine _TRY later on!
  • Property mode set to 100644
File size: 4.9 KB
Line 
1#ifndef COEFFS_H
2#define COEFFS_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id$ */
7/*
8* ABSTRACT
9*/
10
11#define TRUE 1
12#define FALSE 0
13
14#ifndef NULL
15#define NULL        (0)
16#endif
17
18#if (SIZEOF_LONG == 8)
19typedef int BOOLEAN;
20/* testet on x86_64, gcc 3.4.6: 2 % */
21/* testet on IA64, gcc 3.4.6: 1 % */
22#else
23/* testet on athlon, gcc 2.95.4: 1 % */
24typedef short BOOLEAN;
25#endif
26#define loop for(;;)
27
28#if defined(SI_CPU_I386) || defined(SI_CPU_X86_64)
29  // the following settings seems to be better on i386 and x86_64 processors
30  // define if a*b is with mod instead of tables
31  #define HAVE_MULT_MOD
32  // #define HAVE_GENERIC_ADD
33  // #ifdef HAVE_MULT_MOD
34  // #define HAVE_DIV_MOD
35  // #endif
36#elif defined(SI_CPU_IA64)
37  // the following settings seems to be better on itanium processors
38  // #define HAVE_MULT_MOD
39  #define HAVE_GENERIC_ADD
40  // #ifdef HAVE_MULT_MOD
41  // #define HAVE_DIV_MOD
42  // #endif
43#elif defined(SI_CPU_SPARC)
44  // #define HAVE_GENERIC_ADD
45  #define HAVE_MULT_MOD
46  #ifdef HAVE_MULT_MOD
47  #define HAVE_DIV_MOD
48  #endif
49#elif defined(SI_CPU_PPC)
50  // the following settings seems to be better on ppc processors
51  // testet on: ppc_Linux, 740/750 PowerMac G3, 512k L2 cache
52  #define HAVE_MULT_MOD
53  // #ifdef HAVE_MULT_MOD
54  // #define HAVE_DIV_MOD
55  // #endif
56#endif
57
58enum n_coeffType
59{
60  n_unknown=0,
61  n_Zp,
62  n_Q,
63  n_R,
64  n_GF,
65  n_long_R,
66  n_Zp_a,
67  n_Q_a,
68  n_long_C
69#ifdef HAVE_RINGS
70  ,n_Z,
71  n_Zm,
72  n_Zpn,
73  n_Z2n
74#endif
75};
76
77struct n_Procs_s;
78typedef struct  n_Procs_s  n_Procs_s;
79typedef struct  n_Procs_s  *coeffs;
80
81
82
83struct snumber;
84typedef struct snumber *   number;
85typedef number (*numberfunc)(number a,number b, const coeffs r);
86typedef number (*nMapFunc)(number a, const coeffs r);
87
88#define _TRY
89
90#ifdef _TRY
91typedef coeffs ring;
92
93extern ring currRing;
94#endif
95
96struct n_Procs_s
97{
98#ifdef _TRY
99  ring cf; // this
100#endif
101
102   coeffs next;
103   // the union stuff
104
105   // Zp:
106   int npPrimeM;
107   int npPminus1M;
108   #ifdef HAVE_DIV_MOD
109   unsigned short *npInvTable;
110   #endif
111   #if !defined(HAVE_DIV_MOD) || !defined(HAVE_MULT_MOD)
112   unsigned short *npExpTable;
113   unsigned short *npLogTable;
114   #endif
115   // Zp_a, Q_a
116
117   // general stuff
118   numberfunc nMult, nSub ,nAdd ,nDiv, nIntDiv, nIntMod, nExactDiv;
119   number  (*cfInit)(int i,const coeffs r);
120   number  (*nPar)(int i, const coeffs r);
121   int     (*nParDeg)(number n, const coeffs r);
122   int     (*nSize)(number n, const coeffs r);
123   int     (*n_Int)(number &n, const coeffs r);
124#ifdef HAVE_RINGS
125   int     (*nDivComp)(number a,number b);
126   BOOLEAN (*nIsUnit)(number a);
127   number  (*nGetUnit)(number a);
128   number  (*nExtGcd)(number a, number b, number *s, number *t);
129#endif
130   number  (*nNeg)(number a, const coeffs r);
131   number  (*nInvers)(number a, const coeffs r);
132   number  (*nCopy)(number a);
133   number  (*cfCopy)(number a, const coeffs r);
134   number  (*nRePart)(number a, const coeffs r);
135   number  (*nImPart)(number a, const coeffs r);
136   void    (*cfWrite)(number &a, const coeffs r);
137   const char *  (*nRead)(const char * s, number * a, const coeffs r);
138   void    (*nNormalize)(number &a, const coeffs r);
139   BOOLEAN (*nGreater)(number a,number b, const coeffs r),
140#ifdef HAVE_RINGS
141           (*nDivBy)(number a, number b),
142#endif
143           (*nEqual)(number a,number b, const coeffs r),
144           (*nIsZero)(number a, const coeffs r),
145           (*nIsOne)(number a, const coeffs r),
146           (*nIsMOne)(number a, const coeffs r),
147           (*nGreaterZero)(number a, const coeffs r);
148   void    (*nPower)(number a, int i, number * result, const coeffs r);
149   number  (*cfGetDenom)(number &n, const coeffs r);
150   number  (*cfGetNumerator)(number &n, const coeffs r);
151   number  (*nGcd)(number a, number b, const coeffs r);
152   number  (*nLcm)(number a, number b, const coeffs r);
153   void    (*cfDelete)(number * a, const coeffs r);
154   nMapFunc (*cfSetMap)(const coeffs src, const coeffs dst);
155   char *  (*nName)(number n, const coeffs r);
156   void    (*nInpMult)(number &a, number b, const coeffs r);
157   number  (*nInit_bigint)(number i, const coeffs r);
158#ifdef LDEBUG
159   BOOLEAN (*nDBTest)(number a, const char *f,const int l);
160#endif
161
162   number nNULL; /* the 0 as constant */
163   int     char_flag;
164   int     ref;
165   n_coeffType type;
166   short   nChar;
167////-----------------------------------------
168  char**     parameter; /* names of parameters, rInit */
169  number     minpoly;  /* for Q_a/Zp_a, rInit */
170
171#ifdef HAVE_RINGS
172  unsigned int  ringtype;  /* cring = 0 => coefficient field, cring = 1 => coeffs from Z/2^m */
173  int_number    ringflaga; /* Z/(ringflag^ringflagb)=Z/nrnModul*/
174  unsigned long ringflagb;
175  unsigned long nr2mModul;  /* Z/nr2mModul */
176  int_number    nrnModul;
177#endif
178  int        ch;  /* characteristic, rInit */
179
180  short      float_len; /* additional char-flags, rInit */
181  short      float_len2; /* additional char-flags, rInit */
182
183};
184
185#define  nInternalChar(r) ((r)->ch)
186
187#endif
188
Note: See TracBrowser for help on using the repository browser.