Mercurial > projects > qtd
comparison qt/QGlobal.d @ 183:d3f4f14d43a5
fixes with QObjects
author | eldar |
---|---|
date | Fri, 03 Jul 2009 20:53:07 +0000 |
parents | d66bbb9a5053 |
children | 7d9db724ee1d |
comparison
equal
deleted
inserted
replaced
182:973564c7e388 | 183:d3f4f14d43a5 |
---|---|
583 const ushort QT_EDITION_ACADEMIC = QT_EDITION_DESKTOP; | 583 const ushort QT_EDITION_ACADEMIC = QT_EDITION_DESKTOP; |
584 const ushort QT_EDITION_EDUCATIONAL = QT_EDITION_DESKTOP; | 584 const ushort QT_EDITION_EDUCATIONAL = QT_EDITION_DESKTOP; |
585 const ushort QT_EDITION_EVALUATION = QT_EDITION_DESKTOP; | 585 const ushort QT_EDITION_EVALUATION = QT_EDITION_DESKTOP; |
586 | 586 |
587 mixin QT_END_NAMESPACE; | 587 mixin QT_END_NAMESPACE; |
588 | |
589 package import tango.stdc.stdlib; | |
590 | |
591 template sizeOf(C : Object) | |
592 { | |
593 const sizeOf = sizeOfImpl!(C); | |
594 } | |
595 | |
596 size_t sizeOfImpl(C)() | |
597 { | |
598 size_t size; | |
599 | |
600 foreach (i, _; typeof(C.tupleof)) | |
601 { | |
602 auto newSize = C.tupleof[i].offsetof + C.tupleof[i].sizeof; | |
603 if (newSize > size) | |
604 size = newSize; | |
605 } | |
606 | |
607 return size; | |
608 } | |
609 | |
610 scope class StackObject(C) | |
611 { | |
612 byte[sizeOf!(C)] data; | |
613 bool constructed; | |
614 | |
615 C opCall(A...)(A args) | |
616 { | |
617 assert(!constructed); | |
618 | |
619 auto r = new(&data)C(args); | |
620 r.__stackAllocated = true; | |
621 constructed = true; | |
622 | |
623 return r; | |
624 } | |
625 | |
626 ~this() | |
627 { | |
628 if (constructed) | |
629 { | |
630 auto obj = cast(C)&data; | |
631 delete obj; | |
632 } | |
633 } | |
634 } | |
635 | |
588 mixin QT_END_HEADER; | 636 mixin QT_END_HEADER; |
637 |