9 #include <keymap/array.h>
11 int lk_array_init(struct lk_array *a, size_t memb, size_t size)
16 memset(a, 0, sizeof(struct lk_array));
18 a->array = calloc(size, memb);
22 if (size && !a->array)
28 int lk_array_free(struct lk_array *a)
33 memset(a, 0, sizeof(struct lk_array));
37 int lk_array_empty(struct lk_array *a)
42 memset(a->array, 0, (a->memb * a->total));
48 int lk_array_exists(struct lk_array *a, unsigned int i)
53 if (!a || i >= a->total) {
57 s = (char *)(a->array + (a->memb * i));
59 for (k = 0; k < a->memb; k++) {
68 lk_array_get(struct lk_array *a, unsigned int i)
70 if (!a || i >= a->total) {
73 return a->array + (a->memb * i);
77 lk_array_get_ptr(struct lk_array *a, unsigned int i)
80 if (!a || i >= a->total) {
88 array_resize(struct lk_array *a, unsigned int i)
94 void *tmp = realloc(a->array, a->memb * (i + 1));
98 memset(tmp + (a->memb * a->total), 0, a->memb * (i + 1 - a->total));
106 int lk_array_set(struct lk_array *a, unsigned int i, const void *e)
108 int ret = array_resize(a, i);
113 memcpy(a->array + (a->memb * i), e, a->memb);
119 int lk_array_unset(struct lk_array *a, unsigned int i)
121 if (!a || i >= a->total)
124 if (lk_array_exists(a, i)) {
125 memset(a->array + (a->memb * i), 0, a->memb);
132 int lk_array_append(struct lk_array *a, const void *e)
134 int ret = array_resize(a, a->count);
139 memcpy(a->array + (a->memb * a->count), e, a->memb);