[PyKDE] Sip support for FILE */PyFileObject
Phil Thompson
phil at riverbankcomputing.co.uk
Tue Oct 11 17:22:35 BST 2005
On Tuesday 11 October 2005 4:17 pm, Nigel Stewart wrote:
> >>Another thing we've tried is creating a binding
> >>for struct FILE, but the sip-generated code
> >>is inclined to delete it once passed to
> >>MyWriter...
> >>
> >>struct FILE
> >>{
> >>%TypeHeaderCode
> >>#include <cstdio>
> >>using namespace std;
> >>%End
> >>
> >>private:
> >> FILE();
> >> FILE(const FILE &);
> >> ~FILE();
> >>
> >>%ConvertToTypeCode
> >>
> >> if (sipIsErr == NULL)
> >> return PyFile_Check(sipPy);
> >>
> >> if (PyFile_Check(sipPy))
> >> {
> >> *sipCppPtr = PyFile_AsFile(sipPy);
> >> return 1;
> >> }
> >>
> >> *sipIsErr = 1;
> >> return 0;
> >>%End
> >>};
> >
> > I don't know what you mean by "inclined to delete it". It should follow
> > the normal garbage collection rules. If you want MyWriter to take
> > ownership of the FILE then take ownership of it in the ctor.
>
> Sorry for being vague. %ConvertToTypeCode normally allocates a new
> object - but in this special case it's merely unwrapping the existing
> FILE pointer from the PyFileObject.
>
> (1)
>
> MyWriter(FILE *)
>
> ...
> if (a0IsTemp)
> delete a0;
>
> ...
>
>
> (2)
>
> MyWriter(FILE * /Transfer/)
>
> ...
> if (a0IsTemp)
> delete a0;
> ...
>
>
> There seems to be an assumption that %ConvertToTypeCode creates
> a copy that needs to be deleted and ownership can't be transferred
> to C++.
It's not an assumption - it's the return value of %ConvertToTypeCode. Just
make sure it always returns 0.
Phil
More information about the PyQt
mailing list