]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/buffer.h
Don't duplicate event sending code in wxGTK wxListBox.
[wxWidgets.git] / include / wx / buffer.h
index d9640e25c040ea98758d3a5dce5d5d154a7742f6..4c5c27eede9c6d9447b5d833644a9b5ee52e31c0 100644 (file)
@@ -95,7 +95,7 @@ public:
     // Creates "owned" buffer, i.e. takes over ownership of 'str' and frees it
     // in dtor (if ref.count reaches 0).
     static
     // Creates "owned" buffer, i.e. takes over ownership of 'str' and frees it
     // in dtor (if ref.count reaches 0).
     static
-    const wxScopedCharTypeBuffer CreateOwned(const CharType *str,
+    const wxScopedCharTypeBuffer CreateOwned(CharType *str,
                                              size_t len = wxNO_LEN )
     {
         if ( len == wxNO_LEN )
                                              size_t len = wxNO_LEN )
     {
         if ( len == wxNO_LEN )
@@ -103,7 +103,7 @@ public:
 
         wxScopedCharTypeBuffer buf;
         if ( str )
 
         wxScopedCharTypeBuffer buf;
         if ( str )
-            buf.m_data = new Data(StrCopy(str, len), len);
+            buf.m_data = new Data(str, len);
         return buf;
     }
 
         return buf;
     }
 
@@ -468,6 +468,21 @@ private:
             delete this;
     }
 
             delete this;
     }
 
+    void *release()
+    {
+        if ( m_data == NULL )
+            return NULL;
+
+        wxASSERT_MSG( m_ref == 1, "can't release shared buffer" );
+
+        void *p = m_data;
+        m_data = NULL;
+        m_len =
+        m_size = 0;
+
+        return p;
+    }
+
 
     // the buffer containing the data
     void  *m_data;
 
     // the buffer containing the data
     void  *m_data;
@@ -570,6 +585,13 @@ public:
 
     operator const char *() const { return (const char*)GetData(); }
 
 
     operator const char *() const { return (const char*)GetData(); }
 
+    // gives up ownership of data, returns the pointer; after this call,
+    // data isn't freed by the buffer and its content is resent to empty
+    void *release()
+    {
+        return m_bufdata->release();
+    }
+
 private:
     wxMemoryBufferData*  m_bufdata;
 };
 private:
     wxMemoryBufferData*  m_bufdata;
 };