6 MArray
myarray_new(int size
, int incr
, int elsize
) {
7 MArray myarray
= malloc(sizeof(struct myarray
));
8 myarray
->elements
= calloc(size
, sizeof(void *));
10 myarray
->maxlen
= size
;
12 myarray
->elsize
= elsize
;
13 myarray
->cmpfunc
= NULL
;
18 void myarray_set_cmpfunc(MArray array
, int (*cmpfunc
)(void *, void *)) {
19 array
->cmpfunc
= cmpfunc
;
22 void myarray_enlarge(MArray array
) {
23 array
->maxlen
+= array
->incr
;
24 array
->elements
= realloc(array
->elements
, array
->maxlen
*sizeof(void *));
27 void _myarray_insert(MArray array
, void *element
, int index
) {
28 void *toinsert
= malloc(array
->elsize
);
29 memcpy(toinsert
, element
, array
->elsize
);
30 if (index
< 0 || index
> array
->len
) {
31 fprintf(stderr
, "Array index out of bounds %s:%d. Index: %d. Array size: %d\n", __FILE__
, __LINE__
, index
, array
->len
);
34 if (array
->len
== array
->maxlen
) {
35 myarray_enlarge(array
);
37 memmove(&array
->elements
[index
+1], &array
->elements
[index
], (array
->len
- index
)*sizeof(void *));
38 array
->elements
[index
] = toinsert
;
42 void _myarray_insert_sorted(MArray array
, void *element
) {
43 if (array
->cmpfunc
== NULL
) {
44 _myarray_insert(array
, element
, array
->len
);
47 for (i
= 0; i
< array
->len
; i
++) {
48 if (array
->cmpfunc(*(void **) element
, myarray_get(array
, void *, i
)) <= 0) {
52 _myarray_insert(array
, element
, i
);
56 void myarray_remove_index(MArray array
, int index
) {
57 free(array
->elements
[index
]);
58 memmove(&array
->elements
[index
], &array
->elements
[index
+1], (array
->len
- index
- 1)*sizeof(void *));
62 void myarray_free(MArray array
) {
64 for (i
= 0; i
< array
->len
; i
++) {
65 free(array
->elements
[i
]);
67 free(array
->elements
);
71 void myarray_reset(MArray array
) {