From cdca9d3c8e50ff7de712f7157d6f0ddaa1922700 Mon Sep 17 00:00:00 2001 From: Mark Swoope Date: Thu, 2 Apr 2015 14:05:27 -0700 Subject: [PATCH] Added array_list_del_idx and json_object_array_del_idx --- arraylist.c | 15 +++++++++++++++ arraylist.h | 2 ++ json_object.c | 4 ++++ json_object.h | 13 +++++++++++++ 4 files changed, 34 insertions(+) diff --git a/arraylist.c b/arraylist.c index 8efe006..1e5ff1c 100644 --- a/arraylist.c +++ b/arraylist.c @@ -106,3 +106,18 @@ array_list_length(struct array_list *arr) { return arr->length; } + +int +array_list_del_idx( struct array_list *arr, int idx, int count ) +{ + int i, stop; + + stop = idx + count; + if ( idx >= arr->length || stop > arr->length ) return -1; + for ( i = idx; i < stop; ++i ) { + if ( arr->array[i] ) arr->free_fn( arr->array[i] ); + } + memmove( arr->array + idx, arr->array + stop, (arr->length - stop) * sizeof(void*) ); + arr->length -= count; + return 0; +} diff --git a/arraylist.h b/arraylist.h index caecdfa..9d2db5b 100644 --- a/arraylist.h +++ b/arraylist.h @@ -53,6 +53,8 @@ extern void* array_list_bsearch(const void **key, struct array_list *arr, int (*sort_fn)(const void *, const void *)); +extern int +array_list_del_idx(struct array_list *arr, int i, int count); #ifdef __cplusplus } diff --git a/json_object.c b/json_object.c index 9b89bb7..d09518f 100644 --- a/json_object.c +++ b/json_object.c @@ -926,3 +926,7 @@ struct json_object* json_object_array_get_idx(struct json_object *jso, return (struct json_object*)array_list_get_idx(jso->o.c_array, idx); } +int json_object_array_del_idx(struct json_object *jso, int idx, int count) +{ + return array_list_del_idx(jso->o.c_array, idx, count); +} diff --git a/json_object.h b/json_object.h index 2bdfd5f..ad6af8e 100644 --- a/json_object.h +++ b/json_object.h @@ -464,6 +464,19 @@ extern int json_object_array_put_idx(struct json_object *obj, int idx, extern struct json_object* json_object_array_get_idx(struct json_object *obj, int idx); +/** Delete an elements from a specified index in an array (a json_object of type json_type_array) + * + * The reference count will be decremented for each of the deleted objects. If there + * are no more owners of an element that is being deleted, then the value is + * freed. Otherwise, the reference to the value will remain in memory. + * + * @param obj the json_object instance + * @param idx the index to start deleting elements at + * @param count the number of elements to delete + * @returns 0 if the elements were successfully deleted + */ +extern int json_object_array_del_idx(struct json_object *obj, int idx, int count); + /* json_bool type methods */ /** Create a new empty json_object of type json_type_boolean -- 2.49.0