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