summaryrefslogtreecommitdiff
path: root/Sockets/Debug.h
diff options
context:
space:
mode:
authorOthmar Gsenger <otti@anytun.org>2007-12-03 10:51:16 +0000
committerOthmar Gsenger <otti@anytun.org>2007-12-03 10:51:16 +0000
commitfa4f4a8a50c4bab3a3e247fb7186a7f9a00dfc11 (patch)
tree5ff84c3c71e6d3dadbaf9e13d3fdd84ab2691ca6 /Sockets/Debug.h
parentadded ssl tools (diff)
Added syncsocket
Diffstat (limited to 'Sockets/Debug.h')
-rw-r--r--Sockets/Debug.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/Sockets/Debug.h b/Sockets/Debug.h
new file mode 100644
index 0000000..9bc06b9
--- /dev/null
+++ b/Sockets/Debug.h
@@ -0,0 +1,75 @@
+#ifndef _SOCKETS_Debug_H
+#define _SOCKETS_Debug_H
+
+#include "sockets-config.h"
+#include <string>
+#include "Utility.h"
+#include <map>
+
+
+#ifdef SOCKETS_NAMESPACE
+namespace SOCKETS_NAMESPACE {
+#endif
+
+
+class Debug
+{
+static const char *colors[];
+public:
+ class endl {
+ public:
+ endl() {}
+ virtual ~endl() {}
+ };
+
+public:
+ Debug() {}
+ Debug(const std::string& x) : m_id(0), m_text(x) {
+ fprintf(stderr, "%s", colors[Utility::ThreadID() % 16 + 1]);
+ for (int i = 0; i < m_level[Utility::ThreadID()]; i++)
+ fprintf(stderr, " ");
+ fprintf(stderr, "%s%s\n", x.c_str(), colors[0]);
+ m_level[Utility::ThreadID()]++;
+ }
+ Debug(int id, const std::string& x) : m_id(id), m_text(x) {
+ fprintf(stderr, "%s", colors[Utility::ThreadID() % 16 + 1]);
+ for (int i = 0; i < m_level[Utility::ThreadID()]; i++)
+ fprintf(stderr, " ");
+ fprintf(stderr, "%d> %s%s\n", m_id, x.c_str(), colors[0]);
+ m_level[Utility::ThreadID()]++;
+ }
+ ~Debug() {
+ if (!m_text.empty())
+ {
+ if (m_level[Utility::ThreadID()])
+ m_level[Utility::ThreadID()]--;
+ fprintf(stderr, "%s", colors[Utility::ThreadID() % 16 + 1]);
+ for (int i = 0; i < m_level[Utility::ThreadID()]; i++)
+ fprintf(stderr, " ");
+ if (m_id)
+ fprintf(stderr, "%d> /%s%s\n", m_id, m_text.c_str(), colors[0]);
+ else
+ fprintf(stderr, "/%s%s\n", m_text.c_str(), colors[0]);
+ fflush(stderr);
+ }
+ }
+static void Print(const char *format, ...);
+
+ Debug& operator<<(const std::string& );
+ Debug& operator<<(long);
+ Debug& operator<<(endl);
+
+private:
+ int m_id;
+ std::string m_text;
+static std::map<unsigned long, int> m_level;
+ std::string m_line;
+};
+
+
+#ifdef SOCKETS_NAMESPACE
+} // namespace SOCKETS_NAMESPACE {
+#endif
+
+#endif // _SOCKETS_Debug_H
+