void ReducerPackDedup<Q>::removeLeadTerm() { if (!mLeadTermKnown) { NewConstTerm dummy; leadTerm(dummy); } mLeadTermKnown = false; }
void TournamentReducer::removeLeadTerm() { if (!mLeadTermKnown) { const_term dummy; leadTerm(dummy); } mLeadTermKnown = false; }
void TournamentReducer::value(Poly &result) { const_term t; while (leadTerm(t)) { result.appendTerm(t.coeff, t.monom); removeLeadTerm(); } resetReducer(); }
void PolyHashReducer::value(Poly &result) // keep extracting lead term until done { const_term t; for ( ; f_iter_ != f_->end(); ++f_iter_) if (leadTerm(t)) result.appendTerm(t.coeff, t.monom); resetReducer(); }
virtual bool leadTerm(const_term& result) { NewConstTerm t; auto hasLead = leadTerm(t); if (hasLead) { result.monom = Monoid::toOld(*t.mono); result.coeff = t.coef; } return hasLead; }
void PolyHashReducer::resetReducer() { const_term t; for ( ; f_iter_ != f_->end(); ++f_iter_) leadTerm(t); delete f_; f_ = new HashPoly; f_iter_ = f_->begin(); H_.reset(); }
void ReducerHash<Q>::resetReducer() { MATHICGB_ASSERT(mNodeCount == mHashTable.getNodeCount()); const_term t; while (leadTerm(t)) { mQueue.pop(); mNodeCount--; } MATHICGB_ASSERT(mNodeCount == mHashTable.getNodeCount()); mHashTable.reset(); MATHICGB_ASSERT(mNodeCount == mHashTable.getNodeCount()); // how to reset mQueue ? }