Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:36:16

0001 #ifndef CommonToolsUtilsExpressionEvaluator_H
0002 #define CommonToolsUtilsExpressionEvaluator_H
0003 
0004 #include <string>
0005 
0006 namespace reco {
0007 
0008   class ExpressionEvaluator {
0009   public:
0010     ExpressionEvaluator(const char* pkg, const char* iname, const std::string& iexpr);
0011     ~ExpressionEvaluator();
0012 
0013     template <typename EXPR, typename... CArgs>
0014     EXPR* expr() const {
0015       typedef EXPR* factoryP();
0016       return reinterpret_cast<factoryP*>(m_expr)();
0017     }
0018 
0019   private:
0020     std::string m_name;
0021     void* m_expr;
0022   };
0023 
0024   template <typename EXPR>
0025   EXPR* expressionEvaluator(const char* pkg, const char* iname, const std::string& iexpr) {
0026     ExpressionEvaluator ee(pkg, iname, iexpr);
0027     return ee.expr<EXPR>();
0028   }
0029 
0030 }  // namespace reco
0031 
0032 #define SINGLE_ARG(...) __VA_ARGS__
0033 #define RECO_XSTR(...) RECO_STR(__VA_ARGS__)
0034 #define RECO_STR(...) #__VA_ARGS__
0035 #define reco_expressionEvaluator(pkg, EXPR, iexpr) reco::expressionEvaluator<EXPR>(pkg, RECO_XSTR(EXPR), iexpr)
0036 
0037 #endif  // CommonToolsUtilsExpressionEvaluator_H