summaryrefslogtreecommitdiff
path: root/starmath/source/mathml
diff options
context:
space:
mode:
authordante <dante19031999@gmail.com>2021-02-05 13:33:24 +0100
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-02-06 07:52:25 +0100
commit4b055a51c501cec3f71600c1b87aa1fad85dd5af (patch)
tree9db944bd81a0f2910a669f73d4b197eda883230a /starmath/source/mathml
parenta0c689e1ad98bf3c47d189b8cc99c9f4bcc41a12 (diff)
Optimize starmath color search
Needs Jenkins resume. Details: Uses ordered search Avoid useless data copy. Change-Id: I100dc08451788e705a0109f6c73172cb6964306b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110473 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'starmath/source/mathml')
-rw-r--r--starmath/source/mathml/starmathdatabase.cxx51
1 files changed, 31 insertions, 20 deletions
diff --git a/starmath/source/mathml/starmathdatabase.cxx b/starmath/source/mathml/starmathdatabase.cxx
index 630fb343840d..f358a37be72c 100644
--- a/starmath/source/mathml/starmathdatabase.cxx
+++ b/starmath/source/mathml/starmathdatabase.cxx
@@ -692,6 +692,9 @@ const SmColorTokenTableEntry starmathdatabase::aColorTokenTableMATHML[] = {
// clang-format on
};
+const SmColorTokenTableEntry starmathdatabase::aColorTokenTableERROR[]
+ = { { "", TERROR, COL_SM_BLACK } };
+
std::unique_ptr<SmColorTokenTableEntry> starmathdatabase::Identify_Color_Parser(sal_uInt32 cColor)
{
for (auto i = std::begin(aColorTokenTableParse); i < std::end(aColorTokenTableParse); ++i)
@@ -748,46 +751,54 @@ starmathdatabase::Identify_Color_DVIPSNAMES(sal_uInt32 cColor)
new SmColorTokenTableEntry("", TRGBA, cColor));
}
-std::unique_ptr<SmColorTokenTableEntry>
-starmathdatabase::Identify_ColorName_Parser(const OUString& colorname)
+const SmColorTokenTableEntry* starmathdatabase::Identify_ColorName_Parser(const OUString& colorname)
{
if (colorname.isEmpty())
- return std::unique_ptr<SmColorTokenTableEntry>(
- new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
+ return &aColorTokenTableERROR[0];
for (auto i = std::begin(aColorTokenTableParse); i < std::end(aColorTokenTableParse); ++i)
- if (i->equals(colorname))
- return std::unique_ptr<SmColorTokenTableEntry>(new SmColorTokenTableEntry(i));
- return std::unique_ptr<SmColorTokenTableEntry>(
- new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
+ {
+ sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent);
+ if (matches == 0)
+ return i;
+ if (matches < 0)
+ break;
+ }
+ return &aColorTokenTableERROR[0];
}
-
std::unique_ptr<SmColorTokenTableEntry>
starmathdatabase::Identify_ColorName_HTML(const OUString& colorname)
{
if (colorname.isEmpty())
return std::unique_ptr<SmColorTokenTableEntry>(
new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
- for (auto i = std::begin(aColorTokenTableHTML); i < std::end(aColorTokenTableHTML); ++i)
- if (i->equals(colorname))
- return std::unique_ptr<SmColorTokenTableEntry>(new SmColorTokenTableEntry(i));
if (colorname[0] == '#')
{
Color col = Color::STRtoRGB(colorname);
return std::unique_ptr<SmColorTokenTableEntry>(new SmColorTokenTableEntry("", TRGB, col));
}
+ for (auto i = std::begin(aColorTokenTableHTML); i < std::end(aColorTokenTableHTML); ++i)
+ {
+ sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent);
+ if (matches == 0)
+ return std::unique_ptr<SmColorTokenTableEntry>(new SmColorTokenTableEntry(i));
+ if (matches < 0)
+ break;
+ }
return std::unique_ptr<SmColorTokenTableEntry>(
new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
}
-
-std::unique_ptr<SmColorTokenTableEntry>
+const SmColorTokenTableEntry*
starmathdatabase::Identify_ColorName_DVIPSNAMES(const OUString& colorname)
{
if (colorname.isEmpty())
- return std::unique_ptr<SmColorTokenTableEntry>(
- new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
+ return &aColorTokenTableERROR[0];
for (auto i = std::begin(aColorTokenTableDVIPS); i < std::end(aColorTokenTableDVIPS); ++i)
- if (i->equals(colorname))
- return std::unique_ptr<SmColorTokenTableEntry>(new SmColorTokenTableEntry(i));
- return std::unique_ptr<SmColorTokenTableEntry>(
- new SmColorTokenTableEntry("", TERROR, COL_SM_BLACK));
+ {
+ sal_Int32 matches = colorname.compareToIgnoreAsciiCaseAscii(i->pIdent);
+ if (matches == 0)
+ return i;
+ if (matches < 0)
+ break;
+ }
+ return &aColorTokenTableERROR[0];
}