| 179 | } |
| 180 | |
| 181 | static inline int pDivComp(poly p, poly q) |
| 182 | { |
| 183 | if ((currRing->pCompIndex < 0) |
| 184 | || (__p_GetComp(p,currRing) == __p_GetComp(q,currRing))) |
| 185 | { |
| 186 | #ifdef HAVE_RATGRING |
| 187 | if (rIsRatGRing(currRing)) |
| 188 | { |
| 189 | if (_p_LmDivisibleByPart(p,currRing, |
| 190 | q,currRing, |
| 191 | currRing->real_var_start, currRing->real_var_end)) |
| 192 | return 0; |
| 193 | return pLmCmp(q,p); // ONLY FOR GLOBAL ORDER! |
| 194 | } |
| 195 | #endif |
| 196 | BOOLEAN a=FALSE, b=FALSE; |
| 197 | int i; |
| 198 | unsigned long la, lb; |
| 199 | unsigned long divmask = currRing->divmask; |
| 200 | for (i=0; i<currRing->VarL_Size; i++) |
| 201 | { |
| 202 | la = p->exp[currRing->VarL_Offset[i]]; |
| 203 | lb = q->exp[currRing->VarL_Offset[i]]; |
| 204 | if (la != lb) |
| 205 | { |
| 206 | if (la < lb) |
| 207 | { |
| 208 | if (b) return 0; |
| 209 | if (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask)) |
| 210 | return 0; |
| 211 | a = TRUE; |
| 212 | } |
| 213 | else |
| 214 | { |
| 215 | if (a) return 0; |
| 216 | if (((la & divmask) ^ (lb & divmask)) != ((la - lb) & divmask)) |
| 217 | return 0; |
| 218 | b = TRUE; |
| 219 | } |
| 220 | } |
| 221 | } |
| 222 | if (a) { /*assume(pLmCmp(q,p)==1);*/ return 1; } |
| 223 | if (b) { /*assume(pLmCmp(q,p)==-1);*/return -1; } |
| 224 | /*assume(pLmCmp(q,p)==0);*/ |
| 225 | } |
| 226 | return 0; |
| 227 | } |
| 228 | |
| 229 | #ifdef HAVE_SHIFTBBA |
| 230 | static inline int pLPDivComp(poly p, poly q) |
no test coverage detected