summaryrefslogtreecommitdiff
path: root/sal/rtl/source/strtmpl.c
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-01-28 20:57:40 +0100
committerMichael Stahl <mstahl@redhat.com>2012-01-28 20:57:40 +0100
commit2716f7dce26f16a2b677c178aa7d01cea096ae47 (patch)
tree9e9f67205cd5b72f1031721273e1534a3a1e5b0f /sal/rtl/source/strtmpl.c
parent10ac9e750447fd57e3cef7993b0ad6c6538d6269 (diff)
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'sal/rtl/source/strtmpl.c')
-rw-r--r--sal/rtl/source/strtmpl.c1570
1 files changed, 0 insertions, 1570 deletions
diff --git a/sal/rtl/source/strtmpl.c b/sal/rtl/source/strtmpl.c
deleted file mode 100644
index 98c09f15a..000000000
--- a/sal/rtl/source/strtmpl.c
+++ /dev/null
@@ -1,1570 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-/* ======================================================================= */
-/* Internal C-String help functions which could be used without the */
-/* String-Class */
-/* ======================================================================= */
-
-/*
-inline void rtl_str_ImplCopy( IMPL_RTL_STRCODE* pDest,
- const IMPL_RTL_STRCODE* pSrc,
- sal_Int32 nCount )
-{
- while ( nCount > 0 )
- {
- *pDest = *pSrc;
- pDest++;
- pSrc++;
- nCount--;
- }
-}
-*/
-
-#define rtl_str_ImplCopy( _pDest, _pSrc, _nCount ) \
-{ \
- IMPL_RTL_STRCODE* __mm_pDest = _pDest; \
- const IMPL_RTL_STRCODE* __mm_pSrc = _pSrc; \
- sal_Int32 __mm_nCount = _nCount; \
- while ( __mm_nCount > 0 ) \
- { \
- *__mm_pDest = *__mm_pSrc; \
- __mm_pDest++; \
- __mm_pSrc++; \
- __mm_nCount--; \
- } \
-}
-
-/* ======================================================================= */
-/* C-String functions which could be used without the String-Class */
-/* ======================================================================= */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( getLength )( const IMPL_RTL_STRCODE* pStr )
-{
- const IMPL_RTL_STRCODE* pTempStr = pStr;
- while( *pTempStr )
- pTempStr++;
- return pTempStr-pStr;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compare )( const IMPL_RTL_STRCODE* pStr1,
- const IMPL_RTL_STRCODE* pStr2 )
-{
- sal_Int32 nRet;
- while ( ((nRet = ((sal_Int32)(IMPL_RTL_USTRCODE(*pStr1)))-
- ((sal_Int32)(IMPL_RTL_USTRCODE(*pStr2)))) == 0) &&
- *pStr2 )
- {
- pStr1++;
- pStr2++;
- }
-
- return nRet;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compare_WithLength )( const IMPL_RTL_STRCODE* pStr1,
- sal_Int32 nStr1Len,
- const IMPL_RTL_STRCODE* pStr2,
- sal_Int32 nStr2Len )
-{
- sal_Int32 nRet = nStr1Len - nStr2Len;
- int nCount = (nRet <= 0) ? nStr1Len : nStr2Len;
-
- --pStr1;
- --pStr2;
- while( (--nCount >= 0) && (*++pStr1 == *++pStr2) );
-
- if( nCount >= 0 )
- nRet = ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr1 )))
- - ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr2 )));
-
- return nRet;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( shortenedCompare_WithLength )( const IMPL_RTL_STRCODE* pStr1,
- sal_Int32 nStr1Len,
- const IMPL_RTL_STRCODE* pStr2,
- sal_Int32 nStr2Len,
- sal_Int32 nShortenedLength )
-{
- const IMPL_RTL_STRCODE* pStr1End = pStr1 + nStr1Len;
- const IMPL_RTL_STRCODE* pStr2End = pStr2 + nStr2Len;
- sal_Int32 nRet;
- while ( (nShortenedLength > 0) &&
- (pStr1 < pStr1End) && (pStr2 < pStr2End) )
- {
- nRet = ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr1 )))-
- ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr2 )));
- if ( nRet )
- return nRet;
-
- nShortenedLength--;
- pStr1++;
- pStr2++;
- }
-
- if ( nShortenedLength <= 0 )
- return 0;
- return nStr1Len - nStr2Len;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( reverseCompare_WithLength )( const IMPL_RTL_STRCODE* pStr1,
- sal_Int32 nStr1Len,
- const IMPL_RTL_STRCODE* pStr2,
- sal_Int32 nStr2Len )
-{
- const IMPL_RTL_STRCODE* pStr1Run = pStr1+nStr1Len;
- const IMPL_RTL_STRCODE* pStr2Run = pStr2+nStr2Len;
- sal_Int32 nRet;
- while ( (pStr1 < pStr1Run) && (pStr2 < pStr2Run) )
- {
- pStr1Run--;
- pStr2Run--;
- nRet = ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr1Run )))-
- ((sal_Int32)(IMPL_RTL_USTRCODE( *pStr2Run )));
- if ( nRet )
- return nRet;
- }
-
- return nStr1Len - nStr2Len;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compareIgnoreAsciiCase )( const IMPL_RTL_STRCODE* pStr1,
- const IMPL_RTL_STRCODE* pStr2 )
-{
- sal_Int32 nRet;
- sal_Int32 c1;
- sal_Int32 c2;
- do
- {
- /* If character between 'A' and 'Z', than convert it to lowercase */
- c1 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr1 );
- c2 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr2 );
- if ( (c1 >= 65) && (c1 <= 90) )
- c1 += 32;
- if ( (c2 >= 65) && (c2 <= 90) )
- c2 += 32;
- nRet = c1-c2;
- if ( nRet != 0 )
- return nRet;
-
- pStr1++;
- pStr2++;
- }
- while ( c2 );
-
- return 0;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( compareIgnoreAsciiCase_WithLength )( const IMPL_RTL_STRCODE* pStr1,
- sal_Int32 nStr1Len,
- const IMPL_RTL_STRCODE* pStr2,
- sal_Int32 nStr2Len )
-{
- const IMPL_RTL_STRCODE* pStr1End = pStr1 + nStr1Len;
- const IMPL_RTL_STRCODE* pStr2End = pStr2 + nStr2Len;
- sal_Int32 nRet;
- sal_Int32 c1;
- sal_Int32 c2;
- while ( (pStr1 < pStr1End) && (pStr2 < pStr2End) )
- {
- /* If character between 'A' and 'Z', than convert it to lowercase */
- c1 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr1 );
- c2 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr2 );
- if ( (c1 >= 65) && (c1 <= 90) )
- c1 += 32;
- if ( (c2 >= 65) && (c2 <= 90) )
- c2 += 32;
- nRet = c1-c2;
- if ( nRet != 0 )
- return nRet;
-
- pStr1++;
- pStr2++;
- }
-
- return nStr1Len - nStr2Len;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( shortenedCompareIgnoreAsciiCase_WithLength )( const IMPL_RTL_STRCODE* pStr1,
- sal_Int32 nStr1Len,
- const IMPL_RTL_STRCODE* pStr2,
- sal_Int32 nStr2Len,
- sal_Int32 nShortenedLength )
-{
- const IMPL_RTL_STRCODE* pStr1End = pStr1 + nStr1Len;
- const IMPL_RTL_STRCODE* pStr2End = pStr2 + nStr2Len;
- sal_Int32 nRet;
- sal_Int32 c1;
- sal_Int32 c2;
- while ( (nShortenedLength > 0) &&
- (pStr1 < pStr1End) && (pStr2 < pStr2End) )
- {
- /* If character between 'A' and 'Z', than convert it to lowercase */
- c1 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr1 );
- c2 = (sal_Int32)IMPL_RTL_USTRCODE( *pStr2 );
- if ( (c1 >= 65) && (c1 <= 90) )
- c1 += 32;
- if ( (c2 >= 65) && (c2 <= 90) )
- c2 += 32;
- nRet = c1-c2;
- if ( nRet != 0 )
- return nRet;
-
- nShortenedLength--;
- pStr1++;
- pStr2++;
- }
-
- if ( nShortenedLength <= 0 )
- return 0;
- return nStr1Len - nStr2Len;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( hashCode )( const IMPL_RTL_STRCODE* pStr )
-{
- return IMPL_RTL_STRNAME( hashCode_WithLength )( pStr, IMPL_RTL_STRNAME( getLength )( pStr ) );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( hashCode_WithLength )( const IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen )
-{
- sal_Int32 h = nLen;
-
- if ( nLen < 256 )
- {
- while ( nLen > 0 )
- {
- h = (h*37) + IMPL_RTL_USTRCODE( *pStr );
- pStr++;
- nLen--;
- }
- }
- else
- {
- sal_Int32 nSkip;
- const IMPL_RTL_STRCODE* pEndStr = pStr+nLen-5;
-
- /* only sample some characters */
- /* the first 3, some characters between, and the last 5 */
- h = (h*39) + IMPL_RTL_USTRCODE( *pStr );
- pStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pStr );
- pStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pStr );
- pStr++;
-
- if ( nLen < 32 )
- nSkip = nLen / 4;
- else
- nSkip = nLen / 8;
- nLen -= 8;
- while ( nLen > 0 )
- {
- h = (h*39) + IMPL_RTL_USTRCODE( *pStr );
- pStr += nSkip;
- nLen -= nSkip;
- }
-
- h = (h*39) + IMPL_RTL_USTRCODE( *pEndStr );
- pEndStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pEndStr );
- pEndStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pEndStr );
- pEndStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pEndStr );
- pEndStr++;
- h = (h*39) + IMPL_RTL_USTRCODE( *pEndStr );
- }
-
- return h;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfChar )( const IMPL_RTL_STRCODE* pStr,
- IMPL_RTL_STRCODE c )
-{
- const IMPL_RTL_STRCODE* pTempStr = pStr;
- while ( *pTempStr )
- {
- if ( *pTempStr == c )
- return pTempStr-pStr;
-
- pTempStr++;
- }
-
- return -1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfChar_WithLength )( const IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen,
- IMPL_RTL_STRCODE c )
-{
- const IMPL_RTL_STRCODE* pTempStr = pStr;
- while ( nLen > 0 )
- {
- if ( *pTempStr == c )
- return pTempStr-pStr;
-
- pTempStr++;
- nLen--;
- }
-
- return -1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfChar )( const IMPL_RTL_STRCODE* pStr,
- IMPL_RTL_STRCODE c )
-{
- return IMPL_RTL_STRNAME( lastIndexOfChar_WithLength )( pStr, IMPL_RTL_STRNAME( getLength )( pStr ), c );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfChar_WithLength )( const IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen,
- IMPL_RTL_STRCODE c )
-{
- pStr += nLen;
- while ( nLen > 0 )
- {
- nLen--;
- pStr--;
-
- if ( *pStr == c )
- return nLen;
- }
-
- return -1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfStr )( const IMPL_RTL_STRCODE* pStr,
- const IMPL_RTL_STRCODE* pSubStr )
-{
- return IMPL_RTL_STRNAME( indexOfStr_WithLength )( pStr, IMPL_RTL_STRNAME( getLength )( pStr ),
- pSubStr, IMPL_RTL_STRNAME( getLength )( pSubStr ) );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( indexOfStr_WithLength )( const IMPL_RTL_STRCODE* pStr,
- sal_Int32 nStrLen,
- const IMPL_RTL_STRCODE* pSubStr,
- sal_Int32 nSubLen )
-{
- /* faster search for a single character */
- if ( nSubLen < 2 )
- {
- /* an empty SubString is always not foundable */
- if ( nSubLen == 1 )
- {
- IMPL_RTL_STRCODE c = *pSubStr;
- const IMPL_RTL_STRCODE* pTempStr = pStr;
- while ( nStrLen > 0 )
- {
- if ( *pTempStr == c )
- return pTempStr-pStr;
-
- pTempStr++;
- nStrLen--;
- }
- }
- }
- else
- {
- const IMPL_RTL_STRCODE* pTempStr = pStr;
- while ( nStrLen > 0 )
- {
- if ( *pTempStr == *pSubStr )
- {
- /* Compare SubString */
- if ( nSubLen <= nStrLen )
- {
- const IMPL_RTL_STRCODE* pTempStr1 = pTempStr;
- const IMPL_RTL_STRCODE* pTempStr2 = pSubStr;
- sal_Int32 nTempLen = nSubLen;
- while ( nTempLen )
- {
- if ( *pTempStr1 != *pTempStr2 )
- break;
-
- pTempStr1++;
- pTempStr2++;
- nTempLen--;
- }
-
- if ( !nTempLen )
- return pTempStr-pStr;
- }
- else
- break;
- }
-
- nStrLen--;
- pTempStr++;
- }
- }
-
- return -1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfStr )( const IMPL_RTL_STRCODE* pStr,
- const IMPL_RTL_STRCODE* pSubStr )
-{
- return IMPL_RTL_STRNAME( lastIndexOfStr_WithLength )( pStr, IMPL_RTL_STRNAME( getLength )( pStr ),
- pSubStr, IMPL_RTL_STRNAME( getLength )( pSubStr ) );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( lastIndexOfStr_WithLength )( const IMPL_RTL_STRCODE* pStr,
- sal_Int32 nStrLen,
- const IMPL_RTL_STRCODE* pSubStr,
- sal_Int32 nSubLen )
-{
- /* faster search for a single character */
- if ( nSubLen < 2 )
- {
- /* an empty SubString is always not foundable */
- if ( nSubLen == 1 )
- {
- IMPL_RTL_STRCODE c = *pSubStr;
- pStr += nStrLen;
- while ( nStrLen > 0 )
- {
- nStrLen--;
- pStr--;
-
- if ( *pStr == c )
- return nStrLen;
- }
- }
- }
- else
- {
- pStr += nStrLen;
- nStrLen -= nSubLen;
- pStr -= nSubLen;
- while ( nStrLen >= 0 )
- {
- const IMPL_RTL_STRCODE* pTempStr1 = pStr;
- const IMPL_RTL_STRCODE* pTempStr2 = pSubStr;
- sal_Int32 nTempLen = nSubLen;
- while ( nTempLen )
- {
- if ( *pTempStr1 != *pTempStr2 )
- break;
-
- pTempStr1++;
- pTempStr2++;
- nTempLen--;
- }
-
- if ( !nTempLen )
- return nStrLen;
-
- nStrLen--;
- pStr--;
- }
- }
-
- return -1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( replaceChar )( IMPL_RTL_STRCODE* pStr,
- IMPL_RTL_STRCODE cOld,
- IMPL_RTL_STRCODE cNew )
-{
- while ( *pStr )
- {
- if ( *pStr == cOld )
- *pStr = cNew;
-
- pStr++;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( replaceChar_WithLength )( IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen,
- IMPL_RTL_STRCODE cOld,
- IMPL_RTL_STRCODE cNew )
-{
- while ( nLen > 0 )
- {
- if ( *pStr == cOld )
- *pStr = cNew;
-
- pStr++;
- nLen--;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( toAsciiLowerCase )( IMPL_RTL_STRCODE* pStr )
-{
- while ( *pStr )
- {
- /* Between A-Z (65-90), than to lowercase (+32) */
- if ( (*pStr >= 65) && (*pStr <= 90) )
- *pStr += 32;
-
- pStr++;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( toAsciiLowerCase_WithLength )( IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen )
-{
- while ( nLen > 0 )
- {
- /* Between A-Z (65-90), than to lowercase (+32) */
- if ( (*pStr >= 65) && (*pStr <= 90) )
- *pStr += 32;
-
- pStr++;
- nLen--;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( toAsciiUpperCase )( IMPL_RTL_STRCODE* pStr )
-{
- while ( *pStr )
- {
- /* Between a-z (97-122), than to uppercase (-32) */
- if ( (*pStr >= 97) && (*pStr <= 122) )
- *pStr -= 32;
-
- pStr++;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRNAME( toAsciiUpperCase_WithLength )( IMPL_RTL_STRCODE* pStr,
- sal_Int32 nLen )
-{
- while ( nLen > 0 )
- {
- /* Between a-z (97-122), than to uppercase (-32) */
- if ( (*pStr >= 97) && (*pStr <= 122) )
- *pStr -= 32;
-
- pStr++;
- nLen--;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( trim )( IMPL_RTL_STRCODE* pStr )
-{
- return IMPL_RTL_STRNAME( trim_WithLength )( pStr, IMPL_RTL_STRNAME( getLength )( pStr ) );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( trim_WithLength )( IMPL_RTL_STRCODE* pStr, sal_Int32 nLen )
-{
- sal_Int32 nPreSpaces = 0;
- sal_Int32 nPostSpaces = 0;
- sal_Int32 nIndex = nLen-1;
-
- while ( (nPreSpaces < nLen) && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nPreSpaces)) ) )
- nPreSpaces++;
-
- while ( (nIndex > nPreSpaces) && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE(*(pStr+nIndex)) ) )
- {
- nPostSpaces++;
- nIndex--;
- }
-
- if ( nPostSpaces )
- {
- nLen -= nPostSpaces;
- *(pStr+nLen) = 0;
- }
-
- if ( nPreSpaces )
- {
- IMPL_RTL_STRCODE* pNewStr = pStr+nPreSpaces;
-
- nLen -= nPreSpaces;
- nIndex = nLen;
-
- while ( nIndex )
- {
- *pStr = *pNewStr;
- pStr++;
- pNewStr++;
- nIndex--;
- }
- *pStr = 0;
- }
-
- return nLen;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfBoolean )( IMPL_RTL_STRCODE* pStr, sal_Bool b )
-{
- if ( b )
- {
- *pStr = 't';
- pStr++;
- *pStr = 'r';
- pStr++;
- *pStr = 'u';
- pStr++;
- *pStr = 'e';
- pStr++;
- *pStr = 0;
- return 4;
- }
- else
- {
- *pStr = 'f';
- pStr++;
- *pStr = 'a';
- pStr++;
- *pStr = 'l';
- pStr++;
- *pStr = 's';
- pStr++;
- *pStr = 'e';
- pStr++;
- *pStr = 0;
- return 5;
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfChar )( IMPL_RTL_STRCODE* pStr,
- IMPL_RTL_STRCODE c )
-{
- *pStr++ = c;
- *pStr = 0;
- return 1;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfInt32 )( IMPL_RTL_STRCODE* pStr,
- sal_Int32 n,
- sal_Int16 nRadix )
-{
- sal_Char aBuf[RTL_STR_MAX_VALUEOFINT32];
- sal_Char* pBuf = aBuf;
- sal_Int32 nLen = 0;
- sal_uInt32 nValue;
-
- /* Radix must be valid */
- if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
- nRadix = 10;
-
- /* is value negativ */
- if ( n < 0 )
- {
- *pStr = '-';
- pStr++;
- nLen++;
- nValue = -n; /* FIXME this code is not portable for n == -2147483648
- (smallest negative value for sal_Int32) */
- }
- else
- nValue = n;
-
- /* create a recursive buffer with all values, except the last one */
- do
- {
- sal_Char nDigit = (sal_Char)(nValue % nRadix);
- nValue /= nRadix;
- if ( nDigit > 9 )
- *pBuf = (nDigit-10) + 'a';
- else
- *pBuf = (nDigit + '0' );
- pBuf++;
- }
- while ( nValue > 0 );
-
- /* copy the values in the right direction into the destination buffer */
- do
- {
- pBuf--;
- *pStr = *pBuf;
- pStr++;
- nLen++;
- }
- while ( pBuf != aBuf );
- *pStr = 0;
-
- return nLen;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( valueOfInt64 )( IMPL_RTL_STRCODE* pStr,
- sal_Int64 n,
- sal_Int16 nRadix )
-{
- sal_Char aBuf[RTL_STR_MAX_VALUEOFINT64];
- sal_Char* pBuf = aBuf;
- sal_Int32 nLen = 0;
- sal_uInt64 nValue;
-
- /* Radix must be valid */
- if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
- nRadix = 10;
-
- /* is value negativ */
- if ( n < 0 )
- {
- *pStr = '-';
- pStr++;
- nLen++;
- nValue = -n; /* FIXME this code is not portable for
- n == -9223372036854775808 (smallest negative value for
- sal_Int64) */
- }
- else
- nValue = n;
-
- /* create a recursive buffer with all values, except the last one */
- do
- {
- sal_Char nDigit = (sal_Char)(nValue % nRadix);
- nValue /= nRadix;
- if ( nDigit > 9 )
- *pBuf = (nDigit-10) + 'a';
- else
- *pBuf = (nDigit + '0' );
- pBuf++;
- }
- while ( nValue > 0 );
-
- /* copy the values in the right direction into the destination buffer */
- do
- {
- pBuf--;
- *pStr = *pBuf;
- pStr++;
- nLen++;
- }
- while ( pBuf != aBuf );
- *pStr = 0;
-
- return nLen;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Bool SAL_CALL IMPL_RTL_STRNAME( toBoolean )( const IMPL_RTL_STRCODE* pStr )
-{
- if ( *pStr == '1' )
- return sal_True;
-
- if ( (*pStr == 'T') || (*pStr == 't') )
- {
- pStr++;
- if ( (*pStr == 'R') || (*pStr == 'r') )
- {
- pStr++;
- if ( (*pStr == 'U') || (*pStr == 'u') )
- {
- pStr++;
- if ( (*pStr == 'E') || (*pStr == 'e') )
- return sal_True;
- }
- }
- }
-
- return sal_False;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRNAME( toInt32 )( const IMPL_RTL_STRCODE* pStr,
- sal_Int16 nRadix )
-{
- sal_Bool bNeg;
- sal_Int16 nDigit;
- sal_Int32 n = 0;
-
- if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
- nRadix = 10;
-
- /* Skip whitespaces */
- while ( *pStr && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE( *pStr ) ) )
- pStr++;
-
- if ( *pStr == '-' )
- {
- bNeg = sal_True;
- pStr++;
- }
- else
- {
- if ( *pStr == '+' )
- pStr++;
- bNeg = sal_False;
- }
-
- while ( *pStr )
- {
- nDigit = rtl_ImplGetDigit( IMPL_RTL_USTRCODE( *pStr ), nRadix );
- if ( nDigit < 0 )
- break;
-
- n *= nRadix;
- n += nDigit;
-
- pStr++;
- }
-
- if ( bNeg )
- return -n;
- else
- return n;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int64 SAL_CALL IMPL_RTL_STRNAME( toInt64 )( const IMPL_RTL_STRCODE* pStr,
- sal_Int16 nRadix )
-{
- sal_Bool bNeg;
- sal_Int16 nDigit;
- sal_Int64 n = 0;
-
- if ( (nRadix < RTL_STR_MIN_RADIX) || (nRadix > RTL_STR_MAX_RADIX) )
- nRadix = 10;
-
- /* Skip whitespaces */
- while ( *pStr && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE( *pStr ) ) )
- pStr++;
-
- if ( *pStr == '-' )
- {
- bNeg = sal_True;
- pStr++;
- }
- else
- {
- if ( *pStr == '+' )
- pStr++;
- bNeg = sal_False;
- }
-
- while ( *pStr )
- {
- nDigit = rtl_ImplGetDigit( IMPL_RTL_USTRCODE( *pStr ), nRadix );
- if ( nDigit < 0 )
- break;
-
- n *= nRadix;
- n += nDigit;
-
- pStr++;
- }
-
- if ( bNeg )
- return -n;
- else
- return n;
-}
-
-/* ======================================================================= */
-/* Internal String-Class help functions */
-/* ======================================================================= */
-
-static IMPL_RTL_STRINGDATA* IMPL_RTL_STRINGNAME( ImplAlloc )( sal_Int32 nLen )
-{
- IMPL_RTL_STRINGDATA * pData
- = (SAL_INT_CAST(sal_uInt32, nLen)
- <= ((SAL_MAX_UINT32 - sizeof (IMPL_RTL_STRINGDATA))
- / sizeof (IMPL_RTL_STRCODE)))
- ? (IMPL_RTL_STRINGDATA *) rtl_allocateMemory(
- sizeof (IMPL_RTL_STRINGDATA) + nLen * sizeof (IMPL_RTL_STRCODE))
- : NULL;
- if (pData != NULL) {
- pData->refCount = 1;
- pData->length = nLen;
- pData->buffer[nLen] = 0;
- }
- return pData;
-}
-
-/* ----------------------------------------------------------------------- */
-
-static IMPL_RTL_STRCODE* IMPL_RTL_STRINGNAME( ImplNewCopy )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr,
- sal_Int32 nCount )
-{
- IMPL_RTL_STRCODE* pDest;
- const IMPL_RTL_STRCODE* pSrc;
- IMPL_RTL_STRINGDATA* pData = IMPL_RTL_STRINGNAME( ImplAlloc )( pStr->length );
- OSL_ASSERT(pData != NULL);
-
- pDest = pData->buffer;
- pSrc = pStr->buffer;
- while ( nCount > 0 )
- {
- *pDest = *pSrc;
- pDest++;
- pSrc++;
- nCount--;
- }
-
- *ppThis = pData;
- return pDest;
-}
-
-/* ======================================================================= */
-/* String-Class functions */
-/* ======================================================================= */
-
-#define IMPL_RTL_AQUIRE( pThis ) \
-{ \
- if (!SAL_STRING_IS_STATIC (pThis)) \
- osl_incrementInterlockedCount( &((pThis)->refCount) ); \
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( acquire )( IMPL_RTL_STRINGDATA* pThis )
-{
- IMPL_RTL_AQUIRE( pThis );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( release )( IMPL_RTL_STRINGDATA* pThis )
-{
- if (SAL_STRING_IS_STATIC (pThis))
- return;
-
-/* OString doesn't have an 'intern' */
-#ifdef IMPL_RTL_INTERN
- if (SAL_STRING_IS_INTERN (pThis))
- {
- internRelease (pThis);
- return;
- }
-#endif
-
- if ( pThis->refCount == 1 ||
- !osl_decrementInterlockedCount( &(pThis->refCount) ) )
- {
- rtl_freeMemory( pThis );
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( new )( IMPL_RTL_STRINGDATA** ppThis )
-{
- if ( *ppThis)
- IMPL_RTL_STRINGNAME( release )( *ppThis );
-
- *ppThis = (IMPL_RTL_STRINGDATA*) (&IMPL_RTL_EMPTYSTRING);
- IMPL_RTL_AQUIRE( *ppThis );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( new_WithLength )( IMPL_RTL_STRINGDATA** ppThis, sal_Int32 nLen )
-{
- if ( nLen <= 0 )
- IMPL_RTL_STRINGNAME( new )( ppThis );
- else
- {
- if ( *ppThis)
- IMPL_RTL_STRINGNAME( release )( *ppThis );
-
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nLen );
- OSL_ASSERT(*ppThis != NULL);
- (*ppThis)->length = 0;
-
- {
- IMPL_RTL_STRCODE* pTempStr = (*ppThis)->buffer;
- while ( nLen >= 0 )
- {
- *pTempStr = 0;
- pTempStr++;
- nLen--;
- }
- }
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newFromString )( IMPL_RTL_STRINGDATA** ppThis,
- const IMPL_RTL_STRINGDATA* pStr )
-{
- IMPL_RTL_STRINGDATA* pOrg;
-
- if ( !pStr->length )
- {
- IMPL_RTL_STRINGNAME( new )( ppThis );
- return;
- }
-
- pOrg = *ppThis;
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( pStr->length );
- OSL_ASSERT(*ppThis != NULL);
- rtl_str_ImplCopy( (*ppThis)->buffer, pStr->buffer, pStr->length );
-
- /* must be done at least, if pStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newFromStr )( IMPL_RTL_STRINGDATA** ppThis,
- const IMPL_RTL_STRCODE* pCharStr )
-{
- IMPL_RTL_STRCODE* pBuffer;
- IMPL_RTL_STRINGDATA* pOrg;
- sal_Int32 nLen;
-
- if ( pCharStr )
- {
- const IMPL_RTL_STRCODE* pTempStr = pCharStr;
- while( *pTempStr )
- pTempStr++;
- nLen = pTempStr-pCharStr;
- }
- else
- nLen = 0;
-
- if ( !nLen )
- {
- IMPL_RTL_STRINGNAME( new )( ppThis );
- return;
- }
-
- pOrg = *ppThis;
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nLen );
- OSL_ASSERT(*ppThis != NULL);
- pBuffer = (*ppThis)->buffer;
- do
- {
- *pBuffer = *pCharStr;
- pBuffer++;
- pCharStr++;
- }
- while ( *pCharStr );
-
- /* must be done at least, if pCharStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newFromStr_WithLength )( IMPL_RTL_STRINGDATA** ppThis,
- const IMPL_RTL_STRCODE* pCharStr,
- sal_Int32 nLen )
-{
- IMPL_RTL_STRINGDATA* pOrg;
-
- if ( !pCharStr || (nLen <= 0) )
- {
- IMPL_RTL_STRINGNAME( new )( ppThis );
- return;
- }
-
- pOrg = *ppThis;
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nLen );
- OSL_ASSERT(*ppThis != NULL);
- rtl_str_ImplCopy( (*ppThis)->buffer, pCharStr, nLen );
-
- /* must be done at least, if pCharStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( assign )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr )
-{
- /* must be done at first, if pStr == *ppThis */
- IMPL_RTL_AQUIRE( pStr );
-
- if ( *ppThis )
- IMPL_RTL_STRINGNAME( release )( *ppThis );
-
- *ppThis = pStr;
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRINGNAME( getLength )( const IMPL_RTL_STRINGDATA* pThis )
-{
- return pThis->length;
-}
-
-/* ----------------------------------------------------------------------- */
-
-IMPL_RTL_STRCODE* SAL_CALL IMPL_RTL_STRINGNAME( getStr )( IMPL_RTL_STRINGDATA * pThis )
-{
- return pThis->buffer;
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newConcat )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pLeft,
- IMPL_RTL_STRINGDATA* pRight )
-{
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
-
- /* Test for 0-Pointer - if not, change newReplaceStrAt! */
- if ( !pRight || !pRight->length )
- {
- *ppThis = pLeft;
- IMPL_RTL_AQUIRE( pLeft );
- }
- else if ( !pLeft || !pLeft->length )
- {
- *ppThis = pRight;
- IMPL_RTL_AQUIRE( pRight );
- }
- else
- {
- IMPL_RTL_STRINGDATA* pTempStr = IMPL_RTL_STRINGNAME( ImplAlloc )( pLeft->length + pRight->length );
- OSL_ASSERT(pTempStr != NULL);
- rtl_str_ImplCopy( pTempStr->buffer, pLeft->buffer, pLeft->length );
- rtl_str_ImplCopy( pTempStr->buffer+pLeft->length, pRight->buffer, pRight->length );
- *ppThis = pTempStr;
- }
-
- /* must be done at least, if left or right == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newReplaceStrAt )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr,
- sal_Int32 nIndex,
- sal_Int32 nCount,
- IMPL_RTL_STRINGDATA* pNewSubStr )
-{
- /* Append? */
- if ( nIndex >= pStr->length )
- {
- /* newConcat test, if pNewSubStr is 0 */
- IMPL_RTL_STRINGNAME( newConcat )( ppThis, pStr, pNewSubStr );
- return;
- }
-
- /* negativ index? */
- if ( nIndex < 0 )
- {
- nCount -= nIndex;
- nIndex = 0;
- }
-
- /* not more than the String length could be deleted */
- if ( nCount >= pStr->length-nIndex )
- {
- nCount = pStr->length-nIndex;
-
- /* Assign of NewSubStr? */
- if ( !nIndex && (nCount >= pStr->length) )
- {
- if ( !pNewSubStr )
- IMPL_RTL_STRINGNAME( new )( ppThis );
- else
- IMPL_RTL_STRINGNAME( assign )( ppThis, pNewSubStr );
- return;
- }
- }
-
- /* Assign of Str? */
- if ( !nCount && (!pNewSubStr || !pNewSubStr->length) )
- {
- IMPL_RTL_STRINGNAME( assign )( ppThis, pStr );
- return;
- }
-
- {
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
- IMPL_RTL_STRCODE* pBuffer;
- sal_Int32 nNewLen;
-
- /* Calculate length of the new string */
- nNewLen = pStr->length-nCount;
- if ( pNewSubStr )
- nNewLen += pNewSubStr->length;
-
- /* Alloc New Buffer */
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nNewLen );
- OSL_ASSERT(*ppThis != NULL);
- pBuffer = (*ppThis)->buffer;
- if ( nIndex )
- {
- rtl_str_ImplCopy( pBuffer, pStr->buffer, nIndex );
- pBuffer += nIndex;
- }
- if ( pNewSubStr && pNewSubStr->length )
- {
- rtl_str_ImplCopy( pBuffer, pNewSubStr->buffer, pNewSubStr->length );
- pBuffer += pNewSubStr->length;
- }
- rtl_str_ImplCopy( pBuffer, pStr->buffer+nIndex+nCount, pStr->length-nIndex-nCount );
-
- /* must be done at least, if pStr or pNewSubStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
- }
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newReplace )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr,
- IMPL_RTL_STRCODE cOld,
- IMPL_RTL_STRCODE cNew )
-{
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
- int bChanged = 0;
- sal_Int32 nLen = pStr->length;
- const IMPL_RTL_STRCODE* pCharStr = pStr->buffer;
-
- while ( nLen > 0 )
- {
- if ( *pCharStr == cOld )
- {
- /* Copy String */
- IMPL_RTL_STRCODE* pNewCharStr = IMPL_RTL_STRINGNAME( ImplNewCopy )( ppThis, pStr, pCharStr-pStr->buffer );
-
- /* replace/copy rest of the string */
- if ( pNewCharStr )
- {
- *pNewCharStr = cNew;
- pNewCharStr++;
- pCharStr++;
- nLen--;
-
- while ( nLen > 0 )
- {
- if ( *pCharStr == cOld )
- *pNewCharStr = cNew;
- else
- *pNewCharStr = *pCharStr;
-
- pNewCharStr++;
- pCharStr++;
- nLen--;
- }
- }
-
- bChanged = 1;
- break;
- }
-
- pCharStr++;
- nLen--;
- }
-
- if ( !bChanged )
- {
- *ppThis = pStr;
- IMPL_RTL_AQUIRE( pStr );
- }
-
- /* must be done at least, if pStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newToAsciiLowerCase )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr )
-{
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
- int bChanged = 0;
- sal_Int32 nLen = pStr->length;
- const IMPL_RTL_STRCODE* pCharStr = pStr->buffer;
-
- while ( nLen > 0 )
- {
- /* Between A-Z (65-90), than to lowercase (+32) */
- if ( (*pCharStr >= 65) && (*pCharStr <= 90) )
- {
- /* Copy String */
- IMPL_RTL_STRCODE* pNewCharStr = IMPL_RTL_STRINGNAME( ImplNewCopy )( ppThis, pStr, pCharStr-pStr->buffer );
-
- /* replace/copy rest of the string */
- if ( pNewCharStr )
- {
- /* to lowercase (+32) */
- *pNewCharStr = *pCharStr+32;
- pNewCharStr++;
- pCharStr++;
- nLen--;
-
- while ( nLen > 0 )
- {
- /* Between A-Z (65-90), than to lowercase (+32) */
- if ( (*pCharStr >= 65) && (*pCharStr <= 90) )
- *pNewCharStr = *pCharStr+32;
- else
- *pNewCharStr = *pCharStr;
-
- pNewCharStr++;
- pCharStr++;
- nLen--;
- }
- }
-
- bChanged = 1;
- break;
- }
-
- pCharStr++;
- nLen--;
- }
-
- if ( !bChanged )
- {
- *ppThis = pStr;
- IMPL_RTL_AQUIRE( pStr );
- }
-
- /* must be done at least, if pStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newToAsciiUpperCase )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr )
-{
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
- int bChanged = 0;
- sal_Int32 nLen = pStr->length;
- const IMPL_RTL_STRCODE* pCharStr = pStr->buffer;
-
- while ( nLen > 0 )
- {
- /* Between a-z (97-122), than to uppercase (-32) */
- if ( (*pCharStr >= 97) && (*pCharStr <= 122) )
- {
- /* Copy String */
- IMPL_RTL_STRCODE* pNewCharStr = IMPL_RTL_STRINGNAME( ImplNewCopy )( ppThis, pStr, pCharStr-pStr->buffer );
-
- /* replace/copy rest of the string */
- if ( pNewCharStr )
- {
- /* to uppercase (-32) */
- *pNewCharStr = *pCharStr-32;
- pNewCharStr++;
- pCharStr++;
- nLen--;
-
- while ( nLen > 0 )
- {
- /* Between a-z (97-122), than to uppercase (-32) */
- if ( (*pCharStr >= 97) && (*pCharStr <= 122) )
- *pNewCharStr = *pCharStr-32;
- else
- *pNewCharStr = *pCharStr;
-
- pNewCharStr++;
- pCharStr++;
- nLen--;
- }
- }
-
- bChanged = 1;
- break;
- }
-
- pCharStr++;
- nLen--;
- }
-
- if ( !bChanged )
- {
- *ppThis = pStr;
- IMPL_RTL_AQUIRE( pStr );
- }
-
- /* must be done at least, if pStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-void SAL_CALL IMPL_RTL_STRINGNAME( newTrim )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr )
-{
- IMPL_RTL_STRINGDATA* pOrg = *ppThis;
- const IMPL_RTL_STRCODE* pCharStr = pStr->buffer;
- sal_Int32 nPreSpaces = 0;
- sal_Int32 nPostSpaces = 0;
- sal_Int32 nLen = pStr->length;
- sal_Int32 nIndex = nLen-1;
-
- while ( (nPreSpaces < nLen) && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE(*(pCharStr+nPreSpaces)) ) )
- nPreSpaces++;
-
- while ( (nIndex > nPreSpaces) && rtl_ImplIsWhitespace( IMPL_RTL_USTRCODE(*(pCharStr+nIndex)) ) )
- {
- nPostSpaces++;
- nIndex--;
- }
-
- if ( !nPreSpaces && !nPostSpaces )
- {
- *ppThis = pStr;
- IMPL_RTL_AQUIRE( pStr );
- }
- else
- {
- nLen -= nPostSpaces+nPreSpaces;
- *ppThis = IMPL_RTL_STRINGNAME( ImplAlloc )( nLen );
- OSL_ASSERT(*ppThis != NULL);
- if ( *ppThis )
- rtl_str_ImplCopy( (*ppThis)->buffer, pStr->buffer+nPreSpaces, nLen );
- }
-
- /* must be done at least, if pStr == *ppThis */
- if ( pOrg )
- IMPL_RTL_STRINGNAME( release )( pOrg );
-}
-
-/* ----------------------------------------------------------------------- */
-
-sal_Int32 SAL_CALL IMPL_RTL_STRINGNAME( getToken )( IMPL_RTL_STRINGDATA** ppThis,
- IMPL_RTL_STRINGDATA* pStr,
- sal_Int32 nToken,
- IMPL_RTL_STRCODE cTok,
- sal_Int32 nIndex )
-{
- const IMPL_RTL_STRCODE* pCharStr = pStr->buffer;
- const IMPL_RTL_STRCODE* pCharStrStart;
- const IMPL_RTL_STRCODE* pOrgCharStr;
- sal_Int32 nLen = pStr->length-nIndex;
- sal_Int32 nTokCount = 0;
-
- // Set ppThis to an empty string and return -1 if either nToken or nIndex is
- // negative:
- if (nIndex < 0) {
- nToken = -1;
- }
-
- pCharStr += nIndex;
- pOrgCharStr = pCharStr;
- pCharStrStart = pCharStr;
- while ( nLen > 0 )
- {
- if ( *pCharStr == cTok )
- {
- nTokCount++;
-
- if ( nTokCount == nToken )
- pCharStrStart = pCharStr+1;
- else
- {
- if ( nTokCount > nToken )
- break;
- }
- }
-
- pCharStr++;
- nLen--;
- }
-
- if ( (nToken < 0) || (nTokCount < nToken) || (pCharStr == pCharStrStart) )
- {
- IMPL_RTL_STRINGNAME( new )( ppThis );
- if( (nToken < 0) || (nTokCount < nToken ) )
- return -1;
- else if( nLen > 0 )
- return nIndex+(pCharStr-pOrgCharStr)+1;
- else return -1;
- }
- else
- {
- IMPL_RTL_STRINGNAME( newFromStr_WithLength )( ppThis, pCharStrStart, pCharStr-pCharStrStart );
- if ( nLen )
- return nIndex+(pCharStr-pOrgCharStr)+1;
- else
- return -1;
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */