Я ищу что-то вроде этого. alist.h: | Код | #include <malloc.h>
#define ALIST_DECL(t, n, capa) \ t n ## _buf[capa]; \ size_t n ## _capa = capa; \ size_t n ## _len = 0; \ t *n = n ## _buf
#define ALIST_FREE(n) do { \ if (n != n ## _buf) \ free(n); \ } while(0)
static void *_alist_checkbounds(void *p_a, void *p_buf, size_t len, size_t *p_capa, size_t newcapa, size_t elsize) { void *p_rslt = p_a; size_t newsize, oldsize; if (*p_capa < newcapa) { *p_capa *= 2; if (*p_capa < newcapa) *p_capa = newcapa; newsize = *p_capa * elsize; oldsize = len * elsize; if (p_a == p_buf) { p_rslt = malloc(newsize); memcpy(p_rslt, p_a, oldsize); } else { p_rslt = realloc(p_a, newsize); } } return p_rslt; }
#define ALIST_ADD(n, el) do { \ n = _alist_checkbounds(n, n ## _buf, n ## _len, &n ## _capa, n ## _len+1, sizeof(n[0])); \ n[n ## _len++] = el; \ } while(0) ...
|
linked list - масса, а array list не могу найти. Самому лень делать
|