summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/scxml/qscxmlparser.cpp11
-rw-r--r--src/scxml/qscxmlparser_p.h2
-rw-r--r--src/scxml/qscxmltabledata.cpp4
3 files changed, 13 insertions, 4 deletions
diff --git a/src/scxml/qscxmlparser.cpp b/src/scxml/qscxmlparser.cpp
index 6862614..d09f4c7 100644
--- a/src/scxml/qscxmlparser.cpp
+++ b/src/scxml/qscxmlparser.cpp
@@ -1176,6 +1176,15 @@ DocumentModel::Node::~Node()
{
}
+DocumentModel::AbstractState *DocumentModel::Node::asAbstractState()
+{
+ if (State *state = asState())
+ return state;
+ if (HistoryState *history = asHistoryState())
+ return history;
+ return Q_NULLPTR;
+}
+
void DocumentModel::DataElement::accept(DocumentModel::NodeVisitor *visitor)
{
visitor->visit(this);
@@ -1981,7 +1990,7 @@ bool QScxmlParserPrivate::postReadElementData()
DocumentModel::DataElement *data = Q_NULLPTR;
if (auto state = m_currentState->asState()) {
data = state->dataElements.last();
- } else if (auto scxml = m_currentState->asNode()->asScxml()) {
+ } else if (auto scxml = m_currentState->asScxml()) {
data = scxml->dataElements.last();
} else {
Q_UNREACHABLE();
diff --git a/src/scxml/qscxmlparser_p.h b/src/scxml/qscxmlparser_p.h
index 1d01447..05399fc 100644
--- a/src/scxml/qscxmlparser_p.h
+++ b/src/scxml/qscxmlparser_p.h
@@ -98,6 +98,7 @@ struct Node {
virtual Transition *asTransition() { return Q_NULLPTR; }
virtual HistoryState *asHistoryState() { return Q_NULLPTR; }
virtual Scxml *asScxml() { return Q_NULLPTR; }
+ AbstractState *asAbstractState();
private:
Q_DISABLE_COPY(Node)
@@ -270,7 +271,6 @@ struct StateContainer
virtual AbstractState *asAbstractState() { return Q_NULLPTR; }
virtual State *asState() { return Q_NULLPTR; }
virtual Scxml *asScxml() { return Q_NULLPTR; }
- Node *asNode() { return dynamic_cast<Node *>(this); }
};
struct AbstractState: public StateContainer
diff --git a/src/scxml/qscxmltabledata.cpp b/src/scxml/qscxmltabledata.cpp
index b3f9f1c..952bc16 100644
--- a/src/scxml/qscxmltabledata.cpp
+++ b/src/scxml/qscxmltabledata.cpp
@@ -193,7 +193,7 @@ protected: // visitor
QVector<DocumentModel::AbstractState *> childStates;
foreach (DocumentModel::StateOrTransition *sot, node->children) {
- if (DocumentModel::AbstractState *s = dynamic_cast<DocumentModel::AbstractState *>(sot)) {
+ if (DocumentModel::AbstractState *s = sot->asAbstractState()) {
childStates.append(s);
}
}
@@ -289,7 +289,7 @@ protected: // visitor
QVector<DocumentModel::AbstractState *> childStates;
foreach (DocumentModel::StateOrTransition *sot, state->children) {
- if (auto s = dynamic_cast<DocumentModel::AbstractState *>(sot)) {
+ if (auto s = sot->asAbstractState()) {
childStates.append(s);
}
}