2 * $Id: arraylist.h,v 1.4 2006/01/26 02:16:28 mclark Exp $
4 * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
5 * Michael Clark <michael@metaparadigm.com>
7 * This library is free software; you can redistribute it and/or modify
8 * it under the terms of the MIT license. See COPYING for details.
14 * @brief Internal methods for working with json_type_array objects.
15 * Although this is exposed by the json_object_get_array() method,
16 * it is not recommended for direct use.
18 #ifndef _json_c_arraylist_h_
19 #define _json_c_arraylist_h_
27 #define ARRAY_LIST_DEFAULT_SIZE 32
29 typedef void(array_list_free_fn)(void *data);
36 array_list_free_fn *free_fn;
38 typedef struct array_list array_list;
41 * Allocate an array_list of the default size (32).
42 * @deprecated Use array_list_new2() instead.
44 extern struct array_list *array_list_new(array_list_free_fn *free_fn);
47 * Allocate an array_list of the desired size.
49 * If possible, the size should be chosen to closely match
50 * the actual number of elements expected to be used.
51 * If the exact size is unknown, there are tradeoffs to be made:
52 * - too small - the array_list code will need to call realloc() more
53 * often (which might incur an additional memory copy).
54 * - too large - will waste memory, but that can be mitigated
55 * by calling array_list_shrink() once the final size is known.
57 * @see array_list_shrink
59 extern struct array_list *array_list_new2(array_list_free_fn *free_fn, int initial_size);
61 extern void array_list_free(struct array_list *al);
63 extern void *array_list_get_idx(struct array_list *al, size_t i);
65 extern int array_list_put_idx(struct array_list *al, size_t i, void *data);
67 extern int array_list_add(struct array_list *al, void *data);
69 extern size_t array_list_length(struct array_list *al);
71 extern void array_list_sort(struct array_list *arr, int (*compar)(const void *, const void *));
73 extern void *array_list_bsearch(const void **key, struct array_list *arr,
74 int (*compar)(const void *, const void *));
76 extern int array_list_del_idx(struct array_list *arr, size_t idx, size_t count);
79 * Shrink the array list to just enough to fit the number of elements in it,
82 extern int array_list_shrink(struct array_list *arr, size_t empty_slots);