source: git/libpolys/polys/monomials/monomials.h @ de0a2a

spielwiese
Last change on this file since de0a2a was b1ca999, checked in by Oleksandr Motsak <motsak@…>, 13 years ago
FIX: p_SetRingOfLeftv is not in libpolys!!!
  • Property mode set to 100644
File size: 8.6 KB
Line 
1#ifndef MONOMIALS_H
2#define MONOMIALS_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id$ */
7/*
8* ABSTRACT
9*/
10
11#include <omalloc/omalloc.h>
12#include <coeffs/coeffs.h>
13#include <polys/monomials/ring.h>
14
15/***************************************************************
16 *
17 * definition of the poly structure and its fields
18 *
19 ***************************************************************/
20
21struct spolyrec;
22typedef struct spolyrec *          poly;
23struct  spolyrec
24{
25  poly      next;           // next needs to be the first field
26  number    coef;           // and coef the second --- do not change this !!!
27  unsigned long exp[1];     // make sure that exp is aligned
28};
29
30/***************************************************************
31 *
32 * prepare debugging
33 *
34 ***************************************************************/
35
36#if defined(PDEBUG)
37
38extern BOOLEAN dPolyReportError(poly p, ring r, const char* fmt, ...);
39
40// macros for checking of polys
41#define pAssumeReturn(cond)                                  \
42do                                                          \
43{                                                           \
44  if (! (cond))                                             \
45  {                                                         \
46    dPolyReportError(NULL, NULL, "pAssume violation of: %s", \
47                 #cond);                                    \
48    return FALSE;                                           \
49  }                                                         \
50}                                                           \
51while (0)
52
53#define pAssume(cond)                                        \
54do                                                          \
55{                                                           \
56  if (! (cond))                                             \
57  {                                                         \
58    dPolyReportError(NULL, NULL, "pAssume violation of: %s", \
59                 #cond);                                    \
60  }                                                         \
61}                                                           \
62while (0)
63
64#define _pPolyAssumeReturn(cond, p, r)                       \
65do                                                          \
66{                                                           \
67  if (! (cond))                                             \
68  {                                                         \
69    dPolyReportError(p, r, "pPolyAssume violation of: %s",   \
70                 #cond);                                    \
71    return FALSE;                                           \
72  }                                                         \
73}                                                           \
74while (0)
75
76#define _pPolyAssume(cond,p,r)                                   \
77do                                                              \
78{                                                               \
79  if (! (cond))                                                 \
80  {                                                             \
81    dPolyReportError(p, r, "pPolyAssume violation of: %s",    \
82                 #cond);                                        \
83  }                                                             \
84}                                                               \
85while (0)
86
87#define _pPolyAssumeReturnMsg(cond, msg, p, r)   \
88do                                              \
89{                                               \
90  if (! (cond))                                 \
91  {                                             \
92    dPolyReportError(p, r, "%s ",  msg);        \
93    return FALSE;                               \
94  }                                             \
95}                                               \
96while (0)
97
98#define pPolyAssume(cond)        _pPolyAssume(cond, p, r)
99#define pPolyAssumeReturn(cond)  _pPolyAssumeReturn(cond, p, r)
100#define pPolyAssumeReturnMsg(cond, msg)  _pPolyAssumeReturnMsg(cond, msg, p, r)
101
102#define pFalseReturn(cond)  do {if (! (cond)) return FALSE;} while (0)
103#if (OM_TRACK > 2) && defined(OM_TRACK_CUSTOM)
104#define p_SetRingOfLm(p, r) omSetCustomOfAddr(p, r)
105//void p_SetRingOfLeftv(leftv l, ring r);
106#else
107#define p_SetRingOfLm(p, r) ((void)0)
108//#define p_SetRingOfLeftv(l, r) ((void)0)
109#endif
110
111#else // ! defined(PDEBUG)
112#define pFalseReturn(cond)           ((void)0)
113#define pAssume(cond)                ((void)0)
114#define pPolyAssume(cond)            ((void)0)
115#define _pPolyAssume(cond, p,r)      ((void)0)
116#define pAssumeReturn(cond)          ((void)0)
117#define pPolyAssumeReturn(cond)      ((void)0)
118#define _pPolyAssumeReturn(cond,p,r) ((void)0)
119#define p_SetRingOfLm(p, r)          ((void)0)
120//#define p_SetRingOfLeftv(l, r)       ((void)0)
121#endif // defined(PDEBUG)
122
123#if PDEBUG >= 1
124#define pAssume1             pAssume
125#define pPolyAssume1         pPolyAssume
126#define _pPolyAssume1        _pPolyAssume
127#define pAssumeReturn1       pAssumeReturn
128#define pPolyAssumeReturn1   pPolyAssumeReturn
129#define _pPolyAssumeReturn1  _pPolyAssumeReturn
130#define p_LmCheckPolyRing1    p_LmCheckPolyRing
131#define p_CheckRing1        p_CheckRing
132#define pIfThen1          pIfThen
133#else
134#define pAssume1(cond)               ((void)0)
135#define pPolyAssume1(cond)           ((void)0)
136#define _pPolyAssume1(cond,p,r)      ((void)0)
137#define pAssumeReturn1(cond)         ((void)0)
138#define pPolyAssumeReturn1(cond)     ((void)0)
139#define _pPolyAssumeReturn1(cond,p,r)((void)0)
140#define p_LmCheckPolyRing1(p,r)       ((void)0)
141#define p_CheckRing1(r)             ((void)0)
142#define pIfThen1(cond, check)     ((void)0)
143#endif // PDEBUG >= 1
144
145#if PDEBUG >= 2
146#define pAssume2             pAssume
147#define pPolyAssume2         pPolyAssume
148#define _pPolyAssume2        _pPolyAssume
149#define pAssumeReturn2       pAssumeReturn
150#define pPolyAssumeReturn2   pPolyAssumeReturn
151#define _pPolyAssumeReturn2  _pPolyAssumeReturn
152#define p_LmCheckPolyRing2    p_LmCheckPolyRing
153#define p_CheckRing2        p_CheckRing
154#define pIfThen2          pIfThen
155#else
156#define pAssume2(cond)               ((void)0)
157#define pPolyAssume2(cond)           ((void)0)
158#define _pPolyAssume2(cond,p,r)      ((void)0)
159#define pAssumeReturn2(cond)         ((void)0)
160#define pPolyAssumeReturn2(cond)     ((void)0)
161#define _pPolyAssumeReturn2(cond,p,r)((void)0)
162#define p_LmCheckPolyRing2(p,r)       ((void)0)
163#define p_CheckRing2(r)             ((void)0)
164#define pIfThen2(cond, check)     ((void)0)
165#endif // PDEBUG >= 2
166
167/***************************************************************
168 *
169 * Macros for low-level allocation
170 *
171 ***************************************************************/
172#ifdef PDEBUG
173#define p_AllocBin(p, bin, r)                   \
174do                                              \
175{                                               \
176  omTypeAllocBin(poly, p, bin);                 \
177  p_SetRingOfLm(p, r);                        \
178}                                               \
179while (0)
180#define p_FreeBinAddr(p, r) p_LmFree(p, r)
181#else
182#define p_AllocBin(p, bin, r)   omTypeAllocBin(poly, p, bin)
183#define p_FreeBinAddr(p, r)     omFreeBinAddr(p)
184#endif
185
186/***************************************************************
187 *
188 * Purpose:    low-level and macro definition of polys
189 *
190 * If you touch anything here, you better know what you are doing.
191 * What is here should not be used directly from other routines -- the
192 * encapsulations in polys.h should be used, instead.
193 *
194 ***************************************************************/
195
196#define POLYSIZE (sizeof(poly) + sizeof(number))
197#define POLYSIZEW (POLYSIZE / sizeof(long))
198#if SIZEOF_LONG == 8
199#define POLY_NEGWEIGHT_OFFSET (((long)0x80000000) << 32)
200#else
201#define POLY_NEGWEIGHT_OFFSET ((long)0x80000000)
202#endif
203
204
205/***************************************************************
206 *
207 * Macros for low-level allocation
208 *
209 ***************************************************************/
210#ifdef PDEBUG
211#define p_AllocBin(p, bin, r)                   \
212do                                              \
213{                                               \
214  omTypeAllocBin(poly, p, bin);                 \
215  p_SetRingOfLm(p, r);                        \
216}                                               \
217while (0)
218#define p_FreeBinAddr(p, r) p_LmFree(p, r)
219#else
220#define p_AllocBin(p, bin, r)   omTypeAllocBin(poly, p, bin)
221#define p_FreeBinAddr(p, r)     omFreeBinAddr(p)
222#endif
223
224/***************************************************************
225 *
226 * Misc macros
227 *
228 ***************************************************************/
229#define rRing_has_Comp(r)   (r->pCompIndex >= 0)
230
231#endif
Note: See TracBrowser for help on using the repository browser.