diff options
author | Stefan Radomski <github@mintwerk.de> | 2017-01-30 23:12:06 (GMT) |
---|---|---|
committer | Stefan Radomski <github@mintwerk.de> | 2017-01-30 23:12:06 (GMT) |
commit | f678b755216a7ea21acec0c8e51a6698719ef776 (patch) | |
tree | 68b9c762d2da279860387d4d4619fda098da980c /src/uscxml/transform | |
parent | 7659ef059fa31c780f7c4e0fb028b9fb5b400030 (diff) | |
download | uscxml-f678b755216a7ea21acec0c8e51a6698719ef776.zip uscxml-f678b755216a7ea21acec0c8e51a6698719ef776.tar.gz uscxml-f678b755216a7ea21acec0c8e51a6698719ef776.tar.bz2 |
Introduced constants for XML names
Diffstat (limited to 'src/uscxml/transform')
-rw-r--r-- | src/uscxml/transform/ChartToC.cpp | 222 | ||||
-rw-r--r-- | src/uscxml/transform/ChartToPromela.cpp | 228 | ||||
-rw-r--r-- | src/uscxml/transform/ChartToVHDL.cpp | 378 | ||||
-rw-r--r-- | src/uscxml/transform/promela/PromelaCodeAnalyzer.cpp | 50 |
4 files changed, 439 insertions, 439 deletions
diff --git a/src/uscxml/transform/ChartToC.cpp b/src/uscxml/transform/ChartToC.cpp index 4cdb3ef..dbd4e8c 100644 --- a/src/uscxml/transform/ChartToC.cpp +++ b/src/uscxml/transform/ChartToC.cpp @@ -84,7 +84,7 @@ void ChartToC::setHistoryCompletion() { parent = history->getParentNode(); } - bool deep = (HAS_ATTR(history, "type") && iequals(ATTR(history, "type"), "deep")); + bool deep = (HAS_ATTR(history, kXMLCharType) && iequals(ATTR(history, kXMLCharType), "deep")); for (auto stateIter = _states.begin(); stateIter != _states.end(); stateIter++) { DOMElement* state = *stateIter; if (state == history) @@ -140,7 +140,7 @@ void ChartToC::resortStates(DOMNode* node) { resortStates(child); if (child->getNodeType() == DOMNode::ELEMENT_NODE && TAGNAME_CAST(child) == XML_PREFIX(node).str() + "history" && - (!HAS_ATTR(element, "type") || iequals(ATTR(element, "type"), "shallow"))) { + (!HAS_ATTR(element, kXMLCharType) || iequals(ATTR(element, kXMLCharType), "shallow"))) { DOMNode* tmp = child->getNextSibling(); if (child != element->getFirstChild()) { element->insertBefore(child, element->getFirstChild()); @@ -157,8 +157,8 @@ void ChartToC::resortStates(DOMNode* node) { resortStates(child); if (child->getNodeType() == DOMNode::ELEMENT_NODE && TAGNAME_CAST(child) == XML_PREFIX(node).str() + "history" && - HAS_ATTR(element, "type") && - iequals(ATTR(element, "type"), "deep")) { + HAS_ATTR(element, kXMLCharType) && + iequals(ATTR(element, kXMLCharType), "deep")) { DOMNode* tmp = child->getNextSibling(); if (child != element->getFirstChild()) { @@ -203,8 +203,8 @@ void ChartToC::setStateCompletion() { if (isParallel(state)) { completion = getChildStates(state); - } else if (HAS_ATTR(state, "initial")) { - completion = getStates(tokenize(ATTR(state, "initial")), _scxml); + } else if (HAS_ATTR(state, kXMLCharInitial)) { + completion = getStates(tokenize(ATTR(state, kXMLCharInitial)), _scxml); } else { std::list<DOMElement*> initElems = DOMUtils::filterChildElements(XML_PREFIX(state).str() + "initial", state); @@ -259,8 +259,8 @@ void ChartToC::prepare() { DOMElement* state(_states[i]); state->setAttribute(X("documentOrder"), X(toStr(i))); if (state->getParentNode()->getNodeType() == DOMNode::ELEMENT_NODE && - HAS_ATTR_CAST(state->getParentNode(), "documentOrder")) { - state->setAttribute(X("parent"), X(ATTR_CAST(state->getParentNode(), "documentOrder"))); + HAS_ATTR_CAST(state->getParentNode(), X("documentOrder"))) { + state->setAttribute(X("parent"), X(ATTR_CAST(state->getParentNode(), X("documentOrder")))); } // set the states' children and whether it has a history @@ -302,8 +302,8 @@ void ChartToC::prepare() { DOMElement* transition = *transIter; transition->setAttribute(X("documentOrder"), X(toStr(index))); if (transition->getParentNode()->getNodeType() == DOMNode::ELEMENT_NODE && - HAS_ATTR_CAST(transition->getParentNode(), "documentOrder")) { - transition->setAttribute(X("source"), X(ATTR_CAST(transition->getParentNode(), "documentOrder"))); + HAS_ATTR_CAST(transition->getParentNode(), X("documentOrder"))) { + transition->setAttribute(X("source"), X(ATTR_CAST(transition->getParentNode(), X("documentOrder")))); } } @@ -355,15 +355,15 @@ void ChartToC::prepare() { transition->setAttribute(X("conflictBools"), X(conflictBools)); // and target - if (HAS_ATTR(transition, "target")) { - std::list<std::string> targets = tokenize(ATTR(transition, "target")); + if (HAS_ATTR(transition, kXMLCharTarget)) { + std::list<std::string> targets = tokenize(ATTR(transition, kXMLCharTarget)); std::string targetBools; for (size_t j = 0; j < _states.size(); j++) { DOMElement* state(_states[j]); - if (HAS_ATTR(state, "id") && - std::find(targets.begin(), targets.end(), escape(ATTR(state, "id"))) != targets.end()) { + if (HAS_ATTR(state, kXMLCharId) && + std::find(targets.begin(), targets.end(), escape(ATTR(state, kXMLCharId))) != targets.end()) { targetBools += "1"; } else { targetBools += "0"; @@ -469,15 +469,15 @@ void ChartToC::findNestedMachines() { if(!areFromSameMachine(invoke, _scxml)) continue; - if (HAS_ATTR(invoke, "type") && - ATTR(invoke, "type") != "scxml" && - ATTR(invoke, "type") != "http://www.w3.org/TR/scxml/") + if (HAS_ATTR(invoke, kXMLCharType) && + ATTR(invoke, kXMLCharType) != "scxml" && + ATTR(invoke, kXMLCharType) != "http://www.w3.org/TR/scxml/") continue; ChartToC* c2c = NULL; - if (HAS_ATTR(invoke, "src")) { + if (HAS_ATTR(invoke, kXMLCharSource)) { - URL srcURL(ATTR(invoke, "src")); + URL srcURL(ATTR(invoke, kXMLCharSource)); if (!srcURL.isAbsolute()) { srcURL = URL::resolve(srcURL, _baseURL); } @@ -1156,7 +1156,7 @@ void ChartToC::writeExecContent(std::ostream& stream) { size_t j = 0; for (auto iter = invokes.begin(); iter != invokes.end(); iter++, j++) { DOMElement* invoke = *iter; - stream << " ctx->invoke(ctx, s, &" << _prefix << "_elem_invokes[" << ATTR(invoke, "documentOrder") << "], uninvoke);" << std::endl; + stream << " ctx->invoke(ctx, s, &" << _prefix << "_elem_invokes[" << ATTR(invoke, X("documentOrder")) << "], uninvoke);" << std::endl; stream << std::endl; } stream << " return USCXML_ERR_OK;" << std::endl; @@ -1169,13 +1169,13 @@ void ChartToC::writeExecContent(std::ostream& stream) { DOMElement* transition(_transitions[i]); std::list<DOMNode*> execContent = DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition); - if (HAS_ATTR(transition, "cond")) { + if (HAS_ATTR(transition, kXMLCharCond)) { stream << "static int " << _prefix << "_" << DOMUtils::idForNode(transition) << "_is_enabled(const uscxml_ctx* ctx, const uscxml_transition* transition) {" << std::endl; - if (HAS_ATTR(_scxml, "datamodel") && ATTR(_scxml, "datamodel") == "native") { - stream << " return (" << ATTR(transition, "cond") << ");" << std::endl; + if (HAS_ATTR(_scxml, kXMLCharDataModel) && ATTR(_scxml, kXMLCharDataModel) == "native") { + stream << " return (" << ATTR(transition, kXMLCharCond) << ");" << std::endl; } else { stream << " if likely(ctx->is_true != NULL) {" << std::endl; - stream << " return (ctx->is_true(ctx, \"" << escape(ATTR(transition, "cond")) << "\"));" << std::endl; + stream << " return (ctx->is_true(ctx, \"" << escape(ATTR(transition, kXMLCharCond)) << "\"));" << std::endl; stream << " }" << std::endl; stream << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; } @@ -1205,7 +1205,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ if (node->getNodeType() == DOMNode::TEXT_NODE) { if (boost::trim_copy(X(node->getNodeValue()).str()).length() > 0) { - if (HAS_ATTR(_scxml, "datamodel") && ATTR(_scxml, "datamodel") == "native") { + if (HAS_ATTR(_scxml, kXMLCharDataModel) && ATTR(_scxml, kXMLCharDataModel) == "native") { stream << node->getNodeValue(); } else { std::string escaped = escape(X(node->getNodeValue()).str()); @@ -1242,7 +1242,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << "if likely(ctx->exec_content_script != NULL) {" << std::endl; stream << padding; stream << " if unlikely((err = ctx->exec_content_script(ctx, "; - stream << (HAS_ATTR(elem, "src") ? "\"" + escape(ATTR(elem, "src")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(elem, kXMLCharSource) ? "\"" + escape(ATTR(elem, kXMLCharSource)) + "\"" : "NULL") << ", "; std::list<DOMNode*> scriptTexts = DOMUtils::filterChildType(DOMNode::TEXT_NODE, elem); if (scriptTexts.size() > 0) { @@ -1263,8 +1263,8 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << "if likely(ctx->exec_content_log != NULL) {" << std::endl; stream << padding; stream << " if unlikely((ctx->exec_content_log(ctx, "; - stream << (HAS_ATTR(elem, "label") ? "\"" + escape(ATTR(elem, "label")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(elem, "expr") ? "\"" + escape(ATTR(elem, "expr")) + "\"" : "NULL"); + stream << (HAS_ATTR(elem, kXMLCharLabel) ? "\"" + escape(ATTR(elem, kXMLCharLabel)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(elem, kXMLCharExpr) ? "\"" + escape(ATTR(elem, kXMLCharExpr)) + "\"" : "NULL"); stream << ")) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; @@ -1276,15 +1276,15 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << padding << " ctx->exec_content_foreach_done != NULL) {" << std::endl; stream << std::endl; - stream << padding << " if unlikely((ctx->exec_content_foreach_init(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, "documentOrder") << "])) != USCXML_ERR_OK) return err;" << std::endl; - stream << padding << " while (ctx->exec_content_foreach_next(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, "documentOrder") << "]) == USCXML_ERR_OK) {" << std::endl; + stream << padding << " if unlikely((ctx->exec_content_foreach_init(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, X("documentOrder")) << "])) != USCXML_ERR_OK) return err;" << std::endl; + stream << padding << " while (ctx->exec_content_foreach_next(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, X("documentOrder")) << "]) == USCXML_ERR_OK) {" << std::endl; DOMNode* child = node->getFirstChild(); while(child) { writeExecContent(stream, child, indent + 2); child = child->getNextSibling(); } stream << padding << " }" << std::endl; - stream << padding << " if ((ctx->exec_content_foreach_done(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, "documentOrder") << "])) != USCXML_ERR_OK) return err;" << std::endl; + stream << padding << " if ((ctx->exec_content_foreach_done(ctx, &" << _prefix << "_elem_foreachs[" << ATTR(elem, X("documentOrder")) << "])) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; stream << padding << "}" << std::endl; @@ -1293,12 +1293,12 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << padding; stream << "if likely(ctx->is_true != NULL) {" << std::endl; stream << padding; - stream << " if (ctx->is_true(ctx, " << (HAS_ATTR(elem, "cond") ? "\"" + escape(ATTR(elem, "cond")) + "\"" : "NULL") << ")) {" << std::endl; + stream << " if (ctx->is_true(ctx, " << (HAS_ATTR(elem, kXMLCharCond) ? "\"" + escape(ATTR(elem, kXMLCharCond)) + "\"" : "NULL") << ")) {" << std::endl; DOMNode* child = elem->getFirstChild(); while(child) { if (child->getNodeType() == DOMNode::ELEMENT_NODE && TAGNAME_CAST(child) == "elseif") { stream << padding; - stream << " } else if (ctx->is_true(ctx, " << (HAS_ATTR_CAST(child, "cond") ? "\"" + escape(ATTR_CAST(child, "cond")) + "\"" : "NULL") << ")) {" << std::endl; + stream << " } else if (ctx->is_true(ctx, " << (HAS_ATTR_CAST(child, kXMLCharCond) ? "\"" + escape(ATTR_CAST(child, kXMLCharCond)) + "\"" : "NULL") << ")) {" << std::endl; } else if (child->getNodeType() == DOMNode::ELEMENT_NODE && TAGNAME_CAST(child) == "else") { stream << padding; stream << " } else {" << std::endl; @@ -1316,7 +1316,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << padding; stream << "if likely(ctx->exec_content_assign != NULL) {" << std::endl; stream << padding; - stream << " if ((ctx->exec_content_assign(ctx, &" << _prefix << "_elem_assigns[" << ATTR(elem, "documentOrder") << "]"; + stream << " if ((ctx->exec_content_assign(ctx, &" << _prefix << "_elem_assigns[" << ATTR(elem, X("documentOrder")) << "]"; stream << ")) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; @@ -1328,7 +1328,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << "if likely(ctx->exec_content_raise != NULL) {" << std::endl; stream << padding; stream << " if unlikely((ctx->exec_content_raise(ctx, "; - stream << (HAS_ATTR(elem, "event") ? "\"" + escape(ATTR(elem, "event")) + "\"" : "NULL"); + stream << (HAS_ATTR(elem, kXMLCharEvent) ? "\"" + escape(ATTR(elem, kXMLCharEvent)) + "\"" : "NULL"); stream << ")) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; @@ -1338,7 +1338,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << padding; stream << "if likely(ctx->exec_content_send != NULL) {" << std::endl; stream << padding; - stream << " if ((ctx->exec_content_send(ctx, &" << _prefix << "_elem_sends[" << ATTR(elem, "documentOrder") << "]"; + stream << " if ((ctx->exec_content_send(ctx, &" << _prefix << "_elem_sends[" << ATTR(elem, X("documentOrder")) << "]"; stream << ")) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; @@ -1349,8 +1349,8 @@ void ChartToC::writeExecContent(std::ostream& stream, const DOMNode* node, size_ stream << "if likely(ctx->exec_content_cancel != NULL) {" << std::endl; stream << padding; stream << " if ((ctx->exec_content_cancel(ctx, "; - stream << (HAS_ATTR(elem, "sendid") ? "\"" + escape(ATTR(elem, "sendid")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(elem, "sendidexpr") ? "\"" + escape(ATTR(elem, "sendidexpr")) + "\"" : "NULL"); + stream << (HAS_ATTR(elem, kXMLCharSendId) ? "\"" + escape(ATTR(elem, kXMLCharSendId)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(elem, kXMLCharSendIdExpr) ? "\"" + escape(ATTR(elem, kXMLCharSendIdExpr)) + "\"" : "NULL"); stream << ")) != USCXML_ERR_OK) return err;" << std::endl; stream << padding << "} else {" << std::endl; stream << padding << " return USCXML_ERR_MISSING_CALLBACK;" << std::endl; @@ -1398,11 +1398,11 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) { stream << " { " << std::endl; stream << " /* machine */ "; - if (HAS_ATTR(invoke, "md5sum")) { + if (HAS_ATTR(invoke, X("md5sum"))) { #if 1 size_t machIdx = 0; for (std::list<ChartToC*>::iterator machIter = _allMachines.begin(); machIter != _allMachines.end(); machIter++, machIdx++) { - if ((*machIter)->_md5 == ATTR(invoke, "md5sum")) { + if ((*machIter)->_md5 == ATTR(invoke, X("md5sum"))) { stream << "&" << (*machIter)->_prefix << "_machine"; break; } @@ -1422,44 +1422,44 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) { stream << ", " << std::endl; stream << " /* type */ "; - stream << (HAS_ATTR(invoke, "type") ? "\"" + escape(ATTR(invoke, "type")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharType) ? "\"" + escape(ATTR(invoke, kXMLCharType)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* typeexpr */ "; - stream << (HAS_ATTR(invoke, "typeexpr") ? "\"" + escape(ATTR(invoke, "typeexpr")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharTypeExpr) ? "\"" + escape(ATTR(invoke, kXMLCharTypeExpr)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* src */ "; - stream << (HAS_ATTR(invoke, "src") ? "\"" + escape(ATTR(invoke, "src")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharSource) ? "\"" + escape(ATTR(invoke, kXMLCharSource)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* srcexpr */ "; - stream << (HAS_ATTR(invoke, "srcexpr") ? "\"" + escape(ATTR(invoke, "srcexpr")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharSourceExpr) ? "\"" + escape(ATTR(invoke, kXMLCharSourceExpr)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* id */ "; - stream << (HAS_ATTR(invoke, "id") ? "\"" + escape(ATTR(invoke, "id")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharId) ? "\"" + escape(ATTR(invoke, kXMLCharId)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* idlocation */ "; - stream << (HAS_ATTR(invoke, "idlocation") ? "\"" + escape(ATTR(invoke, "idlocation")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharIdLocation) ? "\"" + escape(ATTR(invoke, kXMLCharIdLocation)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* sourcename */ "; - stream << (HAS_ATTR_CAST(invoke->getParentNode(), "id") ? "\"" + escape(ATTR_CAST(invoke->getParentNode(), "id")) + "\"" : "NULL"); + stream << (HAS_ATTR_CAST(invoke->getParentNode(), kXMLCharId) ? "\"" + escape(ATTR_CAST(invoke->getParentNode(), kXMLCharId)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* namelist */ "; - stream << (HAS_ATTR(invoke, "namelist") ? "\"" + escape(ATTR(invoke, "namelist")) + "\"" : "NULL"); + stream << (HAS_ATTR(invoke, kXMLCharNameList) ? "\"" + escape(ATTR(invoke, kXMLCharNameList)) + "\"" : "NULL"); stream << ", " << std::endl; stream << " /* autoforward */ "; - stream << (HAS_ATTR(invoke, "autoforward") && stringIsTrue(ATTR(invoke, "autoforward")) ? "1" : "0"); + stream << (HAS_ATTR(invoke, kXMLCharAutoForward) && stringIsTrue(ATTR(invoke, kXMLCharAutoForward)) ? "1" : "0"); stream << ", " << std::endl; stream << " /* params */ "; - if (HAS_ATTR(invoke, "paramIndex")) { - stream << "&" << _prefix << "_elem_params[" << escape(ATTR(invoke, "paramIndex")) << "]"; + if (HAS_ATTR(invoke, X("paramIndex"))) { + stream << "&" << _prefix << "_elem_params[" << escape(ATTR(invoke, X("paramIndex"))) << "]"; } else { stream << "NULL"; } @@ -1475,7 +1475,7 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) { stream << ", " << std::endl; std::list<DOMElement*> contents = DOMUtils::filterChildElements(XML_PREFIX(invoke).str() + "content", invoke); - if (contents.size() > 0 && !HAS_ATTR(invoke, "md5sum")) { + if (contents.size() > 0 && !HAS_ATTR(invoke, X("md5sum"))) { std::stringstream ss; DOMNodeList* cChilds = contents.front()->getChildNodes(); for (size_t j = 0; j < cChilds->getLength(); j++) { @@ -1484,7 +1484,7 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) { stream << " /* content */ "; stream << (ss.str().size() > 0 ? "\"" + escape(ss.str()) + "\", " : "NULL, ") << std::endl; stream << " /* contentexpr */ "; - stream << (HAS_ATTR_CAST(contents.front(), "expr") ? "\"" + ATTR_CAST(contents.front(), "expr") + "\", " : "NULL, ") << std::endl; + stream << (HAS_ATTR_CAST(contents.front(), kXMLCharExpr) ? "\"" + ATTR_CAST(contents.front(), kXMLCharExpr) + "\", " : "NULL, ") << std::endl; } else { stream << " /* content */ NULL," << std::endl; stream << " /* contentexpr */ NULL," << std::endl; @@ -1516,9 +1516,9 @@ void ChartToC::writeElementInfo(std::ostream& stream) { for (auto iter = foreachs.begin(); iter != foreachs.end(); iter++, i++) { DOMElement* foreach = *iter; stream << " { "; - stream << (HAS_ATTR(foreach, "array") ? "\"" + escape(ATTR(foreach, "array")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(foreach, "item") ? "\"" + escape(ATTR(foreach, "item")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(foreach, "index") ? "\"" + escape(ATTR(foreach, "index")) + "\"" : "NULL"); + stream << (HAS_ATTR(foreach, kXMLCharArray) ? "\"" + escape(ATTR(foreach, kXMLCharArray)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(foreach, kXMLCharItem) ? "\"" + escape(ATTR(foreach, kXMLCharItem)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(foreach, kXMLCharIndex) ? "\"" + escape(ATTR(foreach, kXMLCharIndex)) + "\"" : "NULL"); stream << " }" << (i + 1 < foreachs.size() ? ",": "") << std::endl; foreach->setAttribute(X("documentOrder"), X(toStr(i))); } @@ -1537,8 +1537,8 @@ void ChartToC::writeElementInfo(std::ostream& stream) { DOMElement* assign = *iter; stream << " { "; - stream << (HAS_ATTR(assign, "location") ? "\"" + escape(ATTR(assign, "location")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(assign, "expr") ? "\"" + escape(ATTR(assign, "expr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(assign, kXMLCharLocation) ? "\"" + escape(ATTR(assign, kXMLCharLocation)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(assign, kXMLCharExpr) ? "\"" + escape(ATTR(assign, kXMLCharExpr)) + "\"" : "NULL") << ", "; std::list<DOMNode*> assignTexts = DOMUtils::filterChildType(DOMNode::TEXT_NODE, assign); if (assignTexts.size() > 0) { @@ -1596,9 +1596,9 @@ void ChartToC::writeElementInfo(std::ostream& stream) { parent = data->getParentNode()->getParentNode(); } stream << " { "; - stream << (HAS_ATTR(data, "id") ? "\"" + escape(ATTR(data, "id")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(data, "src") ? "\"" + escape(ATTR(data, "src")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(data, "expr") ? "\"" + escape(ATTR(data, "expr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(data, kXMLCharId) ? "\"" + escape(ATTR(data, kXMLCharId)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(data, kXMLCharSource) ? "\"" + escape(ATTR(data, kXMLCharSource)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(data, kXMLCharExpr) ? "\"" + escape(ATTR(data, kXMLCharExpr)) + "\"" : "NULL") << ", "; std::list<DOMNode*> dataTexts = DOMUtils::filterChildType(DOMNode::TEXT_NODE, data); if (dataTexts.size() > 0) { @@ -1643,9 +1643,9 @@ void ChartToC::writeElementInfo(std::ostream& stream) { parent = param->getParentNode(); } stream << " { "; - stream << (HAS_ATTR(param, "name") ? "\"" + escape(ATTR(param, "name")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(param, "expr") ? "\"" + escape(ATTR(param, "expr")) + "\"" : "NULL") << ", "; - stream << (HAS_ATTR(param, "location") ? "\"" + escape(ATTR(param, "location")) + "\"" : "NULL"); + stream << (HAS_ATTR(param, kXMLCharName) ? "\"" + escape(ATTR(param, kXMLCharName)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(param, kXMLCharExpr) ? "\"" + escape(ATTR(param, kXMLCharExpr)) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(param, kXMLCharLocation) ? "\"" + escape(ATTR(param, kXMLCharLocation)) + "\"" : "NULL"); stream << " }," << std::endl; } @@ -1663,27 +1663,27 @@ void ChartToC::writeElementInfo(std::ostream& stream) { DOMElement* send = *iter; stream << " { "; stream << std::endl << " /* event */ "; - stream << (HAS_ATTR(send, "event") ? "\"" + escape(ATTR(send, "event")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharEvent) ? "\"" + escape(ATTR(send, kXMLCharEvent)) + "\"" : "NULL") << ", "; stream << std::endl << " /* eventexpr */ "; - stream << (HAS_ATTR(send, "eventexpr") ? "\"" + escape(ATTR(send, "eventexpr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharEventExpr) ? "\"" + escape(ATTR(send, kXMLCharEventExpr)) + "\"" : "NULL") << ", "; stream << std::endl << " /* target */ "; - stream << (HAS_ATTR(send, "target") ? "\"" + escape(ATTR(send, "target")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharTarget) ? "\"" + escape(ATTR(send, kXMLCharTarget)) + "\"" : "NULL") << ", "; stream << std::endl << " /* targetexpr */ "; - stream << (HAS_ATTR(send, "targetexpr") ? "\"" + escape(ATTR(send, "targetexpr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharTargetExpr) ? "\"" + escape(ATTR(send, kXMLCharTargetExpr)) + "\"" : "NULL") << ", "; stream << std::endl << " /* type */ "; - stream << (HAS_ATTR(send, "type") ? "\"" + escape(ATTR(send, "type")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharType) ? "\"" + escape(ATTR(send, kXMLCharType)) + "\"" : "NULL") << ", "; stream << std::endl << " /* typeexpr */ "; - stream << (HAS_ATTR(send, "typeexpr") ? "\"" + escape(ATTR(send, "typeexpr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharTypeExpr) ? "\"" + escape(ATTR(send, kXMLCharTypeExpr)) + "\"" : "NULL") << ", "; stream << std::endl << " /* id */ "; - stream << (HAS_ATTR(send, "id") ? "\"" + escape(ATTR(send, "id")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharId) ? "\"" + escape(ATTR(send, kXMLCharId)) + "\"" : "NULL") << ", "; stream << std::endl << " /* idlocation */ "; - stream << (HAS_ATTR(send, "idlocation") ? "\"" + escape(ATTR(send, "idlocation")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharIdLocation) ? "\"" + escape(ATTR(send, kXMLCharIdLocation)) + "\"" : "NULL") << ", "; stream << std::endl << " /* delay */ "; - stream << (HAS_ATTR(send, "delay") ? "\"" + escape(ATTR(send, "delay")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharDelay) ? "\"" + escape(ATTR(send, kXMLCharDelay)) + "\"" : "NULL") << ", "; stream << std::endl << " /* delayexpr */ "; - stream << (HAS_ATTR(send, "delayexpr") ? "\"" + escape(ATTR(send, "delayexpr")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharDelayExpr) ? "\"" + escape(ATTR(send, kXMLCharDelayExpr)) + "\"" : "NULL") << ", "; stream << std::endl << " /* namelist */ "; - stream << (HAS_ATTR(send, "namelist") ? "\"" + escape(ATTR(send, "namelist")) + "\"" : "NULL") << ", "; + stream << (HAS_ATTR(send, kXMLCharNameList) ? "\"" + escape(ATTR(send, kXMLCharNameList)) + "\"" : "NULL") << ", "; std::list<DOMElement*> contents = DOMUtils::filterChildElements(XML_PREFIX(send).str() + "content", send); if (contents.size() > 0) { @@ -1695,7 +1695,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) { stream << std::endl << " /* content */ "; stream << (ss.str().size() > 0 ? "\"" + escape(ss.str()) + "\", " : "NULL, "); stream << std::endl << " /* contentexpr */ "; - stream << (HAS_ATTR_CAST(contents.front(), "expr") ? "\"" + ATTR_CAST(contents.front(), "expr") + "\", " : "NULL, "); + stream << (HAS_ATTR_CAST(contents.front(), kXMLCharExpr) ? "\"" + ATTR_CAST(contents.front(), kXMLCharExpr) + "\", " : "NULL, "); } else { stream << std::endl << " /* content */ "; stream << "NULL,"; @@ -1705,8 +1705,8 @@ void ChartToC::writeElementInfo(std::ostream& stream) { stream << std::endl << " /* params */ "; - if (HAS_ATTR(send, "paramIndex")) { - stream << "&" << _prefix << "_elem_params[" << escape(ATTR(send, "paramIndex")) << "] "; + if (HAS_ATTR(send, X("paramIndex"))) { + stream << "&" << _prefix << "_elem_params[" << escape(ATTR(send, X("paramIndex"))) << "] "; } else { stream << "NULL "; } @@ -1729,7 +1729,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) { stream << " { "; // parent - stream << ATTR_CAST(donedata->getParentNode(), "documentOrder") << ", "; + stream << ATTR_CAST(donedata->getParentNode(), X("documentOrder")) << ", "; std::list<DOMElement*> contents = DOMUtils::filterChildElements(XML_PREFIX(donedata).str() + "content", donedata); if (contents.size() > 0) { @@ -1739,13 +1739,13 @@ void ChartToC::writeElementInfo(std::ostream& stream) { ss << *(cChilds->item(j)); } stream << (ss.str().size() > 0 ? "\"" + escape(ss.str()) + "\", " : "NULL, "); - stream << (HAS_ATTR_CAST(contents.front(), "expr") ? "\"" + ATTR_CAST(contents.front(), "expr") + "\", " : "NULL, "); + stream << (HAS_ATTR_CAST(contents.front(), kXMLCharExpr) ? "\"" + ATTR_CAST(contents.front(), kXMLCharExpr) + "\", " : "NULL, "); } else { stream << "NULL, NULL, "; } - if (HAS_ATTR(donedata, "paramIndex")) { - stream << "&" << _prefix << "_elem_params[" << escape(ATTR(donedata, "paramIndex")) << "]"; + if (HAS_ATTR(donedata, X("paramIndex"))) { + stream << "&" << _prefix << "_elem_params[" << escape(ATTR(donedata, X("paramIndex"))) << "]"; } else { stream << "NULL"; } @@ -1796,7 +1796,7 @@ void ChartToC::writeMachineInfo(std::ostream& stream) { stream << " /* nr_states */ " << _states.size() << "," << std::endl; stream << " /* nr_transitions */ " << _transitions.size() << "," << std::endl; stream << " /* name */ \"" << escape(_name) << "\"," << std::endl; - stream << " /* datamodel */ \"" << (HAS_ATTR(_scxml, "datamodel") ? ATTR(_scxml, "datamodel") : "null") << "\"," << std::endl; + stream << " /* datamodel */ \"" << (HAS_ATTR(_scxml, kXMLCharDataModel) ? ATTR(_scxml, kXMLCharDataModel) : "null") << "\"," << std::endl; stream << " /* uuid */ \"" << _md5 << "\"," << std::endl; stream << " /* states */ " << "&" << _prefix << "_states[0], " << std::endl; if (_transitions.size() > 0) { @@ -1843,7 +1843,7 @@ void ChartToC::writeMachineInfo(std::ostream& stream) { stream << " /* nr_states */ " << m->_states.size() << "," << std::endl; stream << " /* nr_transitions */ " << m->_transitions.size() << "," << std::endl; stream << " /* name */ \"" << escape(m->_name) << "\"," << std::endl; - stream << " /* datamodel */ \"" << (HAS_ATTR(m->_scxml, "datamodel") ? ATTR(m->_scxml, "datamodel") : "null") << "\"," << std::endl; + stream << " /* datamodel */ \"" << (HAS_ATTR(m->_scxml, kXMLCharDataModel) ? ATTR(m->_scxml, kXMLCharDataModel) : "null") << "\"," << std::endl; stream << " /* uuid */ \"" << m->_md5 << "\"," << std::endl; stream << " /* states */ " << "&" << m->_prefix << "_states[0], " << std::endl; stream << " /* transitions */ " << "&" << m->_prefix << "_transitions[0], " << std::endl; @@ -1894,12 +1894,12 @@ void ChartToC::writeStates(std::ostream& stream) { // name stream << " /* name */ "; - stream << (HAS_ATTR(state, "id") ? "\"" + escape(ATTR(state, "id")) + "\"" : "NULL"); + stream << (HAS_ATTR(state, kXMLCharId) ? "\"" + escape(ATTR(state, kXMLCharId)) + "\"" : "NULL"); stream << "," << std::endl; // parent stream << " /* parent */ "; - stream << (i == 0 ? "0" : ATTR_CAST(state->getParentNode(), "documentOrder")); + stream << (i == 0 ? "0" : ATTR_CAST(state->getParentNode(), X("documentOrder"))); stream << "," << std::endl; // onentry @@ -1919,20 +1919,20 @@ void ChartToC::writeStates(std::ostream& stream) { // children stream << " /* children */ { "; - writeCharArrayInitList(stream, ATTR(state, "childBools")); - stream << " /* " << ATTR(state, "childBools") << " */ }," << std::endl; + writeCharArrayInitList(stream, ATTR(state, X("childBools"))); + stream << " /* " << ATTR(state, X("childBools")) << " */ }," << std::endl; // default completion stream << " /* completion */ { "; - writeCharArrayInitList(stream, ATTR(state, "completionBools")); - stream << " /* " << ATTR(state, "completionBools") << " */ }, \t" << std::endl; + writeCharArrayInitList(stream, ATTR(state, X("completionBools"))); + stream << " /* " << ATTR(state, X("completionBools")) << " */ }, \t" << std::endl; stream << " /* ancestors */ { "; - writeCharArrayInitList(stream, ATTR(state, "ancBools")); - stream << " /* " << ATTR(state, "ancBools") << " */ }," << std::endl; + writeCharArrayInitList(stream, ATTR(state, X("ancBools"))); + stream << " /* " << ATTR(state, X("ancBools")) << " */ }," << std::endl; stream << " /* data */ "; - stream << (HAS_ATTR(state, "dataIndex") ? "&" + _prefix + "_elem_datas[" + escape(ATTR(state, "dataIndex")) + "]" : "NULL"); + stream << (HAS_ATTR(state, X("dataIndex")) ? "&" + _prefix + "_elem_datas[" + escape(ATTR(state, X("dataIndex"))) + "]" : "NULL"); stream << "," << std::endl; stream << " /* type */ "; @@ -1943,7 +1943,7 @@ void ChartToC::writeStates(std::ostream& stream) { } else if (isFinal(state)) { stream << "USCXML_STATE_FINAL"; } else if (isHistory(state)) { - if (HAS_ATTR(state, "type") && iequals(ATTR(state, "type"), "deep")) { + if (HAS_ATTR(state, kXMLCharType) && iequals(ATTR(state, kXMLCharType), "deep")) { stream << "USCXML_STATE_HISTORY_DEEP"; } else { stream << "USCXML_STATE_HISTORY_SHALLOW"; @@ -1957,7 +1957,7 @@ void ChartToC::writeStates(std::ostream& stream) { } else { // <scxml> stream << "USCXML_STATE_COMPOUND"; } - if (HAS_ATTR(state, "hasHistoryChild")) { + if (HAS_ATTR(state, X("hasHistoryChild"))) { stream << " | USCXML_STATE_HAS_HISTORY"; } @@ -1987,21 +1987,21 @@ void ChartToC::writeTransitions(std::ostream& stream) { for (size_t i = 0; i < _transitions.size(); i++) { DOMElement* transition(_transitions[i]); - stream << " { /* transition number " << ATTR(transition, "documentOrder") << " with priority " << toStr(i) << std::endl; - stream << " target: " << ATTR(transition, "target") << std::endl; + stream << " { /* transition number " << ATTR(transition, X("documentOrder")) << " with priority " << toStr(i) << std::endl; + stream << " target: " << ATTR(transition, kXMLCharTarget) << std::endl; stream << " */" << std::endl; // source stream << " /* source */ "; - stream << ATTR_CAST(transition->getParentNode(), "documentOrder"); + stream << ATTR_CAST(transition->getParentNode(), X("documentOrder")); stream << "," << std::endl; // targets stream << " /* target */ "; - if (HAS_ATTR(transition, "targetBools")) { + if (HAS_ATTR(transition, X("targetBools"))) { stream << "{ "; - writeCharArrayInitList(stream, ATTR(transition, "targetBools")); - stream << " /* " << ATTR(transition, "targetBools") << " */ }"; + writeCharArrayInitList(stream, ATTR(transition, X("targetBools"))); + stream << " /* " << ATTR(transition, X("targetBools")) << " */ }"; } else { stream << "{ 0x00 }"; @@ -2009,17 +2009,17 @@ void ChartToC::writeTransitions(std::ostream& stream) { stream << "," << std::endl; stream << " /* event */ "; - stream << (HAS_ATTR(transition, "event") ? "\"" + escape(ATTR(transition, "event")) + "\"" : "NULL"); + stream << (HAS_ATTR(transition, kXMLCharEvent) ? "\"" + escape(ATTR(transition, kXMLCharEvent)) + "\"" : "NULL"); stream << "," << std::endl; stream << " /* condition */ "; - stream << (HAS_ATTR(transition, "cond") ? "\"" + escape(ATTR(transition, "cond")) + "\"" : "NULL"); + stream << (HAS_ATTR(transition, kXMLCharCond) ? "\"" + escape(ATTR(transition, kXMLCharCond)) + "\"" : "NULL"); stream << "," << std::endl; // is enabled stream << " /* is_enabled */ "; - if (HAS_ATTR(transition, "cond")) { + if (HAS_ATTR(transition, kXMLCharCond)) { stream << _prefix << "_" << DOMUtils::idForNode(transition) << "_is_enabled"; } else { stream << "NULL"; @@ -2038,17 +2038,17 @@ void ChartToC::writeTransitions(std::ostream& stream) { // type stream << " /* type */ "; std::string seperator = ""; - if (!HAS_ATTR(transition, "target")) { + if (!HAS_ATTR(transition, kXMLCharTarget)) { stream << seperator << "USCXML_TRANS_TARGETLESS"; seperator = " | "; } - if (HAS_ATTR(transition, "type") && iequals(ATTR(transition, "type"), "internal")) { + if (HAS_ATTR(transition, kXMLCharType) && iequals(ATTR(transition, kXMLCharType), "internal")) { stream << seperator << "USCXML_TRANS_INTERNAL"; seperator = " | "; } - if (!HAS_ATTR(transition, "event")) { + if (!HAS_ATTR(transition, kXMLCharEvent)) { stream << seperator << "USCXML_TRANS_SPONTANEOUS"; seperator = " | "; } @@ -2070,13 +2070,13 @@ void ChartToC::writeTransitions(std::ostream& stream) { // conflicts stream << " /* conflicts */ { "; - writeCharArrayInitList(stream, ATTR(transition, "conflictBools")); - stream << " /* " << ATTR(transition, "conflictBools") << " */ }, " << std::endl; + writeCharArrayInitList(stream, ATTR(transition, X("conflictBools"))); + stream << " /* " << ATTR(transition, X("conflictBools")) << " */ }, " << std::endl; // exit set stream << " /* exit set */ { "; - writeCharArrayInitList(stream, ATTR(transition, "exitSetBools")); - stream << " /* " << ATTR(transition, "exitSetBools") << " */ }" << std::endl; + writeCharArrayInitList(stream, ATTR(transition, X("exitSetBools"))); + stream << " /* " << ATTR(transition, X("exitSetBools")) << " */ }" << std::endl; stream << " }" << (i + 1 < _transitions.size() ? ",": "") << std::endl; } diff --git a/src/uscxml/transform/ChartToPromela.cpp b/src/uscxml/transform/ChartToPromela.cpp index 6d77a94..2c73e60 100644 --- a/src/uscxml/transform/ChartToPromela.cpp +++ b/src/uscxml/transform/ChartToPromela.cpp @@ -95,25 +95,25 @@ void ChartToPromela::prepare() { std::list<DOMElement*> invokes = DOMUtils::inDocumentOrder({ XML_PREFIX(_scxml).str() + "invoke" }, _scxml); for (auto invoke : invokes) { - if (!HAS_ATTR(invoke, "id")) { + if (!HAS_ATTR(invoke, kXMLCharId)) { invoke->setAttribute(X("id"), X("INV_" + UUID::getUUID().substr(0,5))); - } else if (HAS_ATTR(invoke, "id") && UUID::isUUID(ATTR(invoke, "id"))) { + } else if (HAS_ATTR(invoke, kXMLCharId) && UUID::isUUID(ATTR(invoke, kXMLCharId))) { // shorten UUIDs - invoke->setAttribute(X("id"), X("INV_" + ATTR(invoke, "id").substr(0,5))); + invoke->setAttribute(X("id"), X("INV_" + ATTR(invoke, kXMLCharId).substr(0,5))); } - if (HAS_ATTR(invoke, "type") && - ATTR(invoke, "type") != "scxml" && - ATTR(invoke, "type") != "http://www.w3.org/TR/scxml/" && - ATTR(invoke, "type") != "http://www.w3.org/TR/scxml/#SCXMLEventProcessor") + if (HAS_ATTR(invoke, kXMLCharType) && + ATTR(invoke, kXMLCharType) != "scxml" && + ATTR(invoke, kXMLCharType) != "http://www.w3.org/TR/scxml/" && + ATTR(invoke, kXMLCharType) != "http://www.w3.org/TR/scxml/#SCXMLEventProcessor") continue; - assert(HAS_ATTR(invoke, "id")); + assert(HAS_ATTR(invoke, kXMLCharId)); invoke->setAttribute(X("name"), invoke->getAttribute(X("id"))); Interpreter nested; - if (HAS_ATTR(invoke, "src")) { - nested = Interpreter::fromURL(URL::resolve(ATTR(invoke, "src"), _baseURL)); + if (HAS_ATTR(invoke, kXMLCharSource)) { + nested = Interpreter::fromURL(URL::resolve(ATTR(invoke, kXMLCharSource), _baseURL)); } else { std::list<DOMElement*> contents = DOMUtils::filterChildElements(XML_PREFIX(invoke).str() + "content", invoke); std::list<DOMElement*> scxmls = DOMUtils::filterChildElements(XML_PREFIX(invoke).str() + "scxml", contents.front()); @@ -131,15 +131,15 @@ void ChartToPromela::prepare() { _machinesNested[invoke]->_machinesAll = _machinesAll; (*_machinesAll)[invoke] = _machinesNested[invoke]; - _machinesNested[invoke]->_invokerid = ATTR(invoke, "id"); + _machinesNested[invoke]->_invokerid = ATTR(invoke, kXMLCharId); _analyzer->createMacroName(_machinesNested[invoke]->_invokerid); _analyzer->addEvent("done.invoke." + _machinesNested[invoke]->_invokerid); - _machinesNested[invoke]->_prefix = _analyzer->macroForLiteral(ATTR(invoke, "id")) + "_"; + _machinesNested[invoke]->_prefix = _analyzer->macroForLiteral(ATTR(invoke, kXMLCharId)) + "_"; - _machinesPerId[ATTR_CAST(invoke, "id")] = invoke; - (*_machinesAllPerId)[ATTR(invoke, "id")] = invoke; + _machinesPerId[ATTR_CAST(invoke, kXMLCharId)] = invoke; + (*_machinesAllPerId)[ATTR(invoke, kXMLCharId)] = invoke; } @@ -155,20 +155,20 @@ void ChartToPromela::prepare() { for (auto element : values) { std::string key; - if (HAS_ATTR(element, "id")) { - key = ATTR(element, "id"); - } else if (HAS_ATTR(element, "location")) { - key = ATTR(element, "location"); + if (HAS_ATTR(element, kXMLCharId)) { + key = ATTR(element, kXMLCharId); + } else if (HAS_ATTR(element, kXMLCharLocation)) { + key = ATTR(element, kXMLCharLocation); } if (key.length() == 0) continue; std::string value; - if (HAS_ATTR(element, "expr")) { - value = ATTR(element, "expr"); - } else if (HAS_ATTR(element, "src")) { - URL absUrl = URL::resolve(ATTR_CAST(element, "src"), _baseURL); + if (HAS_ATTR(element, kXMLCharExpr)) { + value = ATTR(element, kXMLCharExpr); + } else if (HAS_ATTR(element, kXMLCharSource)) { + URL absUrl = URL::resolve(ATTR_CAST(element, kXMLCharSource), _baseURL); value = absUrl.getInContent(); } else { std::list<DOMNode*> assignTexts = DOMUtils::filterChildType(DOMNode::TEXT_NODE, element, true); @@ -677,8 +677,8 @@ void ChartToPromela::writeVariables(std::ostream& stream) { PromelaCodeAnalyzer::PromelaTypedef allTypes = _analyzer->getTypes(); for (auto data : datas) { - std::string identifier = (HAS_ATTR_CAST(data, "id") ? ATTR_CAST(data, "id") : ""); - std::string type = boost::trim_copy(HAS_ATTR_CAST(data, "type") ? ATTR_CAST(data, "type") : ""); + std::string identifier = (HAS_ATTR_CAST(data, kXMLCharId) ? ATTR_CAST(data, kXMLCharId) : ""); + std::string type = boost::trim_copy(HAS_ATTR_CAST(data, kXMLCharType) ? ATTR_CAST(data, kXMLCharType) : ""); _dataModelVars.insert(identifier); if (processedIdentifiers.find(identifier) != processedIdentifiers.end()) @@ -760,9 +760,9 @@ void ChartToPromela::writeStrings(std::ostream& stream) { { for (size_t i = 0; i < _states.size(); i++) { - if (HAS_ATTR(_states[i], "id")) { - stream << "#define " << _prefix << _analyzer->macroForLiteral(ATTR(_states[i], "id")) << " " << toStr(i); - stream << " /* index for state " << ATTR(_states[i], "id") << " */" << std::endl; + if (HAS_ATTR(_states[i], kXMLCharId)) { + stream << "#define " << _prefix << _analyzer->macroForLiteral(ATTR(_states[i], kXMLCharId)) << " " << toStr(i); + stream << " /* index for state " << ATTR(_states[i], kXMLCharId) << " */" << std::endl; } } } @@ -787,25 +787,25 @@ void ChartToPromela::writeTransitions(std::ostream& stream) { /** source */ stream << " " << _prefix << "transitions[" << toStr(i) << "].source = "; - stream << ATTR_CAST(transition->getParentNode(), "documentOrder") ; + stream << ATTR_CAST(transition->getParentNode(), X("documentOrder")) ; stream << ";" << std::endl; /** target */ - if (HAS_ATTR(transition, "targetBools")) { - std::string targetBools = ATTR(transition, "targetBools"); + if (HAS_ATTR(transition, X("targetBools"))) { + std::string targetBools = ATTR(transition, X("targetBools")); for (size_t j = 0; j < _states.size(); j++) { if (targetBools[j] == '1') stream << " " << _prefix << "transitions[" << toStr(i) << "].target[" << toStr(j) << "] = 1;" << std::endl; } } - if (!HAS_ATTR(transition, "event")) + if (!HAS_ATTR(transition, kXMLCharEvent)) stream << " " << _prefix << "transitions[" << toStr(i) << "].type[USCXML_TRANS_SPONTANEOUS] = 1;" << std::endl; - if (!HAS_ATTR(transition, "target")) + if (!HAS_ATTR(transition, kXMLCharTarget)) stream << " " << _prefix << "transitions[" << toStr(i) << "].type[USCXML_TRANS_TARGETLESS] = 1;" << std::endl; - if (HAS_ATTR(transition, "type") && ATTR(transition, "type") == "internal") + if (HAS_ATTR(transition, kXMLCharType) && ATTR(transition, kXMLCharType) == "internal") stream << " " << _prefix << "transitions[" << toStr(i) << "].type[USCXML_TRANS_INTERNAL] = 1;" << std::endl; if (TAGNAME_CAST(transition->getParentNode()) == XML_PREFIX(transition).str() + "history") @@ -814,16 +814,16 @@ void ChartToPromela::writeTransitions(std::ostream& stream) { if (TAGNAME_CAST(transition->getParentNode()) == XML_PREFIX(transition).str() + "initial") stream << " " << _prefix << "transitions[" << toStr(i) << "].type[USCXML_TRANS_INITIAL] = 1;" << std::endl; - if (HAS_ATTR(transition, "conflictBools")) { - std::string conflicts = ATTR(transition, "conflictBools"); + if (HAS_ATTR(transition, X("conflictBools"))) { + std::string conflicts = ATTR(transition, X("conflictBools")); for (size_t j = 0; j < conflicts.size(); j++) { if (conflicts[j] == '1') stream << " " << _prefix << "transitions[" << toStr(i) << "].conflicts[" << toStr(j) << "] = 1;" << std::endl; } } - if (HAS_ATTR(transition, "exitSetBools")) { - std::string exitSet = ATTR(transition, "exitSetBools"); + if (HAS_ATTR(transition, X("exitSetBools"))) { + std::string exitSet = ATTR(transition, X("exitSetBools")); for (size_t j = 0; j < exitSet.size(); j++) { if (exitSet[j] == '1') stream << " " << _prefix << "transitions[" << toStr(i) << "].exit_set[" << toStr(j) << "] = 1;" << std::endl; @@ -842,28 +842,28 @@ void ChartToPromela::writeStates(std::ostream& stream) { DOMElement* state(_states[i]); stream << " " << _prefix << "states[" << toStr(i) << "].parent = "; - stream << (i == 0 ? "0" : ATTR_CAST(state->getParentNode(), "documentOrder")); + stream << (i == 0 ? "0" : ATTR_CAST(state->getParentNode(), X("documentOrder"))); stream << ";" << std::endl; - if (HAS_ATTR(state, "childBools")) { - std::string childs = ATTR(state, "childBools"); + if (HAS_ATTR(state, X("childBools"))) { + std::string childs = ATTR(state, X("childBools")); for (size_t j = 0; j < childs.size(); j++) { if (childs[j] == '1') stream << " " << _prefix << "states[" << toStr(i) << "].children[" << toStr(j) << "] = 1;" << std::endl; } } - if (HAS_ATTR(state, "completionBools")) { - std::string completions = ATTR(state, "completionBools"); + if (HAS_ATTR(state, X("completionBools"))) { + std::string completions = ATTR(state, X("completionBools")); for (size_t j = 0; j < completions.size(); j++) { if (completions[j] == '1') stream << " " << _prefix << "states[" << toStr(i) << "].completion[" << toStr(j) << "] = 1;" << std::endl; } } - if (HAS_ATTR(state, "ancBools")) { - std::string ancestors = ATTR(state, "ancBools"); + if (HAS_ATTR(state, X("ancBools"))) { + std::string ancestors = ATTR(state, X("ancBools")); for (size_t j = 0; j < ancestors.size(); j++) { if (ancestors[j] == '1') stream << " " << _prefix << "states[" << toStr(i) << "].ancestors[" << toStr(j) << "] = 1;" << std::endl; @@ -875,7 +875,7 @@ void ChartToPromela::writeStates(std::ostream& stream) { } else if (isFinal(state)) { stream << " " << _prefix << "states[" << toStr(i) << "].type[USCXML_STATE_FINAL] = 1;" << std::endl; } else if (isHistory(state)) { - if (HAS_ATTR(state, "type") && iequals(ATTR(state, "type"), "deep")) { + if (HAS_ATTR(state, kXMLCharType) && iequals(ATTR(state, kXMLCharType), "deep")) { stream << " " << _prefix << "states[" << toStr(i) << "].type[USCXML_STATE_HISTORY_DEEP] = 1;" << std::endl; } else { stream << " " << _prefix << "states[" << toStr(i) << "].type[USCXML_STATE_HISTORY_SHALLOW] = 1;" << std::endl; @@ -889,7 +889,7 @@ void ChartToPromela::writeStates(std::ostream& stream) { } else { // <scxml> stream << " " << _prefix << "states[" << toStr(i) << "].type[USCXML_STATE_COMPOUND] = 1;" << std::endl; } - if (HAS_ATTR(state, "hasHistoryChild")) { + if (HAS_ATTR(state, X("hasHistoryChild"))) { stream << " " << _prefix << "states[" << toStr(i) << "].type[USCXML_STATE_HAS_HISTORY] = 1;" << std::endl; } @@ -909,8 +909,8 @@ void ChartToPromela::writeRaiseDoneDate(std::ostream& stream, const DOMElement* auto& content = contents.front(); // an expression - if (HAS_ATTR(content, "expr")) { - stream << dataToAssignments(_prefix + "_tmpE.data", Data(ADAPT_SRC(ATTR(content, "expr")), Data::INTERPRETED)); + if (HAS_ATTR(content, kXMLCharExpr)) { + stream << dataToAssignments(_prefix + "_tmpE.data", Data(ADAPT_SRC(ATTR(content, kXMLCharExpr)), Data::INTERPRETED)); return; } @@ -941,14 +941,14 @@ void ChartToPromela::writeRaiseDoneDate(std::ostream& stream, const DOMElement* if (params.size() > 0) { Data d; for (auto& param : params) { - if (!HAS_ATTR(param, "name")) + if (!HAS_ATTR(param, kXMLCharName)) continue; - std::string name = ATTR(param, "name"); + std::string name = ATTR(param, kXMLCharName); std::string expr; - if (HAS_ATTR(param, "expr")) { - expr = ATTR(param, "expr"); - } else if (HAS_ATTR(param, "location")) { - expr = ATTR(param, "location"); + if (HAS_ATTR(param, kXMLCharExpr)) { + expr = ATTR(param, kXMLCharExpr); + } else if (HAS_ATTR(param, kXMLCharLocation)) { + expr = ATTR(param, kXMLCharLocation); } d[name] = Data(expr, Data::INTERPRETED); @@ -996,8 +996,8 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO } } else if(TAGNAME(element) == "log") { - std::string label = (HAS_ATTR(element, "label") ? ATTR(element, "label") : ""); - std::string expr = (HAS_ATTR(element, "expr") ? ADAPT_SRC(ATTR(element, "expr")) : ""); + std::string label = (HAS_ATTR(element, kXMLCharLabel) ? ATTR(element, kXMLCharLabel) : ""); + std::string expr = (HAS_ATTR(element, kXMLCharExpr) ? ADAPT_SRC(ATTR(element, kXMLCharExpr)) : ""); std::string trimmedExpr = boost::trim_copy(expr); bool isStringLiteral = (boost::starts_with(trimmedExpr, "\"") || boost::starts_with(trimmedExpr, "'")); @@ -1027,17 +1027,17 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO } } else if(TAGNAME(element) == "foreach") { - stream << padding << "for (" << (HAS_ATTR(element, "index") ? _prefix + ATTR(element, "index") : "_index") << " in " << _prefix << ATTR(element, "array") << ") {" << std::endl; - if (HAS_ATTR(element, "item")) { - stream << padding << " " << _prefix << ATTR(element, "item") << " = " << _prefix << ATTR(element, "array") << "[" << (HAS_ATTR(element, "index") ? _prefix + ATTR(element, "index") : "_index") << "];" << std::endl; + stream << padding << "for (" << (HAS_ATTR(element, kXMLCharIndex) ? _prefix + ATTR(element, kXMLCharIndex) : "_index") << " in " << _prefix << ATTR(element, kXMLCharArray) << ") {" << std::endl; + if (HAS_ATTR(element, kXMLCharItem)) { + stream << padding << " " << _prefix << ATTR(element, kXMLCharItem) << " = " << _prefix << ATTR(element, kXMLCharArray) << "[" << (HAS_ATTR(element, kXMLCharIndex) ? _prefix + ATTR(element, kXMLCharIndex) : "_index") << "];" << std::endl; } const XERCESC_NS::DOMNode* child = element->getFirstChild(); while(child) { writeExecContent(stream, child, indent + 1); child = child->getNextSibling(); } - // if (HAS_ATTR(nodeElem, "index")) - // stream << padding << " " << _prefix << ATTR(nodeElem, "index") << "++;" << std::endl; + // if (HAS_ATTR(nodeElem, kXMLCharIndex)) + // stream << padding << " " << _prefix << ATTR(nodeElem, kXMLCharIndex) << "++;" << std::endl; stream << padding << "}" << std::endl; } else if(TAGNAME(element) == "if") { @@ -1065,27 +1065,27 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO std::string insertOp = "!"; if (TAGNAME(element) == "raise") { targetQueue = _prefix + "iQ"; - } else if (!HAS_ATTR(element, "target")) { + } else if (!HAS_ATTR(element, kXMLCharTarget)) { // if (_allowEventInterleaving) { // targetQueue = _prefix + "tmpQ"; // } else { targetQueue = _prefix + "eQ"; // } - } else if (ATTR(element, "target").compare("#_internal") == 0) { + } else if (ATTR(element, kXMLCharTarget).compare("#_internal") == 0) { targetQueue = _prefix + "iQ"; - } else if (ATTR(element, "target").compare("#_parent") == 0) { + } else if (ATTR(element, kXMLCharTarget).compare("#_parent") == 0) { targetQueue = _parent->_prefix + "eQ"; - } else if (boost::starts_with(ATTR(element, "target"), "#_") && _machinesAllPerId->find(ATTR(element, "target").substr(2)) != _machinesAllPerId->end()) { - targetQueue = (*_machinesAll)[(*_machinesAllPerId)[ATTR(element, "target").substr(2)]]->_prefix + "eQ"; + } else if (boost::starts_with(ATTR(element, kXMLCharTarget), "#_") && _machinesAllPerId->find(ATTR(element, kXMLCharTarget).substr(2)) != _machinesAllPerId->end()) { + targetQueue = (*_machinesAll)[(*_machinesAllPerId)[ATTR(element, kXMLCharTarget).substr(2)]]->_prefix + "eQ"; } if (targetQueue.length() > 0) { // this is for our external queue std::string event; - if (HAS_ATTR(element, "event")) { - event = _analyzer->macroForLiteral(ATTR(element, "event")); - } else if (HAS_ATTR(element, "eventexpr")) { - event = ADAPT_SRC(ATTR(element, "eventexpr")); + if (HAS_ATTR(element, kXMLCharEvent)) { + event = _analyzer->macroForLiteral(ATTR(element, kXMLCharEvent)); + } else if (HAS_ATTR(element, kXMLCharEventExpr)) { + event = ADAPT_SRC(ATTR(element, kXMLCharEventExpr)); } if (_analyzer->usesComplexEventStruct()) { stream << padding << "{" << std::endl; @@ -1093,17 +1093,17 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO std::stringstream typeAssignSS; typeAssignSS << padding << " " << _prefix << "_tmpE.name = " << event << ";" << std::endl; - if (HAS_ATTR(element, "idlocation")) { + if (HAS_ATTR(element, kXMLCharIdLocation)) { typeAssignSS << padding << " /* idlocation */" << std::endl; typeAssignSS << padding << " _lastSendId = _lastSendId + 1;" << std::endl; - typeAssignSS << padding << " " << _prefix << ATTR(element, "idlocation") << " = _lastSendId;" << std::endl; + typeAssignSS << padding << " " << _prefix << ATTR(element, kXMLCharIdLocation) << " = _lastSendId;" << std::endl; typeAssignSS << padding << " " << _prefix << "_tmpE.sendid = _lastSendId;" << std::endl; typeAssignSS << padding << " if" << std::endl; typeAssignSS << padding << " :: _lastSendId == 2147483647 -> _lastSendId = 0;" << std::endl; typeAssignSS << padding << " :: else -> skip;" << std::endl; typeAssignSS << padding << " fi;" << std::endl; - } else if (HAS_ATTR(element, "id")) { - typeAssignSS << padding << " " << _prefix << "_tmpE.sendid = " << _analyzer->macroForLiteral(ATTR(element, "id")) << ";" << std::endl; + } else if (HAS_ATTR(element, kXMLCharId)) { + typeAssignSS << padding << " " << _prefix << "_tmpE.sendid = " << _analyzer->macroForLiteral(ATTR(element, kXMLCharId)) << ";" << std::endl; } if (_analyzer->usesEventField("invokeid") && _parent != NULL) { // do not send invokeid if we send / raise to ourself @@ -1124,10 +1124,10 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO // insertOp += "!"; typeAssignSS << padding << " _lastSeqId = _lastSeqId + 1;" << std::endl; #endif - if (HAS_ATTR_CAST(element, "delay")) { - typeAssignSS << padding << " " << _prefix << "_tmpE.delay = " << ATTR_CAST(element, "delay") << ";" << std::endl; - } else if (HAS_ATTR_CAST(element, "delayexpr")) { - typeAssignSS << padding << " " << _prefix << "_tmpE.delay = " << ADAPT_SRC(ATTR_CAST(element, "delayexpr")) << ";" << std::endl; + if (HAS_ATTR_CAST(element, kXMLCharDelay)) { + typeAssignSS << padding << " " << _prefix << "_tmpE.delay = " << ATTR_CAST(element, kXMLCharDelay) << ";" << std::endl; + } else if (HAS_ATTR_CAST(element, kXMLCharDelayExpr)) { + typeAssignSS << padding << " " << _prefix << "_tmpE.delay = " << ADAPT_SRC(ATTR_CAST(element, kXMLCharDelayExpr)) << ";" << std::endl; } else { typeAssignSS << padding << " " << _prefix << "_tmpE.delay = 0;" << std::endl; } @@ -1144,10 +1144,10 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO std::list<DOMElement*> sendParams = DOMUtils::filterChildElements(XML_PREFIX(element).str() + "param", element); std::list<DOMElement*> sendContents = DOMUtils::filterChildElements(XML_PREFIX(element).str() + "content", element); - std::string sendNameList = ATTR(element, "namelist"); + std::string sendNameList = ATTR(element, kXMLCharNameList); if (sendParams.size() > 0) { for (auto sendParam : sendParams) { - typeAssignSS << padding << " " << _prefix << "_tmpE.data." << ATTR(sendParam, "name") << " = " << ADAPT_SRC(ATTR(sendParam, "expr")) << ";" << std::endl; + typeAssignSS << padding << " " << _prefix << "_tmpE.data." << ATTR(sendParam, kXMLCharName) << " = " << ADAPT_SRC(ATTR(sendParam, kXMLCharExpr)) << ";" << std::endl; } } if (sendNameList.size() > 0) { @@ -1168,8 +1168,8 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO } else { typeAssignSS << padding << " " << _prefix << "_tmpE.data = " << content << ";" << std::endl; } - } else if (HAS_ATTR(contentElem, "expr")) { - typeAssignSS << padding << " " << _prefix << "_tmpE.data = " << ADAPT_SRC(ATTR(contentElem, "expr")) << ";" << std::endl; + } else if (HAS_ATTR(contentElem, kXMLCharExpr)) { + typeAssignSS << padding << " " << _prefix << "_tmpE.data = " << ADAPT_SRC(ATTR(contentElem, kXMLCharExpr)) << ";" << std::endl; } } @@ -1227,10 +1227,10 @@ void ChartToPromela::writeExecContent(std::ostream& stream, const XERCESC_NS::DO stream << padding << "fi" << std::endl; } else if(TAGNAME(element) == "cancel") { - if (HAS_ATTR(element, "sendid")) { - stream << " " << padding << "cancelSendId(" << _analyzer->macroForLiteral(ATTR(element, "sendid")) << "," << _analyzer->macroForLiteral(_invokerid) << ");" << std::endl; - } else if (HAS_ATTR(element, "sendidexpr")) { - stream << " " << padding << "cancelSendId(" << ADAPT_SRC(ATTR(element, "sendidexpr")) << "," << _analyzer->macroForLiteral(_invokerid) << ");" << std::endl; + if (HAS_ATTR(element, kXMLCharSendId)) { + stream << " " << padding << "cancelSendId(" << _analyzer->macroForLiteral(ATTR(element, kXMLCharSendId)) << "," << _analyzer->macroForLiteral(_invokerid) << ");" << std::endl; + } else if (HAS_ATTR(element, kXMLCharSendIdExpr)) { + stream << " " << padding << "cancelSendId(" << ADAPT_SRC(ATTR(element, kXMLCharSendIdExpr)) << "," << _analyzer->macroForLiteral(_invokerid) << ");" << std::endl; } } else { LOGD(USCXML_VERBATIM) << "'" << TAGNAME(element) << "' not supported" << std::endl << element << std::endl; @@ -1419,8 +1419,8 @@ void ChartToPromela::writeFSMMacrostep(std::ostream& stream) { ChartToPromela* invoker = _machinesNested[invokeElem]; // pass variables via namelist - if (HAS_ATTR(invokeElem, "namelist")) { - std::list<std::string> namelist = tokenize(ATTR_CAST(invokeElem, "namelist")); + if (HAS_ATTR(invokeElem, kXMLCharNameList)) { + std::list<std::string> namelist = tokenize(ATTR_CAST(invokeElem, kXMLCharNameList)); for (auto name : namelist) { if (invoker->_dataModelVars.find(name) != invoker->_dataModelVars.end()) { stream << " " << invoker->_prefix << name << " = " << _prefix << name << ";" << std::endl; @@ -1431,8 +1431,8 @@ void ChartToPromela::writeFSMMacrostep(std::ostream& stream) { // pass variables via params std::list<DOMElement*> invokeParams = DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + + "param", invokeElem); for (auto param : invokeParams) { - std::string name = ATTR(param, "name"); - std::string expression = ATTR(param, "expr"); + std::string name = ATTR(param, kXMLCharName); + std::string expression = ATTR(param, kXMLCharExpr); if (invoker->_dataModelVars.find(name) != invoker->_dataModelVars.end()) { stream << " " << invoker->_prefix << name << " = " << ADAPT_SRC(expression) << ";" << std::endl; } @@ -1441,8 +1441,8 @@ void ChartToPromela::writeFSMMacrostep(std::ostream& stream) { TRACE_EXECUTION_V("Invoking in state %d", "i"); stream << " run " << invoker->_prefix << "step() priority 20;" << std::endl; - if (HAS_ATTR(invokeElem, "idlocation")) { - stream << " " << ADAPT_SRC(ATTR(invokeElem, "idlocation")) << " = "; + if (HAS_ATTR(invokeElem, kXMLCharIdLocation)) { + stream << " " << ADAPT_SRC(ATTR(invokeElem, kXMLCharIdLocation)) << " = "; stream << _analyzer->macroForLiteral(invoker->_invokerid) << ";" << std::endl; } @@ -1486,10 +1486,10 @@ void ChartToPromela::writeFSMMacrostep(std::ostream& stream) { for (auto state : _states) { std::list<DOMElement*> invokers = DOMUtils::filterChildElements(XML_PREFIX(state).str() + "invoke", state, false); if (invokers.size() > 0) { - stream << " :: i == " << ATTR(state, "documentOrder") << " && " << _prefix << "invocations[i] -> { " << std::endl; + stream << " :: i == " << ATTR(state, X("documentOrder")) << " && " << _prefix << "invocations[i] -> { " << std::endl; for (auto invoker : invokers) { assert(_machinesNested.find(invoker) != _machinesNested.end()); - if (HAS_ATTR(invoker, "autoforward") && stringIsTrue(ATTR(invoker, "autoforward"))) { + if (HAS_ATTR(invoker, kXMLCharAutoForward) && stringIsTrue(ATTR(invoker, kXMLCharAutoForward))) { stream << " " << _machinesNested[invoker]->_prefix << "eQ " << insertOp << " " << _prefix << "_event;" << std::endl; if (_analyzer->usesEventField("delay")) { stream << " insertWithDelay(" << _machinesNested[invoker]->_prefix << "eQ);" << std::endl; @@ -1654,8 +1654,8 @@ void ChartToPromela::writeFSMDequeueEvent(std::ostream& stream) { ChartToPromela* invoker = _machinesNested[invokeElem]; // pass variables via namelist - if (HAS_ATTR(invokeElem, "namelist")) { - std::list<std::string> namelist = tokenize(ATTR_CAST(invokeElem, "namelist")); + if (HAS_ATTR(invokeElem, kXMLCharNameList)) { + std::list<std::string> namelist = tokenize(ATTR_CAST(invokeElem, kXMLCharNameList)); for (auto name : namelist) { if (invoker->_dataModelVars.find(name) != invoker->_dataModelVars.end()) { stream << " " << invoker->_prefix << name << " = " << _prefix << name << ";" << std::endl; @@ -1666,8 +1666,8 @@ void ChartToPromela::writeFSMDequeueEvent(std::ostream& stream) { // pass variables via params std::list<DOMElement*> invokeParams = DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + + "param", invokeElem); for (auto param : invokeParams) { - std::string name = ATTR(param, "name"); - std::string expression = ATTR(param, "expr"); + std::string name = ATTR(param, kXMLCharName); + std::string expression = ATTR(param, kXMLCharExpr); if (invoker->_dataModelVars.find(name) != invoker->_dataModelVars.end()) { stream << " " << invoker->_prefix << name << " = " << ADAPT_SRC(expression) << ";" << std::endl; } @@ -1676,8 +1676,8 @@ void ChartToPromela::writeFSMDequeueEvent(std::ostream& stream) { TRACE_EXECUTION_V("Invoking in state %d", "i"); stream << " run " << invoker->_prefix << "step() priority 20;" << std::endl; - if (HAS_ATTR(invokeElem, "idlocation")) { - stream << " " << ADAPT_SRC(ATTR(invokeElem, "idlocation")) << " = "; + if (HAS_ATTR(invokeElem, kXMLCharIdLocation)) { + stream << " " << ADAPT_SRC(ATTR(invokeElem, kXMLCharIdLocation)) << " = "; stream << _analyzer->macroForLiteral(invoker->_invokerid) << ";" << std::endl; } @@ -1737,10 +1737,10 @@ void ChartToPromela::writeFSMDequeueEvent(std::ostream& stream) { for (auto state : _states) { std::list<DOMElement*> invokers = DOMUtils::filterChildElements(XML_PREFIX(state).str() + "invoke", state, false); if (invokers.size() > 0) { - stream << " :: i == " << ATTR(state, "documentOrder") << " && " << _prefix << "invocations[i] -> { " << std::endl; + stream << " :: i == " << ATTR(state, X("documentOrder")) << " && " << _prefix << "invocations[i] -> { " << std::endl; for (auto invoker : invokers) { assert(_machinesNested.find(invoker) != _machinesNested.end()); - if (HAS_ATTR(invoker, "autoforward") && stringIsTrue(ATTR(invoker, "autoforward"))) { + if (HAS_ATTR(invoker, kXMLCharAutoForward) && stringIsTrue(ATTR(invoker, kXMLCharAutoForward))) { stream << " " << _machinesNested[invoker]->_prefix << "eQ " << insertOp << " " << _prefix << "_event;" << std::endl; if (_analyzer->usesEventField("delay")) { stream << " insertWithDelay(" << _machinesNested[invoker]->_prefix << "eQ);" << std::endl; @@ -1851,9 +1851,9 @@ void ChartToPromela::writeFSMSelectTransitions(std::ostream& stream) { for (size_t i = 0; i < _transitions.size(); i++) { stream << " || (i == " << toStr(i); - if (HAS_ATTR(_transitions[i], "event") && ATTR(_transitions[i], "event") != "*") { + if (HAS_ATTR(_transitions[i], kXMLCharEvent) && ATTR(_transitions[i], kXMLCharEvent) != "*") { stream << " && (false"; - std::list<std::string> eventLiterals = tokenize(ATTR(_transitions[i], "event")); + std::list<std::string> eventLiterals = tokenize(ATTR(_transitions[i], kXMLCharEvent)); for (auto eventLiteral : eventLiterals) { if (boost::ends_with(eventLiteral, ".*")) { eventLiteral = eventLiteral.substr(0, eventLiteral.size() - 2); @@ -1868,8 +1868,8 @@ void ChartToPromela::writeFSMSelectTransitions(std::ostream& stream) { } stream << ")"; } - if (HAS_ATTR(_transitions[i], "cond")) { - stream << " && " << ADAPT_SRC(ATTR(_transitions[i], "cond")); + if (HAS_ATTR(_transitions[i], kXMLCharCond)) { + stream << " && " << ADAPT_SRC(ATTR(_transitions[i], kXMLCharCond)); } stream << ")" << std::endl; } @@ -2501,12 +2501,12 @@ void ChartToPromela::writeFSMEnterStates(std::ostream& stream) { continue; DOMElement* parent = static_cast<DOMElement*>(state->getParentNode()); - if (!HAS_ATTR(parent, "id")) + if (!HAS_ATTR(parent, kXMLCharId)) continue; - std::string doneEvent = _analyzer->macroForLiteral("done.state." + ATTR_CAST(state->getParentNode(), "id")); + std::string doneEvent = _analyzer->macroForLiteral("done.state." + ATTR_CAST(state->getParentNode(), kXMLCharId)); - stream << " :: (i == " << ATTR(state, "documentOrder") << ") -> {" << std::endl; + stream << " :: (i == " << ATTR(state, X("documentOrder")) << ") -> {" << std::endl; if (_analyzer->usesComplexEventStruct()) { std::string typeReset = _analyzer->getTypeReset(_prefix + "_tmpE", _analyzer->getType("_event"), 7); @@ -2573,10 +2573,10 @@ void ChartToPromela::writeFSMEnterStates(std::ostream& stream) { stream << " if" << std::endl; for (auto state : _states) { - if (isParallel(state) && HAS_ATTR(state, "id")) { - stream << " :: j == " << toStr(ATTR(state, "documentOrder")) << " -> {" << std::endl; + if (isParallel(state) && HAS_ATTR(state, kXMLCharId)) { + stream << " :: j == " << toStr(ATTR(state, X("documentOrder"))) << " -> {" << std::endl; - std::string doneEvent = _analyzer->macroForLiteral("done.state." + ATTR(state, "id")); + std::string doneEvent = _analyzer->macroForLiteral("done.state." + ATTR(state, kXMLCharId)); if (_analyzer->usesComplexEventStruct()) { std::string typeReset = _analyzer->getTypeReset(_prefix + "_tmpE", _analyzer->getType("_event"), 10); @@ -2669,7 +2669,7 @@ void ChartToPromela::writeFSMTerminateMachine(std::ostream& stream) { stream << " if" << std::endl; for (auto machine : _machinesNested) { - stream << " :: i == " << ATTR_CAST(machine.first->getParentNode(), "documentOrder") << " -> {" << std::endl; + stream << " :: i == " << ATTR_CAST(machine.first->getParentNode(), X("documentOrder")) << " -> {" << std::endl; stream << " " << machine.second->_prefix << "flags[USCXML_CTX_FINISHED] = true;" << std::endl; stream << " }" << std::endl; } @@ -2752,7 +2752,7 @@ void ChartToPromela::writeIfBlock(std::ostream& stream, std::list<DOMElement*>& stream << padding << "if" << std::endl; // we need to nest the elseifs to resolve promela if semantics - stream << padding << ":: (" << ADAPT_SRC(ATTR(ifNode, "cond")) << ") -> {" << std::endl; + stream << padding << ":: (" << ADAPT_SRC(ATTR(ifNode, kXMLCharCond)) << ") -> {" << std::endl; DOMNode* child; if (TAGNAME(ifNode) == "if") { diff --git a/src/uscxml/transform/ChartToVHDL.cpp b/src/uscxml/transform/ChartToVHDL.cpp index 1f25bb8..810d823 100644 --- a/src/uscxml/transform/ChartToVHDL.cpp +++ b/src/uscxml/transform/ChartToVHDL.cpp @@ -56,14 +56,14 @@ void ChartToVHDL::findEvents() { }, _scxml); for (auto withEvent : withEvents) { -// if (HAS_ATTR_CAST(withEvent, "event")) { -// if (ATTR_CAST(withEvent, "event") != "*") -// _eventTrie.addWord(ATTR_CAST(withEvent, "event")); +// if (HAS_ATTR_CAST(withEvent, kXMLCharEvent)) { +// if (ATTR_CAST(withEvent, kXMLCharEvent) != "*") +// _eventTrie.addWord(ATTR_CAST(withEvent, kXMLCharEvent)); // } // Tokenized version below - if (HAS_ATTR_CAST(withEvent, "event")) { - std::string eventNames = ATTR_CAST(withEvent, "event"); + if (HAS_ATTR_CAST(withEvent, kXMLCharEvent)) { + std::string eventNames = ATTR_CAST(withEvent, kXMLCharEvent); std::list<std::string> events = tokenize(eventNames); for (std::list<std::string>::iterator eventIter = events.begin(); eventIter != events.end(); eventIter++) { @@ -159,8 +159,8 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " next_event_we_i :in std_logic;" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { // create enable line if transition has conditions - stream << " transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << + if (HAS_ATTR(transition, kXMLCharCond)) { // create enable line if transition has conditions + stream << " transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_i : std_logic;" << std::endl; } @@ -170,20 +170,20 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " error_o :out std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") << "_o :out std_logic;" + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_o :out std_logic;" << std::endl; } } @@ -201,23 +201,23 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " rst_i :in std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_i :in std_logic;" << std::endl; } } @@ -238,15 +238,15 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " rst_i :in std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } stream << " --outputs" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << " transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << " transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_o :out std_logic;" << std::endl; } } @@ -272,30 +272,30 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " -- wiring" << std::endl; for (auto state : _states) { - stream << " signal state_active_" << ATTR(state, "documentOrder") + stream << " signal state_active_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " signal entry_set_" << ATTR(state, "documentOrder") + stream << " signal entry_set_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " signal exit_set_" << ATTR(state, "documentOrder") + stream << " signal exit_set_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " signal transition_set_" << ATTR(transition, "postFixOrder") + stream << " signal transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig : std_logic;" << std::endl; } } for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { // create enable line if transition has conditions - stream << " signal transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << + if (HAS_ATTR(transition, kXMLCharCond)) { // create enable line if transition has conditions + stream << " signal transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig : std_logic;" << std::endl; } @@ -323,35 +323,35 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " error_o => error_o," << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") - << "_o => state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) + << "_o => state_active_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") - << "_o => entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) + << "_o => entry_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") - << "_o => exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) + << "_o => exit_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") - << "_o => transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) + << "_o => transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { // create enable line if transition has conditions - stream << " transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << - "_i => transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << + if (HAS_ATTR(transition, kXMLCharCond)) { // create enable line if transition has conditions + stream << " transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << + "_i => transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } @@ -370,27 +370,27 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " event_we_o => next_event_we_i," << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") - << "_i => state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) + << "_i => state_active_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") - << "_i => entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) + << "_i => entry_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") - << "_i => exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) + << "_i => exit_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") - << "_i => transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) + << "_i => transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } @@ -407,17 +407,17 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { stream << " rst_i => reset," << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") - << "_i => state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) + << "_i => state_active_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } stream << " --outputs" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << " transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") - << "_o => transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << " transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) + << "_o => transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } @@ -432,8 +432,8 @@ void ChartToVHDL::writeTestbench(std::ostream &stream) { std::string passStateNo = ""; for (auto final : topLevelFinal) { - if (ATTR(final, "id") == "pass") { - passStateNo = ATTR(final, "documentOrder"); + if (ATTR(final, kXMLCharId) == "pass") { + passStateNo = ATTR(final, X("documentOrder")); } } @@ -486,7 +486,7 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " rst :in std_logic;" << std::endl; stream << " --outputs" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } stream << " completed_o :out std_logic" << std::endl; @@ -511,20 +511,20 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " error_o :out std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") << "_o :out std_logic;" + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_o :out std_logic;" << std::endl; } } @@ -541,23 +541,23 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " rst_i :in std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_i :in std_logic;" << std::endl; } } @@ -583,23 +583,23 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " -- wiring" << std::endl; for (auto state : _states) { - stream << " signal state_active_" << ATTR(state, "documentOrder") + stream << " signal state_active_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " signal entry_set_" << ATTR(state, "documentOrder") + stream << " signal entry_set_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " signal exit_set_" << ATTR(state, "documentOrder") + stream << " signal exit_set_" << ATTR(state, X("documentOrder")) << "_sig : std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " signal transition_set_" << ATTR(transition, "postFixOrder") + stream << " signal transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig : std_logic;" << std::endl; } } @@ -610,8 +610,8 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << std::endl; for (auto state : _states) { - stream << "state_active_" << ATTR(state, "documentOrder") - << "_o <= state_active_" << ATTR(state, "documentOrder") + stream << "state_active_" << ATTR(state, X("documentOrder")) + << "_o <= state_active_" << ATTR(state, X("documentOrder")) << "_sig;" << std::endl; } stream << std::endl; @@ -629,27 +629,27 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " error_o => error_o," << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") - << "_o => state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) + << "_o => state_active_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") - << "_o => entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) + << "_o => entry_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") - << "_o => exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) + << "_o => exit_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") - << "_o => transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) + << "_o => transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } @@ -668,27 +668,27 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { stream << " event_we_o => next_event_we_i," << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") - << "_i => state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) + << "_i => state_active_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") - << "_i => entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) + << "_i => entry_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") - << "_i => exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) + << "_i => exit_set_" << ATTR(state, X("documentOrder")) << "_sig," << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") - << "_i => transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) + << "_i => transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig," << std::endl; } } @@ -704,8 +704,8 @@ void ChartToVHDL::writeTopLevel(std::ostream &stream) { std::string passStateNo = ""; for (auto final : topLevelFinal) { - if (ATTR(final, "id") == "pass") { - passStateNo = ATTR(final, "documentOrder"); + if (ATTR(final, kXMLCharId) == "pass") { + passStateNo = ATTR(final, X("documentOrder")); } } stream << "end architecture;" << std::endl; @@ -724,23 +724,23 @@ void ChartToVHDL::writeEventController(std::ostream &stream) { stream << " rst_i :in std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_i :in std_logic;" << std::endl; } } @@ -814,18 +814,18 @@ void ChartToVHDL::writeEventController(std::ostream &stream) { for (auto state : _states) { if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << std::endl << " or entry_set_" << ATTR(state, "documentOrder") + stream << std::endl << " or entry_set_" << ATTR(state, X("documentOrder")) << "_i"; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << std::endl << " or exit_set_" << ATTR(state, "documentOrder") + stream << std::endl << " or exit_set_" << ATTR(state, X("documentOrder")) << "_i"; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << std::endl << " or transition_set_" << ATTR(transition, "postFixOrder") + stream << std::endl << " or transition_set_" << ATTR(transition, X("postFixOrder")) << "_i"; } } @@ -866,7 +866,7 @@ void ChartToVHDL::writeEventController(std::ostream &stream) { size_t jj = 0; for (auto eventIter = _eventNames.begin(); eventIter != _eventNames.end(); eventIter++, jj++) { - if (((*eventIter)->value) == ATTR(exContentElem, "event")) { + if (((*eventIter)->value) == ATTR(exContentElem, kXMLCharEvent)) { break; } } @@ -954,15 +954,15 @@ void ChartToVHDL::writeConditionSolver(std::ostream &stream) { stream << " rst_i :in std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_i :in std_logic;" << std::endl; } stream << " --outputs" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << " transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << " transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_o :out std_logic;" << std::endl; } } @@ -986,8 +986,8 @@ void ChartToVHDL::writeConditionSolver(std::ostream &stream) { } for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << "signal transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << "signal transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig : std_logic;" << std::endl; } } @@ -1002,9 +1002,9 @@ void ChartToVHDL::writeConditionSolver(std::ostream &stream) { stream << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << "transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") - << "_o <= transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << "transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) + << "_o <= transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig;" << std::endl; } } @@ -1017,10 +1017,10 @@ void ChartToVHDL::writeConditionSolver(std::ostream &stream) { // solve conditions stream << "-- solve conditions" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { - stream << "-- cond:"<< ATTR(transition, "cond") << std::endl; + if (HAS_ATTR(transition, kXMLCharCond)) { + stream << "-- cond:"<< ATTR(transition, kXMLCharCond) << std::endl; // TODO parse code here and generate hardware from AST - stream << "transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") + stream << "transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_sig <= '0';" << std::endl; } } @@ -1041,15 +1041,15 @@ std::string ChartToVHDL::getLineForExecContent(const DOMNode *elem) { if (ecBlock->getNodeType() == DOMNode::ELEMENT_NODE) { std::string localName = LOCALNAME_CAST(ecBlock); if (localName == XML_PREFIX(_scxml).str() + "transition") { - return "transition_set_" + ATTR_CAST(ecBlock, "postFixOrder") + "_i"; + return "transition_set_" + ATTR_CAST(ecBlock, X("postFixOrder")) + "_i"; } if (localName == XML_PREFIX(_scxml).str() + "onentry") { - return "entry_set_" + ATTR_CAST(ecBlock->getParentNode(), "documentOrder") + "_i"; + return "entry_set_" + ATTR_CAST(ecBlock->getParentNode(), X("documentOrder")) + "_i"; } if (localName == XML_PREFIX(_scxml).str() + "onexit") { - return "exit_set_" + ATTR_CAST(ecBlock->getParentNode(), "documentOrder") + "_i"; + return "exit_set_" + ATTR_CAST(ecBlock->getParentNode(), X("documentOrder")) + "_i"; } } @@ -1073,8 +1073,8 @@ void ChartToVHDL::writeMicroStepper(std::ostream &stream) { stream << " next_event_we_i :in std_logic;" << std::endl; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "cond")) { // create enable line if transition has conditions - stream << "signal transition_condition_fulfilled_" << ATTR(transition, "postFixOrder") << + if (HAS_ATTR(transition, kXMLCharCond)) { // create enable line if transition has conditions + stream << "signal transition_condition_fulfilled_" << ATTR(transition, X("postFixOrder")) << "_i : std_logic;" << std::endl; } @@ -1084,20 +1084,20 @@ void ChartToVHDL::writeMicroStepper(std::ostream &stream) { stream << " error_o :out std_logic;" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << " entry_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " entry_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << " exit_set_" << ATTR(state, "documentOrder") << "_o :out std_logic;" << std::endl; + stream << " exit_set_" << ATTR(state, X("documentOrder")) << "_o :out std_logic;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << " transition_set_" << ATTR(transition, "postFixOrder") << "_o :out std_logic;" + stream << " transition_set_" << ATTR(transition, X("postFixOrder")) << "_o :out std_logic;" << std::endl; } } @@ -1254,18 +1254,18 @@ void ChartToVHDL::writeSignalsAndComponents(std::ostream &stream) { std::list<std::string> signalDecls; for (auto state : _states) { - std::string parent = ATTR(state, "parent"); + std::string parent = ATTR(state, X("parent")); - signalDecls.push_back("signal state_active_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); - signalDecls.push_back("signal state_next_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); - signalDecls.push_back("signal in_entry_set_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); - signalDecls.push_back("signal in_exit_set_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); - signalDecls.push_back("signal in_complete_entry_set_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); + signalDecls.push_back("signal state_active_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); + signalDecls.push_back("signal state_next_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); + signalDecls.push_back("signal in_entry_set_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); + signalDecls.push_back("signal in_exit_set_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); + signalDecls.push_back("signal in_complete_entry_set_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); // not needed for <scxml> state if (parent.size() != 0) { signalDecls.push_back( - "signal in_complete_entry_set_up_" + ATTR(state, "documentOrder") + "_sig : std_logic;"); + "signal in_complete_entry_set_up_" + ATTR(state, X("documentOrder")) + "_sig : std_logic;"); } } @@ -1282,7 +1282,7 @@ void ChartToVHDL::writeSignalsAndComponents(std::ostream &stream) { stream << "signal optimal_transition_set_combined_sig : std_logic;" << std::endl; for (auto transition : _transitions) { - stream << "signal in_optimal_transition_set_" << ATTR(transition, "postFixOrder") << "_sig : std_logic;" + stream << "signal in_optimal_transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig : std_logic;" << std::endl; } stream << std::endl; @@ -1405,9 +1405,9 @@ void ChartToVHDL::writeInternalEventHandler(std::ostream &stream) { VContainer eventConsumed = VOR; for (auto transition : _transitions) { - if (HAS_ATTR(transition, "event") == true) { + if (HAS_ATTR(transition, kXMLCharEvent) == true) { *eventConsumed += VLINE("in_optimal_transition_set_" - + ATTR(transition, "postFixOrder") + "_sig"); + + ATTR(transition, X("postFixOrder")) + "_sig"); } } @@ -1467,21 +1467,21 @@ void ChartToVHDL::writeActiveStateNplusOne(std::ostream &stream) { stream << "-- active configuration" << std::endl; for (auto state : _states) { - std::string parent = ATTR(state, "parent"); + std::string parent = ATTR(state, X("parent")); // special case for <scxml> to start the state machine if (parent.size() == 0) { - stream << " state_next_" << ATTR(state, "documentOrder") << "_sig <= " << + stream << " state_next_" << ATTR(state, X("documentOrder")) << "_sig <= " << "not completed_sig;" << std::endl; continue; } VBranch *tree = (VASSIGN, - VLINE("state_next_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("state_next_" + ATTR(state, X("documentOrder")) + "_sig"), (VOR, - VLINE("in_complete_entry_set_" + ATTR(state, "documentOrder") + "_sig"), - (VAND, (VNOT, VLINE("in_exit_set_" + ATTR(state, "documentOrder") + "_sig")), - VLINE("state_active_" + ATTR(state, "documentOrder") + "_sig")) + VLINE("in_complete_entry_set_" + ATTR(state, X("documentOrder")) + "_sig"), + (VAND, (VNOT, VLINE("in_exit_set_" + ATTR(state, X("documentOrder")) + "_sig")), + VLINE("state_active_" + ATTR(state, X("documentOrder")) + "_sig")) )); tree->print(stream); @@ -1497,12 +1497,12 @@ void ChartToVHDL::writeOptimalTransitionSetSelection(std::ostream &stream) { for (auto transIter = _transitions.begin(); transIter != _transitions.end(); transIter++) { DOMElement *transition = *transIter; - std::string conflicts = ATTR(transition, "conflictBools"); + std::string conflicts = ATTR(transition, X("conflictBools")); VContainer nameMatchers = VOR; - if (HAS_ATTR(transition, "event")) { - std::list<std::string> eventDescs = tokenize(ATTR(transition, "event")); + if (HAS_ATTR(transition, kXMLCharEvent)) { + std::list<std::string> eventDescs = tokenize(ATTR(transition, kXMLCharEvent)); for (std::list<std::string>::iterator descIter = eventDescs.begin(); descIter != eventDescs.end(); descIter++) { std::list<TrieNode *> eventNames = _eventTrie.getWordsWithPrefix( @@ -1517,26 +1517,26 @@ void ChartToVHDL::writeOptimalTransitionSetSelection(std::ostream &stream) { } VContainer conflicters = VOR; - for (size_t j = 0; j < strTo<size_t>(ATTR(transition, "postFixOrder")); j++) { + for (size_t j = 0; j < strTo<size_t>(ATTR(transition, X("postFixOrder"))); j++) { if (conflicts[j] == '1') { *conflicters += VLINE("in_optimal_transition_set_" + toStr(j) + "_sig"); } } VBranch *tree = (VASSIGN, - VLINE("in_optimal_transition_set_" + ATTR(transition, "postFixOrder") + "_sig"), + VLINE("in_optimal_transition_set_" + ATTR(transition, X("postFixOrder")) + "_sig"), (VAND, - (HAS_ATTR(transition, "event") + (HAS_ATTR(transition, kXMLCharEvent) ? (VNOT, VLINE("spontaneous_active")) : (VNOP, VLINE("spontaneous_en"))), - HAS_ATTR(transition, "cond") + HAS_ATTR(transition, kXMLCharCond) ? (VNOP, - VLINE("transition_condition_fulfilled_" + ATTR(transition, "postFixOrder") + + VLINE("transition_condition_fulfilled_" + ATTR(transition, X("postFixOrder")) + "_i")) : (VNOP, VLINE("'1'")), - VLINE("state_active_" + ATTR(transition, "source") + "_sig"), + VLINE("state_active_" + ATTR(transition, kXMLCharSource) + "_sig"), nameMatchers, (VNOT, conflicters))); @@ -1544,10 +1544,10 @@ void ChartToVHDL::writeOptimalTransitionSetSelection(std::ostream &stream) { stream << ";" << std::endl; *optimalTransitions += VLINE("in_optimal_transition_set_" - + ATTR(transition, "postFixOrder") + "_sig"); - if (HAS_ATTR(transition, "event") == false) { + + ATTR(transition, X("postFixOrder")) + "_sig"); + if (HAS_ATTR(transition, kXMLCharEvent) == false) { *spontaneoursActive += VLINE("in_optimal_transition_set_" - + ATTR(transition, "postFixOrder") + "_sig"); + + ATTR(transition, X("postFixOrder")) + "_sig"); } } @@ -1570,23 +1570,23 @@ void ChartToVHDL::writeExitSet(std::ostream &stream) { for (auto state : _states) { - std::string completion = ATTR(state, "completionBools"); - std::string ancestors = ATTR(state, "ancBools"); - std::string children = ATTR(state, "childBools"); - std::string parent = ATTR(state, "parent"); + std::string completion = ATTR(state, X("completionBools")); + std::string ancestors = ATTR(state, X("ancBools")); + std::string children = ATTR(state, X("childBools")); + std::string parent = ATTR(state, X("parent")); VContainer exitsetters = VOR; for (auto transition : _transitions) { - std::string exitSet = ATTR(transition, "exitSetBools"); - if (exitSet.at(strTo<size_t>(ATTR(state, "documentOrder"))) == '1') { - *exitsetters += VLINE("in_optimal_transition_set_" + ATTR(transition, "postFixOrder") + "_sig "); + std::string exitSet = ATTR(transition, X("exitSetBools")); + if (exitSet.at(strTo<size_t>(ATTR(state, X("documentOrder")))) == '1') { + *exitsetters += VLINE("in_optimal_transition_set_" + ATTR(transition, X("postFixOrder")) + "_sig "); } } VBranch *tree = (VASSIGN, - VLINE("in_exit_set_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("in_exit_set_" + ATTR(state, X("documentOrder")) + "_sig"), (VAND, - VLINE("state_active_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("state_active_" + ATTR(state, X("documentOrder")) + "_sig"), exitsetters)); tree->print(stream); @@ -1600,11 +1600,11 @@ void ChartToVHDL::writeEntrySet(std::ostream &stream) { for (auto state : _states) { VBranch *tree = (VASSIGN, - VLINE("in_entry_set_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("in_entry_set_" + ATTR(state, X("documentOrder")) + "_sig"), (VAND, - VLINE("in_complete_entry_set_" + ATTR(state, "documentOrder") + "_sig"), - (VOR, VLINE("in_exit_set_" + ATTR(state, "documentOrder") + "_sig"), - (VNOT, VLINE("state_active_" + ATTR(state, "documentOrder") + "_sig"))))); + VLINE("in_complete_entry_set_" + ATTR(state, X("documentOrder")) + "_sig"), + (VOR, VLINE("in_exit_set_" + ATTR(state, X("documentOrder")) + "_sig"), + (VNOT, VLINE("state_active_" + ATTR(state, X("documentOrder")) + "_sig"))))); tree->print(stream); stream << ";" << std::endl; @@ -1615,10 +1615,10 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { stream << "-- complete entry set selection" << std::endl; for (auto state : _states) { - std::string completion = ATTR(state, "completionBools"); - std::string ancestors = ATTR(state, "ancBools"); - std::string children = ATTR(state, "childBools"); - std::string parent = ATTR(state, "parent"); + std::string completion = ATTR(state, X("completionBools")); + std::string ancestors = ATTR(state, X("ancBools")); + std::string children = ATTR(state, X("childBools")); + std::string parent = ATTR(state, X("parent")); if (parent.size() == 0) { continue; // skips <scxml> node @@ -1629,11 +1629,11 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { VContainer optimalEntrysetters = VOR; for (auto transition : _transitions) { // Is this state in TargetSet of the transition? - std::string targetSet = ATTR(transition, "targetBools"); - if (targetSet[strTo<size_t>(ATTR(state, "documentOrder"))] == '1') { + std::string targetSet = ATTR(transition, X("targetBools")); + if (targetSet[strTo<size_t>(ATTR(state, X("documentOrder")))] == '1') { //yes? then add the transition to optimal entry set of the state *optimalEntrysetters += - VLINE("in_optimal_transition_set_" + ATTR(transition, "postFixOrder") + "_sig"); + VLINE("in_optimal_transition_set_" + ATTR(transition, X("postFixOrder")) + "_sig"); } } @@ -1642,16 +1642,16 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { if (isCompound(state) || isParallel(state)) { for (auto tmp_state : _states) { // is tmp_state is child of state continue? - if (children[strTo<size_t>(ATTR(state, "documentOrder"))] == '1') { + if (children[strTo<size_t>(ATTR(state, X("documentOrder")))] == '1') { // yes? then add its complete_entry_set_up as ancestor completion *completeEntrysetters += - VLINE("in_complete_entry_set_up_" + ATTR(tmp_state, "documentOrder") + "_sig"); + VLINE("in_complete_entry_set_up_" + ATTR(tmp_state, X("documentOrder")) + "_sig"); } } } VBranch *tree = (VASSIGN, - VLINE("in_complete_entry_set_up_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("in_complete_entry_set_up_" + ATTR(state, X("documentOrder")) + "_sig"), (VOR, optimalEntrysetters, completeEntrysetters) ); tree->print(stream); @@ -1661,9 +1661,9 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { // descendant completion for (auto state : _states) { - std::string completion = ATTR(state, "completionBools"); - std::string ancestors = ATTR(state, "ancBools"); - std::string parent = ATTR(state, "parent"); //is it a int ? + std::string completion = ATTR(state, X("completionBools")); + std::string ancestors = ATTR(state, X("ancBools")); + std::string parent = ATTR(state, X("parent")); //is it a int ? if (parent.size() == 0) { continue; // skips <scxml> node @@ -1674,18 +1674,18 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { if (getParentState(state) != NULL && isCompound(getParentState(state))) { std::string children = ATTR_CAST(_states[strTo<size_t>(parent)], - "childBools"); + X("childBools")); - std::string parentInit = ATTR(getParentState(state), "initial"); + std::string parentInit = ATTR(getParentState(state), kXMLCharInitial); if (// if parent has init field an this state is inside --> add it as default completion (!parentInit.empty() - && ATTR(state, "id").compare(parentInit) == 0) || + && ATTR(state, kXMLCharId).compare(parentInit) == 0) || // or add this state as default completion when parent has no init field and it is the first in document order (parentInit.empty() && - (strTo<size_t>(ATTR(getParentState(state), "documentOrder")) + 1) == - strTo<size_t>(ATTR(state, "documentOrder")))) { + (strTo<size_t>(ATTR(getParentState(state), X("documentOrder"))) + 1) == + strTo<size_t>(ATTR(state, X("documentOrder"))))) { *descendantCompletion += - VLINE("in_entry_set_" + ATTR(getParentState(state), "documentOrder") + "_sig"); + VLINE("in_entry_set_" + ATTR(getParentState(state), X("documentOrder")) + "_sig"); // but only if compound parent is not already completed for (auto tmp_state : _states) { @@ -1693,12 +1693,12 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { // skip state itselve continue; } - if (children[strTo<size_t>(ATTR(tmp_state, "documentOrder"))] == '1') { + if (children[strTo<size_t>(ATTR(tmp_state, X("documentOrder")))] == '1') { *descendantCompletion += (VNOT, (VAND, - VLINE("state_active_" + ATTR(tmp_state, "documentOrder") + "_sig"), + VLINE("state_active_" + ATTR(tmp_state, X("documentOrder")) + "_sig"), (VNOT, - VLINE("in_exit_set_" + ATTR(tmp_state, "documentOrder") + + VLINE("in_exit_set_" + ATTR(tmp_state, X("documentOrder")) + "_sig")))); } } @@ -1711,13 +1711,13 @@ void ChartToVHDL::writeCompleteEntrySet(std::ostream &stream) { if (getParentState(state) != NULL && isParallel(getParentState(state))) { *descendantCompletion += - VLINE("in_complete_entry_set_" + ATTR(getParentState(state), "documentOrder") + "_sig"); + VLINE("in_complete_entry_set_" + ATTR(getParentState(state), X("documentOrder")) + "_sig"); } VBranch *tree = (VASSIGN, - VLINE("in_complete_entry_set_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("in_complete_entry_set_" + ATTR(state, X("documentOrder")) + "_sig"), (VOR, - VLINE("in_complete_entry_set_up_" + ATTR(state, "documentOrder") + "_sig"), + VLINE("in_complete_entry_set_up_" + ATTR(state, X("documentOrder")) + "_sig"), descendantCompletion)); tree->print(stream); @@ -1734,7 +1734,7 @@ void ChartToVHDL::writeStateHandler(std::ostream &stream) { stream << " if rst = '1' then" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") << "_sig <= " << "'0';" << std::endl; + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_sig <= " << "'0';" << std::endl; } stream << " in_complete_entry_set_0_sig <= '1';" << std::endl; @@ -1742,8 +1742,8 @@ void ChartToVHDL::writeStateHandler(std::ostream &stream) { stream << " in_complete_entry_set_0_sig <= '0';" << std::endl; for (auto state : _states) { - stream << " state_active_" << ATTR(state, "documentOrder") << "_sig <= " << "state_next_" << - ATTR(state, "documentOrder") << "_sig;" << std::endl; + stream << " state_active_" << ATTR(state, X("documentOrder")) << "_sig <= " << "state_next_" << + ATTR(state, X("documentOrder")) << "_sig;" << std::endl; } stream << " end if;" << std::endl; @@ -1758,7 +1758,7 @@ void ChartToVHDL::writeSystemSignalMapping(std::ostream &stream) { VContainer tlf = VOR; for (auto final : topLevelFinal) { - *tlf += VLINE("state_active_" + ATTR(final, "documentOrder") + "_sig"); + *tlf += VLINE("state_active_" + ATTR(final, X("documentOrder")) + "_sig"); } @@ -1785,26 +1785,26 @@ void ChartToVHDL::writeSystemSignalMapping(std::ostream &stream) { // interface signals stream << "-- interface signals" << std::endl; for (auto state : _states) { - stream << "state_active_" << ATTR(state, "documentOrder") - << "_o <= state_active_" << ATTR(state, "documentOrder") + stream << "state_active_" << ATTR(state, X("documentOrder")) + << "_o <= state_active_" << ATTR(state, X("documentOrder")) << "_sig;" << std::endl; if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onexit", state).size() > 0) { - stream << "exit_set_" << ATTR(state, "documentOrder") - << "_o <= in_exit_set_" << ATTR(state, "documentOrder") + stream << "exit_set_" << ATTR(state, X("documentOrder")) + << "_o <= in_exit_set_" << ATTR(state, X("documentOrder")) << "_sig;" << std::endl; } if (DOMUtils::filterChildElements(XML_PREFIX(_scxml).str() + "onentry", state).size() > 0) { - stream << "entry_set_" << ATTR(state, "documentOrder") - << "_o <= in_entry_set_" << ATTR(state, "documentOrder") + stream << "entry_set_" << ATTR(state, X("documentOrder")) + << "_o <= in_entry_set_" << ATTR(state, X("documentOrder")) << "_sig;" << std::endl; } } for (auto transition : _transitions) { if (DOMUtils::filterChildType(DOMNode::ELEMENT_NODE, transition).size() > 0) { - stream << "transition_set_" << ATTR(transition, "postFixOrder") - << "_o <= in_optimal_transition_set_" << ATTR(transition, "postFixOrder") + stream << "transition_set_" << ATTR(transition, X("postFixOrder")) + << "_o <= in_optimal_transition_set_" << ATTR(transition, X("postFixOrder")) << "_sig;" << std::endl; } } diff --git a/src/uscxml/transform/promela/PromelaCodeAnalyzer.cpp b/src/uscxml/transform/promela/PromelaCodeAnalyzer.cpp index 044e660..f8af351 100644 --- a/src/uscxml/transform/promela/PromelaCodeAnalyzer.cpp +++ b/src/uscxml/transform/promela/PromelaCodeAnalyzer.cpp @@ -40,8 +40,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { { for (size_t i = 0; i < interpreter->_states.size(); i++) { DOMElement* state = interpreter->_states[i]; - if (HAS_ATTR(state, "id")) { - createMacroName(ATTR(state, "id")); + if (HAS_ATTR(state, kXMLCharId)) { + createMacroName(ATTR(state, kXMLCharId)); } } } @@ -56,8 +56,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { }, interpreter->_scxml); for (auto internalEventName : internalEventNames) { - if (HAS_ATTR_CAST(internalEventName, "event")) { - std::string eventNames = ATTR_CAST(internalEventName, "event"); + if (HAS_ATTR_CAST(internalEventName, kXMLCharEvent)) { + std::string eventNames = ATTR_CAST(internalEventName, kXMLCharEvent); std::list<std::string> events = tokenize(eventNames); for (std::list<std::string>::iterator eventIter = events.begin(); eventIter != events.end(); eventIter++) { @@ -73,8 +73,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { } for (auto state : interpreter->_states) { - if (HAS_ATTR(state, "id") && (isCompound(state) || isParallel(state))) { - addEvent("done.state." + ATTR(state, "id")); + if (HAS_ATTR(state, kXMLCharId) && (isCompound(state) || isParallel(state))) { + addEvent("done.state." + ATTR(state, kXMLCharId)); } } @@ -82,8 +82,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { for (auto invoker : invokers) { addCode("_event.invokeid", interpreter); - if (HAS_ATTR(invoker, "id")) { - addEvent("done.state." + ATTR(invoker, "id")); + if (HAS_ATTR(invoker, kXMLCharId)) { + addEvent("done.state." + ATTR(invoker, kXMLCharId)); } } } @@ -126,8 +126,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { }, interpreter->_scxml); for (auto cond : withCond) { - if (HAS_ATTR(cond, "cond")) { - std::string code = ATTR_CAST(cond, "cond"); + if (HAS_ATTR(cond, kXMLCharCond)) { + std::string code = ATTR_CAST(cond, kXMLCharCond); code = sanitizeCode(code); addCode(code, interpreter); cond->setAttribute(X("cond"), X(code)); @@ -143,8 +143,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { }, interpreter->_scxml); for (auto expr : withExpr) { - if (HAS_ATTR(expr, "expr")) { - std::string code = ATTR_CAST(expr, "expr"); + if (HAS_ATTR(expr, kXMLCharExpr)) { + std::string code = ATTR_CAST(expr, kXMLCharExpr); code = sanitizeCode(code); addCode(code, interpreter); expr->setAttribute(X("expr"), X(code)); @@ -156,8 +156,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { }, interpreter->_scxml); for (auto location : withLocation) { - if (HAS_ATTR(location, "location")) { - std::string code = ATTR_CAST(location, "location"); + if (HAS_ATTR(location, kXMLCharLocation)) { + std::string code = ATTR_CAST(location, kXMLCharLocation); code = sanitizeCode(code); addCode(code, interpreter); location->setAttribute(X("location"), X(code)); @@ -186,13 +186,13 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { }, interpreter->_scxml); for (auto foreach : foreachs) { - if (HAS_ATTR(foreach, "index")) { - addCode(ATTR(foreach, "index"), interpreter); + if (HAS_ATTR(foreach, kXMLCharIndex)) { + addCode(ATTR(foreach, kXMLCharIndex), interpreter); } else { _hasIndexLessLoops = true; } - if (HAS_ATTR(foreach, "item")) { - addCode(ATTR(foreach, "item"), interpreter); + if (HAS_ATTR(foreach, kXMLCharItem)) { + addCode(ATTR(foreach, kXMLCharItem), interpreter); } } @@ -208,17 +208,17 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { } for (auto send : sends) { - if (HAS_ATTR(send, "idlocation")) { + if (HAS_ATTR(send, kXMLCharIdLocation)) { addCode("_event.sendid", interpreter); } - if (HAS_ATTR(send, "id")) { - addLiteral(ATTR(send, "id")); + if (HAS_ATTR(send, kXMLCharId)) { + addLiteral(ATTR(send, kXMLCharId)); addCode("_event.sendid", interpreter); } // do we need delays? - if (HAS_ATTR(send, "delay") || HAS_ATTR(send, "delayexpr")) { - size_t delay = strTo<size_t>(ATTR(send, "delay")); + if (HAS_ATTR(send, kXMLCharDelay) || HAS_ATTR(send, kXMLCharDelayExpr)) { + size_t delay = strTo<size_t>(ATTR(send, kXMLCharDelay)); if (delay > largestDelay) largestDelay = delay; addCode("_event.delay", interpreter); @@ -236,8 +236,8 @@ void PromelaCodeAnalyzer::analyze(ChartToPromela* interpreter) { withNamelists.splice(withNamelists.end(), DOMUtils::inDocumentOrder({XML_PREFIX(interpreter->_scxml).str() + "send"}, interpreter->_scxml)); withNamelists.splice(withNamelists.end(), DOMUtils::inDocumentOrder({XML_PREFIX(interpreter->_scxml).str() + "invoke"}, interpreter->_scxml)); for (auto withNamelist : withNamelists) { - if (HAS_ATTR(withNamelist, "namelist")) { - std::string namelist = ATTR(withNamelist, "namelist"); + if (HAS_ATTR(withNamelist, kXMLCharNameList)) { + std::string namelist = ATTR(withNamelist, kXMLCharNameList); std::list<std::string> names = tokenize(namelist); for (std::list<std::string>::iterator nameIter = names.begin(); nameIter != names.end(); nameIter++) { addCode("_event.data." + *nameIter + " = 0;", interpreter); // introduce for _event_t typedef |