source: XIOS/dev/branch_yushan/src/parse_expr/scalar_expr_node.cpp @ 1037

Last change on this file since 1037 was 1037, checked in by yushan, 7 years ago

initialize the branch

File size: 1.9 KB
Line 
1#include "scalar_expr_node.hpp"
2#include "type.hpp"
3#include "variable.hpp"
4#include "operator_expr.hpp"
5
6namespace xios
7{
8  CScalarValExprNode::CScalarValExprNode(const std::string& strVal)
9    : strVal(strVal)
10  { /* Nothing to do */ }
11
12  double CScalarValExprNode::reduce() const
13  {
14    CType<double> val;
15    val.fromString(strVal);
16    return val;
17  }
18
19  CScalarVarExprNode::CScalarVarExprNode(const std::string& varId)
20    : varId(varId)
21  { /* Nothing to do */ }
22
23  double CScalarVarExprNode::reduce() const
24  {
25    if (!CVariable::has(varId)) 
26      ERROR("double CScalarVarExprNode::reduce() const", << "The variable " << varId << " does not exist.");
27
28    return CVariable::get(varId)->getData<double>();
29  }
30
31  CScalarUnaryOpExprNode::CScalarUnaryOpExprNode(const std::string& opId, IScalarExprNode* child)
32    : opId(opId)
33    , child(child)
34  {
35    if (!child)
36      ERROR("CScalarUnaryOpExprNode::CScalarUnaryOpExprNode(const std::string& opId, IScalarExprNode* child)",
37            "Impossible to create the new expression node, an invalid child node was provided.");
38  }
39
40  double CScalarUnaryOpExprNode::reduce() const
41  {
42    COperatorExpr::functionScalar op = operatorExpr.getOpScalar(opId);
43    return op(child->reduce());
44  }
45
46  CScalarBinaryOpExprNode::CScalarBinaryOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2)
47    : child1(child1)
48    , opId(opId)
49    , child2(child2)
50  {
51    if (!child1 || !child2)
52      ERROR("CScalarBinaryOpExprNode::CScalarBinaryOpExprNode(IScalarExprNode* child1, const std::string& opId, IScalarExprNode* child2)",
53            "Impossible to create the new expression node, an invalid child node was provided.");
54  }
55
56  double CScalarBinaryOpExprNode::reduce() const
57  {
58    COperatorExpr::functionScalarScalar op = operatorExpr.getOpScalarScalar(opId);
59    return op(child1->reduce(), child2->reduce());
60  }
61}
Note: See TracBrowser for help on using the repository browser.