OSDN Git Service

optimize QKeySequence::matches()
authorIvailo Monev <xakepa10@laimg.moc>
Wed, 17 Jun 2020 17:56:01 +0000 (17:56 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Wed, 17 Jun 2020 17:56:01 +0000 (17:56 +0000)
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
src/gui/kernel/qkeysequence.cpp

index a0729bf..5dce889 100644 (file)
@@ -1120,23 +1120,22 @@ QString QKeySequencePrivate::encodeString(int key, QKeySequence::SequenceFormat
 */
 QKeySequence::SequenceMatch QKeySequence::matches(const QKeySequence &seq) const
 {
-    int userN = count();
-    int seqN = seq.count();
+    const int userN = count();
+    const int seqN = seq.count();
 
     if (userN > seqN)
-        return NoMatch;
+        return SequenceMatch::NoMatch;
+
+    for (int i = 0; i < userN; i++) {
+        if (d->key[i] != seq.d->key[i])
+            return SequenceMatch::NoMatch;
+    }
 
     // If equal in length, we have a potential ExactMatch sequence,
     // else we already know it can only be partial.
-    SequenceMatch match = (userN == seqN ? ExactMatch : PartialMatch);
-
-    for (int i = 0; i < userN; ++i) {
-        int userKey = (*this)[i],
-            sequenceKey = seq[i];
-        if (userKey != sequenceKey)
-            return NoMatch;
-    }
-    return match;
+    if (userN == seqN)
+        return SequenceMatch::ExactMatch;
+    return SequenceMatch::PartialMatch;
 }
 
 /*!