summaryrefslogtreecommitdiff
path: root/src/utils.h
diff options
context:
space:
mode:
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