terminology: inline the most common case for a small 2% speed up.

This commit is contained in:
Cedric Bail 2013-10-28 18:54:30 +09:00
parent 8585c3e9c2
commit c1b516f231
2 changed files with 26 additions and 13 deletions

View File

@ -5,21 +5,12 @@
#include "termptydbl.h"
Eina_Bool
_termpty_is_dblwidth_get(Termpty *ty, int g)
_termpty_is_dblwidth_slow_get(Termpty *ty, int g)
{
#if defined(SUPPORT_DBLWIDTH)
// check for east asian full-width (F), half-width (H), wide (W),
// narrow (Na) or ambiguous (A) codepoints
// ftp://ftp.unicode.org/Public/UNIDATA/EastAsianWidth.txt
// optimize for latin1 non-ambiguous
if (g <= 0xa0)
return EINA_FALSE;
// (F)
if ((g == 0x3000) ||
((g >= 0xff01) && (g <= 0xff60)) ||
((g >= 0xffe0) && (g <= 0xffe6)))
return EINA_TRUE;
// (W)
if (
// 1XXX
@ -273,6 +264,5 @@ _termpty_is_dblwidth_get(Termpty *ty, int g)
}
// Na, H -> not checked
#endif
return EINA_FALSE;
}

View File

@ -1,2 +1,25 @@
Eina_Bool _termpty_is_dblwidth_get(Termpty *ty, int g);
Eina_Bool _termpty_is_dblwidth_slow_get(Termpty *ty, int g);
static inline Eina_Bool
_termpty_is_dblwidth_get(Termpty *ty, int g)
{
#if defined(SUPPORT_DBLWIDTH)
// check for east asian full-width (F), half-width (H), wide (W),
// narrow (Na) or ambiguous (A) codepoints
// ftp://ftp.unicode.org/Public/UNIDATA/EastAsianWidth.txt
// optimize for latin1 non-ambiguous
if (g <= 0xa0)
return EINA_FALSE;
// (F)
if ((g == 0x3000) ||
((g >= 0xff01) && (g <= 0xff60)) ||
((g >= 0xffe0) && (g <= 0xffe6)))
return EINA_TRUE;
return _termpty_is_dblwidth_slow_get(ty, g);
#else
return EINA_FALSE;
#endif
}