https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Attributes | List of all members
ExpressionBuilder::EBBinaryOpTermNode Class Reference

Node representing a binary operator. More...

#include <ExpressionBuilder.h>

Inheritance diagram for ExpressionBuilder::EBBinaryOpTermNode:
[legend]

Public Types

enum  NodeType {
  ADD , SUB , MUL , DIV ,
  MOD , POW , LESS , GREATER ,
  LESSEQ , GREATEREQ , EQ , NOTEQ
}
 

Public Member Functions

 EBBinaryOpTermNode (EBTermNode *left, EBTermNode *right, NodeType type)
 
virtual EBBinaryOpTermNodeclone () const
 
virtual std::string stringify () const
 
virtual int precedence () const
 
virtual unsigned int substitute (const EBSubstitutionRuleList &rule)
 

Protected Attributes

NodeType _type
 
EBTermNode_left
 
EBTermNode_right
 

Detailed Description

Node representing a binary operator.

Definition at line 206 of file ExpressionBuilder.h.

Member Enumeration Documentation

◆ NodeType

Constructor & Destructor Documentation

◆ EBBinaryOpTermNode()

ExpressionBuilder::EBBinaryOpTermNode::EBBinaryOpTermNode ( EBTermNode left,
EBTermNode right,
NodeType  type 
)
inline

Definition at line 225 of file ExpressionBuilder.h.

226 : EBBinaryTermNode(left, right), _type(type)
227 {
228 }
EBBinaryTermNode(EBTermNode *left, EBTermNode *right)

Member Function Documentation

◆ clone()

virtual EBBinaryOpTermNode * ExpressionBuilder::EBBinaryOpTermNode::clone ( ) const
inlinevirtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 229 of file ExpressionBuilder.h.

230 {
231 return new EBBinaryOpTermNode(_left->clone(), _right->clone(), _type);
232 };
EBBinaryOpTermNode(EBTermNode *left, EBTermNode *right, NodeType type)
virtual EBTermNode * clone() const =0

◆ precedence()

int ExpressionBuilder::EBBinaryOpTermNode::precedence ( ) const
virtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 118 of file ExpressionBuilder.C.

119{
120 switch (_type)
121 {
122 case ADD:
123 case SUB:
124 return 6;
125 case MUL:
126 case DIV:
127 case MOD:
128 return 5;
129 case POW:
130 return 2;
131 case LESS:
132 case GREATER:
133 case LESSEQ:
134 case GREATEREQ:
135 return 8;
136 case EQ:
137 case NOTEQ:
138 return 9;
139 }
140
141 mooseError("Unknown type.");
142}
void mooseError(Args &&... args)

◆ stringify()

std::string ExpressionBuilder::EBBinaryOpTermNode::stringify ( ) const
virtual

Implements ExpressionBuilder::EBTermNode.

Definition at line 93 of file ExpressionBuilder.C.

94{
95 const char * name[] = {"+", "-", "*", "/", "%", "^", "<", ">", "<=", ">=", "=", "!="};
96 std::ostringstream s;
97
98 if (_left->precedence() > precedence())
99 s << '(' << *_left << ')';
100 else
101 s << *_left;
102
103 s << name[_type];
104
105 // these operators are left associative at equal precedence
106 // (this matters for -,/,&,^ but not for + and *)
107 if (_right->precedence() > precedence() ||
108 (_right->precedence() == precedence() &&
109 (_type == SUB || _type == DIV || _type == MOD || _type == POW)))
110 s << '(' << *_right << ')';
111 else
112 s << *_right;
113
114 return s.str();
115}
const std::string name
Definition Setup.h:21
virtual int precedence() const =0

◆ substitute()

unsigned int ExpressionBuilder::EBBinaryTermNode::substitute ( const EBSubstitutionRuleList rule)
virtualinherited

Reimplemented from ExpressionBuilder::EBTermNode.

Reimplemented in ExpressionBuilder::EBTernaryTermNode.

Definition at line 328 of file ExpressionBuilder.C.

329{
330 unsigned int nrule = rules.size();
331 unsigned int success = 0;
332
333 for (unsigned int i = 0; i < nrule; ++i)
334 {
335 EBTermNode * replace = rules[i]->apply(_left);
336 if (replace != NULL)
337 {
338 delete _left;
339 _left = replace;
340 success = 1;
341 break;
342 }
343 }
344
345 if (success == 0)
346 success += _left->substitute(rules);
347
348 for (unsigned int i = 0; i < nrule; ++i)
349 {
350 EBTermNode * replace = rules[i]->apply(_right);
351 if (replace != NULL)
352 {
353 delete _right;
354 _right = replace;
355 return success + 1;
356 }
357 }
358
359 return success + _right->substitute(rules);
360}
virtual unsigned int substitute(const EBSubstitutionRuleList &)

Member Data Documentation

◆ _left

EBTermNode* ExpressionBuilder::EBBinaryTermNode::_left
protectedinherited

◆ _right

EBTermNode* ExpressionBuilder::EBBinaryTermNode::_right
protectedinherited

◆ _type

NodeType ExpressionBuilder::EBBinaryOpTermNode::_type
protected

Definition at line 238 of file ExpressionBuilder.h.

Referenced by clone().


The documentation for this class was generated from the following files: