Mercurial > projects > qtd
diff d1/qt/QtdObject.d @ 344:96a75b1e5b26
project structure changes
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Fri, 14 May 2010 12:14:37 +0300 |
parents | qt/d1/qt/QtdObject.d@b1abe7f57321 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/d1/qt/QtdObject.d Fri May 14 12:14:37 2010 +0300 @@ -0,0 +1,71 @@ +/** +* +* 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); + } +} \ No newline at end of file