summaryrefslogtreecommitdiffstats
path: root/3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h')
-rw-r--r--3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h352
1 files changed, 352 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h b/3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h
new file mode 100644
index 0000000..e7065b0
--- /dev/null
+++ b/3rdparty/openpgm-svn-r1085/pgm/include/impl/messages.h
@@ -0,0 +1,352 @@
+/* vim:ts=8:sts=4:sw=4:noai:noexpandtab
+ *
+ * basic message reporting.
+ *
+ * Copyright (c) 2010 Miru Limited.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#if !defined (__PGM_IMPL_FRAMEWORK_H_INSIDE__) && !defined (PGM_COMPILATION)
+# error "Only <framework.h> can be included directly."
+#endif
+
+#ifndef __PGM_IMPL_MESSAGES_H__
+#define __PGM_IMPL_MESSAGES_H__
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <pgm/types.h>
+#include <pgm/messages.h>
+
+PGM_BEGIN_DECLS
+
+PGM_GNUC_INTERNAL void pgm__log (const int, const char*, ...) PGM_GNUC_PRINTF (2, 3);
+PGM_GNUC_INTERNAL void pgm__logv (const int, const char*, va_list) PGM_GNUC_PRINTF (2, 0);
+
+#ifdef CONFIG_HAVE_ISO_VARARGS
+
+/* debug trace level only valid in debug mode */
+# ifdef PGM_DEBUG
+# define pgm_debug(...) \
+ do { \
+ if (pgm_min_log_level == PGM_LOG_LEVEL_DEBUG) \
+ pgm__log (PGM_LOG_LEVEL_DEBUG, __VA_ARGS__); \
+ } while (0)
+# else
+# define pgm_debug(...) while (0)
+# endif /* !PGM_DEBUG */
+
+# define pgm_trace(r,...) \
+ do { \
+ if (pgm_min_log_level <= PGM_LOG_LEVEL_TRACE && pgm_log_mask & (r)) \
+ pgm__log (PGM_LOG_LEVEL_TRACE, __VA_ARGS__); \
+ } while (0)
+# define pgm_minor(...) \
+ do { \
+ if (pgm_min_log_level <= PGM_LOG_LEVEL_MINOR) \
+ pgm__log (PGM_LOG_LEVEL_MINOR, __VA_ARGS__); \
+ } while (0)
+# define pgm_info(...) \
+ do { \
+ if (pgm_min_log_level <= PGM_LOG_LEVEL_NORMAL) \
+ pgm__log (PGM_LOG_LEVEL_NORMAL, __VA_ARGS__); \
+ } while (0)
+# define pgm_warn(...) \
+ do { \
+ if (pgm_min_log_level <= PGM_LOG_LEVEL_WARNING) \
+ pgm__log (PGM_LOG_LEVEL_WARNING, __VA_ARGS__); \
+ } while (0)
+# define pgm_error(...) \
+ do { \
+ if (pgm_min_log_level <= PGM_LOG_LEVEL_ERROR) \
+ pgm__log (PGM_LOG_LEVEL_ERROR, __VA_ARGS__); \
+ } while (0)
+# define pgm_fatal(...) \
+ do { \
+ pgm__log (PGM_LOG_LEVEL_FATAL, __VA_ARGS__); \
+ } while (0)
+
+#elif defined(CONFIG_HAVE_GNUC_VARARGS)
+
+# ifdef PGM_DEBUG
+# define pgm_debug(f...) \
+ do { \
+ if (pgm_min_log_level == PGM_LOG_LEVEL_DEBUG) \
+ pgm__log (PGM_LOG_LEVEL_DEBUG, f); \
+ } while (0)
+# else
+# define pgm_debug(f...) while (0)
+# endif /* !PGM_DEBUG */
+
+# define pgm_trace(r,f...) if (pgm_min_log_level <= PGM_LOG_LEVEL_TRACE && pgm_log_mask & (r)) \
+ pgm__log (PGM_LOG_LEVEL_TRACE, f)
+# define pgm_minor(f...) if (pgm_min_log_level <= PGM_LOG_LEVEL_MINOR) pgm__log (PGM_LOG_LEVEL_MINOR, f)
+# define pgm_info(f...) if (pgm_min_log_level <= PGM_LOG_LEVEL_NORMAL) pgm__log (PGM_LOG_LEVEL_NORMAL, f)
+# define pgm_warn(f...) if (pgm_min_log_level <= PGM_LOG_LEVEL_WARNING) pgm__log (PGM_LOG_LEVEL_WARNING, f)
+# define pgm_error(f...) if (pgm_min_log_level <= PGM_LOG_LEVEL_ERROR) pgm__log (PGM_LOG_LEVEL_ERROR, f)
+# define pgm_fatal(f...) pgm__log (PGM_LOG_LEVEL_FATAL, f)
+
+#else /* no varargs macros */
+
+/* declare for GCC attributes */
+static inline void pgm_debug (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+static inline void pgm_trace (const int, const char*, ...) PGM_GNUC_PRINTF (2, 3);
+static inline void pgm_minor (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+static inline void pgm_info (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+static inline void pgm_warn (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+static inline void pgm_error (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+static inline void pgm_fatal (const char*, ...) PGM_GNUC_PRINTF (1, 2);
+
+static inline void pgm_debug (const char* format, ...) {
+ if (PGM_LOG_LEVEL_DEBUG == pgm_min_log_level) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_DEBUG, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_trace (const int role, const char* format, ...) {
+ if (PGM_LOG_LEVEL_TRACE >= pgm_min_log_level && pgm_log_mask & role) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_TRACE, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_minor (const char* format, ...) {
+ if (PGM_LOG_LEVEL_MINOR >= pgm_min_log_level) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_MINOR, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_info (const char* format, ...) {
+ if (PGM_LOG_LEVEL_NORMAL >= pgm_min_log_level) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_NORMAL, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_warn (const char* format, ...) {
+ if (PGM_LOG_LEVEL_WARNING >= pgm_min_log_level) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_WARNING, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_error (const char* format, ...) {
+ if (PGM_LOG_LEVEL_ERROR >= pgm_min_log_level) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_WARNING, format, args);
+ va_end (args);
+ }
+}
+
+static inline void pgm_fatal (const char* format, ...) {
+ va_list args;
+ va_start (args, format);
+ pgm__logv (PGM_LOG_LEVEL_FATAL, format, args);
+ va_end (args);
+}
+
+#endif /* varargs */
+
+#define pgm_warn_if_reached() \
+ do { \
+ pgm_warn ("file %s: line %d (%s): code should not be reached", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (0)
+#define pgm_warn_if_fail(expr) \
+ do { \
+ if (PGM_LIKELY (expr)); \
+ else \
+ pgm_warn ("file %s: line %d (%s): runtime check failed: (%s)", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
+ } while (0)
+
+
+#ifdef PGM_DISABLE_ASSERT
+
+# define pgm_assert(expr) while (0)
+# define pgm_assert_not_reached() while (0)
+# define pgm_assert_cmpint(n1, cmp, n2) while (0)
+# define pgm_assert_cmpuint(n1, cmp, n2) while (0)
+
+#elif defined(__GNUC__)
+
+# define pgm_assert(expr) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_fatal ("file %s: line %d (%s): assertion failed: (%s)", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
+ abort (); \
+ } \
+ } while (0)
+# define pgm_assert_not_reached() \
+ do { \
+ pgm_fatal ("file %s: line %d (%s): should not be reached", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ abort (); \
+ } while (0)
+# define pgm_assert_cmpint(n1, cmp, n2) \
+ do { \
+ const int _n1 = (n1), _n2 = (n2); \
+ if (PGM_LIKELY(_n1 cmp _n2)); \
+ else { \
+ pgm_fatal ("file %s: line %d (%s): assertion failed (%s): (%u %s %u)", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #n1 " " #cmp " " #n2, _n1, #cmp, _n2); \
+ abort (); \
+ } \
+ } while (0)
+# define pgm_assert_cmpuint(n1, cmp, n2) \
+ do { \
+ const unsigned _n1 = (n1), _n2 = (n2); \
+ if (PGM_LIKELY(_n1 cmp _n2)); \
+ else { \
+ pgm_fatal ("file %s: line %d (%s): assertion failed (%s): (%u %s %u)", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #n1 " " #cmp " " #n2, _n1, #cmp, _n2); \
+ abort (); \
+ } \
+ } while (0)
+
+#else
+
+# define pgm_assert(expr) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_fatal ("file %s: line %d: assertion failed: (%s)", \
+ __FILE__, __LINE__, #expr); \
+ abort (); \
+ } \
+ } while (0)
+# define pgm_assert_not_reached() \
+ do { \
+ pgm_fatal ("file %s: line %d: assertion failed: (%s)", \
+ __FILE__, __LINE__); \
+ abort (); \
+ } while (0)
+# define pgm_assert_cmpint(n1, cmp, n2) \
+ do { \
+ const int _n1 = (n1), _n2 = (n2); \
+ if (PGM_LIKELY(_n1 cmp _n2)); \
+ else { \
+ pgm_fatal ("file %s: line %d: assertion failed (%s): (%u %s %u)", \
+ __FILE__, __LINE__, #n1 " " #cmp " " #n2, _n1, #cmp, _n2); \
+ abort (); \
+ } \
+ } while (0)
+# define pgm_assert_cmpuint(n1, cmp, n2) \
+ do { \
+ const unsigned _n1 = (n1), _n2 = (n2); \
+ if (PGM_LIKELY(_n1 cmp _n2)); \
+ else { \
+ pgm_fatal ("file %s: line %d: assertion failed (%s): (%u %s %u)", \
+ __FILE__, __LINE__, #n1 " " #cmp " " #n2, _n1, #cmp, _n2); \
+ abort (); \
+ } \
+ } while (0)
+
+#endif /* !PGM_DISABLE_ASSERT */
+
+#ifdef PGM_DISABLE_CHECKS
+
+# define pgm_return_if_fail(expr) while (0)
+# define pgm_return_val_if_fail(expr, val) while (0)
+# define pgm_return_if_reached() return
+# define pgm_return_val_if_reached(val) return (val)
+
+#elif defined(__GNUC__)
+
+# define pgm_return_if_fail(expr) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_warn ("file %s: line %d (%s): assertion `%s' failed", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
+ return; \
+ } \
+ } while (0)
+# define pgm_return_val_if_fail(expr, val) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_warn ("file %s: line %d (%s): assertion `%s' failed", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
+ return (val); \
+ } \
+ } while (0)
+# define pgm_return_if_reached() \
+ do { \
+ pgm_warn ("file %s: line %d (%s): should not be reached", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ return; \
+ } while (0)
+# define pgm_return_val_if_reached(val) \
+ do { \
+ pgm_warn ("file %s: line %d (%s): should not be reached", \
+ __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ return (val); \
+ } while (0)
+
+#else
+
+# define pgm_return_if_fail(expr) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_warn ("file %s: line %d: assertion `%s' failed", \
+ __FILE__, __LINE__, #expr); \
+ return; \
+ } \
+ } while (0)
+# define pgm_return_val_if_fail(expr, val) \
+ do { \
+ if (PGM_LIKELY(expr)); \
+ else { \
+ pgm_warn ("file %s: line %d: assertion `%s' failed", \
+ __FILE__, __LINE__, #expr); \
+ return (val); \
+ } \
+ } while (0)
+# define pgm_return_if_reached() \
+ do { \
+ pgm_warn ("file %s: line %d): should not be reached", \
+ __FILE__, __LINE__); \
+ return; \
+ } while (0)
+# define pgm_return_val_if_reached(val) \
+ do { \
+ pgm_warn ("file %s: line %d: should not be reached", \
+ __FILE__, __LINE__); \
+ return (val); \
+ } while (0)
+
+#endif /* !PGM_DISABLE_CHECKS */
+
+PGM_END_DECLS
+
+#endif /* __PGM_IMPL_MESSAGES_H__ */