www.mooseframework.org
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 204 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 223 of file ExpressionBuilder.h.

224  : EBBinaryTermNode(left, right), _type(type){};
EBBinaryTermNode(EBTermNode *left, EBTermNode *right)

Member Function Documentation

◆ clone()

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

Implements ExpressionBuilder::EBTermNode.

Definition at line 225 of file ExpressionBuilder.h.

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

◆ precedence()

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

Implements ExpressionBuilder::EBTermNode.

Definition at line 118 of file ExpressionBuilder.C.

◆ 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 }
virtual int precedence() const =0
const std::string name
Definition: Setup.h:20

◆ 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

Definition at line 199 of file ExpressionBuilder.h.

◆ _right

EBTermNode* ExpressionBuilder::EBBinaryTermNode::_right
protectedinherited

Definition at line 200 of file ExpressionBuilder.h.

◆ _type

NodeType ExpressionBuilder::EBBinaryOpTermNode::_type
protected

Definition at line 234 of file ExpressionBuilder.h.


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