• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/json-c/arraylist.h

  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