]> code.delx.au - pulseaudio/blob - src/dynarray.c
rename hashset to hashmap
[pulseaudio] / src / dynarray.c
1 #include <string.h>
2 #include <assert.h>
3 #include <stdlib.h>
4
5 #include "dynarray.h"
6
7 struct pa_dynarray {
8 void **data;
9 unsigned n_allocated, n_entries;
10 };
11
12 struct pa_dynarray* pa_dynarray_new(void) {
13 struct pa_dynarray *a;
14 a = malloc(sizeof(struct pa_dynarray));
15 assert(a);
16 a->data = NULL;
17 a->n_entries = 0;
18 a->n_allocated = 0;
19 return a;
20 }
21
22 void pa_dynarray_free(struct pa_dynarray* a, void (*func)(void *p, void *userdata), void *userdata) {
23 unsigned i;
24 assert(a);
25
26 if (func)
27 for (i = 0; i < a->n_entries; i++)
28 if (a->data[i])
29 func(a->data[i], userdata);
30
31 free(a->data);
32 free(a);
33 }
34
35 void pa_dynarray_put(struct pa_dynarray*a, unsigned i, void *p) {
36 assert(a);
37
38 if (i >= a->n_allocated) {
39 unsigned n;
40
41 if (!p)
42 return;
43
44 n = i+100;
45 a->data = realloc(a->data, sizeof(void*)*n);
46 memset(a->data+a->n_allocated, 0, sizeof(void*)*(n-a->n_allocated));
47 a->n_allocated = n;
48 }
49
50 a->data[i] = p;
51
52 if (i >= a->n_entries)
53 a->n_entries = i+1;
54 }
55
56 unsigned pa_dynarray_append(struct pa_dynarray*a, void *p) {
57 unsigned i = a->n_entries;
58 pa_dynarray_put(a, i, p);
59 return i;
60 }
61
62 void *pa_dynarray_get(struct pa_dynarray*a, unsigned i) {
63 assert(a);
64 if (i >= a->n_allocated)
65 return NULL;
66 assert(a->data);
67 return a->data[i];
68 }
69
70 unsigned pa_dynarray_ncontents(struct pa_dynarray*a) {
71 assert(a);
72 return a->n_entries;
73 }