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 >
410 return pData->length == 0;
448 str.pData->buffer, str.pData->length );
469 str.pData->buffer, str.pData->length, maxLength );
487 str.pData->buffer, str.pData->length );
503 if ( pData->length != str.pData->length )
505 if ( pData == str.pData )
508 str.pData->buffer, str.pData->length ) == 0;
527 if ( pData->length != str.pData->length )
529 if ( pData == str.pData )
532 str.pData->buffer, str.pData->length ) == 0;
540 template<
typename T >
567 str.pData->buffer, str.pData->length, str.pData->length ) == 0;
575 template<
typename T >
603 str.pData->buffer, str.pData->length,
604 str.pData->length ) == 0;
612 template<
typename T >
660 asciiStr, maxLength );
685 asciiStr, asciiStrLength );
728 if ( pData->length != asciiStrLength )
732 pData->buffer, asciiStr, asciiStrLength );
803 if ( pData->length != asciiStrLength )
833 asciiStr, asciiStrLength ) == 0;
840 #if SAL_TYPES_SIZEOFLONG == 8
871 asciiStr, asciiStrLength ) == 0;
878 #if SAL_TYPES_SIZEOFLONG == 8
903 template<
typename T >
926 return asciiStrLength <= pData->length
928 pData->buffer + pData->length - asciiStrLength, asciiStr,
956 template<
typename T >
978 char const * asciiStr, sal_Int32 asciiStrLength)
const
980 return asciiStrLength <= pData->length
982 pData->buffer + pData->length - asciiStrLength,
983 asciiStrLength, asciiStr, asciiStrLength)
988 {
return rStr1.equals(rStr2); }
990 {
return rStr1.compareTo( pStr2 ) == 0; }
992 {
return OUString( pStr1 ).compareTo( rStr2 ) == 0; }
1002 {
return rStr1.compareTo( rStr2 ) < 0; }
1004 {
return rStr1.compareTo( rStr2 ) > 0; }
1006 {
return rStr1.compareTo( rStr2 ) <= 0; }
1008 {
return rStr1.compareTo( rStr2 ) >= 0; }
1017 template<
typename T >
1029 template<
typename T >
1041 template<
typename T >
1053 template<
typename T >
1087 return (ret < 0 ? ret : ret+fromIndex);
1139 str.pData->buffer, str.pData->length );
1140 return (ret < 0 ? ret : ret+fromIndex);
1148 template<
typename T >
1152 pData->buffer + fromIndex, pData->length - fromIndex, literal,
1154 return ret < 0 ? ret : ret + fromIndex;
1181 char const * str, sal_Int32 len, sal_Int32 fromIndex = 0) const
1185 pData->buffer + fromIndex, pData->length - fromIndex, str, len);
1186 return ret < 0 ? ret : ret + fromIndex;
1193 #if SAL_TYPES_SIZEOFLONG == 8
1215 str.pData->buffer, str.pData->length );
1238 str.pData->buffer, str.pData->length );
1246 template<
typename T >
1276 pData->buffer, pData->length, str, len);
1290 assert(beginIndex >= 0 && beginIndex <=
getLength());
1291 if ( beginIndex == 0 )
1295 rtl_uString* pNew = 0;
1297 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1314 assert(beginIndex >= 0 && beginIndex <=
getLength() && count >= 0);
1315 if ( (beginIndex == 0) && (count ==
getLength()) )
1319 rtl_uString* pNew = 0;
1321 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1335 rtl_uString* pNew = 0;
1337 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1342 return rStr1.concat( rStr2 );
1360 rtl_uString* pNew = 0;
1362 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1380 rtl_uString* pNew = 0;
1382 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1406 rtl_uString * s = 0;
1409 &s, pData, from.pData, to.pData, index == 0 ? &i : index);
1431 template<
typename T >
1433 sal_Int32 * index = 0)
const
1435 rtl_uString * s = 0;
1460 template<
typename T1,
typename T2 >
1464 rtl_uString * s = 0;
1486 rtl_uString * s = 0;
1504 template<
typename T >
1507 rtl_uString * s = 0;
1525 template<
typename T1,
typename T2 >
1529 rtl_uString * s = 0;
1548 rtl_uString* pNew = 0;
1550 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1565 rtl_uString* pNew = 0;
1567 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1583 rtl_uString* pNew = 0;
1585 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1614 rtl_uString * pNew = 0;
1616 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1634 return getToken(count, separator, n);
1658 return pData->buffer[0];
1733 rtl_uString * pNew = 0;
1736 #if defined EXCEPTIONS_OFF
1739 throw std::bad_alloc();
1742 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1773 sal_uInt32 *pInfo = NULL )
1775 rtl_uString * pNew = 0;
1777 convertFlags, pInfo );
1779 #if defined EXCEPTIONS_OFF
1782 throw std::bad_alloc();
1785 return OUString( pNew, (DO_NOT_ACQUIRE *)0 );
1813 sal_uInt32 nFlags)
const
1816 pData->length, nEncoding, nFlags);
1871 sal_Int32 * indexUtf16, sal_Int32 incrementCodePoints = 1)
const
1874 pData, indexUtf16, incrementCodePoints);
1890 rtl_uString* pNewData = 0;
1892 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1918 rtl_uString* pNewData = 0;
1920 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1935 rtl_uString* pNewData = 0;
1937 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1951 rtl_uString* pNewData = 0;
1953 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1967 rtl_uString* pNewData = 0;
1969 return OUString( pNewData, (DO_NOT_ACQUIRE*)0 );
1989 rtl_uString* pNew = 0;
1991 return OUString( pNew, (DO_NOT_ACQUIRE*)0 );
1999 #ifdef RTL_STRING_UNITTEST
2002 typedef rtlunittest::OUString OUString;
2026 {
return (
size_t)rString.
hashCode(); }