Mercurial > projects > qtd
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 |