diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/inc/tools/string.hxx | 27 | ||||
-rw-r--r-- | tools/source/string/strucvt.cxx | 3 |
2 files changed, 29 insertions, 1 deletions
diff --git a/tools/inc/tools/string.hxx b/tools/inc/tools/string.hxx index 3aeb7e9a37d7..b98899ef502f 100644 --- a/tools/inc/tools/string.hxx +++ b/tools/inc/tools/string.hxx @@ -154,6 +154,18 @@ public: reinterpret_cast<rtl_uString*>(mpData)), SAL_NO_ACQUIRE ); } +#ifdef RTL_FAST_STRING + template< typename T1, typename T2 > + UniString( const rtl::OUStringConcat< T1, T2 >& concat ) + : mpData(NULL) { Assign( rtl::OUString( concat )); } + template< typename T1, typename T2 > + UniString& operator =( const rtl::OUStringConcat< T1, T2 >& concat ) + { return Assign( rtl::OUString( concat )); } + template< typename T1, typename T2 > + UniString& operator +=( const rtl::OUStringConcat< T1, T2 >& concat ) + { return Append( UniString( concat ) ); } +#endif + static UniString CreateFromInt32( sal_Int32 n, sal_Int16 nRadix = 10 ); static const UniString& EmptyString(); sal_Int32 ToInt32() const; @@ -308,6 +320,21 @@ operator <<( // (stray surrogate halves) and embedded null characters } +#ifdef RTL_FAST_STRING +namespace rtl +{ +template<> +struct ToStringHelper< UniString > + { + static int length( const UniString& s ) { return s.Len(); } + static sal_Unicode* addData( sal_Unicode* buffer, const UniString& s ) { return addDataHelper( buffer, s.GetBuffer(), s.Len()); } + static const bool allowOStringConcat = false; + static const bool allowOUStringConcat = true; + }; +} + +#endif + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/tools/source/string/strucvt.cxx b/tools/source/string/strucvt.cxx index 759da6304cab..b01e3e277419 100644 --- a/tools/source/string/strucvt.cxx +++ b/tools/source/string/strucvt.cxx @@ -73,7 +73,8 @@ UniString& UniString::Assign( const rtl::OUString& rStr ) if (rStr.pData->length < STRING_MAXLEN) { - STRING_RELEASE((STRING_TYPE *)mpData); + if( mpData != NULL ) + STRING_RELEASE((STRING_TYPE *)mpData); mpData = reinterpret_cast< UniStringData * >(const_cast< rtl::OUString & >(rStr).pData); STRING_ACQUIRE((STRING_TYPE *)mpData); } |