diff d2/qtd/MOC.d @ 368:185df9220ea7

Fixed startsWith. Implemented meta-object members as ranges. Freed QMetaObject from stuff that belongs to MetaClass
author Max Samukha <maxter@maxter.com>
date Mon, 28 Jun 2010 21:29:32 +0300
parents f69341b40588
children a032df77b6ab
line wrap: on
line diff
--- a/d2/qtd/MOC.d	Thu Jun 24 13:47:30 2010 +0300
+++ b/d2/qtd/MOC.d	Mon Jun 28 21:29:32 2010 +0300
@@ -494,6 +494,7 @@
         std.typetuple,
         std.traits,
         qtd.Marshal,
+        qtd.meta.Runtime,
         qt.core.QString; // for QStringUtil.toNative
 
 public: // required to override the outside scope protection.
@@ -529,45 +530,32 @@
     }
 
     @property
-    override QMetaObject metaObject() const { return staticMetaObject(); }
-
-    private static
+    override QMetaObject metaObject() const
     {
-        __gshared QMetaObject staticMetaObject_;
-        __gshared QMetaObjectNative nativeStaticMetaObject_;
-        bool staticMoInited_;
+        return staticMetaObject;
     }
 
     @property
     static QMetaObject staticMetaObject()
     {
-        // using a thread-local flag to mitigate
-        // the performance hit caused by lazy initialization
-        if(!staticMoInited_)
-        {
-            synchronized(qtdMoLock)
-            {
-                if (!staticMetaObject_)
-                {
-                    alias BaseClassesTuple!(This)[0] Base;
+        return meta!This;
+    }
+
+    __gshared static QMetaObjectNative nativeStaticMetaObject_;
 
-                    nativeStaticMetaObject_ = QMetaObjectNative(
-                        Base.staticMetaObject.nativeId,
-                        qt_meta_stringdata.ptr,
-                        qt_meta_data.ptr, null);
+    static void* qtd_nativeStaticMetaObject()
+    {
+        alias BaseClassesTuple!(This)[0] Base;
 
-                    QMetaObject.create!This(&nativeStaticMetaObject_);
-                }
-            }
-            staticMoInited_ = true;
+        if (!nativeStaticMetaObject_.data)
+        {
+            nativeStaticMetaObject_ = QMetaObjectNative(
+                meta!(Base).nativeId,
+                qt_meta_stringdata.ptr,
+                qt_meta_data.ptr, null);
         }
 
-        return staticMetaObject_;
-    }
-
-    /*internal*/ static void setStaticMetaObject(QMetaObject m)
-    {
-        staticMetaObject_ = m;
+        return &nativeStaticMetaObject_;
     }
 }