Frobby 0.9.5
IOHandler.h
Go to the documentation of this file.
1/* Frobby: Software for monomial ideal computations.
2 Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com)
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see http://www.gnu.org/licenses/.
16*/
17#ifndef IO_HANDLER_GUARD
18#define IO_HANDLER_GUARD
19
20#include <vector>
21
22class Term;
23class Scanner;
24class BigIdeal;
25class VarNames;
26class BigTermConsumer;
27class DataType;
30class InputConsumer;
31
41class IOHandler {
42 public:
43 virtual ~IOHandler();
44
46 void readIdeal(Scanner& in, InputConsumer& consumer);
47
49 void readIdeals(Scanner& in, InputConsumer& consumer);
50
51 void readTerm
52 (Scanner& in, const VarNames& names, vector<mpz_class>& term);
53
54 void readPolynomial(Scanner& in, CoefBigTermConsumer& consumer);
55
56 void readSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer);
57
58 void writeTerm
59 (const vector<mpz_class>& term, const VarNames& names, FILE* out);
60
61 bool hasMoreInput(Scanner& in) const;
62
63 const char* getName() const;
64 const char* getDescription() const;
65
66 auto_ptr<BigTermConsumer> createIdealWriter(FILE* out);
67 auto_ptr<BigTermConsumer> createIdealListWriter(FILE* out);
68 auto_ptr<CoefBigTermConsumer> createPolynomialWriter(FILE* out);
69
70 bool supportsInput(const DataType& type) const;
71 bool supportsOutput(const DataType& type) const;
72
73 protected:
74 virtual BigTermConsumer* doCreateIdealWriter(FILE* out) = 0;
76
77 private:
78 virtual const char* doGetName() const = 0;
79 virtual const char* doGetDescription() const = 0;
80
81 virtual void doReadIdeal(Scanner& in, InputConsumer& consumer) = 0;
82 virtual void doReadIdeals(Scanner& in, InputConsumer& consumer) = 0;
83 virtual void doReadTerm(Scanner& in, InputConsumer& consumer) = 0;
84 virtual void doReadPolynomial(Scanner& in, CoefBigTermConsumer& consumer) = 0;
85 virtual void doReadSatBinomIdeal(Scanner& in, SatBinomConsumer& consumer) = 0;
86 virtual void doWriteTerm(const vector<mpz_class>& term,
87 const VarNames& names,
88 FILE* out) = 0;
89 virtual bool doHasMoreInput(Scanner& in) const = 0;
90
91 virtual bool doSupportsInput(const DataType& type) const = 0;
92 virtual bool doSupportsOutput(const DataType& type) const = 0;
93};
94
97auto_ptr<IOHandler> createIOHandler(const string& prefix);
98
102auto_ptr<IOHandler> createOHandler(const string& input, const string& output);
103
105void getIOHandlerNames(vector<string>& names);
106
107void readFrobeniusInstance(Scanner& in, vector<mpz_class>& numbers);
108
111string autoDetectFormat(Scanner& in);
112
117
122
123#endif
auto_ptr< IOHandler > createIOHandler(const string &prefix)
Returns an IOHandler for the format whose name has the given prefix.
void readFrobeniusInstance(Scanner &in, vector< mpz_class > &numbers)
void getIOHandlerNames(vector< string > &names)
Add the name of each fomat to names.
string getFormatNameIndicatingToUseInputFormatAsOutputFormat()
Using the returned string in place of an (output) format name indicates to use the input format as th...
string getFormatNameIndicatingToGuessTheInputFormat()
Using the returned string in place of an (input) format name indicates to guess the format based on w...
auto_ptr< IOHandler > createOHandler(const string &input, const string &output)
Returns an IOHandler for the output format.
string autoDetectFormat(Scanner &in)
Return the format of what in is reading based on the first non-whitespace character.
The intention of this class is to describe the different kinds of mathematical structures that Frobby...
Definition DataType.h:29
An IOHandler implements input and output for some format in such a way that client code does not need...
Definition IOHandler.h:41
virtual void doWriteTerm(const vector< mpz_class > &term, const VarNames &names, FILE *out)=0
virtual void doReadSatBinomIdeal(Scanner &in, SatBinomConsumer &consumer)=0
void readSatBinomIdeal(Scanner &in, SatBinomConsumer &consumer)
Definition IOHandler.cpp:68
void readPolynomial(Scanner &in, CoefBigTermConsumer &consumer)
Definition IOHandler.cpp:64
virtual bool doSupportsInput(const DataType &type) const =0
virtual void doReadIdeals(Scanner &in, InputConsumer &consumer)=0
virtual CoefBigTermConsumer * doCreatePolynomialWriter(FILE *out)=0
void writeTerm(const vector< mpz_class > &term, const VarNames &names, FILE *out)
Definition IOHandler.cpp:72
virtual void doReadPolynomial(Scanner &in, CoefBigTermConsumer &consumer)=0
virtual const char * doGetDescription() const =0
virtual BigTermConsumer * doCreateIdealWriter(FILE *out)=0
void readIdeal(Scanner &in, InputConsumer &consumer)
Read an ideal and feed it to the consumer.
Definition IOHandler.cpp:42
bool supportsInput(const DataType &type) const
auto_ptr< BigTermConsumer > createIdealWriter(FILE *out)
Definition IOHandler.cpp:89
const char * getName() const
Definition IOHandler.cpp:81
auto_ptr< CoefBigTermConsumer > createPolynomialWriter(FILE *out)
virtual bool doSupportsOutput(const DataType &type) const =0
virtual void doReadIdeal(Scanner &in, InputConsumer &consumer)=0
auto_ptr< BigTermConsumer > createIdealListWriter(FILE *out)
Definition IOHandler.cpp:98
virtual const char * doGetName() const =0
const char * getDescription() const
Definition IOHandler.cpp:85
virtual bool doHasMoreInput(Scanner &in) const =0
bool supportsOutput(const DataType &type) const
virtual void doReadTerm(Scanner &in, InputConsumer &consumer)=0
void readTerm(Scanner &in, const VarNames &names, vector< mpz_class > &term)
Definition IOHandler.cpp:51
virtual ~IOHandler()
Definition IOHandler.cpp:39
bool hasMoreInput(Scanner &in) const
Definition IOHandler.cpp:77
void readIdeals(Scanner &in, InputConsumer &consumer)
Read a number of ideals and feed them to the consumer.
Definition IOHandler.cpp:46
This class offers an input interface which is more convenient and for some purposes more efficient th...
Definition Scanner.h:50
Term represents a product of variables which does not include a coefficient.
Definition Term.h:49
Defines the variables of a polynomial ring and facilities IO involving them.
Definition VarNames.h:40