/* * Checks that the second argument of a piecewise returns a boolean * * If not, an error message is logged. */ void PieceBooleanMathCheck::checkPiece (const Model& m, const ASTNode& node, const SBase & sb) { unsigned int numChildren = node.getNumChildren(); unsigned int numPieces = numChildren; if ((numChildren % 2) != 0) numPieces--; for (unsigned int n = 1; n < numPieces; n += 2) { // if we have a mangled node for some reason // usually we have read an incorrect node // need to be sure there is a child // NOTE: piecewise hits this issue because old behaviour // meant it lost the piece and otherwise qualifiers ASTNode * child = node.getChild(n); if (child != NULL) { // need to pass the model here in case we have used a functionDefinition // as the piece child if (!child->returnsBoolean(&m)) { logMathConflict(node, sb); } } } }
/* * Checks that the second argument of a piecewise returns a boolean * * If not, an error message is logged. */ void PieceBooleanMathCheck::checkPiece (const Model&, const ASTNode& node, const SBase & sb) { unsigned int numChildren = node.getNumChildren(); unsigned int numPieces = numChildren; #ifdef LIBSBML_USE_LEGACY_MATH if ((numChildren % 2) != 0) numPieces--; #else numPieces = 2 * node.getNumPiece(); if (numPieces > numChildren) { // the piecewise is not correct return; } #endif for (unsigned int n = 1; n < numPieces; n += 2) { // if we have a mangled node for some reason // usually we have read an incorrect node // need to be sure there is a child // NOTE: piecewise hits this issue because old behaviour // meant it lost the piece and otherwise qualifiers ASTNode * child = node.getChild(n); if (child != NULL) { if (!child->returnsBoolean()) { logMathConflict(node, sb); } } } }