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;
 }
 

Reply via email to