// Copyright (C) 2013 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_SERIALIZE_PiCKLE_H__ #define DLIB_SERIALIZE_PiCKLE_H__ #include <dlib/serialize.h> #include <boost/python.hpp> #include <sstream> template <typename T> struct serialize_pickle : boost::python::pickle_suite { static boost::python::tuple getstate( const T& item ) { using namespace dlib; std::ostringstream sout; serialize(item, sout); return boost::python::make_tuple(sout.str()); } static void setstate( T& item, boost::python::tuple state ) { using namespace dlib; using namespace boost::python; if (len(state) != 1) { PyErr_SetObject(PyExc_ValueError, ("expected 1-item tuple in call to __setstate__; got %s" % state).ptr() ); throw_error_already_set(); } str data = extract<str>(state[0]); std::string temp(extract<const char*>(data), len(data)); std::istringstream sin(temp); deserialize(item, sin); } }; #endif // DLIB_SERIALIZE_PiCKLE_H__