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