diff options
author | David McCann <mccannd@uk.ibm.com> | 2021-05-13 06:34:10 +0100 |
---|---|---|
committer | David McCann <mccannd@uk.ibm.com> | 2021-05-13 06:34:10 +0100 |
commit | 00098efc966ee4551255ab5841d83e2e5345a3ad (patch) | |
tree | f26ead399be5306a7a19c7ca39e02e6ecaf06ce8 /arraylist.h | |
parent | 9b53c92ea398c479f59f77b2cbd24d2ccf1fc29a (diff) | |
parent | cd7109f767a6d9f20caa9d10fbf4eab9c5262e7a (diff) | |
download | json-c-00098efc966ee4551255ab5841d83e2e5345a3ad.tar.gz |
Merge branch 'json-c:master' into master
Diffstat (limited to 'arraylist.h')
-rw-r--r-- | arraylist.h | 25 |
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 |