--- libaitio/inc/aitio.h 2012/05/15 22:20:28 1.17.4.3 +++ libaitio/inc/aitio.h 2012/05/19 00:11:58 1.19 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.17.4.3 2012/05/15 22:20:28 misho Exp $ +* $Id: aitio.h,v 1.19 2012/05/19 00:11:58 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -173,7 +173,7 @@ typedef struct { else \ memset(__val->val.buffer, 0, _len); \ } } while (0) -#define AIT_SET_STR(_vl, _v) do { ait_val_t *__val = (_vl); assert(__val && (_v)); \ +#define AIT_SET_STR(_vl, _v) do { ait_val_t *__val = (_vl); assert(__val); \ __val->val.string = (int8_t*) strdup((_v)); \ if (__val->val.string) { \ __val->val_type = string; \ @@ -411,6 +411,14 @@ inline int io_clrVars(array_t * __restrict vars); */ inline void io_freeVars(array_t ** __restrict vars); /* + * io_getVars() - Get ait_val_t element from array and if not exists allocate it + * + * @vars = Variable array + * @n = index of variable into array + * return: NULL error or !=NULL ait_val_t element + */ +inline ait_val_t *io_getVars(array_t ** __restrict vars, int n); +/* * io_sortVars() - Sorting array with variables * * @vars = Variable array @@ -633,24 +641,20 @@ int io_arrayVacuum(array_t * __restrict arr, int fromW io_arraySize((_arr)) * sizeof(void*))) #define io_arrayGet2(_arr, _d) (assert((_arr) && (_arr)->arr_num > _d), ((_arr)->arr_data + _d)) -#define io_arrayGet(_arr, _d) (assert((_arr) && (_arr)->arr_num > _d), *((_arr)->arr_data + _d)) +#define io_arrayGet(_arr, _d) (assert((_arr) && (_arr)->arr_num > _d), (_arr)->arr_data[_d]) #define io_array(_arr, _d, _type) (assert((_arr) && (_arr)->arr_num > _d), \ - ((_type) *((_arr)->arr_data + _d))) + ((_type) (_arr)->arr_data[_d])) #define io_arraySet(_arr, _d, _ptr) do { \ assert((_arr) && (_arr)->arr_num > _d); \ if ((_arr)->arr_last < _d) \ (_arr)->arr_last = _d; \ - *((_arr)->arr_data + _d) = (void*) (_ptr); \ + (_arr)->arr_data[_d] = (void*) (_ptr); \ } while (0) #define io_arrayDel(_arr, _d, _fri) do { \ assert((_arr) && (_arr)->arr_num > _d); \ - if (_fri) \ - free(*((_arr)->arr_data + _d)); \ - *((_arr)->arr_data + _d) = NULL; \ - } while (0) -#define io_arraySyncLast(_arr) do { \ - assert((_arr)); \ - (_arr)->arr_last = io_arrayLen((_arr)); \ + if (_fri && (_arr)->arr_data[_d]) \ + free((_arr)->arr_data[_d]); \ + (_arr)->arr_data[_d] = NULL; \ } while (0) /*