]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_streams.i
reSWIGged
[wxWidgets.git] / wxPython / src / _streams.i
index 5d89908a078659f2790135033e60a066b2ebb222..db75ebb98de77ecfa1370475ba12eff4d9438234 100644 (file)
 %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;
         PyErr_Clear();  // clear the failure of the wxPyConvert above
         $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;
     }
 }
-%typemap(freearg) wxInputStream* {
-    if (created$argnum)
-        delete $1;
-}
+%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; }
+
 
+%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(in) wxInputStream&       = wxInputStream*;
-%typemap(freearg) wxInputStream&  = wxInputStream*;
 
 
 %typemap(out) wxInputStream* {