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

◆ join()

MonomialOrdering * MonomialOrderings::join ( const std::vector< MonomialOrdering * > & M)
static

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

208{
209 MonomialOrdering *result;
210 const MonomialOrdering *mo;
211 int i, j, sum, next;
212 int nvars_so_far = 0;
213
214 sum = 0;
215 for (i = 0; i < M.size(); i++)
216 {
217 mo = M[i];
218 for (j = 0; j < mo->len; j++)
219 if (is_good(mo->array[j])) sum++;
220 }
221
222 result = make_mon_order(sum);
223 next = 0;
224 for (i = 0; i < M.size(); i++)
225 {
226 mo = M[i];
227 for (j = 0; j < mo->len; j++)
228 {
229 mon_part p = mo->array[j];
230 if (!is_good(p)) continue;
231 if (p->type != MO_WEIGHTS)
232 nvars_so_far += p->nvars;
233 else
234 {
235 /* Shift the weights over by nvars_so_far */
236 mon_part q = mo_make(MO_WEIGHTS, nvars_so_far + p->nvars, nullptr);
237 q->wts = getmemvectortype(int, q->nvars);
238 for (j = 0; j < nvars_so_far; j++) q->wts[j] = 0;
239 for (; j < q->nvars; j++) q->wts[j] = p->wts[j - nvars_so_far];
240 p = q;
241 }
242 result->array[next++] = p;
243 }
244 }
245 return result;
246}
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

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

Referenced by degreeMonoid(), simplePolynomialRing(), and TEST().