94 template<
bool Const = false >
112 std::vector<MonomialIndex>::const_iterator,
113 std::vector<MonomialIndex>::iterator>;
116 std::vector<ComponentIndex>::const_iterator,
117 std::vector<ComponentIndex>::iterator>;
122 using MonViewReference =
typename std::conditional_t< Const, MonomialView const &, MonomialView & >;
123 using MonViewPointer =
typename std::conditional_t< Const, MonomialView const *, MonomialView * >;
125 using MonIndexReference =
typename std::conditional_t< Const, MonomialIndex const &, MonomialIndex & >;
126 using MonIndexPointer =
typename std::conditional_t< Const, MonomialIndex const *, MonomialIndex * >;
128 using CompReference =
typename std::conditional_t< Const, ComponentIndex const &, ComponentIndex & >;
129 using CompPointer =
typename std::conditional_t< Const, ComponentIndex const *, ComponentIndex * >;
158 template<
bool _Const = Const >
159 std::enable_if_t< _Const, CoeffReference >
165 template<
bool _Const = Const >
166 std::enable_if_t< !_Const, CoeffReference >
176 template<
bool _Const = Const >
177 std::enable_if_t< _Const, MonViewReference >
183 template<
bool _Const = Const >
184 std::enable_if_t< !_Const, MonViewReference >
190 template<
bool _Const = Const >
191 std::enable_if_t< _Const, CompReference >
197 template<
bool _Const = Const >
198 std::enable_if_t< !_Const, CompReference >
299 str.idealBegin(Fs.
size());
300 for (
auto i=0; i<Fs.
size(); ++i)
303 str.appendPolynomialBegin(F.mMonomials.size());
304 for (
auto i=0; i<F.mMonomials.size(); ++i)
308 if (F.mComponents.empty())
309 str.appendTermBegin(0);
311 str.appendTermBegin(F.mComponents[i]);
313 for (
auto ve = monom.
begin(); ve != monom.
end(); ++ve)
315 str.appendExponent(ve.var(), ve.power());
318 str.appendTermDone(val);
320 str.appendPolynomialDone();
Ring-agnostic polynomial-list transport type plus its streaming collector and emitter.
newf4::MonomialHashFunction and the new-F4 monomial-to-index hash table.
Typed integer vocabulary for namespace newf4 (indices, monomial words, hashes, masks).
Type aliases and the (currently disabled) C++20 concept that streaming polynomial consumers implement...
Coefficient-ring-erased arithmetic dispatcher used by F4, GB, and resolution code.
Type-erased owning handle to a dense coefficient vector held by a ConcreteVectorArithmetic<Ring>.
long to_modp_long(const ElementArray &coeffs, size_t loc) const
Runtime dispatcher that hides the concrete coefficient ring behind a std::variant of ConcreteVectorAr...
auto monomialAt(MonomialIndex m) const -> MonomialView
auto begin() const -> MonomialIterator< true >
auto end() const -> MonomialIterator< true >
typename std::conditional_t< Const, MonomialView const *, MonomialView * > MonViewPointer
bool operator!=(const PolynomialIterator &rhs) const
typename std::conditional_t< Const, MonomialIndex const *, MonomialIndex * > MonIndexPointer
typename std::conditional_t< Const, MonomialIndex const &, MonomialIndex & > MonIndexReference
ComponentIterator mCompIterator
typename std::conditional_t< Const, std::vector< MonomialIndex >::const_iterator, std::vector< MonomialIndex >::iterator > MonomIterator
typename std::conditional_t< Const, std::vector< ComponentIndex >::const_iterator, std::vector< ComponentIndex >::iterator > ComponentIterator
typename std::size_t CoeffIterator
ElementType coeff() const
bool operator==(const PolynomialIterator &rhs) const
typename std::conditional_t< Const, ComponentIndex const *, ComponentIndex * > CompPointer
const Polynomial & mPolynomial
std::enable_if_t< !_Const, CompReference > comp()
std::enable_if_t< _Const, CompReference > comp() const
PolynomialIterator(CoeffIterator coeffIterator, MonomIterator monomIterator, ComponentIterator compIterator, const Polynomial &polynomial)
MonomIterator mMonomIterator
std::forward_iterator_tag iterator_category
std::enable_if_t< !_Const, MonViewReference > monom()
typename std::conditional_t< Const, MonomialView const &, MonomialView & > MonViewReference
std::enable_if_t< _Const, MonViewReference > monom() const
CoeffIterator mCoeffIterator
typename std::conditional_t< Const, ComponentIndex const &, ComponentIndex & > CompReference
auto polynomialList() -> PolynomialList &
auto end() const -> PolynomialIterator< true >
auto end() -> PolynomialIterator< false >
std::vector< MonomialIndex > mMonomials
friend class PolynomialListStream
ElementArray mCoefficients
auto begin() -> PolynomialIterator< false >
PolynomialList & mPolynomialList
auto polynomialList() const -> const PolynomialList &
auto begin() const -> PolynomialIterator< true >
Polynomial(PolynomialList &polynomialList)
std::vector< ComponentIndex > mComponents
PolynomialList(const VectorArithmetic &VA, MonomialHashTable &hashTable)
Polynomial & operator[](int index)
MonomialHashTable & monomialHashTable()
const Polynomial & operator[](int index) const
const VectorArithmetic & vectorArithmetic() const
const MonomialHashTable & monomialHashTable() const
MonomialHashTable & mHashTable
void push_back(const Polynomial &F)
const VectorArithmetic & mVectorArithmetic
std::vector< Polynomial > mPolynomials
Coefficient modulus() const
std::vector< Coefficient > mCoefficients
std::vector< Exponent > mSparseMonomial
Component comCount() const
void appendPolynomialDone()
PolynomialList & value() const
PolynomialListStreamCollector(int modulus, int varCount, int comCount, PolynomialList &result)
void appendPolynomialBegin(size_t termCount)
VarIndex varCount() const
void idealBegin(size_t polyCount)
void appendExponent(VarIndex index, Exponent exponent)
BasicPolyListStreamCollector::VarIndex VarIndex
BasicPolyListStreamCollector::Component Component
BasicPolyListStreamCollector::Coefficient Coefficient
void appendTermBegin(Component com)
BasicPolyListStreamCollector::Exponent Exponent
void appendTermDone(Coefficient coefficient)
VALGRIND_MAKE_MEM_DEFINED & result(result)
void toStream(const PolynomialList &Fs, S &str)