Changeset d2bf50 in git for kernel/kutil.cc
- Timestamp:
- Jun 12, 2006, 4:27:23 PM (17 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 7523a7be6875be53eb42a20b61a5e091af63d18a
- Parents:
- ada0d58fbabec18891e5bc616cfae251438277ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/kutil.cc
rada0d5 rd2bf50 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: kutil.cc,v 1.2 6 2006-06-12 00:35:13 wienandExp $ */4 /* $Id: kutil.cc,v 1.27 2006-06-12 14:27:23 Singular Exp $ */ 5 5 /* 6 6 * ABSTRACT: kernel: utils for kStd … … 52 52 #define KDEBUG 2 53 53 #endif 54 55 56 #ifdef ENTER_USE_MYMEMMOVE 57 inline 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 71 inline 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 86 inline 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 100 static poly redMora (poly h,int maxIndex,kStrategy strat); 101 static poly redBba (poly h,int maxIndex,kStrategy strat); 102 103 #ifdef HAVE_RING2TOM 54 104 #define pDivComp_EQUAL 2 55 105 #define pDivComp_LESS 1 56 106 #define pDivComp_GREATER -1 57 107 #define pDivComp_INCOMP 0 58 59 60 #ifdef ENTER_USE_MYMEMMOVE61 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 do68 {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 do83 {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 memmove101 #define memmove(d,s,l) _my_memmove(d, s, l)102 #endif103 104 static poly redMora (poly h,int maxIndex,kStrategy strat);105 static poly redBba (poly h,int maxIndex,kStrategy strat);106 107 108 /* Checks the relation of LM(p) and LM(q) 108 109 LM(p) = LM(q) => return pDivComp_EQUAL … … 110 111 LM(q) | LM(p) => return pDivComp_GREATER 111 112 else return pDivComp_INCOMP */ 112 static inline int pDivComp (poly p, poly q)113 static inline int pDivCompRing(poly p, poly q) 113 114 { 114 115 if (pGetComp(p) == pGetComp(q)) … … 143 144 if (b) return -1; 144 145 if (!a & !b) return pDivComp_EQUAL; 146 } 147 return 0; 148 } 149 #endif 150 151 static 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; 145 183 } 146 184 return 0; … … 1062 1100 for(j = strat->Bl;j>=0;j--) 1063 1101 { 1064 compare=pDivComp (strat->B[j].lcm,Lp.lcm);1102 compare=pDivCompRing(strat->B[j].lcm,Lp.lcm); 1065 1103 compareCoeff = nComp((long) pGetCoeff(strat->B[j].lcm), (long) pGetCoeff(Lp.lcm)); 1066 1104 if (compareCoeff == 0 || compare == compareCoeff)
Note: See TracChangeset
for help on using the changeset viewer.