Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawJoinMonomialOrdering()

MonomialOrdering * rawJoinMonomialOrdering ( engine_RawMonomialOrderingArray M)

Definition at line 642 of file monomial-ordering.cpp.

643{
645 const MonomialOrdering *mo;
646 int i, j, sum, next;
647 int nvars_so_far = 0;
648
649 // sum = 0;
650 // for (i=0; i<M->len; i++)
651 // sum += M->array[i]->len;
652
653 sum = 0;
654 for (i = 0; i < M->len; i++)
655 {
656 mo = M->array[i];
657 for (j = 0; j < mo->len; j++)
658 if (is_good(mo->array[j])) sum++;
659 }
660
661 result = make_mon_order(sum);
662 next = 0;
663 for (i = 0; i < M->len; i++)
664 {
665 mo = M->array[i];
666 for (j = 0; j < mo->len; j++)
667 {
668 mon_part p = mo->array[j];
669 if (!is_good(p)) continue;
670 if (p->type != MO_WEIGHTS)
671 nvars_so_far += p->nvars;
672 else
673 {
674 /* Shift the weights over by nvars_so_far */
675 mon_part q = mo_make(MO_WEIGHTS, nvars_so_far + p->nvars, nullptr);
676 q->wts = getmemvectortype(int, q->nvars);
677 for (j = 0; j < nvars_so_far; j++) q->wts[j] = 0;
678 for (; j < q->nvars; j++) q->wts[j] = p->wts[j - nvars_so_far];
679 p = q;
680 }
681 result->array[next++] = p;
682 }
683 }
684 return result;
685}
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemvectortype(S, len)
Definition m2-mem.h:146
static struct mon_part_rec_ * mo_make(enum MonomialOrdering_type type, int nvars, const int *wts)
static bool is_good(mon_part p)
static MonomialOrdering * make_mon_order(int n)
@ MO_WEIGHTS
const mpreal sum(const mpreal tab[], const unsigned long int n, int &status, mp_rnd_t mode=mpreal::get_default_rnd())
Definition mpreal.h:2600
Front-end-side description of a monomial ordering as a list of mon_part blocks.

References MonomialOrdering::array, getmemvectortype, is_good(), MonomialOrdering::len, make_mon_order(), mo_make(), MO_WEIGHTS, p, and result().