]> Dogcows Code - chaz/yoink/blobdiff - src/stlplus/portability/debug.cpp
import stlplus 3.7
[chaz/yoink] / src / stlplus / portability / debug.cpp
index d5b153489c086b4613863e1eafaba83c9648542f..a249844de0d18f03f50e3a233b80511f3aa337ac 100644 (file)
-////////////////////////////////////////////////////////////////////////////////
-
-//   Author:    Andy Rushton
-//   Copyright: (c) Southampton University 1999-2004
-//              (c) Andy Rushton           2004-2009
-//   License:   BSD License, see ../docs/license.html
-
-////////////////////////////////////////////////////////////////////////////////
-
-#include "debug.hpp"
-#include "dprintf.hpp"
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-////////////////////////////////////////////////////////////////////////////////
-
-namespace stlplus
-{
-
-  ////////////////////////////////////////////////////////////////////////////////
-
-  static std::string format(const char* file, int line, const char* function, const char* message)
-  {
-    return dformat("%s:%d:%s: assertion failed: %s",
-                   (file ? file : ""),
-                   line,
-                   (function ? function : "") ,
-                   (message ? message : ""));
-  }
-
-  ////////////////////////////////////////////////////////////////////////////////
-
-  assert_failed::assert_failed(const char* file, int line, const char* function, const char* message)
-    throw() : 
-    std::logic_error(format(file, line, function, message))
-  {
-  }
-
-  assert_failed::~assert_failed(void) throw()
-  {
-  }
-
-  ////////////////////////////////////////////////////////////////////////////////
-
-  static unsigned _debug_depth = 0;
-  static bool _debug_global = false;
-  static bool _debug_set = false;
-  static bool _debug_recurse = false;
-  static bool _debug_read = false;
-  static char* _debug_match = 0;
-  static const debug_trace* debug_last = 0;
-
-  void debug_global(const char* file, int line, const char* function, bool state)
-  {
-    _debug_global = state;
-    fprintf(stderr, "%s:%i:[%i]%s ", file, line, _debug_depth, function ? function : "");
-    fprintf(stderr, "debug global : %s\n", _debug_global ? "on" : "off");
-  }
-
-  void debug_assert_fail(const char* file, int line, const char* function, const char* test) 
-    throw(assert_failed)
-  {
-    fprintf(stderr, "%s:%i:[%i]%s: assertion failed: %s\n", 
-            file, line, _debug_depth, function ? function : "", test);
-    if (debug_last) debug_last->stackdump();
-    throw assert_failed(file, line, function, test);
-  }
-
-  ////////////////////////////////////////////////////////////////////////////////
-
-  debug_trace::debug_trace(const char* f, int l, const char* fn) :
-    m_file(f), m_line(l), m_function(fn ? fn : ""), 
-    m_depth(0), m_last(debug_last), m_dbg(false), m_old(false)
-  {
-    if (!_debug_read)
-    {
-      _debug_match = getenv("DEBUG");
-      _debug_recurse = getenv("DEBUG_LOCAL") == 0;
-      _debug_read = true;
-    }
-    m_dbg = _debug_set || (_debug_match && (!_debug_match[0] || (strcmp(_debug_match, m_file) == 0)));
-    m_old = _debug_set;
-    if (m_dbg && _debug_recurse)
-      _debug_set = true;
-    m_depth = ++_debug_depth;
-    debug_last = this;
-    if (debug()) report(std::string("entering ") + (m_function ? m_function : ""));
-  }
-
-  debug_trace::~debug_trace(void)
-  {
-    if (debug()) report("leaving");
-    --_debug_depth;
-    _debug_set = m_old;
-    debug_last = m_last;
-  }
-
-  const char* debug_trace::file(void) const
-  {
-    return m_file;
-  }
-
-  int debug_trace::line(void) const
-  {
-    return m_line;
-  }
-
-  bool debug_trace::debug(void) const
-  {
-    return m_dbg || _debug_global;
-  }
-
-  void debug_trace::debug_on(int l, bool recurse)
-  {
-    m_dbg = true;
-    m_old = _debug_set;
-    if (recurse)
-      _debug_set = true;
-    report(l, std::string("debug on") + (recurse ? " recursive" : ""));
-  }
-
-  void debug_trace::debug_off(int l)
-  {
-    if (debug()) report(l, std::string("debug off"));
-    m_dbg = false;
-    _debug_set = m_old;
-  }
-
-  void debug_trace::prefix(int l) const
-  {
-    fprintf(stderr, "%s:%i:[%i]%s ", m_file, l, m_depth, m_function ? m_function : "");
-  }
-
-  void debug_trace::do_report(int l, const std::string& message) const
-  {
-    prefix(l);
-    fprintf(stderr, "%s\n", message.c_str());
-    fflush(stderr);
-  }
-
-  void debug_trace::do_report(const std::string& message) const
-  {
-    do_report(m_line, message);
-  }
-
-  void debug_trace::report(int l, const std::string& message) const
-  {
-    do_report(l, message);
-  }
-
-  void debug_trace::report(const std::string& message) const
-  {
-    report(m_line, message);
-  }
-
-  void debug_trace::error(int l, const std::string& message) const
-  {
-    do_report(l, "ERROR: " + message);
-  }
-
-  void debug_trace::error(const std::string& message) const
-  {
-    error(m_line, message);
-  }
-
-  void debug_trace::stackdump(int l, const std::string& message) const
-  {
-    do_report(l, message);
-    stackdump();
-  }
-
-  void debug_trace::stackdump(const std::string& message) const
-  {
-    stackdump(m_line, message);
-  }
-
-  void debug_trace::stackdump(void) const
-  {
-    for (const debug_trace* item = this; item; item = item->m_last)
-      item->do_report("...called from here");
-  }
-
-
-  ////////////////////////////////////////////////////////////////////////////////
-
-} // end namespace stlplus
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+//   Author:    Andy Rushton\r
+//   Copyright: (c) Southampton University 1999-2004\r
+//              (c) Andy Rushton           2004 onwards\r
+//   License:   BSD License, see ../docs/license.html\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+#include "debug.hpp"\r
+#include "dprintf.hpp"\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+namespace stlplus\r
+{\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+  static std::string format(const char* file, int line, const char* function, const char* message)\r
+  {\r
+    return dformat("%s:%d:%s: assertion failed: %s",\r
+                   (file ? file : ""),\r
+                   line,\r
+                   (function ? function : "") ,\r
+                   (message ? message : ""));\r
+  }\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+  assert_failed::assert_failed(const char* file, int line, const char* function, const char* message)\r
+    throw() : \r
+    std::logic_error(format(file, line, function, message))\r
+  {\r
+  }\r
+\r
+  assert_failed::~assert_failed(void) throw()\r
+  {\r
+  }\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+  static unsigned _debug_depth = 0;\r
+  static bool _debug_global = false;\r
+  static bool _debug_set = false;\r
+  static bool _debug_recurse = false;\r
+  static bool _debug_read = false;\r
+  static char* _debug_match = 0;\r
+  static const debug_trace* debug_last = 0;\r
+\r
+  void debug_global(const char* file, int line, const char* function, bool state)\r
+  {\r
+    _debug_global = state;\r
+    fprintf(stderr, "%s:%i:[%i]%s ", file, line, _debug_depth, function ? function : "");\r
+    fprintf(stderr, "debug global : %s\n", _debug_global ? "on" : "off");\r
+  }\r
+\r
+  void debug_assert_fail(const char* file, int line, const char* function, const char* test) \r
+    throw(assert_failed)\r
+  {\r
+    fprintf(stderr, "%s:%i:[%i]%s: assertion failed: %s\n", \r
+            file, line, _debug_depth, function ? function : "", test);\r
+    if (debug_last) debug_last->stackdump();\r
+    throw assert_failed(file, line, function, test);\r
+  }\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+  debug_trace::debug_trace(const char* f, int l, const char* fn) :\r
+    m_file(f), m_line(l), m_function(fn ? fn : ""), \r
+    m_depth(0), m_last(debug_last), m_dbg(false), m_old(false)\r
+  {\r
+    if (!_debug_read)\r
+    {\r
+      _debug_match = getenv("DEBUG");\r
+      _debug_recurse = getenv("DEBUG_LOCAL") == 0;\r
+      _debug_read = true;\r
+    }\r
+    m_dbg = _debug_set || (_debug_match && (!_debug_match[0] || (strcmp(_debug_match, m_file) == 0)));\r
+    m_old = _debug_set;\r
+    if (m_dbg && _debug_recurse)\r
+      _debug_set = true;\r
+    m_depth = ++_debug_depth;\r
+    debug_last = this;\r
+    if (debug()) report(std::string("entering ") + (m_function ? m_function : ""));\r
+  }\r
+\r
+  debug_trace::~debug_trace(void)\r
+  {\r
+    if (debug()) report("leaving");\r
+    --_debug_depth;\r
+    _debug_set = m_old;\r
+    debug_last = m_last;\r
+  }\r
+\r
+  const char* debug_trace::file(void) const\r
+  {\r
+    return m_file;\r
+  }\r
+\r
+  int debug_trace::line(void) const\r
+  {\r
+    return m_line;\r
+  }\r
+\r
+  bool debug_trace::debug(void) const\r
+  {\r
+    return m_dbg || _debug_global;\r
+  }\r
+\r
+  void debug_trace::debug_on(int l, bool recurse)\r
+  {\r
+    m_dbg = true;\r
+    m_old = _debug_set;\r
+    if (recurse)\r
+      _debug_set = true;\r
+    report(l, std::string("debug on") + (recurse ? " recursive" : ""));\r
+  }\r
+\r
+  void debug_trace::debug_off(int l)\r
+  {\r
+    if (debug()) report(l, std::string("debug off"));\r
+    m_dbg = false;\r
+    _debug_set = m_old;\r
+  }\r
+\r
+  void debug_trace::prefix(int l) const\r
+  {\r
+    fprintf(stderr, "%s:%i:[%i]%s ", m_file, l, m_depth, m_function ? m_function : "");\r
+  }\r
+\r
+  void debug_trace::do_report(int l, const std::string& message) const\r
+  {\r
+    prefix(l);\r
+    fprintf(stderr, "%s\n", message.c_str());\r
+    fflush(stderr);\r
+  }\r
+\r
+  void debug_trace::do_report(const std::string& message) const\r
+  {\r
+    do_report(m_line, message);\r
+  }\r
+\r
+  void debug_trace::report(int l, const std::string& message) const\r
+  {\r
+    do_report(l, message);\r
+  }\r
+\r
+  void debug_trace::report(const std::string& message) const\r
+  {\r
+    report(m_line, message);\r
+  }\r
+\r
+  void debug_trace::error(int l, const std::string& message) const\r
+  {\r
+    do_report(l, "ERROR: " + message);\r
+  }\r
+\r
+  void debug_trace::error(const std::string& message) const\r
+  {\r
+    error(m_line, message);\r
+  }\r
+\r
+  void debug_trace::stackdump(int l, const std::string& message) const\r
+  {\r
+    do_report(l, message);\r
+    stackdump();\r
+  }\r
+\r
+  void debug_trace::stackdump(const std::string& message) const\r
+  {\r
+    stackdump(m_line, message);\r
+  }\r
+\r
+  void debug_trace::stackdump(void) const\r
+  {\r
+    for (const debug_trace* item = this; item; item = item->m_last)\r
+      item->do_report("...called from here");\r
+  }\r
+\r
+\r
+  ////////////////////////////////////////////////////////////////////////////////\r
+\r
+} // end namespace stlplus\r
This page took 0.034303 seconds and 4 git commands to generate.