summaryrefslogtreecommitdiffstats
path: root/src/tellico_debug.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:17:32 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-01 19:17:32 +0000
commite38d2351b83fa65c66ccde443777647ef5cb6cff (patch)
tree1897fc20e9f73a81c520a5b9f76f8ed042124883 /src/tellico_debug.h
downloadtellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.tar.gz
tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.zip
Added KDE3 version of Tellico
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/tellico@1097620 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/tellico_debug.h')
-rw-r--r--src/tellico_debug.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/tellico_debug.h b/src/tellico_debug.h
new file mode 100644
index 0000000..ea65518
--- /dev/null
+++ b/src/tellico_debug.h
@@ -0,0 +1,156 @@
+/***************************************************************************
+ copyright : (C) 2003-2006 by Robby Stephenson
+ email : robby@periapsis.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#ifndef TELLICO_DEBUG_H
+#define TELLICO_DEBUG_H
+
+// most of this is borrowed from amarok/src/debug.h
+// which is copyright Max Howell <max.howell@methylblue.com>
+// amarok is licensed under the GPL
+
+#include <kdebug.h>
+// std::clock_t
+#include <ctime>
+
+// linux has __GNUC_PREREQ, NetBSD has __GNUC_PREQ__
+#if defined(__GNUC_PREREQ) && !defined(__GNUC_PREREQ__)
+#define __GNUC_PREREQ__ __GNUC_PREREQ
+#endif
+
+#if !defined(__GNUC_PREREQ__)
+#if defined __GNUC__
+#define __GNUC_PREREQ__(x, y) \
+ ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \
+ (__GNUC__ > (x)))
+#else
+#define __GNUC_PREREQ__(x, y) 0
+#endif
+#endif
+
+# if defined __cplusplus ? __GNUC_PREREQ__ (2, 6) : __GNUC_PREREQ__ (2, 4)
+# define MY_FUNCTION __PRETTY_FUNCTION__
+# else
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+# define MY_FUNCTION __func__
+# else
+# define MY_FUNCTION __FILE__ ":" __LINE__
+# endif
+# endif
+
+// some logging
+#ifndef NDEBUG
+#define TELLICO_LOG
+#endif
+
+#ifndef NDEBUG
+#define TELLICO_DEBUG
+#endif
+
+namespace Debug {
+ typedef kndbgstream NoDebugStream;
+#ifndef TELLICO_DEBUG
+ typedef kndbgstream DebugStream;
+ static inline DebugStream log() { return DebugStream(); }
+ static inline DebugStream debug() { return DebugStream(); }
+ static inline DebugStream warning() { return DebugStream(); }
+ static inline DebugStream error() { return DebugStream(); }
+ static inline DebugStream fatal() { return DebugStream(); }
+
+#else
+ #ifndef DEBUG_PREFIX
+ #define FUNC_PREFIX ""
+ #else
+ #define FUNC_PREFIX "[" DEBUG_PREFIX "] "
+ #endif
+
+//from kdebug.h
+/*
+ enum DebugLevels {
+ KDEBUG_INFO = 0,
+ KDEBUG_WARN = 1,
+ KDEBUG_ERROR = 2,
+ KDEBUG_FATAL = 3
+ };
+*/
+
+ typedef kdbgstream DebugStream;
+#ifdef TELLICO_LOG
+ static inline DebugStream log() { return kdDebug(); }
+#else
+ static inline kndbgstream log() { return NoDebugStream(); }
+#endif
+ static inline DebugStream debug() { return kdDebug() << FUNC_PREFIX; }
+ static inline DebugStream warning() { return kdWarning() << FUNC_PREFIX << "[WARNING!] "; }
+ static inline DebugStream error() { return kdError() << FUNC_PREFIX << "[ERROR!] "; }
+ static inline DebugStream fatal() { return kdFatal() << FUNC_PREFIX; }
+
+ #undef FUNC_PREFIX
+#endif
+
+class Block {
+
+public:
+ Block(const char* label) : m_start(std::clock()), m_label(label) {
+ Debug::debug() << "BEGIN: " << label << endl;
+ }
+
+ ~Block() {
+ std::clock_t finish = std::clock();
+ const double duration = (double) (finish - m_start) / CLOCKS_PER_SEC;
+ Debug::debug() << " END: " << m_label << " - duration = " << duration << endl;
+ }
+
+private :
+ std::clock_t m_start;
+ const char* m_label;
+};
+
+}
+
+#define myDebug() Debug::debug()
+#define myWarning() Debug::warning()
+#define myLog() Debug::log()
+
+/// Standard function announcer
+#define DEBUG_FUNC_INFO myDebug() << k_funcinfo << endl;
+
+/// Announce a line
+#define DEBUG_LINE_INFO myDebug() << k_funcinfo << "Line: " << __LINE__ << endl;
+
+/// Convenience macro for making a standard Debug::Block
+#define DEBUG_BLOCK Debug::Block uniquelyNamedStackAllocatedStandardBlock( __func__ );
+
+#ifdef TELLICO_LOG
+// see http://www.gnome.org/~federico/news-2006-03.html#timeline-tools
+#define MARK do { \
+ char str[128]; \
+ ::snprintf(str, 128, "MARK: %s: %s (%d)", className(), MY_FUNCTION, __LINE__); \
+ ::access (str, F_OK); \
+ } while(false)
+#define MARK_MSG(s) do { \
+ char str[128]; \
+ ::snprintf(str, 128, "MARK: %s: %s (%d)", className(), s, __LINE__); \
+ ::access (str, F_OK); \
+ } while(false)
+#define MARK_LINE do { \
+ char str[128]; \
+ ::snprintf(str, 128, "MARK: tellico: %s (%d)", __FILE__, __LINE__); \
+ ::access (str, F_OK); \
+ } while(false)
+#else
+#define MARK
+#define MARK_MSG(s)
+#define MARK_LINE
+#endif
+
+#endif