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>