Mercurial > vim
changeset 4849:fc7f985df537 v7.3.1171
updated for version 7.3.1171
Problem: Check for digits and ascii letters can be faster.
Solution: Use a trick with one comparison. (Dominique Pelle)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 12 Jun 2013 14:10:26 +0200 |
parents | 6b2dcf530539 |
children | 6c1f3a6714bd |
files | src/macros.h src/version.c |
diffstat | 2 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macros.h +++ b/src/macros.h @@ -109,15 +109,14 @@ #else # define ASCII_ISALPHA(c) ((c) < 0x7f && isalpha(c)) # define ASCII_ISALNUM(c) ((c) < 0x7f && isalnum(c)) -# define ASCII_ISLOWER(c) ((c) < 0x7f && islower(c)) -# define ASCII_ISUPPER(c) ((c) < 0x7f && isupper(c)) +# define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) +# define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) #endif /* Use our own isdigit() replacement, because on MS-Windows isdigit() returns * non-zero for superscript 1. Also avoids that isdigit() crashes for numbers - * below 0 and above 255. For complicated arguments and in/decrement use - * vim_isdigit() instead. */ -#define VIM_ISDIGIT(c) ((c) >= '0' && (c) <= '9') + * below 0 and above 255. */ +#define VIM_ISDIGIT(c) ((unsigned)(c) - '0' < 10) /* macro version of chartab(). * Only works with values 0-255!