[Optimized functions]

Optimized json_equal, json_delete, json_copy, json_deep_copy
Replaced if to switch
Removed unnecessary check for NULL.
This commit is contained in:
Maxim Zhukov 2016-02-03 17:34:54 +03:00
parent 0f50bb10b6
commit b698ca13de

View File

@ -931,20 +931,28 @@ json_t *json_null(void)
void json_delete(json_t *json)
{
if(json_is_object(json))
if (!json)
return;
switch(json_typeof(json)) {
case JSON_OBJECT:
json_delete_object(json_to_object(json));
else if(json_is_array(json))
break;
case JSON_ARRAY:
json_delete_array(json_to_array(json));
else if(json_is_string(json))
break;
case JSON_STRING:
json_delete_string(json_to_string(json));
else if(json_is_integer(json))
break;
case JSON_INTEGER:
json_delete_integer(json_to_integer(json));
else if(json_is_real(json))
break;
case JSON_REAL:
json_delete_real(json_to_real(json));
break;
default:
return;
}
/* json_delete is not called for true, false or null */
}
@ -964,23 +972,21 @@ int json_equal(json_t *json1, json_t *json2)
if(json1 == json2)
return 1;
if(json_is_object(json1))
switch(json_typeof(json1)) {
case JSON_OBJECT:
return json_object_equal(json1, json2);
if(json_is_array(json1))
case JSON_ARRAY:
return json_array_equal(json1, json2);
if(json_is_string(json1))
case JSON_STRING:
return json_string_equal(json1, json2);
if(json_is_integer(json1))
case JSON_INTEGER:
return json_integer_equal(json1, json2);
if(json_is_real(json1))
case JSON_REAL:
return json_real_equal(json1, json2);
default:
return 0;
}
}
/*** copying ***/
@ -990,23 +996,24 @@ json_t *json_copy(json_t *json)
if(!json)
return NULL;
if(json_is_object(json))
switch(json_typeof(json)) {
case JSON_OBJECT:
return json_object_copy(json);
if(json_is_array(json))
case JSON_ARRAY:
return json_array_copy(json);
if(json_is_string(json))
case JSON_STRING:
return json_string_copy(json);
if(json_is_integer(json))
case JSON_INTEGER:
return json_integer_copy(json);
if(json_is_real(json))
case JSON_REAL:
return json_real_copy(json);
if(json_is_true(json) || json_is_false(json) || json_is_null(json))
case JSON_TRUE:
case JSON_FALSE:
case JSON_NULL:
return json;
default:
return NULL;
}
return NULL;
}
@ -1016,26 +1023,26 @@ json_t *json_deep_copy(const json_t *json)
if(!json)
return NULL;
if(json_is_object(json))
switch(json_typeof(json)) {
case JSON_OBJECT:
return json_object_deep_copy(json);
if(json_is_array(json))
case JSON_ARRAY:
return json_array_deep_copy(json);
/* for the rest of the types, deep copying doesn't differ from
shallow copying */
if(json_is_string(json))
case JSON_STRING:
return json_string_copy(json);
if(json_is_integer(json))
case JSON_INTEGER:
return json_integer_copy(json);
if(json_is_real(json))
case JSON_REAL:
return json_real_copy(json);
if(json_is_true(json) || json_is_false(json) || json_is_null(json))
case JSON_TRUE:
case JSON_FALSE:
case JSON_NULL:
return (json_t *)json;
default:
return NULL;
}
return NULL;
}