Lines Matching refs:a

13 	array *a;  in array_init()  local
15 a = calloc(1, sizeof(*a)); in array_init()
16 assert(a); in array_init()
18 a->next_power_of_2 = 1; in array_init()
20 return a; in array_init()
25 array *a = array_init(); in array_init_array() local
27 a->used = src->used; in array_init_array()
28 a->size = src->size; in array_init_array()
29 a->next_power_of_2 = src->next_power_of_2; in array_init_array()
30 a->unique_ndx = src->unique_ndx; in array_init_array()
32 a->data = malloc(sizeof(*src->data) * src->size); in array_init_array()
34 if (src->data[i]) a->data[i] = src->data[i]->copy(src->data[i]); in array_init_array()
35 else a->data[i] = NULL; in array_init_array()
38 a->sorted = malloc(sizeof(*src->sorted) * src->size); in array_init_array()
39 memcpy(a->sorted, src->sorted, sizeof(*src->sorted) * src->size); in array_init_array()
40 return a; in array_init_array()
43 void array_free(array *a) { in array_free() argument
45 if (!a) return; in array_free()
47 if (!a->is_weakref) { in array_free()
48 for (i = 0; i < a->size; i++) { in array_free()
49 if (a->data[i]) a->data[i]->free(a->data[i]); in array_free()
53 if (a->data) free(a->data); in array_free()
54 if (a->sorted) free(a->sorted); in array_free()
56 free(a); in array_free()
59 void array_reset(array *a) { in array_reset() argument
61 if (!a) return; in array_reset()
63 if (!a->is_weakref) { in array_reset()
64 for (i = 0; i < a->used; i++) { in array_reset()
65 a->data[i]->reset(a->data[i]); in array_reset()
69 a->used = 0; in array_reset()
72 data_unset *array_pop(array *a) { in array_pop() argument
75 assert(a->used != 0); in array_pop()
77 a->used --; in array_pop()
78 du = a->data[a->used]; in array_pop()
79 a->data[a->used] = NULL; in array_pop()
84 static int array_get_index(array *a, const char *key, size_t keylen, int *rndx) { in array_get_index() argument
91 for (i = pos = a->next_power_of_2 / 2; ; i >>= 1) { in array_get_index()
96 } else if (pos >= (int)a->used) { in array_get_index()
99 …cmp = buffer_caseless_compare(key, keylen, a->data[a->sorted[pos]]->key->ptr, a->data[a->sorted[po… in array_get_index()
103 ndx = a->sorted[pos]; in array_get_index()
119 data_unset *array_get_element(array *a, const char *key) { in array_get_element() argument
122 if (-1 != (ndx = array_get_index(a, key, strlen(key) + 1, NULL))) { in array_get_element()
125 return a->data[ndx]; in array_get_element()
131 data_unset *array_get_unused_element(array *a, data_type_t t) { in array_get_unused_element() argument
135 for (i = a->used; i < a->size; i++) { in array_get_unused_element()
136 if (a->data[i] && a->data[i]->type == t) { in array_get_unused_element()
137 ds = a->data[i]; in array_get_unused_element()
140 a->data[i] = a->data[a->used]; in array_get_unused_element()
141 a->data[a->used] = NULL; in array_get_unused_element()
168 data_unset *array_replace(array *a, data_unset *du) { in array_replace() argument
171 if (-1 == (ndx = array_get_index(a, du->key->ptr, du->key->used, NULL))) { in array_replace()
172 array_insert_unique(a, du); in array_replace()
175 data_unset *old = a->data[ndx]; in array_replace()
176 a->data[ndx] = du; in array_replace()
181 int array_insert_unique(array *a, data_unset *str) { in array_insert_unique() argument
188 buffer_copy_long(str->key, a->unique_ndx++); in array_insert_unique()
193 if (-1 != (ndx = array_get_index(a, str->key->ptr, str->key->used, &pos))) { in array_insert_unique()
195 if (a->data[ndx]->type == str->type) { in array_insert_unique()
196 str->insert_dup(a->data[ndx], str); in array_insert_unique()
205 if (a->used+1 > INT_MAX) { in array_insert_unique()
210 if (a->size == 0) { in array_insert_unique()
211 a->size = 16; in array_insert_unique()
212 a->data = malloc(sizeof(*a->data) * a->size); in array_insert_unique()
213 a->sorted = malloc(sizeof(*a->sorted) * a->size); in array_insert_unique()
214 assert(a->data); in array_insert_unique()
215 assert(a->sorted); in array_insert_unique()
216 for (j = a->used; j < a->size; j++) a->data[j] = NULL; in array_insert_unique()
217 } else if (a->size == a->used) { in array_insert_unique()
218 a->size += 16; in array_insert_unique()
219 a->data = realloc(a->data, sizeof(*a->data) * a->size); in array_insert_unique()
220 a->sorted = realloc(a->sorted, sizeof(*a->sorted) * a->size); in array_insert_unique()
221 assert(a->data); in array_insert_unique()
222 assert(a->sorted); in array_insert_unique()
223 for (j = a->used; j < a->size; j++) a->data[j] = NULL; in array_insert_unique()
226 ndx = (int) a->used; in array_insert_unique()
229 if (a->data[ndx]) a->data[ndx]->free(a->data[ndx]); in array_insert_unique()
231 a->data[a->used++] = str; in array_insert_unique()
235 …uffer_caseless_compare(str->key->ptr, str->key->used, a->data[a->sorted[pos]]->key->ptr, a->data[a in array_insert_unique()
241 memmove(a->sorted + (pos + 1), a->sorted + (pos), (ndx - pos) * sizeof(*a->sorted)); in array_insert_unique()
245 a->sorted[pos] = ndx; in array_insert_unique()
247 if (a->next_power_of_2 == (size_t)ndx) a->next_power_of_2 <<= 1; in array_insert_unique()
259 size_t array_get_max_key_length(array *a) { in array_get_max_key_length() argument
263 for (i = 0; i < a->used; i ++) { in array_get_max_key_length()
264 data_unset *du = a->data[i]; in array_get_max_key_length()
274 int array_print(array *a, int depth) { in array_print() argument
279 if (a->used > 5) { in array_print()
282 for (i = 0; i < a->used && oneline; i++) { in array_print()
283 data_unset *du = a->data[i]; in array_print()
300 for (i = 0; i < a->used; i++) { in array_print()
301 data_unset *du = a->data[i]; in array_print()
311 maxlen = array_get_max_key_length(a); in array_print()
313 for (i = 0; i < a->used; i++) { in array_print()
314 data_unset *du = a->data[i]; in array_print()
344 array *a; in main() local
351 a = array_init(); in main()
357 array_insert_unique(a, (data_unset *)ds); in main()
363 array_insert_unique(a, (data_unset *)ds); in main()
369 array_insert_unique(a, (data_unset *)ds); in main()
374 array_insert_unique(a, (data_unset *)dc); in main()
379 array_insert_unique(a, (data_unset *)dc); in main()
381 array_print(a, 0); in main()
383 array_free(a); in main()