| @@ -27,6 +27,7 @@ | |||||
| /tests/test_compare | /tests/test_compare | ||||
| /tests/test_double_serializer | /tests/test_double_serializer | ||||
| /tests/test_float | /tests/test_float | ||||
| /tests/test_int_add | |||||
| /tests/test_json_pointer | /tests/test_json_pointer | ||||
| /tests/test_locale | /tests/test_locale | ||||
| /tests/test_null | /tests/test_null | ||||
| @@ -666,20 +666,6 @@ int json_object_set_int(struct json_object *jso,int new_value){ | |||||
| return 1; | return 1; | ||||
| } | } | ||||
| int json_object_add_int(struct json_object *jso, int val) { | |||||
| if (!jso || jso->o_type != json_type_int) | |||||
| return 0; | |||||
| if (val > 0 && jso->o.c_int64 > INT32_MAX - val) { | |||||
| jso->o.c_int64 = INT32_MAX; | |||||
| } else if (val < 0 && jso->o.c_int64 < INT32_MIN - val) { | |||||
| jso->o.c_int64 = INT32_MIN; | |||||
| } else { | |||||
| jso->o.c_int64 += val; | |||||
| } | |||||
| return 1; | |||||
| } | |||||
| struct json_object* json_object_new_int64(int64_t i) | struct json_object* json_object_new_int64(int64_t i) | ||||
| { | { | ||||
| struct json_object *jso = json_object_new(json_type_int); | struct json_object *jso = json_object_new(json_type_int); | ||||
| @@ -724,7 +710,7 @@ int json_object_set_int64(struct json_object *jso,int64_t new_value){ | |||||
| return 1; | return 1; | ||||
| } | } | ||||
| int json_object_add_int64(struct json_object *jso, int64_t val) { | |||||
| int json_object_int_inc(struct json_object *jso, int64_t val) { | |||||
| if (!jso || jso->o_type != json_type_int) | if (!jso || jso->o_type != json_type_int) | ||||
| return 0; | return 0; | ||||
| if (val > 0 && jso->o.c_int64 > INT64_MAX - val) { | if (val > 0 && jso->o.c_int64 > INT64_MAX - val) { | ||||
| @@ -710,7 +710,7 @@ JSON_EXPORT int32_t json_object_get_int(const struct json_object *obj); | |||||
| * | * | ||||
| * The type of obj is checked to be a json_type_int and 0 is returned | * The type of obj is checked to be a json_type_int and 0 is returned | ||||
| * if it is not without any further actions. If type of obj is json_type_int | * if it is not without any further actions. If type of obj is json_type_int | ||||
| * the obect value is chaned to new_value | |||||
| * the obect value is changed to new_value | |||||
| * | * | ||||
| * @param obj the json_object instance | * @param obj the json_object instance | ||||
| * @param new_value the value to be set | * @param new_value the value to be set | ||||
| @@ -718,21 +718,21 @@ JSON_EXPORT int32_t json_object_get_int(const struct json_object *obj); | |||||
| */ | */ | ||||
| JSON_EXPORT int json_object_set_int(struct json_object *obj,int new_value); | JSON_EXPORT int json_object_set_int(struct json_object *obj,int new_value); | ||||
| /** Add the int value to the value of a json object | |||||
| /** Increment a json_type_int object by the given amount, which may be negative. | |||||
| * | * | ||||
| * The type of obj is checked to be a json type int and 0 is returned | |||||
| * if it is not without any further actions. If the type of obj is | |||||
| * json_type_int the int value is added to the object value. | |||||
| * If the type of obj is not json_type_int then 0 is returned with no further | |||||
| * action taken. | |||||
| * If the addition would result in a overflow, the object value | * If the addition would result in a overflow, the object value | ||||
| * is set to INT32_MAX. | |||||
| * is set to INT64_MAX. | |||||
| * If the addition would result in a underflow, the object value | * If the addition would result in a underflow, the object value | ||||
| * is set to INT32_MIN. | |||||
| * is set to INT64_MIN. | |||||
| * Neither overflow nor underflow affect the return value. | |||||
| * | * | ||||
| * @param obj the json_object instance | * @param obj the json_object instance | ||||
| * @param val the value to add | * @param val the value to add | ||||
| * @returns 1 if the addition succeded, 0 otherwise | |||||
| * @returns 1 if the increment succeded, 0 otherwise | |||||
| */ | */ | ||||
| JSON_EXPORT int json_object_add_int(struct json_object *obj, int val); | |||||
| JSON_EXPORT int json_object_int_inc(struct json_object *obj, int64_t val); | |||||
| /** Get the int value of a json_object | /** Get the int value of a json_object | ||||
| @@ -763,22 +763,6 @@ JSON_EXPORT int64_t json_object_get_int64(const struct json_object *obj); | |||||
| */ | */ | ||||
| JSON_EXPORT int json_object_set_int64(struct json_object *obj,int64_t new_value); | JSON_EXPORT int json_object_set_int64(struct json_object *obj,int64_t new_value); | ||||
| /** Add a int64_t value to the int64_t value of a json_object | |||||
| * | |||||
| * The type of obj is checked to be a json_type_int and 0 is returned | |||||
| * if it is not without any further actions. If the type of obj is | |||||
| * json_type_int the int64 value is added to the object value. | |||||
| * If the addition to the object would result in a overflow the | |||||
| * object value is set to INT64_MAX. | |||||
| * If the addition would result in a underflow, the | |||||
| * object value is set to INT64_MIN. | |||||
| * | |||||
| * @param obj the json_object instance | |||||
| * @param val the int64_vaule to add | |||||
| * @returns 1 if the addition succeeded, 0 otherwise | |||||
| */ | |||||
| JSON_EXPORT int json_object_add_int64(struct json_object *obj, int64_t val); | |||||
| /* double type methods */ | /* double type methods */ | ||||
| /** Create a new empty json_object of type json_type_double | /** Create a new empty json_object of type json_type_double | ||||
| @@ -6,33 +6,39 @@ | |||||
| int main(int argc, char **argv) | int main(int argc, char **argv) | ||||
| { | { | ||||
| json_object *tmp = json_object_new_int(123); | json_object *tmp = json_object_new_int(123); | ||||
| json_object_add_int(tmp, 123); | |||||
| json_object_int_inc(tmp, 123); | |||||
| assert(json_object_get_int(tmp) == 246); | assert(json_object_get_int(tmp) == 246); | ||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT ADD PASSED\n"); | printf("INT ADD PASSED\n"); | ||||
| tmp = json_object_new_int(INT32_MAX); | tmp = json_object_new_int(INT32_MAX); | ||||
| json_object_add_int(tmp, 100); | |||||
| json_object_int_inc(tmp, 100); | |||||
| assert(json_object_get_int(tmp) == INT32_MAX); | assert(json_object_get_int(tmp) == INT32_MAX); | ||||
| assert(json_object_get_int64(tmp) == (long)INT32_MAX + 100L); | |||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT ADD OVERFLOW PASSED\n"); | printf("INT ADD OVERFLOW PASSED\n"); | ||||
| tmp = json_object_new_int(INT32_MIN); | tmp = json_object_new_int(INT32_MIN); | ||||
| json_object_add_int(tmp, -100); | |||||
| json_object_int_inc(tmp, -100); | |||||
| assert(json_object_get_int(tmp) == INT32_MIN); | assert(json_object_get_int(tmp) == INT32_MIN); | ||||
| assert(json_object_get_int64(tmp) == (long)INT32_MIN - 100L); | |||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT ADD UNDERFLOW PASSED\n"); | printf("INT ADD UNDERFLOW PASSED\n"); | ||||
| tmp = json_object_new_int64(321321321); | tmp = json_object_new_int64(321321321); | ||||
| json_object_add_int(tmp, 321321321); | |||||
| json_object_int_inc(tmp, 321321321); | |||||
| assert(json_object_get_int(tmp) == 642642642); | assert(json_object_get_int(tmp) == 642642642); | ||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT64 ADD PASSED\n"); | printf("INT64 ADD PASSED\n"); | ||||
| tmp = json_object_new_int64(INT64_MAX); | tmp = json_object_new_int64(INT64_MAX); | ||||
| json_object_add_int64(tmp, 100); | |||||
| json_object_int_inc(tmp, 100); | |||||
| assert(json_object_get_int64(tmp) == INT64_MAX); | assert(json_object_get_int64(tmp) == INT64_MAX); | ||||
| json_object_int_inc(tmp, -100); | |||||
| assert(json_object_get_int64(tmp) != INT64_MAX); | |||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT64 ADD OVERFLOW PASSED\n"); | printf("INT64 ADD OVERFLOW PASSED\n"); | ||||
| tmp = json_object_new_int64(INT64_MIN); | tmp = json_object_new_int64(INT64_MIN); | ||||
| json_object_add_int64(tmp, -100); | |||||
| json_object_int_inc(tmp, -100); | |||||
| assert(json_object_get_int64(tmp) == INT64_MIN); | assert(json_object_get_int64(tmp) == INT64_MIN); | ||||
| json_object_int_inc(tmp, 100); | |||||
| assert(json_object_get_int64(tmp) != INT64_MIN); | |||||
| json_object_put(tmp); | json_object_put(tmp); | ||||
| printf("INT64 ADD UNDERFLOW PASSED\n"); | printf("INT64 ADD UNDERFLOW PASSED\n"); | ||||