summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2023-06-04 13:50:45 +0200
committerMike Kaganski <mike.kaganski@collabora.com>2023-06-04 14:56:12 +0200
commit7bbec0dfaac7b4a579c963e0724f5355da2b8df8 (patch)
tree4d2c0986a6491531caf8379334cd47a5aee2c5e2 /sc
parente7b1f93cd681e2d0094f5937f4132aa4e780ab9e (diff)
Simplify a bit
Change-Id: Iaea9a425fc93adc716bdb4944244a14175cf7538 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152540 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/userlist.hxx5
-rw-r--r--sc/source/core/tool/userlist.cxx67
2 files changed, 14 insertions, 58 deletions
diff --git a/sc/inc/userlist.hxx b/sc/inc/userlist.hxx
index 80968361ceac..1cf759e463e7 100644
--- a/sc/inc/userlist.hxx
+++ b/sc/inc/userlist.hxx
@@ -39,8 +39,7 @@ public:
};
private:
- typedef std::vector<SubStr> SubStringsType;
- SubStringsType maSubStrings;
+ std::vector<SubStr> maSubStrings;
OUString aStr;
SAL_DLLPRIVATE void InitTokens();
@@ -53,7 +52,7 @@ public:
const OUString& GetString() const { return aStr; }
void SetString(const OUString& rStr);
- size_t GetSubCount() const;
+ size_t GetSubCount() const { return maSubStrings.size(); }
bool GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex, bool& bMatchCase) const;
OUString GetSubStr(sal_uInt16 nIndex) const;
sal_Int32 Compare(const OUString& rSubStr1, const OUString& rSubStr2) const;
diff --git a/sc/source/core/tool/userlist.cxx b/sc/source/core/tool/userlist.cxx
index f38a16d98f12..984b51c1058e 100644
--- a/sc/source/core/tool/userlist.cxx
+++ b/sc/source/core/tool/userlist.cxx
@@ -29,22 +29,6 @@
#include <algorithm>
#include <utility>
-namespace {
-
-class FindByName
-{
- const OUString& mrName;
- bool mbUpper;
-public:
- FindByName(const OUString& rName, bool bUpper) : mrName(rName), mbUpper(bUpper) {}
- bool operator() (const ScUserListData::SubStr& r) const
- {
- return mbUpper ? r.maUpper == mrName : r.maReal == mrName;
- }
-};
-
-}
-
ScUserListData::SubStr::SubStr(OUString aReal, OUString aUpper) :
maReal(std::move(aReal)), maUpper(std::move(aUpper)) {}
@@ -52,37 +36,16 @@ void ScUserListData::InitTokens()
{
sal_Unicode cSep = ScGlobal::cListDelimiter;
maSubStrings.clear();
- const sal_Unicode* p = aStr.getStr();
- const sal_Unicode* p0 = p;
- sal_Int32 nLen = 0;
- bool bFirst = true;
- for (sal_Int32 i = 0, n = aStr.getLength(); i < n; ++i, ++p, ++nLen)
+ sal_Int32 nIndex = 0;
+ do
{
- if (bFirst)
+ OUString aSub = aStr.getToken(0, cSep, nIndex);
+ if (!aSub.isEmpty())
{
- // very first character, or the first character after a separator.
- p0 = p;
- nLen = 0;
- bFirst = false;
- }
- if (*p == cSep)
- {
- if (nLen)
- {
- OUString aSub(p0, nLen);
- OUString aUpStr = ScGlobal::getCharClass().uppercase(aSub);
- maSubStrings.emplace_back(aSub, aUpStr);
- }
- bFirst = true;
+ OUString aUpStr = ScGlobal::getCharClass().uppercase(aSub);
+ maSubStrings.emplace_back(aSub, aUpStr);
}
- }
-
- if (nLen)
- {
- OUString aSub(p0, nLen);
- OUString aUpStr = ScGlobal::getCharClass().uppercase(aSub);
- maSubStrings.emplace_back(aSub, aUpStr);
- }
+ } while (nIndex >= 0);
}
ScUserListData::ScUserListData(OUString _aStr) :
@@ -109,16 +72,11 @@ void ScUserListData::SetString( const OUString& rStr )
InitTokens();
}
-size_t ScUserListData::GetSubCount() const
-{
- return maSubStrings.size();
-}
-
bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex, bool& bMatchCase) const
{
// First, case sensitive search.
- SubStringsType::const_iterator itr = ::std::find_if(
- maSubStrings.begin(), maSubStrings.end(), FindByName(rSubStr, false));
+ auto itr = ::std::find_if(maSubStrings.begin(), maSubStrings.end(),
+ [&rSubStr](const SubStr& item) { return item.maReal == rSubStr; });
if (itr != maSubStrings.end())
{
rIndex = ::std::distance(maSubStrings.begin(), itr);
@@ -127,16 +85,15 @@ bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex, bo
}
// When that fails, do a case insensitive search.
+ bMatchCase = false;
OUString aUpStr = ScGlobal::getCharClass().uppercase(rSubStr);
- itr = ::std::find_if(
- maSubStrings.begin(), maSubStrings.end(), FindByName(aUpStr, true));
+ itr = ::std::find_if(maSubStrings.begin(), maSubStrings.end(),
+ [&aUpStr](const SubStr& item) { return item.maUpper == aUpStr; });
if (itr != maSubStrings.end())
{
rIndex = ::std::distance(maSubStrings.begin(), itr);
- bMatchCase = false;
return true;
}
- bMatchCase = false;
return false;
}