Mercurial > projects > qtd
view qt/d1/qt/QtdObject.d @ 253:073b9153ed8a
Rev. 264 done right.
Problems:
- classwizard segfaults on exit due to a bug in signals/slots or runtime.
- hellogl doesn't compile with dmd2 due to a bug in the compiler backend
author | maxter |
---|---|
date | Sun, 30 Aug 2009 09:59:12 +0000 |
parents | |
children | b1abe7f57321 |
line wrap: on
line source
/** * * Copyright: Copyright QtD Team, 2008-2009 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a> * * Copyright QtD Team, 2008-2009 * Distributed under the Boost Software License, Version 1.0. * (See accompanying file boost-license-1.0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) * */ module qt.QtdObject; import qt.Signal; //import tango.io.Stdout; enum QtdObjectFlags : ubyte { none, nativeOwnership = 0x1, dOwnership = 0x2, dynamicEntity = 0x4 //gcManaged = 0x4 } package abstract class QtdObject { protected QtdObjectFlags __flags_; void* __nativeId; mixin SignalHandlerOps; this(void* nativeId, QtdObjectFlags flags = QtdObjectFlags.none) { //Stdout.formatln("Created D object {} {:x}", nativeId, flags).newline; __nativeId = nativeId; __flags_ = flags; } final QtdObjectFlags __flags() { return __flags_; } /+ final +/ void __setFlags(QtdObjectFlags flags, bool value) { if (value) __flags_ |= flags; else __flags_ &= ~flags; } // COMPILER BUG: 3206 protected void __deleteNative() { assert(false); } ~this() { //Stdout.formatln("Deleting D object {}", __nativeId); if (!(__flags_ & QtdObjectFlags.nativeOwnership)) { // avoid deleting D object twice. //Stdout.formatln("About to delete native object {}", __nativeId); __flags_ |= QtdObjectFlags.dOwnership; __deleteNative; } //Stdout.formatln("Deleted native D object {}", __nativeId); } } class QtdMetaObject { private { void* _typeId; QtdMetaObject _base; } QtdMetaObject base() { return _base; } this(void* typeId, QtdMetaObject base) { _typeId = typeId; _base = base; } }