Mercurial > projects > qtd
diff d2/qtd/MOC.d @ 364:a084e2df3776
Preparing for non-QObject meta-objects. Now meta-objects for static types can be uniformly accessed using meta!T
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Fri, 11 Jun 2010 12:16:09 +0300 |
parents | a3f5c10414f3 |
children | 958e8b9a89bd |
line wrap: on
line diff
--- a/d2/qtd/MOC.d Thu Jun 10 00:57:32 2010 +0300 +++ b/d2/qtd/MOC.d Fri Jun 11 12:16:09 2010 +0300 @@ -490,10 +490,12 @@ mixin template Q_OBJECT() { - import std.typetuple; - import qtd.Marshal; - import std.stdio; - import qt.core.QString; // for QStringUtil.toNative + import + std.typetuple, + qtd.meta.Runtime, + qtd.Marshal, + qt.core.QString, + std.stdio; public: // required to override the outside scope protection. @@ -530,43 +532,24 @@ @property override QMetaObject metaObject() const { return staticMetaObject(); } - private static - { - __gshared QMetaObject staticMetaObject_; - __gshared QMetaObjectNative nativeStaticMetaObject_; - bool staticMoInited_; - } - @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; - - nativeStaticMetaObject_ = QMetaObjectNative( - Base.staticMetaObject.nativeId, - qt_meta_stringdata.ptr, - qt_meta_data.ptr, null); - - QMetaObject.create!This(&nativeStaticMetaObject_); - } - } - staticMoInited_ = true; - } - - return staticMetaObject_; + return meta!This; } - /*internal*/ static void setStaticMetaObject(QMetaObject m) + @property static void* qtd_nativeMetaObject() { - staticMetaObject_ = m; + __gshared static QMetaObjectNative nativeMo; + if (!nativeMo.data) + { + alias BaseClassesTuple!(This)[0] Base; + nativeMo = QMetaObjectNative( + Base.staticMetaObject.nativeId, + qt_meta_stringdata.ptr, + qt_meta_data.ptr, null); + } + return &nativeMo; } }