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 + -
显示快捷键?