about summary refs log tree commit diff stats
path: root/inc/resarr.h
blob: e3b853fdb8a77dcb9fb354aac3f72ee3ba7609cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef LIBSPICY_RESARR_H
#define LIBSPICY_RESARR_H

#include <stdlib.h>

typedef struct ResArr {
	size_t elemsize;
	size_t elemcount;
	size_t allocsize;
	void *array;
} stype_resarr;

#define resarr_access(arr, idx) ((idx) <= (arr).size ? (arr).array[(idx)] : NULL )

stype_resarr resarr_create(size_t elemsize);
int resarr_reserve(stype_resarr *arr, size_t elemcount);
int resarr_reserve_exact(stype_resarr *arr, size_t elemcount);
int resarr_push(stype_resarr *arr, void *elem);
int resarr_pop(stype_resarr *arr);
size_t resarr_size(stype_resarr arr);
int resarr_insert(stype_resarr *arr, void *elem, size_t before, size_t count);
int resarr_insert_single(stype_resarr *arr, void *elem, size_t before);
int resarr_delete(stype_resarr *arr, size_t start, size_t end);
int resarr_swap(stype_resarr *first, stype_resarr *second);
int resarr_clear(stype_resarr *arr);
int resarr_destroy(stype_resarr *arr);

#endif