diff options
author | Takeshi Abe <tabe@fixedpoint.jp> | 2017-01-31 14:05:53 +0900 |
---|---|---|
committer | Takeshi Abe <tabe@fixedpoint.jp> | 2017-02-01 03:51:27 +0000 |
commit | cd2088f1395f84f61af47427bb6376db1765a2d6 (patch) | |
tree | 46b1295e81287fb58c04dd540503ff83218eda4e /starmath | |
parent | f3ba0c5d4dfc44f72aa7d4809c062227649f098f (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>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/source/rect.cxx | 41 |
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(); } |