Mercurial > code
annotate parray.h @ 120:68784ea3fabb
Fix (p)array_find
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 28 Feb 2012 21:49:20 +0100 |
parents | bbe86bdb55da |
children | 5917096facb9 |
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 |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
32 #define PARRAY_AUTO 0 |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
33 #define PARRAY_FIXED 1 |
62 | 34 |
35 struct parray { | |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
36 int type; /* array type (default FIXED) */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
37 void **data; /* array of data */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
38 int length; /* number of element inside */ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
39 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
|
40 int bsize; /* block size (used when growing array) */ |
92 | 41 |
42 /* Own allocation functions */ | |
43 void * (*malloc)(size_t); | |
44 void * (*realloc)(void *, size_t); | |
62 | 45 }; |
46 | |
47 typedef void (*parray_map_fn)(void *, void *); | |
48 typedef int (*parray_cmp_fn)(void *, void *); | |
49 | |
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
|
50 int parray_init(struct parray *); |
92 | 51 void parray_set(struct parray *, const char *, ...); |
52 int parray_push(struct parray *, void *); | |
53 int parray_insert(struct parray *, void *, int); | |
54 int parray_append(struct parray *, void *); | |
55 void parray_pop(struct parray *); | |
56 void parray_unqueue(struct parray *); | |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
57 void parray_iremove(struct parray *, int); |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
58 void parray_premove(struct parray *, const void *); |
92 | 59 int parray_iswap(struct parray *, int, int); |
60 int parray_pswap(struct parray *, const void *, const void *); | |
61 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
|
62 int parray_find(const struct parray *, parray_cmp_fn, void *, void *); |
92 | 63 void parray_clear(struct parray *); |
64 void parray_free(struct parray *); | |
62 | 65 |
117
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
66 #define PARRAY_FOREACH(a, o, i) \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
67 for (i = 0, o = (a)->data[i]; \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
68 i < (a)->length; \ |
bbe86bdb55da
Update parray for a lot of things
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
69 ++i, o = (a)->data[i]) |
62 | 70 |
66 | 71 #ifdef __cplusplus |
72 } | |
73 #endif | |
74 | |
62 | 75 #endif /* _PARRAY_H_ */ |