summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-11-06 15:52:16 +0100
committerTyge Løvset <[email protected]>2022-11-06 15:52:16 +0100
commit5ec606e5dfdbaebe22717d094b58ee7f365ffd9c (patch)
tree80bcfce7b82dd836724d793f3de3c224ac376154 /include
parentbdbdf76616281f305ffc0af7f347f3fd8eaf0016 (diff)
downloadSTC-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.h10
-rw-r--r--include/stc/carr2.h2
-rw-r--r--include/stc/cbits.h2
-rw-r--r--include/stc/ccommon.h7
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__)