diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2023-06-04 13:50:45 +0200 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2023-06-04 14:56:12 +0200 |
commit | 7bbec0dfaac7b4a579c963e0724f5355da2b8df8 (patch) | |
tree | 4d2c0986a6491531caf8379334cd47a5aee2c5e2 /sc | |
parent | e7b1f93cd681e2d0094f5937f4132aa4e780ab9e (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.hxx | 5 | ||||
-rw-r--r-- | sc/source/core/tool/userlist.cxx | 67 |
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; } |