CMS 3D CMS Logo

formulaFunctionTwoArgsEvaluator.h
Go to the documentation of this file.
1 #ifndef CommonTools_Utils_formulaFunctionTwoArgsEvaluator_h
2 #define CommonTools_Utils_formulaFunctionTwoArgsEvaluator_h
3 // -*- C++ -*-
4 //
5 // Package: CommonTools/Utils
6 // Class : formulaFunctionTwoArgsEvaluator
7 //
16 //
17 // Original Author: Christopher Jones
18 // Created: Wed, 23 Sep 2015 17:41:33 GMT
19 //
20 
21 // system include files
22 #include <memory>
23 #include <functional>
24 
25 // user include files
26 #include "formulaEvaluatorBase.h"
27 
28 // forward declarations
29 
30 namespace reco {
31  namespace formula {
33  {
34 
35  public:
36  template<typename T>
37  FunctionTwoArgsEvaluator(std::shared_ptr<EvaluatorBase> iArg1,
38  std::shared_ptr<EvaluatorBase> iArg2,
39  T iFunc):
40  m_arg1(std::move(iArg1)),
41  m_arg2(std::move(iArg2)),
42  m_function(iFunc)
43  {}
44 
45  // ---------- const member functions ---------------------
46  double evaluate(double const* iVariables, double const* iParameters) const final {
47  return m_function( m_arg1->evaluate(iVariables,iParameters),
48  m_arg2->evaluate(iVariables,iParameters) );
49  }
50  std::vector<std::string> abstractSyntaxTree() const final {
51  auto ret = shiftAST(m_arg1->abstractSyntaxTree());
52  for(auto& v: shiftAST(m_arg2->abstractSyntaxTree()) ) {
53  ret.emplace_back(std::move(v));
54  }
55  ret.emplace(ret.begin(), "func 2 args");
56  return ret;
57  }
58 
59  private:
61 
63 
64  // ---------- member data --------------------------------
65  std::shared_ptr<EvaluatorBase> m_arg1;
66  std::shared_ptr<EvaluatorBase> m_arg2;
67  std::function<double(double,double)> m_function;
68  };
69  }
70 }
71 
72 
73 #endif
double evaluate(double const *iVariables, double const *iParameters) const final
std::vector< std::string > abstractSyntaxTree() const final
std::vector< std::string > shiftAST(std::vector< std::string > child)
const FunctionTwoArgsEvaluator & operator=(const FunctionTwoArgsEvaluator &)=delete
std::function< double(double, double)> m_function
fixed size matrix
long double T
def move(src, dest)
Definition: eostools.py:510
FunctionTwoArgsEvaluator(std::shared_ptr< EvaluatorBase > iArg1, std::shared_ptr< EvaluatorBase > iArg2, T iFunc)