29 #ifndef _RTL_STRING_HXX_
30 #define _RTL_STRING_HXX_
44 #if !defined EXCEPTIONS_OFF
53 #ifdef RTL_STRING_UNITTEST
54 #define rtl rtlunittest
60 #ifdef RTL_STRING_UNITTEST
63 #define RTL_STRING_CONST_FUNCTION rtl_string_unittest_const_literal_function = true;
65 #define RTL_STRING_CONST_FUNCTION
102 class DO_NOT_ACQUIRE;
172 #ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
183 template<
typename T >
190 template<
typename T >
207 template<
typename T >
212 #ifdef RTL_STRING_UNITTEST
213 rtl_string_unittest_const_literal =
true;
217 #endif // HAVE_SFINAE_ANONYMOUS_BROKEN
254 #if defined EXCEPTIONS_OFF
257 throw std::bad_alloc();
286 template<
typename T >
325 return pData->length == 0;
367 str.pData->buffer, str.pData->length );
386 rObj.pData->buffer, rObj.pData->length, maxLength );
404 str.pData->buffer, str.pData->length );
420 if ( pData->length != str.pData->length )
422 if ( pData == str.pData )
425 str.pData->buffer, str.pData->length ) == 0;
445 if ( pData->length != length )
449 value, length ) == 0;
468 if ( pData->length != str.pData->length )
470 if ( pData == str.pData )
473 str.pData->buffer, str.pData->length ) == 0;
497 #ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
503 template<
typename T >
509 template<
typename T >
520 template<
typename T >
552 if ( pData->length != asciiStrLength )
556 asciiStr, asciiStrLength ) == 0;
577 str.pData->buffer, str.pData->length, str.pData->length ) == 0;
585 template<
typename T >
590 pData->buffer + fromIndex, pData->length - fromIndex,
611 char const * str, sal_Int32 strLength, sal_Int32 fromIndex = 0)
615 pData->buffer + fromIndex, pData->length - fromIndex,
616 str, strLength, strLength) == 0;
623 #if SAL_TYPES_SIZEOFLONG == 8
648 str.pData->buffer, str.pData->length,
649 str.pData->length ) == 0;
657 template<
typename T >
685 template<
typename T >
690 &&
match(literal,
getLength() - ( internal::ConstCharArrayDetector< T, void >::size - 1 ));
706 bool endsWithL(
char const * str, sal_Int32 strLength)
const {
712 {
return rStr1.equals(rStr2); }
716 {
return rStr1.compareTo( rStr2 ) < 0; }
718 {
return rStr1.compareTo( rStr2 ) > 0; }
720 {
return rStr1.compareTo( rStr2 ) <= 0; }
722 {
return rStr1.compareTo( rStr2 ) >= 0; }
724 template<
typename T >
727 return rStr1.compareTo( value ) == 0;
730 template<
typename T >
733 return rStr1.compareTo( value ) == 0;
736 template<
typename T >
739 return rStr2.compareTo( value ) == 0;
742 template<
typename T >
745 return rStr2.compareTo( value ) == 0;
753 template<
typename T >
767 template<
typename T >
776 template<
typename T >
782 template<
typename T >
788 template<
typename T >
794 template<
typename T >
805 template<
typename T >
808 return !( rStr == literal );
816 template<
typename T >
819 return !( literal == rStr );
850 return (ret < 0 ? ret : ret+fromIndex);
902 str.pData->buffer, str.pData->length );
903 return (ret < 0 ? ret : ret+fromIndex);
911 template<
typename T >
917 return n < 0 ? n : n + fromIndex;
938 sal_Int32
indexOfL(
char const * str, sal_Int32 len, sal_Int32 fromIndex = 0)
942 pData->buffer + fromIndex, pData->length - fromIndex, str, len);
943 return n < 0 ? n : n + fromIndex;
950 #if SAL_TYPES_SIZEOFLONG == 8
972 str.pData->buffer, str.pData->length );
995 str.pData->buffer, str.pData->length );
1009 assert(beginIndex >= 0 && beginIndex <=
getLength());
1010 if ( beginIndex == 0 )
1014 rtl_String* pNew = 0;
1016 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1033 assert(beginIndex >= 0 && beginIndex <=
getLength() && count >= 0
1034 && sal::static_int_cast<sal_uInt32>(count) <=
1035 sal::static_int_cast<sal_uInt32>(
getLength() - beginIndex));
1036 if ( (beginIndex == 0) && (count ==
getLength()) )
1040 rtl_String* pNew = 0;
1042 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1056 rtl_String* pNew = 0;
1058 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1063 return str1.concat( str2 );
1081 rtl_String* pNew = 0;
1083 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1101 rtl_String* pNew = 0;
1103 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1125 OString const & from,
OString const & to, sal_Int32 * index = 0)
const
1130 &s, pData, from.pData->buffer, from.pData->length,
1131 to.pData->buffer, to.pData->length, index == 0 ? &i : index);
1151 &s, pData, from.pData->buffer, from.pData->length,
1152 to.pData->buffer, to.pData->length);
1168 rtl_String* pNew = 0;
1170 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1185 rtl_String* pNew = 0;
1187 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1203 rtl_String* pNew = 0;
1205 return OString( pNew, (DO_NOT_ACQUIRE*)0 );
1234 rtl_String * pNew = 0;
1236 return OString( pNew, (DO_NOT_ACQUIRE *)0 );
1254 return getToken(count, separator, n);
1278 return pData->buffer[0];
1348 rtl_String* pNewData = 0;
1350 return OString( pNewData, (DO_NOT_ACQUIRE*)0 );
1376 rtl_String* pNewData = 0;
1378 return OString( pNewData, (DO_NOT_ACQUIRE*)0 );
1393 rtl_String* pNewData = 0;
1395 return OString( pNewData, (DO_NOT_ACQUIRE*)0 );
1409 rtl_String* pNewData = 0;
1411 return OString( pNewData, (DO_NOT_ACQUIRE*)0 );
1425 rtl_String* pNewData = 0;
1427 return OString( pNewData, (DO_NOT_ACQUIRE*)0 );
1435 #ifdef RTL_STRING_UNITTEST
1438 typedef rtlunittest::OString OString;
1440 #undef RTL_STRING_CONST_FUNCTION
1463 {
return (
size_t)rString.
hashCode(); }