Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/FormatParserStorage.hpp

    r765f16 r7a51be  
    1616#include "CodePatterns/Singleton.hpp"
    1717
    18 #include <iosfwd>
     18#include <string>
    1919#include <map>
    20 #include <string>
    2120#include <vector>
    2221
    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"
    2728
    2829class atom;
    29 class FormatParserInterface;
     30
     31// enum has to be outside of class for operator++ to be possible
     32enum ParserTypes { mpqc, pcp, pdb, tremolo, xyz, ParserTypes_end, ParserTypes_begin = mpqc };
     33typedef enum ParserTypes ParserTypes;
     34
     35ParserTypes &operator++(ParserTypes &type);
    3036
    3137class FormatParserStorage : public Singleton<FormatParserStorage> {
     
    3339public:
    3440
     41  void addMpqc();
     42  void addPcp();
     43  void addPdb();
     44  void addTremolo();
     45  void addXyz();
    3546  bool add(std::string type);
    3647  bool add(ParserTypes type);
     
    4152  bool saveSelectedMolecules(std::ostream &output, std::string suffix);
    4253  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);
    4560
    4661  ParserTypes getTypeFromName(std::string type);
     
    5671 
    5772  // list of allocated parsers
    58   std::vector<FormatParserInterface *> ParserList;
     73  std::vector<FormatParser *> ParserList;
    5974
    6075  // list of allocated strams
     
    7590  std::map<std::string, ParserTypes> ParserLookupNames;
    7691
     92
    7793  // prefix of the filenames to use on save
    7894  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::endl
    92           << "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   }
    10495};
    10596
Note: See TracChangeset for help on using the changeset viewer.