diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-04-10 09:41:03 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-04-10 09:41:03 +0100 |
commit | 167dd1197d5189736045a714ccc3ec328e8e8fe5 (patch) | |
tree | 45a06848f440b7b102db119c5504878a40bc5a12 | |
parent | fix clang compile (diff) | |
download | binfilter-167dd1197d5189736045a714ccc3ec328e8e8fe5.tar.gz binfilter-167dd1197d5189736045a714ccc3ec328e8e8fe5.zip |
reduce binfilter ByteString to used parts
-rw-r--r-- | binfilter/bf_sch/source/core/sch_SchAddInCollection.cxx | 5 | ||||
-rw-r--r-- | binfilter/bf_svtools/source/misc/tl_strimp.cxx | 426 | ||||
-rw-r--r-- | binfilter/bf_svtools/source/misc/tl_tstring.cxx | 94 | ||||
-rw-r--r-- | binfilter/bf_svtools/source/misc/tl_tustring.cxx | 426 | ||||
-rw-r--r-- | binfilter/inc/bf_tools/string.hxx | 64 |
5 files changed, 432 insertions, 583 deletions
diff --git a/binfilter/bf_sch/source/core/sch_SchAddInCollection.cxx b/binfilter/bf_sch/source/core/sch_SchAddInCollection.cxx index e7be10099..8ef403b9c 100644 --- a/binfilter/bf_sch/source/core/sch_SchAddInCollection.cxx +++ b/binfilter/bf_sch/source/core/sch_SchAddInCollection.cxx @@ -91,14 +91,15 @@ using namespace ::com::sun::star; /*N*/ } /*N*/ mbInitialized = sal_True; /*N*/ } -/*N*/ catch( const uno::Exception& aEx ) +/*N*/ catch( const uno::Exception& rEx ) /*N*/ { /*N*/ OSL_FAIL( ::rtl::OUStringToOString( /*N*/ ::rtl::OUString( /*N*/ RTL_CONSTASCII_USTRINGPARAM( /*N*/ "Couldn't initialize add-in collection: " )) + -/*N*/ aEx.Message, +/*N*/ rEx.Message, /*N*/ RTL_TEXTENCODING_ASCII_US ).getStr() ); +/*N*/ (void)rEx; /*N*/ } /*N*/ } diff --git a/binfilter/bf_svtools/source/misc/tl_strimp.cxx b/binfilter/bf_svtools/source/misc/tl_strimp.cxx index 5ced5bc71..7b82b64bc 100644 --- a/binfilter/bf_svtools/source/misc/tl_strimp.cxx +++ b/binfilter/bf_svtools/source/misc/tl_strimp.cxx @@ -29,22 +29,6 @@ namespace binfilter { -static sal_Int32 ImplStringCompare( const STRCODE* pStr1, const STRCODE* pStr2, - xub_StrLen nCount ) -{ - sal_Int32 nRet = 0; - while ( nCount && - ((nRet = ((sal_Int32)((STRCODEU)*pStr1))-((sal_Int32)((STRCODEU)*pStr2))) == 0) && - *pStr2 ) - { - ++pStr1, - ++pStr2, - --nCount; - } - - return nRet; -} - // ----------------------------------------------------------------------- static sal_Int32 ImplStringCompareWithoutZero( const STRCODE* pStr1, const STRCODE* pStr2, @@ -62,65 +46,6 @@ static sal_Int32 ImplStringCompareWithoutZero( const STRCODE* pStr1, const STRCO return nRet; } -// ----------------------------------------------------------------------- - -static sal_Int32 ImplStringICompare( const STRCODE* pStr1, const STRCODE* pStr2 ) -{ - sal_Int32 nRet; - STRCODE c1; - STRCODE c2; - do - { - // Ist das Zeichen zwischen 'A' und 'Z' dann umwandeln - c1 = *pStr1; - c2 = *pStr2; - if ( (c1 >= 65) && (c1 <= 90) ) - c1 += 32; - if ( (c2 >= 65) && (c2 <= 90) ) - c2 += 32; - nRet = ((sal_Int32)((STRCODEU)c1))-((sal_Int32)((STRCODEU)c2)); - if ( nRet != 0 ) - break; - - ++pStr1, - ++pStr2; - } - while ( c2 ); - - return nRet; -} - -// ----------------------------------------------------------------------- - -static sal_Int32 ImplStringICompareWithoutZero( const STRCODE* pStr1, const STRCODE* pStr2, - sal_Int32 nCount ) -{ - sal_Int32 nRet = 0; - STRCODE c1; - STRCODE c2; - do - { - if ( !nCount ) - break; - - // Ist das Zeichen zwischen 'A' und 'Z' dann umwandeln - c1 = *pStr1; - c2 = *pStr2; - if ( (c1 >= 65) && (c1 <= 90) ) - c1 += 32; - if ( (c2 >= 65) && (c2 <= 90) ) - c2 += 32; - nRet = ((sal_Int32)((STRCODEU)c1))-((sal_Int32)((STRCODEU)c2)); - - ++pStr1, - ++pStr2, - --nCount; - } - while ( nRet == 0 ); - - return nRet; -} - // ======================================================================= #ifdef DBG_UTIL @@ -290,43 +215,6 @@ STRING::STRING( const STRCODE* pCharStr ) // ----------------------------------------------------------------------- -STRING::STRING( const STRCODE* pCharStr, xub_StrLen nLen ) -: mpData(NULL) -{ - DBG_CTOR( STRING, DBGCHECKSTRING ); - DBG_ASSERT( pCharStr, "String::String() - pCharStr is NULL" ); - - if ( nLen == STRING_LEN ) - nLen = ImplStringLen( pCharStr ); - -#ifdef DBG_UTIL - if ( DbgIsAssert() ) - { - for ( xub_StrLen i = 0; i < nLen; i++ ) - { - if ( !pCharStr[i] ) - { - OSL_FAIL( "String::String() : nLen is wrong" ); - } - } - } -#endif - - // Ist es kein leerer String - if ( nLen ) - { - // Verwaltungsdaten anlegen und String kopieren - mpData = ImplAllocData( nLen ); - memcpy( mpData->maStr, pCharStr, nLen*sizeof( STRCODE ) ); - } - else - { - STRING_NEW((STRING_TYPE **)&mpData); - } -} - -// ----------------------------------------------------------------------- - STRING::~STRING() { DBG_DTOR( STRING, DBGCHECKSTRING ); @@ -383,20 +271,6 @@ STRING& STRING::Assign( const STRCODE* pCharStr ) // ----------------------------------------------------------------------- -STRING& STRING::Assign( STRCODE c ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_ASSERT( c, "String::Assign() - c is 0" ); - - // Verwaltungsdaten anlegen und initialisieren - STRING_RELEASE((STRING_TYPE *)mpData); - mpData = ImplAllocData( 1 ); - mpData->maStr[0] = c; - return *this; -} - -// ----------------------------------------------------------------------- - STRING& STRING::Append( const STRING& rStr ) { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -513,43 +387,6 @@ STRING& STRING::Append( const STRCODE* pCharStr, xub_StrLen nCharLen ) // ----------------------------------------------------------------------- -STRING& STRING::Append( STRCODE c ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - // kein 0-Character und maximale Stringlaenge nicht ueberschreiten - sal_Int32 nLen = mpData->mnLen; - if ( c && (nLen < STRING_MAXLEN) ) - { - // Neue Datenstruktur und neuen String erzeugen - STRINGDATA* pNewData = ImplAllocData( nLen+1 ); - - // String kopieren - memcpy( pNewData->maStr, mpData->maStr, nLen*sizeof( STRCODE ) ); - pNewData->maStr[nLen] = c; - - // Alte Daten loeschen und Neue zuweisen - STRING_RELEASE((STRING_TYPE *)mpData); - mpData = pNewData; - } - - return *this; -} - -// ----------------------------------------------------------------------- - -void STRING::SetChar( xub_StrLen nIndex, STRCODE c ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_ASSERT( nIndex < mpData->mnLen, "String::SetChar() - nIndex > String.Len()" ); - - // Daten kopieren, wenn noetig und Character zuweisen - ImplCopyData(); - mpData->maStr[nIndex] = c; -} - -// ----------------------------------------------------------------------- - STRING& STRING::Insert( const STRING& rStr, xub_StrLen nIndex ) { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -738,35 +575,6 @@ STRING& STRING::ToLowerAscii() // ----------------------------------------------------------------------- -StringCompare STRING::CompareTo( const STRING& rStr, xub_StrLen nLen ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - // Auf Gleichheit der Pointer testen - if ( mpData == rStr.mpData ) - return COMPARE_EQUAL; - - // Maximale Laenge ermitteln - if ( mpData->mnLen < nLen ) - nLen = static_cast< xub_StrLen >(mpData->mnLen+1); - if ( rStr.mpData->mnLen < nLen ) - nLen = static_cast< xub_StrLen >(rStr.mpData->mnLen+1); - - // String vergleichen - sal_Int32 nCompare = ImplStringCompareWithoutZero( mpData->maStr, rStr.mpData->maStr, nLen ); - - // Rueckgabewert anpassen - if ( nCompare == 0 ) - return COMPARE_EQUAL; - else if ( nCompare < 0 ) - return COMPARE_LESS; - else - return COMPARE_GREATER; -} - -// ----------------------------------------------------------------------- - sal_Bool STRING::Equals( const STRING& rStr ) const { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -786,97 +594,6 @@ sal_Bool STRING::Equals( const STRING& rStr ) const // ----------------------------------------------------------------------- -sal_Bool STRING::EqualsIgnoreCaseAscii( const STRING& rStr ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - // Sind die Daten gleich - if ( mpData == rStr.mpData ) - return sal_True; - - // Gleiche Laenge - if ( mpData->mnLen != rStr.mpData->mnLen ) - return sal_False; - - // String vergleichen - return (ImplStringICompareWithoutZero( mpData->maStr, rStr.mpData->maStr, mpData->mnLen ) == 0); -} - -// ----------------------------------------------------------------------- - -sal_Bool STRING::EqualsIgnoreCaseAscii( const STRCODE* pCharStr ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - return (ImplStringICompare( mpData->maStr, pCharStr ) == 0); -} - -// ----------------------------------------------------------------------- - -sal_Bool STRING::Equals( const STRING& rStr, xub_StrLen nIndex, xub_StrLen nLen ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - // Are there enough codes for comparing? - if ( nIndex > mpData->mnLen ) - return (rStr.mpData->mnLen == 0); - sal_Int32 nMaxLen = mpData->mnLen-nIndex; - if ( nMaxLen < nLen ) - { - if ( rStr.mpData->mnLen != nMaxLen ) - return sal_False; - nLen = static_cast< xub_StrLen >(nMaxLen); - } - - // String vergleichen - return (ImplStringCompareWithoutZero( mpData->maStr+nIndex, rStr.mpData->maStr, nLen ) == 0); -} - -// ----------------------------------------------------------------------- - -sal_Bool STRING::Equals( const STRCODE* pCharStr, xub_StrLen nIndex, xub_StrLen nLen ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - // Are there enough codes for comparing? - if ( nIndex > mpData->mnLen ) - return (*pCharStr == 0); - - return (ImplStringCompare( mpData->maStr+nIndex, pCharStr, nLen ) == 0); -} - -// ----------------------------------------------------------------------- - -xub_StrLen STRING::Match( const STRING& rStr ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - // Ist dieser String leer - if ( !mpData->mnLen ) - return STRING_MATCH; - - // Suche bis Stringende nach dem ersten nicht uebereinstimmenden Zeichen - const STRCODE* pStr1 = mpData->maStr; - const STRCODE* pStr2 = rStr.mpData->maStr; - xub_StrLen i = 0; - while ( i < mpData->mnLen ) - { - // Stimmt das Zeichen nicht ueberein, dann abbrechen - if ( *pStr1 != *pStr2 ) - return i; - ++pStr1, - ++pStr2, - ++i; - } - - return STRING_MATCH; -} - -// ----------------------------------------------------------------------- - xub_StrLen STRING::Search( STRCODE c, xub_StrLen nIndex ) const { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -988,60 +705,6 @@ xub_StrLen STRING::Search( const STRCODE* pCharStr, xub_StrLen nIndex ) const // ----------------------------------------------------------------------- -xub_StrLen STRING::SearchAndReplace( const STRING& rStr, const STRING& rRepStr, - xub_StrLen nIndex ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); - - xub_StrLen nSPos = Search( rStr, nIndex ); - if ( nSPos != STRING_NOTFOUND ) - Replace( nSPos, rStr.Len(), rRepStr ); - - return nSPos; -} - -// ----------------------------------------------------------------------- - -void STRING::SearchAndReplaceAll( STRCODE c, STRCODE cRep ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - sal_Int32 nLen = mpData->mnLen; - const STRCODE* pStr = mpData->maStr; - sal_Int32 nIndex = 0; - while ( nIndex < nLen ) - { - if ( *pStr == c ) - { - ImplCopyData(); - mpData->maStr[nIndex] = cRep; - } - ++pStr, - ++nIndex; - } -} - -// ----------------------------------------------------------------------- - -void STRING::SearchAndReplaceAll( const STRING& rStr, const STRING& rRepStr ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); - - xub_StrLen nSPos = Search( rStr, 0 ); - while ( nSPos != STRING_NOTFOUND ) - { - Replace( nSPos, rStr.Len(), rRepStr ); - nSPos = nSPos + rRepStr.Len(); - nSPos = Search( rStr, nSPos ); - } -} - -// ----------------------------------------------------------------------- - xub_StrLen STRING::GetTokenCount( STRCODE cTok ) const { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -1066,95 +729,6 @@ xub_StrLen STRING::GetTokenCount( STRCODE cTok ) const return nTokCount; } -// ----------------------------------------------------------------------- - -void STRING::SetToken( xub_StrLen nToken, STRCODE cTok, const STRING& rStr, - xub_StrLen nIndex ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); - - const STRCODE* pStr = mpData->maStr; - xub_StrLen nLen = (xub_StrLen)mpData->mnLen; - xub_StrLen nTok = 0; - xub_StrLen nFirstChar = nIndex; - xub_StrLen i = nFirstChar; - - // Bestimme die Token-Position und Laenge - pStr += i; - while ( i < nLen ) - { - // Stimmt das Tokenzeichen ueberein, dann erhoehe TokCount - if ( *pStr == cTok ) - { - ++nTok; - - if ( nTok == nToken ) - nFirstChar = i+1; - else - { - if ( nTok > nToken ) - break; - } - } - - ++pStr, - ++i; - } - - if ( nTok >= nToken ) - Replace( nFirstChar, i-nFirstChar, rStr ); -} - -// ----------------------------------------------------------------------- - -STRING STRING::GetToken( xub_StrLen nToken, STRCODE cTok, xub_StrLen& rIndex ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - const STRCODE* pStr = mpData->maStr; - xub_StrLen nLen = (xub_StrLen)mpData->mnLen; - xub_StrLen nTok = 0; - xub_StrLen nFirstChar = rIndex; - xub_StrLen i = nFirstChar; - - // Bestimme die Token-Position und Laenge - pStr += i; - while ( i < nLen ) - { - // Stimmt das Tokenzeichen ueberein, dann erhoehe TokCount - if ( *pStr == cTok ) - { - ++nTok; - - if ( nTok == nToken ) - nFirstChar = i+1; - else - { - if ( nTok > nToken ) - break; - } - } - - ++pStr, - ++i; - } - - if ( nTok >= nToken ) - { - if ( i < nLen ) - rIndex = i+1; - else - rIndex = STRING_NOTFOUND; - return Copy( nFirstChar, i-nFirstChar ); - } - else - { - rIndex = STRING_NOTFOUND; - return STRING(); - } -} - } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_svtools/source/misc/tl_tstring.cxx b/binfilter/bf_svtools/source/misc/tl_tstring.cxx index 816177728..168a9ae12 100644 --- a/binfilter/bf_svtools/source/misc/tl_tstring.cxx +++ b/binfilter/bf_svtools/source/misc/tl_tstring.cxx @@ -90,100 +90,6 @@ xub_StrLen ImplStringLen( const sal_Unicode* pStr ) namespace binfilter { -void STRING::SearchAndReplaceAll( const STRCODE* pCharStr, const STRING& rRepStr ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); - - xub_StrLen nCharLen = ImplStringLen( pCharStr ); - xub_StrLen nSPos = Search( pCharStr, 0 ); - while ( nSPos != STRING_NOTFOUND ) - { - Replace( nSPos, nCharLen, rRepStr ); - nSPos = nSPos + rRepStr.Len(); - nSPos = Search( pCharStr, nSPos ); - } -} - -xub_StrLen STRING::SearchAndReplace( const STRCODE* pCharStr, const STRING& rRepStr, - xub_StrLen nIndex ) -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); - - xub_StrLen nSPos = Search( pCharStr, nIndex ); - if ( nSPos != STRING_NOTFOUND ) - Replace( nSPos, ImplStringLen( pCharStr ), rRepStr ); - - return nSPos; -} - -static sal_Int32 ImplStringICompare( const STRCODE* pStr1, const STRCODE* pStr2, - xub_StrLen nCount ) -{ - sal_Int32 nRet = 0; - STRCODE c1; - STRCODE c2; - do - { - if ( !nCount ) - break; - - // Ist das Zeichen zwischen 'A' und 'Z' dann umwandeln - c1 = *pStr1; - c2 = *pStr2; - if ( (c1 >= 65) && (c1 <= 90) ) - c1 += 32; - if ( (c2 >= 65) && (c2 <= 90) ) - c2 += 32; - nRet = ((sal_Int32)((STRCODEU)c1))-((sal_Int32)((STRCODEU)c2)); - if ( nRet != 0 ) - break; - - ++pStr1, - ++pStr2, - --nCount; - } - while ( c2 ); - - return nRet; -} - -StringCompare STRING::CompareIgnoreCaseToAscii( const STRCODE* pCharStr, - xub_StrLen nLen ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - // String vergleichen - sal_Int32 nCompare = ImplStringICompare( mpData->maStr, pCharStr, nLen ); - - // Rueckgabewert anpassen - if ( nCompare == 0 ) - return COMPARE_EQUAL; - else if ( nCompare < 0 ) - return COMPARE_LESS; - else - return COMPARE_GREATER; -} - -StringCompare STRING::CompareTo( const STRCODE* pCharStr, xub_StrLen nLen ) const -{ - DBG_CHKTHIS( STRING, DBGCHECKSTRING ); - - // String vergleichen - sal_Int32 nCompare = ImplStringCompare( mpData->maStr, pCharStr, nLen ); - - // Rueckgabewert anpassen - if ( nCompare == 0 ) - return COMPARE_EQUAL; - else if ( nCompare < 0 ) - return COMPARE_LESS; - else - return COMPARE_GREATER; -} - -// ======================================================================= - static sal_Int32 ImplStringCompare( const STRCODE* pStr1, const STRCODE* pStr2 ) { sal_Int32 nRet; diff --git a/binfilter/bf_svtools/source/misc/tl_tustring.cxx b/binfilter/bf_svtools/source/misc/tl_tustring.cxx index 58036d5d8..eb29ea141 100644 --- a/binfilter/bf_svtools/source/misc/tl_tustring.cxx +++ b/binfilter/bf_svtools/source/misc/tl_tustring.cxx @@ -389,6 +389,37 @@ STRING STRING::GetQuotedToken( xub_StrLen nToken, const STRING& rQuotedPairs, // ----------------------------------------------------------------------- +static sal_Int32 ImplStringICompareWithoutZero( const STRCODE* pStr1, const STRCODE* pStr2, + sal_Int32 nCount ) +{ + sal_Int32 nRet = 0; + STRCODE c1; + STRCODE c2; + do + { + if ( !nCount ) + break; + + // Ist das Zeichen zwischen 'A' und 'Z' dann umwandeln + c1 = *pStr1; + c2 = *pStr2; + if ( (c1 >= 65) && (c1 <= 90) ) + c1 += 32; + if ( (c2 >= 65) && (c2 <= 90) ) + c2 += 32; + nRet = ((sal_Int32)((STRCODEU)c1))-((sal_Int32)((STRCODEU)c2)); + + ++pStr1, + ++pStr2, + --nCount; + } + while ( nRet == 0 ); + + return nRet; +} + +// ----------------------------------------------------------------------- + sal_Bool STRING::EqualsIgnoreCaseAscii( const STRING& rStr, xub_StrLen nIndex, xub_StrLen nLen ) const { DBG_CHKTHIS( STRING, DBGCHECKSTRING ); @@ -713,6 +744,401 @@ STRING& STRING::ToUpperAscii() return *this; } +// ----------------------------------------------------------------------- + +STRING& STRING::Append( STRCODE c ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + + // kein 0-Character und maximale Stringlaenge nicht ueberschreiten + sal_Int32 nLen = mpData->mnLen; + if ( c && (nLen < STRING_MAXLEN) ) + { + // Neue Datenstruktur und neuen String erzeugen + STRINGDATA* pNewData = ImplAllocData( nLen+1 ); + + // String kopieren + memcpy( pNewData->maStr, mpData->maStr, nLen*sizeof( STRCODE ) ); + pNewData->maStr[nLen] = c; + + // Alte Daten loeschen und Neue zuweisen + STRING_RELEASE((STRING_TYPE *)mpData); + mpData = pNewData; + } + + return *this; +} + +// ----------------------------------------------------------------------- + +STRING& STRING::Assign( STRCODE c ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_ASSERT( c, "String::Assign() - c is 0" ); + + // Verwaltungsdaten anlegen und initialisieren + STRING_RELEASE((STRING_TYPE *)mpData); + mpData = ImplAllocData( 1 ); + mpData->maStr[0] = c; + return *this; +} + +// ----------------------------------------------------------------------- + +StringCompare STRING::CompareTo( const STRING& rStr, xub_StrLen nLen ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + // Auf Gleichheit der Pointer testen + if ( mpData == rStr.mpData ) + return COMPARE_EQUAL; + + // Maximale Laenge ermitteln + if ( mpData->mnLen < nLen ) + nLen = static_cast< xub_StrLen >(mpData->mnLen+1); + if ( rStr.mpData->mnLen < nLen ) + nLen = static_cast< xub_StrLen >(rStr.mpData->mnLen+1); + + // String vergleichen + sal_Int32 nCompare = ImplStringCompareWithoutZero( mpData->maStr, rStr.mpData->maStr, nLen ); + + // Rueckgabewert anpassen + if ( nCompare == 0 ) + return COMPARE_EQUAL; + else if ( nCompare < 0 ) + return COMPARE_LESS; + else + return COMPARE_GREATER; +} + +// ----------------------------------------------------------------------- + +STRING::STRING( const STRCODE* pCharStr, xub_StrLen nLen ) +: mpData(NULL) +{ + DBG_CTOR( STRING, DBGCHECKSTRING ); + DBG_ASSERT( pCharStr, "String::String() - pCharStr is NULL" ); + + if ( nLen == STRING_LEN ) + nLen = ImplStringLen( pCharStr ); + +#ifdef DBG_UTIL + if ( DbgIsAssert() ) + { + for ( xub_StrLen i = 0; i < nLen; i++ ) + { + if ( !pCharStr[i] ) + { + OSL_FAIL( "String::String() : nLen is wrong" ); + } + } + } +#endif + + // Ist es kein leerer String + if ( nLen ) + { + // Verwaltungsdaten anlegen und String kopieren + mpData = ImplAllocData( nLen ); + memcpy( mpData->maStr, pCharStr, nLen*sizeof( STRCODE ) ); + } + else + { + STRING_NEW((STRING_TYPE **)&mpData); + } +} + +// ----------------------------------------------------------------------- + +STRING STRING::GetToken( xub_StrLen nToken, STRCODE cTok, xub_StrLen& rIndex ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + + const STRCODE* pStr = mpData->maStr; + xub_StrLen nLen = (xub_StrLen)mpData->mnLen; + xub_StrLen nTok = 0; + xub_StrLen nFirstChar = rIndex; + xub_StrLen i = nFirstChar; + + // Bestimme die Token-Position und Laenge + pStr += i; + while ( i < nLen ) + { + // Stimmt das Tokenzeichen ueberein, dann erhoehe TokCount + if ( *pStr == cTok ) + { + ++nTok; + + if ( nTok == nToken ) + nFirstChar = i+1; + else + { + if ( nTok > nToken ) + break; + } + } + + ++pStr, + ++i; + } + + if ( nTok >= nToken ) + { + if ( i < nLen ) + rIndex = i+1; + else + rIndex = STRING_NOTFOUND; + return Copy( nFirstChar, i-nFirstChar ); + } + else + { + rIndex = STRING_NOTFOUND; + return STRING(); + } +} + +// ----------------------------------------------------------------------- + +void STRING::SetToken( xub_StrLen nToken, STRCODE cTok, const STRING& rStr, + xub_StrLen nIndex ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + const STRCODE* pStr = mpData->maStr; + xub_StrLen nLen = (xub_StrLen)mpData->mnLen; + xub_StrLen nTok = 0; + xub_StrLen nFirstChar = nIndex; + xub_StrLen i = nFirstChar; + + // Bestimme die Token-Position und Laenge + pStr += i; + while ( i < nLen ) + { + // Stimmt das Tokenzeichen ueberein, dann erhoehe TokCount + if ( *pStr == cTok ) + { + ++nTok; + + if ( nTok == nToken ) + nFirstChar = i+1; + else + { + if ( nTok > nToken ) + break; + } + } + + ++pStr, + ++i; + } + + if ( nTok >= nToken ) + Replace( nFirstChar, i-nFirstChar, rStr ); +} + +// ----------------------------------------------------------------------- + +void STRING::SetChar( xub_StrLen nIndex, STRCODE c ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_ASSERT( nIndex < mpData->mnLen, "String::SetChar() - nIndex > String.Len()" ); + + // Daten kopieren, wenn noetig und Character zuweisen + ImplCopyData(); + mpData->maStr[nIndex] = c; +} + +// ----------------------------------------------------------------------- + +xub_StrLen STRING::Match( const STRING& rStr ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + // Ist dieser String leer + if ( !mpData->mnLen ) + return STRING_MATCH; + + // Suche bis Stringende nach dem ersten nicht uebereinstimmenden Zeichen + const STRCODE* pStr1 = mpData->maStr; + const STRCODE* pStr2 = rStr.mpData->maStr; + xub_StrLen i = 0; + while ( i < mpData->mnLen ) + { + // Stimmt das Zeichen nicht ueberein, dann abbrechen + if ( *pStr1 != *pStr2 ) + return i; + ++pStr1, + ++pStr2, + ++i; + } + + return STRING_MATCH; +} + +// ----------------------------------------------------------------------- + +sal_Bool STRING::EqualsIgnoreCaseAscii( const STRING& rStr ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + // Sind die Daten gleich + if ( mpData == rStr.mpData ) + return sal_True; + + // Gleiche Laenge + if ( mpData->mnLen != rStr.mpData->mnLen ) + return sal_False; + + // String vergleichen + return (ImplStringICompareWithoutZero( mpData->maStr, rStr.mpData->maStr, mpData->mnLen ) == 0); +} + +// ----------------------------------------------------------------------- + +static sal_Int32 ImplStringICompare( const STRCODE* pStr1, const STRCODE* pStr2 ) +{ + sal_Int32 nRet; + STRCODE c1; + STRCODE c2; + do + { + // Ist das Zeichen zwischen 'A' und 'Z' dann umwandeln + c1 = *pStr1; + c2 = *pStr2; + if ( (c1 >= 65) && (c1 <= 90) ) + c1 += 32; + if ( (c2 >= 65) && (c2 <= 90) ) + c2 += 32; + nRet = ((sal_Int32)((STRCODEU)c1))-((sal_Int32)((STRCODEU)c2)); + if ( nRet != 0 ) + break; + + ++pStr1, + ++pStr2; + } + while ( c2 ); + + return nRet; +} + +// ----------------------------------------------------------------------- + +sal_Bool STRING::EqualsIgnoreCaseAscii( const STRCODE* pCharStr ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + + return (ImplStringICompare( mpData->maStr, pCharStr ) == 0); +} + +// ----------------------------------------------------------------------- + +sal_Bool STRING::Equals( const STRING& rStr, xub_StrLen nIndex, xub_StrLen nLen ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + + // Are there enough codes for comparing? + if ( nIndex > mpData->mnLen ) + return (rStr.mpData->mnLen == 0); + sal_Int32 nMaxLen = mpData->mnLen-nIndex; + if ( nMaxLen < nLen ) + { + if ( rStr.mpData->mnLen != nMaxLen ) + return sal_False; + nLen = static_cast< xub_StrLen >(nMaxLen); + } + + // String vergleichen + return (ImplStringCompareWithoutZero( mpData->maStr+nIndex, rStr.mpData->maStr, nLen ) == 0); +} + +static sal_Int32 ImplStringCompare( const STRCODE* pStr1, const STRCODE* pStr2, + xub_StrLen nCount ) +{ + sal_Int32 nRet = 0; + while ( nCount && + ((nRet = ((sal_Int32)((STRCODEU)*pStr1))-((sal_Int32)((STRCODEU)*pStr2))) == 0) && + *pStr2 ) + { + ++pStr1, + ++pStr2, + --nCount; + } + + return nRet; +} + +// ----------------------------------------------------------------------- + +sal_Bool STRING::Equals( const STRCODE* pCharStr, xub_StrLen nIndex, xub_StrLen nLen ) const +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + + // Are there enough codes for comparing? + if ( nIndex > mpData->mnLen ) + return (*pCharStr == 0); + + return (ImplStringCompare( mpData->maStr+nIndex, pCharStr, nLen ) == 0); +} + +// ----------------------------------------------------------------------- + +void STRING::SearchAndReplaceAll( STRCODE c, STRCODE cRep ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + + sal_Int32 nLen = mpData->mnLen; + const STRCODE* pStr = mpData->maStr; + sal_Int32 nIndex = 0; + while ( nIndex < nLen ) + { + if ( *pStr == c ) + { + ImplCopyData(); + mpData->maStr[nIndex] = cRep; + } + ++pStr, + ++nIndex; + } +} + +// ----------------------------------------------------------------------- + +void STRING::SearchAndReplaceAll( const STRING& rStr, const STRING& rRepStr ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); + + xub_StrLen nSPos = Search( rStr, 0 ); + while ( nSPos != STRING_NOTFOUND ) + { + Replace( nSPos, rStr.Len(), rRepStr ); + nSPos = nSPos + rRepStr.Len(); + nSPos = Search( rStr, nSPos ); + } +} + +// ----------------------------------------------------------------------- + +xub_StrLen STRING::SearchAndReplace( const STRING& rStr, const STRING& rRepStr, + xub_StrLen nIndex ) +{ + DBG_CHKTHIS( STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rStr, STRING, DBGCHECKSTRING ); + DBG_CHKOBJ( &rRepStr, STRING, DBGCHECKSTRING ); + + xub_StrLen nSPos = Search( rStr, nIndex ); + if ( nSPos != STRING_NOTFOUND ) + Replace( nSPos, rStr.Len(), rRepStr ); + + return nSPos; +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/inc/bf_tools/string.hxx b/binfilter/inc/bf_tools/string.hxx index b421f5b4f..d81a51c1d 100644 --- a/binfilter/inc/bf_tools/string.hxx +++ b/binfilter/inc/bf_tools/string.hxx @@ -129,23 +129,24 @@ private: ByteString( const UniString& rUniStr, rtl_TextEncoding eTextEncoding, sal_uInt32 nCvtFlags = UNISTRING_TO_BYTESTRING_CVTFLAGS ); //not implemented, to detect use of removed methods without compiler making something to fit + ByteString( const sal_Char* pCharStr, xub_StrLen nLen ); //not implemented ByteString& Assign( const sal_Char* pCharStr, xub_StrLen nLen ); //not implemented, to detect use of removed methods without compiler making something to fit void Assign(int); // not implemented; to detect misuses of // Assign(sal_Char) + ByteString& Assign( sal_Char c ); //not implemented void operator =(int); // not implemented; to detect misuses // of operator =(sal_Char) void Append(int); // not implemented; to detect misuses of // Append(char) + ByteString& Append( char c ); //not implemented void operator +=(int); // not implemented; to detect misuses // of operator +=(sal_Char) - public: ByteString(); ByteString( const ByteString& rStr ); ByteString( const ByteString& rStr, xub_StrLen nPos, xub_StrLen nLen ); ByteString( const rtl::OString& rStr ); ByteString( const sal_Char* pCharStr ); - ByteString( const sal_Char* pCharStr, xub_StrLen nLen ); ~ByteString(); operator rtl::OString () const @@ -156,7 +157,6 @@ public: ByteString& Assign( const ByteString& rStr ); ByteString& Assign( const rtl::OString& rStr ); ByteString& Assign( const sal_Char* pCharStr ); - ByteString& Assign( sal_Char c ); ByteString& operator =( const ByteString& rStr ) { return Assign( rStr ); } ByteString& operator =( const rtl::OString& rStr ) @@ -169,7 +169,6 @@ public: ByteString& Append( const ByteString& rStr ); ByteString& Append( const sal_Char* pCharStr ); ByteString& Append( const sal_Char* pCharStr, xub_StrLen nLen ); - ByteString& Append( char c ); ByteString& operator +=( const ByteString& rStr ) { return Append( rStr ); } ByteString& operator +=( const sal_Char* pCharStr ) @@ -177,7 +176,6 @@ public: ByteString& operator +=( sal_Char c ) { return Append( c ); } - void SetChar( xub_StrLen nIndex, sal_Char c ); sal_Char GetChar( xub_StrLen nIndex ) const { return mpData->maStr[nIndex]; } @@ -200,40 +198,14 @@ public: ByteString& ToLowerAscii(); - StringCompare CompareTo( const ByteString& rStr, - xub_StrLen nLen = STRING_LEN ) const; - StringCompare CompareTo( const sal_Char* pCharStr, - xub_StrLen nLen = STRING_LEN ) const; - StringCompare CompareIgnoreCaseToAscii( const sal_Char* pCharStr, - xub_StrLen nLen = STRING_LEN ) const; sal_Bool Equals( const ByteString& rStr ) const; sal_Bool Equals( const sal_Char* pCharStr ) const; - sal_Bool EqualsIgnoreCaseAscii( const ByteString& rStr ) const; - sal_Bool EqualsIgnoreCaseAscii( const sal_Char* pCharStr ) const; - sal_Bool Equals( const ByteString& rStr, - xub_StrLen nIndex, xub_StrLen nLen ) const; - sal_Bool Equals( const sal_Char* pCharStr, - xub_StrLen nIndex, xub_StrLen nLen ) const; - - xub_StrLen Match( const ByteString& rStr ) 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 SearchAndReplace( const ByteString& rStr, const ByteString& rRepStr, - xub_StrLen nIndex = 0 ); - xub_StrLen SearchAndReplace( const sal_Char* pCharStr, const ByteString& rRepStr, - xub_StrLen nIndex = 0 ); - void SearchAndReplaceAll( sal_Char c, sal_Char cRep ); - void SearchAndReplaceAll( const ByteString& rStr, const ByteString& rRepStr ); - void SearchAndReplaceAll( const sal_Char* pCharStr, const ByteString& rRepStr ); - xub_StrLen GetTokenCount( sal_Char cTok = ';' ) const; - void SetToken( xub_StrLen nToken, sal_Char cTok, const ByteString& rStr, - xub_StrLen nIndex = 0 ); - ByteString GetToken( xub_StrLen nToken, sal_Char cTok, xub_StrLen& rIndex ) const; - ByteString GetToken( xub_StrLen nToken, sal_Char cTok = ';' ) const; const sal_Char* GetBuffer() const { return mpData->maStr; } @@ -249,30 +221,6 @@ public: { return !(operator == ( rStr, pCharStr )); } friend sal_Bool operator != ( const sal_Char* pCharStr, const ByteString& rStr ) { return !(operator == ( pCharStr, rStr )); } - friend sal_Bool operator < ( const ByteString& rStr1, const ByteString& rStr2 ) - { return (rStr1.CompareTo( rStr2 ) == COMPARE_LESS); } - friend sal_Bool operator < ( const ByteString& rStr, const sal_Char* pCharStr ) - { return (rStr.CompareTo( pCharStr ) == COMPARE_LESS); } - friend sal_Bool operator < ( const sal_Char* pCharStr, const ByteString& rStr ) - { return (rStr.CompareTo( pCharStr ) >= COMPARE_EQUAL); } - friend sal_Bool operator > ( const ByteString& rStr1, const ByteString& rStr2 ) - { return (rStr1.CompareTo( rStr2 ) == COMPARE_GREATER); } - friend sal_Bool operator > ( const ByteString& rStr, const sal_Char* pCharStr ) - { return (rStr.CompareTo( pCharStr ) == COMPARE_GREATER); } - friend sal_Bool operator > ( const sal_Char* pCharStr, const ByteString& rStr ) - { return (rStr.CompareTo( pCharStr ) <= COMPARE_EQUAL); } - friend sal_Bool operator <= ( const ByteString& rStr1, const ByteString& rStr2 ) - { return !(operator > ( rStr1, rStr2 )); } - friend sal_Bool operator <= ( const ByteString& rStr, const sal_Char* pCharStr ) - { return !(operator > ( rStr, pCharStr )); } - friend sal_Bool operator <= ( const sal_Char* pCharStr, const ByteString& rStr ) - { return !(operator > ( pCharStr, rStr )); } - friend sal_Bool operator >= ( const ByteString& rStr1, const ByteString& rStr2 ) - { return !(operator < ( rStr1, rStr2 )); } - friend sal_Bool operator >= ( const ByteString& rStr, const sal_Char* pCharStr ) - { return !(operator < ( rStr, pCharStr )); } - friend sal_Bool operator >= ( const sal_Char* pCharStr, const ByteString& rStr ) - { return !(operator < ( pCharStr, rStr )); } }; inline ByteString ByteString::Copy( xub_StrLen nIndex, xub_StrLen nCount ) const @@ -280,12 +228,6 @@ inline ByteString ByteString::Copy( xub_StrLen nIndex, xub_StrLen nCount ) const return ByteString( *this, nIndex, nCount ); } -inline ByteString ByteString::GetToken( xub_StrLen nToken, sal_Char cTok ) const -{ - xub_StrLen nTempPos = 0; - return GetToken( nToken, cTok, nTempPos ); -} - // ----------------------------------------------------------------------- // ------------------------ |