[Libreoffice-commits] core.git: sc/source

Pierre-Eric Pelloux-Prayer pierre-eric at lanedo.com
Tue Aug 27 07:51:27 PDT 2013


 sc/source/core/tool/interpr1.cxx |   36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

New commits:
commit 3fed166279377f7ad702b8911899243b8adff3bf
Author: Pierre-Eric Pelloux-Prayer <pierre-eric at lanedo.com>
Date:   Fri Aug 16 16:29:38 2013 +0200

    interpr/vlookup: use ScMatrix func to find matching cells
    
    Moves the cpu intensive code to ScMatrix, where we can use our
    knowledge of the internal structure: use mdds::multi_type_matrix::walk
    instead of browsing cells one by one.
    
    Change-Id: Ie1df20e2be6414b8e21b4d58b7697a0801222c1e
    Reviewed-on: https://gerrit.libreoffice.org/5455
    Reviewed-by: Kohei Yoshida <kohei.yoshida at suse.de>
    Tested-by: Kohei Yoshida <kohei.yoshida at suse.de>

diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 5043272..ba26581 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -6565,18 +6565,25 @@ void ScInterpreter::CalculateLookup(bool HLookup)
                     }
                     else
                     {
-                        for (SCSIZE i = 0; i < nMatCount; i++)
+                        if (HLookup)
                         {
-                            if (HLookup ? pMat->IsString(i, 0) : pMat->IsString(0, i))
+                            for (SCSIZE i = 0; i < nMatCount; i++)
                             {
-                                if ( ScGlobal::GetpTransliteration()->isEqual(
-                                    HLookup ? pMat->GetString(i,0) : pMat->GetString(0,i), rParamStr))
+                                if (pMat->IsString(i, 0))
                                 {
-                                    nDelta = i;
-                                    i = nMatCount + 1;
+                                    if ( ScGlobal::GetpTransliteration()->isEqual(
+                                        pMat->GetString(i,0), rParamStr))
+                                    {
+                                        nDelta = i;
+                                        i = nMatCount + 1;
+                                    }
                                 }
                             }
                         }
+                        else
+                        {
+                            nDelta = pMat->MatchStringInColumns(rParamStr, 0, 0);
+                        }
                     }
                 }
                 else
@@ -6597,17 +6604,24 @@ void ScInterpreter::CalculateLookup(bool HLookup)
                     }
                     else
                     {
-                        for (SCSIZE i = 0; i < nMatCount; i++)
+                        if (HLookup)
                         {
-                            if (!(HLookup ? pMat->IsString(i, 0) : pMat->IsString(0, i)))
+                            for (SCSIZE i = 0; i < nMatCount; i++)
                             {
-                                if ((HLookup ? pMat->GetDouble(i,0) : pMat->GetDouble(0,i)) == rItem.mfVal)
+                                if (! pMat->IsString(i, 0) )
                                 {
-                                    nDelta = i;
-                                    i = nMatCount + 1;
+                                    if ( pMat->GetDouble(i,0) == rItem.mfVal)
+                                    {
+                                        nDelta = i;
+                                        i = nMatCount + 1;
+                                    }
                                 }
                             }
                         }
+                        else
+                        {
+                            nDelta = pMat->MatchDoubleInColumns(rItem.mfVal, 0, 0);
+                        }
                     }
                 }
                 if ( nDelta != SCSIZE_MAX )


More information about the Libreoffice-commits mailing list