// string += string
wxString& operator<<(const wxString& s)
{
-#if !wxUSE_STL
+#if WXWIN_COMPATIBILITY_2_8 && !wxUSE_STL
wxASSERT_MSG( s.GetStringData()->IsValid(),
_T("did you forget to call UngetWriteBuf()?") );
#endif
// minimize the string's memory
// only works if the data of this string is not shared
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
// 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
- void UngetWriteBuf();
- void UngetWriteBuf(size_t nLen);
-#endif
+ wxDEPRECATED( void UngetWriteBuf() );
+ wxDEPRECATED( void UngetWriteBuf(size_t nLen) );
+#endif // WXWIN_COMPATIBILITY_2_8 && !wxUSE_STL
// wxWidgets version 1 compatibility functions
// string += char
wxString& operator+=(wxChar 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
public:
wxStringBuffer(wxString& str, size_t lenWanted = 1024)
: 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; }
wxStringBufferLength(wxString& str, size_t lenWanted = 1024)
: 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);
}
~wxStringBufferLength()
{
wxASSERT(m_lenSet);
- m_str.UngetWriteBuf(m_len);
+ m_str.DoUngetWriteBuf(m_len);
}
operator wxChar*() const { return m_buf; }
#if !wxUSE_STL
// 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) ) {
// allocation failure handled by caller
}
// 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();
pData->nDataLength = nLen;
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
+
// ---------------------------------------------------------------------------
// data access
// ---------------------------------------------------------------------------
CPPUNIT_ASSERT_EQUAL(_T('o'), s[2]);
CPPUNIT_ASSERT_EQUAL((size_t)3, s.length());
+
{
- wxChar *p = s.GetWriteBuf(10);
- wxStrcpy(p, _T("barrbaz"));
- s.UngetWriteBuf(4);
+ wxStringBufferLength buf(s, 10);
+ wxStrcpy(buf, _T("barrbaz"));
+ 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(_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( 0, wxStrcmp(_T("barr"), s) );
}