--- libaitio/src/Attic/array.c 2011/10/31 13:53:51 1.5 +++ libaitio/src/Attic/array.c 2011/12/12 14:45:19 1.5.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: array.c,v 1.5 2011/10/31 13:53:51 misho Exp $ +* $Id: array.c,v 1.5.2.1 2011/12/12 14:45:19 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -294,6 +294,31 @@ io_arrayVacuum(array_t * __restrict arr, int fromWhere } /* + * io_arrayElem() - Always GET/PUT element into dynamic array, if not enough elements grow array + * @arr = Array + * @n = Position + * @data = Element, if set NULL GET element at position or !=NULL PUT element at position + * return: -1 error or !=-1 return element at position + */ +inline void * +io_arrayElem(array_t * __restrict arr, int n, void **data) +{ + void *dat = NULL; + + if (!arr) + return (void*) -1; + + if (n > io_arraySize(arr) && io_arrayGrow(arr, n + 1, 0)) + return (void*) -1; + + dat = io_arrayGet(arr, n); + if (data) + io_arraySet(arr, n, *data); + + return dat; +} + +/* * io_arrayPush() - Push element into dynamic array like stack manner, place at first empty position * @arr = Array * @data = Element, if set NULL return only first empty position @@ -305,6 +330,9 @@ io_arrayPush(array_t * __restrict arr, void **data) register int i; int ret = -1; + if (!arr) + return -1; + for (i = 0; i < io_arraySize(arr); i++) if (!arr->arr_data[i]) { if (data) @@ -328,6 +356,9 @@ io_arrayPop(array_t * __restrict arr, void ** __restri { register int i; int ret = -1; + + if (!arr) + return -1; for (i = io_arraySize(arr) - 1; i >= 0; i--) if (arr->arr_data[i]) {