LAMA
/home/brandes/workspace/LAMA/src/lama/solver/creator/SolverFactory.hpp
Go to the documentation of this file.
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_