Index: src/libchcore/TString.cpp =================================================================== diff -u -N -r548382442cbf7bed7f744b279ce3f66b54992724 -r9545b48aadb1592a5bf22ac5a227b1666d7710c6 --- src/libchcore/TString.cpp (.../TString.cpp) (revision 548382442cbf7bed7f744b279ce3f66b54992724) +++ src/libchcore/TString.cpp (.../TString.cpp) (revision 9545b48aadb1592a5bf22ac5a227b1666d7710c6) @@ -119,7 +119,7 @@ using namespace details; -size_t TString::npos = (size_t)-1; +size_t TString::npos = std::numeric_limits::max(); /** Standard constructor - allocates the underlying data object */ @@ -379,8 +379,10 @@ return strNew; } -TString TString::MidByPos(size_t tStart, size_t stAfterEndPos) const +TString TString::MidRange(size_t tStart, size_t stAfterEndPos) const { + if(stAfterEndPos < tStart) + return TString(); return Mid(tStart, stAfterEndPos - tStart); } @@ -461,20 +463,6 @@ } } -bool TString::DeleteChar(size_t stIndex) -{ - size_t stCurrentLength = GetLength(); - if(stIndex >= stCurrentLength) - return false; - - EnsureWritable(1); - wmemmove(m_pszStringData + stIndex, m_pszStringData + stIndex + 1, stCurrentLength - stIndex); - m_pszStringData[stCurrentLength - 1] = _T('\0'); - GetInternalStringData()->SetStringLength(stCurrentLength - 1); - - return true; -} - bool TString::Delete(size_t stIndex, size_t stCount) { size_t stCurrentLength = GetLength(); @@ -626,7 +614,7 @@ size_t TString::Find(const wchar_t* pszFindText, size_t stStartPos) { if(!pszFindText) - THROW_CORE_EXCEPTION(eErr_InvalidArgument); + return npos; size_t stFindTextLen = _tcslen(pszFindText); size_t stThisLen = GetLength(); @@ -645,7 +633,7 @@ void TString::Replace(const wchar_t* pszWhat, const wchar_t* pszWithWhat) { if(!pszWhat || !pszWithWhat) - THROW_CORE_EXCEPTION(eErr_InvalidArgument); + return; if(!m_pszStringData) return; // nothing to do @@ -710,7 +698,10 @@ return true; } else + { + wch = L'\0'; return false; + } } wchar_t TString::GetAt(size_t tPos) const @@ -719,14 +710,7 @@ if(tPos < tSize) return m_pszStringData[tPos]; else - { - BOOST_ASSERT(tPos < tSize); - if(tPos >= tSize) - THROW_CORE_EXCEPTION(eErr_BoundsExceeded); - - // would be nice to throw an exception here return L'\0'; - } } /** Returns a pointer to the unicode internal buffer. If the buffer is in ansi format @@ -758,8 +742,9 @@ { EnsureWritable(tSize + 1); - m_pszStringData[GetCurrentBufferSize() - 1] = L'\0'; - GetInternalStringData()->SetStringLength(tSize); + size_t stNewSize = std::min(GetLength(), tSize); + m_pszStringData[stNewSize] = L'\0'; + GetInternalStringData()->SetStringLength(stNewSize); } /** Cast operator - tries to return a pointer to wchar_t* using the current internal