mirror of
https://github.com/json-c/json-c.git
synced 2026-03-19 13:09:07 +08:00
json_tokener: optimize check for number characters
speedup for 32-bit: ~5% speedup for 64-bit: ~3%
This commit is contained in:
@@ -41,7 +41,6 @@
|
||||
// Don't define this. It's not thread-safe.
|
||||
/* #define REFCOUNT_DEBUG 1 */
|
||||
|
||||
const char *json_number_chars = "0123456789.+-eE";
|
||||
const char *json_hex_chars = "0123456789abcdefABCDEF";
|
||||
|
||||
static struct json_object* json_object_new(enum json_type o_type);
|
||||
|
||||
@@ -51,7 +51,6 @@ struct json_object
|
||||
|
||||
void _json_c_set_last_err(const char *err_fmt, ...);
|
||||
|
||||
extern const char *json_number_chars;
|
||||
extern const char *json_hex_chars;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -73,6 +73,16 @@ static int is_hex_char(char c)
|
||||
|| (c >= 'a' && c <= 'f');
|
||||
}
|
||||
|
||||
static int is_number_char(char c)
|
||||
{
|
||||
return (c >= '0' && c <= '9')
|
||||
|| c == '.'
|
||||
|| c == '+'
|
||||
|| c == '-'
|
||||
|| c == 'e'
|
||||
|| c == 'E';
|
||||
}
|
||||
|
||||
/* Use C99 NAN by default; if not available, nan("") should work too. */
|
||||
#ifndef NAN
|
||||
#define NAN nan("")
|
||||
@@ -757,7 +767,7 @@ struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
|
||||
int case_len=0;
|
||||
int is_exponent=0;
|
||||
int negativesign_next_possible_location=1;
|
||||
while(c && strchr(json_number_chars, c)) {
|
||||
while(c && is_number_char(c)) {
|
||||
++case_len;
|
||||
|
||||
/* non-digit characters checks */
|
||||
|
||||
Reference in New Issue
Block a user