sdext/source/minimizer/pppoptimizertoken.cxx |  165 +++++++++++++--------------
 sdext/source/minimizer/pppoptimizertoken.hxx |    2 
 2 files changed, 83 insertions(+), 84 deletions(-)

New commits:
commit 12bf8a356f6663d98071da40a034693dc80ab898
Author:     Simon Chenery <simon_chen...@yahoo.com>
AuthorDate: Sun Feb 23 12:59:07 2025 +0100
Commit:     Hossein <hoss...@libreoffice.org>
CommitDate: Fri Mar 14 18:40:58 2025 +0100

    Simplify lookup maps in PPPOptimizerTokenEnum
    
    Used a range-based for loop which does not need the number of array
    elements in pppoptimizertoken.cxx. Also Used OUString type in all
    functions and data structures to avoid unnecessary string conversions.
    
    Change-Id: I571135ce28e70b3ac745728f2454ba9babe43ba8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182066
    Reviewed-by: Hossein   <hoss...@libreoffice.org>
    Tested-by: Jenkins

diff --git a/sdext/source/minimizer/pppoptimizertoken.cxx 
b/sdext/source/minimizer/pppoptimizertoken.cxx
index 73d1280c3a29..985d107b464c 100644
--- a/sdext/source/minimizer/pppoptimizertoken.cxx
+++ b/sdext/source/minimizer/pppoptimizertoken.cxx
@@ -24,113 +24,112 @@
 #include <unordered_map>
 #include <memory>
 
-typedef std::unordered_map< const char*, PPPOptimizerTokenEnum, 
rtl::CStringHash, rtl::CStringEqual> TypeNameHashMap;
+typedef std::unordered_map< OUString, PPPOptimizerTokenEnum> TypeNameHashMap;
 
 namespace {
 
 struct TokenTable
 {
-    const char*                         pS;
+    OUString                            pS;
     PPPOptimizerTokenEnum               pE;
 };
 
 }
 
-const TokenTable pTokenTableArray[] =
+constexpr TokenTable pTokenTableArray[] =
 {
-    { "btnNavFinish",       TK_btnNavFinish },
-
-    { "DocumentService",    TK_DocumentService },
-    { "FileSizeDestination",TK_FileSizeDestination },
-    { "FileSizeSource",     TK_FileSizeSource },
-    { "FilterName",         TK_FilterName },
-    { "Flags",              TK_Flags },
-    { "DocumentFrame",      TK_DocumentFrame },
-    { "DialogParentWindow", TK_DialogParentWindow },
-    { "Name",               TK_Name },
-    { "Progress",           TK_Progress },
-    { "Settings",           TK_Settings },
-    { "StatusDispatcher",   TK_StatusDispatcher },
-    { "Type",               TK_Type },
-    { "UIName",             TK_UIName },
-
-    { "JPEGCompression",    TK_JPEGCompression },
-    { "JPEGQuality",        TK_JPEGQuality },
-    { "RemoveCropArea",     TK_RemoveCropArea },
-    { "ImageResolution",    TK_ImageResolution },
-    { "EmbedLinkedGraphics",TK_EmbedLinkedGraphics },
-    { "OLEOptimization",    TK_OLEOptimization },
-    { "OLEOptimizationType",TK_OLEOptimizationType },
-    { "DeleteUnusedMasterPages", TK_DeleteUnusedMasterPages },
-    { "DeleteHiddenSlides", TK_DeleteHiddenSlides },
-    { "DeleteNotesPages",   TK_DeleteNotesPages },
-    { "CustomShowName",     TK_CustomShowName },
-    { "SaveAs",             TK_SaveAs },
-    { "SaveAsURL",          TK_SaveAsURL },
-    { "OpenNewDocument",    TK_OpenNewDocument },
-    { "EstimatedFileSize",  TK_EstimatedFileSize },
-
-    { "Status",             TK_Status },
-    { "Pages",              TK_Pages },
-
-    { "STR_SUN_OPTIMIZATION_WIZARD2",STR_SUN_OPTIMIZATION_WIZARD2 },
-    { "STR_INTRODUCTION",           STR_INTRODUCTION },
-    { "STR_IMAGE_OPTIMIZATION",     STR_IMAGE_OPTIMIZATION },
-    { "STR_OLE_OBJECTS",            STR_OLE_OBJECTS },
-    { "STR_OLE_OBJECTS_DESC",       STR_OLE_OBJECTS_DESC },
-    { "STR_NO_OLE_OBJECTS_DESC",    STR_NO_OLE_OBJECTS_DESC },
-    { "STR_SLIDES",                 STR_SLIDES },
-    { "STR_SUMMARY",                STR_SUMMARY },
-    { "STR_DELETE_SLIDES",          STR_DELETE_SLIDES },
-    { "STR_OPTIMIZE_IMAGES",        STR_OPTIMIZE_IMAGES },
-    { "STR_CREATE_REPLACEMENT",     STR_CREATE_REPLACEMENT },
-    { "MY_SETTINGS",                STR_MY_SETTINGS },
-    { "STR_OK",                     STR_OK },
-    { "STR_INFO_PRIMARY",           STR_INFO_PRIMARY },
-    { "STR_INFO_SECONDARY_1",       STR_INFO_SECONDARY_1 },
-    { "STR_INFO_SECONDARY_2",       STR_INFO_SECONDARY_2 },
-    { "STR_INFO_SECONDARY_3",       STR_INFO_SECONDARY_3 },
-    { "STR_INFO_SECONDARY_4",       STR_INFO_SECONDARY_4 },
-    { "STR_DUPLICATING_PRESENTATION",STR_DUPLICATING_PRESENTATION },
-    { "STR_DELETING_SLIDES",        STR_DELETING_SLIDES },
-    { "STR_OPTIMIZING_GRAPHICS",    STR_OPTIMIZING_GRAPHICS },
-    { "STR_CREATING_OLE_REPLACEMENTS",STR_CREATING_OLE_REPLACEMENTS },
-    { "STR_FileSizeSeparator",      STR_FILESIZESEPARATOR },
-    { "STR_FILENAME_SUFFIX",        STR_FILENAME_SUFFIX },
-    { "STR_WARN_UNSAVED_PRESENTATION", STR_WARN_UNSAVED_PRESENTATION },
-
-
-    { "NotFound",           TK_NotFound }
+    { u"btnNavFinish"_ustr,       TK_btnNavFinish },
+
+    { u"DocumentService"_ustr,    TK_DocumentService },
+    { u"FileSizeDestination"_ustr,TK_FileSizeDestination },
+    { u"FileSizeSource"_ustr,     TK_FileSizeSource },
+    { u"FilterName"_ustr,         TK_FilterName },
+    { u"Flags"_ustr,              TK_Flags },
+    { u"DocumentFrame"_ustr,      TK_DocumentFrame },
+    { u"DialogParentWindow"_ustr, TK_DialogParentWindow },
+    { u"Name"_ustr,               TK_Name },
+    { u"Progress"_ustr,           TK_Progress },
+    { u"Settings"_ustr,           TK_Settings },
+    { u"StatusDispatcher"_ustr,   TK_StatusDispatcher },
+    { u"Type"_ustr,               TK_Type },
+    { u"UIName"_ustr,             TK_UIName },
+
+    { u"JPEGCompression"_ustr,    TK_JPEGCompression },
+    { u"JPEGQuality"_ustr,        TK_JPEGQuality },
+    { u"RemoveCropArea"_ustr,     TK_RemoveCropArea },
+    { u"ImageResolution"_ustr,    TK_ImageResolution },
+    { u"EmbedLinkedGraphics"_ustr,TK_EmbedLinkedGraphics },
+    { u"OLEOptimization"_ustr,    TK_OLEOptimization },
+    { u"OLEOptimizationType"_ustr,TK_OLEOptimizationType },
+    { u"DeleteUnusedMasterPages"_ustr, TK_DeleteUnusedMasterPages },
+    { u"DeleteHiddenSlides"_ustr, TK_DeleteHiddenSlides },
+    { u"DeleteNotesPages"_ustr,   TK_DeleteNotesPages },
+    { u"CustomShowName"_ustr,     TK_CustomShowName },
+    { u"SaveAs"_ustr,             TK_SaveAs },
+    { u"SaveAsURL"_ustr,          TK_SaveAsURL },
+    { u"OpenNewDocument"_ustr,    TK_OpenNewDocument },
+    { u"EstimatedFileSize"_ustr,  TK_EstimatedFileSize },
+
+    { u"Status"_ustr,             TK_Status },
+    { u"Pages"_ustr,              TK_Pages },
+
+    { u"STR_SUN_OPTIMIZATION_WIZARD2"_ustr,STR_SUN_OPTIMIZATION_WIZARD2 },
+    { u"STR_INTRODUCTION"_ustr,           STR_INTRODUCTION },
+    { u"STR_IMAGE_OPTIMIZATION"_ustr,     STR_IMAGE_OPTIMIZATION },
+    { u"STR_OLE_OBJECTS"_ustr,            STR_OLE_OBJECTS },
+    { u"STR_OLE_OBJECTS_DESC"_ustr,       STR_OLE_OBJECTS_DESC },
+    { u"STR_NO_OLE_OBJECTS_DESC"_ustr,    STR_NO_OLE_OBJECTS_DESC },
+    { u"STR_SLIDES"_ustr,                 STR_SLIDES },
+    { u"STR_SUMMARY"_ustr,                STR_SUMMARY },
+    { u"STR_DELETE_SLIDES"_ustr,          STR_DELETE_SLIDES },
+    { u"STR_OPTIMIZE_IMAGES"_ustr,        STR_OPTIMIZE_IMAGES },
+    { u"STR_CREATE_REPLACEMENT"_ustr,     STR_CREATE_REPLACEMENT },
+    { u"MY_SETTINGS"_ustr,                STR_MY_SETTINGS },
+    { u"STR_OK"_ustr,                     STR_OK },
+    { u"STR_INFO_PRIMARY"_ustr,           STR_INFO_PRIMARY },
+    { u"STR_INFO_SECONDARY_1"_ustr,       STR_INFO_SECONDARY_1 },
+    { u"STR_INFO_SECONDARY_2"_ustr,       STR_INFO_SECONDARY_2 },
+    { u"STR_INFO_SECONDARY_3"_ustr,       STR_INFO_SECONDARY_3 },
+    { u"STR_INFO_SECONDARY_4"_ustr,       STR_INFO_SECONDARY_4 },
+    { u"STR_DUPLICATING_PRESENTATION"_ustr,STR_DUPLICATING_PRESENTATION },
+    { u"STR_DELETING_SLIDES"_ustr,        STR_DELETING_SLIDES },
+    { u"STR_OPTIMIZING_GRAPHICS"_ustr,    STR_OPTIMIZING_GRAPHICS },
+    { u"STR_CREATING_OLE_REPLACEMENTS"_ustr,STR_CREATING_OLE_REPLACEMENTS },
+    { u"STR_FileSizeSeparator"_ustr,      STR_FILESIZESEPARATOR },
+    { u"STR_FILENAME_SUFFIX"_ustr,        STR_FILENAME_SUFFIX },
+    { u"STR_WARN_UNSAVED_PRESENTATION"_ustr, STR_WARN_UNSAVED_PRESENTATION },
+
+
+    { u"NotFound"_ustr,           TK_NotFound }
 };
 
-static TypeNameHashMap* createHashMap()
+static const TypeNameHashMap& createHashMap()
 {
-    TypeNameHashMap* pH = new TypeNameHashMap;
-    const TokenTable* pPtr = pTokenTableArray;
-    const TokenTable* pEnd = pPtr + SAL_N_ELEMENTS( pTokenTableArray );
-    for ( ; pPtr < pEnd; pPtr++ )
-        (*pH)[ pPtr->pS ] = pPtr->pE;
-    return pH;
+    static TypeNameHashMap aMap = []()
+    {
+        TypeNameHashMap map;
+        for ( const auto& rToken : pTokenTableArray )
+        {
+            map[ rToken.pS ] = rToken.pE;
+        }
+        return map;
+    }();
+    return aMap;
 }
 
-PPPOptimizerTokenEnum TKGet( std::u16string_view rToken )
+PPPOptimizerTokenEnum TKGet( const OUString& rToken )
 {
-    static TypeNameHashMap* pHashMap = createHashMap();
+    const TypeNameHashMap& rHashMap = createHashMap();
     PPPOptimizerTokenEnum eRetValue = TK_NotFound;
-    size_t i, nLen = rToken.size();
-    std::unique_ptr<char[]> pBuf(new char[ nLen + 1 ]);
-    for ( i = 0; i < nLen; i++ )
-        pBuf[ i ] = static_cast<char>(rToken[ i ]);
-    pBuf[ i ] = 0;
-    TypeNameHashMap::iterator aHashIter( pHashMap->find( pBuf.get() ) );
-    if ( aHashIter != pHashMap->end() )
+    auto aHashIter = rHashMap.find( rToken );
+    if ( aHashIter != rHashMap.end() )
         eRetValue = (*aHashIter).second;
     return eRetValue;
 }
 
 OUString TKGet( const PPPOptimizerTokenEnum eToken )
 {
-    return OUString::createFromAscii( pTokenTableArray[ eToken ].pS );
+    return pTokenTableArray[ eToken ].pS;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sdext/source/minimizer/pppoptimizertoken.hxx 
b/sdext/source/minimizer/pppoptimizertoken.hxx
index f665e82ece1c..d3edfde40bae 100644
--- a/sdext/source/minimizer/pppoptimizertoken.hxx
+++ b/sdext/source/minimizer/pppoptimizertoken.hxx
@@ -87,7 +87,7 @@ enum PPPOptimizerTokenEnum
     TK_NotFound
 };
 
-PPPOptimizerTokenEnum TKGet(std::u16string_view);
+PPPOptimizerTokenEnum TKGet(const OUString&);
 OUString TKGet(const PPPOptimizerTokenEnum);
 
 #endif

Reply via email to