1 /* 2 * $Id: arraylist.h,v 1.4 2006/01/26 02:16:28 mclark Exp $ 3 * 4 * Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd. 5 * Michael Clark <michael@metaparadigm.com> 6 * 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. 9 * 10 */ 11 12 /** 13 * @file 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. 17 */ 18 #ifndef _arraylist_h_ 19 #define _arraylist_h_ 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 #include <stddef.h> 26 27 #define ARRAY_LIST_DEFAULT_SIZE 32 28 29 typedef void(array_list_free_fn)(void *data); 30 31 struct array_list 32 { 33 void **array; 34 size_t length; 35 size_t size; 36 array_list_free_fn *free_fn; 37 }; 38 typedef struct array_list array_list; 39 40 /** 41 * Allocate an array_list of the default size (32). 42 * @deprecated Use array_list_new2() instead. 43 */ 44 extern struct array_list *array_list_new(array_list_free_fn *free_fn); 45 46 /** 47 * Allocate an array_list of the desired size. 48 * 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. 56 * 57 * @see array_list_shrink 58 */ 59 extern struct array_list *array_list_new2(array_list_free_fn *free_fn, int initial_size); 60 61 extern void array_list_free(struct array_list *al); 62 63 extern void *array_list_get_idx(struct array_list *al, size_t i); 64 65 extern int array_list_put_idx(struct array_list *al, size_t i, void *data); 66 67 extern int array_list_add(struct array_list *al, void *data); 68 69 extern size_t array_list_length(struct array_list *al); 70 71 extern void array_list_sort(struct array_list *arr, int (*compar)(const void *, const void *)); 72 73 extern void *array_list_bsearch(const void **key, struct array_list *arr, 74 int (*compar)(const void *, const void *)); 75 76 extern int array_list_del_idx(struct array_list *arr, size_t idx, size_t count); 77 78 /** 79 * Shrink the array list to just enough to fit the number of elements in it, 80 * plus empty_slots. 81 */ 82 extern int array_list_shrink(struct array_list *arr, size_t empty_slots); 83 84 #ifdef __cplusplus 85 } 86 #endif 87 88 #endif 89
This page was automatically generated by LXR 0.3.1. • OpenWrt