45 const Word* eliminated =
state.getEliminatedVars();
73 for (
size_t var = 0; var <
varCount; ++var) {
82 state.getIdeal().getGenerator(
state.getIdeal().getNonMultiple(var));
88 if (
state.toColonSubState(var))
98 if (
state.toColonSubState(var))
104 state.toColonSubStateNoReminimizeNecessary(var);
118 for (
size_t var = 0; var <
varCount; ++var)
153 state.removeGenerator(index);
160 for (++var; var <
varCount; ++var) {
167 state.removeGenerator(index);
181 const Word* eliminated =
state.getEliminatedVars();
183 for (
size_t var = 0; var <
varCount; ++var) {
190 if (
state.toColonSubState(var))
246 _useUniqueDivSimplify(
true),
247 _useManyDivSimplify(
true),
248 _useAllPairsSimplify(
false),
249 _autoTranspose(
true),
250 _initialAutoTranspose(
true) {
void nameFactoryRegister(NameFactory< AbstractProduct > &factory)
Registers the string returned by ConcreteProduct::getStaticName() to a function that default-construc...
auto_ptr< PivotStrategy > newDefaultPivotStrategy()
static Arena & getArena()
Returns an arena object that can be used for non-thread safe scratch memory after static objects have...
void freeAndAllAfter(void *ptr)
Frees the buffer pointed to by ptr and all not yet freed allocations that have happened since that bu...
void compactEliminatedVariablesIfProfitable()
static EulerState * construct(const Ideal &idealParam, Arena *arena)
Represents a monomial ideal with int exponents.
size_t getGeneratorCount() const
size_t getVarCount() const
Emulates stack allocation of an array using an Arena.
bool _useAllPairsSimplify
EulerState * processState(EulerState &state)
bool _useUniqueDivSimplify
auto_ptr< PivotStrategy > _pivotStrategy
const mpz_class & computeEulerCharacteristic(const Ideal &ideal)
vector< size_t > _divCountsTmp
bool _initialAutoTranspose
bool autoTranspose(EulerState &state)
void computeEuler(EulerState *state)
void getPivot(const EulerState &state, Word *pivot)
A bit packed square free ideal placed in a pre-allocated buffer.
bool hasFullSupport(const Word *ignore) const
Returns true if for every variable it either divides ignore or it divides some (not necessarily minim...
size_t getVarCount() const
Word * getGenerator(size_t index)
Returns the generator at index.
size_t getMultiple(size_t var) const
Returns the index of the first generator that var divides or getGeneratorCount() if no such generator...
size_t getGeneratorCount() const
void getLcmOfNonMultiples(Word *lcm, size_t var) const
Sets lcm to be the least common multple of those generators that var does not divide.
void setExponent(Word *a, size_t var, bool value)
size_t getWordCount(size_t varCount)
bool hasFullSupport(const Word *a, size_t varCount)
void toZeroAtSupport(const Word *a, size_t *inc, size_t varCount)
For every variable var that divides a, set inc[var] to zero.
void lcmInPlace(Word *res, const Word *resEnd, const Word *a)
bool getExponent(const Word *a, size_t var)
returns true if var divides a and false otherwise.
void lcm(Word *res, const Word *resEnd, const Word *a, const Word *b)
void assign(Word *a, const Word *b, size_t varCount)
unsigned long Word
The native unsigned type for the CPU.