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