62#define ALLOCATE_EXPONENTS(byte_len) static_cast<exponents_t>(alloca(byte_len))
63#define EXPONENT_BYTE_SIZE(nvars) static_cast<int>((sizeof(int) * (nvars)))
65#define ALLOCATE_MONOMIAL(byte_len) static_cast<monomial>(alloca(byte_len))
66#define MONOMIAL_BYTE_SIZE(mon_size) \
67 static_cast<int>((sizeof(int) * (mon_size)))
155 const std::vector<std::string> names,
156 const std::vector<int> degs,
157 const std::vector<int> hefts);
162 const std::vector<std::string> &names,
163 const std::vector<int> °s,
164 const std::vector<int> &hefts);
228 for (
int i = nslots; i != 0; --i)
230 if (*m > *n)
return GT;
231 if (*m < *n)
return LT;
254 if (i == 0)
return EQ;
257 if (*m > *n)
return GT;
258 if (*m < *n)
return LT;
259 if (--i == 0)
return EQ;
297 for (
int i=0; i<
n_vars(); i++)
299 if (expvector[i] != 0)
varpower::ConstExponents const_varpower
Variable-length sparse (variable, exponent) encoding of monomials.
exponents::ConstExponents const_exponents
exponents::Exponents exponents_t
Dense exponent-vector template [e_0, ..., e_{nvars-1}] for monomial operations.
bool component_up_
indicates whether free module components are ordered lexicographically
int numNonTermOrderVariables() const
T degree_weights(const_monomial m, const std::vector< T > &wts) const
void gcd(const_monomial m, const_monomial n, monomial result) const
static void set_trivial_monoid_degree_ring(const PolynomialRing *DR)
void elem_text_out(buffer &o, const_monomial m, bool p_one=true) const
void to_expvector(const_monomial m, exponents_t result_exp) const
bool in_subring(int nslots, const_monomial m) const
const std::vector< int > mDegrees
length mVariableCount * (length of a single degree vector)
const PolynomialRing * get_degree_ring() const
bool is_invertible(const_monomial m) const
void lcm(const_monomial m, const_monomial n, monomial result) const
void power(const_monomial m, int n, monomial result) const
bool divides_partial_order(const_monomial m, const_monomial n) const
int monomial_size() const
std::vector< bool > mLaurentVariablesPredicate
These are the variables which can have negative exponents.
int primary_degree_of_var(int v) const
void to_varpower(const_monomial m, gc_vector< int > &result_vp) const
const Monoid * mDegreeMonoid
long first_weight_value(const_monomial m) const
int compare(const_monomial m, const_monomial n) const
void text_out(buffer &o) const
bool primary_degrees_of_vars_positive() const
void multi_degree(const_monomial m, monomial result) const
void degree_of_expvector(const T *expvector, monomial result) const
gc_vector< int > nslots_
number of slots per monomial order block
void from_varpower(const_varpower vp, monomial result) const
std::vector< bool > laurentVariables() const
const_monomial degree_of_var(int v) const
bool is_one(const_monomial m) const
std::vector< int > getPrimaryDegreeVector() const
bool has_monomials_lt_one() const
monomial make_one() const
const PolynomialRing * mDegreeRing
const std::vector< int > & get_heft_vector() const
unsigned int computeHashValue(const_monomial m) const
const std::vector< int > & primary_degree_of_vars() const
int n_invertible_vars_
number of invertible variables
static Monoid * create(const MonomialOrdering *mo, const PolynomialRing *DR, const std::vector< std::string > &names, const std::vector< int > °s, const std::vector< int > &hefts)
void set_degrees()
sets mHeftDegrees and mDegreeOfVar
int compare(int nslots, const_monomial m, const_monomial n) const
void remove(monomial d) const
void monsyz(const_monomial m, const_monomial n, monomial result_sm, monomial result_sn) const
bool divides(const_monomial m, const_monomial n) const
const int mVariableCount
number of variables
int simple_degree(const_monomial m) const
const MonomialOrdering * mo_
the monomial ordering of the variables
const MonomialOrdering * getMonomialOrdering() const
void set_overflow_flags()
used for preventing overflows
bool is_equal(const_monomial m1, const_monomial m2) const
int primary_degree(const_monomial m) const
void degree_of_varpower(const_varpower vp, monomial result) const
const Monoid * degree_monoid() const
std::vector< int > mHeftDegrees
length mVariableCount
void one(monomial result) const
int numInvertibleVariables() const
enum Monoid::overflow_type * overflow
int partial_compare(int num, const_monomial m, const_monomial n) const
gc_vector< const_monomial > mDegreeOfVar
std::vector< int > local_vars
These are the variables which are < 1 in the monomial order.
std::vector< int > getFirstWeightVector() const
void copy(const_monomial m, monomial result) const
bool weight_value_exists() const
void mult(const_monomial m, const_monomial n, monomial result) const
int n_before_component_
indicates where the free module components are in the monomial order
void divide(const_monomial m, const_monomial n, monomial result) const
static Monoid * get_trivial_monoid()
const std::vector< int > mHeftVector
length of a single degree vector
bool isLaurentVariable(int i) const
const std::vector< std::string > mVariableNames
names of variables
static Monoid * trivial_monoid
the trivial monoid
int monomial_size_
size of an encoded monomial
MonomialOrder * monorder_
monomial make_new(const_monomial d) const
void from_expvector(const_exponents exp, monomial result) const
int n_slots(int nparts) const
Abstract base for the engine's polynomial-ring hierarchy.
EngineObject / MutableEngineObject — shared bases that supply the hash an M2 interpreter object expec...
const int * const_monomial
Internal (runtime) form of a monomial ordering.
VALGRIND_MAKE_MEM_DEFINED & result(result)
const int * const_monomial
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.
Front-end-side description of a monomial ordering as a list of mon_part blocks.
Engine-wide stylistic constants: LT / EQ / GT codes, INTSIZE, GEOHEAP_SIZE.