deprecated wxString::GetWriteBuf() and friends in favour of wxStringBuffer

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44637 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-03-07 20:01:52 +00:00
parent 24ad931818
commit d8a4b666cf
3 changed files with 59 additions and 25 deletions

View File

@@ -942,7 +942,7 @@ public:
// string += string // string += string
wxString& operator<<(const wxString& s) wxString& operator<<(const wxString& s)
{ {
#if !wxUSE_STL #if WXWIN_COMPATIBILITY_2_8 && !wxUSE_STL
wxASSERT_MSG( s.GetStringData()->IsValid(), wxASSERT_MSG( s.GetStringData()->IsValid(),
_T("did you forget to call UngetWriteBuf()?") ); _T("did you forget to call UngetWriteBuf()?") );
#endif #endif
@@ -1175,14 +1175,16 @@ public:
// minimize the string's memory // minimize the string's memory
// only works if the data of this string is not shared // only works if the data of this string is not shared
bool Shrink(); bool Shrink();
#if !wxUSE_STL #if WXWIN_COMPATIBILITY_2_8 && !wxUSE_STL
// These are deprecated, use wxStringBuffer or wxStringBufferLength instead
//
// get writable buffer of at least nLen bytes. Unget() *must* be called // get writable buffer of at least nLen bytes. Unget() *must* be called
// a.s.a.p. to put string back in a reasonable state! // a.s.a.p. to put string back in a reasonable state!
wxChar *GetWriteBuf(size_t nLen); wxDEPRECATED( wxChar *GetWriteBuf(size_t nLen) );
// call this immediately after GetWriteBuf() has been used // call this immediately after GetWriteBuf() has been used
void UngetWriteBuf(); wxDEPRECATED( void UngetWriteBuf() );
void UngetWriteBuf(size_t nLen); wxDEPRECATED( void UngetWriteBuf(size_t nLen) );
#endif #endif // WXWIN_COMPATIBILITY_2_8 && !wxUSE_STL
// wxWidgets version 1 compatibility functions // wxWidgets version 1 compatibility functions
@@ -1371,6 +1373,17 @@ public:
// string += char // string += char
wxString& operator+=(wxChar ch) wxString& operator+=(wxChar ch)
{ return (wxString&)wxStringBase::operator+=(ch); } { return (wxString&)wxStringBase::operator+=(ch); }
private:
#if !wxUSE_STL
// helpers for wxStringBuffer and wxStringBufferLength
wxChar *DoGetWriteBuf(size_t nLen);
void DoUngetWriteBuf();
void DoUngetWriteBuf(size_t nLen);
friend class WXDLLIMPEXP_BASE wxStringBuffer;
friend class WXDLLIMPEXP_BASE wxStringBufferLength;
#endif
}; };
// notice that even though for many compilers the friend declarations above are // notice that even though for many compilers the friend declarations above are
@@ -1459,9 +1472,9 @@ class WXDLLIMPEXP_BASE wxStringBuffer
public: public:
wxStringBuffer(wxString& str, size_t lenWanted = 1024) wxStringBuffer(wxString& str, size_t lenWanted = 1024)
: m_str(str), m_buf(NULL) : m_str(str), m_buf(NULL)
{ m_buf = m_str.GetWriteBuf(lenWanted); } { m_buf = m_str.DoGetWriteBuf(lenWanted); }
~wxStringBuffer() { m_str.UngetWriteBuf(); } ~wxStringBuffer() { m_str.DoUngetWriteBuf(); }
operator wxChar*() const { return m_buf; } operator wxChar*() const { return m_buf; }
@@ -1478,14 +1491,14 @@ public:
wxStringBufferLength(wxString& str, size_t lenWanted = 1024) wxStringBufferLength(wxString& str, size_t lenWanted = 1024)
: m_str(str), m_buf(NULL), m_len(0), m_lenSet(false) : m_str(str), m_buf(NULL), m_len(0), m_lenSet(false)
{ {
m_buf = m_str.GetWriteBuf(lenWanted); m_buf = m_str.DoGetWriteBuf(lenWanted);
wxASSERT(m_buf != NULL); wxASSERT(m_buf != NULL);
} }
~wxStringBufferLength() ~wxStringBufferLength()
{ {
wxASSERT(m_lenSet); wxASSERT(m_lenSet);
m_str.UngetWriteBuf(m_len); m_str.DoUngetWriteBuf(m_len);
} }
operator wxChar*() const { return m_buf; } operator wxChar*() const { return m_buf; }

View File

@@ -1061,7 +1061,7 @@ bool wxString::Shrink()
#if !wxUSE_STL #if !wxUSE_STL
// get the pointer to writable buffer of (at least) nLen bytes // get the pointer to writable buffer of (at least) nLen bytes
wxChar *wxString::GetWriteBuf(size_t nLen) wxChar *wxString::DoGetWriteBuf(size_t nLen)
{ {
if ( !AllocBeforeWrite(nLen) ) { if ( !AllocBeforeWrite(nLen) ) {
// allocation failure handled by caller // allocation failure handled by caller
@@ -1075,12 +1075,12 @@ wxChar *wxString::GetWriteBuf(size_t nLen)
} }
// put string back in a reasonable state after GetWriteBuf // put string back in a reasonable state after GetWriteBuf
void wxString::UngetWriteBuf() void wxString::DoUngetWriteBuf()
{ {
UngetWriteBuf(wxStrlen(m_pchData)); DoUngetWriteBuf(wxStrlen(m_pchData));
} }
void wxString::UngetWriteBuf(size_t nLen) void wxString::DoUngetWriteBuf(size_t nLen)
{ {
wxStringData * const pData = GetStringData(); wxStringData * const pData = GetStringData();
@@ -1091,8 +1091,28 @@ void wxString::UngetWriteBuf(size_t nLen)
pData->nDataLength = nLen; pData->nDataLength = nLen;
pData->Validate(true); pData->Validate(true);
} }
// deprecated compatibility code:
#if WXWIN_COMPATIBILITY_2_8
wxChar *wxString::GetWriteBuf(size_t nLen)
{
return DoGetWriteBuf(nLen);
}
void wxString::UngetWriteBuf()
{
DoUngetWriteBuf();
}
void wxString::UngetWriteBuf(size_t nLen)
{
DoUngetWriteBuf(nLen);
}
#endif // WXWIN_COMPATIBILITY_2_8
#endif // !wxUSE_STL #endif // !wxUSE_STL
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// data access // data access
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@@ -635,18 +635,19 @@ void StringTestCase::WriteBuf()
CPPUNIT_ASSERT_EQUAL(_T('o'), s[2]); CPPUNIT_ASSERT_EQUAL(_T('o'), s[2]);
CPPUNIT_ASSERT_EQUAL((size_t)3, s.length()); CPPUNIT_ASSERT_EQUAL((size_t)3, s.length());
{ {
wxChar *p = s.GetWriteBuf(10); wxStringBufferLength buf(s, 10);
wxStrcpy(p, _T("barrbaz")); wxStrcpy(buf, _T("barrbaz"));
s.UngetWriteBuf(4); buf.SetLength(4);
CPPUNIT_ASSERT_EQUAL(_T('b'), s[0u]);
CPPUNIT_ASSERT_EQUAL(_T('a'), s[1]);
CPPUNIT_ASSERT_EQUAL(_T('r'), s[2]);
CPPUNIT_ASSERT_EQUAL(_T('r'), s[3]);
CPPUNIT_ASSERT_EQUAL((size_t)4, s.length());
CPPUNIT_ASSERT_EQUAL( 0, wxStrcmp(_T("barr"), s) );
} }
CPPUNIT_ASSERT_EQUAL(_T('b'), s[0u]);
CPPUNIT_ASSERT_EQUAL(_T('a'), s[1]);
CPPUNIT_ASSERT_EQUAL(_T('r'), s[2]);
CPPUNIT_ASSERT_EQUAL(_T('r'), s[3]);
CPPUNIT_ASSERT_EQUAL((size_t)4, s.length());
CPPUNIT_ASSERT_EQUAL( 0, wxStrcmp(_T("barr"), s) );
} }