Mercurial > code
annotate array.h @ 134:195cdc5f4a32
Cosmetic
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 12 Mar 2012 21:49:59 +0100 |
parents | 5917096facb9 |
children | 07800b7af208 |
rev | line source |
---|---|
62 | 1 /* |
2 * array.h -- manipulate dynamic 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 _ARRAY_H_ | |
20 #define _ARRAY_H_ | |
21 | |
124
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
22 #ifdef __cplusplus |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
23 extern "C" { |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
24 #endif |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
25 |
91
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
26 #include <stdarg.h> |
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
27 |
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
28 #ifndef ARRAY_DEFAULT_BSIZE |
62 | 29 #define ARRAY_DEFAULT_BSIZE 128 |
91
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
30 #endif |
62 | 31 |
124
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
32 enum { |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
33 ARRAY_AUTO = 0, |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
34 ARRAY_FIXED = 1 |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
35 }; |
62 | 36 |
37 struct array { | |
118 | 38 int type; /* array's type (default FIXED) */ |
39 void *data; /* array of data */ | |
40 int length; /* number of element inside */ | |
41 size_t size; /* current buffer size (allocated memory) */ | |
42 size_t unit; /* unit size (sizeof the object) */ | |
43 int bsize; /* block size (used when growing array) */ | |
91
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
44 |
92 | 45 /* Own allocation functions */ |
91
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
46 void * (*malloc)(size_t); |
b3ba5f5df3b9
New style for array.c and array.h, no pointer to these object thus
David Demelier <markand@malikania.fr>
parents:
69
diff
changeset
|
47 void * (*realloc)(void *, size_t); |
62 | 48 }; |
49 | |
50 typedef void (*array_map_fn)(void *, void *); | |
51 typedef int (*array_cmp_fn)(void *, void *); | |
52 | |
134 | 53 int |
54 array_init(struct array *, size_t); | |
55 | |
56 void | |
57 array_set(struct array *, const char *, ...); | |
58 | |
59 int | |
60 array_push(struct array *, const void *); | |
61 | |
62 int | |
63 array_insert(struct array *, const void *, int); | |
64 | |
65 int | |
66 array_append(struct array *, const void *); | |
67 | |
68 void | |
69 array_pop(struct array *); | |
70 | |
71 void | |
72 array_unqueue(struct array *); | |
73 | |
74 void | |
75 array_iremove(struct array *, int); | |
62 | 76 |
134 | 77 void |
78 array_premove(struct array *, const void *); | |
79 | |
80 int | |
81 array_iswap(struct array *, int, int); | |
82 | |
83 int | |
84 array_pswap(struct array *, const void *, const void *); | |
85 | |
86 void | |
87 array_map(const struct array *, array_map_fn, void *); | |
88 | |
89 int | |
90 array_find(const struct array *, array_cmp_fn, void *, void *); | |
91 | |
92 void | |
93 array_clear(struct array *); | |
94 | |
95 void | |
96 array_free(struct array *); | |
97 | |
98 #define ARRAY_FOREACH(a, var, i) \ | |
99 for (i = 0, (var) = (a)->data; \ | |
100 i < (a)->length; \ | |
101 ++i, ++(var)) | |
62 | 102 |
124
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
103 #ifdef __cplusplus |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
104 } |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
105 #endif |
5917096facb9
Use enum and add #ifdef __cplusplus
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
106 |
62 | 107 #endif /* _ARRAY_H_ */ |