summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi Abe <tabe@fixedpoint.jp>2017-01-31 14:05:53 +0900
committerTakeshi Abe <tabe@fixedpoint.jp>2017-02-01 03:51:27 +0000
commitcd2088f1395f84f61af47427bb6376db1765a2d6 (patch)
tree46b1295e81287fb58c04dd540503ff83218eda4e
parentf3ba0c5d4dfc44f72aa7d4809c062227649f098f (diff)
starmath: Simplify and micro-optimize lookup in SmIsMathAlpha()
Change-Id: Ica2e0d14141785b9e14c05179e517117afadc5e0 Reviewed-on: https://gerrit.libreoffice.org/33734 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Takeshi Abe <tabe@fixedpoint.jp>
-rw-r--r--starmath/source/rect.cxx41
1 files changed, 17 insertions, 24 deletions
diff --git a/starmath/source/rect.cxx b/starmath/source/rect.cxx
index 66a6c27f1fdf..aa6489427d6d 100644
--- a/starmath/source/rect.cxx
+++ b/starmath/source/rect.cxx
@@ -29,27 +29,26 @@
#include "smmod.hxx"
#include <cassert>
+#include <unordered_set>
-// '\0' terminated Array with symbol, which should be treat as letters in
-// StarMath Font, (to get a normal (non-clipped) SmRect in contrast to the
-// other operators and symbols).
-static sal_Unicode const aMathAlpha[] =
-{
- MS_ALEPH, MS_IM, MS_RE,
- MS_WP, sal_Unicode(0xE070), MS_EMPTYSET,
- sal_Unicode(0x2113), sal_Unicode(0xE0D6), sal_Unicode(0x2107),
- sal_Unicode(0x2127), sal_Unicode(0x210A), MS_HBAR,
- MS_LAMBDABAR, MS_SETN, MS_SETZ,
- MS_SETQ, MS_SETR, MS_SETC,
- sal_Unicode(0x2373), sal_Unicode(0xE0A5), sal_Unicode(0x2112),
- sal_Unicode(0x2130), sal_Unicode(0x2131),
- sal_Unicode('\0')
-};
-
bool SmIsMathAlpha(const OUString &rText)
// true iff symbol (from StarMath Font) should be treated as letter
{
+ // Set of symbols, which should be treated as letters in StarMath Font
+ // (to get a normal (non-clipped) SmRect in contrast to the other operators
+ // and symbols).
+ static std::unordered_set<sal_Unicode> const aMathAlpha({
+ MS_ALEPH, MS_IM, MS_RE,
+ MS_WP, sal_Unicode(0xE070), MS_EMPTYSET,
+ sal_Unicode(0x2113), sal_Unicode(0xE0D6), sal_Unicode(0x2107),
+ sal_Unicode(0x2127), sal_Unicode(0x210A), MS_HBAR,
+ MS_LAMBDABAR, MS_SETN, MS_SETZ,
+ MS_SETQ, MS_SETR, MS_SETC,
+ sal_Unicode(0x2373), sal_Unicode(0xE0A5), sal_Unicode(0x2112),
+ sal_Unicode(0x2130), sal_Unicode(0x2131)
+ });
+
if (rText.isEmpty())
return false;
@@ -59,14 +58,8 @@ bool SmIsMathAlpha(const OUString &rText)
// is it a greek symbol?
if (sal_Unicode(0xE0AC) <= cChar && cChar <= sal_Unicode(0xE0D4))
return true;
- else
- {
- // appears it in 'aMathAlpha'?
- const sal_Unicode *pChar = aMathAlpha;
- while (*pChar && *pChar != cChar)
- pChar++;
- return *pChar != '\0';
- }
+ // or, does it appear in 'aMathAlpha'?
+ return aMathAlpha.find(cChar) != aMathAlpha.end();
}