File indexing completed on 2024-04-06 12:01:19
0001 #ifndef CommonTools_Utils_formulaUnaryMinusEvaluator_h
0002 #define CommonTools_Utils_formulaUnaryMinusEvaluator_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include <memory>
0023 #include <functional>
0024
0025
0026 #include "formulaEvaluatorBase.h"
0027
0028
0029
0030 namespace reco {
0031 namespace formula {
0032 class UnaryMinusEvaluator : public EvaluatorBase {
0033 public:
0034 explicit UnaryMinusEvaluator(std::shared_ptr<EvaluatorBase> iArg)
0035 : EvaluatorBase(Precedence::kUnaryMinusOperator), m_arg(std::move(iArg)) {}
0036
0037
0038 double evaluate(double const* iVariables, double const* iParameters) const final {
0039 return -1. * m_arg->evaluate(iVariables, iParameters);
0040 }
0041 std::vector<std::string> abstractSyntaxTree() const final {
0042 auto ret = shiftAST(m_arg->abstractSyntaxTree());
0043 ret.emplace(ret.begin(), "unary minus");
0044 return ret;
0045 }
0046
0047 UnaryMinusEvaluator(const UnaryMinusEvaluator&) = delete;
0048
0049 const UnaryMinusEvaluator& operator=(const UnaryMinusEvaluator&) = delete;
0050
0051 private:
0052
0053 std::shared_ptr<EvaluatorBase> m_arg;
0054 };
0055 }
0056 }
0057
0058 #endif