X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9b386ecadb0f98fb92cfaad786dcc26915a070bd..d5dc103fd4afb197f48d6a87f67f6b82dd7f56fe:/include/wx/buffer.h diff --git a/include/wx/buffer.h b/include/wx/buffer.h index 1396ef5d26..f17aa0c1ab 100644 --- a/include/wx/buffer.h +++ b/include/wx/buffer.h @@ -22,10 +22,10 @@ // ---------------------------------------------------------------------------- #define DEFINE_BUFFER(classname, chartype, strdupfunc) \ -class classname \ +class WXDLLIMPEXP_BASE classname \ { \ public: \ - classname(const chartype *str) \ + classname(const chartype *str = NULL) \ : m_str(str ? strdupfunc(str) : NULL) \ { \ } \ @@ -64,6 +64,12 @@ public: \ return p; \ } \ \ + void reset() \ + { \ + free(m_str); \ + m_str = NULL; \ + } \ + \ classname(const classname& src) \ : m_str(src.release()) \ { \ @@ -84,6 +90,18 @@ public: \ return *this; \ } \ \ + bool extend(size_t len) \ + { \ + chartype * \ + str = (chartype *)realloc(m_str, (len + 1)*sizeof(chartype)); \ + if ( !str ) \ + return false; \ + \ + m_str = str; \ + \ + return true; \ + } \ + \ chartype *data() { return m_str; } \ const chartype *data() const { return m_str; } \ operator const chartype *() const { return m_str; } \ @@ -104,11 +122,15 @@ DEFINE_BUFFER(wxWCharBuffer, wchar_t, wxStrdupW); #undef DEFINE_BUFFER #if wxUSE_UNICODE + typedef wxWCharBuffer wxWxCharBuffer; + #define wxMB2WXbuf wxWCharBuffer #define wxWX2MBbuf wxCharBuffer #define wxWC2WXbuf wxChar* #define wxWX2WCbuf wxChar* #else // ANSI + typedef wxCharBuffer wxWxCharBuffer; + #define wxMB2WXbuf wxChar* #define wxWX2MBbuf wxChar* #define wxWC2WXbuf wxCharBuffer @@ -124,13 +146,13 @@ class wxMemoryBufferData { public: // the initial size and also the size added by ResizeIfNeeded() - enum { BLOCK_SIZE = 1024 }; + enum { DefBufSize = 1024 }; friend class wxMemoryBuffer; // everyting is private as it can only be used by wxMemoryBuffer private: - wxMemoryBufferData(size_t size = wxMemoryBufferData::BLOCK_SIZE) + wxMemoryBufferData(size_t size = wxMemoryBufferData::DefBufSize) : m_data(size ? malloc(size) : NULL), m_size(size), m_len(0), m_ref(0) { } @@ -142,13 +164,13 @@ private: if (newSize > m_size) { void *dataOld = m_data; - m_data = realloc(m_data, newSize + wxMemoryBufferData::BLOCK_SIZE); + m_data = realloc(m_data, newSize + wxMemoryBufferData::DefBufSize); if ( !m_data ) { free(dataOld); } - m_size = newSize + wxMemoryBufferData::BLOCK_SIZE; + m_size = newSize + wxMemoryBufferData::DefBufSize; } } @@ -181,7 +203,7 @@ class wxMemoryBuffer { public: // ctor and dtor - wxMemoryBuffer(size_t size = wxMemoryBufferData::BLOCK_SIZE) + wxMemoryBuffer(size_t size = wxMemoryBufferData::DefBufSize) { m_bufdata = new wxMemoryBufferData(size); m_bufdata->IncRef(); @@ -251,7 +273,7 @@ public: m_bufdata->m_len += 1; } - void AppendData(void* data, size_t len) + void AppendData(const void *data, size_t len) { memcpy(GetAppendBuf(len), data, len); UngetAppendBuf(len);