Annotation of libelwix/inc/elwix/asarr.h, revision 1.4

1.1       misho       1: /*************************************************************************
                      2: * (C) 2013 AITNET ltd - Sofia/Bulgaria - <misho@aitnet.org>
                      3: *  by Michael Pounov <misho@elwix.org>
                      4: *
                      5: * $Author: misho $
1.4     ! misho       6: * $Id: asarr.h,v 1.3.20.1 2015/06/25 00:36:47 misho Exp $
1.1       misho       7: *
                      8: **************************************************************************
                      9: The ELWIX and AITNET software is distributed under the following
                     10: terms:
                     11: 
                     12: All of the documentation and software included in the ELWIX and AITNET
                     13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
                     14: 
1.4     ! misho      15: Copyright 2004 - 2015
1.1       misho      16:        by Michael Pounov <misho@elwix.org>.  All rights reserved.
                     17: 
                     18: Redistribution and use in source and binary forms, with or without
                     19: modification, are permitted provided that the following conditions
                     20: are met:
                     21: 1. Redistributions of source code must retain the above copyright
                     22:    notice, this list of conditions and the following disclaimer.
                     23: 2. Redistributions in binary form must reproduce the above copyright
                     24:    notice, this list of conditions and the following disclaimer in the
                     25:    documentation and/or other materials provided with the distribution.
                     26: 3. All advertising materials mentioning features or use of this software
                     27:    must display the following acknowledgement:
                     28: This product includes software developed by Michael Pounov <misho@elwix.org>
                     29: ELWIX - Embedded LightWeight unIX and its contributors.
                     30: 4. Neither the name of AITNET nor the names of its contributors
                     31:    may be used to endorse or promote products derived from this software
                     32:    without specific prior written permission.
                     33: 
                     34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
                     35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     37: ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     44: SUCH DAMAGE.
                     45: */
                     46: #ifndef __ASARR_H
                     47: #define __ASARR_H
                     48: 
                     49: 
                     50: typedef void ** sarr_seg_t;
                     51: typedef struct _tagSplitArray {
                     52:        int             sarr_num;
                     53:        int             sarr_seg;
                     54:        int             sarr_siz;
                     55:        sarr_seg_t      *sarr_data;
                     56: } sarr_t;
                     57: 
                     58: 
                     59: /*
                     60:  * sarr_Init() - Create and initialize dynamic split-order array
                     61:  *
                     62:  * @numItems = Number of Items
                     63:  * @segLen = Length of segment
                     64:  * return: NULL error, != NULL allocated memory for array
                     65:  */
                     66: sarr_t *sarr_Init(int numItems, int segLen);
                     67: /*
                     68:  * sarr_Destroy() - Free all data in dynamic split-order array and Destroy array
                     69:  *
                     70:  * @parr = Array
                     71:  * return: none
                     72:  */
                     73: void sarr_Destroy(sarr_t ** __restrict parr);
                     74: 
                     75: /*
                     76:  * sarr_Grow() - Grow/Shrink dynamic split-order array, Use with care when it shrink!!!
                     77:  *
                     78:  * @arr = Array
                     79:  * @newNumItems = Number of Items
                     80:  * return: -1 error, 0 ok
                     81:  */
                     82: int sarr_Grow(sarr_t * __restrict arr, int newNumItems);
                     83: /*
                     84:  * sarr_Vacuum() - Vacuum dynamic split-order array, empty segments will be freed
                     85:  *
                     86:  * @arr = Array
                     87:  * return: -1 error, >-1 freed segments
                     88:  */
                     89: int sarr_Vacuum(sarr_t * __restrict arr);
                     90: #define sarr_Size(_arr)                ((_arr) ? (_arr)->sarr_num : 0)
                     91: #define sarr_Seg(_arr)         (assert((_arr)), (_arr)->sarr_seg)
                     92: /*
                     93:  * sarr_Copy() Copy source split array to destination split array
                     94:  *
                     95:  * @dest = Destination split array, after use free with sarr_Destroy()
                     96:  * @src = Source split array
                     97:  * return: -1 error; >0 count of destination split array
                     98:  */
                     99: int sarr_Copy(sarr_t ** __restrict dest, sarr_t * __restrict src);
                    100: 
                    101: /*
                    102:  * sarr_Get() - Get element from dynamic split-order array
                    103:  *
                    104:  * @arr = Array
                    105:  * @idx = Index (warning 1st element is at position 1)
                    106:  * return: NULL not found, !=NULL element
                    107:  */
1.2       misho     108: void *sarr_Get(sarr_t * __restrict arr, unsigned int idx);
1.1       misho     109: /*
                    110:  * sarr_Get2() - Always get element from dynamic split-order array
                    111:  *     Function automatic grow array. Good use for Hash tables! 
                    112:  *
                    113:  * @arr = Array
                    114:  * @idx = Index (warning 1st element is at position 1)
                    115:  * return: NULL not found, !=NULL element
                    116:  */
                    117: void *sarr_Get2(sarr_t * __restrict arr, unsigned int idx);
                    118: /*
                    119:  * sarr_Set() - Set element to dynamic split-order array
                    120:  *
                    121:  * @arr = Array
                    122:  * @idx = Index (warning 1st element is at position 1)
                    123:  * @data = Value
                    124:  * return: NULL error or empty, !=NULL old value in element
                    125:  */
1.2       misho     126: void *sarr_Set(sarr_t * __restrict arr, unsigned int idx, void *data);
1.1       misho     127: #define sarr_Del(_arr, _idx)           sarr_Set((_arr), _idx, NULL)
                    128: #define sarr(_arr, _idx, _type)                ((_type) sarr_Get((_arr), _idx))
                    129: 
                    130: /*
                    131:  * sarr_sarr_2array() - Convert from split-order array to dynamic array
                    132:  *
                    133:  * @sa = split array
                    134:  * @sarrFree = after convert split array !=0 will be destroyed sarray
                    135:  * return: NULL error or != NULL new array
                    136:  */
                    137: array_t *sarr_sarr2array(sarr_t ** __restrict sa, int sarrFree);
                    138: /*
                    139:  * sarr_array2sarr() - Convert from dynamic array to split-order array
                    140:  *
                    141:  * @a = array
                    142:  * @segLen = Length of segment
                    143:  * @arrFree = after convert array !=0 will be destroyed
                    144:  * return: NULL error or != NULL new sarr
                    145:  */
                    146: sarr_t *sarr_array2sarr(array_t ** __restrict a, int segLen, int arrFree);
                    147: 
                    148: 
                    149: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>