#ifndef LIBSPICY_RESARR_H #define LIBSPICY_RESARR_H #include 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