5 #ifndef COAL_PYTHON_PICKLE_H 
    6 #define COAL_PYTHON_PICKLE_H 
    8 #include <boost/python.hpp> 
   11 #include <boost/archive/text_oarchive.hpp> 
   12 #include <boost/archive/text_iarchive.hpp> 
   21     return boost::python::make_tuple();
 
   24   static boost::python::tuple 
getstate(
const T& obj) {
 
   26     boost::archive::text_oarchive oa(ss);
 
   32   static void setstate(T& obj, boost::python::tuple tup) {
 
   33     if (boost::python::len(tup) == 0 || boost::python::len(tup) > 1) {
 
   35           "Pickle was not able to reconstruct the object from the loaded " 
   37           "The pickle data structure contains too many elements.");
 
   40     boost::python::object py_obj = tup[0];
 
   41     boost::python::extract<std::string> obj_as_string(py_obj.ptr());
 
   42     if (obj_as_string.check()) {
 
   43       const std::string 
str = obj_as_string;
 
   44       std::istringstream is(
str);
 
   45       boost::archive::text_iarchive ia(is, boost::archive::no_codecvt);
 
   49           "Pickle was not able to reconstruct the model from the loaded data.\n" 
   50           "The entry is not a string.");
 
   57 #endif  // ifndef COAL_PYTHON_PICKLE_H