BigTermRecorder.cpp
Go to the documentation of this file.
/* Frobby: Software for monomial ideal computations.
Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
*/
#include "stdinc.h"
#include "BigTermRecorder.h"
#include "BigIdeal.h"
#include "Term.h"
#include "TermTranslator.h"
BigTermRecorder::BigTermRecorder():
_ideals(),
_idealsDeleter(_ideals) {
}
void BigTermRecorder::consumeRing(const VarNames& names) {
_names = names;
}
void BigTermRecorder::consume(unique_ptr<BigIdeal> ideal) {
consumeRing(ideal->getNames());
exceptionSafePushBack(_ideals, std::move(ideal));
}
void BigTermRecorder::beginConsuming() {
unique_ptr<BigIdeal> ideal(new BigIdeal(_names));
exceptionSafePushBack(_ideals, std::move(ideal));
}
void BigTermRecorder::consume
(const Term& term, const TermTranslator& translator) {
ASSERT(!_ideals.empty());
BigIdeal& ideal = *(_ideals.back());
ASSERT(term.getVarCount() == ideal.getVarCount());
ASSERT(translator.getVarCount() == ideal.getVarCount());
ideal.newLastTerm();
size_t varCount = ideal.getVarCount();
for (size_t var = 0; var < varCount; ++var)
ideal.getLastTermExponentRef(var) = translator.getExponent(var, term);
}
void BigTermRecorder::consume(const vector<mpz_class>& term) {
ASSERT(!_ideals.empty());
BigIdeal& ideal = *(_ideals.back());
ideal.newLastTerm();
size_t varCount = ideal.getVarCount();
for (size_t var = 0; var < varCount; ++var)
ideal.getLastTermExponentRef(var) = term[var];
}
void BigTermRecorder::doneConsuming() {
}
bool BigTermRecorder::empty() const {
return _ideals.empty();
}
unique_ptr<BigIdeal> BigTermRecorder::releaseIdeal() {
ASSERT(!empty());
unique_ptr<BigIdeal> ideal(_ideals.front());
_ideals.pop_front();
return ideal;
}
const VarNames& BigTermRecorder::getRing() {
return _names;
}
BigIdeal.h
BigTermRecorder.h
exceptionSafePushBack
void exceptionSafePushBack(Container &container, unique_ptr< Element > pointer)
Definition ElementDeleter.h:129
TermTranslator.h
Term.h
BigIdeal
Definition BigIdeal.h:27
BigIdeal::newLastTerm
void newLastTerm()
Definition BigIdeal.cpp:104
BigIdeal::getLastTermExponentRef
mpz_class & getLastTermExponentRef(size_t var)
Definition BigIdeal.h:126
BigIdeal::getVarCount
size_t getVarCount() const
Definition BigIdeal.h:148
BigTermRecorder::_idealsDeleter
ElementDeleter< list< BigIdeal * > > _idealsDeleter
Definition BigTermRecorder.h:57
BigTermRecorder::BigTermRecorder
BigTermRecorder()
Definition BigTermRecorder.cpp:24
BigTermRecorder::_names
VarNames _names
Definition BigTermRecorder.h:54
BigTermRecorder::empty
bool empty() const
Definition BigTermRecorder.cpp:70
BigTermRecorder::releaseIdeal
unique_ptr< BigIdeal > releaseIdeal()
Definition BigTermRecorder.cpp:74
BigTermRecorder::consumeRing
virtual void consumeRing(const VarNames &names)
Tell the consumer which ring is being used.
Definition BigTermRecorder.cpp:29
BigTermRecorder::getRing
const VarNames & getRing()
Definition BigTermRecorder.cpp:81
BigTermRecorder::_ideals
list< BigIdeal * > _ideals
Definition BigTermRecorder.h:56
BigTermRecorder::doneConsuming
virtual void doneConsuming()
Must be called once after each time beginConsuming has been called.
Definition BigTermRecorder.cpp:67
BigTermRecorder::beginConsuming
virtual void beginConsuming()
Tell the consumer to begin consuming an ideal.
Definition BigTermRecorder.cpp:38
BigTermRecorder::consume
virtual void consume(const Term &term, const TermTranslator &translator)
Definition BigTermRecorder.cpp:44
TermTranslator
TermTranslator handles translation between terms whose exponents are infinite precision integers and ...
Definition TermTranslator.h:41
TermTranslator::getExponent
const mpz_class & getExponent(size_t variable, Exponent exponent) const
This method translates from IDs to arbitrary precision integers.
Definition TermTranslator.cpp:392
TermTranslator::getVarCount
size_t getVarCount() const
Definition TermTranslator.cpp:447
Term
Term represents a product of variables which does not include a coefficient.
Definition Term.h:49
Term::getVarCount
size_t getVarCount() const
Definition Term.h:85
VarNames
Defines the variables of a polynomial ring and facilities IO involving them.
Definition VarNames.h:40
stdinc.h
This header file includes common definitions and is included as the first line of code in every imple...
ASSERT
#define ASSERT(X)
Definition stdinc.h:86