Boost logo

Boost :

From: David Abrahams (abrahams_at_[hidden])
Date: 2000-12-08 09:19:41


Ralf,

I think there must be a simpler way. I'll do some experiments and try to
come up with one for you.

-Dave
----- Original Message -----
From: <rwgk_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Thursday, December 07, 2000 11:24 PM
Subject: [boost] Re: [Boost Python Library] Mixing types wrapped in
different modules

> I am trying to incrementally implement the feature *originally*
> proposed in this thread. Superficially (!) I got the following
> to work properly:
>
> import dvect
>
> d = dvect.dvect((1,2,3,4,5,6))
> print d.as_tuple()
>
> id = d.as_ivect()
> print id.as_tuple()
>
> did = id.as_dvect()
> print did.as_tuple()
>
> Output:
> (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
> (1, 2, 3, 4, 5, 6)
> (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
>
> The source code can be viewed at this location:
> http://cci.lbl.gov/~rwgk/cvs/cvsweb.cgi/bpl_tru64/
>
> The files to look at are dvect.cpp, dvect.h, ivect.cpp, ivect.h, and
> import_constructor.cpp. ivect.* and dvect.* are the same except for
> the
> type used (double vs. int), and the variable names (dvect <-> ivect).
>
> The function to focus on is dvect_as_ivect_hack() in dvect.cpp. The
> interesting bit is how a constructor is imported from another module.
> At the moment, the rest is cheating.
>
> The next incremental improvement would be to replace the
> PyObject_CallObject() by a lower level way of constructing the ivect
> object. I.e., I want to by-pass the Python layer and construct the
> PyObject *ivect not from a Python tuple, but directly from a
> vects::ivect object.
>
> One idea is to add a PyCObject to each module's __dict__ and import it
> in the other module the same way the constructor is currently
> imported.
> The PyCObject would contain a pointer to a C++ function that
> constructs, e.g., the PyObject *ivect directly from a vects::ivect.
>
> Does this idea make sense?
>
> What part of BPL is related to this idea? I.e., where should I start
> looking for such a function?
>
> Finally, is there hope that the resulting mechanism could be hidden in
> from_python/to_python templates that are instantiated by a call like:
>
> python::import_class_builder<vects::ivect> ivect_handle
> ("ivect", "ivect");
>
> Thanks!
> Ralf
>
>
>
>
>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk