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
99 class DO_NOT_ACQUIRE{};
200 #ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
204 OUString(
const char (&literal)[ N ] )
208 #ifdef RTL_STRING_UNITTEST
209 rtl_string_unittest_const_literal =
true;
219 #ifndef RTL_STRING_UNITTEST
226 rtl_string_unittest_invalid_conversion =
true;
229 #else // HAVE_SFINAE_ANONYMOUS_BROKEN
230 template<
typename T >
235 #ifdef RTL_STRING_UNITTEST
236 rtl_string_unittest_const_literal =
true;
240 #endif // HAVE_SFINAE_ANONYMOUS_BROKEN
243 #ifdef RTL_STRING_UNITTEST
248 template<
typename T >
253 rtl_string_unittest_invalid_conversion =
true;
259 template<
typename T >
260 OUString(
const T&,
typename internal::ExceptCharArrayDetector< T >::Type = internal::Dummy() )
264 rtl_string_unittest_invalid_conversion =
true;
289 #if defined EXCEPTIONS_OFF
292 throw std::bad_alloc();
314 sal_uInt32
const * codePoints, sal_Int32 codePointCount):
319 #if defined EXCEPTIONS_OFF
322 throw std::bad_alloc();
347 {
return *
reinterpret_cast< OUString const *
>( ppHandle ); }
372 template<
typename T >
451 str.pData->buffer, str.pData->length );
472 str.pData->buffer, str.pData->length, maxLength );
490 str.pData->buffer, str.pData->length );
506 if ( pData->length != str.pData->length )
508 if ( pData == str.pData )
511 str.pData->buffer, str.pData->length ) == 0;
530 if ( pData->length != str.pData->length )
532 if ( pData == str.pData )
535 str.pData->buffer, str.pData->length ) == 0;
543 template<
typename T >
570 str.pData->buffer, str.pData->length, str.pData->length ) == 0;
578 template<
typename T >
606 str.pData->buffer, str.pData->length,
607 str.pData->length ) == 0;
615 template<
typename T >
663 asciiStr, maxLength );
688 asciiStr, asciiStrLength );
731 if ( pData->length != asciiStrLength )
735 pData->buffer, asciiStr, asciiStrLength );
806 if ( pData->length != asciiStrLength )
836 asciiStr, asciiStrLength ) == 0;
843 #if SAL_TYPES_SIZEOFLONG == 8
874 asciiStr, asciiStrLength ) == 0;
881 #if SAL_TYPES_SIZEOFLONG == 8
906 template<
typename T >
929 return asciiStrLength <= pData->length
931 pData->buffer + pData->length - asciiStrLength, asciiStr,
959 template<
typename T >
981 char const * asciiStr, sal_Int32 asciiStrLength)
const
983 return asciiStrLength <= pData->length
985 pData->buffer + pData->length - asciiStrLength,
986 asciiStrLength, asciiStr, asciiStrLength)
991 {
return rStr1.equals(rStr2); }
993 {
return rStr1.compareTo( pStr2 ) == 0; }
995 {
return OUString( pStr1 ).compareTo( rStr2 ) == 0; }
1005 {
return rStr1.compareTo( rStr2 ) < 0; }
1007 {
return rStr1.compareTo( rStr2 ) > 0; }
1009 {
return rStr1.compareTo( rStr2 ) <= 0; }
1011 {
return rStr1.compareTo( rStr2 ) >= 0; }
1020 template<
typename T >
1032 template<
typename T >
1044 template<
typename T >
1056 template<
typename T >
1090 return (ret < 0 ? ret : ret+fromIndex);
1142 str.pData->buffer, str.pData->length );
1143 return (ret < 0 ? ret : ret+fromIndex);
1151 template<
typename T >
1155 pData->buffer + fromIndex, pData->length - fromIndex, literal,
1157 return ret < 0 ? ret : ret + fromIndex;
1184 char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) const
1188 pData->buffer + fromIndex, pData->length - fromIndex, str, len);
1189 return ret < 0 ? ret : ret + fromIndex;
1196 #if SAL_TYPES_SIZEOFLONG == 8
1218 str.pData->buffer, str.pData->length );
1241 str.pData->buffer, str.pData->length );
1249 template<
typename T >
1279 pData->buffer, pData->length, str, len);
1293 assert(beginIndex >= 0 && beginIndex <=
getLength());
1294 if ( beginIndex == 0 )
1298 rtl_uString* pNew = 0;
1300 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1317 assert(beginIndex >= 0 && beginIndex <=
getLength() && count >= 0);
1318 if ( (beginIndex == 0) && (count ==
getLength()) )
1322 rtl_uString* pNew = 0;
1324 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1338 rtl_uString* pNew = 0;
1340 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1345 return rStr1.concat( rStr2 );
1363 rtl_uString* pNew = 0;
1365 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1383 rtl_uString* pNew = 0;
1385 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1409 rtl_uString * s = 0;
1412 &s, pData, from.pData, to.pData, index == 0 ? &i : index);
1434 template<
typename T >
1436 sal_Int32 * index = 0)
const
1438 rtl_uString * s = 0;
1463 template<
typename T1,
typename T2 >
1467 rtl_uString * s = 0;
1489 rtl_uString * s = 0;
1507 template<
typename T >
1510 rtl_uString * s = 0;
1528 template<
typename T1,
typename T2 >
1532 rtl_uString * s = 0;
1551 rtl_uString* pNew = 0;
1553 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1568 rtl_uString* pNew = 0;
1570 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1586 rtl_uString* pNew = 0;
1588 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1617 rtl_uString * pNew = 0;
1619 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1637 return getToken(count, separator, n);
1661 return pData->buffer[0];
1736 rtl_uString * pNew = 0;
1739 #if defined EXCEPTIONS_OFF
1742 throw std::bad_alloc();
1745 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1776 sal_uInt32 *pInfo = NULL )
1778 rtl_uString * pNew = 0;
1780 convertFlags, pInfo );
1782 #if defined EXCEPTIONS_OFF
1785 throw std::bad_alloc();
1788 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1816 sal_uInt32 nFlags)
const
1819 pData->length, nEncoding, nFlags);
1874 sal_Int32 * indexUtf16, sal_Int32 incrementCodePoints = 1)
const
1877 pData, indexUtf16, incrementCodePoints);
1893 rtl_uString* pNewData = 0;
1895 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1921 rtl_uString* pNewData = 0;
1923 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1938 rtl_uString* pNewData = 0;
1940 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1954 rtl_uString* pNewData = 0;
1956 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1970 rtl_uString* pNewData = 0;
1972 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1992 rtl_uString* pNew = 0;
1994 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
2002 #ifdef RTL_STRING_UNITTEST
2005 typedef rtlunittest::OUString OUString;
2029 {
return (
size_t)rString.
hashCode(); }