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

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 $
        !             6: * $Id: global.h,v 1.13 2012/08/29 13:51:29 misho Exp $
        !             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: 
        !            15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
        !            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:  */
        !           108: inline void *sarr_Get(sarr_t * __restrict arr, unsigned int idx);
        !           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:  */
        !           126: inline void *sarr_Set(sarr_t * __restrict arr, unsigned int idx, void *data);
        !           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>