Mercurial > projects > qtd
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_; } }