pickle_support.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 79 行
CPP
79 行
// (C) Copyright R.W. Grosse-Kunstleve 2002.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#include <boost/python/make_function.hpp>#include <boost/python/object/class.hpp>#include <boost/python/tuple.hpp>#include <boost/python/list.hpp>#include <boost/python/dict.hpp>#include <boost/python/str.hpp>namespace boost { namespace python {namespace { tuple instance_reduce(object instance_obj) { list result; object instance_class(instance_obj.attr("__class__")); result.append(instance_class); object none; if (!getattr(instance_obj, "__safe_for_unpickling__", none)) { str type_name(getattr(instance_class, "__name__")); str module_name(getattr(instance_class, "__module__", object(""))); if (module_name) module_name += "."; PyErr_SetObject( PyExc_RuntimeError, ( "Pickling of \"%s\" instances is not enabled" " (http://www.boost.org/libs/python/doc/v2/pickle.html)" % (module_name+type_name)).ptr() ); throw_error_already_set(); } object getinitargs = getattr(instance_obj, "__getinitargs__", none); tuple initargs; if (getinitargs.ptr() != none.ptr()) { initargs = tuple(getinitargs()); } result.append(initargs); object getstate = getattr(instance_obj, "__getstate__", none); object instance_dict = getattr(instance_obj, "__dict__", none); long len_instance_dict = 0; if (instance_dict.ptr() != none.ptr()) { len_instance_dict = len(instance_dict); } if (getstate.ptr() != none.ptr()) { if (len_instance_dict > 0) { object getstate_manages_dict = getattr( instance_obj, "__getstate_manages_dict__", none); if (getstate_manages_dict.ptr() == none.ptr()) { PyErr_SetString(PyExc_RuntimeError, "Incomplete pickle support" " (__getstate_manages_dict__ not set)"); throw_error_already_set(); } } result.append(getstate()); } else if (len_instance_dict > 0) { result.append(instance_dict); } return tuple(result); }} // namespaceobject const& make_instance_reduce_function(){ static object result(&instance_reduce); return result;}}} // namespace boost::python
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?