From d7ee1cc6456e35823d2c470feec6219ef516e1f6 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <olivier.goffart@nokia.com>
Date: Fri, 25 Mar 2011 11:50:03 +0100
Subject: Improve slightly the performence of activate

Avoid the overhead of QObjectConnectionListVector::at(), when we
know anyway which list to take.

Reviewed-by: brad
---
 src/corelib/kernel/qobject.cpp | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 7ad9f9b..c6f2456 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -263,12 +263,6 @@ public:
         : QVector<QObjectPrivate::ConnectionList>(), orphaned(false), dirty(false), inUse(0)
     { }
 
-    const QObjectPrivate::ConnectionList &at(int at) const
-    {
-        if (at < 0)
-            return allsignals;
-        return QVector<QObjectPrivate::ConnectionList>::at(at);
-    }
     QObjectPrivate::ConnectionList &operator[](int at)
     {
         if (at < 0)
@@ -3489,16 +3483,20 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
         return;
     }
     ++connectionLists->inUse;
-    if (signal_index >= connectionLists->count()) {
-        signal_index = -2; //for "all signals";
-    }
+
+
+    const QObjectPrivate::ConnectionList *list;
+    if (signal_index < connectionLists->count())
+        list = &connectionLists->at(signal_index);
+    else
+        list = &connectionLists->allsignals;
 
     do {
-        QObjectPrivate::Connection *c = connectionLists->at(signal_index).first;
+        QObjectPrivate::Connection *c = list->first;
         if (!c) continue;
         // We need to check against last here to ensure that signals added
         // during the signal emission are not emitted in this emission.
-        QObjectPrivate::Connection *last = connectionLists->at(signal_index).last;
+        QObjectPrivate::Connection *last = list->last;
 
         do {
             if (!c->receiver)
@@ -3582,7 +3580,9 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
 
         if (connectionLists->orphaned)
             break;
-    } while (signal_index >= 0 && (signal_index = -1)); //start over for -1 (all signal)
+    } while (list != &connectionLists->allsignals &&
+        //start over for all signals;
+        ((list = &connectionLists->allsignals), true));
 
     --connectionLists->inUse;
     Q_ASSERT(connectionLists->inUse >= 0);
-- 
cgit v0.12