Frobby 0.9.5
IOParameters.cpp
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#include "stdinc.h"
18#include "IOParameters.h"
19
20#include "IOFacade.h"
21#include "Macaulay2IOHandler.h"
22#include "Scanner.h"
23#include "error.h"
24#include "FrobbyStringStream.h"
25#include "DataType.h"
26
27IOParameters::IOParameters(const DataType& input, const DataType& output):
28 _inputType(input),
29 _outputType(output),
30 _inputFormat(0),
31 _outputFormat(0) {
32
33 string inputFormats;
34 string outputFormats;
35
36 string defaultOutput;
37 if (!_inputType.isNull())
39 else {
41 ASSERT(createIOHandler(defaultOutput)->supportsOutput(_outputType));
42 }
43
44 vector<string> names;
45 getIOHandlerNames(names);
46 for (vector<string>::const_iterator name = names.begin();
47 name != names.end(); ++name) {
48 auto_ptr<IOHandler> handler = createIOHandler(*name);
49 ASSERT(handler.get() != 0);
50
51 if (handler->supportsInput(_inputType)) {
52 inputFormats += ' ';
53 inputFormats += handler->getName();
54 }
55 if (handler->supportsOutput(_outputType)) {
56 outputFormats += ' ';
57 outputFormats += handler->getName();
58 }
59 }
60
61 if (!_inputType.isNull()) {
62 string desc =
63 "The format used to read the input. "
64 "This action supports the formats:\n " + inputFormats + ".\n"
65 "The format \"" +
67 "\" instructs Frobby to guess the format.\n"
68 "Type 'frobby help io' for more information on input formats.";
69
70 _inputFormat.reset
72 ("iformat", desc.c_str(),
75 }
76
77 if (!output.isNull()) {
78 string desc =
79 "The format used to write the output. "
80 "This action supports the formats:\n " + outputFormats + ".\n";
81 if (!_inputType.isNull()) {
82 desc +=
83 "The format \"" +
85 + "\" instructs Frobby to use the input format.\n";
86 }
87 desc += "Type 'frobby help io' for more information on output formats.";
88
89 _outputFormat.reset
90 (new StringParameter("oformat", desc.c_str(), defaultOutput));
92 }
93}
94
95void IOParameters::setOutputFormat(const string& format) {
97 ASSERT(_outputFormat.get() != 0);
98
99 *_outputFormat = format;
100}
101
102void IOParameters::setInputFormat(const string& format) {
104
105 *_inputFormat = format;
106}
107
108const string& IOParameters::getInputFormat() const {
110 ASSERT(_inputFormat.get() != 0);
111
112 return *_inputFormat;
113}
114
115const string& IOParameters::getOutputFormat() const {
117 ASSERT(_outputFormat.get() != 0);
118
119 if (!_inputType.isNull() &&
120 _outputFormat->getValue() ==
122 ASSERT(_inputFormat.get() != 0);
123 return *_inputFormat;
124 }
125
126 return *_outputFormat;
127}
128
129auto_ptr<IOHandler> IOParameters::createInputHandler() const {
130 auto_ptr<IOHandler> handler(createIOHandler(getInputFormat()));
131 ASSERT(handler.get() != 0);
132 return handler;
133}
134
135auto_ptr<IOHandler> IOParameters::createOutputHandler() const {
136 auto_ptr<IOHandler> handler(createIOHandler(getOutputFormat()));
137 ASSERT(handler.get() != 0);
138 return handler;
139}
140
153
155 IOFacade facade(false);
156
157 if (!_inputType.isNull()) {
158 auto_ptr<IOHandler> handler(createIOHandler(getInputFormat()));
159
160 if (!handler->supportsInput(_inputType)) {
161 FrobbyStringStream errorMsg;
162 errorMsg << "The "
163 << handler->getName()
164 << " format does not support input of "
166 << '.';
167 reportError(errorMsg);
168 }
169 }
170
171 if (!_outputType.isNull()) {
172 auto_ptr<IOHandler> handler(createIOHandler(getOutputFormat()));
173 /*
174 if (!handler->supportsOutput(_outputType)) {
175 FrobbyStringStream errorMsg;
176 errorMsg << "The "
177 << handler->getName()
178 << " format does not support output of "
179 << _outputType.getName()
180 << '.';
181 reportError(errorMsg);
182 }
183 */
184 }
185}
auto_ptr< IOHandler > createIOHandler(const string &prefix)
Returns an IOHandler for the format whose name has the given prefix.
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...
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
const char * getName() const
Returns the name of the structure.
Definition DataType.cpp:24
bool isNull() const
Returns true if this object was returned by getNullType().
Definition DataType.cpp:28
A replacement for stringstream.
A facade for input and output of mathematical objects.
Definition IOFacade.h:39
void setOutputFormat(const string &format)
const string & getOutputFormat() const
void autoDetectInputFormat(Scanner &in)
If using the input format, this must be called before validating the ideals, since the auto detect fo...
IOParameters(const DataType &input, const DataType &output)
auto_ptr< IOHandler > createOutputHandler() const
auto_ptr< StringParameter > _inputFormat
const string & getInputFormat() const
void setInputFormat(const string &format)
auto_ptr< IOHandler > createInputHandler() const
auto_ptr< StringParameter > _outputFormat
const DataType & _inputType
const DataType & _outputType
void validateFormats() const
static const char * staticGetName()
void addParameter(Parameter *parameter)
This class offers an input interface which is more convenient and for some purposes more efficient th...
Definition Scanner.h:50
const string & getFormat() const
Definition Scanner.h:61
void setFormat(const string &format)
Definition Scanner.h:62
void reportError(const string &errorMsg)
Definition error.cpp:23
This header file includes common definitions and is included as the first line of code in every imple...
#define ASSERT(X)
Definition stdinc.h:86