Browse Source

json_tokener: optimize check for number characters

speedup for 32-bit: ~5%
speedup for 64-bit: ~3%
tags/json-c-0.16-20220414
Ramiro Polla 6 years ago
parent
commit
d98fc501fb
3 changed files with 11 additions and 3 deletions
  1. +0
    -1
      json_object.c
  2. +0
    -1
      json_object_private.h
  3. +11
    -1
      json_tokener.c

+ 0
- 1
json_object.c View File

@@ -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);


+ 0
- 1
json_object_private.h View File

@@ -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


+ 11
- 1
json_tokener.c View File

@@ -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 */


Loading…
Cancel
Save