Browse Source

json_tokener: optimize check for whitespace characters

speedup for 32-bit: ~15%
speedup for 64-bit: ~ 2%
tags/json-c-0.16-20220414
Ramiro Polla 6 years ago
parent
commit
158c248d5c
1 changed files with 17 additions and 1 deletions
  1. +17
    -1
      json_tokener.c

+ 17
- 1
json_tokener.c View File

@@ -50,6 +50,22 @@
# error You do not have strncasecmp on your system.
#endif /* HAVE_STRNCASECMP */

/* The following helper functions are used to speed up parsing. They
* are faster than their ctype counterparts because they assume that
* the input is in ASCII and that the locale is set to "C". The
* compiler will also inline these functions, providing an additional
* speedup by saving on function calls.
*/
static int is_ws_char(char c)
{
return c == ' '
|| c == '\t'
|| c == '\n'
|| c == '\v'
|| c == '\f'
|| c == '\r';
}

/* Use C99 NAN by default; if not available, nan("") should work too. */
#ifndef NAN
#define NAN nan("")
@@ -295,7 +311,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,

case json_tokener_state_eatws:
/* Advance until we change state */
while (isspace((unsigned char)c)) {
while (is_ws_char(c)) {
if ((!ADVANCE_CHAR(str, tok)) || (!PEEK_CHAR(c, tok)))
goto out;
}


Loading…
Cancel
Save