include/vcl/builder.hxx       |    2 
 vcl/source/window/builder.cxx |  254 +++++++++++++++++++++---------------------
 2 files changed, 129 insertions(+), 127 deletions(-)

New commits:
commit c38e3562e3d644011a09a2d71af5ce70c75f8830
Author:     Arnaud VERSINI <arnaud.vers...@pm.me>
AuthorDate: Tue Dec 31 14:59:33 2024 +0100
Commit:     Arnaud Versini <arnaud.vers...@pm.me>
CommitDate: Mon Feb 3 09:11:29 2025 +0100

    vcl : use frozen unordered_map to avoid allocations
    
    Change-Id: I6b0ecd18fe3aa79211c5f1f28a2b87eece98d0e9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179581
    Tested-by: Arnaud Versini <arnaud.vers...@pm.me>
    Reviewed-by: Arnaud Versini <arnaud.vers...@pm.me>
    Tested-by: Jenkins

diff --git a/include/vcl/builder.hxx b/include/vcl/builder.hxx
index d501ef0192de..b69290ba41e9 100644
--- a/include/vcl/builder.hxx
+++ b/include/vcl/builder.hxx
@@ -304,7 +304,7 @@ namespace BuilderUtils
     void reorderWithinParent(vcl::Window &rWindow, sal_uInt16 nNewPosition);
 
     //Convert an accessibility role name to accessibility role number
-    sal_Int16 getRoleFromName(const OUString& roleName);
+    sal_Int16 getRoleFromName(std::u16string_view roleName);
 }
 
 //sID may not exist, but must be of type T if it does
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index b21d26bb5f1e..871a90a603d2 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -13,9 +13,11 @@
 
 #include <memory>
 #include <string_view>
-#include <unordered_map>
 #include <com/sun/star/accessibility/AccessibleRole.hpp>
 
+#include <frozen/bits/elsa_std.h>
+#include <frozen/unordered_map.h>
+
 #include <comphelper/lok.hxx>
 #include <i18nutil/unicode.hxx>
 #include <jsdialog/enabled.hxx>
@@ -2127,135 +2129,135 @@ namespace BuilderUtils
         }
     }
 
-    sal_Int16 getRoleFromName(const OUString& roleName)
+    sal_Int16 getRoleFromName(std::u16string_view roleName)
     {
         using namespace com::sun::star::accessibility;
 
-        static const std::unordered_map<OUString, sal_Int16> 
aAtkRoleToAccessibleRole = {
+        static constexpr frozen::unordered_map<std::u16string_view, sal_Int16, 
123> aAtkRoleToAccessibleRole = {
             /* This is in atkobject.h's AtkRole order */
-            { "invalid",               AccessibleRole::UNKNOWN },
-            { "accelerator label",     AccessibleRole::UNKNOWN },
-            { "alert",                 AccessibleRole::ALERT },
-            { "animation",             AccessibleRole::UNKNOWN },
-            { "arrow",                 AccessibleRole::UNKNOWN },
-            { "calendar",              AccessibleRole::UNKNOWN },
-            { "canvas",                AccessibleRole::CANVAS },
-            { "check box",             AccessibleRole::CHECK_BOX },
-            { "check menu item",       AccessibleRole::CHECK_MENU_ITEM },
-            { "color chooser",         AccessibleRole::COLOR_CHOOSER },
-            { "column header",         AccessibleRole::COLUMN_HEADER },
-            { "combo box",             AccessibleRole::COMBO_BOX },
-            { "date editor",           AccessibleRole::DATE_EDITOR },
-            { "desktop icon",          AccessibleRole::DESKTOP_ICON },
-            { "desktop frame",         AccessibleRole::DESKTOP_PANE }, // ?
-            { "dial",                  AccessibleRole::UNKNOWN },
-            { "dialog",                AccessibleRole::DIALOG },
-            { "directory pane",        AccessibleRole::DIRECTORY_PANE },
-            { "drawing area",          AccessibleRole::UNKNOWN },
-            { "file chooser",          AccessibleRole::FILE_CHOOSER },
-            { "filler",                AccessibleRole::FILLER },
-            { "font chooser",          AccessibleRole::FONT_CHOOSER },
-            { "frame",                 AccessibleRole::FRAME },
-            { "glass pane",            AccessibleRole::GLASS_PANE },
-            { "html container",        AccessibleRole::UNKNOWN },
-            { "icon",                  AccessibleRole::ICON },
-            { "image",                 AccessibleRole::GRAPHIC },
-            { "internal frame",        AccessibleRole::INTERNAL_FRAME },
-            { "label",                 AccessibleRole::LABEL },
-            { "layered pane",          AccessibleRole::LAYERED_PANE },
-            { "list",                  AccessibleRole::LIST },
-            { "list item",             AccessibleRole::LIST_ITEM },
-            { "menu",                  AccessibleRole::MENU },
-            { "menu bar",              AccessibleRole::MENU_BAR },
-            { "menu item",             AccessibleRole::MENU_ITEM },
-            { "option pane",           AccessibleRole::OPTION_PANE },
-            { "page tab",              AccessibleRole::PAGE_TAB },
-            { "page tab list",         AccessibleRole::PAGE_TAB_LIST },
-            { "panel",                 AccessibleRole::PANEL }, // or SHAPE or 
TEXT_FRAME ?
-            { "password text",         AccessibleRole::PASSWORD_TEXT },
-            { "popup menu",            AccessibleRole::POPUP_MENU },
-            { "progress bar",          AccessibleRole::PROGRESS_BAR },
-            { "push button",           AccessibleRole::PUSH_BUTTON }, // or 
BUTTON_DROPDOWN or BUTTON_MENU
-            { "radio button",          AccessibleRole::RADIO_BUTTON },
-            { "radio menu item",       AccessibleRole::RADIO_MENU_ITEM },
-            { "root pane",             AccessibleRole::ROOT_PANE },
-            { "row header",            AccessibleRole::ROW_HEADER },
-            { "scroll bar",            AccessibleRole::SCROLL_BAR },
-            { "scroll pane",           AccessibleRole::SCROLL_PANE },
-            { "separator",             AccessibleRole::SEPARATOR },
-            { "slider",                AccessibleRole::SLIDER },
-            { "split pane",            AccessibleRole::SPLIT_PANE },
-            { "spin button",           AccessibleRole::SPIN_BOX }, // ?
-            { "statusbar",             AccessibleRole::STATUS_BAR },
-            { "table",                 AccessibleRole::TABLE },
-            { "table cell",            AccessibleRole::TABLE_CELL },
-            { "table column header",   AccessibleRole::COLUMN_HEADER }, // 
approximate
-            { "table row header",      AccessibleRole::ROW_HEADER }, // 
approximate
-            { "tear off menu item",    AccessibleRole::UNKNOWN },
-            { "terminal",              AccessibleRole::UNKNOWN },
-            { "text",                  AccessibleRole::TEXT },
-            { "toggle button",         AccessibleRole::TOGGLE_BUTTON },
-            { "tool bar",              AccessibleRole::TOOL_BAR },
-            { "tool tip",              AccessibleRole::TOOL_TIP },
-            { "tree",                  AccessibleRole::TREE },
-            { "tree table",            AccessibleRole::TREE_TABLE },
-            { "unknown",               AccessibleRole::UNKNOWN },
-            { "viewport",              AccessibleRole::VIEW_PORT },
-            { "window",                AccessibleRole::WINDOW },
-            { "header",                AccessibleRole::HEADER },
-            { "footer",                AccessibleRole::FOOTER },
-            { "paragraph",             AccessibleRole::PARAGRAPH },
-            { "ruler",                 AccessibleRole::RULER },
-            { "application",           AccessibleRole::UNKNOWN },
-            { "autocomplete",          AccessibleRole::UNKNOWN },
-            { "edit bar",              AccessibleRole::EDIT_BAR },
-            { "embedded",              AccessibleRole::EMBEDDED_OBJECT },
-            { "entry",                 AccessibleRole::UNKNOWN },
-            { "chart",                 AccessibleRole::CHART },
-            { "caption",               AccessibleRole::CAPTION },
-            { "document frame",        AccessibleRole::DOCUMENT },
-            { "heading",               AccessibleRole::HEADING },
-            { "page",                  AccessibleRole::PAGE },
-            { "section",               AccessibleRole::SECTION },
-            { "redundant object",      AccessibleRole::UNKNOWN },
-            { "form",                  AccessibleRole::FORM },
-            { "link",                  AccessibleRole::HYPER_LINK },
-            { "input method window",   AccessibleRole::UNKNOWN },
-            { "table row",             AccessibleRole::UNKNOWN },
-            { "tree item",             AccessibleRole::TREE_ITEM },
-            { "document spreadsheet",  AccessibleRole::DOCUMENT_SPREADSHEET },
-            { "document presentation", AccessibleRole::DOCUMENT_PRESENTATION },
-            { "document text",         AccessibleRole::DOCUMENT_TEXT },
-            { "document web",          AccessibleRole::DOCUMENT }, // 
approximate
-            { "document email",        AccessibleRole::DOCUMENT }, // 
approximate
-            { "comment",               AccessibleRole::COMMENT }, // or NOTE 
or END_NOTE or FOOTNOTE or SCROLL_PANE
-            { "list box",              AccessibleRole::UNKNOWN },
-            { "grouping",              AccessibleRole::GROUP_BOX },
-            { "image map",             AccessibleRole::IMAGE_MAP },
-            { "notification",          AccessibleRole::NOTIFICATION },
-            { "info bar",              AccessibleRole::UNKNOWN },
-            { "level bar",             AccessibleRole::UNKNOWN },
-            { "title bar",             AccessibleRole::UNKNOWN },
-            { "block quote",           AccessibleRole::BLOCK_QUOTE },
-            { "audio",                 AccessibleRole::UNKNOWN },
-            { "video",                 AccessibleRole::UNKNOWN },
-            { "definition",            AccessibleRole::UNKNOWN },
-            { "article",               AccessibleRole::UNKNOWN },
-            { "landmark",              AccessibleRole::UNKNOWN },
-            { "log",                   AccessibleRole::UNKNOWN },
-            { "marquee",               AccessibleRole::UNKNOWN },
-            { "math",                  AccessibleRole::UNKNOWN },
-            { "rating",                AccessibleRole::UNKNOWN },
-            { "timer",                 AccessibleRole::UNKNOWN },
-            { "description list",      AccessibleRole::UNKNOWN },
-            { "description term",      AccessibleRole::UNKNOWN },
-            { "description value",     AccessibleRole::UNKNOWN },
-            { "static",                AccessibleRole::STATIC },
-            { "math fraction",         AccessibleRole::UNKNOWN },
-            { "math root",             AccessibleRole::UNKNOWN },
-            { "subscript",             AccessibleRole::UNKNOWN },
-            { "superscript",           AccessibleRole::UNKNOWN },
-            { "footnote",              AccessibleRole::FOOTNOTE },
+            { u"invalid",               AccessibleRole::UNKNOWN },
+            { u"accelerator label",     AccessibleRole::UNKNOWN },
+            { u"alert",                 AccessibleRole::ALERT },
+            { u"animation",             AccessibleRole::UNKNOWN },
+            { u"arrow",                 AccessibleRole::UNKNOWN },
+            { u"calendar",              AccessibleRole::UNKNOWN },
+            { u"canvas",                AccessibleRole::CANVAS },
+            { u"check box",             AccessibleRole::CHECK_BOX },
+            { u"check menu item",       AccessibleRole::CHECK_MENU_ITEM },
+            { u"color chooser",         AccessibleRole::COLOR_CHOOSER },
+            { u"column header",         AccessibleRole::COLUMN_HEADER },
+            { u"combo box",             AccessibleRole::COMBO_BOX },
+            { u"date editor",           AccessibleRole::DATE_EDITOR },
+            { u"desktop icon",          AccessibleRole::DESKTOP_ICON },
+            { u"desktop frame",         AccessibleRole::DESKTOP_PANE }, // ?
+            { u"dial",                  AccessibleRole::UNKNOWN },
+            { u"dialog",                AccessibleRole::DIALOG },
+            { u"directory pane",        AccessibleRole::DIRECTORY_PANE },
+            { u"drawing area",          AccessibleRole::UNKNOWN },
+            { u"file chooser",          AccessibleRole::FILE_CHOOSER },
+            { u"filler",                AccessibleRole::FILLER },
+            { u"font chooser",          AccessibleRole::FONT_CHOOSER },
+            { u"frame",                 AccessibleRole::FRAME },
+            { u"glass pane",            AccessibleRole::GLASS_PANE },
+            { u"html container",        AccessibleRole::UNKNOWN },
+            { u"icon",                  AccessibleRole::ICON },
+            { u"image",                 AccessibleRole::GRAPHIC },
+            { u"internal frame",        AccessibleRole::INTERNAL_FRAME },
+            { u"label",                 AccessibleRole::LABEL },
+            { u"layered pane",          AccessibleRole::LAYERED_PANE },
+            { u"list",                  AccessibleRole::LIST },
+            { u"list item",             AccessibleRole::LIST_ITEM },
+            { u"menu",                  AccessibleRole::MENU },
+            { u"menu bar",              AccessibleRole::MENU_BAR },
+            { u"menu item",             AccessibleRole::MENU_ITEM },
+            { u"option pane",           AccessibleRole::OPTION_PANE },
+            { u"page tab",              AccessibleRole::PAGE_TAB },
+            { u"page tab list",         AccessibleRole::PAGE_TAB_LIST },
+            { u"panel",                 AccessibleRole::PANEL }, // or SHAPE 
or TEXT_FRAME ?
+            { u"password text",         AccessibleRole::PASSWORD_TEXT },
+            { u"popup menu",            AccessibleRole::POPUP_MENU },
+            { u"progress bar",          AccessibleRole::PROGRESS_BAR },
+            { u"push button",           AccessibleRole::PUSH_BUTTON }, // or 
BUTTON_DROPDOWN or BUTTON_MENU
+            { u"radio button",          AccessibleRole::RADIO_BUTTON },
+            { u"radio menu item",       AccessibleRole::RADIO_MENU_ITEM },
+            { u"root pane",             AccessibleRole::ROOT_PANE },
+            { u"row header",            AccessibleRole::ROW_HEADER },
+            { u"scroll bar",            AccessibleRole::SCROLL_BAR },
+            { u"scroll pane",           AccessibleRole::SCROLL_PANE },
+            { u"separator",             AccessibleRole::SEPARATOR },
+            { u"slider",                AccessibleRole::SLIDER },
+            { u"split pane",            AccessibleRole::SPLIT_PANE },
+            { u"spin button",           AccessibleRole::SPIN_BOX }, // ?
+            { u"statusbar",             AccessibleRole::STATUS_BAR },
+            { u"table",                 AccessibleRole::TABLE },
+            { u"table cell",            AccessibleRole::TABLE_CELL },
+            { u"table column header",   AccessibleRole::COLUMN_HEADER }, // 
approximate
+            { u"table row header",      AccessibleRole::ROW_HEADER }, // 
approximate
+            { u"tear off menu item",    AccessibleRole::UNKNOWN },
+            { u"terminal",              AccessibleRole::UNKNOWN },
+            { u"text",                  AccessibleRole::TEXT },
+            { u"toggle button",         AccessibleRole::TOGGLE_BUTTON },
+            { u"tool bar",              AccessibleRole::TOOL_BAR },
+            { u"tool tip",              AccessibleRole::TOOL_TIP },
+            { u"tree",                  AccessibleRole::TREE },
+            { u"tree table",            AccessibleRole::TREE_TABLE },
+            { u"unknown",               AccessibleRole::UNKNOWN },
+            { u"viewport",              AccessibleRole::VIEW_PORT },
+            { u"window",                AccessibleRole::WINDOW },
+            { u"header",                AccessibleRole::HEADER },
+            { u"footer",                AccessibleRole::FOOTER },
+            { u"paragraph",             AccessibleRole::PARAGRAPH },
+            { u"ruler",                 AccessibleRole::RULER },
+            { u"application",           AccessibleRole::UNKNOWN },
+            { u"autocomplete",          AccessibleRole::UNKNOWN },
+            { u"edit bar",              AccessibleRole::EDIT_BAR },
+            { u"embedded",              AccessibleRole::EMBEDDED_OBJECT },
+            { u"entry",                 AccessibleRole::UNKNOWN },
+            { u"chart",                 AccessibleRole::CHART },
+            { u"caption",               AccessibleRole::CAPTION },
+            { u"document frame",        AccessibleRole::DOCUMENT },
+            { u"heading",               AccessibleRole::HEADING },
+            { u"page",                  AccessibleRole::PAGE },
+            { u"section",               AccessibleRole::SECTION },
+            { u"redundant object",      AccessibleRole::UNKNOWN },
+            { u"form",                  AccessibleRole::FORM },
+            { u"link",                  AccessibleRole::HYPER_LINK },
+            { u"input method window",   AccessibleRole::UNKNOWN },
+            { u"table row",             AccessibleRole::UNKNOWN },
+            { u"tree item",             AccessibleRole::TREE_ITEM },
+            { u"document spreadsheet",  AccessibleRole::DOCUMENT_SPREADSHEET },
+            { u"document presentation", AccessibleRole::DOCUMENT_PRESENTATION 
},
+            { u"document text",         AccessibleRole::DOCUMENT_TEXT },
+            { u"document web",          AccessibleRole::DOCUMENT }, // 
approximate
+            { u"document email",        AccessibleRole::DOCUMENT }, // 
approximate
+            { u"comment",               AccessibleRole::COMMENT }, // or NOTE 
or END_NOTE or FOOTNOTE or SCROLL_PANE
+            { u"list box",              AccessibleRole::UNKNOWN },
+            { u"grouping",              AccessibleRole::GROUP_BOX },
+            { u"image map",             AccessibleRole::IMAGE_MAP },
+            { u"notification",          AccessibleRole::NOTIFICATION },
+            { u"info bar",              AccessibleRole::UNKNOWN },
+            { u"level bar",             AccessibleRole::UNKNOWN },
+            { u"title bar",             AccessibleRole::UNKNOWN },
+            { u"block quote",           AccessibleRole::BLOCK_QUOTE },
+            { u"audio",                 AccessibleRole::UNKNOWN },
+            { u"video",                 AccessibleRole::UNKNOWN },
+            { u"definition",            AccessibleRole::UNKNOWN },
+            { u"article",               AccessibleRole::UNKNOWN },
+            { u"landmark",              AccessibleRole::UNKNOWN },
+            { u"log",                   AccessibleRole::UNKNOWN },
+            { u"marquee",               AccessibleRole::UNKNOWN },
+            { u"math",                  AccessibleRole::UNKNOWN },
+            { u"rating",                AccessibleRole::UNKNOWN },
+            { u"timer",                 AccessibleRole::UNKNOWN },
+            { u"description list",      AccessibleRole::UNKNOWN },
+            { u"description term",      AccessibleRole::UNKNOWN },
+            { u"description value",     AccessibleRole::UNKNOWN },
+            { u"static",                AccessibleRole::STATIC },
+            { u"math fraction",         AccessibleRole::UNKNOWN },
+            { u"math root",             AccessibleRole::UNKNOWN },
+            { u"subscript",             AccessibleRole::UNKNOWN },
+            { u"superscript",           AccessibleRole::UNKNOWN },
+            { u"footnote",              AccessibleRole::FOOTNOTE },
         };
 
         auto it = aAtkRoleToAccessibleRole.find(roleName);

Reply via email to