1#ifndef _free_monoid_hpp_
2#define _free_monoid_hpp_
126 const std::vector<int>& degrees,
127 const std::vector<int>& wtvecs,
128 const std::vector<int>& heftVector
256 int retval =
mMonoid->compare(a, b);
257 return (retval ==
GT);
280 hash ^= i + 0x9e3779b9 + (hash << 6) + (hash >> 2);
285 int hash = V.
begin()[0];
287 hash ^= i + 0x9e3779b9 + (hash << 6) + (hash >> 2);
346 return (retval ==
GT);
std::ostream & operator<<(std::ostream &o, FreeMonoidLogger a)
Bump-pointer arena allocator for transient inner-loop allocations.
Modern Monom / Polynomial value types shared by NC algebras and the refactored F4.
Word and WordWithData — non-owning views over the flat-int encoding of a non-commutative word.
const Monoid & degreeMonoid() const
bool isEqual(const Monom &m1, const Monom &m2) const
int wordWeight(Word &word, const std::vector< int > &weight, int start_index) const
void getMonomialReversed(Monom monom, std::vector< int > &result) const
gc_vector< int > MonomialInserter
const PolynomialRing * mDegreeRing
Word wordProductAsWord(const Word &left, const Word &right, MemoryBlock &memBlock) const
void mult3(const Monom &m1, const Monom &m2, const Monom &m3, MonomialInserter &result) const
int wordHeft(Word &word) const
std::vector< int > mHeftDegrees
void setWeights(Monom &m) const
unsigned int numWeights() const
int wordHeft(Word &word, int start_index) const
void getMonomial(Monom monom, std::vector< int > &result) const
const std::vector< int > mWeightVectors
const std::vector< int > mHeftVector
FreeMonoid(const std::vector< std::string > &variableNames, const PolynomialRing *degreeRing, const std::vector< int > °rees, const std::vector< int > &wtvecs, const std::vector< int > &heftVector)
void support(const Monom &m, std::vector< int > &result) const
Monom wordProductAsMonom(const Word &left, const Word &right, MemoryBlock &memBlock) const
void fromMonomial(const_monomial monom, MonomialInserter &result) const
const std::vector< int > mDegrees
const std::vector< std::string > & variableNames() const
const PolynomialRing * degreeRing() const
int heftOfVar(int v) const
const std::vector< std::string > mVariableNames
int compare(const Monom &m1, const Monom &m2) const
void monomInsertFromWord(MonomialInserter &result, const Word &w) const
void copy(const Monom &m, MonomialInserter &result) const
void elem_text_out(buffer &o, const Monom &m1) const
void wordFromMonom(Word &result, const Monom &m) const
void mult(const Monom &m1, const Monom &m2, MonomialInserter &result) const
gc_vector< const int * > mDegreeOfVar
int weightOfVar(int v, int wt) const
void multi_degree(const Monom &m, monomial already_allocated_degree_vector) const
void one(MonomialInserter &m) const
const std::vector< int > & flattenedDegrees() const
int index_of_variable(const Monom &m) const
void var(int v, MonomialInserter &result) const
void wordPrefixFromMonom(Word &result, const Monom &m, int endIndex) const
unsigned int numVars() const
void wordSuffixFromMonom(Word &result, const Monom &m, int beginIndex) const
bool is_one(const Monom &m) const
int wordLength(const Monom &m) const
The free non-commutative monoid on a set of named variables, with monomial ordering and degree / weig...
Static counter for non-commutative monomial comparisons.
Thin RAII wrapper around memtailor::Arena providing bump-pointer array allocation with optional mutex...
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
bool operator()(const Monom a, const Monom b) const
const FreeMonoid * mMonoid
MonomEq(const MonomEq &M)
MonomEq(const FreeMonoid &M)
int operator()(const Word &V) const
int operator()(const Monom &V) const
MonomHashEqual(const MonomHashEqual &M)
bool operator()(const Monom a, const Monom b) const
MonomHashEqual(const FreeMonoid &M)
const FreeMonoid * mMonoid
MonomHashEqual(MonomHashEqual &M)
Hash functor on Monom (or Word) suitable for std::unordered_map / std::unordered_set.
Abstract base for the engine's polynomial-ring hierarchy.
const int * begin() const
Non-owning view of a non-commutative word: [begin, end) of int variable indices.
const int * const_monomial
VALGRIND_MAKE_MEM_DEFINED & result(result)
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
our_new_delete — per-class opt-in routing of new / delete through bdwgc.
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
Non-owning view onto a [length, degree, v1, v2, ..., vn] packed monomial in some externally managed b...
const FreeMonoid * mMonoid
MonomSort(const FreeMonoid *monoid, const T *container)
const T * mMonomContainer
bool operator()(int a, int b) const
Engine-wide stylistic constants: LT / EQ / GT codes, INTSIZE, GEOHEAP_SIZE.