|
version 1.1, 2013/01/17 10:05:35
|
version 1.10, 2024/10/28 09:58:51
|
|
Line 12 terms:
|
Line 12 terms:
|
| All of the documentation and software included in the ELWIX and AITNET |
All of the documentation and software included in the ELWIX and AITNET |
| Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
| |
|
| Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 | Copyright 2004 - 2024 |
| by Michael Pounov <misho@elwix.org>. All rights reserved. |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
| |
|
| Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
|
Line 52 SUCH DAMAGE.
|
Line 52 SUCH DAMAGE.
|
| * @numItems = Number of Items |
* @numItems = Number of Items |
| * return: NULL error, != NULL allocated memory for array |
* return: NULL error, != NULL allocated memory for array |
| */ |
*/ |
| inline array_t * | array_t * |
| array_Init(int numItems) |
array_Init(int numItems) |
| { |
{ |
| array_t *arr = NULL; |
array_t *arr = NULL; |
|
Line 68 array_Init(int numItems)
|
Line 68 array_Init(int numItems)
|
| e_free(arr); |
e_free(arr); |
| return NULL; |
return NULL; |
| } else |
} else |
| array_Zero(arr); | memset(arr->arr_data, 0, array_Size(arr) * sizeof(intptr_t)); |
| |
|
| return arr; |
return arr; |
| } |
} |
| |
|
| /* |
/* |
| |
* array_Init2() - Initialize dynamic array |
| |
* |
| |
* @arr = Allocated array variable |
| |
* @numItems = Number of Items |
| |
* return: NULL error, != NULL allocated memory for array |
| |
*/ |
| |
array_t * |
| |
array_Init2(array_t * __restrict arr, int numItems) |
| |
{ |
| |
if (!arr) |
| |
return array_Init(numItems); |
| |
|
| |
if (array_Size(arr)) |
| |
return NULL; /* already allocated array! */ |
| |
|
| |
arr->arr_last = -1; |
| |
arr->arr_num = numItems; |
| |
arr->arr_data = e_calloc(array_Size(arr), sizeof(intptr_t)); |
| |
if (!arr->arr_data) { |
| |
e_free(arr); |
| |
return NULL; |
| |
} else |
| |
memset(arr->arr_data, 0, array_Size(arr) * sizeof(intptr_t)); |
| |
|
| |
return arr; |
| |
} |
| |
|
| |
|
| |
/* |
| * array_From() - Create and fill array from array with pointers |
* array_From() - Create and fill array from array with pointers |
| * |
* |
| * @pargv = Array with pointers |
* @pargv = Array with pointers |
|
Line 137 array_To(array_t * __restrict arr)
|
Line 166 array_To(array_t * __restrict arr)
|
| * @arr = Array |
* @arr = Array |
| * return: none |
* return: none |
| */ |
*/ |
| inline void | void |
| array_Free(array_t * __restrict arr) |
array_Free(array_t * __restrict arr) |
| { |
{ |
| register int i; |
register int i; |
|
Line 146 array_Free(array_t * __restrict arr)
|
Line 175 array_Free(array_t * __restrict arr)
|
| return; |
return; |
| |
|
| for (i = 0; i < array_Size(arr); i++) |
for (i = 0; i < array_Size(arr); i++) |
| if (arr->arr_data[i]) { | if (arr->arr_data[i]) |
| e_free(arr->arr_data[i]); |
e_free(arr->arr_data[i]); |
| arr->arr_data[i] = NULL; |
|
| } |
|
| |
|
| arr->arr_last = -1; | array_Zero(arr); |
| } |
} |
| |
|
| /* |
/* |
|
Line 160 array_Free(array_t * __restrict arr)
|
Line 187 array_Free(array_t * __restrict arr)
|
| * @parr = Array |
* @parr = Array |
| * return: none |
* return: none |
| */ |
*/ |
| inline void | void |
| array_Destroy(array_t ** __restrict parr) |
array_Destroy(array_t ** __restrict parr) |
| { |
{ |
| if (!parr || !*parr) |
if (!parr || !*parr) |
|
Line 173 array_Destroy(array_t ** __restrict parr)
|
Line 200 array_Destroy(array_t ** __restrict parr)
|
| } |
} |
| |
|
| /* |
/* |
| |
* array_Destroy2() - Free data in dynamic array |
| |
* |
| |
* @parr = Array |
| |
* return: none |
| |
*/ |
| |
void |
| |
array_Destroy2(array_t * __restrict arr) |
| |
{ |
| |
if (!arr) |
| |
return; |
| |
|
| |
if (arr->arr_data) |
| |
e_free(arr->arr_data); |
| |
memset(arr, 0, sizeof(array_t)); |
| |
} |
| |
/* |
| |
* array_Reset() - Reset array to initial state |
| |
* |
| |
* @parr = Array |
| |
* @purge = Purge all data, if <>0 then will be free entire data memory |
| |
* return: none |
| |
*/ |
| |
void |
| |
array_Reset(array_t * __restrict arr, int purge) |
| |
{ |
| |
if (!arr) |
| |
return; |
| |
|
| |
if (purge && arr->arr_data) { |
| |
e_free(arr->arr_data); |
| |
arr->arr_num = 0; |
| |
arr->arr_data = e_calloc(array_Size(arr), sizeof(intptr_t)); |
| |
} |
| |
|
| |
if (arr->arr_data) |
| |
array_Zero(arr); |
| |
} |
| |
|
| |
/* |
| * array_Len() - Get last used element in dynamic array (array Length) |
* array_Len() - Get last used element in dynamic array (array Length) |
| * |
* |
| * @arr = Array |
* @arr = Array |
| * return: -1 empty or >-1 position of last used element |
* return: -1 empty or >-1 position of last used element |
| */ |
*/ |
| inline int | int |
| array_Len(array_t * __restrict arr) |
array_Len(array_t * __restrict arr) |
| { |
{ |
| register int i; |
register int i; |
|
Line 310 array_Concat(array_t * __restrict dest, array_t * __re
|
Line 376 array_Concat(array_t * __restrict dest, array_t * __re
|
| n = array_Size(dest); |
n = array_Size(dest); |
| if (array_Grow(dest, n + array_Size(src), 0)) |
if (array_Grow(dest, n + array_Size(src), 0)) |
| return -1; |
return -1; |
| |
if (!dest->arr_data) |
| |
return -1; |
| memcpy(dest->arr_data + n, src->arr_data, array_Size(src) * sizeof(intptr_t)); |
memcpy(dest->arr_data + n, src->arr_data, array_Size(src) * sizeof(intptr_t)); |
| |
|
| dest->arr_last = array_Len(dest); |
dest->arr_last = array_Len(dest); |
|
Line 319 array_Concat(array_t * __restrict dest, array_t * __re
|
Line 387 array_Concat(array_t * __restrict dest, array_t * __re
|
| /* |
/* |
| * array_Copy() Copy source array to destination array |
* array_Copy() Copy source array to destination array |
| * |
* |
| * @dest = Destination array, after use free with io_arrayDestroy() | * @dest = Destination array, after use free with array_Destroy() |
| * @src = Source array |
* @src = Source array |
| * return: -1 error; >0 count of destination array |
* return: -1 error; >0 count of destination array |
| */ |
*/ |
|
Line 347 array_Copy(array_t ** __restrict dest, array_t * __res
|
Line 415 array_Copy(array_t ** __restrict dest, array_t * __res
|
| * @data = Element, if set NULL GET element at position or !=NULL PUT element at 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 |
* return: -1 error or !=-1 return element at position |
| */ |
*/ |
| inline void * | void * |
| array_Elem(array_t * __restrict arr, int n, void *data) |
array_Elem(array_t * __restrict arr, int n, void *data) |
| { |
{ |
| void *dat = NULL; |
void *dat = NULL; |
|
Line 357 array_Elem(array_t * __restrict arr, int n, void *data
|
Line 425 array_Elem(array_t * __restrict arr, int n, void *data
|
| |
|
| if (n >= array_Size(arr) && array_Grow(arr, n + 1, 0)) |
if (n >= array_Size(arr) && array_Grow(arr, n + 1, 0)) |
| return (void*) -1; |
return (void*) -1; |
| |
if (!arr->arr_data) |
| |
return (void*) -1; |
| |
|
| dat = array_Get(arr, n); |
dat = array_Get(arr, n); |
| if (data) |
if (data) |
|
Line 373 array_Elem(array_t * __restrict arr, int n, void *data
|
Line 443 array_Elem(array_t * __restrict arr, int n, void *data
|
| * @nogrow = Don't grow array if not enough space |
* @nogrow = Don't grow array if not enough space |
| * return: -1 not found empty position, array is full!, >-1 return position of stored element into array |
* return: -1 not found empty position, array is full!, >-1 return position of stored element into array |
| */ |
*/ |
| inline int | int |
| array_Push(array_t * __restrict arr, void **data, int nogrow) | array_Push(array_t * __restrict arr, void *data, int nogrow) |
| { |
{ |
| int ret = -1; |
int ret = -1; |
| |
|
|
Line 386 array_Push(array_t * __restrict arr, void **data, int
|
Line 456 array_Push(array_t * __restrict arr, void **data, int
|
| return -1; |
return -1; |
| if (!nogrow && ret >= array_Size(arr) && array_Grow(arr, ret + 1, 0)) |
if (!nogrow && ret >= array_Size(arr) && array_Grow(arr, ret + 1, 0)) |
| return -1; |
return -1; |
| |
if (!arr->arr_data) |
| |
return -1; |
| |
|
| ret = arr->arr_last++; | ret = ++arr->arr_last; |
| if (data) | arr->arr_data[arr->arr_last] = data; |
| arr->arr_data[arr->arr_last] = *data; | |
| |
|
| return ret; |
return ret; |
| } |
} |
|
Line 402 array_Push(array_t * __restrict arr, void **data, int
|
Line 473 array_Push(array_t * __restrict arr, void **data, int
|
| * @nodel = Don't delete after Pop element |
* @nodel = Don't delete after Pop element |
| * return: -1 not found used position, array is empty!, >-1 return element position |
* return: -1 not found used position, array is empty!, >-1 return element position |
| */ |
*/ |
| inline int | int |
| array_Pop(array_t * __restrict arr, void ** __restrict data, int nodel) |
array_Pop(array_t * __restrict arr, void ** __restrict data, int nodel) |
| { |
{ |
| int ret = -1; |
int ret = -1; |
|
Line 410 array_Pop(array_t * __restrict arr, void ** __restrict
|
Line 481 array_Pop(array_t * __restrict arr, void ** __restrict
|
| if (!arr) |
if (!arr) |
| return -1; |
return -1; |
| |
|
| ret = array_Last(arr); | if ((ret = array_Last(arr)) != -1) { |
| | if (data) |
| | *data = arr->arr_data[arr->arr_last]; |
| | if (!nodel) |
| | arr->arr_data[arr->arr_last] = NULL; |
| | arr->arr_last--; |
| | } |
| |
|
| if (data) |
|
| *data = arr->arr_data[ret]; |
|
| if (!nodel) |
|
| arr->arr_data[arr->arr_last--] = NULL; |
|
| |
|
| return ret; |
return ret; |
| } |
} |
| |
|
| /* |
/* |
| * array_Args() Parse and make array from arguments ... (input string will be modified!!! |
* array_Args() Parse and make array from arguments ... (input string will be modified!!! |
| * and output array must be free with io_arrayDestroy() after use!) | * and output array must be free with array_Destroy() after use!) |
| * |
* |
| * @psArgs = Input arguments line, after execute string is modified!!! |
* @psArgs = Input arguments line, after execute string is modified!!! |
| * @nargs = Maximum requested count of arguments from input string psArgs, if 0 all psArgs |
* @nargs = Maximum requested count of arguments from input string psArgs, if 0 all psArgs |