MARR lib started
This commit is contained in:
parent
23d7e86c2c
commit
cf6b35e7f8
43
src/include/marr.h
Normal file
43
src/include/marr.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#ifndef _H_MARR
|
||||||
|
#define _H_MARR
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define MARR_DEFAULT_CAP 32
|
||||||
|
|
||||||
|
typedef struct marr_da_s {
|
||||||
|
void* data;
|
||||||
|
size_t cap;
|
||||||
|
size_t len;
|
||||||
|
size_t stride;
|
||||||
|
} marr_da_t;
|
||||||
|
|
||||||
|
marr_da_t* _marr_new(size_t stride, size_t cap);
|
||||||
|
int _marr_push_front(marr_da_t* da, void* val);
|
||||||
|
int _marr_push_back(marr_da_t* da, void* val);
|
||||||
|
int _marr_pop_front(marr_da_t* da, void* dest);
|
||||||
|
int _marr_pop_back(marr_da_t* da, void* dest);
|
||||||
|
int _marr_append(marr_da_t* to, marr_da_t* from);
|
||||||
|
int _marr_resize(marr_da_t* da, size_t new_cap);
|
||||||
|
int _marr_remove(marr_da_t* da, size_t idx);
|
||||||
|
bool _marr_contains(marr_da_t* da, void* val);
|
||||||
|
bool _marr_map(marr_da_t* da, marr_da_t* da_out, bool (*func)(void* item, void* data), void* data);
|
||||||
|
|
||||||
|
#define marr_new(type) (type*)_marr_new(sizeof(type), MARR_DEFAULT_CAP);
|
||||||
|
#define marr_new_with_capacity(type, cap) (type*)_marr_new(sizeof(type), cap);
|
||||||
|
#define marr_push_front(da, val) _marr_push_front((marr_da_t)da, val);
|
||||||
|
#define marr_push_back(da, val) _marr_push_back((marr_da_t)da, val);
|
||||||
|
#define marr_pop_front(da, dest) _marr_pop_front((marr_da_t)da, dest);
|
||||||
|
#define marr_pop_back(da, dest) _marr_pop_back((marr_da_t)da, dest);
|
||||||
|
#define marr_append(to, from) _marr_append((marr_da_t)to, (marr_da_t)from);
|
||||||
|
#define marr_resize(da, new_size) _marr_resize((marr_da_t)da, new_size);
|
||||||
|
#define marr_remove(da, idx) _marr_remove((marr_da_t)da, idx);
|
||||||
|
#define marr_contains(da, val) _marr_contains((marr_da_t)da, val);
|
||||||
|
#define marr_map(da, da_out, fnc, data) _marr_map((marr_da_t)da, (marr_da_t)da_out, fnc, data);
|
||||||
|
|
||||||
|
#define marr_len(da) (((marr_da_t*)(da))->len)
|
||||||
|
#define marr_cap(da) (((marr_da_t*)(da))->cap)
|
||||||
|
#define marr_stride(da) (((marr_da_t*)(da))->stride)
|
||||||
|
#define marr_as_ptr(type, da) (type*)(((marr_da_t*)(da))->data)
|
||||||
|
|
||||||
|
#endif // !_H_MARR
|
35
src/marr.c
Normal file
35
src/marr.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include <marr.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
marr_da_t* _marr_new(size_t stride, size_t cap) {
|
||||||
|
marr_da_t* da = malloc(sizeof(marr_da_t));
|
||||||
|
da->data = malloc(stride * cap);
|
||||||
|
if (!da->data) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
da->cap = cap;
|
||||||
|
da->len = 0;
|
||||||
|
return da;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _marr_push_front(marr_da_t* da, void* val) {}
|
||||||
|
|
||||||
|
int _marr_push_back(marr_da_t* da, void* val);
|
||||||
|
int _marr_pop_front(marr_da_t* da, void* dest);
|
||||||
|
int _marr_pop_back(marr_da_t* da, void* dest);
|
||||||
|
int _marr_append(marr_da_t* to, marr_da_t* from);
|
||||||
|
|
||||||
|
int _marr_resize(marr_da_t* da, size_t new_cap) {
|
||||||
|
if (new_cap <= da->cap) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
da->data = realloc(da->data, new_cap * da->stride);
|
||||||
|
if (!da->data) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _marr_remove(marr_da_t* da, size_t idx);
|
||||||
|
bool _marr_contains(marr_da_t* da, void* val);
|
||||||
|
bool _marr_map(marr_da_t* da, marr_da_t* da_out, bool (*func)(void* item, void* data), void* data);
|
Loading…
Reference in New Issue
Block a user