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.versini@pm.me>
Reviewed-by: Arnaud Versini <arnaud.versini@pm.me>
Tested-by: Jenkins
This commit is contained in:
Arnaud VERSINI
2025-02-03 09:11:29 +01:00
committed by Arnaud Versini
parent a838bac7b7
commit c38e3562e3
2 changed files with 129 additions and 127 deletions
+1 -1
View File
@@ -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
+128 -126
View File
@@ -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);