[Pyrex] Access to nested structures and arrays
Greg Ewing
greg.ewing at canterbury.ac.nz
Mon Mar 19 22:50:47 UTC 2007
Pierre GM wrote:
> cdef class modelflags:
> cdef int *c_list[8]
>
> def __setitem__(self, idx, val):
> cdef int tmpval
> tmpval = val
> self.c_list[i] = &tmpval
This doesn't look right -- you're putting a pointer to
a stack-allocated int in the array. Don't you just want
the ints directly in the list? i.e.
> cdef class modelflags:
> cdef int c_list[8]
>
> def __setitem__(self, i, val):
> self.c_list[i] = val
> cdef setup(self, c_struct *base, long npar):
> ...
> self.parametric_flags.c_list[0] = base.parametric[0]
> AttributeError: 'modelflags' object has no attribute c_list.
Can you post the whole code? I suspect what you're actually
using doesn't match the snippet above, since with modelflags
declared as you claim, you shouldn't have got that message.
>>Perhaps if you think of things in terms of providing a python
>>interface to manipulating the underlying c structure,
>
> Er, yes, but I have no idea how.
You're on the right track with using methods like __getitem__
and __setitem__ to access the C data, rather than converting
it en masse.
--
Greg
More information about the Pyrex
mailing list