summaryrefslogtreecommitdiff
path: root/arraylist.h
diff options
context:
space:
mode:
authorDavid McCann <mccannd@uk.ibm.com>2021-05-13 06:34:10 +0100
committerDavid McCann <mccannd@uk.ibm.com>2021-05-13 06:34:10 +0100
commit00098efc966ee4551255ab5841d83e2e5345a3ad (patch)
treef26ead399be5306a7a19c7ca39e02e6ecaf06ce8 /arraylist.h
parent9b53c92ea398c479f59f77b2cbd24d2ccf1fc29a (diff)
parentcd7109f767a6d9f20caa9d10fbf4eab9c5262e7a (diff)
downloadjson-c-00098efc966ee4551255ab5841d83e2e5345a3ad.tar.gz
Merge branch 'json-c:master' into master
Diffstat (limited to 'arraylist.h')
-rw-r--r--arraylist.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/arraylist.h b/arraylist.h
index 3c4b1b2..1b18756 100644
--- a/arraylist.h
+++ b/arraylist.h
@@ -37,8 +37,27 @@ struct array_list
};
typedef struct array_list array_list;
+/**
+ * Allocate an array_list of the default size (32).
+ * @deprecated Use array_list_new2() instead.
+ */
extern struct array_list *array_list_new(array_list_free_fn *free_fn);
+/**
+ * Allocate an array_list of the desired size.
+ *
+ * If possible, the size should be chosen to closely match
+ * the actual number of elements expected to be used.
+ * If the exact size is unknown, there are tradeoffs to be made:
+ * - too small - the array_list code will need to call realloc() more
+ * often (which might incur an additional memory copy).
+ * - too large - will waste memory, but that can be mitigated
+ * by calling array_list_shrink() once the final size is known.
+ *
+ * @see array_list_shrink
+ */
+extern struct array_list *array_list_new2(array_list_free_fn *free_fn, int initial_size);
+
extern void array_list_free(struct array_list *al);
extern void *array_list_get_idx(struct array_list *al, size_t i);
@@ -56,6 +75,12 @@ extern void *array_list_bsearch(const void **key, struct array_list *arr,
extern int array_list_del_idx(struct array_list *arr, size_t idx, size_t count);
+/**
+ * Shrink the array list to just enough to fit the number of elements in it,
+ * plus empty_slots.
+ */
+extern int array_list_shrink(struct array_list *arr, size_t empty_slots);
+
#ifdef __cplusplus
}
#endif