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

◆ find_exact_monomial()

MonomialTableZZ::mon_term * MonomialTableZZ::find_exact_monomial ( exponents_t exp,
int comp,
int first_val ) const

Definition at line 351 of file montableZZ.cpp.

355{
356 if (comp >= static_cast<int>(_head.size())) return nullptr;
357 mon_term *head = _head[comp];
358 mon_term *t;
359 int i;
360
361 mon_term *result = nullptr;
362 int neqs = 0;
363
364 unsigned long expmask = monomial_mask(_nvars, exp);
365
366 for (t = head->_next; t != head; t = t->_next)
367 {
368 if (t->_val < first_val) continue;
369 if (expmask == t->_mask)
370 {
371 bool is_eq = 1;
372 for (i = 0; i < _nvars; i++)
373 if (exp[i] != t->_lead[i])
374 {
375 is_eq = 0;
376 break;
377 }
378 if (is_eq)
379 {
380 if (result == nullptr) result = t;
381 neqs++;
382 }
383 }
384 }
385 if (neqs > 1)
386 {
387 printf("number of exact matches: %d\n", neqs);
388 }
389 return result;
390}
VALGRIND_MAKE_MEM_DEFINED & result(result)
static unsigned long monomial_mask(int nvars, exponents_t exp)
MonomialTable::mon_term plus an _coeff slot pointing at the entry's leading ZZ coefficient (or nullpt...

References MonomialTableZZ::mon_term::_lead, MonomialTableZZ::mon_term::_mask, MonomialTableZZ::mon_term::_next, _nvars, MonomialTableZZ::mon_term::_val, monomial_mask(), and result().