libref_array  0.1.3
 All Functions Typedefs Enumerations Groups Pages
ref_array.h
1 /*
2  REF ARRAY
3 
4  Header file for of the dynamic array with reference count.
5 
6  Copyright (C) Dmitri Pal <dpal@redhat.com> 2009
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU Lesser General Public License as published by
10  the Free Software Foundation; either version 3 of the License, or
11  (at your option) any later version.
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16  You should have received a copy of the GNU Lesser General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef REF_ARRAY_H
21 #define REF_ARRAY_H
22 
23 #include <stdint.h>
24 #include <stdlib.h>
25 
26 struct ref_array;
27 
28 #ifndef EOK
29 #define EOK 0
30 #endif
31 
74 typedef enum
75 {
76  REF_ARRAY_DESTROY,
77  REF_ARRAY_DELETE,
79 
80 
87 typedef void (*ref_array_fn)(void *elem,
88  ref_array_del_enum type,
89  void *data);
90 
91 
108 int ref_array_create(struct ref_array **ra,
109  size_t elem,
110  uint32_t grow_by,
111  ref_array_fn cb,
112  void *data);
113 
122 struct ref_array *ref_array_getref(struct ref_array *ra);
123 
131 void ref_array_destroy(struct ref_array *ra);
132 
149 int ref_array_append(struct ref_array *ra, void *element);
150 
175 void *ref_array_get(struct ref_array *ra, uint32_t idx, void *acptr);
176 
189 int ref_array_getlen(struct ref_array *ra, uint32_t *len);
190 
200 uint32_t ref_array_len(struct ref_array *ra);
201 
228 int ref_array_insert(struct ref_array *ra,
229  uint32_t idx,
230  void *element);
253 int ref_array_replace(struct ref_array *ra,
254  uint32_t idx,
255  void *element);
256 
257 
274 int ref_array_remove(struct ref_array *ra,
275  uint32_t idx);
276 
277 
294 int ref_array_swap(struct ref_array *ra,
295  uint32_t idx1,
296  uint32_t idx2);
297 
298 
314 void ref_array_reset(struct ref_array *ra);
315 
321 #endif
ref_array_del_enum
Enumeration of the delete modes.
Definition: ref_array.h:74
void * ref_array_get(struct ref_array *ra, uint32_t idx, void *acptr)
Get element data.
Definition: ref_array.c:213
int ref_array_swap(struct ref_array *ra, uint32_t idx1, uint32_t idx2)
Swap two elements in the array.
Definition: ref_array.c:423
void ref_array_destroy(struct ref_array *ra)
Delete the array.
Definition: ref_array.c:142
struct ref_array * ref_array_getref(struct ref_array *ra)
Get new reference to an array.
Definition: ref_array.c:121
int ref_array_getlen(struct ref_array *ra, uint32_t *len)
Get array length.
Definition: ref_array.c:244
uint32_t ref_array_len(struct ref_array *ra)
Array length.
Definition: ref_array.c:260
int ref_array_append(struct ref_array *ra, void *element)
Add new element to the array.
Definition: ref_array.c:182
void(* ref_array_fn)(void *elem, ref_array_del_enum type, void *data)
Element cleanup callback.
Definition: ref_array.h:87
void ref_array_reset(struct ref_array *ra)
Reset array.
Definition: ref_array.c:395
int ref_array_replace(struct ref_array *ra, uint32_t idx, void *element)
Replace element in the array.
Definition: ref_array.c:325
int ref_array_create(struct ref_array **ra, size_t elemsz, uint32_t grow_by, ref_array_fn cb, void *data)
Create referenced array.
Definition: ref_array.c:78
int ref_array_insert(struct ref_array *ra, uint32_t idx, void *element)
Insert a new element into the array.
Definition: ref_array.c:276
int ref_array_remove(struct ref_array *ra, uint32_t idx)
Remove element from the array.
Definition: ref_array.c:359