diff options
| author | Tyge Lovset <[email protected]> | 2021-10-06 07:55:07 +0200 |
|---|---|---|
| committer | Tyge Lovset <[email protected]> | 2021-10-06 07:55:07 +0200 |
| commit | 6c342ffdeee5353ecf78493c41ee23ef79cbd940 (patch) | |
| tree | 314122c524b52c1aa12fa289b020d50a64443e5e | |
| parent | bf00ed0e7023cf49cf004dd4b4b39af2b824681e (diff) | |
| download | STC-modified-6c342ffdeee5353ecf78493c41ee23ef79cbd940.tar.gz STC-modified-6c342ffdeee5353ecf78493c41ee23ef79cbd940.zip | |
Remove side-effects from i_valdel() invocations in case it's a macro func.
| -rw-r--r-- | examples/advanced.c | 2 | ||||
| -rw-r--r-- | examples/new_sptr.c | 16 | ||||
| -rw-r--r-- | include/stc/cdeq.h | 6 | ||||
| -rw-r--r-- | include/stc/csmap.h | 2 | ||||
| -rw-r--r-- | include/stc/cvec.h | 6 |
5 files changed, 18 insertions, 14 deletions
diff --git a/examples/advanced.c b/examples/advanced.c index 70aef8e8..0466e0da 100644 --- a/examples/advanced.c +++ b/examples/advanced.c @@ -47,7 +47,7 @@ static inline VikingRaw viking_toRaw(const Viking* vk) { int main() { - c_autovar (cmap_vk vikings = cmap_vk_init(), cmap_vk_del(&vikings)) { + c_auto (cmap_vk, vikings) { c_apply_pair(cmap_vk, emplace, &vikings, { {{"Einar", "Norway"}, 20}, {{"Olaf", "Denmark"}, 24}, diff --git a/examples/new_sptr.c b/examples/new_sptr.c index 25eb6702..59512803 100644 --- a/examples/new_sptr.c +++ b/examples/new_sptr.c @@ -19,11 +19,12 @@ void Person_del(Person* p) { // ...
#define i_val int
+#define i_del(x) printf("del: %d\n", *(x))
#include <stc/csptr.h>
-#define i_key_csptr csptr_int
+#define i_val_csptr csptr_int
#define i_tag iptr
-#include <stc/csset.h>
+#include <stc/cstack.h>
int main(void) {
c_autovar (csptr_person p = csptr_person_make(Person_init("John", "Smiths")), csptr_person_del(&p))
@@ -32,11 +33,14 @@ int main(void) { printf("%s %s. uses: %u\n", q.get->name.str, q.get->last.str, *q.use_count);
}
- c_auto (csset_iptr, map) {
- csset_iptr_insert(&map, csptr_int_make(2021));
- csset_iptr_insert(&map, csptr_int_make(2033));
+ c_auto (cstack_iptr, stk) {
+ cstack_iptr_push(&stk, csptr_int_make(10));
+ cstack_iptr_push(&stk, csptr_int_make(20));
+ cstack_iptr_push(&stk, csptr_int_make(30));
+ cstack_iptr_emplace(&stk, *cstack_iptr_top(&stk));
+ cstack_iptr_emplace(&stk, *cstack_iptr_begin(&stk).ref);
- c_foreach (i, csset_iptr, map)
+ c_foreach (i, cstack_iptr, stk)
printf(" %d", *i.ref->get);
puts("");
}
diff --git a/include/stc/cdeq.h b/include/stc/cdeq.h index 41f8cea8..deff8965 100644 --- a/include/stc/cdeq.h +++ b/include/stc/cdeq.h @@ -74,7 +74,7 @@ STC_INLINE void cx_memb(_copy)(Self *self, Self other) { STC_INLINE cx_value_t* cx_memb(_emplace_back)(Self* self, i_valraw raw)
{ return cx_memb(_push_back)(self, i_valfrom(raw)); }
STC_INLINE void cx_memb(_pop_front)(Self* self)
- { i_valdel(self->data++); --cdeq_rep_(self)->size; }
+ { i_valdel(self->data); ++self->data; --cdeq_rep_(self)->size; }
STC_INLINE cx_value_t* cx_memb(_back)(const Self* self)
{ return self->data + cdeq_rep_(self)->size - 1; }
STC_INLINE cx_value_t* cx_memb(_front)(const Self* self) { return self->data; }
@@ -106,7 +106,7 @@ STC_INLINE cx_value_t* cx_memb(_emplace_front)(Self* self, i_valraw raw) { }
STC_INLINE void cx_memb(_pop_back)(Self* self) {
- i_valdel(&self->data[--cdeq_rep_(self)->size]);
+ size_t i = --cdeq_rep_(self)->size; i_valdel(&self->data[i]);
}
STC_INLINE cx_value_t* cx_memb(_at)(const Self* self, size_t idx) {
@@ -337,7 +337,7 @@ cx_memb(_erase_range_p)(Self* self, cx_value_t* p1, cx_value_t* p2) { size_t n = p2 - p1;
if (n > 0) {
cx_value_t* p = p1, *end = self->data + cdeq_rep_(self)->size;
- while (p != p2) i_valdel(p++);
+ while (p != p2) i_valdel(p), ++p;
if (p1 == self->data) self->data += n;
else memmove(p1, p2, (end - p2) * sizeof(i_val));
cdeq_rep_(self)->size -= n;
diff --git a/include/stc/csmap.h b/include/stc/csmap.h index e6838e22..3d9a935a 100644 --- a/include/stc/csmap.h +++ b/include/stc/csmap.h @@ -269,7 +269,7 @@ cx_MAP_ONLY( cx_memb(_insert_or_assign)(Self* self, i_key key, i_val mapped) {
cx_result_t res = cx_memb(_insert_entry_)(self, i_keyto(&key));
if (res.inserted) res.ref->first = key;
- else {i_keydel(&key); i_valdel(&res.ref->second); }
+ else { i_keydel(&key); i_valdel(&res.ref->second); }
res.ref->second = mapped; return res;
}
diff --git a/include/stc/cvec.h b/include/stc/cvec.h index 27aae8c3..06577cde 100644 --- a/include/stc/cvec.h +++ b/include/stc/cvec.h @@ -108,7 +108,7 @@ STC_INLINE cx_value_t* cx_memb(_back)(const Self* self) STC_INLINE cx_value_t* cx_memb(_emplace_back)(Self* self, i_valraw raw)
{ return cx_memb(_push_back)(self, i_valfrom(raw)); }
STC_INLINE void cx_memb(_pop_back)(Self* self)
- { i_valdel(&self->data[--cvec_rep_(self)->size]); }
+ { size_t i = --cvec_rep_(self)->size; i_valdel(&self->data[i]); }
STC_INLINE cx_iter_t cx_memb(_begin)(const Self* self)
{ return c_make(cx_iter_t){self->data}; }
STC_INLINE cx_iter_t cx_memb(_end)(const Self* self)
@@ -270,7 +270,7 @@ cx_memb(_resize)(Self* self, size_t len, i_val null_val) { cx_memb(_reserve)(self, len);
struct cvec_rep* rep = cvec_rep_(self);
size_t i, n = rep->size;
- for (i = len; i < n; ++i) i_valdel(self->data + i);
+ for (i = len; i < n; ++i) i_valdel(&self->data[i]);
for (i = n; i < len; ++i) self->data[i] = null_val;
if (rep->cap) rep->size = len;
}
@@ -328,7 +328,7 @@ cx_memb(_erase_range_p)(Self* self, cx_value_t* p1, cx_value_t* p2) { intptr_t len = p2 - p1;
if (len > 0) {
cx_value_t* p = p1, *end = self->data + cvec_rep_(self)->size;
- while (p != p2) i_valdel(p++);
+ while (p != p2) i_valdel(p), ++p;
memmove(p1, p2, (end - p2) * sizeof(i_val));
cvec_rep_(self)->size -= len;
}
|
