%newgroup
-// typemaps for wxInputStream
-%typemap(in) wxInputStream* (wxPyInputStream* temp, bool created) {
+// Typemaps for wxInputStream
+//
+// We assume that input params taking a wxInputStream& will *not* take
+// ownership of the stream and so we manage it in the typemaps. On the other
+// hand, when a paramter expects a wxInputStream* then it does take ownership
+// (such as wxFSFile) and so the typemap will make a copy of the stream object
+// to give to it.
+
+%typemap(in) wxInputStream& (wxPyInputStream* temp, bool created) {
if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
$1 = temp->m_wxis;
- created = False;
+ created = false;
} else {
PyErr_Clear(); // clear the failure of the wxPyConvert above
- $1 = wxPyCBInputStream_create($input, False);
+ $1 = wxPyCBInputStream_create($input, false);
if ($1 == NULL) {
- PyErr_SetString(PyExc_TypeError, "Expected wxInputStream or Python file-like object.");
+ PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
SWIG_fail;
}
- created = True;
+ created = true;
}
}
-%typemap(freearg) wxInputStream* {
- if (created$argnum)
- delete $1;
-}
+%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; }
-%typemap(in) wxInputStream& = wxInputStream*;
-%typemap(freearg) wxInputStream& = wxInputStream*;
+%typemap(in) wxInputStream* (wxPyInputStream* temp) {
+ if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) {
+ $1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis);
+ } else {
+ PyErr_Clear(); // clear the failure of the wxPyConvert above
+ $1 = wxPyCBInputStream_create($input, true);
+ if ($1 == NULL) {
+ PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object.");
+ SWIG_fail;
+ }
+ }
+}
+
%typemap(out) wxInputStream* {
if ($1) {
_ptr = new wxPyInputStream($1);
}
- $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), True);
+ $result = wxPyConstructObject(_ptr, wxT("wxPyInputStream"), $owner);
}
};
-
-%name(InputStream) class wxPyInputStream {
+%rename(InputStream) wxPyInputStream;
+class wxPyInputStream
+{
public:
%extend {
wxPyInputStream(PyObject* p) {
return NULL;
}
}
-
+ ~wxPyInputStream();
+
void close();
void flush();
bool eof();