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)
{
return 1;
}
+int json_object_add_int64(struct json_object *jso, int64_t val) {
+ if (!jso || jso->o_type != json_type_int)
+ return 0;
+ if (val > 0 && jso->o.c_int64 > INT64_MAX - val) {
+ jso->o.c_int64 = INT64_MAX;
+ } else if (val < 0 && jso->o.c_int64 < INT64_MIN - val) {
+ jso->o.c_int64 = INT64_MIN;
+ } else {
+ jso->o.c_int64 += val;
+ }
+ return 1;
+}
+
/* json_object_double */
#if defined(HAVE___THREAD)
*/
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
+ *
+ * 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 addition would result in a overflow, the object value
+ * is set to INT32_MAX.
+ * If the addition would result in a underflow, the object value
+ * is set to INT32_MIN.
+ *
+ * @param obj the json_object instance
+ * @param val the value to add
+ * @returns 1 if the addition succeded, 0 otherwise
+ */
+JSON_EXPORT int json_object_add_int(struct json_object *obj, int val);
+
/** Get the int value of a json_object
*
*/
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 */
TESTS+= test_set_value.test
TESTS+= test_visit.test
TESTS+= test_json_pointer.test
+TESTS+= test_int_add.test
check_PROGRAMS=
check_PROGRAMS += $(TESTS:.test=)
--- /dev/null
+#include <assert.h>
+#include <stdio.h>
+
+#include "json.h"
+
+int main(int argc, char **argv)
+{
+ json_object *tmp = json_object_new_int(123);
+ json_object_add_int(tmp, 123);
+ assert(json_object_get_int(tmp) == 246);
+ json_object_put(tmp);
+ printf("INT ADD PASSED\n");
+ tmp = json_object_new_int(INT32_MAX);
+ json_object_add_int(tmp, 100);
+ assert(json_object_get_int(tmp) == INT32_MAX);
+ json_object_put(tmp);
+ printf("INT ADD OVERFLOW PASSED\n");
+ tmp = json_object_new_int(INT32_MIN);
+ json_object_add_int(tmp, -100);
+ assert(json_object_get_int(tmp) == INT32_MIN);
+ json_object_put(tmp);
+ printf("INT ADD UNDERFLOW PASSED\n");
+ tmp = json_object_new_int64(321321321);
+ json_object_add_int(tmp, 321321321);
+ assert(json_object_get_int(tmp) == 642642642);
+ json_object_put(tmp);
+ printf("INT64 ADD PASSED\n");
+ tmp = json_object_new_int64(INT64_MAX);
+ json_object_add_int64(tmp, 100);
+ assert(json_object_get_int64(tmp) == INT64_MAX);
+ json_object_put(tmp);
+ printf("INT64 ADD OVERFLOW PASSED\n");
+ tmp = json_object_new_int64(INT64_MIN);
+ json_object_add_int64(tmp, -100);
+ assert(json_object_get_int64(tmp) == INT64_MIN);
+ json_object_put(tmp);
+ printf("INT64 ADD UNDERFLOW PASSED\n");
+
+ printf("PASSED\n");
+ return 0;
+}
--- /dev/null
+INT ADD PASSED
+INT ADD OVERFLOW PASSED
+INT ADD UNDERFLOW PASSED
+INT64 ADD PASSED
+INT64 ADD OVERFLOW PASSED
+INT64 ADD UNDERFLOW PASSED
+PASSED
--- /dev/null
+test_basic.test
\ No newline at end of file