本文整理汇总了C++中ExpressionNode::getType方法的典型用法代码示例。如果您正苦于以下问题:C++ ExpressionNode::getType方法的具体用法?C++ ExpressionNode::getType怎么用?C++ ExpressionNode::getType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExpressionNode
的用法示例。
在下文中一共展示了ExpressionNode::getType方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: simplify
ExpressionNode Multiplication::simplify(ExpressionNode& left, ExpressionNode& right) const
{
// unimplemented
ExpressionNode newNode(&MULTIPLICATION);
if (left.getType() == NUMBER && right.getType() == NUMBER)
{
return ExpressionNode(left.getValue() * right.getValue());
}
newNode.appendChild(left);
newNode.appendChild(right);
return newNode;
}
示例2: operation
ExpressionNode::ExpressionNode(const ExpressionNode & other): //copy constructor
type(other.getType()), operation(other.getOperation()), activechildren(other.getOperation()->getArity()),
right(0), firstChild(0), variable(other.getVariable()), value(other.getValue())
{
setRight(other.getRight());
setFirstChild(other.getFirstChild()); // automatically also sets other children
}
示例3: replace
void ExpressionNode::replace(const ExpressionNode &newNode)
{
std::clog << "...<replacing> " << *this << " with " << newNode << std::endl;
//ExpressionNode *curOld;
//ExpressionNode *curNew;
setType(newNode.getType());
setOperation(newNode.getOperation());
// setRight(newNode.getRight());
setFirstChild(newNode.getFirstChild()); // automatically also sets other children
//curOld = firstChild;
//curNew = newNode.getFirstChild();
//while (curNew != 0)
//{
//curOld->setRight(curNew->getRight());
//curOld = curOld->getRight();
//curNew = curNew->getRight();
//}
setVariable(newNode.getVariable());
setValue(newNode.getValue());
std::clog << "...</replacing>" << std::endl;
}
示例4:
bool ExpressionNode::operator== (const ExpressionNode& other) const
{
ExpressionNode *selfptr;
ExpressionNode *otherptr;
if (getType() == other.getType() &&
getOperation() == other.getOperation() &&
getVariable() == other.getVariable() &&
getValue() == other.getValue() )
{
selfptr = firstChild;
otherptr = other.getFirstChild();
while (selfptr != 0 && otherptr != 0)
{
if (*selfptr == *otherptr)
{
selfptr = selfptr->getRight();
otherptr = otherptr->getRight();
}
else
{
return false;
}
}
if (selfptr == 0 && otherptr == 0)
{
return true;
}
else
{
assert(selfptr != otherptr);
return false;
}
}
else
{
return false;
}
}
示例5: isCompatible
bool Multiplication::isCompatible(const ExpressionNode& left, const ExpressionNode& right)
{
if (left.getType() == NUMBER && right.getType() == NUMBER)
{
return true;
}
else if (left.getType() == VARIABLE && right.getType() == VARIABLE)
{
if (left.getVariable() == right.getVariable())
{
return true;
}
}
else if (left.getType() == OPERATION)
{
if (left.getOperation() == &ADDITION || left.getOperation() == &SUM)
{
return true;
}
else if (left.getOperation() == &MULTIPLICATION || left.getOperation() == &PRODUCT)
{
return true;
}
}
else if (right.getType() == OPERATION)
{
if (right.getOperation() == &ADDITION || right.getOperation() == &SUM)
{
return true;
}
else if (right.getOperation() == &MULTIPLICATION || right.getOperation() == &PRODUCT)
{
return true;
}
}
return false;
}
示例6: addTerms
ExpressionNode Addition::addTerms(const ExpressionNode& term1, const ExpressionNode& term2) const
{
clog << "checkpoint addTerms" << endl;
Number coefficient1;
Number coefficient2;
const ExpressionNode * varpart1;
const ExpressionNode * varpart2;
ExpressionNode * left;
ExpressionNode * right;
ExpressionNode newRight;
ExpressionNode newCoef;
ExpressionNode newNode;
if (term1.getType() == NUMBER)
{
coefficient1 = term1.getValue();
varpart1 = 0;
}
else if (term1.getType() == OPERATION)
{
if (term1.getOperation() == &MULTIPLICATION)
{
left = term1.getFirstChild();
right = left->getRight();
if (left->getType() == NUMBER)
{
coefficient1 = left->getValue();
varpart1 = right;
}
else if (right->getType() == NUMBER)
{
coefficient1 = right->getValue();
varpart1 = left;
}
else
{
coefficient1 = MULTIPLICATION.getIdentity();
varpart1 = &term1;
}
}
else
{
coefficient1 = MULTIPLICATION.getIdentity();
varpart1 = &term1;
}
}
else // VARIABLE
{
assert(term1.getType() == VARIABLE);
coefficient1 = MULTIPLICATION.getIdentity();
varpart1 = &term1;
}
if (term2.getType() == NUMBER)
{
coefficient2 = term2.getValue();
varpart2 = 0;
}
else if (term2.getType() == OPERATION)
{
if (term2.getOperation() == &MULTIPLICATION)
{
left = term2.getFirstChild();
right = left->getRight();
if (left->getType() == NUMBER)
{
coefficient2 = left->getValue();
varpart2 = right;
}
else if (right->getType() == NUMBER)
{
coefficient2 = right->getValue();
varpart2 = left;
}
else
{
coefficient2 = MULTIPLICATION.getIdentity();
varpart2 = &term2;
}
}
else
{
coefficient2 = MULTIPLICATION.getIdentity();
varpart2 = &term2;
}
}
else // VARIABLE
{
assert(term2.getType() == VARIABLE);
coefficient2 = MULTIPLICATION.getIdentity();
varpart2 = &term2;
}
if (varpart1 != 0 && varpart2 != 0)
{
if (*varpart1 == *varpart2)
{
clog << "addTerms simplify like terms" << endl
<< "coef1: " << coefficient1 << " var1: " << *varpart1 << endl
//.........这里部分代码省略.........
示例7: simplify
ExpressionNode Addition::simplify(ExpressionNode& left, ExpressionNode& right)
{
std::clog << "checkpoint addsimplify" << std::endl;
//simplest case: at least one side is just 0
if (left.getType() == NUMBER && left.getValue().getInt() == 0)
{
return right;
}
else if (right.getType() == NUMBER && right.getValue().getInt() == 0)
{
return left;
}
// for each left term: for each right term: try adding
std::stack <ExpressionNode*> leftNodeStack;
ExpressionNode * currentLeftNode = &left;
bool leftFinished = false;
std::stack <ExpressionNode*> rightNodeStack;
ExpressionNode * currentRightNode = &right;
bool rightFinished = false;
ExpressionNode * tempNodePtr;
ExpressionNode newNode;
while (leftFinished == false)
{
std::clog << "looping left" << std::endl;
if (currentLeftNode->getType() == OPERATION && currentLeftNode->getOperation() == &ADDITION)
{
if (currentLeftNode->getFirstChild() == 0)
{
throw ExpressionNode::WrongArityError();
}
currentLeftNode = currentLeftNode->getFirstChild();
leftNodeStack.push(currentLeftNode);
continue;
}
// leaf term on left tree: traverse right tree
while (rightFinished == false)
{
std::clog << "looping right" << std::endl;
if (currentRightNode->getType() == OPERATION && currentRightNode->getOperation() == &ADDITION)
{
if (currentRightNode->getFirstChild() == 0)
{
throw ExpressionNode::WrongArityError();
}
currentRightNode = currentRightNode->getFirstChild();
rightNodeStack.push(currentRightNode);
continue;
}
std::clog << "checkpoint addsimplify: before isAddable; " << std::endl;
// leaf terms on both sides: attempt adding
if (isAddable(*currentLeftNode, *currentRightNode))
{
std::clog << "checkpoint addsimplify: after isAddable; " << std::endl;
std::clog << *currentLeftNode << " " << *currentRightNode << std::endl;
std::clog << "add testrun: " << addTerms(*currentLeftNode, *currentRightNode);
(*currentLeftNode).replace( addTerms(*currentLeftNode, *currentRightNode) );
std::clog << "checkpoint addsimplify: after addTerms; " << std::endl;
if (currentRightNode == &right)
{
//entire right tree has been assimilated
return left;
}
tempNodePtr = currentRightNode;
currentRightNode = right.findParentOf(*currentRightNode);
right.remove(*tempNodePtr);
}
while (true)
{
if (rightNodeStack.size() == 0)
{
rightFinished = true;
break;
}
currentRightNode = rightNodeStack.top();
rightNodeStack.pop();
if (currentRightNode->getRight() != 0)
{
currentRightNode = currentRightNode->getRight();
rightNodeStack.push(currentRightNode);
break;
}
}
}
while (true)
{
if (leftNodeStack.size() == 0)
{
leftFinished = true;
break;
}
currentLeftNode = leftNodeStack.top();
//.........这里部分代码省略.........