37 namespace S = Singular;
93 const vector<mpz_class>& term,
108 "Format understandable by the program Singular.") {
137 vector<mpz_class>& term) {
156 names.addVarSyntaxCheckUnique(
in,
in.readIdentifier());
157 }
while (
in.match(
','));
168 if (
names.getVarCount() != 1 ||
169 names.getName(0) !=
string(
"dummy")) {
172 "A singular ring with no actual variables must have a single "
173 "place-holder variable named \"dummy\", and in this case ";
174 if (
names.getVarCount() != 1)
176 <<
" place-holder variables.";
178 errorMsg <<
"it has the name \"" <<
names.getName(0) <<
"\".";
183 }
else if (!
in.match(
'0')) {
192 return in.peek(
'r') ||
in.peek(
'R');
198 vector<mpz_class> term(
names.getVarCount());
204 if (!
in.match(
'0')) {
208 }
while (
in.match(
','));
223 if (!
in.match(
'0')) {
226 }
while (
in.match(
','));
237 vector<mpz_class> term(
names.getVarCount());
250 }
while (!
in.match(
';'));
255 if (
names.getVarCount() == 0)
256 fputs(
"ring R = 0, (dummy), lp;\nint noVars = 1;\n",
out);
260 const char*
pre =
"";
261 for (
unsigned int i = 0;
i <
names.getVarCount(); ++
i) {
266 fputs(
"), lp;\nint noVars = 0;\n",
out);
void nameFactoryRegister(NameFactory< AbstractProduct > &factory)
Registers the string returned by ConcreteProduct::getStaticName() to a function that default-construc...
static const DataType & getMonomialIdealListType()
Returns the one and only instance for monomial ideal lists.
static const DataType & getMonomialIdealType()
Returns the one and only instance for monomial ideals.
static const DataType & getPolynomialType()
Returns the one and only instance for polynomials.
A replacement for stringstream.
void readTerm(Scanner &in, const VarNames &names, vector< mpz_class > &term)
This class contains further functionality that makes it more convenient to derive from than IOHandler...
void registerInput(const DataType &type)
Specify that input of the argument type is supported.
void registerOutput(const DataType &type)
Specify that output of the argument type is supported.
const VarNames & getNames()
const VarNames & getNames() const
virtual void doReadBarePolynomial(Scanner &in, const VarNames &names, CoefBigTermConsumer &consumer)
virtual void doReadBareIdeal(Scanner &in, const VarNames &names, BigTermConsumer &consumer)
virtual bool doPeekRing(Scanner &in)
virtual CoefBigTermConsumer * doCreatePolynomialWriter(FILE *out)
virtual BigTermConsumer * doCreateIdealWriter(FILE *out)
virtual void doReadRing(Scanner &in, VarNames &names)
virtual void doReadTerm(Scanner &in, const VarNames &names, vector< mpz_class > &term)
virtual void doWriteTerm(const vector< mpz_class > &term, const VarNames &names, FILE *out)
static const char * staticGetName()
virtual void doWriteFooter(bool wasZeroIdeal)
SingularIdealWriter(FILE *out)
virtual void doWriteTerm(const vector< mpz_class > &term, bool first)
virtual void doWriteTerm(const Term &term, const TermTranslator &translator, bool first)
virtual void doWriteEmptyList()
virtual void doWriteHeader(bool first)
SingularPolyWriter(FILE *out)
virtual void doWriteHeader()
virtual void doWriteTerm(const mpz_class &coef, const Term &term, const TermTranslator &translator, bool firstGenerator)
virtual void doWriteTerm(const mpz_class &coef, const vector< mpz_class > &term, bool firstGenerator)
virtual void doWriteFooter(bool wasZero)
This class offers an input interface which is more convenient and for some purposes more efficient th...
TermTranslator handles translation between terms whose exponents are infinite precision integers and ...
Term represents a product of variables which does not include a coefficient.
Defines the variables of a polynomial ring and facilities IO involving them.
void reportSyntaxError(const Scanner &scanner, const string &errorMsg)
void writeRing(const VarNames &names, FILE *out)
void writeCoefTermProduct(const mpz_class &coef, const Term &term, const TermTranslator &translator, bool hidePlus, FILE *out)
void readCoefTerm(BigPolynomial &polynomial, bool firstTerm, Scanner &in)
void readTermProduct(Scanner &in, const VarNames &names, vector< mpz_class > &term)
void writeTermProduct(const Term &term, const TermTranslator &translator, FILE *out)