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