9 #include <keymap/array.h>
12 lk_array_init(struct lk_array *a, ssize_t memb, ssize_t size)
14 if (!a || memb < 0 || size < 0) {
19 memset(a, 0, sizeof(struct lk_array));
21 a->array = calloc((size_t) size, (size_t) memb);
25 if (size && !a->array) {
34 lk_array_free(struct lk_array *a)
41 memset(a, 0, sizeof(struct lk_array));
46 lk_array_empty(struct lk_array *a)
53 memset(a->array, 0, (size_t) (a->memb * a->total));
60 lk_array_exists(struct lk_array *a, ssize_t i)
65 if (!a || i < 0 || i >= a->total) {
70 s = (char *)(a->array + (a->memb * i));
72 for (k = 0; k < a->memb; k++) {
81 lk_array_get(struct lk_array *a, ssize_t i)
83 if (!a || i < 0 || i >= a->total) {
87 return a->array + (a->memb * i);
91 lk_array_get_ptr(struct lk_array *a, ssize_t i)
94 if (!a || i < 0 || i >= a->total) {
103 array_resize(struct lk_array *a, ssize_t i)
111 void *tmp = realloc(a->array, (size_t) (a->memb * (i + 1)));
117 memset(tmp + (a->memb * a->total), 0, (size_t) (a->memb * (i + 1 - a->total)));
126 lk_array_set(struct lk_array *a, ssize_t i, const void *e)
128 int ret = array_resize(a, i);
133 memcpy(a->array + (a->memb * i), e, (size_t) a->memb);
140 lk_array_unset(struct lk_array *a, ssize_t i)
142 if (!a || i >= a->total) {
147 if (lk_array_exists(a, i)) {
148 memset(a->array + (a->memb * i), 0, (size_t) a->memb);
156 lk_array_append(struct lk_array *a, const void *e)
158 int ret = array_resize(a, a->count);
163 memcpy(a->array + (a->memb * a->count), e, (size_t) a->memb);