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

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.5     ! misho       6: * $Id: asarr.h,v 1.4.96.1 2025/08/21 15:40:07 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.5     ! misho      15: Copyright 2004 - 2024
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: 
1.5     ! misho      58: #ifdef __cplusplus
        !            59: extern "C" {
        !            60: #endif
1.1       misho      61: 
                     62: /*
                     63:  * sarr_Init() - Create and initialize dynamic split-order array
                     64:  *
                     65:  * @numItems = Number of Items
                     66:  * @segLen = Length of segment
                     67:  * return: NULL error, != NULL allocated memory for array
                     68:  */
                     69: sarr_t *sarr_Init(int numItems, int segLen);
                     70: /*
                     71:  * sarr_Destroy() - Free all data in dynamic split-order array and Destroy array
                     72:  *
                     73:  * @parr = Array
                     74:  * return: none
                     75:  */
                     76: void sarr_Destroy(sarr_t ** __restrict parr);
                     77: 
                     78: /*
                     79:  * sarr_Grow() - Grow/Shrink dynamic split-order array, Use with care when it shrink!!!
                     80:  *
                     81:  * @arr = Array
                     82:  * @newNumItems = Number of Items
                     83:  * return: -1 error, 0 ok
                     84:  */
                     85: int sarr_Grow(sarr_t * __restrict arr, int newNumItems);
                     86: /*
                     87:  * sarr_Vacuum() - Vacuum dynamic split-order array, empty segments will be freed
                     88:  *
                     89:  * @arr = Array
                     90:  * return: -1 error, >-1 freed segments
                     91:  */
                     92: int sarr_Vacuum(sarr_t * __restrict arr);
                     93: #define sarr_Size(_arr)                ((_arr) ? (_arr)->sarr_num : 0)
                     94: #define sarr_Seg(_arr)         (assert((_arr)), (_arr)->sarr_seg)
                     95: /*
                     96:  * sarr_Copy() Copy source split array to destination split array
                     97:  *
                     98:  * @dest = Destination split array, after use free with sarr_Destroy()
                     99:  * @src = Source split array
                    100:  * return: -1 error; >0 count of destination split array
                    101:  */
                    102: int sarr_Copy(sarr_t ** __restrict dest, sarr_t * __restrict src);
                    103: 
                    104: /*
                    105:  * sarr_Get() - Get element from dynamic split-order array
                    106:  *
                    107:  * @arr = Array
                    108:  * @idx = Index (warning 1st element is at position 1)
                    109:  * return: NULL not found, !=NULL element
                    110:  */
1.2       misho     111: void *sarr_Get(sarr_t * __restrict arr, unsigned int idx);
1.1       misho     112: /*
                    113:  * sarr_Get2() - Always get element from dynamic split-order array
                    114:  *     Function automatic grow array. Good use for Hash tables! 
                    115:  *
                    116:  * @arr = Array
                    117:  * @idx = Index (warning 1st element is at position 1)
                    118:  * return: NULL not found, !=NULL element
                    119:  */
                    120: void *sarr_Get2(sarr_t * __restrict arr, unsigned int idx);
                    121: /*
                    122:  * sarr_Set() - Set element to dynamic split-order array
                    123:  *
                    124:  * @arr = Array
                    125:  * @idx = Index (warning 1st element is at position 1)
                    126:  * @data = Value
                    127:  * return: NULL error or empty, !=NULL old value in element
                    128:  */
1.2       misho     129: void *sarr_Set(sarr_t * __restrict arr, unsigned int idx, void *data);
1.1       misho     130: #define sarr_Del(_arr, _idx)           sarr_Set((_arr), _idx, NULL)
                    131: #define sarr(_arr, _idx, _type)                ((_type) sarr_Get((_arr), _idx))
                    132: 
                    133: /*
                    134:  * sarr_sarr_2array() - Convert from split-order array to dynamic array
                    135:  *
                    136:  * @sa = split array
                    137:  * @sarrFree = after convert split array !=0 will be destroyed sarray
                    138:  * return: NULL error or != NULL new array
                    139:  */
                    140: array_t *sarr_sarr2array(sarr_t ** __restrict sa, int sarrFree);
                    141: /*
                    142:  * sarr_array2sarr() - Convert from dynamic array to split-order array
                    143:  *
                    144:  * @a = array
                    145:  * @segLen = Length of segment
                    146:  * @arrFree = after convert array !=0 will be destroyed
                    147:  * return: NULL error or != NULL new sarr
                    148:  */
                    149: sarr_t *sarr_array2sarr(array_t ** __restrict a, int segLen, int arrFree);
                    150: 
1.5     ! misho     151: #ifdef __cplusplus
        !           152: }
        !           153: #endif
1.1       misho     154: 
                    155: #endif

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