diff options
author | Luboš Luňák <l.lunak@suse.cz> | 2012-12-02 22:32:41 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@suse.cz> | 2012-12-03 18:04:24 +0100 |
commit | c94b9c48664062396e9f8a12176970f6c90c0003 (patch) | |
tree | 5ff8ecf1c54fcc0c18c3d3f2f58c5970d2937e2b /tools | |
parent | d3e763d65c44d1838eeebbc5a581bcdd18040d8e (diff) |
tools String support for fast operator+
Change-Id: I13f49a49f86a7097fce115d62271ad82609036f1
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); } |