@ -39,7 +39,7 @@ namespace epee
{
{
namespace json
namespace json
{
{
# define CHECK_ISSPACE() if(! isspace(*it)){ ASSERT_MES_AND_THROW("Wrong JSON character at: " << std::string(it, buf_end));}
# define CHECK_ISSPACE() if(! epee::misc_utils::parse:: isspace(*it)){ ASSERT_MES_AND_THROW("Wrong JSON character at: " << std::string(it, buf_end));}
/*inline void parse_error()
/*inline void parse_error()
{
{
@ -114,11 +114,11 @@ namespace epee
std : : string val ;
std : : string val ;
match_string2 ( it , buf_end , val ) ;
match_string2 ( it , buf_end , val ) ;
//insert text value
//insert text value
stg . set_value ( name , val, current_section ) ;
stg . set_value ( name , std: : move ( val) , current_section ) ;
state = match_state_wonder_after_value ;
state = match_state_wonder_after_value ;
} else if ( isdigit ( * it ) | | * it = = ' - ' )
} else if ( epee : : misc_utils : : parse : : isdigit ( * it ) | | * it = = ' - ' )
{ //just a named number value started
{ //just a named number value started
std : : string val ;
boo st: : string _ref val ;
bool is_v_float = false ; bool is_signed = false ;
bool is_v_float = false ; bool is_signed = false ;
match_number2 ( it , buf_end , val , is_v_float , is_signed ) ;
match_number2 ( it , buf_end , val , is_v_float , is_signed ) ;
if ( ! is_v_float )
if ( ! is_v_float )
@ -126,27 +126,27 @@ namespace epee
if ( is_signed )
if ( is_signed )
{
{
errno = 0 ;
errno = 0 ;
int64_t nval = strtoll ( val . c_str ( ) , NULL , 10 ) ;
int64_t nval = strtoll ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
stg . set_value ( name , nval , current_section ) ;
stg . set_value ( name , nval , current_section ) ;
} else
} else
{
{
errno = 0 ;
errno = 0 ;
uint64_t nval = strtoull ( val . c_str ( ) , NULL , 10 ) ;
uint64_t nval = strtoull ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
stg . set_value ( name , nval , current_section ) ;
stg . set_value ( name , nval , current_section ) ;
}
}
} else
} else
{
{
errno = 0 ;
errno = 0 ;
double nval = strtod ( val . c_str ( ) , NULL ) ;
double nval = strtod ( val . data ( ) , NULL ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
stg . set_value ( name , nval , current_section ) ;
stg . set_value ( name , nval , current_section ) ;
}
}
state = match_state_wonder_after_value ;
state = match_state_wonder_after_value ;
} else if ( isalpha ( * it ) )
} else if ( isalpha ( * it ) )
{ // could be null, true or false
{ // could be null, true or false
std : : string word ;
boo st: : string _ref word ;
match_word2 ( it , buf_end , word ) ;
match_word2 ( it , buf_end , word ) ;
if ( boost : : iequals ( word , " null " ) )
if ( boost : : iequals ( word , " null " ) )
{
{
@ -203,13 +203,13 @@ namespace epee
//mean array of strings
//mean array of strings
std : : string val ;
std : : string val ;
match_string2 ( it , buf_end , val ) ;
match_string2 ( it , buf_end , val ) ;
h_array = stg . insert_first_value ( name , val, current_section ) ;
h_array = stg . insert_first_value ( name , std: : move ( val) , current_section ) ;
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values entry " ) ;
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values entry " ) ;
state = match_state_array_after_value ;
state = match_state_array_after_value ;
array_md = array_mode_string ;
array_md = array_mode_string ;
} else if ( isdigit ( * it ) | | * it = = ' - ' )
} else if ( epee : : misc_utils : : parse : : isdigit ( * it ) | | * it = = ' - ' )
{ //array of numbers value started
{ //array of numbers value started
std : : string val ;
boo st: : string _ref val ;
bool is_v_float = false ; bool is_signed_val = false ;
bool is_v_float = false ; bool is_signed_val = false ;
match_number2 ( it , buf_end , val , is_v_float , is_signed_val ) ;
match_number2 ( it , buf_end , val , is_v_float , is_signed_val ) ;
if ( ! is_v_float )
if ( ! is_v_float )
@ -217,22 +217,22 @@ namespace epee
if ( is_signed_val )
if ( is_signed_val )
{
{
errno = 0 ;
errno = 0 ;
int64_t nval = strtoll ( val . c_str ( ) , NULL , 10 ) ;
int64_t nval = strtoll ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
} else
} else
{
{
errno = 0 ;
errno = 0 ;
uint64_t nval = strtoull ( val . c_str ( ) , NULL , 10 ) ;
uint64_t nval = strtoull ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
}
}
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values section entry " ) ;
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values section entry " ) ;
} else
} else
{
{
errno = 0 ;
errno = 0 ;
double nval = strtod ( val . c_str ( ) , NULL ) ;
double nval = strtod ( val . data ( ) , NULL ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
h_array = stg . insert_first_value ( name , nval , current_section ) ;
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values section entry " ) ;
CHECK_AND_ASSERT_THROW_MES ( h_array , " failed to insert values section entry " ) ;
}
}
@ -245,7 +245,7 @@ namespace epee
state = match_state_wonder_after_value ;
state = match_state_wonder_after_value ;
} else if ( isalpha ( * it ) )
} else if ( isalpha ( * it ) )
{ // array of booleans
{ // array of booleans
std : : string word ;
boo st: : string _ref word ;
match_word2 ( it , buf_end , word ) ;
match_word2 ( it , buf_end , word ) ;
if ( boost : : iequals ( word , " true " ) )
if ( boost : : iequals ( word , " true " ) )
{
{
@ -291,15 +291,15 @@ namespace epee
{
{
std : : string val ;
std : : string val ;
match_string2 ( it , buf_end , val ) ;
match_string2 ( it , buf_end , val ) ;
bool res = stg . insert_next_value ( h_array , val) ;
bool res = stg . insert_next_value ( h_array , std: : move ( val) ) ;
CHECK_AND_ASSERT_THROW_MES ( res , " failed to insert values " ) ;
CHECK_AND_ASSERT_THROW_MES ( res , " failed to insert values " ) ;
state = match_state_array_after_value ;
state = match_state_array_after_value ;
} else CHECK_ISSPACE ( ) ;
} else CHECK_ISSPACE ( ) ;
break ;
break ;
case array_mode_numbers :
case array_mode_numbers :
if ( isdigit ( * it ) | | * it = = ' - ' )
if ( epee : : misc_utils : : parse : : isdigit ( * it ) | | * it = = ' - ' )
{ //array of numbers value started
{ //array of numbers value started
std : : string val ;
boo st: : string _ref val ;
bool is_v_float = false ; bool is_signed_val = false ;
bool is_v_float = false ; bool is_signed_val = false ;
match_number2 ( it , buf_end , val , is_v_float , is_signed_val ) ;
match_number2 ( it , buf_end , val , is_v_float , is_signed_val ) ;
bool insert_res = false ;
bool insert_res = false ;
@ -308,21 +308,21 @@ namespace epee
if ( is_signed_val )
if ( is_signed_val )
{
{
errno = 0 ;
errno = 0 ;
int64_t nval = strtoll ( val . c_str ( ) , NULL , 10 ) ;
int64_t nval = strtoll ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
} else
} else
{
{
errno = 0 ;
errno = 0 ;
uint64_t nval = strtoull ( val . c_str ( ) , NULL , 10 ) ;
uint64_t nval = strtoull ( val . data ( ) , NULL , 10 ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
}
}
} else
} else
{
{
errno = 0 ;
errno = 0 ;
double nval = strtod ( val . c_str ( ) , NULL ) ;
double nval = strtod ( val . data ( ) , NULL ) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + val) ;
if ( errno ) throw std : : runtime_error ( " Invalid number: " + std: : string ( val) ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
insert_res = stg . insert_next_value ( h_array , nval ) ;
}
}
CHECK_AND_ASSERT_THROW_MES ( insert_res , " Failed to insert next value " ) ;
CHECK_AND_ASSERT_THROW_MES ( insert_res , " Failed to insert next value " ) ;
@ -333,7 +333,7 @@ namespace epee
case array_mode_booleans :
case array_mode_booleans :
if ( isalpha ( * it ) )
if ( isalpha ( * it ) )
{ // array of booleans
{ // array of booleans
std : : string word ;
boo st: : string _ref word ;
match_word2 ( it , buf_end , word ) ;
match_word2 ( it , buf_end , word ) ;
if ( boost : : iequals ( word , " true " ) )
if ( boost : : iequals ( word , " true " ) )
{
{