summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2020-09-10 16:56:22 +0200
committerTyge Løvset <[email protected]>2020-09-10 16:56:22 +0200
commit0b3e84cac29288af49bbabf2f880cd6319f9a1f3 (patch)
treec358fa39a0e0a816004e5fc997ddffabf9112233
parent07bb3643447806fed65329ca4a0da0460bf7e7b9 (diff)
downloadSTC-modified-0b3e84cac29288af49bbabf2f880cd6319f9a1f3.tar.gz
STC-modified-0b3e84cac29288af49bbabf2f880cd6319f9a1f3.zip
Renaming in cvec and some additions in clist.
-rw-r--r--examples/inits.c19
-rw-r--r--stc/cdefs.h11
-rw-r--r--stc/clist.h49
-rw-r--r--stc/cvec.h26
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; __i<sizeof(__arr)/sizeof(__arr[0]); ++__i) \
+ __pos = clist_##X##_emplace_after(__self, __pos, __arr[__i]); \
+} while (0)
declare_clist_types(void, int);
STC_API size_t _clist_size(const clist_void* self);
@@ -150,17 +156,22 @@ STC_API size_t _clist_size(const clist_void* self);
clist_##X##_itval(clist_##X##_iter_t it) {return &it.item->value;} \
\
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); \