1:
2:
3: /**********************
4: * *
5: * COMPILER INCLUDES *
6: * *
7: **********************/
8:
9:
10: #include <cassert>
11:
12:
13: /*********************
14: * *
15: * PROJECT INCLUDES *
16: * *
17: *********************/
18:
19:
20: #include "loghandle.h"
21: #include "wwwi/singleton.h"
22: #include "wwwi/string.h"
23:
24:
25: using std::strchr;
26: using std::string;
27: using WWWI::GetSingleton;
28: using WWWI::StringDuplicate;
29:
30:
31: /**************************
32: * *
33: * LOGHANDLE CONSTRUCTOR *
34: * *
35: **************************/
36:
37:
38: LogHandle::LogHandle(LogFacility i_lf, LogPriority i_ly) {
39: m_lf = i_lf;
40: m_ly = i_ly;
41: m_lyBase = i_ly;
42: }
43:
44:
45: /****************
46: * *
47: * OPERATOR () *
48: * *
49: ****************/
50:
51:
52: void LogHandle::operator()() {
53: this->Flush();
54: m_ly = m_lyBase;
55: }
56:
57:
58: /****************
59: * *
60: * OPERATOR << *
61: * *
62: ****************/
63:
64:
65: LogHandle &LogHandle::operator<<(LogPriority i_ly) {
66: if (i_ly!=m_ly) {
67: this->Flush();
68: m_ly = i_ly;
69: }
70: return *this;
71: }
72:
73:
74: /*****************
75: * *
76: * METHOD FLUSH *
77: * *
78: *****************/
79:
80:
81: void LogHandle::Flush() {
82: char *strBuffer;
83: char *strEnd;
84: char *strPos;
85: string xtrLine;
86: MINDLogPtr lgp = GetSingleton<MINDLog>();
87:
88: strBuffer = StringDuplicate(this->str().c_str());
89: this->str(string());
90: this->clear();
91:
92: strPos = strBuffer;
93: while ((strEnd = strchr(strPos,'\n'))!=NULL) {
94: *strEnd++ = 0;
95: lgp->Log(m_lf,m_ly,strPos);
96: strPos = strEnd;
97: }
98: if (*strPos!=0) lgp->Log(m_lf,m_ly,strPos);
99: delete[] strBuffer;
100: }
101:
102:
103: /*************************
104: * *
105: * LOGHANDLE DESTRUCTOR *
106: * *
107: *************************/
108:
109:
110: LogHandle::~LogHandle() {
111: this->Flush();
112: }
113:
114:
115:
116: