<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>log.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.17 -->
<center>
<a class="qindex" href="main.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center>
<hr><h1>log.cpp</h1><a href="log_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
00013 <span class="preprocessor">#include "<a class="code" href="sysconfig_8h.html">sysconfig.h</a>"</span>
00014 <span class="preprocessor">#include "<a class="code" href="log_8h.html">log.h</a>"</span>
00015 <span class="preprocessor">#include "<a class="code" href="guard_8h.html">guard.h</a>"</span>
00016
<a name="l00027"></a><a class="code" href="classLog.html#a0">00027</a> <a class="code" href="classLog.html#a0">Log::Log</a>(string& r_fname) {
00028 InitializeCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>);
00029 <a class="code" href="classLog.html#o0">mFileName</a> = r_fname;
00030 <span class="keywordflow">if</span> (<a class="code" href="classLog.html#o0">mFileName</a> != <span class="stringliteral">""</span>) { <span class="comment">// We want to use a file</span>
00031 <a class="code" href="classLog.html#o1">mpFile</a> = <span class="keyword">new</span> ofstream(<a class="code" href="classLog.html#o0">mFileName</a>.c_str(),ios_base::out|ios_base::app);
00032 } <span class="keywordflow">else</span> { <span class="comment">// No file - logging will be done to cout (console)</span>
00033 <a class="code" href="classLog.html#o1">mpFile</a> = NULL;
00034 }
00035 <a class="code" href="classLog.html#o2">mActive</a> = <span class="keyword">true</span>;
00036 }
00037
<a name="l00048"></a><a class="code" href="classLog.html#a1">00048</a> <a class="code" href="classLog.html#a0">Log::Log</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> * fname) {
00049 InitializeCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>);
00050 <a class="code" href="classLog.html#o0">mFileName</a> = fname;
00051 <span class="keywordflow">if</span> (<a class="code" href="classLog.html#o0">mFileName</a> != <span class="stringliteral">""</span>) { <span class="comment">// We want to use a file</span>
00052 <a class="code" href="classLog.html#o1">mpFile</a> = <span class="keyword">new</span> ofstream(<a class="code" href="classLog.html#o0">mFileName</a>.c_str(),ios_base::out|ios_base::app);
00053 } <span class="keywordflow">else</span> { <span class="comment">// No file - logging will be done to cout (console)</span>
00054 <a class="code" href="classLog.html#o1">mpFile</a> = NULL;
00055 }
00056 <a class="code" href="classLog.html#o2">mActive</a> = <span class="keyword">true</span>;
00057 }
00058
<a name="l00062"></a><a class="code" href="classLog.html#a2">00062</a> <a class="code" href="classLog.html#a2">Log::~Log</a>() {
00063 <span class="keywordflow">if</span> (mpFile) { <span class="comment">// Nothing to be done for cout logs</span>
00064 <a class="code" href="classLog.html#o1">mpFile</a>->close();
00065 <span class="keyword">delete</span> <a class="code" href="classLog.html#o1">mpFile</a>;
00066 }
00067 DeleteCriticalSection(&<a class="code" href="classLog.html#o4">mMutex</a>);
00068 }
00069
<a name="l00077"></a><a class="code" href="classLog.html#c2">00077</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#c2">Log::SetTime</a>() {
00078 time_t tm_secs = time(&tm_secs);
00079 <span class="keyword">struct </span>tm *tm_time = localtime(&tm_secs);
00080
00081 strftime(<a class="code" href="classLog.html#o3">mTimeStamp</a>, 40, <span class="stringliteral">"[%Y-%m-%d %H:%M:%S] "</span>, tm_time);
00082 }
00083
<a name="l00089"></a><a class="code" href="classLog.html#a3">00089</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a3">Log::Write</a>(<span class="keyword">const</span> string& r_msg) {
00090 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>);
00091 <span class="keywordflow">if</span>(mActive) {
00092 <a class="code" href="classLog.html#c2">SetTime</a>();
00093 <span class="keywordflow">if</span> (mpFile)
00094 *<a class="code" href="classLog.html#o1">mpFile</a> << <a class="code" href="classLog.html#o3">mTimeStamp</a> << r_msg << endl;
00095 <span class="keywordflow">else</span>
00096 cout << <a class="code" href="classLog.html#o3">mTimeStamp</a> << r_msg << endl;
00097 }
00098 }
00099
<a name="l00115"></a><a class="code" href="classLog.html#a4">00115</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a3">Log::Write</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
00116 {
00117 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>);
00118 <span class="keywordflow">if</span>(mActive) {
00119 <span class="keywordtype">char</span> buf[1024];
00120 va_list args;
00121 va_start (args, fmt);
00122 vsprintf (buf, fmt, args);
00123 va_end (args);
00124 <a class="code" href="classLog.html#c2">SetTime</a>();
00125 <span class="keywordflow">if</span> (mpFile)
00126 *<a class="code" href="classLog.html#o1">mpFile</a> << <a class="code" href="classLog.html#o3">mTimeStamp</a> << buf << endl;
00127 <span class="keywordflow">else</span>
00128 cout << <a class="code" href="classLog.html#o3">mTimeStamp</a> << buf << endl;
00129 }
00130 }
00131
<a name="l00137"></a><a class="code" href="classLog.html#a5">00137</a> <span class="keywordtype">void</span> <a class="code" href="classLog.html#a5">Log::SetActive</a>(<span class="keywordtype">bool</span> b) {
00138 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>);
00139 <a class="code" href="classLog.html#o2">mActive</a> = b;
00140 }
00141
<a name="l00147"></a><a class="code" href="classLog.html#a6">00147</a> <span class="keywordtype">bool</span> <a class="code" href="classLog.html#a6">Log::IsActive</a>() {
00148 <a class="code" href="classGuard.html">Guard</a> g(<a class="code" href="classLog.html#o4">mMutex</a>);
00149 <span class="keywordflow">return</span> <a class="code" href="classLog.html#o2">mActive</a>;
00150 }
00151
</pre></div><hr><address style="align: right;"><small>Generated on Mon Mar 29 23:12:53 2004 for Paradigm by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0
width=110 height=53></a>1.2.17 </small></address>
</body>
</html>