X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f172cb8200f08ba1c6735a0d507991c877c0d68f..28ac82bf0444ba664a4740393fde133058c0e3d3:/src/common/stringimpl.cpp diff --git a/src/common/stringimpl.cpp b/src/common/stringimpl.cpp index 4c30917521..2a30e687df 100644 --- a/src/common/stringimpl.cpp +++ b/src/common/stringimpl.cpp @@ -77,9 +77,9 @@ const size_t wxStringImpl::npos = (size_t) -1; // FIXME-UTF8: get rid of this, have only one wxEmptyString #if wxUSE_UNICODE_UTF8 -extern const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyStringImpl = ""; +const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyStringImpl = ""; #endif -extern const wxChar WXDLLIMPEXP_BASE *wxEmptyString = _T(""); +const wxChar WXDLLIMPEXP_BASE *wxEmptyString = _T(""); #else @@ -95,10 +95,10 @@ static const struct // empty C style string: points to 'string data' byte of g_strEmpty #if wxUSE_UNICODE_UTF8 // FIXME-UTF8: get rid of this, have only one wxEmptyString -extern const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyStringImpl = &g_strEmpty.dummy; -extern const wxChar WXDLLIMPEXP_BASE *wxEmptyString = _T(""); +const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyStringImpl = &g_strEmpty.dummy; +const wxChar WXDLLIMPEXP_BASE *wxEmptyString = _T(""); #else -extern const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyString = &g_strEmpty.dummy; +const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyString = &g_strEmpty.dummy; #endif #endif @@ -111,19 +111,26 @@ extern const wxStringCharType WXDLLIMPEXP_BASE *wxEmptyString = &g_strEmpty.dumm // ---------------------------------------------------------------------------- // this small class is used to gather statistics for performance tuning + +// uncomment this to enable gathering of some statistics about wxString +// efficiency //#define WXSTRING_STATISTICS + #ifdef WXSTRING_STATISTICS class Averager { public: Averager(const wxStringCharType *sz) { m_sz = sz; m_nTotal = m_nCount = 0; } ~Averager() - { wxPrintf("wxString: average %s = %f\n", m_sz, ((float)m_nTotal)/m_nCount); } + { + wxPrintf("wxString %s: total = %lu, average = %f\n", + m_sz, m_nTotal, ((float)m_nTotal)/m_nCount); + } void Add(size_t n) { m_nTotal += n; m_nCount++; } private: - size_t m_nCount, m_nTotal; + unsigned long m_nCount, m_nTotal; const wxStringCharType *m_sz; } g_averageLength("allocation size"), g_averageSummandLength("summand length"), @@ -180,7 +187,7 @@ wxStringImpl::wxStringImpl(const_iterator first, const_iterator last) { if ( last >= first ) { - InitWith(first, 0, last - first); + InitWith(first.GetPtr(), 0, last - first); } else { @@ -207,8 +214,8 @@ bool wxStringImpl::AllocBuffer(size_t nLen) wxASSERT( nLen > 0 ); // make sure that we don't overflow - wxASSERT( nLen < (INT_MAX / sizeof(wxStringCharType)) - - (sizeof(wxStringData) + EXTRA_ALLOC + 1) ); + wxCHECK( nLen < (INT_MAX / sizeof(wxStringCharType)) - + (sizeof(wxStringData) + EXTRA_ALLOC + 1), false ); STATISTICS_ADD(Length, nLen); @@ -335,6 +342,8 @@ bool wxStringImpl::Alloc(size_t nLen) wxStringData *pData = GetStringData(); if ( pData->nAllocLength <= nLen ) { if ( pData->IsEmpty() ) { + STATISTICS_ADD(Length, nLen); + nLen += EXTRA_ALLOC; pData = (wxStringData *)