summaryrefslogtreecommitdiff
path: root/trunk/ACE/examples/APG/Logging/Trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/ACE/examples/APG/Logging/Trace.h')
-rw-r--r--trunk/ACE/examples/APG/Logging/Trace.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/trunk/ACE/examples/APG/Logging/Trace.h b/trunk/ACE/examples/APG/Logging/Trace.h
new file mode 100644
index 00000000000..782a610558e
--- /dev/null
+++ b/trunk/ACE/examples/APG/Logging/Trace.h
@@ -0,0 +1,157 @@
+// $Id$
+
+#ifndef TRACE_H
+#define TRACE_H
+
+#include "ace/Log_Msg.h"
+
+// Listing 1 code/ch03
+class Trace
+{
+public:
+ Trace (const ACE_TCHAR *prefix,
+ const ACE_TCHAR *name,
+ int line,
+ const ACE_TCHAR *file)
+ {
+ this->prefix_ = prefix;
+ this->name_ = name;
+ this->line_ = line;
+ this->file_ = file;
+
+ ACE_Log_Msg *lm = ACE_LOG_MSG;
+ if (lm->tracing_enabled ()
+ && lm->trace_active () == 0)
+ {
+ lm->trace_active (1);
+ ACE_DEBUG
+ ((LM_TRACE,
+ ACE_TEXT ("%s%*s(%t) calling %s in file `%s'")
+ ACE_TEXT (" on line %d\n"),
+ this->prefix_,
+ Trace::nesting_indent_ * lm->inc (),
+ ACE_TEXT (""),
+ this->name_,
+ this->file_,
+ this->line_));
+ lm->trace_active (0);
+ }
+ }
+
+ void setLine (int line)
+ {
+ this->line_ = line;
+ }
+
+ ~Trace (void)
+ {
+ ACE_Log_Msg *lm = ACE_LOG_MSG;
+ if (lm->tracing_enabled ()
+ && lm->trace_active () == 0)
+ {
+ lm->trace_active (1);
+ ACE_DEBUG
+ ((LM_TRACE,
+ ACE_TEXT ("%s%*s(%t) leaving %s in file `%s'")
+ ACE_TEXT (" on line %d\n"),
+ this->prefix_,
+ Trace::nesting_indent_ * lm->dec (),
+ ACE_TEXT (""),
+ this->name_,
+ this->file_,
+ this->line_));
+ lm->trace_active (0);
+ }
+ }
+
+private:
+ enum { nesting_indent_ = 3 };
+
+ const ACE_TCHAR *prefix_;
+ const ACE_TCHAR *name_;
+ const ACE_TCHAR *file_;
+ int line_;
+};
+// Listing 1
+
+// Listing 2 code/ch03
+#define TRACE_PREFIX ACE_TEXT ("TRACE ")
+
+#if defined (TRACE)
+#undef TRACE
+#endif /* TRACE */
+
+#if (ACE_NTRACE == 1)
+# define TRACE(X)
+# define TRACE_RETURN(V) return V;
+# define TRACE_RETURN_VOID()
+#else
+# define TRACE(X) \
+ Trace ____ (TRACE_PREFIX, \
+ ACE_TEXT (X), \
+ __LINE__, \
+ ACE_TEXT (__FILE__))
+
+# define TRACE_RETURN(V) \
+ do { ____.setLine(__LINE__); return V; } while (0)
+
+# define TRACE_RETURN_VOID() \
+ do { ____.setLine(__LINE__); } while (0)
+#endif
+// Listing 2
+
+//////////////////////////////////////////////////
+
+#if defined (__GNUC__) && (__GNUC__ >= 3 || __GNUC_MINOR__ > 95) && \
+ (!defined (VXWORKS) || !(__GNUC__ == 2 && __GNUC_MINOR__ == 96))
+// This stuff only works with g++ 2.96 and later...
+// But not with VxWorks g++ 2.96.
+
+// Listing 3 code/ch03
+
+#define DEBUG_PREFIX ACE_TEXT ("DEBUG%I")
+#define INFO_PREFIX ACE_TEXT ("INFO%I")
+#define NOTICE_PREFIX ACE_TEXT ("NOTICE%I")
+#define WARNING_PREFIX ACE_TEXT ("WARNING%I")
+#define ERROR_PREFIX ACE_TEXT ("ERROR%I")
+#define CRITICAL_PREFIX ACE_TEXT ("CRITICAL%I")
+#define ALERT_PREFIX ACE_TEXT ("ALERT%I")
+#define EMERGENCY_PREFIX ACE_TEXT ("EMERGENCY%I")
+
+#define MY_DEBUG(...) \
+ ACE_DEBUG(( LM_DEBUG, \
+ DEBUG_PREFIX \
+ __VA_ARGS__))
+#define MY_INFO(...) \
+ ACE_DEBUG(( LM_INFO, \
+ INFO_PREFIX \
+ __VA_ARGS__))
+#define MY_NOTICE(...) \
+ ACE_DEBUG(( LM_NOTICE, \
+ NOTICE_PREFIX \
+ __VA_ARGS__))
+#define MY_WARNING(...) \
+ ACE_DEBUG(( LM_WARNING, \
+ WARNING_PREFIX \
+ __VA_ARGS__))
+#define MY_ERROR(...) \
+ ACE_DEBUG(( LM_ERROR, \
+ ERROR_PREFIX \
+ __VA_ARGS__))
+#define MY_CRITICAL(...) \
+ ACE_DEBUG(( LM_CRITICAL, \
+ CRITICAL_PREFIX \
+ __VA_ARGS__))
+#define MY_ALERT(...) \
+ ACE_DEBUG(( LM_ALERT, \
+ ALERT_PREFIX \
+ __VA_ARGS__))
+#define MY_EMERGENCY(...) \
+ ACE_DEBUG(( LM_EMERGENCY, \
+ EMERGENCY_PREFIX \
+ __VA_ARGS__))
+// Listing 3
+
+#endif /* __GNUC__ */
+
+#endif /* TRACE_H */