Макрос разворачивает нек-рые ф-ции для типа arr,
предполагается хранить массив типа "long" (stl/boost/etc - не трогаем).Подскажите пожалуйста, есть ли недочеты/ошибки и т.д. ?
Kод:
#define SZ_CONST 16
typedef struct arr
{
size_t a; /* allocated len */
size_t len; /* current len */
ptrdiff_t *ptr; /* */
} arr;
int realloc_redef(
char **d,
size_t c,
size_t n)
{
char *t;
if (!(t = (char *) malloc((size_t)(n)))) return 0;
memcpy((void *)(t),(const void *)(*d),(size_t)(c));
free((void *)(*d));
*d = t;
return 1;
}
int arr_ready(
arr *x,
size_t n)
{
size_t i;
if (x->ptr) {
i = x->a;
if (n > i) {
x->a = SZ_CONST + n + 2;
if (realloc_redef((char **)&x->ptr,i * sizeof(long),x->a * sizeof(long)))
return 1;
x->a = i;
return 0;
}
return 1;
}
x->a = n;
x->len = 0;
return !!(x->ptr = (ptrdiff_t *) malloc((size_t)((n * sizeof(long)))));
}
int arr_copya(
arr *dst,
size_t cnt,
long *src)
{
if (!arr_ready(dst,cnt + 1))
return 0;
memcpy((void *)(dst->ptr),(const void *)(src),(size_t)(sizeof(long) * cnt));
dst->len = cnt;
dst->ptr[dst->len] = 0;
return 1;
}