diff DPF-Prymula-audioplugins/dpf/distrho/src/lv2/logger.h @ 3:84e66ea83026

DPF-Prymula-audioplugins-0.231015-2
author prymula <prymula76@outlook.com>
date Mon, 16 Oct 2023 21:53:34 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DPF-Prymula-audioplugins/dpf/distrho/src/lv2/logger.h	Mon Oct 16 21:53:34 2023 +0200
@@ -0,0 +1,160 @@
+/*
+  Copyright 2012-2016 David Robillard <http://drobilla.net>
+
+  Permission to use, copy, modify, and/or distribute this software for any
+  purpose with or without fee is hereby granted, provided that the above
+  copyright notice and this permission notice appear in all copies.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+/**
+   @defgroup logger Logger
+   @ingroup log
+
+   Convenience API for easy logging in plugin code.  This API provides simple
+   wrappers for logging from a plugin, which automatically fall back to
+   printing to stderr if host support is unavailabe.
+
+   @{
+*/
+
+#ifndef LV2_ATOM_LOGGER_H
+#define LV2_ATOM_LOGGER_H
+
+#include <stdio.h>
+#include <string.h>
+
+#include "log.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+   Logger convenience API state.
+*/
+typedef struct {
+	LV2_Log_Log* log;
+
+	LV2_URID Error;
+	LV2_URID Note;
+	LV2_URID Trace;
+	LV2_URID Warning;
+} LV2_Log_Logger;
+
+/**
+   Set `map` as the URI map for `logger`.
+
+   This affects the message type URIDs (Error, Warning, etc) which are passed
+   to the log's print functions.
+*/
+static inline void
+lv2_log_logger_set_map(LV2_Log_Logger* logger, LV2_URID_Map* map)
+{
+	if (map) {
+		logger->Error   = map->map(map->handle, LV2_LOG__Error);
+		logger->Note    = map->map(map->handle, LV2_LOG__Note);
+		logger->Trace   = map->map(map->handle, LV2_LOG__Trace);
+		logger->Warning = map->map(map->handle, LV2_LOG__Warning);
+	} else {
+		logger->Error = logger->Note = logger->Trace = logger->Warning = 0;
+	}
+}
+
+/**
+   Initialise `logger`.
+
+   URIs will be mapped using `map` and stored, a reference to `map` itself is
+   not held.  Both `map` and `log` may be NULL when unsupported by the host,
+   in which case the implementation will fall back to printing to stderr.
+*/
+static inline void
+lv2_log_logger_init(LV2_Log_Logger* logger,
+                    LV2_URID_Map*   map,
+                    LV2_Log_Log*    log)
+{
+	logger->log = log;
+	lv2_log_logger_set_map(logger, map);
+}
+
+/**
+   Log a message to the host, or stderr if support is unavailable.
+*/
+LV2_LOG_FUNC(3, 0)
+static inline int
+lv2_log_vprintf(LV2_Log_Logger* logger,
+                LV2_URID        type,
+                const char*     fmt,
+                va_list         args)
+{
+	if (logger && logger->log) {
+		return logger->log->vprintf(logger->log->handle, type, fmt, args);
+	} else {
+		return vfprintf(stderr, fmt, args);
+	}
+}
+
+/** Log an error via lv2_log_vprintf(). */
+LV2_LOG_FUNC(2, 3)
+static inline int
+lv2_log_error(LV2_Log_Logger* logger, const char* fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	const int ret = lv2_log_vprintf(logger, logger->Error, fmt, args);
+	va_end(args);
+	return ret;
+}
+
+/** Log a note via lv2_log_vprintf(). */
+LV2_LOG_FUNC(2, 3)
+static inline int
+lv2_log_note(LV2_Log_Logger* logger, const char* fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	const int ret = lv2_log_vprintf(logger, logger->Note, fmt, args);
+	va_end(args);
+	return ret;
+}
+
+/** Log a trace via lv2_log_vprintf(). */
+LV2_LOG_FUNC(2, 3)
+static inline int
+lv2_log_trace(LV2_Log_Logger* logger, const char* fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	const int ret = lv2_log_vprintf(logger, logger->Trace, fmt, args);
+	va_end(args);
+	return ret;
+}
+
+/** Log a warning via lv2_log_vprintf(). */
+LV2_LOG_FUNC(2, 3)
+static inline int
+lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	const int ret = lv2_log_vprintf(logger, logger->Warning, fmt, args);
+	va_end(args);
+	return ret;
+}
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif
+
+#endif  /* LV2_LOG_LOGGER_H */
+
+/**
+   @}
+*/