Optimize space for the QEventLoopQuitLocker.
authorStephen Kelly <stephen.kelly@kdab.com>
Thu, 23 Feb 2012 11:59:21 +0000 (12:59 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 27 Feb 2012 11:57:30 +0000 (12:57 +0100)
Use a union and a type enum instead of three pointers.

Change-Id: I02b11733a4f2e95099064fa9325497d4e04ac615
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
src/corelib/kernel/qeventloop.cpp

index 2fb3517..dfdd178 100644 (file)
@@ -322,37 +322,51 @@ class QEventLoopLockerPrivate
 {
 public:
     explicit QEventLoopLockerPrivate(QEventLoopPrivate *loop)
-      : loop(loop), thread(0), app(0)
+      : loop(loop), type(EventLoop)
     {
         loop->ref();
     }
 
     explicit QEventLoopLockerPrivate(QThreadPrivate *thread)
-      : loop(0), thread(thread), app(0)
+      : thread(thread), type(Thread)
     {
         thread->ref();
     }
 
     explicit QEventLoopLockerPrivate(QCoreApplicationPrivate *app)
-      : loop(0), thread(0), app(app)
+      : app(app), type(Application)
     {
         app->ref();
     }
 
     ~QEventLoopLockerPrivate()
     {
-        if (loop)
+        switch (type)
+        {
+        case EventLoop:
             loop->deref();
-        else if (thread)
+            break;
+        case Thread:
             thread->deref();
-        else
+            break;
+        default:
             app->deref();
+            break;
+        }
     }
 
 private:
-    QEventLoopPrivate *loop;
-    QThreadPrivate *thread;
-    QCoreApplicationPrivate *app;
+    union {
+        QEventLoopPrivate * loop;
+        QThreadPrivate * thread;
+        QCoreApplicationPrivate * app;
+    };
+    enum Type {
+        EventLoop,
+        Thread,
+        Application
+    };
+    const Type type;
 };
 
 /*!