diff options
Diffstat (limited to 'src/utils.h')
| -rw-r--r-- | src/utils.h | 20 |
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 |
