// 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 )
wxScopedCharTypeBuffer buf;
if ( str )
- buf.m_data = new Data(StrCopy(str, len), len);
+ buf.m_data = new Data(str, len);
return buf;
}
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;
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;
};