Hello all, Tonight I tried to remove some uses of setCharAt so that it can eventually be removed, and I ran across a few cases that I would like to get another pair of eyes on. Especially in one particular case, I added a guard to make sure that the index was within range and I want to make sure that it is necessary or if something more involved is required. The patch is attached, and I remembered to add [PATCH] to the subject this time :)
August Sodora aug...@gmail.com (201) 280-8138
From 6e9f990565c46f7dc46e8e3aae1a50122f3104c2 Mon Sep 17 00:00:00 2001 From: August Sodora <aug...@gmail.com> Date: Sat, 26 Nov 2011 02:03:23 -0500 Subject: [PATCH] Remove uses of OUString::setCharAt --- basic/source/sbx/sbxcurr.cxx | 10 +++--- sdext/source/pdfimport/tree/imagecontainer.cxx | 14 ++++---- svl/source/misc/lngmisc.cxx | 6 ++- writerfilter/source/dmapper/ConversionHelper.cxx | 38 +++++++++++----------- 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/basic/source/sbx/sbxcurr.cxx b/basic/source/sbx/sbxcurr.cxx index c227681..2a1f915 100644 --- a/basic/source/sbx/sbxcurr.cxx +++ b/basic/source/sbx/sbxcurr.cxx @@ -87,13 +87,13 @@ static rtl::OUString ImpCurrencyToString( const sal_Int64 &rVal ) for ( sal_Int32 charCpyIndex = aAbsStr.getLength() - 1; nInsertIndex >= nEndIndex; ++nDigitCount ) { if ( nDigitCount == 4 ) - aBuf.setCharAt( nInsertIndex--, cDecimalSep ); + aBuf[nInsertIndex--] = cDecimalSep; #if MAYBEFUTURE if ( nDigitCount > 4 && ! ( ( nDigitCount - 4 ) % 3) ) - aBuf.setCharAt( nInsertIndex--, cThousandSep ); + aBuf[nInsertIndex--] = cThousandSep; #endif if ( nDigitCount < initialLen ) - aBuf.setCharAt( nInsertIndex--, aAbsStr[ charCpyIndex-- ] ); + aBuf[nInsertIndex--] = aAbsStr[ charCpyIndex-- ]; else // Handle leading 0's to right of decimal point // Note: in VBA the stringification is a little more complex @@ -106,10 +106,10 @@ static rtl::OUString ImpCurrencyToString( const sal_Int64 &rVal ) // 0 0.0000 0 // 0.1 0.1000 0.1 - aBuf.setCharAt( nInsertIndex--, (sal_Unicode)'0' ); + aBuf[nInsertIndex--] = (sal_Unicode)'0'; } if ( isNeg ) - aBuf.setCharAt( nInsertIndex, (sal_Unicode)'-' ); + aBuf[nInsertIndex] = (sal_Unicode)'-'; aAbsStr = aBuf.makeStringAndClear(); return aAbsStr; diff --git a/sdext/source/pdfimport/tree/imagecontainer.cxx b/sdext/source/pdfimport/tree/imagecontainer.cxx index 9be7bb5..0d0f461 100644 --- a/sdext/source/pdfimport/tree/imagecontainer.cxx +++ b/sdext/source/pdfimport/tree/imagecontainer.cxx @@ -75,16 +75,16 @@ rtl::OUString encodeBase64( const sal_Int8* i_pBuffer, const sal_uInt32 i_nBuffe aBuf.appendAscii("===="); sal_uInt8 nIndex (static_cast<sal_uInt8>((nBinary & 0xFC0000) >> 18)); - aBuf.setCharAt(nBufPos, aBase64EncodeTable [nIndex]); + aBuf[nBufPos] = aBase64EncodeTable [nIndex]; nIndex = static_cast<sal_uInt8>((nBinary & 0x3F000) >> 12); - aBuf.setCharAt(nBufPos+1, aBase64EncodeTable [nIndex]); + aBuf[nBufPos+1] = aBase64EncodeTable [nIndex]; nIndex = static_cast<sal_uInt8>((nBinary & 0xFC0) >> 6); - aBuf.setCharAt(nBufPos+2, aBase64EncodeTable [nIndex]); + aBuf[nBufPos+2] = aBase64EncodeTable [nIndex]; nIndex = static_cast<sal_uInt8>((nBinary & 0x3F)); - aBuf.setCharAt(nBufPos+3, aBase64EncodeTable [nIndex]); + aBuf[nBufPos+3] = aBase64EncodeTable [nIndex]; } if( nRemain > 0 ) { @@ -100,15 +100,15 @@ rtl::OUString encodeBase64( const sal_Int8* i_pBuffer, const sal_uInt32 i_nBuffe break; } sal_uInt8 nIndex (static_cast<sal_uInt8>((nBinary & 0xFC0000) >> 18)); - aBuf.setCharAt(nBufPos, aBase64EncodeTable [nIndex]); + aBuf[nBufPos] = aBase64EncodeTable [nIndex]; nIndex = static_cast<sal_uInt8>((nBinary & 0x3F000) >> 12); - aBuf.setCharAt(nBufPos+1, aBase64EncodeTable [nIndex]); + aBuf[nBufPos+1] = aBase64EncodeTable [nIndex]; if( nRemain == 2 ) { nIndex = static_cast<sal_uInt8>((nBinary & 0xFC0) >> 6); - aBuf.setCharAt(nBufPos+2, aBase64EncodeTable [nIndex]); + aBuf[nBufPos+2] = aBase64EncodeTable [nIndex]; } } diff --git a/svl/source/misc/lngmisc.cxx b/svl/source/misc/lngmisc.cxx index ca1b68a..147eee0 100644 --- a/svl/source/misc/lngmisc.cxx +++ b/svl/source/misc/lngmisc.cxx @@ -85,7 +85,8 @@ sal_Bool RemoveControlChars( OUString &rTxt ) if (!IsControlChar( cChar )) { DBG_ASSERT( nCnt < nSize, "index out of range" ); - aBuf.setCharAt( nCnt++, cChar ); + if(nCnt < nSize) + aBuf[nCnt++] = cChar; } } DBG_ASSERT( nCnt == nSize, "wrong size" ); @@ -120,7 +121,8 @@ sal_Bool ReplaceControlChars( rtl::OUString &rTxt, sal_Char /*aRplcChar*/ ) if (IsControlChar( cChar )) cChar = ' '; DBG_ASSERT( nCnt < nLen, "index out of range" ); - aBuf.setCharAt( nCnt++, cChar ); + if(nCnt < nLen) + aBuf[nCnt++] = cChar; } } aBuf.setLength( nCnt ); diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx index a1ebac5..a803477 100644 --- a/writerfilter/source/dmapper/ConversionHelper.cxx +++ b/writerfilter/source/dmapper/ConversionHelper.cxx @@ -224,9 +224,9 @@ void lcl_SwapQuotesInField(::rtl::OUString &rFmt) for (sal_Int32 nI = 0; nI < nLen; ++nI) { if ((pFmt[nI] == '\"') && (!nI || pFmt[nI-1] != '\\')) - aBuffer.setCharAt(nI, '\''); + aBuffer[nI] = '\''; else if ((pFmt[nI] == '\'') && (!nI || pFmt[nI-1] != '\\')) - aBuffer.setCharAt(nI, '\"'); + aBuffer[nI] = '\"'; } rFmt = aBuffer.makeStringAndClear(); } @@ -235,8 +235,8 @@ bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) return ( (nPos == rFmt.getLength() - 1) || ( - (rFmt.getStr()[nPos+1] != 'M') && - (rFmt.getStr()[nPos+1] != 'm') + (rFmt[nPos+1] != 'M') && + (rFmt[nPos+1] != 'm') ) ); } @@ -253,34 +253,34 @@ bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) sal_Int32 nLen = sFormat.getLength(); sal_Int32 nI = 0; // const sal_Unicode* pFormat = sFormat.getStr(); - ::rtl::OUStringBuffer aNewFormat( sFormat.getStr() ); + ::rtl::OUStringBuffer aNewFormat( sFormat ); while (nI < nLen) { - if (aNewFormat.charAt(nI) == '\\') + if (aNewFormat[nI] == '\\') nI++; - else if (aNewFormat.charAt(nI) == '\"') + else if (aNewFormat[nI] == '\"') { ++nI; //While not at the end and not at an unescaped end quote - while ((nI < nLen) && (!(aNewFormat.charAt(nI) == '\"') && (aNewFormat.charAt(nI-1) != '\\'))) + while ((nI < nLen) && (!(aNewFormat[nI] == '\"') && (aNewFormat[nI-1] != '\\'))) ++nI; } else //normal unquoted section { - sal_Unicode nChar = aNewFormat.charAt(nI); + sal_Unicode nChar = aNewFormat[nI]; if (nChar == 'O') { - aNewFormat.setCharAt(nI, 'M'); + aNewFormat[nI] = 'M'; bForceNatNum = true; } else if (nChar == 'o') { - aNewFormat.setCharAt(nI, 'm'); + aNewFormat[nI] = 'm'; bForceNatNum = true; } else if ((nChar == 'A') && lcl_IsNotAM(sFormat, nI)) { - aNewFormat.setCharAt(nI, 'D'); + aNewFormat[nI] = 'D'; bForceNatNum = true; } else if ((nChar == 'g') || (nChar == 'G')) @@ -289,11 +289,11 @@ bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) bForceJapanese = true; else if (nChar == 'E') { - if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'E')) + if ((nI != nLen-1) && (aNewFormat[nI+1] == 'E')) { //todo: this cannot be the right way to replace a part of the string! - aNewFormat.setCharAt( nI, 'Y' ); - aNewFormat.setCharAt( nI + 1, 'Y' ); + aNewFormat[nI] = 'Y'; + aNewFormat[nI + 1] = 'Y'; aNewFormat.insert(nI + 2, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("YY"))); nLen+=2; nI+=3; @@ -302,11 +302,11 @@ bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) } else if (nChar == 'e') { - if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'e')) + if ((nI != nLen-1) && (aNewFormat[nI+1] == 'e')) { //todo: this cannot be the right way to replace a part of the string! - aNewFormat.setCharAt( nI, 'y' ); - aNewFormat.setCharAt( nI + 1, 'y' ); + aNewFormat[nI] = 'y'; + aNewFormat[nI + 1] = 'y'; aNewFormat.insert(nI + 2, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("yy"))); nLen+=2; nI+=3; @@ -317,7 +317,7 @@ bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos) { // MM We have to escape '/' in case it's used as a char //todo: this cannot be the right way to replace a part of the string! - aNewFormat.setCharAt( nI, '\\' ); + aNewFormat[nI] = '\\'; aNewFormat.insert(nI + 1, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"))); nI++; nLen++; -- 1.7.4.4
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice