- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/FormatParserStorage.hpp
r765f16 r7a51be 16 16 #include "CodePatterns/Singleton.hpp" 17 17 18 #include < iosfwd>18 #include <string> 19 19 #include <map> 20 #include <string>21 20 #include <vector> 22 21 23 #include "CodePatterns/Assert.hpp" 24 #include "CodePatterns/Log.hpp" 25 #include "FormatParser.hpp" 26 #include "ParserTypes.hpp" 22 #include "Parser/FormatParser.hpp" 23 #include "Parser/MpqcParser.hpp" 24 #include "Parser/PcpParser.hpp" 25 #include "Parser/PdbParser.hpp" 26 #include "Parser/TremoloParser.hpp" 27 #include "Parser/XyzParser.hpp" 27 28 28 29 class atom; 29 class FormatParserInterface; 30 31 // enum has to be outside of class for operator++ to be possible 32 enum ParserTypes { mpqc, pcp, pdb, tremolo, xyz, ParserTypes_end, ParserTypes_begin = mpqc }; 33 typedef enum ParserTypes ParserTypes; 34 35 ParserTypes &operator++(ParserTypes &type); 30 36 31 37 class FormatParserStorage : public Singleton<FormatParserStorage> { … … 33 39 public: 34 40 41 void addMpqc(); 42 void addPcp(); 43 void addPdb(); 44 void addTremolo(); 45 void addXyz(); 35 46 bool add(std::string type); 36 47 bool add(ParserTypes type); … … 41 52 bool saveSelectedMolecules(std::ostream &output, std::string suffix); 42 53 bool saveWorld(std::ostream &output, std::string suffix); 43 44 FormatParserInterface &get(ParserTypes _type); 54 MpqcParser &getMpqc(); 55 PcpParser &getPcp(); 56 PdbParser &getPdb(); 57 TremoloParser &getTremolo(); 58 XyzParser &getXyz(); 59 FormatParser &get(enum ParserTypes _type); 45 60 46 61 ParserTypes getTypeFromName(std::string type); … … 56 71 57 72 // list of allocated parsers 58 std::vector<FormatParser Interface*> ParserList;73 std::vector<FormatParser *> ParserList; 59 74 60 75 // list of allocated strams … … 75 90 std::map<std::string, ParserTypes> ParserLookupNames; 76 91 92 77 93 // prefix of the filenames to use on save 78 94 std::string prefix; 79 80 public:81 template<ParserTypes Ptype> void addParser()82 {83 if (!ParserPresent[Ptype]) {84 ParserList[Ptype] = new FormatParser<Ptype>();85 ParserPresent[Ptype] = true;86 } else {87 ASSERT(ParserNames.find(Ptype) != ParserNames.end(),88 "FormatParserStorage::addParser() - ParserNames unknown for type"+toString((size_t)Ptype)+".");89 ASSERT(ParserSuffixes.find(Ptype) != ParserSuffixes.end(),90 "FormatParserStorage::addParser() - ParserSuffixes unknown for type"+toString((size_t)Ptype)+".");91 LOG(2, "INFO: Parser " << ParserNames[Ptype] << " is already present." << std::endl92 << "Note that you don't need to add '-o "93 << ParserSuffixes[Ptype] << "' if the input file is non-empty and of type "94 << ParserSuffixes[Ptype] << "." << std::endl);95 }96 }97 98 template<ParserTypes Ptype> FormatParser<Ptype> &getParser()99 {100 if(!ParserPresent[Ptype])101 addParser< Ptype >();102 return dynamic_cast<FormatParser<Ptype> &>(*ParserList[Ptype]);103 }104 95 }; 105 96
Note:
See TracChangeset
for help on using the changeset viewer.