1 #ifndef NUMBERS_H
2 #define NUMBERS_H
3 /****************************************
4 *  Computer Algebra System SINGULAR     *
5 ****************************************/
6 /*
7 * ABSTRACT: compatility interface to coeffs
8 */
9 #include "coeffs/coeffs.h"
10 
11 // the access methods
12 //
13 // the routines w.r.t. currRing:
14 // (should only be used in the context of currRing, i.e. in t
15 #define nCopy(n)          n_Copy(n, currRing->cf)
16 #define nDelete(n)        n_Delete(n, currRing->cf)
17 #define nMult(n1, n2)     n_Mult(n1, n2, currRing->cf)
18 #define nAdd(n1, n2)      n_Add(n1, n2, currRing->cf)
19 #define nIsZero(n)        n_IsZero(n, currRing->cf)
20 #define nEqual(n1, n2)    n_Equal(n1, n2, currRing->cf)
21 #define nInpNeg(n)        n_InpNeg(n, currRing->cf)
22 #define nSub(n1, n2)      n_Sub(n1, n2, currRing->cf)
23 #define nGetChar()        n_GetChar(currRing->cf)
24 #define nInit(i)          n_Init(i, currRing->cf)
25 #define nIsOne(n)         n_IsOne(n, currRing->cf)
26 #define nIsMOne(n)        n_IsMOne(n, currRing->cf)
27 #define nGreaterZero(n)   n_GreaterZero(n, currRing->cf)
28 #define nGreater(a, b)    n_Greater (a,b,currRing->cf)
29 #define nWrite(n)         n_Write(n, currRing->cf, rShortOut(currRing))
30 #define nNormalize(n)     n_Normalize(n,currRing->cf)
31 #define nGcd(a,b)         n_Gcd(a,b,currRing->cf)
32 #define nDiv(a, b)        n_Div(a,b,currRing->cf)
33 #define nInvers(a)        n_Invers(a,currRing->cf)
34 #define nExactDiv(a, b)   n_ExactDiv(a,b,currRing->cf)
35 #define nTest(a)          n_Test(a,currRing->cf)
36 
37 #define nInpMult(a, b)    n_InpMult(a,b,currRing->cf)
38 #define nPower(a, b, res) n_Power(a,b,res,currRing->cf)
39 #define nSize(n)          n_Size(n,currRing->cf)
40 #define nGetDenom(N)      n_GetDenom((N),currRing->cf)
41 #define nGetNumerator(N)  n_GetNumerator((N),currRing->cf)
42 
43 #define nSetMap(R)        n_SetMap(R,currRing->cf)
44 
45 /// only for debug, over any initalized currRing
46 #define nPrint(a)         n_Print(a,currRing->cf)
47 
48 
49 
50 
51 // --------------------------------------------------------------
52 // internal to coeffs, but public for all realizations
53 
54 #if SIZEOF_DOUBE == SIZEOF_LONG
55 #define SHORT_REAL_LENGTH 16 // use double for real <= 15 digits
56 #else
57 #define SHORT_REAL_LENGTH 6 // use float for real <= 6 digits
58 #endif
59 
60 /* the dummy routines: */
61 // void nDummy1(number* d);
62 // void ndDelete(number* d, const coeffs r);
63 number ndGcd(number a, number b, const coeffs);
64 // number ndCopy(number a, const coeffs r);
65 // int ndSize(number a, const coeffs r);
66 // number ndGetDenom(number &n, const coeffs r);
67 // number ndGetNumerator(number &a,const coeffs r);
68 // number ndReturn0(number n, const coeffs r);
69 // number ndIntMod(number a, number b, const coeffs r);
70 
71 // void   ndInpMult(number &a, number b, const coeffs r);
72 // void   ndInpAdd(number &a, number b, const coeffs r);
73 
74 // void ndKillChar(coeffs);
75 
76 // number  ndInit_bigint(number i, const coeffs dummy, const coeffs dst);
77 
78 // BOOLEAN ndCoeffIsEqual(const coeffs r, n_coeffType n, void * parameter);
79 CanonicalForm ndConvSingNFactoryN( number, BOOLEAN /*setChar*/, const coeffs);
80 
81 /// Test whether a is a zero divisor in r
82 /// i.e. not coprime with char. of r
83 /// very inefficient implementation:
84 /// should ONLY be used for debug stuff /tests
85 BOOLEAN n_IsZeroDivisor( number a, const coeffs r);
86 
87 const char* const nDivBy0 = "div by 0";
88 
89 // dummy routines
90 void   ndNormalize(number&, const coeffs); // nNormalize...
91 
92 /// initialize an object of type coeff, return FALSE in case of success
93 typedef BOOLEAN (*cfInitCharProc)(coeffs, void *);
94 n_coeffType nRegister(n_coeffType n, cfInitCharProc p);
95 
96 /// initialize an object of type coeffs by its name, return NULL otherwise
97 typedef coeffs (*cfInitCfByNameProc)(char *s,n_coeffType n);
98 void nRegisterCfByName(cfInitCfByNameProc p,n_coeffType n);
99 
100 /// find an existing coeff by its "CoeffName"
101 coeffs nFindCoeffByName(char *n);
102 
103 /// divide by the first (leading) number and return it, i.e. make monic
104 // void ndClearContent(ICoeffsEnumerator& numberCollectionEnumerator, number& c, const coeffs r);
105 
106 /// does nothing (just returns a dummy one number)
107 // void ndClearDenominators(ICoeffsEnumerator& numberCollectionEnumerator, number& d, const coeffs r);
108 
109 /// helper routine: read an int from a string (mod m), return a pointer to the rest
110 char* nEati(char *s, int *i, int m);
111 
112 /// extracts a long integer from s, returns the rest
113 char * nEatLong(char *s, mpz_ptr i);
114 #endif
115