>>> As others already said, using a Numpy array or an array.array object >>> would >>> be more efficient (and even easier - the C code gets a pointer to an >>> array >>> of integers, as usual). >> >> I looked for this in the C API docs but couldn't find anything on how >> to make an array.array python object appear as a pointer to integers >> (or floats, etc) in C code. On >> >> http://docs.python.org/c-api/concrete.html#sequence-objects >> >> There is only list and tuple or maybe you mean byte array? That has >> only been introduced in python 2.6 and I'm working on 2.5. > > array is a library module, and isn't really part of the API. You're > looking for the buffer protocol: > PyObject_AsReadBuffer/PyObject_AsWriteBuffer; see > http://docs.python.org/c-api/objbuffer.html > > Given an array.array('l') (containing C long integers): > > int do_something(PyObject* obj) > { > long *vec; > Py_ssize_t nbytes, nitems, i; > > if (PyObject_AsReadBuffer(obj, (const void **)&vec, &nbytes) != 0) > return NULL; > nitems = nbytes/sizeof(long); > for (i=0; i<nitems; i++) { > /* do something with vec[i] */ > } > return ret; > } > > From Python you can get "vec" and "nitems" using the buffer_info() method > of array objects.
Thanks very much, this was very helpful! Cheers, Daniel -- Psss, psss, put it down! - http://www.cafepress.com/putitdown -- http://mail.python.org/mailman/listinfo/python-list