diff --git a/kernel/ring.h b/kernel/ring.h
a
|
b
|
|
409 | 409 | #define rHasLocalOrMixedOrdering(R) ((R)->OrdSgn==-1) |
410 | 410 | #define rHasLocalOrMixedOrdering_currRing() (pOrdSgn==-1) |
411 | | BOOLEAN rOrd_is_Totaldegree_Ordering(ring r =currRing); |
| 411 | BOOLEAN rOrd_is_Totaldegree_Ordering(const ring r =currRing); |
412 | 412 | |
413 | 413 | /// return TRUE if p_SetComp requires p_Setm |
414 | | BOOLEAN rOrd_SetCompRequiresSetm(ring r); |
415 | | rOrderType_t rGetOrderType(ring r); |
| 414 | BOOLEAN rOrd_SetCompRequiresSetm(const ring r); |
| 415 | rOrderType_t rGetOrderType(const ring r); |
416 | 416 | |
417 | 417 | /// returns TRUE if var(i) belongs to p-block |
418 | | BOOLEAN rIsPolyVar(int i, ring r = currRing); |
419 | | |
420 | | static inline BOOLEAN rOrd_is_Comp_dp(ring r) |
| 418 | BOOLEAN rIsPolyVar(int i, const ring r = currRing); |
| 419 | |
| 420 | static inline BOOLEAN rOrd_is_Comp_dp(const ring r) |
421 | 421 | { |
422 | 422 | return ((r->order[0] == ringorder_c || r->order[0] == ringorder_C) && |
diff --git a/kernel/ring.cc b/kernel/ring.cc
a
|
b
|
|
1899 | 1899 | } |
1900 | 1900 | |
1901 | | rOrderType_t rGetOrderType(ring r) |
| 1901 | rOrderType_t rGetOrderType(const ring r) |
1902 | 1902 | { |
1903 | 1903 | // check for simple ordering |
… |
… |
|
2017 | 2017 | } |
2018 | 2018 | |
2019 | | BOOLEAN rHasSimpleOrderAA(ring r) |
| 2019 | BOOLEAN rHasSimpleOrderAA(const ring r) |
2020 | 2020 | { |
2021 | 2021 | if (r->order[0] == ringorder_unspec) return TRUE; |
… |
… |
|
2048 | 2048 | |
2049 | 2049 | // return TRUE if p_SetComp requires p_Setm |
2050 | | BOOLEAN rOrd_SetCompRequiresSetm(ring r) |
| 2050 | BOOLEAN rOrd_SetCompRequiresSetm(const ring r) |
2051 | 2051 | { |
2052 | 2052 | if (r->typ != NULL) |
… |
… |
|
2062 | 2062 | } |
2063 | 2063 | |
| 2064 | BOOLEAN rHasModuleOrder(const ring r) |
| 2065 | { |
| 2066 | int i=0; |
| 2067 | loop |
| 2068 | { |
| 2069 | if ((r->order[i]==ringorder_c) |
| 2070 | || (r->order[i]==ringorder_C)) |
| 2071 | return TRUE; |
| 2072 | if (r->order[i]==0) return FALSE; |
| 2073 | i++; |
| 2074 | } |
| 2075 | return FALSE; /*never reached */ |
| 2076 | } |
2064 | 2077 | // return TRUE if p->exp[r->pOrdIndex] holds total degree of p */ |
2065 | | BOOLEAN rOrd_is_Totaldegree_Ordering(ring r) |
| 2078 | BOOLEAN rOrd_is_Totaldegree_Ordering(const ring r) |
2066 | 2079 | { |
2067 | 2080 | // Hmm.... what about Syz orderings? |
… |
… |
|
2070 | 2083 | (rOrder_is_DegOrdering((rRingOrder_t)r->order[0]) || |
2071 | 2084 | rOrder_is_DegOrdering(( rRingOrder_t)r->order[1]))) || |
2072 | | (rHasSimpleOrderAA(r) && |
| 2085 | (rHasSimpleOrderAA(r) && rHasModuleOrder(r) && |
2073 | 2086 | (rOrder_is_DegOrdering((rRingOrder_t)r->order[1]) || |
2074 | 2087 | rOrder_is_DegOrdering((rRingOrder_t)r->order[2]))))); |
… |
… |
|
2085 | 2098 | } |
2086 | 2099 | |
2087 | | BOOLEAN rIsPolyVar(int v, ring r) |
| 2100 | BOOLEAN rIsPolyVar(int v, const ring r) |
2088 | 2101 | { |
2089 | 2102 | int i=0; |
diff --git a/kernel/gring.cc b/kernel/gring.cc
a
|
b
|
|
35 | 35 | #include <kernel/p_Mult_q.h> |
36 | 36 | #include <kernel/pInline1.h> |
37 | | |
38 | | // dirty tricks: |
39 | | #include <kernel/p_MemAdd.h> |
40 | 37 | |
41 | 38 | #include <kernel/gring.h> |
… |
… |
|
461 | 458 | } |
462 | 459 | |
463 | | |
464 | | |
465 | 460 | poly gnc_mm_Mult_nn(int *F0, int *G0, const ring r) |
466 | 461 | /* destroys nothing, no coeffs and exps */ |
… |
… |
|
470 | 465 | int iF,jG,iG; |
471 | 466 | int rN=r->N; |
472 | | int ExpSize=(((rN+1)*sizeof(int)+sizeof(long)-1)/sizeof(long))*sizeof(long); |
473 | 467 | |
474 | 468 | int *F=(int *)omAlloc0((rN+1)*sizeof(int)); |
… |
… |
|
479 | 473 | memcpy(G, G0,(rN+1)*sizeof(int)); |
480 | 474 | // pExpVectorCopy(G,G0); |
481 | | F[0]=0; /* important for p_MemAdd */ |
| 475 | F[0]=0; |
482 | 476 | G[0]=0; |
483 | 477 | |
… |
… |
|
503 | 497 | /* i.e. no mixed exp_num , MERGE case */ |
504 | 498 | { |
505 | | p_MemAdd_LengthGeneral(F, G, ExpSize/sizeof(long)); |
| 499 | { for(int ii=rN;ii>0;ii--) F[ii]+=G[ii]; } |
506 | 500 | p_SetExpV(out,F,r); |
507 | 501 | p_Setm(out,r); |
508 | | // omFreeSize((ADDRESS)F,ExpSize); |
509 | 502 | freeT(F,rN); |
510 | 503 | freeT(G,rN); |
… |
… |
|
565 | 558 | cff=totcff; |
566 | 559 | } |
567 | | p_MemAdd_LengthGeneral(F, G, ExpSize/sizeof(long)); |
| 560 | { for(int ii=rN;ii>0;ii--) F[ii]+=G[ii]; } |
568 | 561 | p_SetExpV(out,F,r); |
569 | 562 | p_Setm(out,r); |
570 | 563 | p_SetCoeff(out,cff,r); |
571 | | // p_MemAdd_NegWeightAdjust(p, r); ??? do we need this? |
572 | 564 | freeT(F,rN); |
573 | 565 | freeT(G,rN); |