On Tuesday 04 March 2008, William Stein wrote:
> On Tue, Mar 4, 2008 at 6:39 AM, Neal Becker <[EMAIL PROTECTED]> wrote:
> > I've made some progress on learning to wrap std::vector.  I've got a
> >  __getitem__, but I don't know what to do about __setitem__.
> >  cdef extern from "vector":
> >     pass
> >
> >  cdef extern from "test1.hpp":
> >     ctypedef struct intvec "std::vector<unsigned int>":
> >         void (* push_back)(int elem)
> >         inline int get "operator[]" (int i)
> >
> >     intvec intvec_factory "std::vector<unsigned int>"(int len)
> >
> >     int my_sum "my_sum<std::vector<unsigned int> >"(intvec vec)
> >
> >
> >
> >  cdef intvec v = intvec_factory(2)
> >  v.push_back(2)
> >
> >  #print my_sum (v)
> >
> >  cdef class intvec_wrap:
> >     cdef intvec vec
> >     def __init__(self):
> >         self.vec = intvec_factory (2)
> >     def __getitem__(self, int i):
> >         return self.vec.get (i)
> >
> >  Problem is, operator[] (or at()) returns an int&.  I don't have a clue
> > what to do with this.
>
> There is an example of doing setitem directly in Cython with
> std::vector<unsigned int>
> using C name specifiers in my talk on Cython at Enthought from two
> days ago.  See
> the talk listed at the bottom of this page:
>   http://wiki.sagemath.org/days8/schedule
>
> Here's the example:
>
> cdef extern from "vector.h":
>     ctypedef unsigned long size_type
>
>     ctypedef struct intvec "std::vector<unsigned int>":
>         int get_entry "operator[]"(int n)
>         size_type size()
>
>     intvec intvec_factory "std::vector<unsigned int>"(int len)
>
> cdef extern from "":
>     void DEFINE_SET "#define SET(a,b,c) a[b]=c; //"()
>     void SET(intvec, int, int)
> DEFINE_SET()
>
>
> cdef intvec v = intvec_factory(10)
> SET(v,2,5)
> print v.get_entry(2)
> print v.size()
>
>
> ----------------
>
> The key thing is the evil dirty trick to define a SET macro directly in
> Cython. -- William

Wow, that is ugly.
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to