paradigm_3/html/
<!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> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </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&amp; r_fname) {
00028   InitializeCriticalSection(&amp;<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(&amp;<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>-&gt;close();
00065     <span class="keyword">delete</span> <a class="code" href="classLog.html#o1">mpFile</a>;
00066   }
00067   DeleteCriticalSection(&amp;<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(&amp;tm_secs);
00079   <span class="keyword">struct </span>tm *tm_time = localtime(&amp;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&amp; 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> &lt;&lt; <a class="code" href="classLog.html#o3">mTimeStamp</a> &lt;&lt; r_msg &lt;&lt; endl;
00095     <span class="keywordflow">else</span>
00096       cout &lt;&lt; <a class="code" href="classLog.html#o3">mTimeStamp</a> &lt;&lt; r_msg &lt;&lt; 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> &lt;&lt; <a class="code" href="classLog.html#o3">mTimeStamp</a> &lt;&lt; buf &lt;&lt; endl;
00127     <span class="keywordflow">else</span>
00128       cout &lt;&lt; <a class="code" href="classLog.html#o3">mTimeStamp</a> &lt;&lt; buf &lt;&lt; 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>