summaryrefslogtreecommitdiffstats
path: root/src/uscxml/transform
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/transform')
-rw-r--r--src/uscxml/transform/ChartAnnotator.cpp24
-rw-r--r--src/uscxml/transform/ChartAnnotator.h27
-rw-r--r--src/uscxml/transform/ChartToC.cpp209
-rw-r--r--src/uscxml/transform/ChartToC.h2
-rw-r--r--src/uscxml/transform/ChartToFSM.cpp59
-rw-r--r--src/uscxml/transform/ChartToFSM.h2
-rw-r--r--src/uscxml/transform/ChartToFlatSCXML.cpp16
-rw-r--r--src/uscxml/transform/ChartToMinimalSCXML.cpp10
-rw-r--r--src/uscxml/transform/ChartToMinimalSCXML.h2
-rw-r--r--src/uscxml/transform/ChartToPromela.cpp119
-rw-r--r--src/uscxml/transform/ChartToPromela.h2
-rw-r--r--src/uscxml/transform/ChartToTex.h2
-rw-r--r--src/uscxml/transform/ChartToVHDL.cpp10
-rw-r--r--src/uscxml/transform/ChartToVHDL.h2
-rw-r--r--src/uscxml/transform/FlatStateIdentifier.h2
15 files changed, 274 insertions, 214 deletions
diff --git a/src/uscxml/transform/ChartAnnotator.cpp b/src/uscxml/transform/ChartAnnotator.cpp
new file mode 100644
index 0000000..5bab391
--- /dev/null
+++ b/src/uscxml/transform/ChartAnnotator.cpp
@@ -0,0 +1,24 @@
+/**
+ * @file
+ * @author 2012-2015 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#include "ChartAnnotator.h"
+
+namespace uscxml {
+
+} \ No newline at end of file
diff --git a/src/uscxml/transform/ChartAnnotator.h b/src/uscxml/transform/ChartAnnotator.h
new file mode 100644
index 0000000..3ce8f4a
--- /dev/null
+++ b/src/uscxml/transform/ChartAnnotator.h
@@ -0,0 +1,27 @@
+/**
+ * @file
+ * @author 2012-2016 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#ifndef CHARTANNOTATOR_H_2AC11ECB
+#define CHARTANNOTATOR_H_2AC11ECB
+
+namespace uscxml {
+
+}
+
+#endif /* end of include guard: CHARTANNOTATOR_H_2AC11ECB */
diff --git a/src/uscxml/transform/ChartToC.cpp b/src/uscxml/transform/ChartToC.cpp
index 7cc50fc..ee0b431 100644
--- a/src/uscxml/transform/ChartToC.cpp
+++ b/src/uscxml/transform/ChartToC.cpp
@@ -21,10 +21,11 @@
#include "uscxml/transform/ChartToC.h"
#include "uscxml/debug/Complexity.h"
#include <DOM/io/Stream.hpp>
+#include <DOM/SAX2DOM/SAX2DOM.hpp>
#include <iostream>
#include "uscxml/UUID.h"
#include "uscxml/util/MD5.hpp"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include <math.h>
#include <boost/algorithm/string.hpp>
#include <glog/logging.h>
@@ -205,10 +206,10 @@ void ChartToC::setStateCompletion() {
completion = getChildStates(state);
} else if (state.hasAttribute("initial")) {
- completion = getStates(tokenizeIdRefs(state.getAttribute("initial")));
+ completion = getStates(tokenize(state.getAttribute("initial")));
} else {
- NodeSet<std::string> initElems = filterChildElements(_nsInfo.xmlNSPrefix + "initial", state);
+ NodeSet<std::string> initElems = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "initial", state);
if(initElems.size() > 0 && !iequals(ATTR_CAST(initElems[0], "generated"), "true")) {
// initial element is first child
completion.push_back(initElems[0]);
@@ -450,7 +451,7 @@ void ChartToC::writeForwardDeclarations(std::ostream& stream) {
}
void ChartToC::findNestedMachines() {
- NodeSet<std::string> invokes = InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
for (size_t i = 0; i < invokes.size(); i++) {
if(isInEmbeddedDocument(invokes[i]))
@@ -472,10 +473,10 @@ void ChartToC::findNestedMachines() {
c2c = new ChartToC(Interpreter::fromURL(srcURL.asString()));
} else {
// is there a nested scxml machine inside?
- NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", invoke);
+ NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", invoke);
if (contents.size() == 0)
continue;
- NodeSet<std::string> scxmls = filterChildElements(_nsInfo.xmlNSPrefix + "scxml", contents[0]);
+ NodeSet<std::string> scxmls = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "scxml", contents[0]);
if (scxmls.size() == 0)
continue;
@@ -555,7 +556,7 @@ void ChartToC::writeMacros(std::ostream& stream) {
stream << std::endl;
stream << "#ifndef USCXML_MAX_NR_STATES_BYTES " << std::endl;
- stream << "# define USCXML_MAX_NR_STATES_BYTES " << _stateCharArraySize << std::endl;
+ stream << "# define USCXML_MAX_NR_STATES_BYTES " << (std::max)((size_t)1, _stateCharArraySize) << std::endl;
stream << "#endif " << std::endl;
stream << std::endl;
@@ -566,7 +567,7 @@ void ChartToC::writeMacros(std::ostream& stream) {
stream << std::endl;
stream << "#ifndef USCXML_MAX_NR_TRANS_BYTES " << std::endl;
- stream << "# define USCXML_MAX_NR_TRANS_BYTES " << _transCharArraySize << std::endl;
+ stream << "# define USCXML_MAX_NR_TRANS_BYTES " << (std::max)((size_t)1, _transCharArraySize) << std::endl;
stream << "#endif " << std::endl;
stream << std::endl;
@@ -1037,7 +1038,7 @@ void ChartToC::writeExecContentFinalize(std::ostream& stream) {
for (size_t i = 0; i < finalizes.size(); i++) {
Element<std::string> finalize(finalizes[i]);
- NodeSet<std::string> execContent = filterChildType(Node_base::ELEMENT_NODE, finalize);
+ NodeSet<std::string> execContent = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, finalize);
if (execContent.size() > 0) {
stream << "static int " << _prefix << "_" << DOMUtils::idForNode(finalize) << "(const uscxml_ctx* ctx, const uscxml_elem_invoke* invocation, const void* event) {" << std::endl;
@@ -1066,7 +1067,7 @@ void ChartToC::writeExecContent(std::ostream& stream) {
if (i == 0) {
// root state - we need to perform some initialization here
- NodeSet<std::string> globalScripts = filterChildElements(_nsInfo.xmlNSPrefix + "script", state);
+ NodeSet<std::string> globalScripts = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", state);
if (globalScripts.size() > 0) {
for (size_t j = 0; j < globalScripts.size(); j++) {
stream << "static int " << _prefix << "_global_script_" << toStr(j) << "(const uscxml_ctx* ctx, const uscxml_state* state, const void* event) {" << std::endl;
@@ -1086,7 +1087,7 @@ void ChartToC::writeExecContent(std::ostream& stream) {
}
}
- NodeSet<std::string> onexit = filterChildElements(_nsInfo.xmlNSPrefix + "onexit", state);
+ NodeSet<std::string> onexit = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onexit", state);
for (size_t j = 0; j < onexit.size(); j++) {
stream << "static int " << _prefix << "_" << DOMUtils::idForNode(state) << "_on_exit_" << toStr(j) << "(const uscxml_ctx* ctx, const uscxml_state* state, const void* event) {" << std::endl;
stream << " int err = USCXML_ERR_OK;" << std::endl;
@@ -1107,7 +1108,7 @@ void ChartToC::writeExecContent(std::ostream& stream) {
}
- NodeSet<std::string> onentry = filterChildElements(_nsInfo.xmlNSPrefix + "onentry", state);
+ NodeSet<std::string> onentry = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onentry", state);
for (size_t j = 0; j < onentry.size(); j++) {
stream << "static int " << _prefix << "_" << DOMUtils::idForNode(state) << "_on_entry_" << toStr(j) << "(const uscxml_ctx* ctx, const uscxml_state* state, const void* event) {" << std::endl;
stream << " int err = USCXML_ERR_OK;" << std::endl;
@@ -1129,7 +1130,7 @@ void ChartToC::writeExecContent(std::ostream& stream) {
}
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", state);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", state);
if (invokes.size() > 0) {
stream << "static int " << _prefix << "_" << DOMUtils::idForNode(state) << "_invoke(const uscxml_ctx* ctx, const uscxml_state* s, const uscxml_elem_invoke* invocation, unsigned char uninvoke) {" << std::endl;
for (size_t j = 0; j < invokes.size(); j++) {
@@ -1144,7 +1145,7 @@ void ChartToC::writeExecContent(std::ostream& stream) {
for (size_t i = 0; i < _transitions.size(); i++) {
Element<std::string> transition(_transitions[i]);
- NodeSet<std::string> execContent = filterChildType(Node_base::ELEMENT_NODE, transition);
+ NodeSet<std::string> execContent = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, transition);
if (execContent.size() > 0) {
stream << "static int " << _prefix << "_" << DOMUtils::idForNode(transition) << "_on_trans(const uscxml_ctx* ctx, const uscxml_state* state, const void* event) {" << std::endl;
@@ -1205,7 +1206,7 @@ void ChartToC::writeExecContent(std::ostream& stream, const Arabica::DOM::Node<s
stream << " if unlikely((err = ctx->exec_content_script(ctx, ";
stream << (HAS_ATTR(elem, "src") ? "\"" + escape(ATTR(elem, "src")) + "\"" : "NULL") << ", ";
- NodeSet<std::string> scriptTexts = filterChildType(Node_base::TEXT_NODE, elem);
+ NodeSet<std::string> scriptTexts = DOMUtils::filterChildType(Node_base::TEXT_NODE, elem);
if (scriptTexts.size() > 0) {
stream << "\"";
writeExecContent(stream, scriptTexts[0], 0);
@@ -1329,7 +1330,7 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) {
stream << "#ifndef USCXML_NO_ELEM_INFO" << std::endl;
stream << std::endl;
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
if (invokes.size() > 0) {
_hasElement.insert("invoke");
stream << "static const uscxml_elem_invoke " << _prefix << "_elem_invokes[" << invokes.size() << "] = {" << std::endl;
@@ -1426,7 +1427,7 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) {
stream << ", " << std::endl;
stream << " /* finalize */ ";
- NodeSet<std::string> finalizes = filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invoke);
+ NodeSet<std::string> finalizes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invoke);
if (finalizes.size() > 0) {
stream << _prefix << "_" << DOMUtils::idForNode(finalizes[0]);
} else {
@@ -1434,7 +1435,7 @@ void ChartToC::writeElementInfoInvocation(std::ostream& stream) {
}
stream << ", " << std::endl;
- NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", invoke);
+ NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", invoke);
if (contents.size() > 0 && !HAS_ATTR(invoke, "md5sum")) {
std::stringstream ss;
NodeList<std::string> cChilds = contents[0].getChildNodes();
@@ -1498,7 +1499,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) {
stream << (HAS_ATTR(assign, "location") ? "\"" + escape(ATTR(assign, "location")) + "\"" : "NULL") << ", ";
stream << (HAS_ATTR(assign, "expr") ? "\"" + escape(ATTR(assign, "expr")) + "\"" : "NULL") << ", ";
- NodeSet<std::string> assignTexts = filterChildType(Node_base::TEXT_NODE, assign);
+ NodeSet<std::string> assignTexts = DOMUtils::filterChildType(Node_base::TEXT_NODE, assign);
if (assignTexts.size() > 0) {
if (boost::trim_copy(assignTexts[0].getNodeValue()).length() > 0) {
std::string escaped = escape(assignTexts[0].getNodeValue());
@@ -1557,7 +1558,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) {
stream << (HAS_ATTR(data, "src") ? "\"" + escape(ATTR(data, "src")) + "\"" : "NULL") << ", ";
stream << (HAS_ATTR(data, "expr") ? "\"" + escape(ATTR(data, "expr")) + "\"" : "NULL") << ", ";
- NodeSet<std::string> dataTexts = filterChildType(Node_base::TEXT_NODE, data);
+ NodeSet<std::string> dataTexts = DOMUtils::filterChildType(Node_base::TEXT_NODE, data);
if (dataTexts.size() > 0) {
if (boost::trim_copy(dataTexts[0].getNodeValue()).length() > 0) {
std::string escaped = escape(dataTexts[0].getNodeValue());
@@ -1640,7 +1641,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) {
stream << std::endl << " /* namelist */ ";
stream << (HAS_ATTR(send, "namelist") ? "\"" + escape(ATTR(send, "namelist")) + "\"" : "NULL") << ", ";
- NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", send);
+ NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", send);
if (contents.size() > 0) {
std::stringstream ss;
NodeList<std::string> cChilds = contents[0].getChildNodes();
@@ -1684,7 +1685,7 @@ void ChartToC::writeElementInfo(std::ostream& stream) {
// parent
stream << ATTR_CAST(donedata.getParentNode(), "documentOrder") << ", ";
- NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", donedata);
+ NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", donedata);
if (contents.size() > 0) {
std::stringstream ss;
NodeList<std::string> cChilds = contents[0].getChildNodes();
@@ -1751,7 +1752,11 @@ void ChartToC::writeMachineInfo(std::ostream& stream) {
stream << " /* datamodel */ \"" << (HAS_ATTR(_scxml, "datamodel") ? ATTR(_scxml, "datamodel") : "null") << "\"," << std::endl;
stream << " /* uuid */ \"" << _md5 << "\"," << std::endl;
stream << " /* states */ " << "&" << _prefix << "_states[0], " << std::endl;
- stream << " /* transitions */ " << "&" << _prefix << "_transitions[0], " << std::endl;
+ if (_transitions.size() > 0) {
+ stream << " /* transitions */ " << "&" << _prefix << "_transitions[0], " << std::endl;
+ } else {
+ stream << " /* transitions */ " << "NULL, " << std::endl;
+ }
stream << " /* parent */ ";
if (_parentMachine != NULL) {
size_t parentIndex = 0;
@@ -1769,7 +1774,7 @@ void ChartToC::writeMachineInfo(std::ostream& stream) {
stream << " /* donedata */ " << "&" << _prefix << "_elem_donedatas[0], " << std::endl;
stream << " /* script */ ";
- if (filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml).size() > 0) {
+ if (DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml).size() > 0) {
stream << _prefix << "_global_script" << std::endl;
} else {
stream << "NULL";
@@ -1810,7 +1815,7 @@ void ChartToC::writeMachineInfo(std::ostream& stream) {
stream << " /* donedata */ " << "&" << m->_prefix << "_elem_donedatas[0], " << std::endl;
stream << " /* script */ ";
- if (filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml).size() > 0) {
+ if (DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml).size() > 0) {
stream << m->_prefix << "_global_script" << std::endl;
} else {
stream << "NULL";
@@ -1852,17 +1857,17 @@ void ChartToC::writeStates(std::ostream& stream) {
// onentry
stream << " /* onentry */ ";
- stream << (filterChildElements(_nsInfo.xmlNSPrefix + "onentry", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_on_entry" : "NULL");
+ stream << (DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onentry", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_on_entry" : "NULL");
stream << "," << std::endl;
// onexit
stream << " /* onexit */ ";
- stream << (filterChildElements(_nsInfo.xmlNSPrefix + "onexit", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_on_exit" : "NULL");
+ stream << (DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onexit", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_on_exit" : "NULL");
stream << "," << std::endl;
// invokers
stream << " /* invoke */ ";
- stream << (filterChildElements(_nsInfo.xmlNSPrefix + "invoke", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_invoke" : "NULL");
+ stream << (DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", state).size() > 0 ? _prefix + "_" + DOMUtils::idForNode(state) + "_invoke" : "NULL");
stream << "," << std::endl;
// children
@@ -1932,95 +1937,97 @@ void ChartToC::writeTransitions(std::ostream& stream) {
elements.insert(_nsInfo.xmlNSPrefix + "transition");
NodeSet<std::string> transDocOrder = DOMUtils::inDocumentOrder(elements, _scxml);
- stream << "static const uscxml_transition " << _prefix << "_transitions[" << toStr(_transitions.size()) << "] = {" << std::endl;
- for (size_t i = 0; i < _transitions.size(); i++) {
- Element<std::string> transition(_transitions[i]);
-
- stream << " { /* transition number " << ATTR(transition, "documentOrder") << " with priority " << toStr(i) << std::endl;
- stream << " target: " << ATTR(transition, "target") << std::endl;
- stream << " */" << std::endl;
+ if (_transitions.size() > 0) {
+ stream << "static const uscxml_transition " << _prefix << "_transitions[" << toStr(_transitions.size()) << "] = {" << std::endl;
+ for (size_t i = 0; i < _transitions.size(); i++) {
+ Element<std::string> transition(_transitions[i]);
- // source
- stream << " /* source */ ";
- stream << ATTR_CAST(transition.getParentNode(), "documentOrder");
- stream << "," << std::endl;
+ stream << " { /* transition number " << ATTR(transition, "documentOrder") << " with priority " << toStr(i) << std::endl;
+ stream << " target: " << ATTR(transition, "target") << std::endl;
+ stream << " */" << std::endl;
- // targets
- stream << " /* target */ ";
- if (HAS_ATTR(transition, "targetBools")) {
- stream << "{ ";
- writeCharArrayInitList(stream, ATTR(transition, "targetBools"));
- stream << " /* " << ATTR(transition, "targetBools") << " */ }";
+ // source
+ stream << " /* source */ ";
+ stream << ATTR_CAST(transition.getParentNode(), "documentOrder");
+ stream << "," << std::endl;
- } else {
- stream << "{ NULL }";
- }
- stream << "," << std::endl;
+ // targets
+ stream << " /* target */ ";
+ if (HAS_ATTR(transition, "targetBools")) {
+ stream << "{ ";
+ writeCharArrayInitList(stream, ATTR(transition, "targetBools"));
+ stream << " /* " << ATTR(transition, "targetBools") << " */ }";
- stream << " /* event */ ";
- stream << (HAS_ATTR(transition, "event") ? "\"" + escape(ATTR(transition, "event")) + "\"" : "NULL");
- stream << "," << std::endl;
+ } else {
+ stream << "{ NULL }";
+ }
+ stream << "," << std::endl;
- stream << " /* condition */ ";
- stream << (HAS_ATTR(transition, "cond") ? "\"" + escape(ATTR(transition, "cond")) + "\"" : "NULL");
- stream << "," << std::endl;
+ stream << " /* event */ ";
+ stream << (HAS_ATTR(transition, "event") ? "\"" + escape(ATTR(transition, "event")) + "\"" : "NULL");
+ stream << "," << std::endl;
- // on transition handlers
- stream << " /* ontrans */ ";
- if (filterChildType(Arabica::DOM::Node_base::ELEMENT_NODE, transition).size() > 0) {
- stream << _prefix << "_" << DOMUtils::idForNode(transition) + "_on_trans";
- } else {
- stream << "NULL";
- }
- stream << "," << std::endl;
+ stream << " /* condition */ ";
+ stream << (HAS_ATTR(transition, "cond") ? "\"" + escape(ATTR(transition, "cond")) + "\"" : "NULL");
+ stream << "," << std::endl;
- // type
- stream << " /* type */ ";
- std::string seperator = "";
- if (!HAS_ATTR(transition, "target")) {
- stream << seperator << "USCXML_TRANS_TARGETLESS";
- seperator = " | ";
- }
+ // on transition handlers
+ stream << " /* ontrans */ ";
+ if (DOMUtils::filterChildType(Arabica::DOM::Node_base::ELEMENT_NODE, transition).size() > 0) {
+ stream << _prefix << "_" << DOMUtils::idForNode(transition) + "_on_trans";
+ } else {
+ stream << "NULL";
+ }
+ stream << "," << std::endl;
+
+ // type
+ stream << " /* type */ ";
+ std::string seperator = "";
+ if (!HAS_ATTR(transition, "target")) {
+ stream << seperator << "USCXML_TRANS_TARGETLESS";
+ seperator = " | ";
+ }
- if (HAS_ATTR(transition, "type") && iequals(ATTR(transition, "type"), "internal")) {
- stream << seperator << "USCXML_TRANS_INTERNAL";
- seperator = " | ";
- }
+ if (HAS_ATTR(transition, "type") && iequals(ATTR(transition, "type"), "internal")) {
+ stream << seperator << "USCXML_TRANS_INTERNAL";
+ seperator = " | ";
+ }
- if (!HAS_ATTR(transition, "event")) {
- stream << seperator << "USCXML_TRANS_SPONTANEOUS";
- seperator = " | ";
- }
+ if (!HAS_ATTR(transition, "event")) {
+ stream << seperator << "USCXML_TRANS_SPONTANEOUS";
+ seperator = " | ";
+ }
- if (iequals(TAGNAME_CAST(transition.getParentNode()), "history")) {
- stream << seperator << "USCXML_TRANS_HISTORY";
- seperator = " | ";
- }
+ if (iequals(TAGNAME_CAST(transition.getParentNode()), "history")) {
+ stream << seperator << "USCXML_TRANS_HISTORY";
+ seperator = " | ";
+ }
- if (iequals(TAGNAME_CAST(transition.getParentNode()), "initial")) {
- stream << seperator << "USCXML_TRANS_INITIAL";
- seperator = " | ";
- }
+ if (iequals(TAGNAME_CAST(transition.getParentNode()), "initial")) {
+ stream << seperator << "USCXML_TRANS_INITIAL";
+ seperator = " | ";
+ }
- if (seperator.size() == 0) {
- stream << "0";
- }
- stream << "," << std::endl;
+ if (seperator.size() == 0) {
+ stream << "0";
+ }
+ stream << "," << std::endl;
- // conflicts
- stream << " /* conflicts */ { ";
- writeCharArrayInitList(stream, ATTR(transition, "conflictBools"));
- stream << " /* " << ATTR(transition, "conflictBools") << " */ }, " << std::endl;
+ // conflicts
+ stream << " /* conflicts */ { ";
+ writeCharArrayInitList(stream, ATTR(transition, "conflictBools"));
+ stream << " /* " << ATTR(transition, "conflictBools") << " */ }, " << std::endl;
- // exit set
- stream << " /* exit set */ { ";
- writeCharArrayInitList(stream, ATTR(transition, "exitSetBools"));
- stream << " /* " << ATTR(transition, "exitSetBools") << " */ }" << std::endl;
+ // exit set
+ stream << " /* exit set */ { ";
+ writeCharArrayInitList(stream, ATTR(transition, "exitSetBools"));
+ stream << " /* " << ATTR(transition, "exitSetBools") << " */ }" << std::endl;
- stream << " }" << (i + 1 < _transitions.size() ? ",": "") << std::endl;
+ stream << " }" << (i + 1 < _transitions.size() ? ",": "") << std::endl;
+ }
+ stream << "};" << std::endl;
+ stream << std::endl;
}
- stream << "};" << std::endl;
- stream << std::endl;
stream << "#endif" << std::endl;
stream << std::endl;
diff --git a/src/uscxml/transform/ChartToC.h b/src/uscxml/transform/ChartToC.h
index bb17102..0c9c2e5 100644
--- a/src/uscxml/transform/ChartToC.h
+++ b/src/uscxml/transform/ChartToC.h
@@ -21,7 +21,7 @@
#define FSMTOCPP_H_201672B0
#include "uscxml/interpreter/InterpreterRC.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include "uscxml/util/Trie.h"
#include "Transformer.h"
diff --git a/src/uscxml/transform/ChartToFSM.cpp b/src/uscxml/transform/ChartToFSM.cpp
index b78a2dd..da53c1f 100644
--- a/src/uscxml/transform/ChartToFSM.cpp
+++ b/src/uscxml/transform/ChartToFSM.cpp
@@ -23,6 +23,7 @@
#include "uscxml/Factory.h"
#include "uscxml/debug/Complexity.h"
+#include <DOM/SAX2DOM/SAX2DOM.hpp>
#include <DOM/io/Stream.hpp>
#include <glog/logging.h>
@@ -146,7 +147,7 @@ ChartToFSM::~ChartToFSM() {
}
// tear down caches
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
for (int i = 0; i < allTransitions.size(); i++) {
_transParents.erase(allTransitions[i]);
}
@@ -212,7 +213,7 @@ InterpreterState ChartToFSM::interpret() {
// setup caches
{
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
indexedTransitions.reserve(allTransitions.size());
for (int i = 0; i < allTransitions.size(); i++) {
_transParents[allTransitions[i]] = InterpreterImpl::getParentState(allTransitions[i]);
@@ -220,7 +221,7 @@ InterpreterState ChartToFSM::interpret() {
}
// identify all history elements
- NodeSet<std::string> histories = filterChildElements(_nsInfo.xmlNSPrefix + "history", _scxml, true);
+ NodeSet<std::string> histories = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "history", _scxml, true);
for (int i = 0; i < histories.size(); i++) {
_historyTargets[ATTR_CAST(histories[i], "id")] = Element<std::string>(histories[i]);
}
@@ -234,7 +235,7 @@ InterpreterState ChartToFSM::interpret() {
}
// set invokeid for all invokers to parent state if none given
- NodeSet<std::string> invokers = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> invokers = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
for (int i = 0; i < invokers.size(); i++) {
Element<std::string> invokerElem = Element<std::string>(invokers[i]);
invokerElem.setAttribute("parent", ATTR_CAST(invokerElem.getParentNode(), "id"));
@@ -435,12 +436,12 @@ void ChartToFSM::internalDoneSend(const Arabica::DOM::Element<std::string>& stat
onentry.appendChild(raise);
if (doneData) {
- Arabica::XPath::NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", doneData);
+ Arabica::XPath::NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", doneData);
if (contents.size() > 0) {
Node<std::string> imported = _flatDoc.importNode(contents[0], true);
raise.appendChild(imported);
}
- Arabica::XPath::NodeSet<std::string> params = filterChildElements(_nsInfo.xmlNSPrefix + "param", doneData);
+ Arabica::XPath::NodeSet<std::string> params = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "param", doneData);
if (params.size() > 0) {
Node<std::string> imported = _flatDoc.importNode(params[0], true);
raise.appendChild(imported);
@@ -532,7 +533,7 @@ static bool filterChildEnabled(const NodeSet<std::string>& transitions) {
if (p1 == p2) {
std::string eventDesc1 = ATTR_CAST(t1, "event");
std::string eventDesc2 = ATTR_CAST(t2, "event");
- if (InterpreterImpl::nameMatch(eventDesc1, eventDesc2)) {
+ if (nameMatch(eventDesc1, eventDesc2)) {
return false;
}
}
@@ -562,14 +563,14 @@ bool ChartToFSM::hasForeachInBetween(const Arabica::DOM::Node<std::string>& ance
void ChartToFSM::annotateRaiseAndSend(const Arabica::DOM::Element<std::string>& root) {
NodeSet<std::string> execContent;
- execContent.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
- execContent.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "onentry", _scxml, true));
- execContent.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "onexit", _scxml, true));
+ execContent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
+ execContent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onentry", _scxml, true));
+ execContent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onexit", _scxml, true));
for (int i = 0; i < execContent.size(); i++) {
Element<std::string> execContentElem(execContent[i]);
int nrRaise = 0;
- NodeSet<std::string> raise = filterChildElements(_nsInfo.xmlNSPrefix + "raise", execContent[i], true);
+ NodeSet<std::string> raise = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "raise", execContent[i], true);
for (int j = 0; j < raise.size(); j++) {
if (hasForeachInBetween(execContent[i], raise[j])) {
execContentElem.setAttribute("raise", "-1");
@@ -583,7 +584,7 @@ void ChartToFSM::annotateRaiseAndSend(const Arabica::DOM::Element<std::string>&
DONE_COUNT_RAISE:
int nrSend = 0;
- NodeSet<std::string> sends = filterChildElements(_nsInfo.xmlNSPrefix + "send", execContent[i], true);
+ NodeSet<std::string> sends = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "send", execContent[i], true);
for (int j = 0; j < sends.size(); j++) {
if (hasForeachInBetween(execContent[i], sends[j])) {
execContentElem.setAttribute("send", "-1");
@@ -600,7 +601,7 @@ DONE_COUNT_SEND:
}
void ChartToFSM::annotateDomain() {
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
for (int i = 0; i < allTransitions.size(); i++) {
Element<std::string> transition(allTransitions[i]);
Arabica::DOM::Node<std::string> domain = getTransitionDomain(transition);
@@ -613,7 +614,7 @@ void ChartToFSM::annotateDomain() {
}
void ChartToFSM::annotateExitSet() {
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
for (int i = 0; i < allTransitions.size(); i++) {
Element<std::string> transition(allTransitions[i]);
Arabica::DOM::Node<std::string> domain = getTransitionDomain(transition);
@@ -633,7 +634,7 @@ void ChartToFSM::annotateExitSet() {
}
void ChartToFSM::annotateEntrySet() {
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
for (int i = 0; i < allTransitions.size(); i++) {
Element<std::string> transition(allTransitions[i]);
@@ -664,7 +665,7 @@ void ChartToFSM::annotateEntrySet() {
}
void ChartToFSM::annotateConflicts() {
- Arabica::XPath::NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
+ Arabica::XPath::NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true);
Arabica::XPath::NodeSet<std::string> allStates = getAllStates();
for (int i = 0; i < allTransitions.size(); i++) {
@@ -744,7 +745,7 @@ void ChartToFSM::indexTransitions() {
#if 0
void ChartToFSM::indexTransitions(const Arabica::DOM::Element<std::string>& root) {
// breadth first traversal of transitions
- Arabica::XPath::NodeSet<std::string> levelTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", root);
+ Arabica::XPath::NodeSet<std::string> levelTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", root);
for (int i = levelTransitions.size() - 1; i >= 0; i--) {
// push into index starting with least prior
indexedTransitions.push_back(Element<std::string>(levelTransitions[i]));
@@ -768,7 +769,7 @@ void ChartToFSM::indexTransitions(const Arabica::DOM::Element<std::string>& root
indexTransitions(childElem);
}
- Arabica::XPath::NodeSet<std::string> levelTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", root);
+ Arabica::XPath::NodeSet<std::string> levelTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", root);
for (int i = 0; i < levelTransitions.size(); i++) {
// push into index starting with least prior
indexedTransitions.push_back(Element<std::string>(levelTransitions[i]));
@@ -1247,10 +1248,10 @@ TransitionTreeNode* ChartToFSM::buildTransTree(const Arabica::DOM::Element<std::
// get all transitions and states from root without recursing
NodeSet<std::string> nested;
- nested.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "transition", root));
- nested.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "state", root));
- nested.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "final", root));
- nested.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "parallel", root));
+ nested.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", root));
+ nested.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "state", root));
+ nested.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "final", root));
+ nested.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "parallel", root));
nested.to_document_order();
TransitionTreeNode* lastNode = NULL;
@@ -1295,7 +1296,7 @@ TransitionTreeNode* ChartToFSM::buildTransTree(const Arabica::DOM::Element<std::
void ChartToFSM::getPotentialTransitionsForConfFromPowerSet(const Arabica::XPath::NodeSet<std::string>& conf, std::map<std::string, GlobalTransition*>& outMap) {
// get all transition elements from states in the current configuration
- NodeSet<std::string> allTransitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", conf);
+ NodeSet<std::string> allTransitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", conf);
{
std::string seperator = "";
@@ -1445,7 +1446,7 @@ void ChartToFSM::explode() {
// add all invokers for initial transition
for (unsigned int i = 0; i < _statesToInvoke.size(); i++) {
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _statesToInvoke[i]);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _statesToInvoke[i]);
for (unsigned int j = 0; j < invokes.size(); j++) {
invoke(Element<std::string>(invokes[j]));
}
@@ -1592,7 +1593,7 @@ void ChartToFSM::explode() {
// add all invokers
for (unsigned int i = 0; i < _statesToInvoke.size(); i++) {
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _statesToInvoke[i]);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _statesToInvoke[i]);
for (unsigned int j = 0; j < invokes.size(); j++) {
invoke(Element<std::string>(invokes[j]));
}
@@ -1915,7 +1916,7 @@ GlobalTransition::GlobalTransition(const Arabica::XPath::NodeSet<std::string>& t
conditions.push_back(boost::trim_copy(ATTR(transElem, "cond")));
}
- std::list<std::string> targets = InterpreterImpl::tokenizeIdRefs(ATTR(transElem, "target"));
+ std::list<std::string> targets = tokenize(ATTR(transElem, "target"));
std::list<std::string>::iterator targetIter = targets.begin();
while(targetIter != targets.end()) {
// std::cout << "// " << *targetIter << std::endl;
@@ -1983,7 +1984,7 @@ std::list<std::string> GlobalTransition::getCommonEvents(const NodeSet<std::stri
for (int i = 0; i < transitions.size(); i++) {
// for every transition
- std::list<std::string> eventNames = InterpreterImpl::tokenizeIdRefs(ATTR_CAST(transitions[i], "event"));
+ std::list<std::string> eventNames = tokenize(ATTR_CAST(transitions[i], "event"));
for (std::list<std::string>::iterator eventNameIter = eventNames.begin();
eventNameIter != eventNames.end();
@@ -2002,7 +2003,7 @@ std::list<std::string> GlobalTransition::getCommonEvents(const NodeSet<std::stri
// check if token would activate all other transitions
if (i == j)
continue;
- if (!InterpreterImpl::nameMatch(ATTR_CAST(transitions[j], "event"), eventName)) {
+ if (!nameMatch(ATTR_CAST(transitions[j], "event"), eventName)) {
isMatching = false;
break;
}
@@ -2020,7 +2021,7 @@ std::list<std::string> GlobalTransition::getCommonEvents(const NodeSet<std::stri
for (std::list<std::string>::iterator innerEventNameIter = prefixes.begin();
innerEventNameIter != prefixes.end();
innerEventNameIter++) {
- if (!iequals(*outerEventNameIter, *innerEventNameIter) && InterpreterImpl::nameMatch(*outerEventNameIter, *innerEventNameIter)) {
+ if (!iequals(*outerEventNameIter, *innerEventNameIter) && nameMatch(*outerEventNameIter, *innerEventNameIter)) {
goto IS_PREFIX;
}
}
diff --git a/src/uscxml/transform/ChartToFSM.h b/src/uscxml/transform/ChartToFSM.h
index ab4aed4..fa76f3a 100644
--- a/src/uscxml/transform/ChartToFSM.h
+++ b/src/uscxml/transform/ChartToFSM.h
@@ -20,8 +20,8 @@
#ifndef CHARTTOFSM_H_IOKPYEBY
#define CHARTTOFSM_H_IOKPYEBY
-#include "uscxml/DOMUtils.h"
#include "uscxml/interpreter/InterpreterRC.h"
+#include "uscxml/dom/DOMUtils.h"
#include <DOM/Document.hpp>
#include <DOM/Node.hpp>
#include <XPath/XPath.hpp>
diff --git a/src/uscxml/transform/ChartToFlatSCXML.cpp b/src/uscxml/transform/ChartToFlatSCXML.cpp
index 2905444..984c287 100644
--- a/src/uscxml/transform/ChartToFlatSCXML.cpp
+++ b/src/uscxml/transform/ChartToFlatSCXML.cpp
@@ -63,7 +63,7 @@ void ChartToFlatSCXML::writeTo(std::ostream& stream) {
}
// remove all debug attributes
- NodeSet<std::string> elementNodes = filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
+ NodeSet<std::string> elementNodes = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
for (int i = 0; i < elementNodes.size(); i++) {
Element<std::string> element(elementNodes[i]);
if (!envVarIsTrue("USCXML_ANNOTATE_GLOBAL_TRANS_SENDS") && HAS_ATTR(element, "send"))
@@ -92,7 +92,7 @@ void ChartToFlatSCXML::createDocument() {
return;
{
- NodeSet<std::string> allElements = filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
+ NodeSet<std::string> allElements = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
size_t nrElements = 0;
for (int i = 0; i < allElements.size(); i++) {
if (!isInEmbeddedDocument(allElements[i]))
@@ -133,7 +133,7 @@ void ChartToFlatSCXML::createDocument() {
NodeSet<std::string> datas;
if (_binding == InterpreterImpl::LATE) {
// with late binding, just copy direct datamodel childs
- datas = filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", _origSCXML);
+ datas = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", _origSCXML);
} else {
// with early binding, copy all datamodel elements into scxml element
datas = _xpath.evaluate("//" + _nsInfo.xpathPrefix + "datamodel", _origSCXML).asNodeSet();
@@ -146,13 +146,13 @@ void ChartToFlatSCXML::createDocument() {
}
- NodeSet<std::string> scripts = filterChildElements(_nsInfo.xmlNSPrefix + "script", _origSCXML);
+ NodeSet<std::string> scripts = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", _origSCXML);
for (int i = 0; i < scripts.size(); i++) {
Node<std::string> imported = _flatDoc.importNode(scripts[i], true);
_scxml.appendChild(imported);
}
- NodeSet<std::string> comments = filterChildType(Node_base::COMMENT_NODE, _origSCXML);
+ NodeSet<std::string> comments = DOMUtils::filterChildType(Node_base::COMMENT_NODE, _origSCXML);
for (int i = 0; i < comments.size(); i++) {
Node<std::string> imported = _flatDoc.importNode(comments[i], true);
_scxml.appendChild(imported);
@@ -177,13 +177,13 @@ void ChartToFlatSCXML::createDocument() {
_document = _flatDoc;
- NodeSet<std::string> scxmls = filterChildElements(_nsInfo.xmlNSPrefix + "scxml", _document);
+ NodeSet<std::string> scxmls = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "scxml", _document);
if (scxmls.size() > 0) {
_scxml = Element<std::string>(scxmls[0]);
}
{
- NodeSet<std::string> allElements = filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
+ NodeSet<std::string> allElements = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
size_t nrElements = 0;
for (int i = 0; i < allElements.size(); i++) {
if (!isInEmbeddedDocument(allElements[i]))
@@ -372,7 +372,7 @@ Node<std::string> ChartToFlatSCXML::globalTransitionToNode(GlobalTransition* glo
// we entered a new child - check if it has a datamodel and we entered for the first time
if (_binding == InterpreterImpl::LATE) {
- NodeSet<std::string> datamodel = filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", actionIter->entered);
+ NodeSet<std::string> datamodel = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", actionIter->entered);
if (datamodel.size() > 0 && !isMember(actionIter->entered, _globalConf[globalTransition->source]->getAlreadyEnteredStates())) {
childs.push_back(datamodel);
}
diff --git a/src/uscxml/transform/ChartToMinimalSCXML.cpp b/src/uscxml/transform/ChartToMinimalSCXML.cpp
index 69ac9cb..f052b09 100644
--- a/src/uscxml/transform/ChartToMinimalSCXML.cpp
+++ b/src/uscxml/transform/ChartToMinimalSCXML.cpp
@@ -49,7 +49,7 @@ void ChartToMinimalSCXML::writeTo(std::ostream& stream) {
addMonitor(this);
{
- NodeSet<std::string> allElements = filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
+ NodeSet<std::string> allElements = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
size_t nrElements = 0;
for (int i = 0; i < allElements.size(); i++) {
if (!isInEmbeddedDocument(allElements[i]))
@@ -61,11 +61,11 @@ void ChartToMinimalSCXML::writeTo(std::ostream& stream) {
// test 278 - move embedded datas to topmost datamodel
if (_binding == EARLY) {
// move all data elements into topmost datamodel element
- NodeSet<std::string> datas = filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true);
+ NodeSet<std::string> datas = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true);
if (datas.size() > 0) {
Node<std::string> topMostDatamodel;
- NodeSet<std::string> datamodels = filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", _scxml, false);
+ NodeSet<std::string> datamodels = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "datamodel", _scxml, false);
if (datamodels.size() > 0) {
topMostDatamodel = datamodels[0];
} else {
@@ -118,7 +118,7 @@ void ChartToMinimalSCXML::writeTo(std::ostream& stream) {
removeUnvisited(_scxml);
{
- NodeSet<std::string> allElements = filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
+ NodeSet<std::string> allElements = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, _scxml, true);
size_t nrElements = 0;
for (int i = 0; i < allElements.size(); i++) {
if (!isInEmbeddedDocument(allElements[i]))
@@ -150,7 +150,7 @@ void ChartToMinimalSCXML::removeUnvisited(Arabica::DOM::Node<std::string>& node)
// special handling for conditional blocks with if
if (TAGNAME(elem) == _nsInfo.xmlNSPrefix + "if") {
- NodeSet<std::string> ifChilds = filterChildType(Node_base::ELEMENT_NODE, elem, false);
+ NodeSet<std::string> ifChilds = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, elem, false);
Element<std::string> lastConditional = elem;
bool hadVisitedChild = false;
for (int j = 0; j < ifChilds.size(); j++) {
diff --git a/src/uscxml/transform/ChartToMinimalSCXML.h b/src/uscxml/transform/ChartToMinimalSCXML.h
index 0260ee1..4eb0b92 100644
--- a/src/uscxml/transform/ChartToMinimalSCXML.h
+++ b/src/uscxml/transform/ChartToMinimalSCXML.h
@@ -20,8 +20,8 @@
#ifndef CHARTTOMINIMALSCXML_H_7B97677A
#define CHARTTOMINIMALSCXML_H_7B97677A
-#include "uscxml/DOMUtils.h"
#include "uscxml/interpreter/InterpreterRC.h"
+#include "uscxml/dom/DOMUtils.h"
#include <DOM/Document.hpp>
#include <DOM/Node.hpp>
#include <XPath/XPath.hpp>
diff --git a/src/uscxml/transform/ChartToPromela.cpp b/src/uscxml/transform/ChartToPromela.cpp
index 4e3a990..747fb34 100644
--- a/src/uscxml/transform/ChartToPromela.cpp
+++ b/src/uscxml/transform/ChartToPromela.cpp
@@ -26,6 +26,7 @@
#include "uscxml/plugins/datamodel/promela/parser/promela.tab.hpp"
#include <DOM/io/Stream.hpp>
+#include <DOM/SAX2DOM/SAX2DOM.hpp>
#include <iostream>
#include "uscxml/UUID.h"
#include <math.h>
@@ -843,10 +844,10 @@ std::string ChartToPromela::conditionalizeForHist(const std::set<GlobalTransitio
// for (;;) {
// if (!HAS_ATTR(currState, "transient") || !DOMUtils::attributeIsTrue(ATTR(currState, "transient")))
// break;
-// content.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "invoke", currState));
-// content.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "onentry", currState));
-// content.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "onexit", currState));
-// NodeSet<std::string> transitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", currState);
+// content.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", currState));
+// content.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onentry", currState));
+// content.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "onexit", currState));
+// NodeSet<std::string> transitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", currState);
// currState = _globalConf[ATTR_CAST(transitions[0], "target")];
// }
//
@@ -1511,7 +1512,7 @@ void ChartToPromela::writeExecutableContent(std::ostream& stream, const Arabica:
child = child.getNextSibling();
}
} else if(TAGNAME(nodeElem) == "script") {
- NodeSet<std::string> scriptText = filterChildType(Node_base::TEXT_NODE, node, true);
+ NodeSet<std::string> scriptText = DOMUtils::filterChildType(Node_base::TEXT_NODE, node, true);
for (int i = 0; i < scriptText.size(); i++) {
stream << ADAPT_SRC(beautifyIndentation(scriptText[i].getNodeValue(), indent)) << std::endl;
}
@@ -1564,13 +1565,13 @@ void ChartToPromela::writeExecutableContent(std::ostream& stream, const Arabica:
} else if(TAGNAME(nodeElem) == "if") {
NodeSet<std::string> condChain;
condChain.push_back(node);
- condChain.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "elseif", node));
- condChain.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "else", node));
+ condChain.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "elseif", node));
+ condChain.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "else", node));
writeIfBlock(stream, condChain, indent);
} else if(TAGNAME(nodeElem) == "assign") {
- NodeSet<std::string> assignTexts = filterChildType(Node_base::TEXT_NODE, nodeElem, true);
+ NodeSet<std::string> assignTexts = DOMUtils::filterChildType(Node_base::TEXT_NODE, nodeElem, true);
assert(assignTexts.size() > 0);
stream << beautifyIndentation(ADAPT_SRC(boost::trim_copy(assignTexts[0].getNodeValue())), indent) << std::endl;
@@ -1652,8 +1653,8 @@ void ChartToPromela::writeExecutableContent(std::ostream& stream, const Arabica:
typeAssignSS << padding << " tmpE.type = " << eventType << ";" << std::endl;
}
- NodeSet<std::string> sendParams = filterChildElements(_nsInfo.xmlNSPrefix + "param", nodeElem);
- NodeSet<std::string> sendContents = filterChildElements(_nsInfo.xmlNSPrefix + "content", nodeElem);
+ NodeSet<std::string> sendParams = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "param", nodeElem);
+ NodeSet<std::string> sendContents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", nodeElem);
std::string sendNameList = ATTR(nodeElem, "namelist");
if (sendParams.size() > 0) {
for (int i = 0; i < sendParams.size(); i++) {
@@ -1662,7 +1663,7 @@ void ChartToPromela::writeExecutableContent(std::ostream& stream, const Arabica:
}
}
if (sendNameList.size() > 0) {
- std::list<std::string> nameListIds = tokenizeIdRefs(sendNameList);
+ std::list<std::string> nameListIds = tokenize(sendNameList);
std::list<std::string>::iterator nameIter = nameListIds.begin();
while(nameIter != nameListIds.end()) {
typeAssignSS << padding << " tmpE.data." << *nameIter << " = " << ADAPT_SRC(*nameIter) << ";" << std::endl;
@@ -1844,7 +1845,7 @@ PromelaInlines::PromelaInlines(const Arabica::DOM::Node<std::string>& node) {
for (int i = 0; i < levelNodes.size(); i++) {
// get all comments
- NodeSet<std::string> comments = InterpreterImpl::filterChildType(Node_base::COMMENT_NODE, levelNodes[i]);
+ NodeSet<std::string> comments = DOMUtils::filterChildType(Node_base::COMMENT_NODE, levelNodes[i]);
for (int j = 0; j < comments.size(); j++) {
PromelaInline* tmp = new PromelaInline(comments[j]);
if (tmp->type == PromelaInline::PROMELA_NIL) {
@@ -1864,7 +1865,7 @@ PromelaInlines::PromelaInlines(const Arabica::DOM::Node<std::string>& node) {
}
}
- levelNodes = InterpreterImpl::filterChildType(Node_base::ELEMENT_NODE, levelNodes);
+ levelNodes = DOMUtils::filterChildType(Node_base::ELEMENT_NODE, levelNodes);
level++;
}
}
@@ -2191,7 +2192,7 @@ void ChartToPromela::writeStartInvoker(std::ostream& stream, const Arabica::DOM:
}
// set from params
- NodeSet<std::string> invokeParams = filterChildElements(_nsInfo.xmlNSPrefix + "param", node);
+ NodeSet<std::string> invokeParams = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "param", node);
for (int i = 0; i < invokeParams.size(); i++) {
std::string identifier = ATTR_CAST(invokeParams[i], "name");
std::string expression = ATTR_CAST(invokeParams[i], "expr");
@@ -2218,10 +2219,10 @@ void ChartToPromela::writeFSM(std::ostream& stream) {
stream << " " << _prefix << "procid = _pid;" << std::endl;
stream << " }" << std::endl;
// write initial transition
-// transitions = filterChildElements(_nsInfo.xmlNSPrefix + "transition", _startState);
+// transitions = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _startState);
// assert(transitions.size() == 1);
- NodeSet<std::string> scripts = filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml, false);
+ NodeSet<std::string> scripts = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml, false);
if (scripts.size() > 0) {
stream << std::endl << "/* global scripts */" << std::endl;
for (int i = 0; i < scripts.size(); i++) {
@@ -2336,14 +2337,14 @@ void ChartToPromela::writeFSM(std::ostream& stream) {
excludeEventDescs += " " + evIter->atom;
}
- NodeSet<std::string> transitions = filterChildElements("transition", es.container, true);
+ NodeSet<std::string> transitions = DOMUtils::filterChildElements("transition", es.container, true);
std::set<std::string> eventNames;
for (int i = 0; i < transitions.size(); i++) {
if (!HAS_ATTR_CAST(transitions[i], "event"))
continue;
if (HAS_ATTR_CAST(transitions[i], "cond") && ATTR_CAST(transitions[i], "cond").find("_event.") != std::string::npos)
continue;
- std::list<std::string> events = InterpreterImpl::tokenizeIdRefs(ATTR_CAST(transitions[i], "event"));
+ std::list<std::string> events = tokenize(ATTR_CAST(transitions[i], "event"));
for (std::list<std::string>::iterator evIter = events.begin(); evIter != events.end(); evIter++) {
std::string eventName = *evIter;
if (boost::ends_with(eventName, "*"))
@@ -2352,7 +2353,7 @@ void ChartToPromela::writeFSM(std::ostream& stream) {
eventName = eventName.substr(0, eventName.size() - 1);
// is this event excluded?
- if (!InterpreterImpl::nameMatch(excludeEventDescs, eventName)) {
+ if (!nameMatch(excludeEventDescs, eventName)) {
eventNames.insert(eventName);
}
}
@@ -2404,7 +2405,7 @@ void ChartToPromela::writeFSM(std::ostream& stream) {
{
bool finalizeFound = false;
for (std::map<Arabica::DOM::Node<std::string>, ChartToPromela*>::iterator invIter = _machines.begin(); invIter != _machines.end(); invIter++) {
- NodeSet<std::string> finalizes = filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invIter->first, false);
+ NodeSet<std::string> finalizes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invIter->first, false);
if (finalizes.size() > 0) {
finalizeFound = true;
break;
@@ -2414,7 +2415,7 @@ void ChartToPromela::writeFSM(std::ostream& stream) {
stream << "/* <finalize> event */" << std::endl;
stream << " if" << std::endl;
for (std::map<Arabica::DOM::Node<std::string>, ChartToPromela*>::iterator invIter = _machines.begin(); invIter != _machines.end(); invIter++) {
- NodeSet<std::string> finalizes = filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invIter->first, false);
+ NodeSet<std::string> finalizes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "finalize", invIter->first, false);
if (finalizes.size() > 0) {
stream << " :: " << _prefix << "_event.invokeid == " << _analyzer->macroForLiteral(invIter->second->_invokerid) << " -> {" << std::endl;
writeExecutableContent(stream, finalizes[0], 3);
@@ -2841,7 +2842,7 @@ void ChartToPromela::writeDispatchingBlock(std::ostream& stream, std::list<Globa
} else {
std::string eventDescs = currTrans->eventDesc;
- std::list<std::string> eventNames = tokenizeIdRefs(eventDescs);
+ std::list<std::string> eventNames = tokenize(eventDescs);
std::set<std::string> eventPrefixes;
std::list<std::string>::iterator eventNameIter = eventNames.begin();
while(eventNameIter != eventNames.end()) {
@@ -2987,8 +2988,8 @@ void ChartToPromela::initNodes() {
{
// shorten UUID ids at invokers for readability
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
- invokes.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "uninvoke", _scxml, true));
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ invokes.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "uninvoke", _scxml, true));
// make sure all invokers have an id!
for (int i = 0; i < invokes.size(); i++) {
@@ -3006,7 +3007,7 @@ void ChartToPromela::initNodes() {
// are there nestes SCXML invokers?
{
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
for (int i = 0; i < invokes.size(); i++) {
if (!HAS_ATTR_CAST(invokes[i], "type") ||
ATTR_CAST(invokes[i], "type") == "scxml" ||
@@ -3023,9 +3024,9 @@ void ChartToPromela::initNodes() {
nested = Interpreter::fromURL(absUrl);
} else {
- NodeSet<std::string> nestedContent = InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "content", invokes[i]);
+ NodeSet<std::string> nestedContent = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", invokes[i]);
assert(nestedContent.size() == 1);
- NodeSet<std::string> nestedRoot = InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "scxml", nestedContent[0]);
+ NodeSet<std::string> nestedRoot = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "scxml", nestedContent[0]);
assert(nestedRoot.size() == 1);
DOMImplementation<std::string> domFactory = Arabica::SimpleDOM::DOMImplementation<std::string>::getDOMImplementation();
@@ -3070,9 +3071,9 @@ void ChartToPromela::initNodes() {
while(histIter != _historyTargets.end()) {
NodeSet<std::string> histStatesMembers;
bool isDeep = (HAS_ATTR_CAST(histIter->second, "type") && ATTR_CAST(histIter->second, "type") == "deep");
- histStatesMembers.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "state", histIter->second.getParentNode(), isDeep));
- histStatesMembers.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "parallel", histIter->second.getParentNode(), isDeep));
- histStatesMembers.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "final", histIter->second.getParentNode(), isDeep));
+ histStatesMembers.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "state", histIter->second.getParentNode(), isDeep));
+ histStatesMembers.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "parallel", histIter->second.getParentNode(), isDeep));
+ histStatesMembers.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "final", histIter->second.getParentNode(), isDeep));
for (int i = 0; i < histStatesMembers.size(); i++) {
_historyMembers[histIter->first].insert(std::make_pair(ATTR_CAST(histStatesMembers[i], "id"), i));
@@ -3089,7 +3090,7 @@ void ChartToPromela::initNodes() {
for (int i = 0; i < internalEventNames.size(); i++) {
if (HAS_ATTR_CAST(internalEventNames[i], "event")) {
std::string eventNames = ATTR_CAST(internalEventNames[i], "event");
- std::list<std::string> events = tokenizeIdRefs(eventNames);
+ std::list<std::string> events = tokenize(eventNames);
for (std::list<std::string>::iterator eventIter = events.begin();
eventIter != events.end(); eventIter++) {
std::string eventName = *eventIter;
@@ -3109,8 +3110,8 @@ void ChartToPromela::initNodes() {
// transform data / assign json into PROMELA statements
{
NodeSet<std::string> asgn;
- asgn.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
- asgn.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
+ asgn.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
+ asgn.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
for (int i = 0; i < asgn.size(); i++) {
if (isInEmbeddedDocument(asgn[i]))
@@ -3136,7 +3137,7 @@ void ChartToPromela::initNodes() {
absUrl.toAbsolute(_baseURL[_scxml]);
value = absUrl.getInContent();
} else {
- NodeSet<std::string> textChilds = filterChildType(Node_base::TEXT_NODE, asgnElem);
+ NodeSet<std::string> textChilds = DOMUtils::filterChildType(Node_base::TEXT_NODE, asgnElem);
if (textChilds.size() > 0) {
for (int j = 0; j < textChilds.size(); j++) {
value += textChilds[j].getNodeValue();
@@ -3171,9 +3172,9 @@ void ChartToPromela::initNodes() {
// do we need sendid / invokeid?
{
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
- NodeSet<std::string> sends = filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true);
- NodeSet<std::string> cancels = filterChildElements(_nsInfo.xmlNSPrefix + "cancel", _scxml, true);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> sends = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true);
+ NodeSet<std::string> cancels = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "cancel", _scxml, true);
if (cancels.size() > 0) {
_analyzer->addCode("_event.invokeid", this);
@@ -3204,11 +3205,11 @@ void ChartToPromela::initNodes() {
{
// string literals for raise / send content
NodeSet<std::string> withContent;
- withContent.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
- withContent.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "raise", _scxml, true));
+ withContent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
+ withContent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "raise", _scxml, true));
for (int i = 0; i < withContent.size(); i++) {
- NodeSet<std::string> content = filterChildElements(_nsInfo.xmlNSPrefix + "content", withContent[i], true);
+ NodeSet<std::string> content = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", withContent[i], true);
for (int j = 0; j < content.size(); j++) {
Element<std::string> contentElem(content[j]);
std::string content = spaceNormalize(contentElem.getFirstChild().getNodeValue());
@@ -3264,7 +3265,7 @@ void ChartToPromela::initNodes() {
_analyzer->addLiteral(ATTR(_scxml, "name"), _analyzer->indexForLiteral(_prefix + "_sessionid"));
}
- NodeSet<std::string> contents = filterChildElements(_nsInfo.xmlNSPrefix + "content", _scxml, true);
+ NodeSet<std::string> contents = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", _scxml, true);
for (int i = 0; i < contents.size(); i++) {
Element<std::string> contentElem = Element<std::string>(contents[i]);
if (contentElem.hasChildNodes() && contentElem.getFirstChild().getNodeType() == Node_base::TEXT_NODE && contentElem.getChildNodes().getLength() == 1) {
@@ -3279,9 +3280,9 @@ void ChartToPromela::initNodes() {
std::set<std::string> allStrings;
{
NodeSet<std::string> withCond;
- withCond.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
- withCond.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "if", _scxml, true));
- withCond.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "elseif", _scxml, true));
+ withCond.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
+ withCond.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "if", _scxml, true));
+ withCond.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "elseif", _scxml, true));
for (int i = 0; i < withCond.size(); i++) {
Element<std::string> elem = Element<std::string>(withCond[i]);
if (HAS_ATTR(elem, "cond")) {
@@ -3294,11 +3295,11 @@ void ChartToPromela::initNodes() {
}
{
NodeSet<std::string> withExpr;
- withExpr.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "log", _scxml, true));
- withExpr.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
- withExpr.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
- withExpr.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "content", _scxml, true));
- withExpr.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "param", _scxml, true));
+ withExpr.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "log", _scxml, true));
+ withExpr.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
+ withExpr.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
+ withExpr.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "content", _scxml, true));
+ withExpr.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "param", _scxml, true));
for (int i = 0; i < withExpr.size(); i++) {
Element<std::string> elem = Element<std::string>(withExpr[i]);
if (HAS_ATTR(elem, "expr")) {
@@ -3311,7 +3312,7 @@ void ChartToPromela::initNodes() {
}
{
NodeSet<std::string> withLocation;
- withLocation.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
+ withLocation.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "assign", _scxml, true));
for (int i = 0; i < withLocation.size(); i++) {
Element<std::string> elem = Element<std::string>(withLocation[i]);
if (HAS_ATTR(elem, "location")) {
@@ -3324,10 +3325,10 @@ void ChartToPromela::initNodes() {
}
{
NodeSet<std::string> withText;
- withText.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml, true));
-// withText.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
+ withText.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "script", _scxml, true));
+// withText.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "data", _scxml, true));
for (int i = 0; i < withText.size(); i++) {
- NodeSet<std::string> texts = filterChildType(Node_base::TEXT_NODE, withText[i], true);
+ NodeSet<std::string> texts = DOMUtils::filterChildType(Node_base::TEXT_NODE, withText[i], true);
for (int j = 0; j < texts.size(); j++) {
if (texts[j].getNodeValue().size() > 0) {
Text<std::string> elem = Text<std::string>(texts[j]);
@@ -3340,7 +3341,7 @@ void ChartToPromela::initNodes() {
}
}
{
- NodeSet<std::string> foreachs = filterChildElements(_nsInfo.xmlNSPrefix + "foreach", _scxml, true);
+ NodeSet<std::string> foreachs = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "foreach", _scxml, true);
for (int i = 0; i < foreachs.size(); i++) {
if (HAS_ATTR_CAST(foreachs[i], "index")) {
allCode.insert(ATTR_CAST(foreachs[i], "index"));
@@ -3359,12 +3360,12 @@ void ChartToPromela::initNodes() {
// add all namelist entries to the _event structure
{
NodeSet<std::string> withNamelist;
- withNamelist.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
- withNamelist.push_back(filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true));
+ withNamelist.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
+ withNamelist.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true));
for (int i = 0; i < withNamelist.size(); i++) {
if (HAS_ATTR_CAST(withNamelist[i], "namelist")) {
std::string namelist = ATTR_CAST(withNamelist[i], "namelist");
- std::list<std::string> names = tokenizeIdRefs(namelist);
+ std::list<std::string> names = tokenize(namelist);
for (std::list<std::string>::iterator nameIter = names.begin(); nameIter != names.end(); nameIter++) {
_analyzer->addCode("_event.data." + *nameIter + " = 0;", this); // introduce for _event_t typedef
}
@@ -3531,14 +3532,14 @@ void ChartToPromela::writeProgram(std::ostream& stream) {
}
{
- NodeSet<std::string> cancels = filterChildElements(_nsInfo.xmlNSPrefix + "cancel", _scxml, true);
+ NodeSet<std::string> cancels = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "cancel", _scxml, true);
if (cancels.size() > 0) {
writeCancelEvents(stream);
stream << std::endl;
}
}
{
- NodeSet<std::string> invokes = filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
+ NodeSet<std::string> invokes = DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "invoke", _scxml, true);
if (invokes.size() > 0 && _analyzer->usesEventField("delay")) {
writeRemovePendingEventsFromInvoker(stream);
stream << std::endl;
diff --git a/src/uscxml/transform/ChartToPromela.h b/src/uscxml/transform/ChartToPromela.h
index d289436..82c4e5d 100644
--- a/src/uscxml/transform/ChartToPromela.h
+++ b/src/uscxml/transform/ChartToPromela.h
@@ -23,7 +23,7 @@
#include "Transformer.h"
#include "ChartToFSM.h"
#include "uscxml/interpreter/InterpreterDraft6.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include "uscxml/util/Trie.h"
#include <DOM/Document.hpp>
diff --git a/src/uscxml/transform/ChartToTex.h b/src/uscxml/transform/ChartToTex.h
index 037b55c..de3743e 100644
--- a/src/uscxml/transform/ChartToTex.h
+++ b/src/uscxml/transform/ChartToTex.h
@@ -24,7 +24,7 @@
#include "Transformer.h"
#include "ChartToFSM.h"
#include "uscxml/Interpreter.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include "uscxml/util/Trie.h"
#include <DOM/Document.hpp>
diff --git a/src/uscxml/transform/ChartToVHDL.cpp b/src/uscxml/transform/ChartToVHDL.cpp
index f37ad7e..52f1a5c 100644
--- a/src/uscxml/transform/ChartToVHDL.cpp
+++ b/src/uscxml/transform/ChartToVHDL.cpp
@@ -22,7 +22,7 @@
#include <DOM/io/Stream.hpp>
#include <iostream>
#include "uscxml/UUID.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include <math.h>
#include <boost/algorithm/string.hpp>
#include <glog/logging.h>
@@ -103,9 +103,9 @@ void ChartToVHDL::checkDocument() {
void ChartToVHDL::findEvents() {
// elements with an event attribute
NodeSet<std::string> withEvent;
- withEvent.push_back(InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "raise", _scxml, true));
- withEvent.push_back(InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
- withEvent.push_back(InterpreterImpl::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
+ withEvent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "raise", _scxml, true));
+ withEvent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "send", _scxml, true));
+ withEvent.push_back(DOMUtils::filterChildElements(_nsInfo.xmlNSPrefix + "transition", _scxml, true));
for (size_t i = 0; i < withEvent.size(); i++) {
if (HAS_ATTR_CAST(withEvent[i], "event")) {
@@ -479,7 +479,7 @@ void ChartToVHDL::writeOptimalTransitionSetSelection(std::ostream & stream) {
stream << " and ( '0' " << std::endl;;
// find all matching event literals
- std::list<std::string> eventDescs = tokenizeIdRefs(ATTR(transition, "event"));
+ std::list<std::string> eventDescs = tokenize(ATTR(transition, "event"));
for (std::list<std::string>::iterator descIter = eventDescs.begin(); descIter != eventDescs.end(); descIter++) {
std::list<TrieNode*> eventNames = _eventTrie.getWordsWithPrefix((*descIter) == "*" ? "" : *descIter);
for (std::list<TrieNode*>::iterator eventIter = eventNames.begin(); eventIter != eventNames.end(); eventIter++) {
diff --git a/src/uscxml/transform/ChartToVHDL.h b/src/uscxml/transform/ChartToVHDL.h
index abcb477..c2dec15 100644
--- a/src/uscxml/transform/ChartToVHDL.h
+++ b/src/uscxml/transform/ChartToVHDL.h
@@ -21,7 +21,7 @@
#define CHARTOVHDL_H
#include "uscxml/interpreter/InterpreterDraft6.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include "uscxml/util/Trie.h"
#include "Transformer.h"
#include "ChartToC.h"
diff --git a/src/uscxml/transform/FlatStateIdentifier.h b/src/uscxml/transform/FlatStateIdentifier.h
index 4afd956..99ae084 100644
--- a/src/uscxml/transform/FlatStateIdentifier.h
+++ b/src/uscxml/transform/FlatStateIdentifier.h
@@ -22,7 +22,7 @@
#include "uscxml/Common.h"
#include "uscxml/Convenience.h"
-#include "uscxml/DOMUtils.h"
+#include "uscxml/dom/DOMUtils.h"
#include <XPath/XPath.hpp>