LAMA
|
00001 00033 #ifndef LAMA_OmegaSolverCreator_HPP_ 00034 #define LAMA_OmegaSolverCreator_HPP_ 00035 00036 // for dll_import 00037 #include <lama/config.hpp> 00038 00039 // others 00040 #include <lama/solver/OmegaSolver.hpp> 00041 00042 // base classes 00043 #include <lama/solver/creator/IterativeSolverCreator.hpp> 00044 00045 //qi, phoenix, fusion 00046 #include <boost/config/warning_disable.hpp> 00047 #include <boost/spirit/include/qi.hpp> 00048 #include <boost/spirit/include/phoenix_core.hpp> 00049 #include <boost/spirit/include/phoenix_operator.hpp> 00050 #include <boost/spirit/include/phoenix_fusion.hpp> 00051 #include <boost/spirit/include/phoenix_stl.hpp> 00052 #include <boost/spirit/home/phoenix/bind/bind_member_function.hpp> 00053 #include <boost/fusion/include/adapt_struct.hpp> 00054 #include <boost/variant/recursive_variant.hpp> 00055 00056 namespace lama 00057 { 00058 00059 namespace phoenix = boost::phoenix; 00060 namespace qi = boost::spirit::qi; 00061 namespace ascii = boost::spirit::ascii; 00062 00063 class LAMA_DLL_IMPORTEXPORT OmegaSolverCreator : public IterativeSolverCreator 00064 { 00065 public: 00066 using IterativeSolverCreator::RuleType; 00067 00068 static const std::string& id(); 00069 00070 virtual ~OmegaSolverCreator(); 00071 00072 virtual RuleType& getCreatorRule() = 0; 00073 00074 typedef void(lama::OmegaSolver::*OmegaSolverFunc)(Scalar); 00075 protected: 00076 OmegaSolverCreator(); 00077 00078 using SolverCreator::InternRuleType; 00079 using SolverCreator::mRScalar; 00080 00081 qi::rule<std::string::const_iterator, void( Solver* ), ascii::space_type> mROmegaSolver; 00082 00083 using IterativeSolverCreator::mRIterativeSolver; 00084 00085 private: 00086 00087 LAMA_LOG_DECL_STATIC_LOGGER(logger); 00088 }; 00089 00090 } // namespace lama 00091 00092 #endif // LAMA_OmegaSolverCreator_HPP_