On Mon, 10 May 2010 15:53:50 -0700, Nathan Cournia <cour...@gmail.com> wrote: > Hi, > > I'm currently trying to use %MappedType to allow my QT code to > interact with C++ objects that have been wrapped using SWIG. My .sip > file currently looks like: > > %MappedType Node /NoDefaultCtors/ > { > > %TypeHeaderCode > #include <foo/Node.h> > using namespace foo; > %End > > %ConvertFromTypeCode > return sipCpp->getPyObject(); > %End > > %ConvertToTypeCode > if (!sipIsErr) { > return foo::Node::isNode(sipPy); > } > > *sipCppPtr = foo::Node::asNode(sipPy); > > if (!*sipCppPtr) { > *sipIsErr = 1; > return 0; > } else { > return SIP_TEMPORARY; > } > %End > > }; > > Can %MappedType be used to tell SIP about Python objects that have > been wrapped with SWIG? Is this a good idea? > > The following code is generated: > > extern "C" {static void assign_Node(void *, SIP_SSIZE_T, const void *);} > static void assign_Node(void *sipDst, SIP_SSIZE_T sipDstIdx, const void > *sipSrc) > { > reinterpret_cast<Node *>(sipDst)[sipDstIdx] = > *reinterpret_cast<const Node *>(sipSrc); > } > > > extern "C" {static void *array_Node(SIP_SSIZE_T);} > static void *array_Node(SIP_SSIZE_T sipNrElem) > { > return new Node[sipNrElem]; > } > > > extern "C" {static void *copy_Node(const void *, SIP_SSIZE_T);} > static void *copy_Node(const void *sipSrc, SIP_SSIZE_T sipSrcIdx) > { > return new Node(reinterpret_cast<const Node *>(sipSrc)[sipSrcIdx]); > } > > > /* Call the mapped type's destructor. */ > extern "C" {static void release_Node(void *, int);} > static void release_Node(void *ptr, int) > { > Py_BEGIN_ALLOW_THREADS > delete reinterpret_cast<Node *>(ptr); > Py_END_ALLOW_THREADS > } > #endif > > > This poses several problems. First, foo::Node's assignment and copy > constructors have been hidden/disabled. This means assign_Node and > copy_Node do not work. Is there a way to disable the generation of > assign_Node and copy_Node? > > Second, I do not want SIP to call delete on the Node in release_Node. > foo::Node is internally reference counted, The SWIG bindings are aware > of this and should decrement foo::Node's reference count when the > PyObject is released. Can I disabled the generation of release_Node?
/NoDefaultCtors/ is a class annotation, not a mapped type annotation. Replace it with /NoRelease/ and all those functions will be suppressed. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt