[Libreoffice-commits] .: sal/inc sal/qa sal/rtl

2012-04-06 Thread Lubos Lunak
 sal/inc/rtl/strbuf.hxx  |   54 +++
 sal/inc/rtl/string.h|3 
 sal/inc/rtl/string.hxx  |4 -
 sal/inc/rtl/ustrbuf.hxx |   69 
 sal/inc/rtl/ustring.h   |   15 +---
 sal/inc/rtl/ustring.hxx |   12 +--
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx  |6 +
 sal/qa/rtl/strings/test_oustring_stringliterals.cxx |   21 +++---
 sal/rtl/source/strtmpl.cxx  |   11 ++-
 9 files changed, 162 insertions(+), 33 deletions(-)

New commits:
commit 066dbfd1970b8ea58ba16b07b2a57f61c0cb8e36
Author: Luboš Luňák l.lu...@suse.cz
Date:   Fri Apr 6 13:45:47 2012 +0200

string literal O(U)StringBuffer ctors too, after all

diff --git a/sal/inc/rtl/strbuf.hxx b/sal/inc/rtl/strbuf.hxx
index 122eb4b..4500cf0 100644
--- a/sal/inc/rtl/strbuf.hxx
+++ b/sal/inc/rtl/strbuf.hxx
@@ -155,6 +155,60 @@ public:
 }
 
 /**
+@overload
+@since LibreOffice 3.6
+ */
+#ifdef HAVE_SFINAE_ANONYMOUS_BROKEN // see the OString ctors
+OStringBuffer( const char* value )
+: pData(NULL)
+{
+sal_Int32 length = rtl_str_getLength( value );
+nCapacity = length + 16;
+rtl_stringbuffer_newFromStr_WithLength( pData, value, length );
+}
+#else
+template typename T 
+OStringBuffer( const T value, typename internal::CharPtrDetector T, 
internal::Dummy ::Type = internal::Dummy())
+: pData(NULL)
+{
+sal_Int32 length = rtl_str_getLength( value );
+nCapacity = length + 16;
+rtl_stringbuffer_newFromStr_WithLength( pData, value, length );
+}
+
+template typename T 
+OStringBuffer( T value, typename internal::NonConstCharArrayDetector T, 
internal::Dummy ::Type = internal::Dummy())
+: pData(NULL)
+{
+sal_Int32 length = rtl_str_getLength( value );
+nCapacity = length + 16;
+rtl_stringbuffer_newFromStr_WithLength( pData, value, length );
+}
+
+/**
+  Constructs a string buffer so that it represents the same
+sequence of characters as the string literal.
+
+  If there are any embedded \0's in the string literal, the result is 
undefined.
+  Use the overload that explicitly accepts length.
+
+  @since LibreOffice 3.6
+
+  @paramliteral   a string literal
+*/
+template typename T 
+OStringBuffer( T literal, typename internal::ConstCharArrayDetector T, 
internal::Dummy ::Type = internal::Dummy())
+: pData(NULL)
+, nCapacity( internal::ConstCharArrayDetector T, void ::size - 1 + 
16 )
+{
+rtl_string_newFromLiteral( pData, literal, 
internal::ConstCharArrayDetector T, void ::size - 1, 16 );
+#ifdef RTL_STRING_UNITTEST
+rtl_string_unittest_const_literal = true;
+#endif
+}
+#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
+
+/**
 Constructs a string buffer so that it represents the same
 sequence of characters as the string argument.
 
diff --git a/sal/inc/rtl/string.h b/sal/inc/rtl/string.h
index f695c12..f326abe 100644
--- a/sal/inc/rtl/string.h
+++ b/sal/inc/rtl/string.h
@@ -888,8 +888,9 @@ SAL_DLLPUBLIC void SAL_CALL 
rtl_string_newFromStr_WithLength( rtl_String ** newS
 
 /**
  @internal
+ @since LibreOffice 3.6
 */
-SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromLiteral( rtl_String ** newStr, 
const sal_Char * value, sal_Int32 len ) SAL_THROW_EXTERN_C();
+SAL_DLLPUBLIC void SAL_CALL rtl_string_newFromLiteral( rtl_String ** newStr, 
const sal_Char * value, sal_Int32 len, sal_Int32 allocExtra ) 
SAL_THROW_EXTERN_C();
 
 /** Assign a new value to a string.
 
diff --git a/sal/inc/rtl/string.hxx b/sal/inc/rtl/string.hxx
index 0f6246b..9791a8c 100644
--- a/sal/inc/rtl/string.hxx
+++ b/sal/inc/rtl/string.hxx
@@ -206,7 +206,7 @@ public:
 OString( T literal, typename internal::ConstCharArrayDetector T, 
internal::Dummy ::Type = internal::Dummy() ) SAL_THROW(())
 {
 pData = 0;
-rtl_string_newFromLiteral( pData, literal, 
internal::ConstCharArrayDetector T, void ::size - 1 );
+rtl_string_newFromLiteral( pData, literal, 
internal::ConstCharArrayDetector T, void ::size - 1, 0 );
 #ifdef RTL_STRING_UNITTEST
 rtl_string_unittest_const_literal = true;
 #endif
@@ -285,7 +285,7 @@ public:
 typename internal::ConstCharArrayDetector T, OString ::Type operator=( 
T literal ) SAL_THROW(())
 {
 RTL_STRING_CONST_FUNCTION
-rtl_string_newFromLiteral( pData, literal, 
internal::ConstCharArrayDetector T, void ::size - 1 );
+rtl_string_newFromLiteral( pData, literal, 
internal::ConstCharArrayDetector T, void ::size - 1, 0 );
 return *this;
 }
 
diff --git a/sal/inc/rtl/ustrbuf.hxx b/sal/inc/rtl/ustrbuf.hxx
index 02a507c..17deadd 100644
--- a/sal/inc/rtl/ustrbuf.hxx
+++ b/sal/inc/rtl/ustrbuf.hxx
@@ -149,6 +149,75 @@ 

[Libreoffice-commits] .: sal/inc sal/qa sw/source

2012-03-29 Thread Lubos Lunak
 sal/inc/rtl/stringutils.hxx|9 +
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx |   19 ---
 sw/source/filter/ww8/rtfexport.cxx |4 ++--
 sw/source/filter/ww8/rtfexport.hxx |4 ++--
 4 files changed, 29 insertions(+), 7 deletions(-)

New commits:
commit 8aa60b51a9e48b33ba6f0cb27132c6a415de2358
Author: Luboš Luňák l.lu...@suse.cz
Date:   Thu Mar 29 11:03:47 2012 +0200

(const) char[] (i.e. size unknown) cannot be used with O(U)String

msvc can't handle the necessary template overload (and maybe it's
right, I'm not sure)

diff --git a/sal/inc/rtl/stringutils.hxx b/sal/inc/rtl/stringutils.hxx
index 19c1bf4..3ed36a7 100644
--- a/sal/inc/rtl/stringutils.hxx
+++ b/sal/inc/rtl/stringutils.hxx
@@ -65,6 +65,12 @@ There are 2 cases:
 cast to const char*. Additionally (non-const) char[N] needs to be handled, 
but with the reference
 being const, it would also match const char[N], so another overload with a 
reference to non-const
 and NonConstCharArrayDetector are used to ensure the function is called 
only with (non-const) char[N].
+Additionally, char[] and const char[] (i.e. size unknown) are rather tricky. 
Their usage with 'T' would
+mean it would be 'char()[]', which seems to be invalid. But gcc and clang 
somehow manage when it is
+a template. while msvc complains about no conversion from char[] to char[1]. 
And the reference cannot
+be avoided, because 'const char[]' as argument type would match also 'const 
char[N]'
+So char[] and const char[] should always be used with their contents specified 
(which automatically
+turns them into char[N] or const char[N]), or char* and const char* should be 
used.
 */
 struct Dummy {};
 template typename T1, typename T2 
@@ -91,6 +97,8 @@ struct NonConstCharArrayDetector char[ N ], T 
 {
 typedef T Type;
 };
+#ifdef RTL_STRING_UNITTEST
+// never use, until all compilers handle this
 template typename T 
 struct NonConstCharArrayDetector char[], T 
 {
@@ -101,6 +109,7 @@ struct NonConstCharArrayDetector const char[], T 
 {
 typedef T Type;
 };
+#endif
 
 template typename T1, typename T2 
 struct ConstCharArrayDetector
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx 
b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
index 0d5036a..d7e3cf5 100644
--- a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -66,6 +66,9 @@ private:
 
 void testcall( const char str[] );
 
+static const char bad5[];
+static char bad6[];
+
 CPPUNIT_TEST_SUITE(StringLiterals);
 CPPUNIT_TEST(checkCtors);
 CPPUNIT_TEST(checkUsage);
@@ -100,13 +103,20 @@ void test::ostring::StringLiterals::checkCtors()
 const char* bad4[] = { test1 };
 CPPUNIT_ASSERT( !CONST_CTOR_USED( bad4[ 0 ] ));
 testcall( good1 );
+#ifndef _MSC_VER
+// this is actually not supposed to work (see discussion in 
stringutils.hxx),
+// but gcc and clang somehow manage, so keep it used, just in case some 
other problem
+// shows up somewhen in the future
+CPPUNIT_ASSERT( !CONST_CTOR_USED( bad5 )); // size is not known here
+CPPUNIT_ASSERT( !CONST_CTOR_USED( bad6 ));
+#endif
 
 // This one is technically broken, since the first element is 6 characters 
test\0\0,
 // but there does not appear a way to detect this by compile time (runtime 
will complain).
 // RTL_CONSTASCII_USTRINGPARAM() has the same flaw.
-const char bad5[][ 6 ] = { test, test2 };
-CPPUNIT_ASSERT( CONST_CTOR_USED( bad5[ 0 ] ));
-CPPUNIT_ASSERT( CONST_CTOR_USED( bad5[ 1 ] ));
+const char bad7[][ 6 ] = { test, test2 };
+CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 0 ] ));
+CPPUNIT_ASSERT( CONST_CTOR_USED( bad7[ 1 ] ));
 
 // Check that contents are correct and equal to the case when const char* ctor 
is used.
 CPPUNIT_ASSERT( rtl::OString( (const char*) ) == rtl::OString(  ));
@@ -128,6 +138,9 @@ void test::ostring::StringLiterals::checkCtors()
 #endif
 }
 
+const char test::ostring::StringLiterals::bad5[] = test;
+char test::ostring::StringLiterals::bad6[] = test;
+
 void test::ostring::StringLiterals::testcall( const char str[] )
 {
 #ifndef _MSC_VER
diff --git a/sw/source/filter/ww8/rtfexport.cxx 
b/sw/source/filter/ww8/rtfexport.cxx
index dda8b81..00b8e18 100644
--- a/sw/source/filter/ww8/rtfexport.cxx
+++ b/sw/source/filter/ww8/rtfexport.cxx
@@ -79,10 +79,10 @@ using rtl::OUStringBuffer;
 
 using sw::mark::IMark;
 
-#if defined(UNX)
+#if defined(UNX22)
 const sal_Char RtfExport::sNewLine = '\012';
 #else
-const sal_Char RtfExport::sNewLine[] = \015\012;
+const sal_Char* const RtfExport::sNewLine = \015\012;
 #endif
 
 // the default text encoding for the export, if it doesn't fit unicode will
diff --git a/sw/source/filter/ww8/rtfexport.hxx 
b/sw/source/filter/ww8/rtfexport.hxx
index 3759f31..9d395de 100644
--- a/sw/source/filter/ww8/rtfexport.hxx
+++ b/sw/source/filter/ww8/rtfexport.hxx
@@ 

[Libreoffice-commits] .: sal/inc sal/qa

2012-03-28 Thread Lubos Lunak
 sal/inc/rtl/string.hxx |7 +++
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx |2 ++
 2 files changed, 9 insertions(+)

New commits:
commit 86a1e6de4fc3af897271bc5f7f04506261d4f286
Author: Luboš Luňák l.lu...@suse.cz
Date:   Wed Mar 28 17:37:19 2012 +0200

SFINAE workarounds for gcc-4.0.1

diff --git a/sal/inc/rtl/string.hxx b/sal/inc/rtl/string.hxx
index 39414e6..68f41bd 100644
--- a/sal/inc/rtl/string.hxx
+++ b/sal/inc/rtl/string.hxx
@@ -551,6 +551,12 @@ public:
   @return   sal_True if the strings are equal;
 sal_False, otherwise.
 */
+#ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
+sal_Bool equalsIgnoreAsciiCase( const sal_Char * asciiStr ) const 
SAL_THROW(())
+{
+return rtl_str_compareIgnoreAsciiCase( pData-buffer, asciiStr ) == 0;
+}
+#else
 template typename T 
 typename internal::CharPtrDetector T, bool ::Type equalsIgnoreAsciiCase( 
const T asciiStr ) const SAL_THROW(())
 {
@@ -577,6 +583,7 @@ public:
 return rtl_str_compareIgnoreAsciiCase_WithLength( pData-buffer, 
pData-length,
   literal, 
internal::ConstCharArrayDetector T, void ::size - 1 ) == 0;
 }
+#endif
 
 /**
   Perform a ASCII lowercase comparison of two strings.
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx 
b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
index 4af152c..930b038 100644
--- a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -152,9 +152,11 @@ void test::ostring::StringLiterals::checkUsage()
 rtl_string_unittest_const_literal_function = false;
 CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = foo );
 CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+#ifndef HAVE_SFINAE_ANONYMOUS_BROKEN
 rtl_string_unittest_const_literal_function = false;
 CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( fOo ));
 CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
+#endif
 rtl_string_unittest_const_literal_function = false;
 CPPUNIT_ASSERT( foobarfoo.match( bar, 3 ));
 CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
___
Libreoffice-commits mailing list
Libreoffice-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


[Libreoffice-commits] .: sal/inc sal/qa

2012-03-28 Thread Lubos Lunak
 sal/inc/rtl/strbuf.hxx |   14 ++
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx |4 
 2 files changed, 18 insertions(+)

New commits:
commit c9167bac18e1cca061d91f65d2dc91b9d09ef587
Author: Luboš Luňák l.lu...@suse.cz
Date:   Wed Mar 28 23:38:58 2012 +0200

gcc-4.0.1 SFINAE workarounds

diff --git a/sal/inc/rtl/strbuf.hxx b/sal/inc/rtl/strbuf.hxx
index 54428d3..122eb4b 100644
--- a/sal/inc/rtl/strbuf.hxx
+++ b/sal/inc/rtl/strbuf.hxx
@@ -373,6 +373,12 @@ public:
 @param   str   the characters to be appended.
 @return  this string buffer.
  */
+#ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
+OStringBuffer  append( const sal_Char * str )
+{
+return append( str, rtl_str_getLength( str ) );
+}
+#else
 template typename T 
 typename internal::CharPtrDetector T, OStringBuffer ::Type append( 
const T str )
 {
@@ -397,6 +403,7 @@ public:
 rtl_stringbuffer_insert( pData, nCapacity, getLength(), literal, 
internal::ConstCharArrayDetector T, void ::size - 1 );
 return *this;
 }
+#endif
 
 /**
 Appends the string representation of the codechar/code array
@@ -555,6 +562,12 @@ public:
 @param  str  a character array.
 @return this string buffer.
  */
+#ifdef HAVE_SFINAE_ANONYMOUS_BROKEN
+OStringBuffer  insert( sal_Int32 offset, const sal_Char * str )
+{
+return insert( offset, str, rtl_str_getLength( str ) );
+}
+#else
 template typename T 
 typename internal::CharPtrDetector T, OStringBuffer ::Type insert( 
sal_Int32 offset, const T str )
 {
@@ -579,6 +592,7 @@ public:
 rtl_stringbuffer_insert( pData, nCapacity, offset, literal, 
internal::ConstCharArrayDetector T, void ::size - 1 );
 return *this;
 }
+#endif
 
 /**
 Inserts the string representation of the codechar/code array
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx 
b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
index 3f2ed84..494c1da 100644
--- a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -257,6 +257,7 @@ void test::ostring::StringLiterals::checkNonConstUsage()
 void test::ostring::StringLiterals::checkBuffer()
 {
 rtl::OStringBuffer buf;
+#ifndef HAVE_SFINAE_ANONYMOUS_BROKEN
 rtl_string_unittest_const_literal_function = false;
 buf.append( foo );
 CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
@@ -269,6 +270,9 @@ void test::ostring::StringLiterals::checkBuffer()
 buf.insert( 3, baz );
 CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
 CPPUNIT_ASSERT_EQUAL( buf.toString(), rtl::OString( foobazbar ));
+#else
+buf.append( foobazbar );
+#endif
 
 rtl::OString foobazbard( foobazbard );
 rtl::OString foodbazbard( foodbazbard );
___
Libreoffice-commits mailing list
Libreoffice-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits