Changeset d2bf500 in git


Ignore:
Timestamp:
Jun 12, 2006, 4:27:23 PM (18 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
7523a7be6875be53eb42a20b61a5e091af63d18a
Parents:
ada0d58fbabec18891e5bc616cfae251438277ce
Message:
*hannes: pDivComp


git-svn-id: file:///usr/local/Singular/svn/trunk@9201 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/kutil.cc

    rada0d5 rd2bf500  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: kutil.cc,v 1.26 2006-06-12 00:35:13 wienand Exp $ */
     4/* $Id: kutil.cc,v 1.27 2006-06-12 14:27:23 Singular Exp $ */
    55/*
    66* ABSTRACT: kernel: utils for kStd
     
    5252#define KDEBUG 2
    5353#endif
     54
     55
     56#ifdef ENTER_USE_MYMEMMOVE
     57inline void _my_memmove_d_gt_s(unsigned long* d, unsigned long* s, long l)
     58{
     59  register unsigned long* _dl = (unsigned long*) d;
     60  register unsigned long* _sl = (unsigned long*) s;
     61  register long _i = l - 1;
     62
     63  do
     64  {
     65    _dl[_i] = _sl[_i];
     66    _i--;
     67  }
     68  while (_i >= 0);
     69}
     70
     71inline void _my_memmove_d_lt_s(unsigned long* d, unsigned long* s, long l)
     72{
     73  register long _ll = l;
     74  register unsigned long* _dl = (unsigned long*) d;
     75  register unsigned long* _sl = (unsigned long*) s;
     76  register long _i = 0;
     77
     78  do
     79  {
     80    _dl[_i] = _sl[_i];
     81    _i++;
     82  }
     83  while (_i < _ll);
     84}
     85
     86inline void _my_memmove(void* d, void* s, long l)
     87{
     88  unsigned long _d = (unsigned long) d;
     89  unsigned long _s = (unsigned long) s;
     90  unsigned long _l = ((l) + SIZEOF_LONG - 1) >> LOG_SIZEOF_LONG;
     91
     92  if (_d > _s) _my_memmove_d_gt_s(_d, _s, _l);
     93  else _my_memmove_d_lt_s(_d, _s, _l);
     94}
     95
     96#undef memmove
     97#define memmove(d,s,l) _my_memmove(d, s, l)
     98#endif
     99
     100static poly redMora (poly h,int maxIndex,kStrategy strat);
     101static poly redBba (poly h,int maxIndex,kStrategy strat);
     102
     103#ifdef HAVE_RING2TOM
    54104#define pDivComp_EQUAL 2
    55105#define pDivComp_LESS 1
    56106#define pDivComp_GREATER -1
    57107#define pDivComp_INCOMP 0
    58 
    59 
    60 #ifdef ENTER_USE_MYMEMMOVE
    61 inline void _my_memmove_d_gt_s(unsigned long* d, unsigned long* s, long l)
    62 {
    63   register unsigned long* _dl = (unsigned long*) d;
    64   register unsigned long* _sl = (unsigned long*) s;
    65   register long _i = l - 1;
    66 
    67   do
    68   {
    69     _dl[_i] = _sl[_i];
    70     _i--;
    71   }
    72   while (_i >= 0);
    73 }
    74 
    75 inline void _my_memmove_d_lt_s(unsigned long* d, unsigned long* s, long l)
    76 {
    77   register long _ll = l;
    78   register unsigned long* _dl = (unsigned long*) d;
    79   register unsigned long* _sl = (unsigned long*) s;
    80   register long _i = 0;
    81 
    82   do
    83   {
    84     _dl[_i] = _sl[_i];
    85     _i++;
    86   }
    87   while (_i < _ll);
    88 }
    89 
    90 inline void _my_memmove(void* d, void* s, long l)
    91 {
    92   unsigned long _d = (unsigned long) d;
    93   unsigned long _s = (unsigned long) s;
    94   unsigned long _l = ((l) + SIZEOF_LONG - 1) >> LOG_SIZEOF_LONG;
    95 
    96   if (_d > _s) _my_memmove_d_gt_s(_d, _s, _l);
    97   else _my_memmove_d_lt_s(_d, _s, _l);
    98 }
    99 
    100 #undef memmove
    101 #define memmove(d,s,l) _my_memmove(d, s, l)
    102 #endif
    103 
    104 static poly redMora (poly h,int maxIndex,kStrategy strat);
    105 static poly redBba (poly h,int maxIndex,kStrategy strat);
    106 
    107108/* Checks the relation of LM(p) and LM(q)
    108109     LM(p) = LM(q) => return pDivComp_EQUAL
     
    110111     LM(q) | LM(p) => return pDivComp_GREATER
    111112     else return pDivComp_INCOMP */
    112 static inline int pDivComp(poly p, poly q)
     113static inline int pDivCompRing(poly p, poly q)
    113114{
    114115  if (pGetComp(p) == pGetComp(q))
     
    143144    if (b) return -1;
    144145    if (!a & !b) return pDivComp_EQUAL;
     146  }
     147  return 0;
     148}
     149#endif
     150
     151static inline int pDivComp(poly p, poly q)
     152{
     153  if (pGetComp(p) == pGetComp(q))
     154  {
     155    BOOLEAN a=FALSE, b=FALSE;
     156    int i;
     157    unsigned long la, lb;
     158    unsigned long divmask = currRing->divmask;
     159    for (i=0; i<currRing->VarL_Size; i++)
     160    {
     161      la = p->exp[currRing->VarL_Offset[i]];
     162      lb = q->exp[currRing->VarL_Offset[i]];
     163      if (la != lb)
     164      {
     165        if (la < lb)
     166        {
     167          if (b) return 0;
     168          if (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask))
     169            return 0;
     170          a = TRUE;
     171        }
     172        else
     173        {
     174          if (a) return 0;
     175          if (((la & divmask) ^ (lb & divmask)) != ((la - lb) & divmask))
     176            return 0;
     177          b = TRUE;
     178        }
     179      }
     180    }
     181    if (a) return 1;
     182    if (b) return -1;
    145183  }
    146184  return 0;
     
    10621100  for(j = strat->Bl;j>=0;j--)
    10631101  {
    1064     compare=pDivComp(strat->B[j].lcm,Lp.lcm);
     1102    compare=pDivCompRing(strat->B[j].lcm,Lp.lcm);
    10651103    compareCoeff = nComp((long) pGetCoeff(strat->B[j].lcm), (long) pGetCoeff(Lp.lcm));
    10661104    if (compareCoeff == 0 || compare == compareCoeff)
Note: See TracChangeset for help on using the changeset viewer.