11#define MAX_VAR 2147483647
12#define MIN_EXP -2147483647
13#define MAX_EXP 2147483647
19 ERROR(
"Monomial expects variable number in range 0..%d",
MAX_VAR);
22 if (e < MIN_EXP || e >
MAX_EXP || e == 0)
24 ERROR(
"Monomial expects non-zero exponents in range %d..%d",
37 int *result_vp =
result.data();
38 *result_vp++ =
result.size();
39 int *melems = m->array;
41 for (
int i = 0; i < m->len; i += 2)
56 for (
int i = 0; i < len; i++)
result->array[i] = *vp++;
63 for (
int j = 0; j < n; j++)
result[j] = 0;
77 for (
int i = 0; i < n; i++)
80 result.resize(2 * len + 1);
81 Exponents result_vp =
result.data();
82 *result_vp++ =
result.size();
83 for (
int i = n - 1; i >= 0; i--)
104 int va = (i.
valid() ? i.
var() : -1);
105 int vb = (j.
valid() ? j.
var() : -1);
137 int newlen =
static_cast<int>(result_vp - orig_result_vp);
138 *orig_result_vp = newlen;
157 int va = (i.
valid() ? i.
var() : -1);
158 int vb = (j.
valid() ? j.
var() : -1);
181 *result_vp++ = ea - eb;
189 *orig_result_vp =
static_cast<int>(result_vp - orig_result_vp);
201 int *result_vp =
result.data();
202 *result_vp++ =
result.size();
205 *result_vp++ = i.var();
216 int va = (i.
valid() ? i.
var() : -1);
217 int vb = (j.
valid() ? j.
var() : -1);
229 if (va == -1)
return true;
232 if (ea < eb)
return false;
248 int *result_vp1 = sa.data();
249 int *result_vp2 = sa.data();
250 int *orig_result_vp1 = result_vp1;
251 int *orig_result_vp2 = result_vp2;
258 int va = (i.
valid() ? i.
var() : -1);
259 int vb = (j.
valid() ? j.
var() : -1);
286 *result_vp1++ = eb - ea;
291 *result_vp2++ = ea - eb;
299 *orig_result_vp1 =
static_cast<int>(result_vp1 - orig_result_vp1);
300 *orig_result_vp2 =
static_cast<int>(result_vp2 - orig_result_vp2);
316 int va = (i.
valid() ? i.
var() : -1);
317 int vb = (j.
valid() ? j.
var() : -1);
339 if (ea < eb) ea = eb;
348 *orig_result_vp =
static_cast<int>(result_vp - orig_result_vp);
356 int *result_vp =
result.data();
357 int *orig_result_vp = result_vp;
364 int va = (i.
valid() ? i.
var() : -1);
365 int vb = (j.
valid() ? j.
var() : -1);
383 if (ea > eb) ea = eb;
392 *orig_result_vp =
static_cast<int>(result_vp - orig_result_vp);
401 int *result_vp =
result.data();
402 int *orig_result_vp = result_vp;
408 int va = (i.
valid() ? i.
var() : -1);
409 int vb = (j.
valid() ? j.
var() : -1);
434 *orig_result_vp =
static_cast<int>(result_vp - orig_result_vp);
443 int *result_vp =
result.data();
444 *result_vp++ =
result.size();
447 *result_vp++ = i.var();
static bool check_var(int v, int e)
ExponentListIterator< int, true > index_varpower
Variable-length sparse (variable, exponent) encoding of monomials.
exponents::Exponents exponents_t
Append-only GC-backed byte buffer used throughout the engine for text output.
gc_vector< Exponent > Vector
static void radical(ConstExponents a, Vector &result)
const Exponent * ConstExponents
static void lcm(ConstExponents a, ConstExponents b, Vector &result)
static void mult(ConstExponents a, ConstExponents b, Vector &result)
static void from_arrayint(M2_arrayint m, Vector &result)
static void quotient(ConstExponents a, ConstExponents b, Vector &result)
static void from_expvector(int n, exponents::ConstExponents a, Vector &result)
static void gcd(ConstExponents a, ConstExponents b, Vector &result)
static void monsyz(ConstExponents a, ConstExponents b, Vector &sa, Vector &sb)
static void erase(ConstExponents a, ConstExponents b, Vector &result)
static bool divides(ConstExponents a, ConstExponents b)
static M2_arrayint to_arrayint(ConstExponents vp)
static const Exponent length(ConstExponents m)
static void to_expvector(int n, ConstExponents a, exponents::Exponents result)
static void power(ConstExponents a, Exponent n, Vector &result)
Engine error-reporting primitives: ERROR, INTERNAL_ERROR, error, error_message.
VALGRIND_MAKE_MEM_DEFINED & result(result)
M2_arrayint M2_makearrayint(int n)
static int32_t mult(int32_t x, int32_t y, const char *msg)
static int32_t add(int32_t x, int32_t y, const char *msg)
Overflow-checked integer arithmetic for monomial exponents and degree sums.