Kaydet (Commit) afa91e42 authored tarafından Dennis Francis's avatar Dennis Francis Kaydeden (comit) Michael Meeks

avoid SharedString copy assignment

Change-Id: If5654a3103bf7ef29b7b642f0e5ac4bca5ddb726
Reviewed-on: https://gerrit.libreoffice.org/52588Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMichael Meeks <michael.meeks@collabora.com>
üst 5f153436
...@@ -2467,6 +2467,7 @@ public: ...@@ -2467,6 +2467,7 @@ public:
bool bTestEqual = false; bool bTestEqual = false;
bool bMatchWholeCell = mbMatchWholeCell; bool bMatchWholeCell = mbMatchWholeCell;
svl::SharedString aCellStr; svl::SharedString aCellStr;
const svl::SharedString* pCellSharedStr = &aCellStr;
if (isPartialTextMatchOp(rEntry)) if (isPartialTextMatchOp(rEntry))
// may have to do partial textural comparison. // may have to do partial textural comparison.
bMatchWholeCell = false; bMatchWholeCell = false;
...@@ -2479,7 +2480,7 @@ public: ...@@ -2479,7 +2480,7 @@ public:
aCellStr = mrStrPool.intern(ScGlobal::GetErrorString(rCell.mpFormula->GetErrCode())); aCellStr = mrStrPool.intern(ScGlobal::GetErrorString(rCell.mpFormula->GetErrCode()));
} }
else if (rCell.meType == CELLTYPE_STRING) else if (rCell.meType == CELLTYPE_STRING)
aCellStr = *rCell.mpString; pCellSharedStr = rCell.mpString;
else else
{ {
sal_uInt32 nFormat = pContext ? mrTab.GetNumberFormat( *pContext, ScAddress(static_cast<SCCOL>(rEntry.nField), nRow, mrTab.GetTab()) ) : sal_uInt32 nFormat = pContext ? mrTab.GetNumberFormat( *pContext, ScAddress(static_cast<SCCOL>(rEntry.nField), nRow, mrTab.GetTab()) ) :
...@@ -2497,30 +2498,31 @@ public: ...@@ -2497,30 +2498,31 @@ public:
aCellStr = mrStrPool.intern(aStr); aCellStr = mrStrPool.intern(aStr);
} }
const svl::SharedString& rCellStr(*pCellSharedStr);
bool bRealWildOrRegExp = isRealWildOrRegExp(rEntry); bool bRealWildOrRegExp = isRealWildOrRegExp(rEntry);
bool bTestWildOrRegExp = isTestWildOrRegExp(rEntry); bool bTestWildOrRegExp = isTestWildOrRegExp(rEntry);
if ( bRealWildOrRegExp || bTestWildOrRegExp ) if ( bRealWildOrRegExp || bTestWildOrRegExp )
{ {
sal_Int32 nStart = 0; sal_Int32 nStart = 0;
sal_Int32 nEnd = aCellStr.getLength(); sal_Int32 nEnd = rCellStr.getLength();
// from 614 on, nEnd is behind the found text // from 614 on, nEnd is behind the found text
bool bMatch = false; bool bMatch = false;
if ( rEntry.eOp == SC_ENDS_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH ) if ( rEntry.eOp == SC_ENDS_WITH || rEntry.eOp == SC_DOES_NOT_END_WITH )
{ {
nEnd = 0; nEnd = 0;
nStart = aCellStr.getLength(); nStart = rCellStr.getLength();
bMatch = rEntry.GetSearchTextPtr( mrParam.eSearchType, mrParam.bCaseSens, bMatchWholeCell ) bMatch = rEntry.GetSearchTextPtr( mrParam.eSearchType, mrParam.bCaseSens, bMatchWholeCell )
->SearchBackward(aCellStr.getString(), &nStart, &nEnd); ->SearchBackward(rCellStr.getString(), &nStart, &nEnd);
} }
else else
{ {
bMatch = rEntry.GetSearchTextPtr( mrParam.eSearchType, mrParam.bCaseSens, bMatchWholeCell ) bMatch = rEntry.GetSearchTextPtr( mrParam.eSearchType, mrParam.bCaseSens, bMatchWholeCell )
->SearchForward(aCellStr.getString(), &nStart, &nEnd); ->SearchForward(rCellStr.getString(), &nStart, &nEnd);
} }
if ( bMatch && bMatchWholeCell if ( bMatch && bMatchWholeCell
&& (nStart != 0 || nEnd != aCellStr.getLength()) ) && (nStart != 0 || nEnd != rCellStr.getLength()) )
bMatch = false; // RegExp must match entire cell string bMatch = false; // RegExp must match entire cell string
if ( bRealWildOrRegExp ) if ( bRealWildOrRegExp )
{ {
...@@ -2541,10 +2543,10 @@ public: ...@@ -2541,10 +2543,10 @@ public:
bOk = !( bMatch && (nStart == 0) ); bOk = !( bMatch && (nStart == 0) );
break; break;
case SC_ENDS_WITH: case SC_ENDS_WITH:
bOk = ( bMatch && (nEnd == aCellStr.getLength()) ); bOk = ( bMatch && (nEnd == rCellStr.getLength()) );
break; break;
case SC_DOES_NOT_END_WITH: case SC_DOES_NOT_END_WITH:
bOk = !( bMatch && (nEnd == aCellStr.getLength()) ); bOk = !( bMatch && (nEnd == rCellStr.getLength()) );
break; break;
default: default:
{ {
...@@ -2573,9 +2575,9 @@ public: ...@@ -2573,9 +2575,9 @@ public:
{ {
// Fast string equality check by comparing string identifiers. // Fast string equality check by comparing string identifiers.
if (mrParam.bCaseSens) if (mrParam.bCaseSens)
bOk = aCellStr.getData() == rItem.maString.getData(); bOk = rCellStr.getData() == rItem.maString.getData();
else else
bOk = aCellStr.getDataIgnoreCase() == rItem.maString.getDataIgnoreCase(); bOk = rCellStr.getDataIgnoreCase() == rItem.maString.getDataIgnoreCase();
if ( rEntry.eOp == SC_NOT_EQUAL ) if ( rEntry.eOp == SC_NOT_EQUAL )
bOk = !bOk; bOk = !bOk;
...@@ -2588,7 +2590,7 @@ public: ...@@ -2588,7 +2590,7 @@ public:
if (!mbCaseSensitive) if (!mbCaseSensitive)
{ // Common case for vlookup etc. { // Common case for vlookup etc.
const rtl_uString *pQuer = rItem.maString.getDataIgnoreCase(); const rtl_uString *pQuer = rItem.maString.getDataIgnoreCase();
const rtl_uString *pCellStr = aCellStr.getDataIgnoreCase(); const rtl_uString *pCellStr = rCellStr.getDataIgnoreCase();
assert(pQuer != nullptr); assert(pQuer != nullptr);
assert(pCellStr != nullptr); assert(pCellStr != nullptr);
...@@ -2613,7 +2615,7 @@ public: ...@@ -2613,7 +2615,7 @@ public:
OUString aQueryStr = rItem.maString.getString(); OUString aQueryStr = rItem.maString.getString();
const LanguageType nLang = ScGlobal::pSysLocale->GetLanguageTag().getLanguageType(); const LanguageType nLang = ScGlobal::pSysLocale->GetLanguageTag().getLanguageType();
OUString aCell( mpTransliteration->transliterate( OUString aCell( mpTransliteration->transliterate(
aCellStr.getString(), nLang, 0, aCellStr.getLength(), rCellStr.getString(), nLang, 0, rCellStr.getLength(),
nullptr ) ); nullptr ) );
OUString aQuer( mpTransliteration->transliterate( OUString aQuer( mpTransliteration->transliterate(
...@@ -2656,7 +2658,7 @@ public: ...@@ -2656,7 +2658,7 @@ public:
else else
{ // use collator here because data was probably sorted { // use collator here because data was probably sorted
sal_Int32 nCompare = mpCollator->compareString( sal_Int32 nCompare = mpCollator->compareString(
aCellStr.getString(), rItem.maString.getString()); rCellStr.getString(), rItem.maString.getString());
switch (rEntry.eOp) switch (rEntry.eOp)
{ {
case SC_LESS : case SC_LESS :
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment