Andrew MacIntyre wrote: > > > In the case where SWIG is using its own objects to contain returned > > > pointers, then I expect pyobj_to_ptr() needs to be changed to use > > > SWIG_ConvertPtr() rather than PyCObject_AsVoidPtr() to retrieve the > > > actual pointer, or the output typemaps for returned pointers need to be > > > changed to use Python's CObjects rather than native SWIG wrapper > > > objects. > > > > So, what do you suggest? Remove the PyCObject_Check() call, explicitly > > check for string, read buffer, write buffer, and sequence, then call > > SWIG_ConvertPtr() on anything which is left over? > > That's what I would try.
Except ... SWIG_ConvertPtr() seems to require that you have access to the type descriptor. The documentation seems to suggest (although, as usual, it's unclear) that you need to know the actual type. > I don't think you need to get rid of the typemap - I suspect you might > have to expand it to distinguish between the different types of pointers > though (see below)... > I get the impression from the above linked documentation that, for > example, there should be an explicit typemap reference for CELL pointers > (as returned by Rast_allocate_c_buf()) and that the typemap for CELL > pointers as an input argument should use SWIG_ConvertPtr(), which will > set an exception if the inbound object is not a suitable input GRASS uses "void *" to refer to any of CELL*/FCELL*/DCELL* quite extensively. I think that I'm not going to put any more effort into the SWIG wrapper unless usable documentation materialises. In the meantime, I'm going to look for alternatives. -- Glynn Clements <gl...@gclements.plus.com> _______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/grass-dev