From 0b3e84cac29288af49bbabf2f880cd6319f9a1f3 Mon Sep 17 00:00:00 2001 From: Tyge Løvset Date: Thu, 10 Sep 2020 16:56:22 +0200 Subject: Renaming in cvec and some additions in clist. --- examples/inits.c | 19 ++++++++++++------- stc/cdefs.h | 11 +++-------- stc/clist.h | 49 ++++++++++++++++++++++++++++++------------------- stc/cvec.h | 26 +++++++++++++------------- 4 files changed, 58 insertions(+), 47 deletions(-) diff --git a/examples/inits.c b/examples/inits.c index fa9de214..55f35bdd 100644 --- a/examples/inits.c +++ b/examples/inits.c @@ -21,10 +21,11 @@ declare_cpqueue(f, cvec_f, >); int main(void) { - + // CVEC FLOAT / PRIORITY QUEUE - c_init(cvec_f, floats, c_items(4.0f, 2.0f, 5.0f, 3.0f, 1.0f)); + cvec_f floats = cvec_ini; + c_push(&floats, cvec_f, c_items(4.0f, 2.0f, 5.0f, 3.0f, 1.0f)); c_foreach (i, cvec_f, floats) printf("%.1f ", *i.item); puts(""); @@ -45,7 +46,8 @@ int main(void) { // CMAP ID int year = 2020; - c_init(cmap_id, idnames, c_items( + cmap_id idnames = cmap_ini; + c_push(&idnames, cmap_id, c_items( {100, cstr_make("Hello")}, {110, cstr_make("World")}, {120, cstr_from("Howdy, -%d-", year)}, @@ -58,7 +60,8 @@ int main(void) { // CMAP CNT - c_init(cmap_cnt, countries, c_items( + cmap_cnt countries = cmap_ini; + c_push(&countries, cmap_cnt, c_items( {"Norway", 100}, {"Denmark", 50}, {"Iceland", 10}, @@ -80,7 +83,8 @@ int main(void) { // CVEC PAIR - c_init(cvec_ip, pairs1, c_items( + cvec_ip pairs1 = cvec_ini; + c_push(&pairs1, cvec_ip, c_items( {5, 6}, {3, 4}, {1, 2}, @@ -95,14 +99,15 @@ int main(void) { // CLIST PAIR - c_init(clist_ip, pairs2, c_items( + clist_ip pairs2 = clist_ini; + c_push(&pairs2, clist_ip, c_items( {5, 6}, {3, 4}, {1, 2}, {7, 8}, )); clist_ip_sort(&pairs2); - + c_foreach (i, clist_ip, pairs2) printf("(%d %d) ", i.item->value.x, i.item->value.y); puts(""); diff --git a/stc/cdefs.h b/stc/cdefs.h index 33178872..4f1a401b 100644 --- a/stc/cdefs.h +++ b/stc/cdefs.h @@ -84,14 +84,9 @@ ctype##_push_n(cnt_ptr, __arr, sizeof(__arr)/sizeof(__arr[0])); \ } while (0) -#define c_init(ctype, cnt, items) \ - ctype cnt = ctype##_init(); { \ - const ctype##_input_t __arr[] = { items }; \ - ctype##_push_n(&cnt, __arr, sizeof(__arr)/sizeof(__arr[0])); \ - } - -#define c_make(arr, init, n) do { \ - for (size_t __i = 0; __i < n; ++__i) (arr)[__i] = init; \ +#define c_init(type, arr, init, n) do { \ + type __init = init, *__i = arr, *__last = __i + n; \ + while (__i != __last) = *__i++ = __init; \ } while (0) #define c_destroy(ctype, ...) do { \ diff --git a/stc/clist.h b/stc/clist.h index 3c5f8a10..982a35d7 100644 --- a/stc/clist.h +++ b/stc/clist.h @@ -86,7 +86,13 @@ #define clist_ini {NULL} #define clist_empty(list) ((list).last == NULL) - +#define clist_emplace_after(X, self, pos, items) do { \ + clist_##X* __self = self; \ + clist_##X##_iter_t __pos = pos; \ + const clist_##X##_input_t __arr[] = {items}; \ + for (size_t __i=0; __ivalue;} \ \ STC_API clist_##X##_iter_t \ - clist_##X##_insert_after(clist_##X* self, clist_##X##_iter_t it, Value value); \ + clist_##X##_insert_after(clist_##X* self, clist_##X##_iter_t pos, Value value); \ STC_INLINE clist_##X##_iter_t \ - clist_##X##_emplace_after(clist_##X* self, clist_##X##_iter_t it, RawValue rawValue) { \ - return clist_##X##_insert_after(self, it, valueFromRaw(rawValue)); \ + clist_##X##_emplace_after(clist_##X* self, clist_##X##_iter_t pos, RawValue rawValue) { \ + return clist_##X##_insert_after(self, pos, valueFromRaw(rawValue)); \ } \ STC_API clist_##X##_iter_t \ - clist_##X##_erase_after(clist_##X* self, clist_##X##_iter_t it); \ + clist_##X##_erase_after(clist_##X* self, clist_##X##_iter_t pos); \ + STC_INLINE clist_##X##_iter_t \ + clist_##X##_erase_range_after(clist_##X* self, clist_##X##_iter_t pos, clist_##X##_iter_t last) { \ + while (pos.item != last.item) pos = clist_##X##_erase_after(self, pos); \ + return pos; \ + } \ \ STC_INLINE void \ - clist_##X##_splice_after(clist_##X* self, clist_##X##_iter_t it, clist_##X* other) { \ - _clist_splice_after((clist_void *) self, *(clist_void_iter_t *) &it, (clist_void *) other); \ + clist_##X##_splice_after(clist_##X* self, clist_##X##_iter_t pos, clist_##X* other) { \ + _clist_splice_after((clist_void *) self, *(clist_void_iter_t *) &pos, (clist_void *) other); \ } \ STC_INLINE void \ clist_##X##_splice_front(clist_##X* self, clist_##X* other) { \ @@ -220,15 +231,15 @@ STC_API size_t _clist_size(const clist_void* self); } \ \ STC_API clist_##X##_iter_t \ - clist_##X##_insert_after(clist_##X* self, clist_##X##_iter_t it, Value value) { \ - _clist_insert_after(self, X, it.item, value); \ - if (it.item == self->last && it.state == 0) self->last = entry; \ - it.item = entry; return it; \ + clist_##X##_insert_after(clist_##X* self, clist_##X##_iter_t pos, Value value) { \ + _clist_insert_after(self, X, pos.item, value); \ + if (pos.item == self->last && pos.state == 0) self->last = entry; \ + pos.item = entry; return pos; \ } \ STC_API clist_##X##_iter_t \ - clist_##X##_erase_after(clist_##X* self, clist_##X##_iter_t it) { \ - _clist_erase_after(self, X, it.item, valueDestroy); \ - clist_##X##_next(&it); return it; \ + clist_##X##_erase_after(clist_##X* self, clist_##X##_iter_t pos) { \ + _clist_erase_after(self, X, pos.item, valueDestroy); \ + clist_##X##_next(&pos); return pos; \ } \ \ STC_API clist_##X##_iter_t \ @@ -290,14 +301,14 @@ STC_API size_t _clist_size(const clist_void* self); STC_API void -_clist_splice_after(clist_void* self, clist_void_iter_t it, clist_void* other) { - if (!it.item) +_clist_splice_after(clist_void* self, clist_void_iter_t pos, clist_void* other) { + if (!pos.item) self->last = other->last; else if (other->last) { - clist_void_node_t *next = it.item->next; - it.item->next = other->last->next; + clist_void_node_t *next = pos.item->next; + pos.item->next = other->last->next; other->last->next = next; - if (it.item == self->last && it.state == 0) self->last = other->last; + if (pos.item == self->last && pos.state == 0) self->last = other->last; } other->last = NULL; } diff --git a/stc/cvec.h b/stc/cvec.h index 90643952..7b9d631e 100644 --- a/stc/cvec.h +++ b/stc/cvec.h @@ -84,8 +84,8 @@ cvec_##X##_insert_range(cvec_##X* self, cvec_##X##_iter_t pos, cvec_##X##_iter_t first, cvec_##X##_iter_t last); \ \ STC_INLINE cvec_##X##_iter_t \ - cvec_##X##_insert_irange(cvec_##X* self, size_t ipos, Value* pfirst, Value* plast) { \ - cvec_##X##_iter_t pos = {self->data + ipos}, first = {pfirst}, last = {plast}; \ + cvec_##X##_insert_items(cvec_##X* self, size_t idx, Value* pfirst, Value* plast) { \ + cvec_##X##_iter_t pos = {self->data + idx}, first = {pfirst}, last = {plast}; \ return cvec_##X##_insert_range(self, pos, first, last); \ } \ STC_INLINE cvec_##X##_iter_t \ @@ -94,8 +94,8 @@ return cvec_##X##_insert_range(self, pos, first, last); \ } \ STC_INLINE cvec_##X##_iter_t \ - cvec_##X##_insert_ipos(cvec_##X* self, size_t ipos, Value value) { \ - cvec_##X##_iter_t pos = {self->data + ipos}, first = {&value}, last = {&value + 1}; \ + cvec_##X##_insert_at(cvec_##X* self, size_t idx, Value value) { \ + cvec_##X##_iter_t pos = {self->data + idx}, first = {&value}, last = {&value + 1}; \ return cvec_##X##_insert_range(self, pos, first, last); \ } \ STC_INLINE cvec_##X##_iter_t \ @@ -103,8 +103,8 @@ cvec_##X##_insert(self, pos, valueFromRaw(rawValue)); \ } \ STC_INLINE cvec_##X##_iter_t \ - cvec_##X##_emplace_ipos(cvec_##X* self, size_t ipos, RawValue rawValue) { \ - cvec_##X##_insert_ipos(self, ipos, valueFromRaw(rawValue)); \ + cvec_##X##_emplace_at(cvec_##X* self, size_t idx, RawValue rawValue) { \ + cvec_##X##_insert_at(self, idx, valueFromRaw(rawValue)); \ } \ \ STC_API cvec_##X##_iter_t \ @@ -116,12 +116,12 @@ return cvec_##X##_erase_range(self, pos, next); \ } \ STC_INLINE cvec_##X##_iter_t \ - cvec_##X##_erase_ipos(cvec_##X* self, size_t ipos) { \ - cvec_##X##_iter_t first = {self->data + ipos}, last = {first.item + 1}; \ + cvec_##X##_erase_at(cvec_##X* self, size_t idx) { \ + cvec_##X##_iter_t first = {self->data + idx}, last = {first.item + 1}; \ return cvec_##X##_erase_range(self, first, last); \ } \ STC_INLINE cvec_##X##_iter_t \ - cvec_##X##_erase_irange(cvec_##X* self, size_t ifirst, size_t ilast) { \ + cvec_##X##_erase_items(cvec_##X* self, size_t ifirst, size_t ilast) { \ cvec_##X##_iter_t first = {self->data + ifirst}, last = {self->data + ilast}; \ return cvec_##X##_erase_range(self, first, last); \ } \ @@ -240,12 +240,12 @@ STC_API cvec_##X##_iter_t \ cvec_##X##_insert_range(cvec_##X* self, cvec_##X##_iter_t pos, cvec_##X##_iter_t first, cvec_##X##_iter_t last) { \ enum {max_buf = c_max_alloca / sizeof(Value) + 1}; Value buf[max_buf]; \ - size_t len = last.item - first.item, ipos = pos.item - self->data, size = cvec_size(*self); \ - Value* xbuf = (Value *) memcpy(len > max_buf ? c_new_n(Value, len) : buf, first.item, len); \ + size_t len = last.item - first.item, idx = pos.item - self->data, size = cvec_size(*self); \ + Value* xbuf = (Value *) memcpy(len > max_buf ? c_new_n(Value, len) : buf, first.item, len * sizeof(Value)); \ if (size + len > cvec_capacity(*self)) \ cvec_##X##_reserve(self, 4 + (size + len) * 3 / 2); \ - pos.item = self->data + ipos; \ - memmove(pos.item + len, pos.item, (size - ipos) * sizeof(Value)); \ + pos.item = self->data + idx; \ + memmove(pos.item + len, pos.item, (size - idx) * sizeof(Value)); \ memcpy(pos.item, xbuf, len * sizeof(Value)); \ _cvec_size(self) += len; \ if (len > max_buf) free(xbuf); \ -- cgit v1.2.3