diff options
| author | Tyge Løvset <[email protected]> | 2022-11-06 15:52:16 +0100 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-11-06 15:52:16 +0100 |
| commit | 5ec606e5dfdbaebe22717d094b58ee7f365ffd9c (patch) | |
| tree | 80bcfce7b82dd836724d793f3de3c224ac376154 /include | |
| parent | bdbdf76616281f305ffc0af7f347f3fd8eaf0016 (diff) | |
| download | STC-modified-5ec606e5dfdbaebe22717d094b58ee7f365ffd9c.tar.gz STC-modified-5ec606e5dfdbaebe22717d094b58ee7f365ffd9c.zip | |
Added c_autodrop() macro, and removed c_autobuf() which wasn't that useful (and was undocumented).
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/alt/cstr.h | 10 | ||||
| -rw-r--r-- | include/stc/carr2.h | 2 | ||||
| -rw-r--r-- | include/stc/cbits.h | 2 | ||||
| -rw-r--r-- | include/stc/ccommon.h | 7 |
4 files changed, 8 insertions, 13 deletions
diff --git a/include/stc/alt/cstr.h b/include/stc/alt/cstr.h index 17548b5d..728ce77f 100644 --- a/include/stc/alt/cstr.h +++ b/include/stc/alt/cstr.h @@ -310,11 +310,11 @@ STC_DEF void cstr_replace_at_sv(cstr* self, const size_t pos, size_t len, csview repl) { const size_t sz = cstr_size(self); if (len > sz - pos) len = sz - pos; - c_autobuf (xstr, char, repl.size) { - memcpy(xstr, repl.str, repl.size); - _cstr_internal_move(self, pos + len, pos + repl.size); - memcpy(&self->str[pos], xstr, repl.size); - } + char buf[256], *xstr = repl.size > 256 ? c_malloc(repl.size) : buf; + memcpy(xstr, repl.str, repl.size); + _cstr_internal_move(self, pos + len, pos + repl.size); + memcpy(&self->str[pos], xstr, repl.size); + if (repl.size > 256) c_free(xstr); } STC_DEF cstr diff --git a/include/stc/carr2.h b/include/stc/carr2.h index 01e4752c..fa46fd44 100644 --- a/include/stc/carr2.h +++ b/include/stc/carr2.h @@ -35,7 +35,7 @@ int main() { int w = 7, h = 5; - c_with (carr2_int image = carr2_int_new_uninit(w, h), carr2_int_drop(&image)) + c_autodrop (carr2_int, image, carr2_int_new_uninit(w, h)) { int *dat = carr2_int_data(&image); for (int i = 0; i < carr2_int_size(&image); ++i) diff --git a/include/stc/cbits.h b/include/stc/cbits.h index 6415c529..0b5c4db8 100644 --- a/include/stc/cbits.h +++ b/include/stc/cbits.h @@ -27,7 +27,7 @@ Similar to boost::dynamic_bitset / std::bitset #include "cbits.h" int main() { - c_with (cbits bset = cbits_with_size(23, true), cbits_drop(&bset)) + c_autodrop (cbits, bset, cbits_with_size(23, true)) { cbits_reset(&bset, 9); cbits_resize(&bset, 43, false); diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h index 8f1599b5..f9aff743 100644 --- a/include/stc/ccommon.h +++ b/include/stc/ccommon.h @@ -222,6 +222,7 @@ STC_INLINE char* cstrnstrn(const char *str, const char *needle, #define c_with3(declvar, pred, drop) for (declvar, **_c_i = NULL; !_c_i && (pred); ++_c_i, drop) #define c_scope(init, drop) for (int _c_i = (init, 0); !_c_i; ++_c_i, drop) #define c_defer(...) for (int _c_i = 0; !_c_i; ++_c_i, __VA_ARGS__) +#define c_autodrop(C, a, ...) for (C a = __VA_ARGS__, **_c_i = NULL; !_c_i; ++_c_i, C##_drop(&a)) #define c_auto(...) c_MACRO_OVERLOAD(c_auto, __VA_ARGS__) #define c_auto2(C, a) \ @@ -236,12 +237,6 @@ STC_INLINE char* cstrnstrn(const char *str, const char *needle, c_with2(c_expand(C a = C##_init(), b = C##_init(), c = C##_init(), d = C##_init()), \ (C##_drop(&d), C##_drop(&c), C##_drop(&b), C##_drop(&a))) -#define c_autobuf(b, type, n) c_autobuf_N(b, type, n, 256) -#define c_autobuf_N(b, type, n, BYTES) \ - for (type _c_b[((BYTES) - 1) / sizeof(type) + 1], \ - *b = (n)*sizeof *b > (BYTES) ? c_alloc_n(type, n) : _c_b \ - ; b; b != _c_b ? c_free(b) : (void)0, b = NULL) - #define c_drop(C, ...) do { c_forlist (_i, C*, {__VA_ARGS__}) C##_drop(*_i.ref); } while(0) #define c_find_if(...) c_MACRO_OVERLOAD(c_find_if, __VA_ARGS__) |
