8#ifndef FMTPYTHONPICKLE_Hm_included
9#define FMTPYTHONPICKLE_Hm_included
10 #include <boost/serialization/serialization.hpp>
11 #include <boost/serialization/export.hpp>
12 #include <boost/iostreams/stream.hpp>
13 #include <boost/iostreams/filtering_streambuf.hpp>
14 #include <boost/iostreams/filter/zlib.hpp>
15 #include <boost/iostreams/copy.hpp>
22#if defined FMTWITHPYTHON
24 #include <boost/python.hpp>
35 class FMT_pickle_suite :
public boost::python::pickle_suite
43 static const char* getName()
45 return typeid(T).name();
54 static boost::python::tuple getinitargs(
const T&)
56 return(boost::python::make_tuple());
64 static boost::python::object getstate(
const T& target)
68 boost::archive::binary_oarchive oa(os);
69 oa << boost::serialization::make_nvp(getName(), target);
71 std::stringstream compressed;
72 boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
73 out.push(boost::iostreams::zlib_compressor());
75 boost::iostreams::copy(out, compressed);
76 return boost::python::make_tuple(compressed.str());
84 static void setstate(T& target, boost::python::tuple state)
86 boost::python::extract<std::string> input(state[0]);
87 std::stringstream compressed(input);
88 std::stringstream decompressed;
89 boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
90 in.push(boost::iostreams::zlib_decompressor());
92 boost::iostreams::copy(in, decompressed);
94 boost::archive::binary_iarchive ia(decompressed);
95 ia >> boost::serialization::make_nvp(getName(), target);
Definition: PYdefinitions.h:14