aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--any_check.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/any_check.h b/any_check.h
new file mode 100644
index 0000000..5fdc268
--- /dev/null
+++ b/any_check.h
@@ -0,0 +1,37 @@
+#ifndef ANY_CHECK_INCLUDE
+#define ANY_CHECK_INCLUDE
+
+#ifndef ANY_CHECK_PANIC
+#ifdef log_panic
+#define ANY_CHECK_PANIC log_panic
+#else
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#define ANY_CHECK_PANIC(pred, ...) \
+ do { \
+ fprintf(stderr, "Check failed at %s:%d: %s\n", __FILE__, __LINE__, pred); \
+ abort(); \
+ } while (0)
+#endif
+
+#define ANY_CHECK_STRING(...) # __VA_ARGS__
+
+#define check_or(pred, ...) \
+ do { \
+ if (!(pred)) { \
+ __VA_ARGS__ ; \
+ } \
+ } while (0)
+
+#define check_panic(pred, ...) check_or(pred, ANY_CHECK_PANIC(ANY_CHECK_STRING(pred), __VA_ARGS__)
+
+#ifdef ANY_CHECK_DEBUG
+#define check_debug_or check_or
+#define check_debug_panic check_panic
+#else
+#define check_debug_or(...)
+#define check_debug_panic(...)
+#endif
+
+#endif