void zbx_vector_ ## __id ## _setdiff(zbx_vector_ ## __id ## _t *left, const zbx_vector_ ## __id ## _t *right,\
#ifndef ZABBIX_VECTORIMPL_H
#define ZABBIX_VECTORIMPL_H
#define ZBX_VECTOR_ARRAY_GROWTH_FACTOR 3/2
#define ZBX_VECTOR_IMPL(__id, __type) \
static void __vector_ ## __id ## _ensure_free_space(zbx_vector_ ## __id ## _t *vector) \
if (NULL == vector->values) \
vector->values_num = 0; \
vector->values_alloc = 32; \
vector->values = (__type *)vector->mem_malloc_func(NULL, (size_t)vector->values_alloc * \
else if (vector->values_num == vector->values_alloc) \
vector->values_alloc = MAX(vector->values_alloc + 1, vector->values_alloc * \
ZBX_VECTOR_ARRAY_GROWTH_FACTOR); \
vector->values = (__type *)vector->mem_realloc_func(vector->values, \
(size_t)vector->values_alloc * sizeof(__type)); \
void zbx_vector_ ## __id ## _create(zbx_vector_ ## __id ## _t *vector) \
zbx_vector_ ## __id ## _create_ext(vector, \
ZBX_DEFAULT_MEM_MALLOC_FUNC, \
ZBX_DEFAULT_MEM_REALLOC_FUNC, \
ZBX_DEFAULT_MEM_FREE_FUNC); \
void zbx_vector_ ## __id ## _create_ext(zbx_vector_ ## __id ## _t *vector, \
zbx_mem_malloc_func_t mem_malloc_func, \
zbx_mem_realloc_func_t mem_realloc_func, \
zbx_mem_free_func_t mem_free_func) \
vector->values_num = 0; \
vector->values_alloc = 0; \