--- libaitio/src/Attic/sarray.c 2011/08/29 12:00:57 1.4 +++ libaitio/src/Attic/sarray.c 2011/10/31 13:53:51 1.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sarray.c,v 1.4 2011/08/29 12:00:57 misho Exp $ +* $Id: sarray.c,v 1.5 2011/10/31 13:53:51 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -90,7 +90,6 @@ io_sarrDestroy(sarr_t ** __restrict parr) { register int i; - assert(parr && *parr); if (!parr || !*parr) return; @@ -107,6 +106,28 @@ io_sarrDestroy(sarr_t ** __restrict parr) } /* + * io_sarrCopy() Copy source split array to destination split array + * @dest = Destination split array, after use free with io_sarrDestroy() + * @src = Source split array + * return: -1 error; >0 count of destination split array + */ +int +io_sarrCopy(sarr_t ** __restrict dest, sarr_t * __restrict src) +{ + assert(dest); + assert(src); + if (!dest || !src) + return -1; + + *dest = io_sarrInit(io_sarrSize(src), io_sarrSeg(src)); + if (!*dest) + return -1; + + memcpy((*dest)->sarr_data, src->sarr_data, (*dest)->sarr_siz * sizeof(sarr_seg_t)); + return io_sarrSize(*dest); +} + +/* * io_sarrVacuum() - Vacuum dynamic split-order array, empty segments will be freed * @arr = Array * return: -1 error, >-1 freed segments @@ -118,7 +139,6 @@ io_sarrVacuum(sarr_t * __restrict arr) int cx = 0; sarr_seg_t seg; - assert(arr); if (!arr) return -1; @@ -150,7 +170,6 @@ io_sarrGrow(sarr_t * __restrict arr, int newNumItems) int seg, n = 0; register int i; - assert(arr); if (!arr) return -1; @@ -189,7 +208,6 @@ io_sarrGet(sarr_t * __restrict arr, u_int idx) void *ret = NULL; sarr_seg_t seg; - assert(arr); if (!arr || idx < 1 || arr->sarr_num < idx) return ret; @@ -210,7 +228,6 @@ io_sarrGet(sarr_t * __restrict arr, u_int idx) void * io_sarrGet2(sarr_t * __restrict arr, u_int idx) { - assert(arr); if (!arr || idx < 1) return NULL; if (arr->sarr_num < idx) @@ -233,7 +250,6 @@ io_sarrSet(sarr_t * __restrict arr, u_int idx, void *d sarr_seg_t seg; register int pos; - assert(arr); if (!arr || idx < 1 || arr->sarr_num < idx) return ret;