From 61eb8ffd6f6e47f4c539b1cfbefba12cf5e650a9 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Wed, 11 Apr 2012 10:09:05 +0100 Subject: callcatcher: reduce ByteString --- binfilter/bf_svtools/source/misc/tl_strimp.cxx | 108 ----------------------- binfilter/bf_svtools/source/misc/tl_tustring.cxx | 104 ++++++++++++++++++++++ binfilter/inc/bf_tools/string.hxx | 2 - 3 files changed, 104 insertions(+), 110 deletions(-) diff --git a/binfilter/bf_svtools/source/misc/tl_strimp.cxx b/binfilter/bf_svtools/source/misc/tl_strimp.cxx index 7b82b64bc..36111fd92 100644 --- a/binfilter/bf_svtools/source/misc/tl_strimp.cxx +++ b/binfilter/bf_svtools/source/misc/tl_strimp.cxx @@ -451,67 +451,6 @@ STRING& STRING::Insert( STRCODE c, xub_StrLen nIndex ) // ----------------------------------------------------------------------- -STRING& STRING::Replace( xub_StrLen nIndex, xub_StrLen nCount, const STRING& rStr ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - // Wenn Index groessergleich Laenge ist, dann ist es ein Append - if ( nIndex >= mpData->mnLen ) - { - Append( rStr ); - return *this; - } - - // Ist es eine Zuweisung - if ( (nIndex == 0) && (nCount >= mpData->mnLen) ) - { - Assign( rStr ); - return *this; - } - - // Reicht ein Erase - sal_Int32 nStrLen = rStr.mpData->mnLen; - if ( !nStrLen ) - return Erase( nIndex, nCount ); - - // nCount darf nicht ueber das Stringende hinnausgehen - if ( nCount > mpData->mnLen - nIndex ) - nCount = static_cast< xub_StrLen >(mpData->mnLen-nIndex); - - // Reicht ein Insert - if ( !nCount ) - return Insert( rStr, nIndex ); - - // Reicht eine zeichenweise Zuweisung - if ( nCount == nStrLen ) - { - ImplCopyData(); - memcpy( mpData->maStr+nIndex, rStr.mpData->maStr, nCount*sizeof( STRCODE ) ); - return *this; - } - - // Ueberlauf abfangen - nStrLen = ImplGetCopyLen( mpData->mnLen-nCount, nStrLen ); - - // Neue Daten anlegen - STRINGDATA* pNewData = ImplAllocData( mpData->mnLen-nCount+nStrLen ); - - // String kopieren - memcpy( pNewData->maStr, mpData->maStr, nIndex*sizeof( STRCODE ) ); - memcpy( pNewData->maStr+nIndex, rStr.mpData->maStr, nStrLen*sizeof( STRCODE ) ); - memcpy( pNewData->maStr+nIndex+nStrLen, mpData->maStr+nIndex+nCount, - (mpData->mnLen-nIndex-nCount+1)*sizeof( STRCODE ) ); - - // Alte Daten loeschen und Neue zuweisen - STRING_RELEASE((STRING_TYPE *)mpData); - mpData = pNewData; - - return *this; -} - -// ----------------------------------------------------------------------- - STRING& STRING::Erase( xub_StrLen nIndex, xub_StrLen nCount ) { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -614,53 +553,6 @@ xub_StrLen STRING::Search( STRCODE c, xub_StrLen nIndex ) const // ----------------------------------------------------------------------- -xub_StrLen STRING::Search( const STRING& rStr, xub_StrLen nIndex ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - sal_Int32 nLen = mpData->mnLen; - sal_Int32 nStrLen = rStr.mpData->mnLen; - - // Falls die Laenge des uebergebenen Strings 0 ist oder der Index - // hinter dem String liegt, dann wurde der String nicht gefunden - if ( !nStrLen || (nIndex >= nLen) ) - return STRING_NOTFOUND; - - const STRCODE* pStr1 = mpData->maStr; - pStr1 += nIndex; - - if ( nStrLen == 1 ) - { - STRCODE cSearch = rStr.mpData->maStr[0]; - while ( nIndex < nLen ) - { - if ( *pStr1 == cSearch ) - return nIndex; - ++pStr1, - ++nIndex; - } - } - else - { - const STRCODE* pStr2 = rStr.mpData->maStr; - - // Nur innerhalb des Strings suchen - while ( nLen - nIndex >= nStrLen ) - { - // Stimmt der String ueberein - if ( ImplStringCompareWithoutZero( pStr1, pStr2, nStrLen ) == 0 ) - return nIndex; - ++pStr1, - ++nIndex; - } - } - - return STRING_NOTFOUND; -} - -// ----------------------------------------------------------------------- - xub_StrLen STRING::Search( const STRCODE* pCharStr, xub_StrLen nIndex ) const { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); diff --git a/binfilter/bf_svtools/source/misc/tl_tustring.cxx b/binfilter/bf_svtools/source/misc/tl_tustring.cxx index eb29ea141..0e60670c8 100644 --- a/binfilter/bf_svtools/source/misc/tl_tustring.cxx +++ b/binfilter/bf_svtools/source/misc/tl_tustring.cxx @@ -1139,6 +1139,110 @@ xub_StrLen STRING::SearchAndReplace( const STRING& rStr, const STRING& rRepStr, return nSPos; } +STRING& STRING::Replace( xub_StrLen nIndex, xub_StrLen nCount, const STRING& rStr ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + // Wenn Index groessergleich Laenge ist, dann ist es ein Append + if ( nIndex >= mpData->mnLen ) + { + Append( rStr ); + return *this; + } + + // Ist es eine Zuweisung + if ( (nIndex == 0) && (nCount >= mpData->mnLen) ) + { + Assign( rStr ); + return *this; + } + + // Reicht ein Erase + sal_Int32 nStrLen = rStr.mpData->mnLen; + if ( !nStrLen ) + return Erase( nIndex, nCount ); + + // nCount darf nicht ueber das Stringende hinnausgehen + if ( nCount > mpData->mnLen - nIndex ) + nCount = static_cast< xub_StrLen >(mpData->mnLen-nIndex); + + // Reicht ein Insert + if ( !nCount ) + return Insert( rStr, nIndex ); + + // Reicht eine zeichenweise Zuweisung + if ( nCount == nStrLen ) + { + ImplCopyData(); + memcpy( mpData->maStr+nIndex, rStr.mpData->maStr, nCount*sizeof( STRCODE ) ); + return *this; + } + + // Ueberlauf abfangen + nStrLen = ImplGetCopyLen( mpData->mnLen-nCount, nStrLen ); + + // Neue Daten anlegen + STRINGDATA* pNewData = ImplAllocData( mpData->mnLen-nCount+nStrLen ); + + // String kopieren + memcpy( pNewData->maStr, mpData->maStr, nIndex*sizeof( STRCODE ) ); + memcpy( pNewData->maStr+nIndex, rStr.mpData->maStr, nStrLen*sizeof( STRCODE ) ); + memcpy( pNewData->maStr+nIndex+nStrLen, mpData->maStr+nIndex+nCount, + (mpData->mnLen-nIndex-nCount+1)*sizeof( STRCODE ) ); + + // Alte Daten loeschen und Neue zuweisen + STRING_RELEASE((STRING_TYPE *)mpData); + mpData = pNewData; + + return *this; +} + +xub_StrLen STRING::Search( const STRING& rStr, xub_StrLen nIndex ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + sal_Int32 nLen = mpData->mnLen; + sal_Int32 nStrLen = rStr.mpData->mnLen; + + // Falls die Laenge des uebergebenen Strings 0 ist oder der Index + // hinter dem String liegt, dann wurde der String nicht gefunden + if ( !nStrLen || (nIndex >= nLen) ) + return STRING_NOTFOUND; + + const STRCODE* pStr1 = mpData->maStr; + pStr1 += nIndex; + + if ( nStrLen == 1 ) + { + STRCODE cSearch = rStr.mpData->maStr[0]; + while ( nIndex < nLen ) + { + if ( *pStr1 == cSearch ) + return nIndex; + ++pStr1, + ++nIndex; + } + } + else + { + const STRCODE* pStr2 = rStr.mpData->maStr; + + // Nur innerhalb des Strings suchen + while ( nLen - nIndex >= nStrLen ) + { + // Stimmt der String ueberein + if ( ImplStringCompareWithoutZero( pStr1, pStr2, nStrLen ) == 0 ) + return nIndex; + ++pStr1, + ++nIndex; + } + } + + return STRING_NOTFOUND; +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/inc/bf_tools/string.hxx b/binfilter/inc/bf_tools/string.hxx index d81a51c1d..9237c9e70 100644 --- a/binfilter/inc/bf_tools/string.hxx +++ b/binfilter/inc/bf_tools/string.hxx @@ -184,7 +184,6 @@ public: ByteString& Insert( const ByteString& rStr, xub_StrLen nIndex = STRING_LEN ); ByteString& Insert( const sal_Char* pCharStr, xub_StrLen nIndex = STRING_LEN ); ByteString& Insert( sal_Char c, xub_StrLen nIndex = STRING_LEN ); - ByteString& Replace( xub_StrLen nIndex, xub_StrLen nCount, const ByteString& rStr ); ByteString& Erase( xub_StrLen nIndex = 0, xub_StrLen nCount = STRING_LEN ); ByteString Copy( xub_StrLen nIndex = 0, xub_StrLen nCount = STRING_LEN ) const; @@ -202,7 +201,6 @@ public: sal_Bool Equals( const sal_Char* pCharStr ) const; xub_StrLen Search( sal_Char c, xub_StrLen nIndex = 0 ) const; - xub_StrLen Search( const ByteString& rStr, xub_StrLen nIndex = 0 ) const; xub_StrLen Search( const sal_Char* pCharStr, xub_StrLen nIndex = 0 ) const; xub_StrLen GetTokenCount( sal_Char cTok = ';' ) const; -- cgit