[C++-sig] container suite feedback & ideas

Ralf W. Grosse-Kunstleve rwgk at yahoo.com
Sat Oct 25 16:06:20 CEST 2003


Hi Raoul,

Using your documentation I've had no problems wrapping three custom
linear array types with your container suite. Just a couple of minor
remarks:

static boost::python::indexing::IndexStyle const index_style
                                ^

typedef std::map<std::string, int> Container;
                                   ^

typedef indexing::map_algorithms<simple_map_traits> Algorithms;
                                                    ^

I believe according to the boost naming conventions these identifiers
must be all lower case. But I am not really an authority in this
matter. David?

> #include "algo_selector.hpp"
> #include "visitor.hpp"

Should probably be #include <boost/...>. It wasn't clear to me
what I had to include. Eventually just including

#include <boost/python/suite/indexing/container_suite.hpp>

worked for my purposes. Is this what I should be doing?
Should this be added to <boost/python.hpp>?

There are two important features I am wondering about:

1. Just doing this

   class_<my_container>("my_container")
     .def(indexing::container_suite<my_container, my_algorithms>())
   ;

   doesn't enable me to initialize the instances with Python
   lists or tuples. Have you thought about this already?
   My first idea would be to define custom rvalue converters from
   Python sequences to the wrapped container type
   (http://www.boost.org/libs/python/doc/v2/faq.html#question2).
   Then one could pass a Python sequence anywhere the wrapped container
   is used as a const& or by-value argument. Simply define Python
   bindings for the C++ copy constructor to enable initialization with
   Python sequences.

2. Pickling of the wrapped types. This is a big issue but I find
   it absolutely essential. I have a fairly general solution
   that I'd be happy to share and extend if there is an interest.
   If you are curious, it is a three-layer system:
   The low-level serialization code for built-in types is here:
    
http://cvs.sourceforge.net/viewcvs.py/cctbx/scitbx/include/scitbx/serialization/
   This is designed to maximize portability but is also very fast.
   The second layer is here:
    
http://cvs.sourceforge.net/viewcvs.py/cctbx/scitbx/include/scitbx/boost_python/
   pickle_single_buffered.h and pickle_double_buffered.h.
   A top layer for a particular array type is here:
    
http://cvs.sourceforge.net/viewcvs.py/cctbx/scitbx/include/scitbx/array_family/boost_python/
   flex_pickle_single_buffered.h, flex_pickle_double_buffered.h.
   The system also works for user-defined types (the user has
   to supply some code).
   Adapting this system for the container suite would probably
   require significant changes only to the top layer.

Ralf


__________________________________
Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com




More information about the Cplusplus-sig mailing list