void ReducerHashPack<Q>::insert(ConstMonoRef multiple, const Poly& poly) { MATHICGB_ASSERT(&poly.ring() == &mRing); if (poly.isZero()) return; NewConstTerm termMultiple = {1, multiple.ptr()}; insertEntry(new (mPool.alloc()) MultipleWithPos(poly, termMultiple)); }
void ReducerPackDedup<Q>::insert(ConstMonoRef multiple, const Poly& poly) { if (poly.isZero()) return; mLeadTermKnown = false; NewConstTerm termMultiple = {1, multiple.ptr()}; auto entry = new (mPool.alloc()) MultipleWithPos(poly, termMultiple); entry->computeCurrent(poly.ring()); mQueue.push(entry); }
void ReducerNoDedup<Q>::insert(ConstMonoRef multiple, const Poly& poly) { if (poly.isZero()) return; mLeadTermKnown = false; const auto end = poly.end(); for (auto it = poly.begin(); it != end; ++it) { NewTerm t = {it.coef(), mRing.monoid().alloc().release()}; mRing.monoid().multiply(multiple, it.mono(), *t.mono); mQueue.push(t); } }
bool SigPolyBasis::isSingularTopReducibleSlow( const Poly& poly, ConstMonoRef sig ) const { if (poly.isZero()) return false; monomial multiplier = ring().allocMonomial(); const size_t genCount = size(); const auto polyLead = poly.leadMono(); for (size_t i = 0; i < genCount; ++i) { if (!monoid().divides(leadMono(i), polyLead)) continue; monoid().divide(leadMono(i), polyLead, multiplier); if (monoid().compare(sig, multiplier, signature(i)) == EQ) return true; } ring().freeMonomial(multiplier); return false; }