basctl/source/basicide/brkdlg.cxx | 2 basic/source/comp/codegen.cxx | 2 compilerplugins/clang/stringconstant.cxx | 133 +++++++ connectivity/source/drivers/evoab2/NStatement.cxx | 4 cppu/source/typelib/typelib.cxx | 3 cppuhelper/source/factory.cxx | 3 cui/source/options/optpath.cxx | 2 dbaccess/source/core/api/SingleSelectQueryComposer.cxx | 4 dbaccess/source/ui/app/AppController.cxx | 2 dbaccess/source/ui/browser/unodatbr.cxx | 4 dbaccess/source/ui/control/opendoccontrols.cxx | 2 dbaccess/source/ui/dlg/DbAdminImpl.cxx | 4 editeng/source/editeng/impedit.cxx | 2 extensions/source/propctrlr/selectlabeldialog.cxx | 4 filter/source/graphic/GraphicExportFilter.cxx | 8 filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx | 2 filter/source/xsltdialog/xmlfilterjar.cxx | 2 framework/inc/queries.h | 38 +- framework/source/accelerators/storageholder.cxx | 4 i18npool/qa/cppunit/test_breakiterator.cxx | 4 include/comphelper/string.hxx | 2 include/rtl/strbuf.hxx | 28 + include/rtl/string.hxx | 130 +++++-- include/rtl/stringconcat.hxx | 13 include/rtl/stringutils.hxx | 87 ++++ include/rtl/ustrbuf.hxx | 49 +- include/rtl/ustring.hxx | 305 +++++++++-------- oox/source/export/chartexport.cxx | 2 oox/source/export/vmlexport.cxx | 2 sal/qa/rtl/strings/test_oustring_stringliterals.cxx | 14 sc/source/core/tool/compiler.cxx | 4 sc/source/ui/docshell/impex.cxx | 12 sc/source/ui/view/gridwin5.cxx | 4 sc/source/ui/view/tabvwshe.cxx | 2 sd/source/filter/eppt/pptexanimations.cxx | 2 sd/source/filter/html/htmlex.cxx | 4 svtools/source/misc/ehdl.cxx | 9 svx/source/form/navigatortree.cxx | 6 sw/qa/core/uwriter.cxx | 8 sw/source/core/access/acccontext.cxx | 4 sw/source/core/fields/dbfld.cxx | 2 sw/source/core/fields/ddefld.cxx | 2 sw/source/core/tox/tox.cxx | 2 sw/source/filter/ww8/docxexport.cxx | 4 sw/source/filter/ww8/ww8par5.cxx | 4 sw/source/uibase/dbui/mmconfigitem.cxx | 4 sw/source/uibase/docvw/edtwin2.cxx | 4 sw/source/uibase/fldui/fldmgr.cxx | 8 sw/source/uibase/utlui/initui.cxx | 4 ucb/source/ucp/hierarchy/hierarchyuri.cxx | 4 ucb/source/ucp/webdav-neon/NeonSession.cxx | 3 ucb/source/ucp/webdav-neon/UCBDeadPropertyValue.cxx | 3 unotools/source/config/bootstrap.cxx | 4 unotools/source/config/dynamicmenuoptions.cxx | 2 unotools/source/config/pathoptions.cxx | 4 vcl/source/control/field2.cxx | 2 xmloff/source/chart/SchXMLExport.cxx | 2 57 files changed, 664 insertions(+), 310 deletions(-)
New commits: commit af333e81037b106702fc4c4d68b0653f80d2fb1b Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:38:02 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I47726315f12ef05714bea248d79cc503fb99b23c diff --git a/compilerplugins/clang/stringconstant.cxx b/compilerplugins/clang/stringconstant.cxx index 12bf173..9c86921 100644 --- a/compilerplugins/clang/stringconstant.cxx +++ b/compilerplugins/clang/stringconstant.cxx @@ -98,6 +98,9 @@ private: std::string const & qname, std::string const & replacement, TreatEmpty treatEmpty); + void handleOUStringCtor( + CallExpr const * expr, unsigned arg, std::string const & qname); + std::stack<Expr const *> calls_; }; @@ -292,6 +295,68 @@ bool StringConstant::VisitCallExpr(CallExpr const * expr) { TreatEmpty::Error); return true; } + if (qname == "rtl::OUString::reverseCompareTo" + && fdecl->getNumParams() == 1) + { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::equalsIgnoreAsciiCase" + && fdecl->getNumParams() == 1) + { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::match" && fdecl->getNumParams() == 2) { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::matchIgnoreAsciiCase" + && fdecl->getNumParams() == 2) + { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::startsWith" && fdecl->getNumParams() == 2) { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::startsWithIgnoreAsciiCase" + && fdecl->getNumParams() == 2) + { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::endsWith" && fdecl->getNumParams() == 2) { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::endsWithIgnoreAsciiCase" + && fdecl->getNumParams() == 2) + { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::indexOf" && fdecl->getNumParams() == 2) { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::lastIndexOf" && fdecl->getNumParams() == 1) { + handleOUStringCtor(expr, 0, qname); + return true; + } + if (qname == "rtl::OUString::replaceFirst" && fdecl->getNumParams() == 3) { + handleOUStringCtor(expr, 0, qname); + handleOUStringCtor(expr, 1, qname); + return true; + } + if (qname == "rtl::OUString::replaceAll" + && (fdecl->getNumParams() == 2 || fdecl->getNumParams() == 3)) + { + handleOUStringCtor(expr, 0, qname); + handleOUStringCtor(expr, 1, qname); + return true; + } if (qname == "rtl::OUString::equals" && fdecl->getNumParams() == 1) { unsigned n; bool non; @@ -451,6 +516,7 @@ bool StringConstant::VisitCallExpr(CallExpr const * expr) { << expr->getSourceRange(); return true; } + return true; } return true; } @@ -1089,6 +1155,73 @@ void StringConstant::handleCharLen( reportChange(expr, ChangeKind::CharLen, qname, repl, PassThrough::No); } +void StringConstant::handleOUStringCtor( + CallExpr const * expr, unsigned arg, std::string const & qname) +{ + auto e0 = expr->getArg(arg)->IgnoreParenImpCasts(); + auto e1 = dyn_cast<CXXFunctionalCastExpr>(e0); + if (e1 != nullptr) { + e0 = e1->getSubExpr()->IgnoreParenImpCasts(); + } + auto e2 = dyn_cast<CXXBindTemporaryExpr>(e0); + if (e2 == nullptr) { + return; + } + auto e3 = dyn_cast<CXXConstructExpr>( + e2->getSubExpr()->IgnoreParenImpCasts()); + if (e3 == nullptr) { + return; + } + if (e3->getConstructor()->getQualifiedNameAsString() + != "rtl::OUString::OUString") + { + return; + } + if (e3->getNumArgs() == 0) { + report( + DiagnosticsEngine::Warning, + ("in call of %0, replace default-constructed OUString with an empty" + " string literal"), + e3->getExprLoc()) + << qname << expr->getSourceRange(); + return; + } + APSInt res; + if (e3->getNumArgs() == 1 + && e3->getArg(0)->IgnoreParenImpCasts()->isIntegerConstantExpr( + res, compiler.getASTContext())) + { + if (res > 0 && res <= 127) { + report( + DiagnosticsEngine::Warning, + ("in call of %0, replace OUString constructed from a (non-NUL)" + " ASCII char constant with a string literal"), + e3->getExprLoc()) + << qname << expr->getSourceRange(); + } + return; + } + if (e3->getNumArgs() != 2) { + return; + } + unsigned n; + bool non; + bool emb; + bool trm; + if (!isStringConstant( + e3->getArg(0)->IgnoreParenImpCasts(), &n, &non, &emb, &trm)) + { + return; + } + //TODO: non, emb, trm + report( + DiagnosticsEngine::Warning, + ("in call of %0, replace OUString constructed from a string literal" + " directly with the string literal"), + e3->getExprLoc()) + << qname << expr->getSourceRange(); +} + loplugin::Plugin::Registration< StringConstant > X("stringconstant"); } commit 94c1ea92ce7653f3cf91cfd0efe9546bbdb47ad3 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:38 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I81a60eb512356d19cb746145fdf0dc1a3c676ba1 diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx index 7f42635..08f1c53 100644 --- a/xmloff/source/chart/SchXMLExport.cxx +++ b/xmloff/source/chart/SchXMLExport.cxx @@ -627,7 +627,7 @@ uno::Sequence< OUString > lcl_DataSequenceToStringSequence( { OUString aRole; xProp->getPropertyValue("Role") >>= aRole; - if( aRole.match( OUString( "values-x" ) ) ) + if( aRole.match("values-x") ) { //lcl_clearIfNoValuesButTextIsContained - replace by indices if the values are not appropriate bool bHasValue=false; commit 0c526c668391faec7fdfbab7d0210210c7a2a32e Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:34 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I918023aa2e14d0913e6e05129ceb0c528b6cfd96 diff --git a/vcl/source/control/field2.cxx b/vcl/source/control/field2.cxx index 3f343b2..6f093e6 100644 --- a/vcl/source/control/field2.cxx +++ b/vcl/source/control/field2.cxx @@ -948,7 +948,7 @@ static sal_uInt16 ImplCutNumberFromString( OUString& rStr ) static bool ImplCutMonthName( OUString& rStr, const OUString& _rLookupMonthName ) { sal_Int32 index = 0; - rStr = rStr.replaceFirst(_rLookupMonthName, OUString(), &index); + rStr = rStr.replaceFirst(_rLookupMonthName, "", &index); return index >= 0; } commit 495b6575f8b9a19f1c72184d56eacb590aeab739 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:29 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I45fcbcdf15134585443e528e8af2c9486d0b3bbe diff --git a/unotools/source/config/bootstrap.cxx b/unotools/source/config/bootstrap.cxx index 020c8463..2fb514d 100644 --- a/unotools/source/config/bootstrap.cxx +++ b/unotools/source/config/bootstrap.cxx @@ -199,7 +199,7 @@ bool implNormalizeURL(OUString & _sURL, osl::DirectoryItem& aDirItem) // #109863# sal/osl returns final slash for file URLs contradicting // the URL/URI RFCs. - if ( !aNormalizedURL.endsWith(OUString(cURLSeparator)) ) + if ( !aNormalizedURL.endsWith(OUStringLiteral1<cURLSeparator>()) ) _sURL = aNormalizedURL; else _sURL = aNormalizedURL.copy( 0, aNormalizedURL.getLength()-1 ); @@ -312,7 +312,7 @@ PathStatus getDerivedPath( // do we have a base path ? if (!_aBaseURL.isEmpty()) { - OSL_PRECOND(!_aBaseURL.endsWith(OUString(cURLSeparator)), "Unexpected: base URL ends in slash"); + OSL_PRECOND(!_aBaseURL.endsWith(OUStringLiteral1<cURLSeparator>()), "Unexpected: base URL ends in slash"); sDerivedURL = OUStringBuffer(_aBaseURL).append(cURLSeparator).append(_sRelativeURL).makeStringAndClear(); diff --git a/unotools/source/config/dynamicmenuoptions.cxx b/unotools/source/config/dynamicmenuoptions.cxx index cf706c4..6a8659e 100644 --- a/unotools/source/config/dynamicmenuoptions.cxx +++ b/unotools/source/config/dynamicmenuoptions.cxx @@ -59,7 +59,7 @@ using namespace ::com::sun::star::beans; #define OFFSET_IMAGEIDENTIFIER 2 #define OFFSET_TARGETNAME 3 -#define PATHPREFIX_SETUP OUString("m") +#define PATHPREFIX_SETUP "m" /*-**************************************************************************************************************** @descr struct to hold information about one menu entry. diff --git a/unotools/source/config/pathoptions.cxx b/unotools/source/config/pathoptions.cxx index 23f062c..46bada4 100644 --- a/unotools/source/config/pathoptions.cxx +++ b/unotools/source/config/pathoptions.cxx @@ -58,8 +58,8 @@ using namespace com::sun::star::util; using namespace com::sun::star::lang; #define SEARCHPATH_DELIMITER ';' -#define SIGN_STARTVARIABLE OUString( "$(" ) -#define SIGN_ENDVARIABLE OUString( ")" ) +#define SIGN_STARTVARIABLE "$(" +#define SIGN_ENDVARIABLE ")" // Supported variables by the old SvtPathOptions implementation #define SUBSTITUTE_INSTPATH "$(instpath)" commit 69acf266801246d0099d02de57db332fbe167c72 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:25 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I5bd4f30d7b614af34b5ca2edca06bab9350ca206 diff --git a/ucb/source/ucp/hierarchy/hierarchyuri.cxx b/ucb/source/ucp/hierarchy/hierarchyuri.cxx index 0c4b259..03c10dc 100644 --- a/ucb/source/ucp/hierarchy/hierarchyuri.cxx +++ b/ucb/source/ucp/hierarchy/hierarchyuri.cxx @@ -123,9 +123,7 @@ void HierarchyUri::init() const } // Empty path segments? - if ( m_aUri.indexOf( - OUString("//"), - nStart ) != -1 ) + if ( m_aUri.indexOf("//", nStart) != -1 ) { // error, but remember that we did a init(). m_aPath = "/"; diff --git a/ucb/source/ucp/webdav-neon/NeonSession.cxx b/ucb/source/ucp/webdav-neon/NeonSession.cxx index d13e843..5c90ae2 100644 --- a/ucb/source/ucp/webdav-neon/NeonSession.cxx +++ b/ucb/source/ucp/webdav-neon/NeonSession.cxx @@ -720,8 +720,7 @@ void NeonSession::Init() // Register the session with the lock store m_aNeonLockStore.registerSession( m_pHttpSession ); - if ( m_aScheme.equalsIgnoreAsciiCase( - OUString( "https" ) ) ) + if ( m_aScheme.equalsIgnoreAsciiCase("https") ) { // Set a failure callback for certificate check ne_ssl_set_verify( diff --git a/ucb/source/ucp/webdav-neon/UCBDeadPropertyValue.cxx b/ucb/source/ucp/webdav-neon/UCBDeadPropertyValue.cxx index a737766..047b018 100644 --- a/ucb/source/ucp/webdav-neon/UCBDeadPropertyValue.cxx +++ b/ucb/source/ucp/webdav-neon/UCBDeadPropertyValue.cxx @@ -376,8 +376,7 @@ bool UCBDeadPropertyValue::createFromXML( const OString & rInData, } else if ( aCtx.pType->equalsIgnoreAsciiCase( aTypeBoolean ) ) { - if ( aStringValue.equalsIgnoreAsciiCase( - OUString("true") ) ) + if ( aStringValue.equalsIgnoreAsciiCase("true") ) rOutData <<= true; else rOutData <<= false; commit 8918eaf6d6b3de149e77ade965ab46694972b985 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:22 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Idd767eb9e2d2e101a77a19cd5617f479eb9fd2aa diff --git a/sw/qa/core/uwriter.cxx b/sw/qa/core/uwriter.cxx index f4e03a0..849ce1b 100644 --- a/sw/qa/core/uwriter.cxx +++ b/sw/qa/core/uwriter.cxx @@ -823,7 +823,7 @@ void SwDocTest::testSwScanner() aDocStat.Reset(); m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint()); - m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll(OUString('X'), OUString(" = "))); + m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " = ")); pTextNode = aPaM.GetNode().GetTextNode(); pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); CPPUNIT_ASSERT(aDocStat.nWord == 5 && @@ -832,7 +832,7 @@ void SwDocTest::testSwScanner() aDocStat.Reset(); m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint()); - m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll(OUString('X'), OUString(" _ "))); + m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " _ ")); pTextNode = aPaM.GetNode().GetTextNode(); pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); CPPUNIT_ASSERT(aDocStat.nWord == 5 && @@ -841,7 +841,7 @@ void SwDocTest::testSwScanner() aDocStat.Reset(); m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint()); - m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll(OUString('X'), OUString(" -- "))); + m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " -- ")); pTextNode = aPaM.GetNode().GetTextNode(); pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); CPPUNIT_ASSERT(aDocStat.nWord == 5 && @@ -908,7 +908,7 @@ void SwDocTest::testSwScanner() const sal_Unicode aChunk[] = {' ', 0x2013, ' '}; OUString sChunk(aChunk, SAL_N_ELEMENTS(aChunk)); m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint()); - m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll(OUString('X'), sChunk)); + m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", sChunk)); pTextNode = aPaM.GetNode().GetTextNode(); pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); CPPUNIT_ASSERT(aDocStat.nWord == 4 && diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 09e5372..b99ec62 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -1405,11 +1405,11 @@ OUString SwAccessibleContext::GetResource( sal_uInt16 nResId, if( pArg1 ) { - sStr = sStr.replaceFirst( OUString("$(ARG1)"), *pArg1 ); + sStr = sStr.replaceFirst( "$(ARG1)", *pArg1 ); } if( pArg2 ) { - sStr = sStr.replaceFirst( OUString("$(ARG2)"), *pArg2 ); + sStr = sStr.replaceFirst( "$(ARG2)", *pArg2 ); } return sStr; diff --git a/sw/source/core/fields/dbfld.cxx b/sw/source/core/fields/dbfld.cxx index fa8969e..919ca20 100644 --- a/sw/source/core/fields/dbfld.cxx +++ b/sw/source/core/fields/dbfld.cxx @@ -46,7 +46,7 @@ using namespace ::com::sun::star; /// replace database separator by dots for display static OUString lcl_DBTrennConv(const OUString& aContent) { - return aContent.replaceAll(OUString(DB_DELIM), OUString('.')); + return aContent.replaceAll(OUString(DB_DELIM), "."); } // database field type diff --git a/sw/source/core/fields/ddefld.cxx b/sw/source/core/fields/ddefld.cxx index de9d827..34e6fa8 100644 --- a/sw/source/core/fields/ddefld.cxx +++ b/sw/source/core/fields/ddefld.cxx @@ -385,7 +385,7 @@ SwDDEField::~SwDDEField() OUString SwDDEField::Expand() const { OUString aStr = static_cast<SwDDEFieldType*>(GetTyp())->GetExpansion(); - aStr = aStr.replaceAll("\r", OUString()); + aStr = aStr.replaceAll("\r", ""); aStr = aStr.replaceAll("\t", " "); aStr = aStr.replaceAll("\n", "|"); if (aStr.endsWith("|")) diff --git a/sw/source/core/tox/tox.cxx b/sw/source/core/tox/tox.cxx index 0b6a852..6490ae8 100644 --- a/sw/source/core/tox/tox.cxx +++ b/sw/source/core/tox/tox.cxx @@ -627,7 +627,7 @@ OUString SwFormToken::GetString() const break; case TOKEN_TEXT: sData += OUStringLiteral1<TOX_STYLE_DELIMITER>() - + sText.replaceAll(OUString(TOX_STYLE_DELIMITER), OUString()) + + sText.replaceAll(OUStringLiteral1<TOX_STYLE_DELIMITER>(), "") + OUStringLiteral1<TOX_STYLE_DELIMITER>(); break; case TOKEN_AUTHORITY: diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 855be57..e91bea8 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -1244,9 +1244,9 @@ void DocxExport::WriteEmbeddings() embeddingsList[j].Value >>= embeddingsStream; OUString contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - if (embeddingPath.endsWith(OUString(".xlsm"))) + if (embeddingPath.endsWith(".xlsm")) contentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; - else if (embeddingPath.endsWith(OUString(".bin"))) + else if (embeddingPath.endsWith(".bin")) contentType = "application/vnd.openxmlformats-officedocument.oleObject"; if ( embeddingsStream.is() ) diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx index b7c1e2e..03e5181 100644 --- a/sw/source/filter/ww8/ww8par5.cxx +++ b/sw/source/filter/ww8/ww8par5.cxx @@ -249,8 +249,8 @@ long SwWW8ImplReader::Read_AtnBook(WW8PLCFManResult*) OUString SwWW8ImplReader::ConvertFFileName(const OUString& rOrg) { OUString aName = rOrg; - aName = aName.replaceAll("\\\\", OUString('\\')); - aName = aName.replaceAll("%20", OUString(' ')); + aName = aName.replaceAll("\\\\", "\\"); + aName = aName.replaceAll("%20", " "); // remove attached quotation marks if (aName.endsWith("\"")) diff --git a/sw/source/uibase/dbui/mmconfigitem.cxx b/sw/source/uibase/dbui/mmconfigitem.cxx index c5bc58e..d765dc0f 100644 --- a/sw/source/uibase/dbui/mmconfigitem.cxx +++ b/sw/source/uibase/dbui/mmconfigitem.cxx @@ -388,7 +388,7 @@ static OUString lcl_CreateNodeName(Sequence<OUString>& rAssignments ) static void lcl_ConvertToNumbers(OUString& rBlock, const ResStringArray& rHeaders ) { //convert the strings used for UI to numbers used for the configuration - OUString sBlock(rBlock.replaceAll("\n", OUString("\\n"))); + OUString sBlock(rBlock.replaceAll("\n", "\\n")); for(sal_uInt32 i = 0; i < rHeaders.Count(); ++i) { OUString sHeader = "<" + rHeaders.GetString( i ) + ">"; @@ -402,7 +402,7 @@ static void lcl_ConvertFromNumbers(OUString& rBlock, const ResStringArray& rHead { //convert the numbers used for the configuration to strings used for UI to numbers //doesn't use ReplaceAll to prevent expansion of numbers inside of the headers - OUString sBlock(rBlock.replaceAll("\\n", OUString('\n'))); + OUString sBlock(rBlock.replaceAll("\\n", "\n")); SwAddressIterator aGreetingIter(sBlock); sBlock.clear(); while(aGreetingIter.HasMore()) diff --git a/sw/source/uibase/docvw/edtwin2.cxx b/sw/source/uibase/docvw/edtwin2.cxx index dd78039..4f06e6f 100644 --- a/sw/source/uibase/docvw/edtwin2.cxx +++ b/sw/source/uibase/docvw/edtwin2.cxx @@ -236,8 +236,8 @@ void SwEditWin::RequestHelp(const HelpEvent &rEvt) vcl::KeyCode aCode( KEY_SPACE ); vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 ); OUString aModStr( aModifiedCode.GetName() ); - aModStr = aModStr.replaceFirst(aCode.GetName(), OUString()); - aModStr = aModStr.replaceAll("+", OUString()); + aModStr = aModStr.replaceFirst(aCode.GetName(), ""); + aModStr = aModStr.replaceAll("+", ""); sText = SW_RESSTR(STR_SMARTTAG_CLICK).replaceAll("%s", aModStr); } break; diff --git a/sw/source/uibase/fldui/fldmgr.cxx b/sw/source/uibase/fldui/fldmgr.cxx index 9cc7533d..48c0ca8 100644 --- a/sw/source/uibase/fldui/fldmgr.cxx +++ b/sw/source/uibase/fldui/fldmgr.cxx @@ -954,10 +954,10 @@ bool SwFieldMgr::InsertField( //JP 28.08.95: DDE-Topics/-Items can have blanks in their names! // That's not yet considered here. sal_Int32 nIndex = 0; - OUString sCmd = rData.m_sPar2.replaceFirst(OUString(' '), OUString(sfx2::cTokenSeparator), &nIndex); + OUString sCmd = rData.m_sPar2.replaceFirst(" ", OUString(sfx2::cTokenSeparator), &nIndex); if (nIndex>=0 && ++nIndex<sCmd.getLength()) { - sCmd = sCmd.replaceFirst(OUString(' '), OUString(sfx2::cTokenSeparator), &nIndex); + sCmd = sCmd.replaceFirst(" ", OUString(sfx2::cTokenSeparator), &nIndex); } SwDDEFieldType aType( rData.m_sPar1, sCmd, static_cast<SfxLinkUpdateMode>(nFormatId) ); @@ -1401,10 +1401,10 @@ void SwFieldMgr::UpdateCurField(sal_uLong nFormat, // DDE-Topics/-Items can have blanks in their names! // That's not yet considered here! sal_Int32 nIndex = 0; - sPar2 = sPar2.replaceFirst(OUString(' '), OUString(sfx2::cTokenSeparator), &nIndex ); + sPar2 = sPar2.replaceFirst(" ", OUString(sfx2::cTokenSeparator), &nIndex ); if (nIndex>=0 && ++nIndex<sPar2.getLength()) { - sPar2 = sPar2.replaceFirst(OUString(' '), OUString(sfx2::cTokenSeparator), &nIndex); + sPar2 = sPar2.replaceFirst(" ", OUString(sfx2::cTokenSeparator), &nIndex); } break; } diff --git a/sw/source/uibase/utlui/initui.cxx b/sw/source/uibase/utlui/initui.cxx index 99acee2..0b5730c 100644 --- a/sw/source/uibase/utlui/initui.cxx +++ b/sw/source/uibase/utlui/initui.cxx @@ -218,8 +218,8 @@ ShellResource::ShellResource() vcl::KeyCode aCode( KEY_SPACE ); vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 ); OUString aModStr( aModifiedCode.GetName() ); - aModStr = aModStr.replaceFirst(aCode.GetName(), OUString()); - aModStr = aModStr.replaceAll("+", OUString()); + aModStr = aModStr.replaceFirst(aCode.GetName(), ""); + aModStr = aModStr.replaceAll("+", ""); aLinkCtrlClick = aLinkCtrlClick.replaceAll("%s", aModStr); for(sal_uInt16 i = 0; i < nCount; ++i) commit 94ca2679eee35dddd099de29dab571eff919a0f3 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:18 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I2b3e3fedeb9b824f43208a5d4066c9278231dcba diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx index 86d96be..a5895e1 100644 --- a/svx/source/form/navigatortree.cxx +++ b/svx/source/form/navigatortree.cxx @@ -438,7 +438,7 @@ namespace svxform case SID_FM_NEW_FORM: { OUString aStr(SVX_RESSTR(RID_STR_FORM)); - OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll(OUString('#'), aStr); + OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll("#", aStr); pFormModel->BegUndo(aUndoStr); // slot was only available, if there is only one selected entry, @@ -450,7 +450,7 @@ namespace svxform case SID_FM_NEW_HIDDEN: { OUString aStr(SVX_RESSTR(RID_STR_CONTROL)); - OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll(OUString('#'), aStr); + OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll("#", aStr); pFormModel->BegUndo(aUndoStr); // slot was valid for (exactly) one selected form @@ -969,7 +969,7 @@ namespace svxform if (pFormModel) { OUString aStr(SVX_RESSTR(RID_STR_CONTROL)); - OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll(OUString('#'), aStr); + OUString aUndoStr = SVX_RESSTR(RID_STR_UNDO_CONTAINER_INSERT).replaceAll("#", aStr); pFormModel->BegUndo(aUndoStr); } commit 0c7cf7229f065c0f328077d4b148242696a2baeb Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:15 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I3c7b73ebb50c464e6bca816444324e100bd89d23 diff --git a/svtools/source/misc/ehdl.cxx b/svtools/source/misc/ehdl.cxx index 8ac1174..397ba40 100644 --- a/svtools/source/misc/ehdl.cxx +++ b/svtools/source/misc/ehdl.cxx @@ -190,8 +190,7 @@ bool SfxErrorHandler::CreateString( const StringErrorInfo *pStringInfo = PTR_CAST(StringErrorInfo,pErr); if(pStringInfo) { - rStr = rStr.replaceAll(OUString("$(ARG1)"), - pStringInfo->GetErrorString()); + rStr = rStr.replaceAll("$(ARG1)", pStringInfo->GetErrorString()); } else { @@ -347,7 +346,7 @@ bool SfxErrorHandler::GetErrorString( sal_uInt16 nResFlags = aErrorString.GetFlags(); if ( nResFlags ) nFlags = nResFlags; - rStr = rStr.replaceAll(OUString("$(ERROR)"), aErrorString.GetString()); + rStr = rStr.replaceAll("$(ERROR)", aErrorString.GetString()); bRet = true; } else @@ -415,7 +414,7 @@ bool SfxErrorContext::GetString(sal_uLong nErrId, OUString &rStr) if ( aTestEr ) { rStr = static_cast<ResString>(aTestEr).GetString(); - rStr = rStr.replaceAll(OUString("$(ARG1)"), aArg1 ); + rStr = rStr.replaceAll("$(ARG1)", aArg1); bRet = true; } else @@ -429,7 +428,7 @@ bool SfxErrorContext::GetString(sal_uLong nErrId, OUString &rStr) sal_uInt16 nId = ( nErrId & ERRCODE_WARNING_MASK ) ? ERRCTX_WARNING : ERRCTX_ERROR; ResId aSfxResId( RID_ERRCTX, *pMgr ); ErrorResource_Impl aEr( aSfxResId, nId ); - rStr = rStr.replaceAll( OUString("$(ERR)"), static_cast<ResString>(aEr).GetString() ); + rStr = rStr.replaceAll("$(ERR)", static_cast<ResString>(aEr).GetString()); } } commit ca30ba7a390e770d4b420ce02ae769f54a682404 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:12 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I397db197dfa3108ee3c025a60dd9e437dd05a95d diff --git a/sd/source/filter/eppt/pptexanimations.cxx b/sd/source/filter/eppt/pptexanimations.cxx index b629df7..272916d 100644 --- a/sd/source/filter/eppt/pptexanimations.cxx +++ b/sd/source/filter/eppt/pptexanimations.cxx @@ -920,7 +920,7 @@ sal_uInt32 AnimationExporter::GetPresetID( const OUString& rPreset, sal_uInt32 n sal_uInt32 nPresetId = 0; bPresetId = false; - if ( rPreset.match( OUString( "ppt_" ), 0 ) ) + if ( rPreset.match("ppt_", 0) ) { sal_Int32 nLast = rPreset.lastIndexOf( '_' ); if ( ( nLast != -1 ) && ( ( nLast + 1 ) < rPreset.getLength() ) ) diff --git a/sd/source/filter/html/htmlex.cxx b/sd/source/filter/html/htmlex.cxx index e815e07..f1bc794 100644 --- a/sd/source/filter/html/htmlex.cxx +++ b/sd/source/filter/html/htmlex.cxx @@ -3255,8 +3255,8 @@ bool HtmlErrorContext::GetString( sal_uLong, OUString& rCtxStr ) rCtxStr = SdResId( mnResId ).toString(); - rCtxStr = rCtxStr.replaceAll( OUString("$(URL1)"), maURL1 ); - rCtxStr = rCtxStr.replaceAll( OUString("$(URL2)"), maURL2 ); + rCtxStr = rCtxStr.replaceAll( "$(URL1)", maURL1 ); + rCtxStr = rCtxStr.replaceAll( "$(URL2)", maURL2 ); return true; } commit cb0a4a43a52b2f9230dc676e8ffc8700d006ec0c Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:08 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Icdd850336caf998e62cdb5a90fc3683eddd04a3e diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index 764db1f..11aa239 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -3547,13 +3547,13 @@ void ScCompiler::AutoCorrectParsedSymbol() if ( comphelper::string::getTokenCount(aCorrectedSymbol, cx) > 1 ) { // x => * sal_Unicode c = mxSymbols->getSymbolChar(ocMul); - aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUString(cx), OUString(c)); + aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUStringLiteral1<cx>(), OUString(c)); bCorrected = true; } if ( comphelper::string::getTokenCount(aCorrectedSymbol, cX) > 1 ) { // X => * sal_Unicode c = mxSymbols->getSymbolChar(ocMul); - aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUString(cX), OUString(c)); + aCorrectedSymbol = aCorrectedSymbol.replaceAll(OUStringLiteral1<cX>(), OUString(c)); bCorrected = true; } } diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx index a213ddf..1b46428 100644 --- a/sc/source/ui/docshell/impex.cxx +++ b/sc/source/ui/docshell/impex.cxx @@ -695,11 +695,11 @@ static void lcl_UnescapeSylk( OUString & rString, SylkVersion eVersion ) // Older versions quoted the string and doubled embedded quotes, but not // the semicolons, which was plain wrong. if (eVersion >= SYLK_OOO32) - rString = rString.replaceAll( OUString(DOUBLE_SEMICOLON), OUString(';') ); + rString = rString.replaceAll(OUString(DOUBLE_SEMICOLON), ";"); else - rString = rString.replaceAll( OUString(DOUBLE_DOUBLEQUOTE), OUString('"') ); + rString = rString.replaceAll(OUString(DOUBLE_DOUBLEQUOTE), "\""); - rString = rString.replaceAll( OUString(SYLK_LF), OUString('\n') ); + rString = rString.replaceAll(OUString(SYLK_LF), "\n"); } static const sal_Unicode* lcl_ScanSylkString( const sal_Unicode* p, @@ -1497,7 +1497,7 @@ void ScImportExport::EmbeddedNullTreatment( OUString & rStr ) sal_Unicode cNull = 0; if (rStr.indexOf( cNull) >= 0) { - rStr = rStr.replaceAll( OUString( &cNull, 1), OUString()); + rStr = rStr.replaceAll( OUString( &cNull, 1), ""); } } @@ -1909,7 +1909,7 @@ bool ScImportExport::Sylk2Doc( SvStream& rStrm ) // unescape doubled semicolons aCode = aCode.replaceAll(";;", ";"); // get rid of Xcl escape characters - aCode = aCode.replaceAll(OUString(static_cast<sal_Unicode>(0x1b)), OUString()); + aCode = aCode.replaceAll("\x1b", ""); sal_Int32 nCheckPos; short nType; sal_uInt32 nKey; @@ -2002,7 +2002,7 @@ bool ScImportExport::Doc2Sylk( SvStream& rStrm ) case CELLTYPE_EDIT: hasstring: aCellStr = pDoc->GetString(nCol, nRow, aRange.aStart.Tab()); - aCellStr = aCellStr.replaceAll( OUString('\n'), OUString(SYLK_LF) ); + aCellStr = aCellStr.replaceAll("\n", OUString(SYLK_LF)); aBufStr = "C;X"; aBufStr += OUString::number( c ); diff --git a/sc/source/ui/view/gridwin5.cxx b/sc/source/ui/view/gridwin5.cxx index 2e20954..d5b55d6 100644 --- a/sc/source/ui/view/gridwin5.cxx +++ b/sc/source/ui/view/gridwin5.cxx @@ -248,8 +248,8 @@ void ScGridWindow::RequestHelp(const HelpEvent& rHEvt) vcl::KeyCode aCode( KEY_SPACE ); vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 ); OUString aModStr( aModifiedCode.GetName() ); - aModStr = aModStr.replaceFirst(aCode.GetName(), OUString()); - aModStr = aModStr.replaceAll("+", OUString()); + aModStr = aModStr.replaceFirst(aCode.GetName(), ""); + aModStr = aModStr.replaceAll("+", ""); OUString aCtrlClickHlinkStr = ScGlobal::GetRscString( STR_CTRLCLICKHYPERLINK ); aCtrlClickHlinkStr = aCtrlClickHlinkStr.replaceAll("%s", aModStr); diff --git a/sc/source/ui/view/tabvwshe.cxx b/sc/source/ui/view/tabvwshe.cxx index d2298c2..d26475c 100644 --- a/sc/source/ui/view/tabvwshe.cxx +++ b/sc/source/ui/view/tabvwshe.cxx @@ -107,7 +107,7 @@ OUString ScTabViewShell::GetSelectionText( bool bWholeWord ) if ( bInFormatDialog || bWholeWord || aRange.aEnd.Row() == aRange.aStart.Row() ) { - aStrSelection = aStrSelection.replaceAll(OUString(CHAR_CR), " "); + aStrSelection = aStrSelection.replaceAll(OUStringLiteral1<CHAR_CR>(), " "); aStrSelection = aStrSelection.replaceAll("\t", " "); aStrSelection = comphelper::string::stripEnd(aStrSelection, ' '); } commit 327001c7575661a6dd2968a7375dc1eeed58ab2a Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:37:04 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I5bb3493e3d27bd348f58cd4f858f34becf761cd0 diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx index fb27c77..77b4b2b 100644 --- a/oox/source/export/chartexport.cxx +++ b/oox/source/export/chartexport.cxx @@ -821,7 +821,7 @@ void ChartExport::exportExternalData( Reference< css::chart::XChartDocument > xC } FSHelperPtr pFS = GetFS(); OUString type = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package"; - if (relationPath.endsWith(OUString(".bin"))) + if (relationPath.endsWith(".bin")) type = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"; OUString sRelId = GetFB()->addRelation(pFS->getOutputStream(), diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 7161a2f..9b42d2c 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -197,7 +197,7 @@ bool VMLExport::IsWaterMarkShape(const OUString& rStr) { if (rStr.isEmpty() ) return false; - if (rStr.match(OUString("PowerPlusWaterMarkObject")) || rStr.match(OUString("WordPictureWatermark"))) + if (rStr.match("PowerPlusWaterMarkObject") || rStr.match("WordPictureWatermark")) return true; else return false; commit 346938fa26343314a0836bf3347a48fe3342fd74 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:59 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I7ef1dc1d42237ef101731b363359801d9e1e9db6 diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx index e0a797b..d06c2b2 100644 --- a/i18npool/qa/cppunit/test_breakiterator.cxx +++ b/i18npool/qa/cppunit/test_breakiterator.cxx @@ -342,7 +342,7 @@ void TestBreakIterator::testWordBoundaries() const sal_Int32 aSinglePositions[] = {0, 1, 3, 4, 6, 7, 9, 10}; for (size_t j = 1; j < SAL_N_ELEMENTS(aTests); ++j) { - OUString aTest = aBase.replaceAll(OUString("xx"), OUString(aTests[j])); + OUString aTest = aBase.replaceAll("xx", OUString(aTests[j])); sal_Int32 nPos = -1; size_t i = 0; do @@ -365,7 +365,7 @@ void TestBreakIterator::testWordBoundaries() const sal_Int32 aSingleQuotePositions[] = {0, 1, 9, 10}; CPPUNIT_ASSERT(aTests[0] == '\''); { - OUString aTest = aBase.replaceAll(OUString("xx"), OUString(aTests[0])); + OUString aTest = aBase.replaceAll("xx", OUString(aTests[0])); sal_Int32 nPos = -1; size_t i = 0; do commit 995296ea1d48636363a3a80068ceeb002b8bedb8 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:54 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I63f1b54cc9ef49a83800b671a60ea25df7fc2121 diff --git a/framework/inc/queries.h b/framework/inc/queries.h index 6311bc6..8e0abff 100644 --- a/framework/inc/queries.h +++ b/framework/inc/queries.h @@ -33,16 +33,16 @@ namespace framework{ They are used by our FilterFactory or our TypeDetection to return subsets of our cached configuration. *//*-*************************************************************************************************************/ -#define BASE_QUERY_ALL DECLARE_ASCII("_query_all" ) -#define BASE_QUERY_WRITER DECLARE_ASCII("_query_Writer" ) -#define BASE_QUERY_WEB DECLARE_ASCII("_query_web" ) -#define BASE_QUERY_GLOBAL DECLARE_ASCII("_query_global" ) -#define BASE_QUERY_CHART DECLARE_ASCII("_query_chart" ) -#define BASE_QUERY_CALC DECLARE_ASCII("_query_calc" ) -#define BASE_QUERY_IMPRESS DECLARE_ASCII("_query_impress" ) -#define BASE_QUERY_DRAW DECLARE_ASCII("_query_draw" ) -#define BASE_QUERY_MATH DECLARE_ASCII("_query_math" ) -#define BASE_QUERY_GRAPHICS DECLARE_ASCII("_query_graphics") +#define BASE_QUERY_ALL "_query_all" +#define BASE_QUERY_WRITER "_query_Writer" +#define BASE_QUERY_WEB "_query_web" +#define BASE_QUERY_GLOBAL "_query_global" +#define BASE_QUERY_CHART "_query_chart" +#define BASE_QUERY_CALC "_query_calc" +#define BASE_QUERY_IMPRESS "_query_impress" +#define BASE_QUERY_DRAW "_query_draw" +#define BASE_QUERY_MATH "_query_math" +#define BASE_QUERY_GRAPHICS "_query_graphics" /*-************************************************************************************************************ @short These parameters can be used in combination with BASE_QUERY_... defines to @@ -63,17 +63,17 @@ namespace framework{ #define SEPARATOR_QUERYPARAM ((sal_Unicode)':') #define SEPARATOR_QUERYPARAMVALUE ((sal_Unicode)'=') -#define QUERYPARAM_IFLAGS DECLARE_ASCII("iflags" ) -#define QUERYPARAM_EFLAGS DECLARE_ASCII("eflags" ) -#define QUERYPARAM_SORT_PROP DECLARE_ASCII("sort_prop" ) +#define QUERYPARAM_IFLAGS "iflags" +#define QUERYPARAM_EFLAGS "eflags" +#define QUERYPARAM_SORT_PROP "sort_prop" -#define QUERYPARAM_DESCENDING DECLARE_ASCII("descending" ) -#define QUERYPARAM_USE_ORDER DECLARE_ASCII("use_order" ) -#define QUERYPARAM_DEFAULT_FIRST DECLARE_ASCII("default_first" ) -#define QUERYPARAM_CASE_SENSITIVE DECLARE_ASCII("case_sensitive" ) +#define QUERYPARAM_DESCENDING "descending" +#define QUERYPARAM_USE_ORDER "use_order" +#define QUERYPARAM_DEFAULT_FIRST "default_first" +#define QUERYPARAM_CASE_SENSITIVE "case_sensitive" -#define QUERYPARAMVALUE_SORT_PROP_NAME DECLARE_ASCII("name" ) -#define QUERYPARAMVALUE_SORT_PROP_UINAME DECLARE_ASCII("uiname" ) +#define QUERYPARAMVALUE_SORT_PROP_NAME "name" +#define QUERYPARAMVALUE_SORT_PROP_UINAME "uiname" /*-************************************************************************************************************ @short Helper class to support easy building of a query statements. diff --git a/framework/source/accelerators/storageholder.cxx b/framework/source/accelerators/storageholder.cxx index 2dc2731..e22d9e6 100644 --- a/framework/source/accelerators/storageholder.cxx +++ b/framework/source/accelerators/storageholder.cxx @@ -494,7 +494,7 @@ OUString StorageHolder::impl_st_normPath(const OUString& sPath) OUString sNormedPath = sPath; // "/bla" => "bla" && "/" => "" (!) - if (sNormedPath.startsWith(PATH_SEPARATOR)) + if (sNormedPath.startsWith(PATH_SEPARATOR_ASCII)) sNormedPath += sNormedPath.copy(1); // "/" => "" || "" => "" ? @@ -502,7 +502,7 @@ OUString StorageHolder::impl_st_normPath(const OUString& sPath) return OUString(); // "bla" => "bla/" - if (sNormedPath.lastIndexOf(PATH_SEPARATOR) != (sNormedPath.getLength()-1)) + if (sNormedPath.lastIndexOf(PATH_SEPARATOR_UNICODE) != (sNormedPath.getLength()-1)) sNormedPath += PATH_SEPARATOR; return sNormedPath; commit db081acb013666a84f0ae30c3c3132835d2638db Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:47 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I7d8b0ab33980726ffb4887b1f19797702d224191 diff --git a/filter/source/graphic/GraphicExportFilter.cxx b/filter/source/graphic/GraphicExportFilter.cxx index 2f4caba..5797013 100644 --- a/filter/source/graphic/GraphicExportFilter.cxx +++ b/filter/source/graphic/GraphicExportFilter.cxx @@ -44,10 +44,10 @@ void GraphicExportFilter::gatherProperties( const Sequence<PropertyValue>& rProp if ( aProperty.Name == "FilterName" ) { aProperty.Value >>= aInternalFilterName; - aInternalFilterName = aInternalFilterName.replaceFirst( OUString( "draw_" ), OUString() ); - aInternalFilterName = aInternalFilterName.replaceFirst( OUString( "impress_" ), OUString() ); - aInternalFilterName = aInternalFilterName.replaceFirst( OUString( "calc_" ), OUString() ); - aInternalFilterName = aInternalFilterName.replaceFirst( OUString( "writer_" ), OUString() ); + aInternalFilterName = aInternalFilterName.replaceFirst("draw_", ""); + aInternalFilterName = aInternalFilterName.replaceFirst("impress_", ""); + aInternalFilterName = aInternalFilterName.replaceFirst("calc_", ""); + aInternalFilterName = aInternalFilterName.replaceFirst("writer_", ""); } else if ( aProperty.Name == "FilterData" ) { diff --git a/filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx b/filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx index aa09f59..7aee584 100644 --- a/filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx +++ b/filter/source/xmlfilteradaptor/XmlFilterAdaptor.cxx @@ -141,7 +141,7 @@ bool SAL_CALL XmlFilterAdaptor::importImpl( const Sequence< ::com::sun::star::be Sequence<com::sun::star::beans::PropertyValue> pValue=xstyleLoader->getStyleLoaderOptions(); //Load the Styles from the Template URL Supplied in the TypeDetection file - if(msTemplateName.indexOf(OUString( "file:" ))==-1) + if(msTemplateName.indexOf("file:")==-1) { SvtPathOptions aOptions; OUString PathString = aOptions.SubstituteVariable(OUString("$(progurl)")); diff --git a/filter/source/xsltdialog/xmlfilterjar.cxx b/filter/source/xsltdialog/xmlfilterjar.cxx index c14917b..ce6ddba 100644 --- a/filter/source/xsltdialog/xmlfilterjar.cxx +++ b/filter/source/xsltdialog/xmlfilterjar.cxx @@ -123,7 +123,7 @@ void XMLFilterJarHelper::addFile( Reference< XInterface > xRootFolder, Reference { OUString aFileURL( rSourceFile ); - if( !aFileURL.matchIgnoreAsciiCase( OUString("file://") ) ) + if( !aFileURL.matchIgnoreAsciiCase("file://") ) { aFileURL = URIHelper::SmartRel2Abs( INetURLObject(sProgPath), aFileURL, Link<OUString *, bool>(), false ); } commit 768abe343c9c596a4f11e58b98d7871e4172758d Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:42 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Ia4f844e0e9249f54d134fbbde11aa1f7e250e8af diff --git a/extensions/source/propctrlr/selectlabeldialog.cxx b/extensions/source/propctrlr/selectlabeldialog.cxx index 0d5b30d..e9acfb1 100644 --- a/extensions/source/propctrlr/selectlabeldialog.cxx +++ b/extensions/source/propctrlr/selectlabeldialog.cxx @@ -75,10 +75,10 @@ namespace pcr if (::comphelper::hasProperty(PROPERTY_CLASSID, m_xControlModel)) nClassID = ::comphelper::getINT16(m_xControlModel->getPropertyValue(PROPERTY_CLASSID)); - sDescription = sDescription.replaceAll(OUString("$controlclass$"), + sDescription = sDescription.replaceAll("$controlclass$", GetUIHeadlineName(nClassID, makeAny(m_xControlModel))); OUString sName = ::comphelper::getString(m_xControlModel->getPropertyValue(PROPERTY_NAME)); - sDescription = sDescription.replaceAll(OUString("$controlname$"), sName); + sDescription = sDescription.replaceAll("$controlname$", sName); m_pMainDesc->SetText(sDescription); // search for the root of the form hierarchy commit 8987a2920cc638939c3d5beb0f80c9bd6a13f3d5 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:36 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Ie217f99961c6f2c224d1c01beaf0146a4ea3e0c2 diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index 484ba38..6037249 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -1418,7 +1418,7 @@ void ImpEditView::Paste( ::com::sun::star::uno::Reference< ::com::sun::star::dat OUString aTmpText; aData >>= aTmpText; OUString aText(convertLineEnd(aTmpText, LINEEND_LF)); - aText = aText.replaceAll( OUString(LINE_SEP), " " ); + aText = aText.replaceAll( OUStringLiteral1<LINE_SEP>(), " " ); aSel = pEditEngine->InsertText(aSel, aText); } catch( ... ) commit 68c09b05f00a224872b8ce962f144bf6d8ccbe78 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:31 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Ifd804fb45fb032dddbf2ba3643ec0964e0e24724 diff --git a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx index 6be7270..a2bae59 100644 --- a/dbaccess/source/core/api/SingleSelectQueryComposer.cxx +++ b/dbaccess/source/core/api/SingleSelectQueryComposer.cxx @@ -449,7 +449,7 @@ OUString OSingleSelectQueryComposer::impl_getColumnRealName_throw(const Referenc ) { OUString sError(DBACORE_RESSTRING(RID_STR_COLUMN_UNKNOWN_PROP)); - SQLException aErr(sError.replaceAll("%value", OUString(PROPERTY_NAME)),*this,SQLSTATE_GENERAL,1000,Any() ); + SQLException aErr(sError.replaceAll("%value", PROPERTY_NAME),*this,SQLSTATE_GENERAL,1000,Any() ); throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_VALID),*this,SQLSTATE_GENERAL,1000,makeAny(aErr) ); } @@ -519,7 +519,7 @@ OUString OSingleSelectQueryComposer::impl_getColumnName_throw(const Reference< X ) { OUString sError(DBACORE_RESSTRING(RID_STR_COLUMN_UNKNOWN_PROP)); - SQLException aErr(sError.replaceAll("%value", OUString(PROPERTY_NAME)),*this,SQLSTATE_GENERAL,1000,Any() ); + SQLException aErr(sError.replaceAll("%value", PROPERTY_NAME),*this,SQLSTATE_GENERAL,1000,Any() ); throw SQLException(DBACORE_RESSTRING(RID_STR_COLUMN_NOT_VALID),*this,SQLSTATE_GENERAL,1000,makeAny(aErr) ); } diff --git a/dbaccess/source/ui/app/AppController.cxx b/dbaccess/source/ui/app/AppController.cxx index c07b651..50731ed 100644 --- a/dbaccess/source/ui/app/AppController.cxx +++ b/dbaccess/source/ui/app/AppController.cxx @@ -2160,7 +2160,7 @@ void OApplicationController::renameEntry() { OUString sStatus("S1000"); OUString sMsg = OUString( ModuleRes( STR_NAME_ALREADY_EXISTS ) ); - showError(SQLExceptionInfo(SQLException(sMsg.replaceAll(OUString('#'), e.Message), e.Context, sStatus, 0, Any()))); + showError(SQLExceptionInfo(SQLException(sMsg.replaceAll("#", e.Message), e.Context, sStatus, 0, Any()))); } catch(const Exception& ) { diff --git a/dbaccess/source/ui/browser/unodatbr.cxx b/dbaccess/source/ui/browser/unodatbr.cxx index 9d34932..e593add 100644 --- a/dbaccess/source/ui/browser/unodatbr.cxx +++ b/dbaccess/source/ui/browser/unodatbr.cxx @@ -1805,7 +1805,7 @@ FeatureState SbaTableQueryBrowser::GetState(sal_uInt16 nId) const xProp->getPropertyValue(PROPERTY_COMMAND) >>= aName; OUString sObject(aName); - aReturn.sTitle = sTitle.replaceFirst(OUString('#'), sObject); + aReturn.sTitle = sTitle.replaceFirst("#", sObject); aReturn.bEnabled = true; } break; @@ -2672,7 +2672,7 @@ bool SbaTableQueryBrowser::implSelect( SvTreeListEntry* _pEntry ) OUString sFilter = " WHERE "; sFilter = sFilter + xAnalyzer->getFilter(); OUString sReplace(sSql); - sReplace = sReplace.replaceFirst(sFilter,OUString()); + sReplace = sReplace.replaceFirst(sFilter, ""); xAnalyzer->setQuery(sReplace); Reference<XSingleSelectQueryComposer> xComposer(xAnalyzer,UNO_QUERY); xComposer->setFilter(OUString("0=1")); diff --git a/dbaccess/source/ui/control/opendoccontrols.cxx b/dbaccess/source/ui/control/opendoccontrols.cxx index 7eb8ef0..05d9480 100644 --- a/dbaccess/source/ui/control/opendoccontrols.cxx +++ b/dbaccess/source/ui/control/opendoccontrols.cxx @@ -171,7 +171,7 @@ namespace dbaui // our label should equal the UI text of the "Open" command OUString sLabel(GetCommandText(".uno:Open", m_sModule)); - SetText(" " + sLabel.replaceAll("~", OUString())); + SetText(" " + sLabel.replaceAll("~", "")); // Place icon left of text and both centered in the button. SetModeImage( GetCommandIcon( ".uno:Open", m_sModule ) ); diff --git a/dbaccess/source/ui/dlg/DbAdminImpl.cxx b/dbaccess/source/ui/dlg/DbAdminImpl.cxx index c4de3e5..ece6bea 100644 --- a/dbaccess/source/ui/dlg/DbAdminImpl.cxx +++ b/dbaccess/source/ui/dlg/DbAdminImpl.cxx @@ -256,9 +256,9 @@ bool ODbDataSourceAdministrationHelper::getCurrentSettings(Sequence< PropertyVal sLoginRequest = sLoginRequest.replaceAll("$name$", sName); else { - sLoginRequest = sLoginRequest.replaceAll("\"$name$\"", OUString()); + sLoginRequest = sLoginRequest.replaceAll("\"$name$\"", ""); // ensure that in other languages the string will be deleted - sLoginRequest = sLoginRequest.replaceAll("$name$", OUString()); + sLoginRequest = sLoginRequest.replaceAll("$name$", ""); } // the request commit 90dfd9d87ad93525dd815e1e5d047045fd7628b0 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:27 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I0749564ce91cb6ad5ca58cc6432ff3cd4b2f579b diff --git a/cui/source/options/optpath.cxx b/cui/source/options/optpath.cxx index 6bebf7f..06f6fee 100644 --- a/cui/source/options/optpath.cxx +++ b/cui/source/options/optpath.cxx @@ -66,7 +66,7 @@ using namespace svx; #define POSTFIX_INTERNAL OUString("_internal") #define POSTFIX_USER OUString("_user") #define POSTFIX_WRITABLE OUString("_writable") -#define VAR_ONE OUString("%1") +#define VAR_ONE "%1" #define IODLG_CONFIGNAME OUString("FilePicker_Save") // struct OptPath_Impl --------------------------------------------------- commit 6ce8ae5f0ca3cda17a1e708a273419f46bd0e8b0 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:23 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I5fe4002c3c0065dfe93be0d8f47df90d57af898b diff --git a/cppuhelper/source/factory.cxx b/cppuhelper/source/factory.cxx index f7f79007..6040cf6 100644 --- a/cppuhelper/source/factory.cxx +++ b/cppuhelper/source/factory.cxx @@ -782,8 +782,7 @@ Reference< XInterface > ORegistryFactoryHelper::createModuleFactory() aLocation = xLocationKey->getAsciiValue(); // search protocol delimiter - sal_Int32 nPos = aLocation.indexOf( - OUString("://") ); + sal_Int32 nPos = aLocation.indexOf("://"); if( nPos != -1 ) { aActivatorName = aLocation.copy( 0, nPos ); commit 472c0a3dcc8dd146e584c4b677a63854b8642f35 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:19 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I36ae4b57049fe4deabe785ccfecf78608461086f diff --git a/cppu/source/typelib/typelib.cxx b/cppu/source/typelib/typelib.cxx index 740b9bc..129b2c0 100644 --- a/cppu/source/typelib/typelib.cxx +++ b/cppu/source/typelib/typelib.cxx @@ -1974,8 +1974,7 @@ extern "C" void SAL_CALL typelib_typedescription_getByName( if (0 == *ppRet) { // Check for derived interface member type: - sal_Int32 i1 = name.lastIndexOf( - rtl::OUString(":@")); + sal_Int32 i1 = name.lastIndexOf(":@"); if (i1 >= 0) { sal_Int32 i2 = i1 + RTL_CONSTASCII_LENGTH(":@"); sal_Int32 i3 = name.indexOf(',', i2); commit 33be6e79a0ffd7823721ebe96784a5a68fe78f51 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:14 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I9a10663f1b428d3f6a6a6d5187b5774076aef75b diff --git a/connectivity/source/drivers/evoab2/NStatement.cxx b/connectivity/source/drivers/evoab2/NStatement.cxx index 94b3c81..79c6a2f 100644 --- a/connectivity/source/drivers/evoab2/NStatement.cxx +++ b/connectivity/source/drivers/evoab2/NStatement.cxx @@ -388,7 +388,7 @@ EBookQuery *OCommonStatement::whereAnalysis( const OSQLParseNode* parseTree ) } else if( (aMatchString.indexOf ( WILDCARD ) == aMatchString.lastIndexOf ( WILDCARD ) ) ) { // One occurrence of '%' matches... - if ( aMatchString.startsWith( OUString(WILDCARD) ) ) + if ( aMatchString.startsWith(OUStringLiteral1<WILDCARD>()) ) pResult = createTest( aColumnName, E_BOOK_QUERY_ENDS_WITH, aMatchString.copy( 1 ) ); else if ( aMatchString.indexOf ( WILDCARD ) == aMatchString.getLength() - 1 ) pResult = createTest( aColumnName, E_BOOK_QUERY_BEGINS_WITH, aMatchString.copy( 0, aMatchString.getLength() - 1 ) ); @@ -396,7 +396,7 @@ EBookQuery *OCommonStatement::whereAnalysis( const OSQLParseNode* parseTree ) m_pConnection->throwGenericSQLException(STR_QUERY_LIKE_WILDCARD,*this); } else if( aMatchString.getLength() >= 3 && - aMatchString.startsWith( OUString(WILDCARD) ) && + aMatchString.startsWith(OUStringLiteral1<WILDCARD>()) && aMatchString.indexOf ( WILDCARD, 1) == aMatchString.getLength() - 1 ) { // one '%' at the start and another at the end pResult = createTest( aColumnName, E_BOOK_QUERY_CONTAINS, aMatchString.copy (1, aMatchString.getLength() - 2) ); commit 2434f2983894a1577080be6ea1881cc6afcafcf9 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:36:00 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I0e2e161a29b653cf16b2e3a6ddeb89567b5342c8 diff --git a/include/comphelper/string.hxx b/include/comphelper/string.hxx index 5bf8296..0609e62 100644 --- a/include/comphelper/string.hxx +++ b/include/comphelper/string.hxx @@ -83,7 +83,7 @@ inline OString remove(const OString &rIn, */ inline OUString remove(const OUString &rIn, sal_Unicode c) -{ return rIn.replaceAll(OUString(c), OUString()); } +{ return rIn.replaceAll(OUString(c), ""); } /** Removes all occurrences of a character from within the source string commit 687ab37853be1adaf84a78a6a5b1c947ea0608fc Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:35:50 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: Ie6ca3065ee60fb2ad75f3bab53059046a981da8d diff --git a/basic/source/comp/codegen.cxx b/basic/source/comp/codegen.cxx index 81f9de2..08b695a 100644 --- a/basic/source/comp/codegen.cxx +++ b/basic/source/comp/codegen.cxx @@ -194,7 +194,7 @@ void SbiCodeGen::Save() sal_uInt16 nPassCount = 1; if( nIfaceCount ) { - int nPropPrefixFound = aProcName.indexOf(OUString("Property ")); + int nPropPrefixFound = aProcName.indexOf("Property "); OUString aPureProcName = aProcName; OUString aPropPrefix; if( nPropPrefixFound == 0 ) commit fce88d8ff087bdc6b14649e15e1123892c5d414f Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 12:35:44 2015 +0200 loplugin:stringconstant: Flag more inefficiencies Change-Id: I7c79445bfa1536706561752da107090599ef26a2 diff --git a/basctl/source/basicide/brkdlg.cxx b/basctl/source/basicide/brkdlg.cxx index eff2c10..4c50b69 100644 --- a/basctl/source/basicide/brkdlg.cxx +++ b/basctl/source/basicide/brkdlg.cxx @@ -43,7 +43,7 @@ bool lcl_ParseText(OUString const &rText, size_t& rLineNr ) // number n. (Maybe it would be better to ignore all whitespace instead // of just spaces.) OUString aText( - rText.replaceAll(" ", OUString())); + rText.replaceAll(" ", "")); if (aText.isEmpty()) return false; sal_Unicode cFirst = aText[0]; commit 8007417c318140d74b87ec5abcf835f4a2ba9682 Author: Stephan Bergmann <sberg...@redhat.com> Date: Thu Jun 25 10:15:34 2015 +0200 Revert "Revert "Generalize OUStringLiteral1"" This reverts commit 5cba714b4d03ed54debf71534ad8c8edc383a01e, now including a workaround for <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53658> "internal compiler error -- segmentation fault." Change-Id: I31f6d9ddcb0b884134703df2b9dc1800ba0a84be diff --git a/include/rtl/strbuf.hxx b/include/rtl/strbuf.hxx index 81773b4..3071103 100644 --- a/include/rtl/strbuf.hxx +++ b/include/rtl/strbuf.hxx @@ -170,10 +170,14 @@ public: template< typename T > OStringBuffer( T& literal, typename libreoffice_internal::ConstCharArrayDetector< T, libreoffice_internal::Dummy >::Type = libreoffice_internal::Dummy()) : pData(NULL) - , nCapacity( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 + 16 ) - { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_string_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 16 ); + , nCapacity( libreoffice_internal::ConstCharArrayDetector<T>::length + 16 ) + { + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_string_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 16); #ifdef RTL_STRING_UNITTEST rtl_string_unittest_const_literal = true; #endif @@ -453,8 +457,12 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, OStringBuffer& >::Type append( T& literal ) { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_stringbuffer_insert( &pData, &nCapacity, getLength(), literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_stringbuffer_insert( + &pData, &nCapacity, getLength(), + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); return *this; } @@ -708,8 +716,12 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, OStringBuffer& >::Type insert( sal_Int32 offset, T& literal ) { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_stringbuffer_insert( &pData, &nCapacity, offset, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_stringbuffer_insert( + &pData, &nCapacity, offset, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); return *this; } diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx index 56cbf93..e3237ff2 100644 --- a/include/rtl/string.hxx +++ b/include/rtl/string.hxx @@ -181,12 +181,18 @@ public: template< typename T > OString( T& literal, typename libreoffice_internal::ConstCharArrayDetector< T, libreoffice_internal::Dummy >::Type = libreoffice_internal::Dummy() ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); pData = 0; - if( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_string_new( &pData ); - else - rtl_string_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); + if (libreoffice_internal::ConstCharArrayDetector<T>::length == 0) { + rtl_string_new(&pData); + } else { + rtl_string_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 0); + } #ifdef RTL_STRING_UNITTEST rtl_string_unittest_const_literal = true; #endif @@ -278,11 +284,17 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, OString& >::Type operator=( T& literal ) { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - if( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_string_new( &pData ); - else - rtl_string_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + if (libreoffice_internal::ConstCharArrayDetector<T>::length == 0) { + rtl_string_new(&pData); + } else { + rtl_string_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 0); + } return *this; } @@ -543,11 +555,17 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type equalsIgnoreAsciiCase( T& literal ) const { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - if ( pData->length != libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) - return false; - return rtl_str_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + (pData->length + == libreoffice_internal::ConstCharArrayDetector<T>::length) + && (rtl_str_compareIgnoreAsciiCase_WithLength( + pData->buffer, pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0); } /** @@ -608,10 +626,16 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type match( T& literal, sal_Int32 fromIndex = 0 ) const { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_str_shortenedCompare_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + rtl_str_shortenedCompare_WithLength( + pData->buffer + fromIndex, pData->length - fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0; } /** @@ -681,9 +705,16 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type matchIgnoreAsciiCase( T& literal, sal_Int32 fromIndex = 0 ) const { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + rtl_str_shortenedCompareIgnoreAsciiCase_WithLength( + pData->buffer+fromIndex, pData->length-fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0; } /** @@ -720,7 +751,8 @@ public: RTL_STRING_CONST_FUNCTION bool b = match(literal, 0); if (b && rest != 0) { - *rest = copy(libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + *rest = copy( + libreoffice_internal::ConstCharArrayDetector<T>::length); } return b; } @@ -758,14 +790,21 @@ public: T & literal, OString * rest = 0) const { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - bool b = libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 <= getLength() - && match(literal, getLength() - ( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 )); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + bool b + = (libreoffice_internal::ConstCharArrayDetector<T>::length + <= sal_uInt32(getLength())) + && match( + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + (getLength() + - libreoffice_internal::ConstCharArrayDetector<T>::length)); if (b && rest != 0) { *rest = copy( 0, (getLength() - - (libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1))); + - libreoffice_internal::ConstCharArrayDetector<T>::length)); } return b; } @@ -834,10 +873,17 @@ public: friend typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator==( const OString& rStr, T& literal ) { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rStr.getLength() == libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 - && rtl_str_compare_WithLength( rStr.pData->buffer, rStr.pData->length, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + (rStr.getLength() + == libreoffice_internal::ConstCharArrayDetector<T>::length) + && (rtl_str_compare_WithLength( + rStr.pData->buffer, rStr.pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0); } /** @@ -849,10 +895,17 @@ public: friend typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator==( T& literal, const OString& rStr ) { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rStr.getLength() == libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 - && rtl_str_compare_WithLength( rStr.pData->buffer, rStr.pData->length, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + (rStr.getLength() + == libreoffice_internal::ConstCharArrayDetector<T>::length) + && (rtl_str_compare_WithLength( + rStr.pData->buffer, rStr.pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0); } template< typename T > @@ -994,9 +1047,12 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const { RTL_STRING_CONST_FUNCTION - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); sal_Int32 n = rtl_str_indexOfStr_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + pData->buffer + fromIndex, pData->length - fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); return n < 0 ? n : n + fromIndex; } diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx index a74dd77..7ef9e11 100644 --- a/include/rtl/stringconcat.hxx +++ b/include/rtl/stringconcat.hxx @@ -141,6 +141,19 @@ struct ToStringHelper< const char[ N ] > static const bool allowOUStringConcat = true; }; +#if defined LIBO_INTERNAL_ONLY +template<char C> struct ToStringHelper<OUStringLiteral1_<C>> { + static int length(OUStringLiteral1_<C>) { return 1; } + static char * addData(char * buffer, OUStringLiteral1_<C> literal) + { return addDataHelper(buffer, &literal.c, 1); } + static sal_Unicode * addData( + sal_Unicode * buffer, OUStringLiteral1_<C> literal) + { return addDataLiteral(buffer, &literal.c, 1); } + static bool const allowOStringConcat = false; + static bool const allowOUStringConcat = true; +}; +#endif + /** @internal diff --git a/include/rtl/stringutils.hxx b/include/rtl/stringutils.hxx index fb11545..ff25d4d 100644 --- a/include/rtl/stringutils.hxx +++ b/include/rtl/stringutils.hxx @@ -11,6 +11,10 @@ #define INCLUDED_RTL_STRINGUTILS_HXX #include <sal/config.h> + +#include <cstddef> +#include <cstring> + #include <sal/types.h> // The unittest uses slightly different code to help check that the proper @@ -29,6 +33,60 @@ namespace rtl #undef rtl #endif +#if defined LIBO_INTERNAL_ONLY +/// @cond INTERNAL + +/** A simple wrapper around an ASCII character literal. + + Can be useful to pass a char constant with ASCII value into a + OUString-related function that is optimized for ASCII string literal + arguments. That is, instead of + + char const WILDCARD = '%'; + ... + if (s[i] == WILDCARD) ... + ... + if (s.endsWith(OUString(WILDCARD))) ... + + use + + char const WILDCARD = '%'; + ... + if (s[i] == WILDCARD) ... + ... + if (s.endsWith(OUStringLiteral1<WILDCARD>())) ... + + to avoid creating a temporary OUString instance, and instead pick the + endsWith overload actually designed to take an argument of type + char const[N]. + + Instances of OUStringLiteral1 need to be const, as those literal-optimized + functions take the literal argument by non-const lvalue reference, for + technical reasons. Except with MSVC, at least up to Visual Studio 2013: + For one, it fails to take that const-ness into account when trying to match + "OUStringLiteral1_<C> const" against T in a "T & literal" parameter of a + function template. But for another, as a language extension, it allows to + bind non-const temporary OUStringLiteral1_ instances to non-const lvalue + references, but also with a warning that thus needs to be disabled. + + @since LibreOffice 5.0 +*/ +template<char C> struct SAL_WARN_UNUSED OUStringLiteral1_ { + static_assert( + static_cast<unsigned char>(C) < 0x80, + "non-ASCII character in OUStringLiteral1"); + char const c = C; +}; +#if defined _MSC_VER && _MSC_VER <= 1800 // Visual Studio 2013 +template<char C> using OUStringLiteral1 = OUStringLiteral1_<C>; +#pragma warning(disable: 4239) +#else +template<char C> using OUStringLiteral1 = OUStringLiteral1_<C> const; +#endif + +/// @endcond +#endif + namespace libreoffice_internal { /* @@ -102,13 +160,34 @@ struct ConstCharArrayDetector { static const bool ok = false; }; -template< int N, typename T > +template< std::size_t N, typename T > struct ConstCharArrayDetector< const char[ N ], T > { typedef T Type; - static const int size = N; + static const std::size_t length = N - 1; static const bool ok = true; + static bool isValid(char const (& literal)[N]) + { return std::strlen(literal) == length; } + static char const * toPointer(char const (& literal)[N]) { return literal; } }; +#if defined LIBO_INTERNAL_ONLY +template<char C, typename T> struct ConstCharArrayDetector< +#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ <= 8 \ + && !defined __clang__ + OUStringLiteral1_<C> const, +#else + OUStringLiteral1<C>, +#endif + T> +{ + typedef T Type; + static const std::size_t length = 1; + static const bool ok = true; + static bool isValid(OUStringLiteral1_<C>) { return true; } + static char const * toPointer(OUStringLiteral1_<C> const & literal) + { return &literal.c; } +}; +#endif // this one is used to rule out only const char[N] template< typename T > @@ -137,6 +216,10 @@ template< int N > struct ExceptCharArrayDetector< const char[ N ] > { }; +#if defined LIBO_INTERNAL_ONLY && defined _MSC_VER && _MSC_VER <= 1800 + // Visual Studio 2013 +template<char C> struct ExceptCharArrayDetector<OUStringLiteral1<C>> {}; +#endif template< typename T1, typename T2 = void > struct SalUnicodePtrDetector diff --git a/include/rtl/ustrbuf.hxx b/include/rtl/ustrbuf.hxx index 04ac8a6..fe64ebe 100644 --- a/include/rtl/ustrbuf.hxx +++ b/include/rtl/ustrbuf.hxx @@ -132,10 +132,14 @@ public: template< typename T > OUStringBuffer( T& literal, typename libreoffice_internal::ConstCharArrayDetector< T, libreoffice_internal::Dummy >::Type = libreoffice_internal::Dummy() ) : pData(NULL) - , nCapacity( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 + 16 ) - { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uString_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 16 ); + , nCapacity( libreoffice_internal::ConstCharArrayDetector<T>::length + 16 ) + { + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_uString_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 16); #ifdef RTL_STRING_UNITTEST rtl_string_unittest_const_literal = true; #endif @@ -470,9 +474,12 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, OUStringBuffer& >::Type append( T& literal ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, getLength(), literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_uStringbuffer_insert_ascii( + &pData, &nCapacity, getLength(), + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); return *this; } @@ -813,9 +820,12 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, OUStringBuffer& >::Type insert( sal_Int32 offset, T& literal ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - rtl_uStringbuffer_insert_ascii( &pData, &nCapacity, offset, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + rtl_uStringbuffer_insert_ascii( + &pData, &nCapacity, offset, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); return *this; } @@ -1199,11 +1209,13 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); - return ret < 0 ? ret : ret + fromIndex; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + sal_Int32 n = rtl_ustr_indexOfAscii_WithLength( + pData->buffer + fromIndex, pData->length - fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); + return n < 0 ? n : n + fromIndex; } /** @@ -1263,9 +1275,12 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type lastIndexOf( T& literal ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); return rtl_ustr_lastIndexOfAscii_WithLength( - pData->buffer, pData->length, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + pData->buffer, pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } /** diff --git a/include/rtl/ustring.hxx b/include/rtl/ustring.hxx index 1e9bfa8..387a6e8 100644 --- a/include/rtl/ustring.hxx +++ b/include/rtl/ustring.hxx @@ -73,17 +73,6 @@ struct SAL_WARN_UNUSED OUStringLiteral const char* data; }; -/** A simple wrapper around an ASCII character literal, for use in certain - OUString functions designed for efficient processing of string literals. - - @since LibreOffice 5.0 -*/ -template<char C> struct SAL_WARN_UNUSED OUStringLiteral1 { - static_assert( - static_cast<unsigned char>(C) < 0x80, - "non-ASCII character in OUStringLiteral1"); -}; - /// @endcond #endif @@ -226,12 +215,18 @@ public: template< typename T > OUString( T& literal, typename libreoffice_internal::ConstCharArrayDetector< T, libreoffice_internal::Dummy >::Type = libreoffice_internal::Dummy() ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); pData = 0; - if( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_uString_new( &pData ); - else - rtl_uString_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); + if (libreoffice_internal::ConstCharArrayDetector<T>::length == 0) { + rtl_uString_new(&pData); + } else { + rtl_uString_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 0); + } #ifdef RTL_STRING_UNITTEST rtl_string_unittest_const_literal = true; #endif @@ -404,27 +399,19 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, OUString& >::Type operator=( T& literal ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - if( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 == 0 ) // empty string - rtl_uString_new( &pData ); - else - rtl_uString_newFromLiteral( &pData, literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, 0 ); - return *this; - } - -#if defined LIBO_INTERNAL_ONLY // "RTL_FAST_STRING" - /// @cond INTERNAL - /** Assign a new string from a single ASCII character literal. - - @since LibreOffice 5.0 - */ - template<char C> OUString & operator =(OUStringLiteral1<C>) { - sal_Unicode const c = C; - rtl_uString_newFromStr_WithLength(&pData, &c, 1); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + if (libreoffice_internal::ConstCharArrayDetector<T>::length == 0) { + rtl_uString_new(&pData); + } else { + rtl_uString_newFromLiteral( + &pData, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length, 0); + } return *this; } - /// @endcond -#endif /** Append a string to this string. @@ -578,9 +565,12 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type reverseCompareTo( T& literal ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_asciil_reverseCompare_WithLength( pData->buffer, pData->length, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return rtl_ustr_asciil_reverseCompare_WithLength( + pData->buffer, pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } /** @@ -658,11 +648,16 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type equalsIgnoreAsciiCase( T& literal ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - if ( pData->length != libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) - return false; - - return rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length, literal ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + (pData->length + == libreoffice_internal::ConstCharArrayDetector<T>::length) + && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLength( + pData->buffer, pData->length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal)) + == 0); } /** @@ -694,9 +689,15 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type match( T& literal, sal_Int32 fromIndex = 0 ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_ascii_shortenedCompare_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + rtl_ustr_ascii_shortenedCompare_WithLength( + pData->buffer+fromIndex, pData->length-fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0; } /** @@ -732,9 +733,15 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type matchIgnoreAsciiCase( T& literal, sal_Int32 fromIndex = 0 ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( pData->buffer+fromIndex, pData->length-fromIndex, - literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return + rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( + pData->buffer+fromIndex, pData->length-fromIndex, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0; } /** @@ -1039,12 +1046,19 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type startsWith( T & literal, OUString * rest = 0) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - bool b = libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length - && rtl_ustr_asciil_reverseEquals_WithLength( pData->buffer, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + bool b + = (libreoffice_internal::ConstCharArrayDetector<T>::length + <= sal_uInt32(pData->length)) + && rtl_ustr_asciil_reverseEquals_WithLength( + pData->buffer, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); if (b && rest != 0) { - *rest = copy(libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + *rest = copy( + libreoffice_internal::ConstCharArrayDetector<T>::length); } return b; } @@ -1088,14 +1102,19 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type startsWithIgnoreAsciiCase(T & literal, OUString * rest = 0) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - bool b = (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - pData->buffer, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1) - == 0); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + bool b + = (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( + pData->buffer, + libreoffice_internal::ConstCharArrayDetector<T>::length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) + == 0); if (b && rest != 0) { - *rest = copy(libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + *rest = copy( + libreoffice_internal::ConstCharArrayDetector<T>::length); } return b; } @@ -1132,16 +1151,22 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type endsWith(T & literal, OUString * rest = 0) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - bool b = libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + bool b + = (libreoffice_internal::ConstCharArrayDetector<T>::length + <= sal_uInt32(pData->length)) && rtl_ustr_asciil_reverseEquals_WithLength( - pData->buffer + pData->length - ( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ), literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); + (pData->buffer + pData->length + - libreoffice_internal::ConstCharArrayDetector<T>::length), + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); if (b && rest != 0) { *rest = copy( 0, (getLength() - - (libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1))); + - libreoffice_internal::ConstCharArrayDetector<T>::length)); } return b; } @@ -1205,18 +1230,24 @@ public: typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type endsWithIgnoreAsciiCase(T & literal, OUString * rest = 0) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - bool b = libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 <= pData->length + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + bool b + = (libreoffice_internal::ConstCharArrayDetector<T>::length + <= sal_uInt32(pData->length)) && (rtl_ustr_ascii_compareIgnoreAsciiCase_WithLengths( - pData->buffer + pData->length - ( libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ), - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1) + (pData->buffer + pData->length + - libreoffice_internal::ConstCharArrayDetector<T>::length), + libreoffice_internal::ConstCharArrayDetector<T>::length, + libreoffice_internal::ConstCharArrayDetector<T>::toPointer( + literal), + libreoffice_internal::ConstCharArrayDetector<T>::length) == 0); if (b && rest != 0) { *rest = copy( 0, (getLength() - - (libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1))); + - libreoffice_internal::ConstCharArrayDetector<T>::length)); } return b; } @@ -1274,8 +1305,11 @@ public: template< typename T > friend inline typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator==( const OUString& string, T& literal ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return string.equalsAsciiL( literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return string.equalsAsciiL( + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } /** * Compare string to an ASCII string literal. @@ -1287,8 +1321,11 @@ public: template< typename T > friend inline typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator==( T& literal, const OUString& string ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return string.equalsAsciiL( literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return string.equalsAsciiL( + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } /** * Compare string to an ASCII string literal. @@ -1300,8 +1337,11 @@ public: template< typename T > friend inline typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator!=( const OUString& string, T& literal ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return !string.equalsAsciiL( literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return !string.equalsAsciiL( + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } /** * Compare string to an ASCII string literal. @@ -1313,8 +1353,11 @@ public: template< typename T > friend inline typename libreoffice_internal::ConstCharArrayDetector< T, bool >::Type operator!=( T& literal, const OUString& string ) { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - return !string.equalsAsciiL( literal, libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1 ); + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); + return !string.equalsAsciiL( + libreoffice_internal::ConstCharArrayDetector<T>::toPointer(literal), + libreoffice_internal::ConstCharArrayDetector<T>::length); } #if defined LIBO_INTERNAL_ONLY @@ -1492,11 +1535,13 @@ public: template< typename T > typename libreoffice_internal::ConstCharArrayDetector< T, sal_Int32 >::Type indexOf( T& literal, sal_Int32 fromIndex = 0 ) const { - assert( strlen( literal ) == libreoffice_internal::ConstCharArrayDetector< T >::size - 1 ); - sal_Int32 ret = rtl_ustr_indexOfAscii_WithLength( - pData->buffer + fromIndex, pData->length - fromIndex, literal, - libreoffice_internal::ConstCharArrayDetector< T, void >::size - 1); - return ret < 0 ? ret : ret + fromIndex; + assert( + libreoffice_internal::ConstCharArrayDetector<T>::isValid(literal)); ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits