don't initialize m_str twice in wxCharBuffer ctor

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16624 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-08-20 15:07:24 +00:00
parent 63bd679bc0
commit c12ef8a2e8

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Name: buffer.h // Name: wx/buffer.h
// Purpose: auto buffer classes: buffers which automatically free memory // Purpose: auto buffer classes: buffers which automatically free memory
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
@@ -27,44 +27,44 @@ class wxCharBuffer
{ {
public: public:
wxCharBuffer(const char *str) wxCharBuffer(const char *str)
: m_str(NULL) : m_str(str ? strdup(str) : NULL)
{ {
wxASSERT_MSG( str, wxT("NULL string in wxCharBuffer") ); wxASSERT_MSG( str, wxT("NULL string in wxCharBuffer") );
m_str = str ? strdup(str) : (char *)NULL;
} }
wxCharBuffer(size_t len) wxCharBuffer(size_t len)
: m_str(NULL) : m_str((char *)malloc((len + 1)*sizeof(char)))
{ {
m_str = (char *)malloc(len+1);
m_str[len] = '\0'; m_str[len] = '\0';
} }
// no need to check for NULL, free() does it // no need to check for NULL, free() does it
~wxCharBuffer() { free(m_str); } ~wxCharBuffer() { free(m_str); }
wxCharBuffer(const wxCharBuffer& src) wxCharBuffer(const wxCharBuffer& src)
: m_str(src.m_str) : m_str(src.m_str)
{ {
// no reference count yet... // no reference count yet...
((wxCharBuffer*)&src)->m_str = (char *)NULL; ((wxCharBuffer*)&src)->m_str = (char *)NULL;
} }
wxCharBuffer& operator=(const wxCharBuffer& src) wxCharBuffer& operator=(const wxCharBuffer& src)
{ {
m_str = src.m_str; m_str = src.m_str;
// no reference count yet... // no reference count yet...
((wxCharBuffer*)&src)->m_str = (char *)NULL; ((wxCharBuffer*)&src)->m_str = (char *)NULL;
return *this; return *this;
} }
const char *data() const { return m_str; } const char *data() const { return m_str; }
operator const char *() const { return m_str; } operator const char *() const { return m_str; }
char operator[](size_t n) const { return m_str[n]; } char operator[](size_t n) const { return m_str[n]; }
private: private:
char *m_str; char *m_str;
}; };
#if wxUSE_WCHAR_T #if wxUSE_WCHAR_T
class wxWCharBuffer class wxWCharBuffer
{ {
public: public:
@@ -85,37 +85,37 @@ public:
} }
} }
wxWCharBuffer(size_t len) wxWCharBuffer(size_t len)
: m_wcs((wchar_t *)NULL) : m_wcs((wchar_t *)malloc((len + 1)*sizeof(wchar_t)))
{ {
m_wcs = (wchar_t *)malloc((len+1)*sizeof(wchar_t));
m_wcs[len] = L'\0'; m_wcs[len] = L'\0';
} }
// no need to check for NULL, free() does it // no need to check for NULL, free() does it
~wxWCharBuffer() { free(m_wcs); } ~wxWCharBuffer() { free(m_wcs); }
wxWCharBuffer(const wxWCharBuffer& src) wxWCharBuffer(const wxWCharBuffer& src)
: m_wcs(src.m_wcs) : m_wcs(src.m_wcs)
{ {
// no reference count yet... // no reference count yet...
((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL; ((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL;
} }
wxWCharBuffer& operator=(const wxWCharBuffer& src) wxWCharBuffer& operator=(const wxWCharBuffer& src)
{ {
m_wcs = src.m_wcs; m_wcs = src.m_wcs;
// no reference count yet... // no reference count yet...
((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL; ((wxWCharBuffer*)&src)->m_wcs = (wchar_t *)NULL;
return *this; return *this;
} }
const wchar_t *data() const { return m_wcs; } const wchar_t *data() const { return m_wcs; }
operator const wchar_t *() const { return m_wcs; } operator const wchar_t *() const { return m_wcs; }
wchar_t operator[](size_t n) const { return m_wcs[n]; } wchar_t operator[](size_t n) const { return m_wcs[n]; }
private: private:
wchar_t *m_wcs; wchar_t *m_wcs;
}; };
#endif
#endif // wxUSE_WCHAR_T
#if wxUSE_UNICODE #if wxUSE_UNICODE
#define wxMB2WXbuf wxWCharBuffer #define wxMB2WXbuf wxWCharBuffer
@@ -129,8 +129,6 @@ private:
#define wxWX2WCbuf wxWCharBuffer #define wxWX2WCbuf wxWCharBuffer
#endif // Unicode/ANSI #endif // Unicode/ANSI
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// A class for holding growable data buffers (not necessarily strings) // A class for holding growable data buffers (not necessarily strings)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -139,13 +137,9 @@ class wxMemoryBuffer
{ {
public: public:
enum { BLOCK_SIZE = 1024 }; enum { BLOCK_SIZE = 1024 };
wxMemoryBuffer(size_t size=wxMemoryBuffer::BLOCK_SIZE) wxMemoryBuffer(size_t size = wxMemoryBuffer::BLOCK_SIZE)
: m_data(NULL), m_size(0), m_len(0) : m_data(malloc(size)), m_size(size), m_len(0)
{ {
wxASSERT(size > 0);
m_data = malloc(size);
wxASSERT(m_data != NULL);
m_size = size;
} }
~wxMemoryBuffer() { free(m_data); } ~wxMemoryBuffer() { free(m_data); }
@@ -209,7 +203,7 @@ public:
m_data = src.m_data; m_data = src.m_data;
m_size = src.m_size; m_size = src.m_size;
m_len = src.m_len; m_len = src.m_len;
// no reference count yet... // no reference count yet...
((wxMemoryBuffer*)&src)->m_data = NULL; ((wxMemoryBuffer*)&src)->m_data = NULL;
((wxMemoryBuffer*)&src)->m_size = 0; ((wxMemoryBuffer*)&src)->m_size = 0;
@@ -220,7 +214,6 @@ public:
protected: protected:
void ResizeIfNeeded(size_t newSize) void ResizeIfNeeded(size_t newSize)
{ {
if (newSize > m_size) if (newSize > m_size)
@@ -237,8 +230,6 @@ private:
size_t m_len; size_t m_len;
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// template class for any kind of data // template class for any kind of data
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------