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

Caolán McNamara caolanm at redhat.com
Mon Jan 22 20:43:28 UTC 2018


 sd/source/ui/unoidl/unomodel.cxx |   35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

New commits:
commit 28ff54f9bb0d3f96d7a6fd3cbf3fa590c9ef45d6
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Jan 22 12:17:56 2018 +0000

    ofz optimize this unique name generator a tad
    
    Change-Id: Ie18f71febbfc5e1ed4300782919bbd92d76ea51b
    Reviewed-on: https://gerrit.libreoffice.org/48318
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index 8e85f989b376..0c6d1fd7b877 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -3130,27 +3130,24 @@ uno::Reference< drawing::XDrawPage > SAL_CALL SdMasterPagesAccess::insertNewByIn
         OUString aPrefix( aStdPrefix );
 
         bool bUnique = true;
-        sal_Int32 i = 0;
-        do
-        {
-            bUnique = true;
-            for( sal_Int32 nMaster = 1; nMaster < nMPageCount; nMaster++ )
-            {
-                SdPage* pPage = static_cast<SdPage*>(pDoc->GetMasterPage(static_cast<sal_uInt16>(nMaster)));
-                if( pPage && pPage->GetName() == aPrefix )
-                {
-                    bUnique = false;
-                    break;
-                }
-            }
 
-            if( !bUnique )
-            {
-                i++;
-                aPrefix = aStdPrefix + " " + OUString::number( i );
-            }
+        std::vector<OUString> aPageNames;
+        for (sal_Int32 nMaster = 1; nMaster < nMPageCount; ++nMaster)
+        {
+            const SdPage* pPage = static_cast<const SdPage*>(pDoc->GetMasterPage(static_cast<sal_uInt16>(nMaster)));
+            if (!pPage)
+                continue;
+            aPageNames.push_back(pPage->GetName());
+            if (aPageNames.back() == aPrefix)
+                bUnique = false;
+        }
 
-        } while( !bUnique );
+        sal_Int32 i = 0;
+        while (!bUnique)
+        {
+            aPrefix = aStdPrefix + " " + OUString::number(++i);
+            bUnique = std::find(aPageNames.begin(), aPageNames.end(), aPrefix) == aPageNames.end();
+        }
 
         OUString aLayoutName( aPrefix );
         aLayoutName += SD_LT_SEPARATOR;


More information about the Libreoffice-commits mailing list