29 #ifndef _RTL_USTRING_HXX_
30 #define _RTL_USTRING_HXX_
43 #if defined EXCEPTIONS_OFF
54 #ifdef RTL_STRING_UNITTEST
55 #define rtl rtlunittest
61 #ifdef RTL_STRING_UNITTEST
98 class DO_NOT_ACQUIRE{};
199 #ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
203 OUString(
const char (&literal)[ N ] )
207 #ifdef RTL_STRING_UNITTEST
208 rtl_string_unittest_const_literal =
true;
218 #ifndef RTL_STRING_UNITTEST
225 rtl_string_unittest_invalid_conversion =
true;
228 #else // HAVE_SFINAE_ANONYMOUS_BROKEN
229 template<
typename T >
234 #ifdef RTL_STRING_UNITTEST
235 rtl_string_unittest_const_literal =
true;
239 #endif // HAVE_SFINAE_ANONYMOUS_BROKEN
242 #ifdef RTL_STRING_UNITTEST
247 template<
typename T >
252 rtl_string_unittest_invalid_conversion =
true;
258 template<
typename T >
259 OUString(
const T&,
typename internal::ExceptCharArrayDetector< T >::Type = internal::Dummy() )
263 rtl_string_unittest_invalid_conversion =
true;
288 #if defined EXCEPTIONS_OFF
291 throw std::bad_alloc();
313 sal_uInt32
const * codePoints, sal_Int32 codePointCount):
318 #if defined EXCEPTIONS_OFF
321 throw std::bad_alloc();
346 {
return *
reinterpret_cast< OUString const *
>( ppHandle ); }
371 template<
typename T >
409 return pData->length == 0;
447 str.pData->buffer, str.pData->length );
468 str.pData->buffer, str.pData->length, maxLength );
486 str.pData->buffer, str.pData->length );
502 if ( pData->length != str.pData->length )
504 if ( pData == str.pData )
507 str.pData->buffer, str.pData->length ) == 0;
526 if ( pData->length != str.pData->length )
528 if ( pData == str.pData )
531 str.pData->buffer, str.pData->length ) == 0;
539 template<
typename T >
566 str.pData->buffer, str.pData->length, str.pData->length ) == 0;
574 template<
typename T >
602 str.pData->buffer, str.pData->length,
603 str.pData->length ) == 0;
611 template<
typename T >
659 asciiStr, maxLength );
684 asciiStr, asciiStrLength );
727 if ( pData->length != asciiStrLength )
731 pData->buffer, asciiStr, asciiStrLength );
802 if ( pData->length != asciiStrLength )
832 asciiStr, asciiStrLength ) == 0;
839 #if SAL_TYPES_SIZEOFLONG == 8
870 asciiStr, asciiStrLength ) == 0;
877 #if SAL_TYPES_SIZEOFLONG == 8
902 template<
typename T >
925 return asciiStrLength <= pData->length
927 pData->buffer + pData->length - asciiStrLength, asciiStr,
955 template<
typename T >
977 char const * asciiStr, sal_Int32 asciiStrLength)
const
979 return asciiStrLength <= pData->length
981 pData->buffer + pData->length - asciiStrLength,
982 asciiStrLength, asciiStr, asciiStrLength)
987 {
return rStr1.equals(rStr2); }
989 {
return rStr1.compareTo( pStr2 ) == 0; }
991 {
return OUString( pStr1 ).compareTo( rStr2 ) == 0; }
1001 {
return rStr1.compareTo( rStr2 ) < 0; }
1003 {
return rStr1.compareTo( rStr2 ) > 0; }
1005 {
return rStr1.compareTo( rStr2 ) <= 0; }
1007 {
return rStr1.compareTo( rStr2 ) >= 0; }
1016 template<
typename T >
1028 template<
typename T >
1040 template<
typename T >
1052 template<
typename T >
1086 return (ret < 0 ? ret : ret+fromIndex);
1138 str.pData->buffer, str.pData->length );
1139 return (ret < 0 ? ret : ret+fromIndex);
1147 template<
typename T >
1151 pData->buffer + fromIndex, pData->length - fromIndex, literal,
1153 return ret < 0 ? ret : ret + fromIndex;
1180 char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) const
1184 pData->buffer + fromIndex, pData->length - fromIndex, str, len);
1185 return ret < 0 ? ret : ret + fromIndex;
1192 #if SAL_TYPES_SIZEOFLONG == 8
1214 str.pData->buffer, str.pData->length );
1237 str.pData->buffer, str.pData->length );
1245 template<
typename T >
1275 pData->buffer, pData->length, str, len);
1289 assert(beginIndex >= 0 && beginIndex <=
getLength());
1290 if ( beginIndex == 0 )
1294 rtl_uString* pNew = 0;
1296 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1313 assert(beginIndex >= 0 && beginIndex <=
getLength() && count >= 0);
1314 if ( (beginIndex == 0) && (count ==
getLength()) )
1318 rtl_uString* pNew = 0;
1320 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1334 rtl_uString* pNew = 0;
1336 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1341 return rStr1.concat( rStr2 );
1359 rtl_uString* pNew = 0;
1361 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1379 rtl_uString* pNew = 0;
1381 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1405 rtl_uString * s = 0;
1408 &s, pData, from.pData, to.pData, index == 0 ? &i : index);
1430 template<
typename T >
1432 sal_Int32 * index = 0)
const
1434 rtl_uString * s = 0;
1459 template<
typename T1,
typename T2 >
1463 rtl_uString * s = 0;
1485 rtl_uString * s = 0;
1503 template<
typename T >
1506 rtl_uString * s = 0;
1524 template<
typename T1,
typename T2 >
1528 rtl_uString * s = 0;
1547 rtl_uString* pNew = 0;
1549 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1564 rtl_uString* pNew = 0;
1566 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1582 rtl_uString* pNew = 0;
1584 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1613 rtl_uString * pNew = 0;
1615 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1633 return getToken(count, separator, n);
1657 return pData->buffer[0];
1732 rtl_uString * pNew = 0;
1735 #if defined EXCEPTIONS_OFF
1738 throw std::bad_alloc();
1741 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1772 sal_uInt32 *pInfo = NULL )
1774 rtl_uString * pNew = 0;
1776 convertFlags, pInfo );
1778 #if defined EXCEPTIONS_OFF
1781 throw std::bad_alloc();
1784 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1812 sal_uInt32 nFlags)
const
1815 pData->length, nEncoding, nFlags);
1870 sal_Int32 * indexUtf16, sal_Int32 incrementCodePoints = 1)
const
1873 pData, indexUtf16, incrementCodePoints);
1889 rtl_uString* pNewData = 0;
1891 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1917 rtl_uString* pNewData = 0;
1919 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1934 rtl_uString* pNewData = 0;
1936 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1950 rtl_uString* pNewData = 0;
1952 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1966 rtl_uString* pNewData = 0;
1968 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1988 rtl_uString* pNew = 0;
1990 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1998 #ifdef RTL_STRING_UNITTEST
2001 typedef rtlunittest::OUString OUString;
2025 {
return (
size_t)rString.
hashCode(); }