diff options
author | dante <dante19031999@gmail.com> | 2021-02-05 13:33:24 +0100 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2021-02-06 07:52:25 +0100 |
commit | 4b055a51c501cec3f71600c1b87aa1fad85dd5af (patch) | |
tree | 9db944bd81a0f2910a669f73d4b197eda883230a /starmath/source/mathml | |
parent | a0c689e1ad98bf3c47d189b8cc99c9f4bcc41a12 (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.cxx | 51 |
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]; } |