OString string literals ctor

Lubos Lunak l.lunak at suse.cz
Wed Mar 7 07:03:39 PST 2012


 Hello,

 attached is a patch that removes the need to use the 
RTL_CONSTASCII_STRINGPARAM macro with OString, similar to the patch from 
the 'Obsoleting RTL_CONSTASCII_USTRINGPARAM' thread.

 The difference here is that OString has a const char* ctor, which causes some 
complications:

- having const char* and const char(&)[N] overloads always prefers the first 
one for string literals, which AFAICS should be of the latter type. Trying to 
go for const char*(&) does not work e.g. with something explicitly cast to 
const char*. The solution I've found is to use a template and use SFINAE 
(Substitution failure is not an error) idiom to in practice limit the 
template arguments to only char* and const char*. Using the template makes 
the compiler consider the const char(&)[N] ctor first. I'm not entirely sure 
why this is so, but the problem and solution are consistently the same with 
gcc, clang and msvc.

- embedded \0's strike again, RTL_CONSTASCII_* macros include them in the 
string, the OString const char* ctor does not. There's no perfect solution, 
I've decided to make the string literal ctor include \0's as well, given it's 
mostly meant as a replacement for RTL_CONSTASCII_*, moreover if the \0 is 
explicitly present in the literal, pressumably it's there for a reason. This 
is not backwards compatible for the OString( "\0" ) case, but such code has 
been up to now pointless anyway, so I do not see a problem with this. This 
required also fixing unittests which tried to use this for whatever reason.

 I've checked that I can make a rebuild without this introducing any 
compilation warnings or errors.

 I'd like to also point out to people doing changes like

- foo == OString( RTL_CONSTASCII_STRINGPARAM( "bar" ))
+ foo.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "bar" ))

 that this will be soon obsolete by these changes and easily replaced by plain

 foo == "bar"

 (Do we have an Easy Hack asking for the above, so that I change it? I 
couldn't find one.)

-- 
 Lubos Lunak
 l.lunak at suse.cz
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-rtl_uString_newFromLiteral-for-string-literals.patch
Type: text/x-diff
Size: 6717 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120307/0b46b55c/attachment-0003.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-OString-ctor-for-string-literals-without-RTL_CONSTAS.patch
Type: text/x-diff
Size: 24565 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120307/0b46b55c/attachment-0004.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-remove-usage-of-RTL_CONSTASCII_STRINGPARAM.patch
Type: text/x-diff
Size: 7766 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20120307/0b46b55c/attachment-0005.patch>


More information about the LibreOffice mailing list