summaryrefslogtreecommitdiff
path: root/src/utils.h
diff options
context:
space:
mode:
authorFabrice <fabrice@schaub-dev.xyz>2026-02-11 16:24:21 +0100
committerFabrice <fabrice@schaub-dev.xyz>2026-02-11 16:24:21 +0100
commit05078f4561c45a60cd208a9d3037ad1925a7e80a (patch)
treebceeff05d3221b56f112c8ff6c3b064cb2bdacc9 /src/utils.h
parentcf3e6ac4c968b09b4e431b111162aea6041f47a6 (diff)
use err defers
Diffstat (limited to 'src/utils.h')
-rw-r--r--src/utils.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/utils.h b/src/utils.h
index deba95f..ce19428 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -88,4 +88,22 @@ struct defer_s {
~defer_s() { func(); }
};
-#define wayc_defer(func) auto WAYC_UNIQUE(_defer_) = defer_s([&]() { func; }) \ No newline at end of file
+#define wayc_defer(func) auto WAYC_UNIQUE(_defer_) = defer_s([&]() { func; })
+
+template <typename Func, typename S>
+struct defer_cond_s {
+ Func func;
+ S* signal;
+ S expected;
+
+ defer_cond_s(Func func, S* cond, S expected)
+ : func(func), signal(cond), expected(expected) {}
+
+ ~defer_cond_s() {
+ if (*signal == expected) return;
+ func();
+ }
+};
+
+#define wayc_defer_cond(func, cond, expected) \
+ auto WAYC_UNIQUE(_defer_) = defer_cond_s([&]() { func; }, &cond, expected) \ No newline at end of file