00001 // Emacs -*- C++ -*- 00002 #ifndef ANAPHE_EVALUATOREXPRESSIONBASE 00003 #define ANAPHE_EVALUATOREXPRESSIONBASE 1 00004 00005 #include <string> 00006 #include <map> 00007 00008 namespace Anaphe { 00009 namespace AIDA_Tuple_native { 00010 00011 class IEvaluatorExpressionBase { 00012 public: 00013 virtual ~IEvaluatorExpressionBase() {}; 00014 virtual bool bind( const std::map<std::string, void*>& args ) = 0; 00015 virtual double evaluate() const = 0; 00016 }; 00017 00018 class IEvaluatorExpressionBaseFactory { 00019 public: 00020 virtual ~IEvaluatorExpressionBaseFactory() {}; 00021 virtual IEvaluatorExpressionBase* create() = 0; 00022 }; 00023 00024 template<class T> 00025 class IEvaluatorExpressionFactory : virtual public IEvaluatorExpressionBaseFactory { 00026 public: 00027 IEvaluatorExpressionFactory() {}; 00028 ~IEvaluatorExpressionFactory() {}; 00029 IEvaluatorExpressionBase* create() { return new T; } 00030 }; 00031 00032 } 00033 } 00034 00035 #endif /* ifndef ANAPHE_EVALUATOREXPRESSIONBASE */