Initial commit of functionally-complete code.
[reservoir_sample] / notify.h
diff --git a/notify.h b/notify.h
new file mode 100644 (file)
index 0000000..d9411c9
--- /dev/null
+++ b/notify.h
@@ -0,0 +1,29 @@
+#ifndef NOTIFY_H_V4O5JY61
+#define NOTIFY_H_V4O5JY61
+
+/* simple common notify hook */
+
+typedef void (notify_fn_t)(unsigned int, const char *, ...);
+extern notify_fn_t *notify __attribute__((format(printf, 2, 3)));
+
+#define NOTIFY_LEVEL_FATAL 0
+#define NOTIFY_LEVEL_ERROR 1
+#define NOTIFY_LEVEL_INFO 2
+#define NOTIFY_LEVEL_VERBOSE 3
+#define NOTIFY_LEVEL_DEBUG 4
+#define NOTIFY_LEVEL_LOCK 5
+
+#define NOTIFY(__level__,__fmt__,...) do { if (notify) notify((__level__), __fmt__, ## __VA_ARGS__); } while (0)
+#define NOTIFY_FATAL(fmt,...)   NOTIFY(NOTIFY_LEVEL_FATAL,   "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_ERROR(fmt,...)   NOTIFY(NOTIFY_LEVEL_ERROR,   "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_INFO(fmt,...)    NOTIFY(NOTIFY_LEVEL_INFO,    "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_VERBOSE(fmt,...) NOTIFY(NOTIFY_LEVEL_VERBOSE, "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#ifndef NDEBUG
+#define NOTIFY_DEBUG(fmt,...)   NOTIFY(NOTIFY_LEVEL_DEBUG,   "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#define NOTIFY_DEBUG_LOCK(fmt,...) NOTIFY((NOTIFY_LEVEL_LOCK), "@%s:%d/%s/" fmt "\n", __FILE__, __LINE__, __func__, ## __VA_ARGS__)
+#else /* !NDEBUG */
+#define NOTIFY_DEBUG(fmt,...) do { } while (0)
+#define NOTIFY_DEBUG_LOCK(fmt,...) do { } while (0)
+#endif /* !NDEBUG */
+
+#endif /* NOTIFY_H_V4O5JY61 */