comparison 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
comparison
equal deleted inserted replaced
367:f69341b40588 368:185df9220ea7
492 { 492 {
493 import 493 import
494 std.typetuple, 494 std.typetuple,
495 std.traits, 495 std.traits,
496 qtd.Marshal, 496 qtd.Marshal,
497 qtd.meta.Runtime,
497 qt.core.QString; // for QStringUtil.toNative 498 qt.core.QString; // for QStringUtil.toNative
498 499
499 public: // required to override the outside scope protection. 500 public: // required to override the outside scope protection.
500 501
501 alias typeof(this) This; 502 alias typeof(this) This;
527 528
528 return _id; 529 return _id;
529 } 530 }
530 531
531 @property 532 @property
532 override QMetaObject metaObject() const { return staticMetaObject(); } 533 override QMetaObject metaObject() const
533 534 {
534 private static 535 return staticMetaObject;
535 {
536 __gshared QMetaObject staticMetaObject_;
537 __gshared QMetaObjectNative nativeStaticMetaObject_;
538 bool staticMoInited_;
539 } 536 }
540 537
541 @property 538 @property
542 static QMetaObject staticMetaObject() 539 static QMetaObject staticMetaObject()
543 { 540 {
544 // using a thread-local flag to mitigate 541 return meta!This;
545 // the performance hit caused by lazy initialization 542 }
546 if(!staticMoInited_) 543
544 __gshared static QMetaObjectNative nativeStaticMetaObject_;
545
546 static void* qtd_nativeStaticMetaObject()
547 {
548 alias BaseClassesTuple!(This)[0] Base;
549
550 if (!nativeStaticMetaObject_.data)
547 { 551 {
548 synchronized(qtdMoLock) 552 nativeStaticMetaObject_ = QMetaObjectNative(
549 { 553 meta!(Base).nativeId,
550 if (!staticMetaObject_) 554 qt_meta_stringdata.ptr,
551 { 555 qt_meta_data.ptr, null);
552 alias BaseClassesTuple!(This)[0] Base; 556 }
553 557
554 nativeStaticMetaObject_ = QMetaObjectNative( 558 return &nativeStaticMetaObject_;
555 Base.staticMetaObject.nativeId, 559 }
556 qt_meta_stringdata.ptr, 560 }
557 qt_meta_data.ptr, null); 561
558
559 QMetaObject.create!This(&nativeStaticMetaObject_);
560 }
561 }
562 staticMoInited_ = true;
563 }
564
565 return staticMetaObject_;
566 }
567
568 /*internal*/ static void setStaticMetaObject(QMetaObject m)
569 {
570 staticMetaObject_ = m;
571 }
572 }
573