LAMA
|
00001 00033 #ifndef LAMA_SOLVERFACTORY_HPP_ 00034 #define LAMA_SOLVERFACTORY_HPP_ 00035 00036 // for dll_import 00037 #include <lama/config.hpp> 00038 00039 // others 00040 #include <lama/solver/creator/SolverCreator.hpp> 00041 #include <lama/solver/Solver.hpp> 00042 00043 // logging 00044 #include <logging/logging.hpp> 00045 00046 namespace lama 00047 { 00048 00049 namespace qi = boost::spirit::qi; 00050 00055 class LAMA_DLL_IMPORTEXPORT SolverFactory 00056 { 00057 public: 00058 typedef qi::symbols<char, SolverCreator::RuleType > TypeToCreatorMap; 00059 typedef qi::symbols<char, SolverPtr> SolverInstanceMap; 00060 00066 static SolverFactory& getFactory(); 00067 00068 virtual ~SolverFactory(); 00069 00076 void addSolverCreator( const std::string& type, SolverCreator::RuleType& SolverCreator ); 00077 00078 const TypeToCreatorMap& getCreatorRuleSymbols(); 00079 00087 bool hasSolver( const std::string& solverName ) const; 00088 00096 SolverPtr getSolver( const std::string& solverName ); 00097 00103 const SolverInstanceMap& getSolverInstanceMap(); 00104 00110 void addSolver( Solver* solver ); 00111 00115 static void release(); 00116 00117 private: 00122 SolverFactory(); 00123 00124 /* solver types holding all possible solver managers to create a solver */ 00125 TypeToCreatorMap mCreatorRuleMap; 00126 00127 /* solver types holding all possible solver managers to create a solver */ 00128 SolverInstanceMap mSolverInstanceMap; 00129 00130 LAMA_LOG_DECL_STATIC_LOGGER(logger); 00131 }; 00132 00133 } 00134 00135 #endif // LAMA_SOLVERFACTORY_HPP_