67 for (;
it != end; ++
it) {
68 if ((*
it)[1] < (*
last)[1]) {
110 for (
size_t var = 0; var <
_varCount; ++var)
111 if (lcm[var] > lcm[
maxVar])
205 fprintf(
out,
"NODE (pivot=%lu^%lu, varCount = %lu\n",
242 if (distance(begin, end) < 1000 ||
_varCount == 0)
245 vector<Exponent*>
terms;
247 terms.reserve(distance(begin, end));
269 for (
size_t var = 0; var <
_varCount; ++var) {
270 if (colon[var] >= (*
it)[var]) {
277 (*
it)[var] -= colon[var];
309 if (distance(begin, end) < 1000 ||
_varCount == 0) {
318 vector<Exponent*>
terms(begin, end);
330 for (; begin != end; ++begin)
338 for (; begin != end; ++begin)
362 }
else if ((*
it)[var] == 0) {
void swap(HilbertSlice &a, HilbertSlice &b)
TermIterator simpleMinimize(TermIterator begin, TermIterator end, size_t varCount)
TermIterator twoVarMinimize(TermIterator begin, TermIterator end)
void nameFactoryRegister(NameFactory< AbstractProduct > &factory)
Registers the string returned by ConcreteProduct::getStaticName() to a function that default-construc...
A predicate that sorts terms according to lexicographic order.
bool isMinimallyGenerated(const_iterator begin, const_iterator end)
pair< iterator, bool > colonReminimize(iterator begin, iterator end, const Exponent *colon)
vector< Exponent * >::iterator iterator
iterator minimize(iterator begin, iterator end) const
bool dominatesAny(iterator begin, iterator end, const Exponent *term)
vector< Exponent * >::const_iterator const_iterator
bool dividesAny(iterator begin, iterator end, const Exponent *term)
A predicate that sorts terms in weakly descending order according to degree of the specified variable...
Term represents a product of variables which does not include a coefficient.
static bool dominates(const Exponent *a, const Exponent *b, size_t varCount)
Returns whether a dominates b, i.e. whether b divides a.
static void print(FILE *file, const Exponent *e, size_t varCount)
Writes e to file in a format suitable for debug output.
size_t getFirstNonZeroExponent() const
size_t getSizeOfSupport() const
static bool divides(const Exponent *a, const Exponent *b, size_t varCount)
Returns whether a divides b.
vector< Exponent * >::iterator iterator
TreeNode(iterator begin, iterator end, size_t varCount)
bool isRedundant(const Exponent *term)
void collect(vector< Exponent * > &terms)