blob: ddec6dcf1aca61dc1024bd1125b575af6bde2fb4 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _STRING_HXX
#define _STRING_HXX
#include <tools/solar.h>
#include <osl/thread.h>
#include <rtl/textenc.h>
#include <rtl/textcvt.h>
#ifndef _RTL_STRING_HXX
#include <rtl/string.hxx>
#endif
#ifndef _RTL_USTRING_HXX
#include <rtl/ustring.hxx>
#endif
#include "tools/toolsdllapi.h"
/*******************************************************************************
*
* THIS CODE IS DEPRECATED. DO NOT USE IT IN ANY NEW CODE.
*
* Use the string classes in rtl/ustring.hxx and rtl/ustrbuf.hxx (and
* rtl/string.hxx and rtl/strbuf.hxx for byte-sized strings) instead. If you
* feel functionality missing from those string classes, please request
* improvements on discuss@openoffice.org.
*
* There will not be any fixes to the code here.
******************************************************************************/
// -----------------------------------------------------------------------
class ResId;
class String;
class ByteString;
class UniString;
// -----------------------------------------------------------------------
#define BYTESTRING_TO_UNISTRING_CVTFLAGS (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MAPTOPRIVATE |\
RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_DEFAULT |\
RTL_TEXTTOUNICODE_FLAGS_INVALID_DEFAULT)
#define UNISTRING_TO_BYTESTRING_CVTFLAGS (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_DEFAULT |\
RTL_UNICODETOTEXT_FLAGS_INVALID_DEFAULT |\
RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE |\
RTL_UNICODETOTEXT_FLAGS_PRIVATE_MAPTO0 |\
RTL_UNICODETOTEXT_FLAGS_NOCOMPOSITE)
// -----------------------------------------------------------------------
// -----------
// - CharSet -
// -----------
#ifndef ENUM_CHARSET_DECLARED
#define ENUM_CHARSET_DECLARED
typedef rtl_TextEncoding CharSet;
#endif // ENUM_CHARSET_DECLARED
inline rtl_TextEncoding gsl_getSystemTextEncoding()
{
return osl_getThreadTextEncoding();
}
// -----------------------------------------------------------------------
// -----------
// - LineEnd -
// -----------
enum LineEnd { LINEEND_CR, LINEEND_LF, LINEEND_CRLF };
inline LineEnd GetSystemLineEnd()
{
#if defined UNX
return LINEEND_LF;
#else
return LINEEND_CRLF;
#endif
}
// -----------------------------------------------------------------------
// ----------------
// - String-Types -
// ----------------
#ifdef STRING32
#define STRING_NOTFOUND ((xub_StrLen)0x7FFFFFFF)
#define STRING_MATCH ((xub_StrLen)0x7FFFFFFF)
#define STRING_LEN ((xub_StrLen)0x7FFFFFFF)
#define STRING_MAXLEN ((xub_StrLen)0x7FFFFFFF)
#else
#define STRING_NOTFOUND ((xub_StrLen)0xFFFF)
#define STRING_MATCH ((xub_StrLen)0xFFFF)
#define STRING_LEN ((xub_StrLen)0xFFFF)
#define STRING_MAXLEN ((xub_StrLen)0xFFFF)
#endif
enum StringCompare { COMPARE_LESS = -1, COMPARE_EQUAL = 0, COMPARE_GREATER = 1 };
// -----------------------------------------------------------------------
// ------------------------
// - Interne String-Daten -
// ------------------------
// Daten vom String, mit denen der String verwaltet wird
// Nur fuer Debug-Zwecke (darf nie direkt einem String zugewiesen werden)
#ifdef SAL_W32
#pragma pack(push, 8)
#elif defined(SAL_OS2)
#pragma pack(1)
#endif
typedef struct _ByteStringData
{
sal_Int32 mnRefCount; // Referenz counter
sal_Int32 mnLen; // Length of the String
sal_Char maStr[1]; // CharArray (String)
} ByteStringData;
#ifdef SAL_W32
#pragma pack(pop)
#elif defined(SAL_OS2)
#pragma pack()
#endif
// --------------
// - ByteString -
// --------------
class TOOLS_DLLPUBLIC ByteString
{
friend class UniString;
TOOLS_DLLPRIVATE void InitStringRes( const UniString& rStr );
private:
ByteStringData* mpData;
TOOLS_DLLPRIVATE inline void ImplCopyData();
TOOLS_DLLPRIVATE inline char * ImplCopyStringData(char *);
TOOLS_DLLPRIVATE void ImplUpdateStringFromUniString(
sal_Unicode const *, sal_Size, rtl_TextEncoding, sal_uInt32);
TOOLS_DLLPRIVATE void ImplStringConvert(
rtl_TextEncoding, rtl_TextEncoding, sal_Bool);
ByteString( const int* pDummy ); // not implemented: to prevent ByteString( NULL )
ByteString(int); // not implemented; to detect misuses
// of ByteString(sal_Char);
void Assign(int); // not implemented; to detect misuses of
// Assign(sal_Char)
void operator =(int); // not implemented; to detect misuses
// of operator =(sal_Char)
void Append(int); // not implemented; to detect misuses of
// Append(char)
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( sal_Char c );
ByteString( const UniString& rUniStr,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = UNISTRING_TO_BYTESTRING_CVTFLAGS );
ByteString( const UniString& rUniStr, xub_StrLen nPos, xub_StrLen nLen,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = UNISTRING_TO_BYTESTRING_CVTFLAGS );
ByteString( const sal_Unicode* pUniStr,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = UNISTRING_TO_BYTESTRING_CVTFLAGS );
ByteString( const sal_Unicode* pUniStr, xub_StrLen nLen,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = UNISTRING_TO_BYTESTRING_CVTFLAGS );
~ByteString();
operator rtl::OString () const
{
return rtl::OString (reinterpret_cast<rtl_String*>(mpData));
}
static ByteString CreateFromInt32( sal_Int32 n, sal_Int16 nRadix = 10 );
static ByteString CreateFromInt64( sal_Int64 n, sal_Int16 nRadix = 10 );
static ByteString CreateFromFloat( float f );
static ByteString CreateFromDouble( double d );
static const ByteString& EmptyString();
sal_Int32 ToInt32() const;
sal_Int64 ToInt64() const;
float ToFloat() const;
double ToDouble() const;
ByteString& Assign( const ByteString& rStr );
ByteString& Assign( const rtl::OString& rStr );
ByteString& Assign( const sal_Char* pCharStr );
ByteString& Assign( const sal_Char* pCharStr, xub_StrLen nLen );
ByteString& Assign( sal_Char c );
ByteString& operator =( const ByteString& rStr )
{ return Assign( rStr ); }
ByteString& operator =( const rtl::OString& rStr )
{ return Assign( rStr ); }
ByteString& operator =( const sal_Char* pCharStr )
{ return Assign( pCharStr ); }
ByteString& operator =( const sal_Char c )
{ return Assign( c ); }
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 )
{ return Append( pCharStr ); }
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]; }
xub_StrLen Len() const { return (xub_StrLen)mpData->mnLen; }
ByteString& Insert( const ByteString& rStr, xub_StrLen nIndex = STRING_LEN );
ByteString& Insert( const ByteString& rStr, xub_StrLen nPos, xub_StrLen nLen,
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;
ByteString& Fill( xub_StrLen nCount, sal_Char cFillChar = ' ' );
ByteString& Expand( xub_StrLen nCount, sal_Char cExpandChar = ' ' );
ByteString& EraseLeadingChars( sal_Char c = ' ' );
ByteString& EraseTrailingChars( sal_Char c = ' ' );
ByteString& EraseLeadingAndTrailingChars( sal_Char c = ' ' );
ByteString& EraseAllChars( sal_Char c = ' ' );
ByteString& Reverse();
ByteString& Convert( rtl_TextEncoding eSource,
rtl_TextEncoding eTarget,
sal_Bool bReplace = sal_True );
static sal_Char Convert( sal_Char c, rtl_TextEncoding eSource,
rtl_TextEncoding eTarget,
sal_Bool bReplace = sal_True );
static sal_Unicode ConvertToUnicode( sal_Char c,
rtl_TextEncoding eTextEncoding );
static sal_Char ConvertFromUnicode( sal_Unicode c,
rtl_TextEncoding eTextEncoding,
sal_Bool bReplace = sal_True );
static sal_Unicode ConvertToUnicode( const sal_Char* pChar, sal_Size* pLen,
rtl_TextEncoding eTextEncoding );
static sal_Size ConvertFromUnicode( sal_Unicode c, sal_Char* pBuf, sal_Size nBufLen,
rtl_TextEncoding eTextEncoding,
sal_Bool bReplace = sal_True );
ByteString& ConvertLineEnd( LineEnd eLineEnd );
ByteString& ConvertLineEnd()
{ return ConvertLineEnd( GetSystemLineEnd() ); }
sal_Bool IsLowerAscii() const;
sal_Bool IsUpperAscii() const;
sal_Bool IsAlphaAscii() const;
sal_Bool IsNumericAscii() const;
sal_Bool IsAlphaNumericAscii() const;
ByteString& ToLowerAscii();
ByteString& ToUpperAscii();
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 ByteString& rStr,
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;
sal_Bool EqualsIgnoreCaseAscii( const ByteString& rStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool EqualsIgnoreCaseAscii( const sal_Char* pCharStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
xub_StrLen Match( const ByteString& rStr ) const;
xub_StrLen Match( 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 SearchBackward( sal_Char c, xub_StrLen nIndex = STRING_LEN ) const;
xub_StrLen SearchChar( const sal_Char* pChars, xub_StrLen nIndex = 0 ) const;
xub_StrLen SearchCharBackward( const sal_Char* pChars, xub_StrLen nIndex = STRING_LEN ) const;
xub_StrLen SearchAndReplace( sal_Char c, sal_Char cRep, xub_StrLen nIndex = 0 );
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;
xub_StrLen GetQuotedTokenCount( const ByteString& rQuotedPairs, sal_Char cTok = ';' ) const;
ByteString GetQuotedToken( xub_StrLen nToken, const ByteString& rQuotedPairs,
sal_Char cTok, xub_StrLen& rIndex ) const;
ByteString GetQuotedToken( xub_StrLen nToken, const ByteString& rQuotedPairs,
sal_Char cTok = ';' ) const;
const sal_Char* GetBuffer() const { return mpData->maStr; }
sal_Char* GetBufferAccess();
void ReleaseBufferAccess( xub_StrLen nLen = STRING_LEN );
sal_Char* AllocBuffer( xub_StrLen nLen );
friend sal_Bool operator == ( const ByteString& rStr1, const ByteString& rStr2 )
{ return rStr1.Equals( rStr2 ); }
friend sal_Bool operator == ( const ByteString& rStr, const sal_Char* pCharStr )
{ return rStr.Equals( pCharStr ); }
friend sal_Bool operator == ( const sal_Char* pCharStr, const ByteString& rStr )
{ return rStr.Equals( pCharStr ); }
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 (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
{
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 );
}
inline ByteString ByteString::GetQuotedToken( xub_StrLen nToken, const ByteString& rQuotedPairs,
sal_Char cTok ) const
{
xub_StrLen nTempPos = 0;
return GetQuotedToken( nToken, rQuotedPairs, cTok, nTempPos );
}
// -----------------------------------------------------------------------
// ------------------------
// - Interne String-Daten -
// ------------------------
// Daten vom String, mit denen der String verwaltet wird
// Nur fuer Debug-Zwecke (darf nie direkt einem String zugewiesen werden)
#ifdef SAL_W32
#pragma pack(push, 4)
#elif defined(SAL_OS2)
#pragma pack(1)
#endif
typedef struct _UniStringData
{
sal_Int32 mnRefCount; // Referenz counter
sal_Int32 mnLen; // Length of the String
sal_Unicode maStr[1]; // CharArray (String)
} UniStringData;
#ifdef SAL_W32
#pragma pack(pop)
#elif defined(SAL_OS2)
#pragma pack()
#endif
// -------------
// - UniString -
// -------------
class TOOLS_DLLPUBLIC UniString
{
friend class ByteString;
TOOLS_DLLPRIVATE void InitStringRes( const sal_Char* pUTF8Str, sal_Int32 nLen );
private:
UniStringData* mpData;
TOOLS_DLLPRIVATE inline void ImplCopyData();
TOOLS_DLLPRIVATE inline sal_Unicode * ImplCopyStringData(sal_Unicode *);
UniString( const int* pDummy ); // not implemented: to prevent UniString( NULL )
UniString(int); // not implemented; to detect misuses of
// UniString(sal_Unicode)
void Assign(int); // not implemented; to detect misuses of
// Assign(sal_Unicode)
void operator =(int); // not implemented; to detect misuses
// of operator =(sal_Unicode)
void Append(int); // not implemented; to detect misuses of
// Append(sal_Unicode)
void operator +=(int); // not implemented; to detect misuses
// of operator +=(sal_Unicode)
public:
UniString();
UniString( const ResId& rResId );
UniString( const UniString& rStr );
UniString( const UniString& rStr, xub_StrLen nPos, xub_StrLen nLen );
UniString( const rtl::OUString& rStr );
UniString( const sal_Unicode* pCharStr );
UniString( const sal_Unicode* pCharStr, xub_StrLen nLen );
UniString( sal_Unicode c );
UniString(char c); // ...but allow "UniString('a')"
UniString( const ByteString& rByteStr,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = BYTESTRING_TO_UNISTRING_CVTFLAGS );
UniString( const ByteString& rByteStr, xub_StrLen nPos, xub_StrLen nLen,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = BYTESTRING_TO_UNISTRING_CVTFLAGS );
UniString( const sal_Char* pByteStr,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = BYTESTRING_TO_UNISTRING_CVTFLAGS );
UniString( const sal_Char* pByteStr, xub_StrLen nLen,
rtl_TextEncoding eTextEncoding,
sal_uInt32 nCvtFlags = BYTESTRING_TO_UNISTRING_CVTFLAGS );
~UniString();
operator rtl::OUString () const
{
return rtl::OUString (reinterpret_cast<rtl_uString*>(mpData));
}
UniString intern() const;
static UniString CreateFromAscii( const sal_Char* pAsciiStr );
static UniString CreateFromAscii( const sal_Char* pAsciiStr, xub_StrLen nLen );
static UniString CreateFromInt32( sal_Int32 n, sal_Int16 nRadix = 10 );
static UniString CreateFromInt64( sal_Int64 n, sal_Int16 nRadix = 10 );
static UniString CreateFromFloat( float f );
static UniString CreateFromDouble( double d );
static const UniString& EmptyString();
sal_Int32 ToInt32() const;
sal_Int64 ToInt64() const;
float ToFloat() const;
double ToDouble() const;
UniString& Assign( const UniString& rStr );
UniString& Assign( const rtl::OUString& rStr );
UniString& Assign( const sal_Unicode* pCharStr );
UniString& Assign( const sal_Unicode* pCharStr, xub_StrLen nLen );
UniString& Assign( sal_Unicode c );
inline UniString & Assign(char c) // ...but allow "Assign('a')"
{ return Assign(static_cast< sal_Unicode >(c)); }
UniString& AssignAscii( const sal_Char* pAsciiStr );
UniString& AssignAscii( const sal_Char* pAsciiStr, xub_StrLen nLen );
UniString& operator =( const UniString& rStr )
{ return Assign( rStr ); }
UniString& operator =( const rtl::OUString& rStr )
{ return Assign( rStr ); }
UniString& operator =( const sal_Unicode* pCharStr )
{ return Assign( pCharStr ); }
UniString& operator =( sal_Unicode c )
{ return Assign( c ); }
inline UniString & operator =(char c) // ...but allow "= 'a'"
{ return operator =(static_cast< sal_Unicode >(c)); }
UniString& Append( const UniString& rStr );
UniString& Append( const sal_Unicode* pCharStr );
UniString& Append( const sal_Unicode* pCharStr, xub_StrLen nLen );
UniString& Append( sal_Unicode c );
inline UniString & Append(char c) // ...but allow "Append('a')"
{ return Append(static_cast< sal_Unicode >(c)); }
UniString& AppendAscii( const sal_Char* pAsciiStr );
UniString& AppendAscii( const sal_Char* pAsciiStr, xub_StrLen nLen );
UniString& operator +=( const UniString& rStr )
{ return Append( rStr ); }
UniString& operator +=( const sal_Unicode* pCharStr )
{ return Append( pCharStr ); }
UniString& operator +=( sal_Unicode c )
{ return Append( c ); }
inline UniString & operator +=(char c) // ...but allow "+= 'a'"
{ return operator +=(static_cast< sal_Unicode >(c)); }
void SetChar( xub_StrLen nIndex, sal_Unicode c );
sal_Unicode GetChar( xub_StrLen nIndex ) const
{ return mpData->maStr[nIndex]; }
xub_StrLen Len() const { return (xub_StrLen)mpData->mnLen; }
UniString& Insert( const UniString& rStr, xub_StrLen nIndex = STRING_LEN );
UniString& Insert( const UniString& rStr, xub_StrLen nPos, xub_StrLen nLen,
xub_StrLen nIndex = STRING_LEN );
UniString& Insert( const sal_Unicode* pCharStr, xub_StrLen nIndex = STRING_LEN );
UniString& Insert( sal_Unicode c, xub_StrLen nIndex = STRING_LEN );
UniString& InsertAscii( const sal_Char* pAsciiStr, xub_StrLen nIndex = STRING_LEN );
UniString& Replace( xub_StrLen nIndex, xub_StrLen nLen, const UniString& rStr );
UniString& ReplaceAscii( xub_StrLen nIndex, xub_StrLen nLen,
const sal_Char* pAsciiStr, xub_StrLen nStrLen = STRING_LEN );
UniString& Erase( xub_StrLen nIndex = 0, xub_StrLen nCount = STRING_LEN );
UniString Copy( xub_StrLen nIndex = 0, xub_StrLen nCount = STRING_LEN ) const;
UniString& Fill( xub_StrLen nCount, sal_Unicode cFillChar = ' ' );
UniString& Expand( xub_StrLen nCount, sal_Unicode cExpandChar = ' ' );
UniString& EraseLeadingChars( sal_Unicode c = ' ' );
UniString& EraseTrailingChars( sal_Unicode c = ' ' );
UniString& EraseLeadingAndTrailingChars( sal_Unicode c = ' ' );
UniString& EraseAllChars( sal_Unicode c = ' ' );
UniString& Reverse();
UniString& ConvertLineEnd( LineEnd eLineEnd );
UniString& ConvertLineEnd()
{ return ConvertLineEnd( GetSystemLineEnd() ); }
UniString& ToLowerAscii();
UniString& ToUpperAscii();
StringCompare CompareTo( const UniString& rStr,
xub_StrLen nLen = STRING_LEN ) const;
StringCompare CompareTo( const sal_Unicode* pCharStr,
xub_StrLen nLen = STRING_LEN ) const;
StringCompare CompareToAscii( const sal_Char* pAsciiStr,
xub_StrLen nLen = STRING_LEN ) const;
StringCompare CompareIgnoreCaseToAscii( const UniString& rStr,
xub_StrLen nLen = STRING_LEN ) const;
StringCompare CompareIgnoreCaseToAscii( const sal_Unicode* pCharStr,
xub_StrLen nLen = STRING_LEN ) const;
StringCompare CompareIgnoreCaseToAscii( const sal_Char* pAsciiStr,
xub_StrLen nLen = STRING_LEN ) const;
sal_Bool Equals( const UniString& rStr ) const;
sal_Bool Equals( const sal_Unicode* pCharStr ) const;
sal_Bool EqualsAscii( const sal_Char* pAsciiStr ) const;
sal_Bool EqualsIgnoreCaseAscii( const UniString& rStr ) const;
sal_Bool EqualsIgnoreCaseAscii( const sal_Unicode* pCharStr ) const;
sal_Bool EqualsIgnoreCaseAscii( const sal_Char* pAsciiStr ) const;
sal_Bool Equals( const UniString& rStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool Equals( const sal_Unicode* pCharStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool EqualsAscii( const sal_Char* pAsciiStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool EqualsIgnoreCaseAscii( const UniString& rStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool EqualsIgnoreCaseAscii( const sal_Unicode* pCharStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
sal_Bool EqualsIgnoreCaseAscii( const sal_Char* pAsciiStr,
xub_StrLen nIndex, xub_StrLen nLen ) const;
xub_StrLen Match( const UniString& rStr ) const;
xub_StrLen Match( const sal_Unicode* pCharStr ) const;
xub_StrLen Search( sal_Unicode c, xub_StrLen nIndex = 0 ) const;
xub_StrLen Search( const UniString& rStr, xub_StrLen nIndex = 0 ) const;
xub_StrLen Search( const sal_Unicode* pCharStr, xub_StrLen nIndex = 0 ) const;
xub_StrLen SearchAscii( const sal_Char* pAsciiStr, xub_StrLen nIndex = 0 ) const;
xub_StrLen SearchBackward( sal_Unicode c, xub_StrLen nIndex = STRING_LEN ) const;
xub_StrLen SearchChar( const sal_Unicode* pChars, xub_StrLen nIndex = 0 ) const;
xub_StrLen SearchCharBackward( const sal_Unicode* pChars, xub_StrLen nIndex = STRING_LEN ) const;
xub_StrLen SearchAndReplace( sal_Unicode c, sal_Unicode cRep,
xub_StrLen nIndex = 0 );
xub_StrLen SearchAndReplace( const UniString& rStr, const UniString& rRepStr,
xub_StrLen nIndex = 0 );
xub_StrLen SearchAndReplace( const sal_Unicode* pCharStr, const UniString& rRepStr,
xub_StrLen nIndex = 0 );
xub_StrLen SearchAndReplaceAscii( const sal_Char* pAsciiStr, const UniString& rRepStr,
xub_StrLen nIndex = 0 );
void SearchAndReplaceAll( sal_Unicode c, sal_Unicode cRep );
void SearchAndReplaceAll( const UniString& rStr, const UniString& rRepStr );
void SearchAndReplaceAll( const sal_Unicode* pCharStr, const UniString& rRepStr );
void SearchAndReplaceAllAscii( const sal_Char* pAsciiStr, const UniString& rRepStr );
xub_StrLen GetTokenCount( sal_Unicode cTok = ';' ) const;
void SetToken( xub_StrLen nToken, sal_Unicode cTok, const UniString& rStr,
xub_StrLen nIndex = 0 );
UniString GetToken( xub_StrLen nToken, sal_Unicode cTok, xub_StrLen& rIndex ) const;
UniString GetToken( xub_StrLen nToken, sal_Unicode cTok = ';' ) const;
xub_StrLen GetQuotedTokenCount( const UniString& rQuotedPairs, sal_Unicode cTok = ';' ) const;
UniString GetQuotedToken( xub_StrLen nToken, const UniString& rQuotedPairs,
sal_Unicode cTok, xub_StrLen& rIndex ) const;
UniString GetQuotedToken( xub_StrLen nToken, const UniString& rQuotedPairs,
sal_Unicode cTok = ';' ) const;
const sal_Unicode* GetBuffer() const { return mpData->maStr; }
sal_Unicode* GetBufferAccess();
void ReleaseBufferAccess( xub_StrLen nLen = STRING_LEN );
sal_Unicode* AllocBuffer( xub_StrLen nLen );
friend sal_Bool operator == ( const UniString& rStr1, const UniString& rStr2 )
{ return rStr1.Equals( rStr2 ); }
friend sal_Bool operator != ( const UniString& rStr1, const UniString& rStr2 )
{ return !(operator == ( rStr1, rStr2 )); }
friend sal_Bool operator < ( const UniString& rStr1, const UniString& rStr2 )
{ return (rStr1.CompareTo( rStr2 ) == COMPARE_LESS); }
friend sal_Bool operator > ( const UniString& rStr1, const UniString& rStr2 )
{ return (rStr1.CompareTo( rStr2 ) == COMPARE_GREATER); }
friend sal_Bool operator <= ( const UniString& rStr1, const UniString& rStr2 )
{ return !(operator > ( rStr1, rStr2 )); }
friend sal_Bool operator >= ( const UniString& rStr1, const UniString& rStr2 )
{ return !(operator < ( rStr1, rStr2 )); }
};
inline UniString UniString::Copy( xub_StrLen nIndex, xub_StrLen nCount ) const
{
return UniString( *this, nIndex, nCount );
}
inline UniString UniString::GetToken( xub_StrLen nToken, sal_Unicode cTok ) const
{
xub_StrLen nTempPos = 0;
return GetToken( nToken, cTok, nTempPos );
}
inline UniString UniString::GetQuotedToken( xub_StrLen nToken, const UniString& rQuotedPairs,
sal_Unicode cTok ) const
{
xub_StrLen nTempPos = 0;
return GetQuotedToken( nToken, rQuotedPairs, cTok, nTempPos );
}
#endif // _STRING_HXX