3#ifndef _res_moninfo_sparse_hpp_
4#define _res_moninfo_sparse_hpp_
91 std::unique_ptr<res_monomial_word[]>
127 const std::vector<int>& var_degrees,
128 const std::vector<int>& weightvecs,
147 for (
int i = *src; i > 0; --i) *target++ = *src++;
196 for (
int i =
mNumVars - 1; i >= 0; --i)
200 for (
int j = 0; j < e[i]; j++)
203 result[next_var_slot] = i;
208 result[0] = next_var_slot;
262 const int* mend = m + *m;
265 if (*
p == currentvar)
292 for (
int i = 0; i < e; i++) *r++ = v;
303 if (*m != *n)
return false;
304 for (
int j = *m; j > 0; --j)
305 if (*m++ != *n++)
return false;
315 if (*m != *n)
return false;
316 if (m[1] != n[1])
return false;
318 for (
int j = len; j > 0; --j)
319 if (*m++ != *n++)
return false;
331 for (
int j=
nslots-1; j>0; --j)
332 if (
mask & (*m++))
return false;
350 const int* end1 = a + *a;
351 const int* end2 = b + *b;
355 while (v2 != end2) *res++ = *v2++;
360 while (v1 != end1) *res++ = *v1++;
371 while (v2 != end2) *res++ = *v2++;
381 while (v1 != end1) *res++ = *v1++;
398 if (*m < *n)
return false;
401 const int* vend = n + *n;
403 for (; vn != vend; ++vn)
405 if (*vn > *vm)
return false;
406 if (*vn == *vm) ++vm;
433 int cmp = m[i] - n[i];
434 if (cmp > 0)
return 1;
435 if (cmp < 0)
return -1;
439 const int* mend = m + *m;
440 const int* nend = n + *n;
456 if (n1 == nend)
return 1;
461 if (cmp < 0)
return 1;
462 if (cmp > 0)
return -1;
476 printf(
"compare_schreyer: ");
485 printf(
" tiebreakers: %ld %ld\n", tie1, tie2);
487 int* m1 =
new int[*m + *m0];
488 int* n1 =
new int[*n + *n0];
496 else if (tie1 < tie2)
530 const int* vend = n + *n;
532 for (; vn != vend; ++vn)
534 if (*vn > *vm)
continue;
535 if (*vn == *vm) ++vm;
546 if (*
p == currentvar)
static Exponent weight(ConstExponents m, const std::vector< T > &wts)
unsigned long ncalls_from_expvector
bool from_expvector(res_const_ntuple_monomial e, component_index comp, res_packed_monomial result) const
bool monomial_part_is_equal(res_const_packed_monomial m, res_const_packed_monomial n) const
int degree_of_vp(res_const_varpower_monomial a) const
component_index get_component(res_const_packed_monomial m) const
void unchecked_mult(res_const_packed_monomial a, res_const_packed_monomial b, res_packed_monomial result) const
void showAlpha(res_const_packed_monomial m) const
unsigned long ncalls_from_varpower
unsigned long ncalls_weight
void quotient_as_vp(res_const_packed_monomial m, res_const_packed_monomial n, res_varpower_monomial result) const
ResMonoidSparse(int mNumVars, const std::vector< int > &var_degrees, const std::vector< int > &weightvecs, const MonomialOrderingType moType)
bool to_expvector(res_const_packed_monomial m, res_ntuple_monomial result, component_index &result_comp) const
unsigned long ncalls_compare
bool mult(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
int max_monomial_size() const
unsigned long ncalls_hash_value
void to_varpower_monomial(res_const_packed_monomial m, res_varpower_monomial result) const
int compare_schreyer(res_const_packed_monomial m, res_const_packed_monomial n, res_const_packed_monomial m0, res_const_packed_monomial n0, component_index tie1, component_index tie2) const
int monomial_size(res_const_packed_monomial m) const
void setWeightAndHash(res_packed_monomial result) const
unsigned long ncalls_is_equal_true
unsigned long ncalls_to_varpower
std::vector< int > mVarDegrees
unsigned long ncalls_mult
int skew_mult_sign(const SkewMultiplication *skew, res_const_packed_monomial m, res_const_packed_monomial n) const
unsigned long ncalls_quotient_as_vp
unsigned long ncalls_unneccesary
res_const_packed_monomial const_monomial
bool one(component_index comp, res_packed_monomial result) const
bool divide(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
void variable_as_vp(int v, res_varpower_monomial result) const
unsigned long ncalls_compare_grevlex
std::vector< int > mWeightVectors
unsigned long ncalls_is_equal
int compare_grevlex(res_const_packed_monomial m, res_const_packed_monomial n) const
int skew_vars(const SkewMultiplication *skew, res_const_packed_monomial m, int *skewvars) const
unsigned long ncalls_divide
unsigned long ncalls_to_expvector
void from_varpower_monomial(res_const_varpower_monomial m, component_index comp, res_packed_monomial result) const
void copy(res_const_packed_monomial src, res_packed_monomial target) const
void set_component(component_index component, res_packed_monomial m) const
bool is_equal(res_const_packed_monomial m, res_const_packed_monomial n) const
res_packed_monomial monomial
void dump(std::ostream &o, res_const_packed_monomial mon)
res_monomial_word hash_value(res_const_packed_monomial m) const
unsigned long ncalls_get_component
std::unique_ptr< res_monomial_word[]> hashfcn
int mult_sign(const int *exp1, const int *exp2) const
int skew_vars(const int *exp, int *result) const
Sign-rule helper used by every ring that has a skew-commutative subset of variables (exterior factor,...
VALGRIND_MAKE_MEM_DEFINED & result(result)
ExponentListIterator< myword, false > index_res_varpower_monomial
const res_varpower_word * res_const_varpower_monomial
res_varpower_word * res_varpower_monomial
res_ntuple_word * res_ntuple_monomial
const res_monomial_word * res_const_packed_monomial
res_varpower_monomials::Exponent res_varpower_word
res_monomial_word * res_packed_monomial
const res_ntuple_word * res_const_ntuple_monomial
Typed-monomial vocabulary shared by ResMonoid, ResPolyRing, SchreyerFrame, and F4Res.
SkewMultiplication — configuration object naming the skew-commuting variables of a ring.