sc/inc/userlist.hxx | 5 +- sc/source/core/tool/userlist.cxx | 67 ++++++--------------------------------- 2 files changed, 14 insertions(+), 58 deletions(-)
New commits: commit 7bbec0dfaac7b4a579c963e0724f5355da2b8df8 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Sun Jun 4 13:50:45 2023 +0200 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Sun Jun 4 14:56:12 2023 +0200 Simplify a bit Change-Id: Iaea9a425fc93adc716bdb4944244a14175cf7538 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152540 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> 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; }