memcpy(m_pchData, pData->data(), nLen*sizeof(char));
}
- wxASSERT( !pData->IsShared() ); // we must be the only owner
+ wxASSERT( !GetStringData()->IsShared() ); // we must be the only owner
}
// must be called before replacing contents of this string
void wxString::Shrink()
{
wxStringData *pData = GetStringData();
- void *p = realloc(pData, sizeof(wxStringData) +
- (pData->nDataLength + 1)*sizeof(char));
+
+ // this variable is unused in release build, so avoid the compiler warning by
+ // just not declaring it
+#ifdef __WXDEBUG__
+ void *p =
+#endif
+ realloc(pData, sizeof(wxStringData) + (pData->nDataLength + 1)*sizeof(char));
+
wxASSERT( p != NULL ); // can't free memory?
wxASSERT( p == pData ); // we're decrementing the size - block shouldn't move!
}
// copy ctor
wxArrayString::wxArrayString(const wxArrayString& src)
{
+ m_nSize =
+ m_nCount = 0;
m_pItems = NULL;
*this = src;
// assignment operator
wxArrayString& wxArrayString::operator=(const wxArrayString& src)
{
- DELETEA(m_pItems);
+ if ( m_nSize > 0 )
+ Clear();
- m_nSize = 0;
if ( src.m_nCount > ARRAY_DEFAULT_INITIAL_SIZE )
Alloc(src.m_nCount);
for ( uint n = 0; n < src.m_nCount; n++ )
Add(src[n]);
+ if ( m_nCount != 0 )
+ memcpy(m_pItems, src.m_pItems, m_nCount*sizeof(char *));
+
return *this;
}
m_pItems = new char *[m_nSize];
}
else {
+ // otherwise when it's called for the first time, nIncrement would be 0
+ // and the array would never be expanded
+ wxASSERT( ARRAY_DEFAULT_INITIAL_SIZE != 0 );
+
// add 50% but not too much
- size_t nIncrement = m_nSize < ARRAY_DEFAULT_INITIAL_SIZE
+ size_t nIncrement = m_nSize < ARRAY_DEFAULT_INITIAL_SIZE
? ARRAY_DEFAULT_INITIAL_SIZE : m_nSize >> 1;
if ( nIncrement > ARRAY_MAXSIZE_INCREMENT )
nIncrement = ARRAY_MAXSIZE_INCREMENT;
memcpy(pNew, m_pItems, m_nCount*sizeof(char *));
// delete old memory (but do not release the strings!)
- DELETEA(m_pItems);
+ wxDELETEA(m_pItems);
m_pItems = pNew;
}
m_nSize =
m_nCount = 0;
- DELETEA(m_pItems);
- m_pItems = NULL;
+ wxDELETEA(m_pItems);
}
// dtor
{
Free();
- DELETEA(m_pItems);
+ wxDELETEA(m_pItems);
}
// pre-allocates memory (frees the previous data!)
// only if old buffer was not big enough
if ( nSize > m_nSize ) {
Free();
- DELETEA(m_pItems);
+ wxDELETEA(m_pItems);
m_pItems = new char *[nSize];
m_nSize = nSize;
}
// sort array elements using passed comparaison function
-void wxArrayString::Sort(bool bCase, bool bReverse)
+void wxArrayString::Sort(bool WXUNUSED(bCase), bool WXUNUSED(bReverse) )
{
//@@@@ TO DO
//qsort(m_pItems, m_nCount, sizeof(char *), fCmp);