source: git/Singular/polys-comp.h @ 21f260

spielwiese
Last change on this file since 21f260 was 21f260, checked in by Olaf Bachmann <obachman@…>, 26 years ago
* small bug-fixes for COMP_NO_EXP_VECTOR_OPS git-svn-id: file:///usr/local/Singular/svn/trunk@1037 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 24.2 KB
Line 
1#ifndef POLYS_COMP_H
2#define POLYS_COMP_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: polys-comp.h,v 1.4 1998-01-17 17:49:24 obachman Exp $ */
7
8/***************************************************************
9 *
10 * File:       polys-comp.h
11 * Purpose:    low-level monomial comparison routines
12 *
13 ***************************************************************/
14
15#include "polys-impl.h"
16
17#ifdef COMP_FAST
18
19 
20
21#ifdef WORDS_BIGENDIAN
22#ifndef COMP_NO_EXP_VECTOR_OPS
23#define _pMonCmp_1(p1, p2, d, actionD, actionE)              \
24do                                                          \
25{                                                           \
26  d = *((long*) &(p1->exp[0])) - *((long*) &(p2->exp[0]));  \
27  if (d) actionD;                                           \
28  actionE;                                                  \
29}                                                           \
30while(0)
31 
32#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)            \
33do                                                          \
34{                                                           \
35  d = *((long*) &(p1->exp[0])) - *((long*) &(p2->exp[0]));  \
36  if (d)                                                    \
37  {                                                         \
38    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
39      d = -d;                                               \
40    actionD;                                                \
41  }                                                         \
42  actionE;                                                  \
43}                                                           \
44while(0)
45
46#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
47do                                              \
48{                                               \
49  const long* s1 = (long*) &(p1->exp[0]);             \
50  const long* s2 = (long*) &(p2->exp[0]);             \
51  d = *s1 - *s2;                                \
52  if (d) actionD;                               \
53  d = *(s1 + 1) - *(s2 + 1);                    \
54  if (d) actionD;                               \
55  actionE;                                      \
56}                                               \
57while(0)
58 
59#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)        \
60do                                                      \
61{                                                       \
62  const long* s1 = (long*) &(p1->exp[0]);                     \
63  const long* s2 = (long*) &(p2->exp[0]);                     \
64  d = *s1 - *s2;                                        \
65  if (d) actionD;                                       \
66  d = *(s1 + 1) - *(s2 + 1);                            \
67  if (d)                                                \
68  {                                                     \
69    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)    \
70      d = -d;                                           \
71    actionD;                                            \
72  }                                                     \
73  actionE;                                              \
74}                                                       \
75while(0)
76 
77#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
78do                                                      \
79{                                                       \
80  const long* s1 = (long*) &(p1->exp[0]);                     \
81  const long* s2 = (long*) &(p2->exp[0]);                     \
82  const long* const lb = s1 + length;                               \
83                                                        \
84  for (;;)                                              \
85  {                                                     \
86    d = *s1 - *s2;                                      \
87    if (d) actionD;                                     \
88    s1++;                                               \
89    s2++;                                               \
90    d = *s1 - *s2;                                      \
91    if (d) actionD;                                     \
92    s1++;                                               \
93    if (s1 == lb) actionE;                              \
94    s2++;                                               \
95  }                                                     \
96}                                                       \
97while(0)
98
99#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE)   \
100do                                                          \
101{                                                           \
102  const long* s1 = (long*) &(p1->exp[0]);                         \
103  const long* s2 = (long*) &(p2->exp[0]);                         \
104  const long* const lb = s1 + length;                                   \
105                                                            \
106  for (;;)                                                  \
107  {                                                         \
108    d = *s1 - *s2;                                          \
109    if (d) actionD;                                         \
110    s1++;                                                   \
111    if (s1 == lb) actionE;                                  \
112    s2++;                                                   \
113    d = *s1 - *s2;                                          \
114    if (d) actionD;                                         \
115    s1++;                                                   \
116    s2++;                                                   \
117  }                                                         \
118}                                                           \
119while(0)
120 
121#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)  \
122do                                                          \
123{                                                           \
124  const long* s1 = (long*) &(p1->exp[0]);                   \
125  const long* s2 = (long*) &(p2->exp[0]);                   \
126  const long* const lb = s1 + length-1;                     \
127                                                            \
128  for (;;)                                                  \
129  {                                                         \
130    d = *s1 - *s2;                                          \
131    if (d) actionD;                                         \
132    s1++;                                                   \
133    if (s1 == lb) break;                                    \
134    s2++;                                                   \
135    d = *s1 - *s2;                                          \
136    if (d) actionD;                                         \
137    s1++;                                                   \
138    s2++;                                                   \
139  }                                                         \
140                                                            \
141  d = *s1 - *(s2 + 1);                                      \
142  if (d)                                                    \
143  {                                                         \
144    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
145      d = -d;                                               \
146    actionD;                                                \
147  }                                                         \
148  actionE;                                                  \
149}                                                           \
150while(0)
151 
152#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE)    \
153do                                                              \
154{                                                               \
155  const long* s1 = (long*) &(p1->exp[0]);                       \
156  const long* s2 = (long*) &(p2->exp[0]);                       \
157  const long* const lb = s1 + length      -1;                   \
158                                                                \
159  for (;;)                                                      \
160  {                                                             \
161    d = *s1 - *s2;                                              \
162    if (d) actionD;                                             \
163    s1++;                                                       \
164    s2++;                                                       \
165    d = *s1 - *s2;                                              \
166    if (d) actionD;                                             \
167    s1++;                                                       \
168    if (s1 == lb) break;                                        \
169    s2++;                                                       \
170  }                                                             \
171                                                                \
172  d = *s1 - *(s2 + 1);                                          \
173  if (d)                                                        \
174  {                                                             \
175    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)            \
176      d = -d;                                                   \
177    actionD;                                                    \
178  }                                                             \
179  actionE;                                                      \
180}                                                               \
181while(0)
182
183#else // COMP_NO_EXP_VECTOR_OPS
184
185#define _pMonCmp(p1, p2, d, actionD, actionE)   \
186do                                              \
187{                                               \
188  Exponent_pt e1 = &(p1->exp[0]);         \
189  Exponent_pt e2 = &(p2->exp[0]);         \
190  const Exponent_pt ub = e1 + pVariables; \
191                                                \
192  for (;;)                                      \
193  {                                             \
194    d = *e1 - *e2;                              \
195    if (d) actionD;                             \
196    e1++;                                       \
197    if (e1 == ub)                               \
198    {                                           \
199      d = pGetComp(p1) - pGetComp(p2);          \
200      if (d) actionD;                           \
201      actionE;                                  \
202    }                                           \
203    e2++;                                       \
204  }                                             \
205}                                               \
206while(0)
207
208#define _pMonCmp_c(p1, p2, d, actionD, actionE) \
209do                                              \
210{                                               \
211  Exponent_pt e1 = &(p1->exp[0]);         \
212  Exponent_pt e2 = &(p2->exp[0]);         \
213  const Exponent_pt ub = e1 + pVariables; \
214                                                \
215  for (;;)                                      \
216  {                                             \
217    d = *e1 - *e2;                              \
218    if (d) actionD;                             \
219    e1++;                                       \
220    if (e1 == ub)                               \
221    {                                           \
222      d = pGetComp(p2) - pGetComp(p1);          \
223      if (d) actionD;                           \
224      actionE;                                  \
225    }                                           \
226    e2++;                                       \
227  }                                             \
228}                                               \
229while(0)
230
231#define _pMonCmp_1(p1, p2, d, actionD, actionE)  \
232  _pMonCmp(p1, p2, d, actionD, actionE)
233
234#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)  \
235  _pMonCmp_c(p1, p2, d, actionD, actionE)
236 
237#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
238  _pMonCmp(p1, p2, d, actionD, actionE)
239
240#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)  \
241  _pMonCmp_c(p1, p2, d, actionD, actionE)
242 
243#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
244  _pMonCmp(p1, p2, d, actionD, actionE)
245
246#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE) \
247  _pMonCmp(p1, p2, d, actionD, actionE)
248
249#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
250  _pMonCmp_c(p1, p2, d, actionD, actionE)
251
252#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
253  _pMonCmp_c(p1, p2, d, actionD, actionE)
254
255#endif // COMP_NO_EXP_VECTOR_OPS
256
257#else //  ! WORDS_BIGENDIAN
258
259#ifndef COMP_NO_EXP_VECTOR_OPS 
260#define _pMonCmp_1(p1, p2, d, actionD, actionE)                              \
261do                                                                          \
262{                                                                           \
263  d = *(((long*) p1) + pMonomSizeW-1) - *(((long*) p2)  + pMonomSizeW-1);   \
264  if (d) actionD;                                                           \
265  actionE;                                                                  \
266}                                                                           \
267while(0)
268 
269#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)                            \
270do                                                                          \
271{                                                                           \
272  d = *(((long*) p1) + pMonomSizeW-1) - *(((long*) p2)  + pMonomSizeW-1);   \
273  if (d)                                                                    \
274  {                                                                         \
275    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)                        \
276      d = -d;                                                               \
277    actionD;                                                                \
278  }                                                                         \
279  actionE;                                                                  \
280}                                                                           \
281while(0)
282
283#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
284do                                              \
285{                                               \
286  const long* s1 = ((long*) p1) + pMonomSizeW-1;      \
287  const long* s2 = ((long*) p2)  + pMonomSizeW-1;      \
288  d = *s1 - *s2;                                \
289  if (d) actionD;                               \
290  d = *(s1 - 1) - *(s2 - 1);                    \
291  if (d) actionD;                               \
292  actionE;                                      \
293}                                               \
294while(0)
295 
296#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)        \
297do                                                      \
298{                                                       \
299  const long* s1 = ((long*) p1) + pMonomSizeW-1;              \
300  const long* s2 = ((long*) p2)  + pMonomSizeW-1;             \
301  d = *s1 - *s2;                                        \
302  if (d) actionD;                                       \
303  d = *s1 - *s2;                                        \
304  if (d) actionD;                                       \
305  d = *(s1 -1) - *(s2 -1);                              \
306  if (d)                                                \
307  {                                                     \
308    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)    \
309      d = -d;                                           \
310    actionD;                                            \
311  }                                                     \
312  actionE;                                              \
313}                                                       \
314while(0)
315 
316#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
317do                                                      \
318{                                                       \
319  const long* s1 = ((long*) p1) + pMonomSizeW-1;              \
320  const long* s2 = ((long*) p2)  + pMonomSizeW-1;             \
321  const long* const lb = s1 - length;                                \
322  for (;;)                                              \
323  {                                                     \
324    d = *s1 - *s2;                                      \
325    if (d) actionD;                                     \
326    s1--;                                               \
327    s2--;                                               \
328    d = *s1 - *s2;                                      \
329    if (d) actionD;                                     \
330    s1--;                                               \
331    if (s1 == lb) actionE;                              \
332    s2--;                                               \
333  }                                                     \
334}                                                       \
335while(0)
336
337#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE)   \
338do                                                          \
339{                                                           \
340  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
341  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
342  const long* const lb = s1 - length;                                    \
343                                                            \
344  for (;;)                                                  \
345  {                                                         \
346    d = *s1 - *s2;                                          \
347    if (d) actionD;                                         \
348    s1--;                                                   \
349    if (s1 == lb) actionE;                                  \
350    s2--;                                                   \
351    d = *s1 - *s2;                                          \
352    if (d) actionD;                                         \
353    s1--;                                                   \
354    s2--;                                                   \
355  }                                                         \
356}                                                           \
357while(0)
358 
359#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
360do                                                          \
361{                                                           \
362  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
363  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
364  const long* const lb = s1 - length +1;                                 \
365                                                            \
366  for (;;)                                                  \
367  {                                                         \
368    d = *s1 - *s2;                                          \
369    if (d) actionD;                                         \
370    s1--;                                                   \
371    if (s1 == lb) break;                                    \
372    s2--;                                                   \
373    d = *s1 - *s2;                                          \
374    if (d) actionD;                                         \
375    s1--;                                                   \
376    s2--;                                                   \
377  }                                                         \
378                                                            \
379  d = *s1 - *(s2 - 1);                                      \
380  if (d)                                                    \
381  {                                                         \
382    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
383      d = -d;                                               \
384    actionD;                                                \
385  }                                                         \
386  actionE;                                                  \
387}                                                           \
388while(0)
389 
390#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
391do                                                          \
392{                                                           \
393  const long* s1 = ((long*) p1) + pMonomSizeW-1;                  \
394  const long* s2 = ((long*) p2)  + pMonomSizeW-1;                 \
395  const long* const lb = s1 - length +1;                                 \
396                                                            \
397  for (;;)                                                  \
398  {                                                         \
399    d = *s1 - *s2;                                          \
400    if (d) actionD;                                         \
401    s1--;                                                   \
402    s2--;                                                   \
403    d = *s1 - *s2;                                          \
404    if (d) actionD;                                         \
405    s1--;                                                   \
406    if (s1 == lb) break;                                    \
407    s2--;                                                   \
408  }                                                         \
409                                                            \
410  d = *s1 - *(s2 - 1);                                      \
411  if (d)                                                    \
412  {                                                         \
413    if (((long) (pGetComp(p1) - pGetComp(p2))) == d)        \
414      d = -d;                                               \
415    actionD;                                                \
416  }                                                         \
417  actionE;                                                  \
418}                                                           \
419while(0)
420
421#else // COMP_NO_EXP_VECTOR_OPS
422
423#define _pMonCmp(p1, p2, d, actionD, actionE)   \
424do                                              \
425{                                               \
426  Exponent_pt e1 = &(p1->exp[pVarHighIndex]);   \
427  Exponent_pt e2 = &(p2->exp[pVarHighIndex]);   \
428  const Exponent_pt ub = e1 - pVariables;       \
429                                                \
430  for (;;)                                      \
431  {                                             \
432    d = *e1 - *e2;                              \
433    if (d) actionD;                             \
434    e1--;                                       \
435    if (e1 == ub)                               \
436    {                                           \
437      d = pGetComp(p1) - pGetComp(p2);          \
438      if (d) actionD;                           \
439      actionE;                                  \
440    }                                           \
441    e2--;                                       \
442  }                                             \
443}                                               \
444while(0)
445
446#define _pMonCmp_c(p1, p2, d, actionD, actionE) \
447do                                              \
448{                                               \
449  Exponent_pt e1 = &(p1->exp[pVarHighIndex]);   \
450  Exponent_pt e2 = &(p2->exp[pVarHighIndex]);   \
451  const Exponent_pt ub = e1 - pVariables;       \
452                                                \
453  for (;;)                                      \
454  {                                             \
455    d = *e1 - *e2;                              \
456    if (d) actionD;                             \
457    e1--;                                       \
458    if (e1 == ub)                               \
459    {                                           \
460      d = pGetComp(p2) - pGetComp(p1);          \
461      if (d) actionD;                           \
462      actionE;                                  \
463    }                                           \
464    e2--;                                       \
465  }                                             \
466}                                               \
467while(0)
468
469#define _pMonCmp_1(p1, p2, d, actionD, actionE)  \
470  _pMonCmp(p1, p2, d, actionD, actionE)
471
472#define _pMonCmp_1_c(p1, p2, d, actionD, actionE)  \
473  _pMonCmp_c(p1, p2, d, actionD, actionE)
474 
475#define _pMonCmp_2(p1, p2, d, actionD, actionE)  \
476  _pMonCmp(p1, p2, d, actionD, actionE)
477
478#define _pMonCmp_2_c(p1, p2, d, actionD, actionE)  \
479  _pMonCmp_c(p1, p2, d, actionD, actionE)
480 
481#define _pMonCmp_2i(p1, p2, length, d, actionD, actionE) \
482  _pMonCmp(p1, p2, d, actionD, actionE)
483
484#define _pMonCmp_2i_1(p1, p2, length, d, actionD, actionE) \
485  _pMonCmp(p1, p2, d, actionD, actionE)
486
487#define _pMonCmp_2i_c(p1, p2, length, d, actionD, actionE)   \
488  _pMonCmp_c(p1, p2, d, actionD, actionE)
489
490#define _pMonCmp_2i_1_c(p1, p2, length, d, actionD, actionE) \
491  _pMonCmp_c(p1, p2, d, actionD, actionE)
492 
493#endif // COMP_NO_EXP_VECTOR_OPS
494 
495#endif // WORDS_BIGENDIAN
496
497#endif // COMP_FAST
498
499#endif // POLYS_COMP_H
500
Note: See TracBrowser for help on using the repository browser.