On Mon, Mar 29, 2010 at 11:23:08PM +0300, Ari Jolma wrote: > I was wrong in saying that there are no "unnecessary" memory copies in > Perl. It seems that the raster data is copied to a buffer, from which it > is copied to another buffer maintained by Perl. I then have an extra > layer of Perl code to copy from that buffer to Perl scalar arrays for > ease of use. An optimization to do away one of the copies would be > useful. That would mean copying from the initial buffer directly into > Perl arrays within a typemap - I haven't done that because of the > complication of several datatypes. To change that would mean - not to > break existing code - defining a new set of read/write methods. > > Would that be compatible with what is wished for in the Python bindings?
Yes, that is what I tried to solve. In Python it looks like that: %typemap(argout) (int *nLen, char **pBuf ) { /* %typemap(argout) (int *nLen, char **pBuf ) */ Py_XDECREF($result); %#if PY_VERSION_HEX >= 0x03000000 $result = PyBytes_FromStringAndSize( *$2, *$1 ); %#else $result = PyString_FromStringAndSize( *$2, *$1 ); %#endif } PyString_FromStringAndSize() takes the array allocated in ReadRaster_internal() function (see Band.i) and copies it into the string. The former array is being deallocated after that. I would like to read directly in the final string object. I think it could be done using the buffer API in recent Python branches. For now I have reverted back the problem commit. Best regards, Andrey -- Andrey V. Kiselev _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev