Mercurial > code
annotate parray.h @ 133:d85dd98cb49d
Add attributes
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 12 Mar 2012 21:46:45 +0100 |
parents | 5917096facb9 |
children | 195cdc5f4a32 |
rev | line source |
---|---|
62 | 1 /* |
2 * array.h -- manipulate dynamic pointer arrays | |
3 * | |
98 | 4 * Copyright (c) 2011, 2012, David Demelier <markand@malikania.fr> |
62 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 #ifndef _PARRAY_H_ | |
20 #define _PARRAY_H_ | |
21 | |
66 | 22 #ifdef __cplusplus |
23 extern "C" { | |
24 #endif | |
25 | |
92 | 26 #include <stdarg.h> |
27 | |
28 #ifndef PARRAY_DEFAULT_BSIZE | |
62 | 29 #define PARRAY_DEFAULT_BSIZE 128 |
92 | 30 #endif |
62 | 31 |
124
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
32 enum { |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
33 PARRAY_AUTO = 0, |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
34 PARRAY_FIXED = 1 |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
117
diff
changeset
|
35 }; |
62 | 36 |
37 struct parray { | |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
38 int type; /* array type (default FIXED) */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
39 void **data; /* array of data */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
40 int length; /* number of element inside */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
41 size_t size; /* current buffer size (allocated memory) */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
42 int bsize; /* block size (used when growing array) */ |
92 | 43 |
44 /* Own allocation functions */ | |
45 void * (*malloc)(size_t); | |
46 void * (*realloc)(void *, size_t); | |
62 | 47 }; |
48 | |
49 typedef void (*parray_map_fn)(void *, void *); | |
50 typedef int (*parray_cmp_fn)(void *, void *); | |
51 | |
93
9ebea85c7765
Use pointer instead of copying variable in ARRAY_FOREACH, then you can modify it
David Demelier <markand@malikania.fr>
parents:
92
diff
changeset
|
52 int parray_init(struct parray *); |
92 | 53 void parray_set(struct parray *, const char *, ...); |
54 int parray_push(struct parray *, void *); | |
55 int parray_insert(struct parray *, void *, int); | |
56 int parray_append(struct parray *, void *); | |
57 void parray_pop(struct parray *); | |
58 void parray_unqueue(struct parray *); | |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
59 void parray_iremove(struct parray *, int); |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
60 void parray_premove(struct parray *, const void *); |
92 | 61 int parray_iswap(struct parray *, int, int); |
62 int parray_pswap(struct parray *, const void *, const void *); | |
63 void parray_map(const struct parray *, parray_map_fn, void *); | |
108
d5ea329ba28e
Use same semantic as array.c for _find
David Demelier <markand@malikania.fr>
parents:
98
diff
changeset
|
64 int parray_find(const struct parray *, parray_cmp_fn, void *, void *); |
92 | 65 void parray_clear(struct parray *); |
66 void parray_free(struct parray *); | |
62 | 67 |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
68 #define PARRAY_FOREACH(a, o, i) \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
69 for (i = 0, o = (a)->data[i]; \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
70 i < (a)->length; \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
71 ++i, o = (a)->data[i]) |
62 | 72 |
66 | 73 #ifdef __cplusplus |
74 } | |
75 #endif | |
76 | |
62 | 77 #endif /* _PARRAY_H_ */ |