pelib  2.0.0
include/pelib/AmplOutput.hpp
Go to the documentation of this file.
00001 /*
00002  Copyright 2015 Nicolas Melot
00003 
00004  This file is part of Pelib.
00005 
00006  Pelib is free software: you can redistribute it and/or modify
00007  it under the terms of the GNU General Public License as published by
00008  the Free Software Foundation, either version 3 of the License, or
00009  (at your option) any later version.
00010 
00011  Pelib is distributed in the hope that it will be useful,
00012  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014  GNU General Public License for more details.
00015 
00016  You should have received a copy of the GNU General Public License
00017  along with Pelib. If not, see <http://www.gnu.org/licenses/>.
00018 */
00019 
00020 
00021 #include <iostream>
00022 #include <cstdlib>
00023 #include <fstream>
00024 #include <string>
00025 #include <boost/regex.hpp>
00026 #include <iomanip>
00027 
00028 #include <pelib/AlgebraParser.hpp>
00029 #include <pelib/AlgebraOutput.hpp>
00030 #include <pelib/AmplDataParser.hpp>
00031 #include <pelib/AmplDataOutput.hpp>
00032 #include <pelib/AmplOutputData.hpp>
00033 
00034 #ifndef PELIB_AMPLOUTPUT
00035 #define PELIB_AMPLOUTPUT
00036 
00037 namespace pelib
00038 {
00040         class AmplOutput: public AlgebraParser, public AlgebraOutput
00041         {
00042                 public:
00046                         AmplOutput(std::pair<std::vector<AmplOutputDataParser*>, std::vector<AmplOutputDataOutput*> > handlers);
00047 
00049                         virtual
00050                         ~AmplOutput();
00051                         
00053                         Algebra
00054                         parse(std::istream &data) const;
00055 
00057                         virtual
00058                         void
00059                         dump(std::ostream& o, const Algebra &record) const;
00060 
00062                         virtual
00063                         void
00064                         dump(std::ostream& o, const AlgebraData *data) const;
00065 
00067                         virtual
00068                         void
00069                         dump(std::ostream& o, const AlgebraData &data) const;
00070 
00072                         virtual
00073                         AmplOutput&
00074                         operator=(const AmplOutput &rhs);
00075 
00077                         static std::vector<AmplOutputDataParser*> floatParsers();
00079                         static std::vector<AmplOutputDataOutput*> floatOutputs();
00081                         static std::pair<std::vector<AmplOutputDataParser*>, std::vector<AmplOutputDataOutput*> > floatHandlers();
00082 
00084                         static std::vector<AmplOutputDataParser*> intFloatParsers();
00086                         static std::vector<AmplOutputDataOutput*> intFloatOutputs();
00088                         static std::pair<std::vector<AmplOutputDataParser*>, std::vector<AmplOutputDataOutput*> > intFloatHandlers();
00089 
00091                         static std::vector<AmplOutputDataParser*> stringParsers();
00093                         static std::vector<AmplOutputDataOutput*> stringOutputs();
00095                         static std::pair<std::vector<AmplOutputDataParser*>, std::vector<AmplOutputDataOutput*> > stringHandlers();
00096                 protected:
00097                         std::vector<AmplOutputDataParser*> parsers;
00098                         std::vector<AmplOutputDataOutput*> outputs;
00099 
00101                         void
00102                         deleteParsers();
00103 
00105                         void
00106                         deleteOutputs();
00107                 private:
00108         };
00109 }
00110 
00111 #endif