summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@suse.cz>2012-12-02 22:32:41 +0100
committerLuboš Luňák <l.lunak@suse.cz>2012-12-03 18:04:24 +0100
commitc94b9c48664062396e9f8a12176970f6c90c0003 (patch)
tree5ff8ecf1c54fcc0c18c3d3f2f58c5970d2937e2b /tools
parentd3e763d65c44d1838eeebbc5a581bcdd18040d8e (diff)
tools String support for fast operator+
Change-Id: I13f49a49f86a7097fce115d62271ad82609036f1
Diffstat (limited to 'tools')
-rw-r--r--tools/inc/tools/string.hxx27
-rw-r--r--tools/source/string/strucvt.cxx3
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);
}