mirror of https://github.com/swig/swig
57 lines
1.2 KiB
OpenEdge ABL
57 lines
1.2 KiB
OpenEdge ABL
%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) {}
|
|
};
|
|
%}
|