diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2014-08-17 20:33:19 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2015-06-24 13:15:05 +0000 |
commit | aa79adef6f7ce985138db535ef4d8fe3325b3fc3 (patch) | |
tree | e60d32f633ca637c92c7795a19f65bb7dd47ff97 /src/corelib/statemachine | |
parent | 931f9c23ee884fe929aed50404a29776826d8bd4 (diff) |
QAbstractTransition: don't hold QPointers in QList
QPointer is larger than a void*, so holding them in a QList is needlessly
inefficient. Worse, the code could come to depend on the fragile property
of (inefficient) QLists that references to elements therein never are
invalidated.
Change-Id: I52e83a26eda06fb9826e9c4773a7a0b84b0f59c7
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/statemachine')
-rw-r--r-- | src/corelib/statemachine/qabstracttransition.cpp | 2 | ||||
-rw-r--r-- | src/corelib/statemachine/qabstracttransition_p.h | 3 | ||||
-rw-r--r-- | src/corelib/statemachine/qstate.cpp | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index 81b38ea4c4..7f04160a8f 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -254,7 +254,7 @@ QList<QAbstractState*> QAbstractTransition::targetStates() const void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets) { Q_D(QAbstractTransition); - QList<QPointer<QAbstractState> > copy(d->targetStates); + QVector<QPointer<QAbstractState> > copy(d->targetStates); bool sameList = true; for (int i = 0; i < targets.size(); ++i) { QAbstractState *target = targets.at(i); diff --git a/src/corelib/statemachine/qabstracttransition_p.h b/src/corelib/statemachine/qabstracttransition_p.h index 4b0644acd9..1a28e5a73e 100644 --- a/src/corelib/statemachine/qabstracttransition_p.h +++ b/src/corelib/statemachine/qabstracttransition_p.h @@ -48,6 +48,7 @@ #include <private/qobject_p.h> #include <QtCore/qlist.h> +#include <QtCore/qvector.h> #include <QtCore/qsharedpointer.h> QT_BEGIN_NAMESPACE @@ -72,7 +73,7 @@ public: QStateMachine *machine() const; void emitTriggered(); - QList<QPointer<QAbstractState> > targetStates; + QVector<QPointer<QAbstractState> > targetStates; QAbstractTransition::TransitionType transitionType; #ifndef QT_NO_ANIMATION diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp index 6e9fb63554..5abbbfd9ad 100644 --- a/src/corelib/statemachine/qstate.cpp +++ b/src/corelib/statemachine/qstate.cpp @@ -320,7 +320,7 @@ void QState::addTransition(QAbstractTransition *transition) } transition->setParent(this); - const QList<QPointer<QAbstractState> > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; + const QVector<QPointer<QAbstractState> > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; for (int i = 0; i < targets.size(); ++i) { QAbstractState *t = targets.at(i).data(); if (!t) { |