Mercurial > projects > qtd
comparison d2/qtd/MOC.d @ 365:958e8b9a89bd
Changeset a084e2df3776 is broken. Backing out.
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Fri, 11 Jun 2010 20:09:25 +0300 |
parents | a084e2df3776 |
children | f69341b40588 |
comparison
equal
deleted
inserted
replaced
364:a084e2df3776 | 365:958e8b9a89bd |
---|---|
488 return gen.output; | 488 return gen.output; |
489 } | 489 } |
490 | 490 |
491 mixin template Q_OBJECT() | 491 mixin template Q_OBJECT() |
492 { | 492 { |
493 import | 493 import std.typetuple; |
494 std.typetuple, | 494 import qtd.Marshal; |
495 qtd.meta.Runtime, | 495 import std.stdio; |
496 qtd.Marshal, | 496 import qt.core.QString; // for QStringUtil.toNative |
497 qt.core.QString, | |
498 std.stdio; | |
499 | 497 |
500 public: // required to override the outside scope protection. | 498 public: // required to override the outside scope protection. |
501 | 499 |
502 alias typeof(this) This; | 500 alias typeof(this) This; |
503 | 501 |
530 } | 528 } |
531 | 529 |
532 @property | 530 @property |
533 override QMetaObject metaObject() const { return staticMetaObject(); } | 531 override QMetaObject metaObject() const { return staticMetaObject(); } |
534 | 532 |
533 private static | |
534 { | |
535 __gshared QMetaObject staticMetaObject_; | |
536 __gshared QMetaObjectNative nativeStaticMetaObject_; | |
537 bool staticMoInited_; | |
538 } | |
539 | |
535 @property | 540 @property |
536 static QMetaObject staticMetaObject() | 541 static QMetaObject staticMetaObject() |
537 { | 542 { |
538 return meta!This; | 543 // using a thread-local flag to mitigate |
539 } | 544 // the performance hit caused by lazy initialization |
540 | 545 if(!staticMoInited_) |
541 @property static void* qtd_nativeMetaObject() | |
542 { | |
543 __gshared static QMetaObjectNative nativeMo; | |
544 if (!nativeMo.data) | |
545 { | 546 { |
546 alias BaseClassesTuple!(This)[0] Base; | 547 synchronized(qtdMoLock) |
547 nativeMo = QMetaObjectNative( | 548 { |
548 Base.staticMetaObject.nativeId, | 549 if (!staticMetaObject_) |
549 qt_meta_stringdata.ptr, | 550 { |
550 qt_meta_data.ptr, null); | 551 alias BaseClassesTuple!(This)[0] Base; |
551 } | 552 |
552 return &nativeMo; | 553 nativeStaticMetaObject_ = QMetaObjectNative( |
553 } | 554 Base.staticMetaObject.nativeId, |
554 } | 555 qt_meta_stringdata.ptr, |
555 | 556 qt_meta_data.ptr, null); |
557 | |
558 QMetaObject.create!This(&nativeStaticMetaObject_); | |
559 } | |
560 } | |
561 staticMoInited_ = true; | |
562 } | |
563 | |
564 return staticMetaObject_; | |
565 } | |
566 | |
567 /*internal*/ static void setStaticMetaObject(QMetaObject m) | |
568 { | |
569 staticMetaObject_ = m; | |
570 } | |
571 } | |
572 |