/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/python_pickle.i
56 строк
1 KB
William S Fulton
Py_DecRef Py_IncRef for examples and html docs
24 мар 2024, 21:12
24 мар 2024, 21:12
5b710e3
Код
Авторство
О чём код?
%module python_pickle %include <std_string.i> %extend PickleMe { #if 0 // Note: %pythoncode can't be used with -builtin %pythoncode %{ def __reduce__(self): print "In Python __reduce__" return (type(self), (self.msg, )) %} #else // Equivalent to Python code above PyObject *__reduce__() { if (trace) std::cout << "In C++ __reduce__" << std::endl; PyObject *args = PyTuple_New(1); PyTuple_SetItem(args, 0, SWIG_From_std_string(self->msg)); swig_type_info *ty = SWIGTYPE_p_PickleMe; SwigPyClientData *data = (SwigPyClientData *)ty->clientdata; #if defined(SWIGPYTHON_BUILTIN) PyObject *callable = (PyObject *)data->pytype; #else PyObject *callable = data->klass; #endif Py_IncRef(callable); PyObject *ret = PyTuple_New(2); PyTuple_SetItem(ret, 0, callable); PyTuple_SetItem(ret, 1, args); return ret; } #endif } %inline %{ #include <iostream> bool trace = false; struct PickleMe { std::string msg; PickleMe(const std::string& msg) : msg(msg) { if (trace) std::cout << "In C++ constructor " << " [" << msg << "]" << std::endl; } }; struct NotForPickling { std::string msg; NotForPickling(const std::string& msg) : msg(msg) {} }; %}