#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
// ---------------------------------------------------------------------------
// buffer were large enough (newer standards such as Unix98)
if ( len < 0 )
{
+#if wxUSE_WXVSNPRINTF
+ // we know that our own implementation of wxVsnprintf() returns -1
+ // only for a format error - thus there's something wrong with
+ // the user's format string
+ return -1;
+#else // assume that system version only returns error if not enough space
// still not enough, as we don't know how much we need, double the
// current size of the buffer
size *= 2;
+#endif // wxUSE_WXVSNPRINTF/!wxUSE_WXVSNPRINTF
}
else if ( len >= size )
{
+#if wxUSE_WXVSNPRINTF
+ // we know that our own implementation of wxVsnprintf() returns
+ // size+1 when there's not enough space but that's not the size
+ // of the required buffer!
+ size *= 2; // so we just double the current size of the buffer
+#else
// some vsnprintf() implementations NUL-terminate the buffer and
// some don't in len == size case, to be safe always add 1
size = len + 1;
+#endif
}
else // ok, there was enough space
{
{
m_nSize =
m_nCount = 0;
- m_pItems = (wxChar **) NULL;
+ m_pItems = (const wxChar **) NULL;
m_autoSort = autoSort;
}
m_nSize = ARRAY_DEFAULT_INITIAL_SIZE;
if (m_nSize < nIncrement)
m_nSize = nIncrement;
- m_pItems = new wxChar *[m_nSize];
+ m_pItems = new const wxChar *[m_nSize];
}
else {
// otherwise when it's called for the first time, nIncrement would be 0
if ( nIncrement < ndefIncrement )
nIncrement = ndefIncrement;
m_nSize += nIncrement;
- wxChar **pNew = new wxChar *[m_nSize];
+ const wxChar **pNew = new const wxChar *[m_nSize];
// copy data to new location
memcpy(pNew, m_pItems, m_nCount*sizeof(wxChar *));
{
// only if old buffer was not big enough
if ( nSize > m_nSize ) {
- wxChar **pNew = new wxChar *[nSize];
+ const wxChar **pNew = new const wxChar *[nSize];
if ( !pNew )
return;
// only do it if we have some memory to free
if( m_nCount < m_nSize ) {
// allocates exactly as much memory as we need
- wxChar **pNew = new wxChar *[m_nCount];
+ const wxChar **pNew = new const wxChar *[m_nCount];
// copy data to new location
memcpy(pNew, m_pItems, m_nCount*sizeof(wxChar *));
}
}
-#if WXWIN_COMPATIBILITY_2_4
-
-// return a wxString[] as required for some control ctors.
-wxString* wxArrayString::GetStringArray() const
-{
- wxString *array = 0;
-
- if( m_nCount > 0 )
- {
- array = new wxString[m_nCount];
- for( size_t i = 0; i < m_nCount; i++ )
- array[i] = m_pItems[i];
- }
-
- return array;
-}
-
-void wxArrayString::Remove(size_t nIndex, size_t nRemove)
-{
- RemoveAt(nIndex, nRemove);
-}
-
-#endif // WXWIN_COMPATIBILITY_2_4
-
// searches the array for an item (forward or backwards)
int wxArrayString::Index(const wxChar *sz, bool bCase, bool bFromEnd) const
{
str.GetStringData()->Lock();
// just append
- m_pItems[m_nCount + i] = (wxChar *)str.c_str(); // const_cast
+ m_pItems[m_nCount + i] = str.c_str();
}
size_t ret = m_nCount;
m_nCount += nInsert;
for (size_t i = 0; i < nInsert; i++)
{
str.GetStringData()->Lock();
- m_pItems[nIndex + i] = (wxChar *)str.c_str();
+ m_pItems[nIndex + i] = str.c_str();
}
m_nCount += nInsert;
}
wxString s;
while ( m_nCount < count )
- m_pItems[m_nCount++] = (wxChar *)s.c_str();
+ m_pItems[m_nCount++] = s.c_str();
}
// removes item from array (by index)