Skip to content

Commit 4b38948

Browse files
committed
bug fixes and code updates
updated Loggins and Thread
1 parent b04294e commit 4b38948

File tree

2 files changed

+122
-42
lines changed

2 files changed

+122
-42
lines changed

Src/Logging/Logging.h

+105-40
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,17 @@
2626
#endif
2727

2828
#include <string>
29-
3029
#include <cstdarg>
3130

32-
#include <format>
31+
//#include <format>
32+
33+
#ifndef USE_SPDLOG
34+
35+
#include <variant>>
36+
37+
typedef std::vector<std::variant<int, unsigned int, float, double, std::string>> MultiVarArray_def;
3338

39+
#endif
3440

3541
enum eLogLevel
3642
{
@@ -43,6 +49,7 @@ enum eLogLevel
4349
LogLevel_trace = 6
4450
};
4551

52+
4653
class CLogger
4754
{
4855
std::string m_sLogName;
@@ -89,7 +96,7 @@ class CLogger
8996

9097
auto spdlogLevel = ((int)spdlog::level::off - (int)m_nLogLevel);
9198

92-
spdlog::set_level((spdlog::level::level_enum)spdlogLevel);
99+
spdlog::set_level((spdlog::level::level_enum) spdlogLevel);
93100

94101
#else
95102

@@ -100,51 +107,86 @@ class CLogger
100107

101108
#ifndef USE_SPDLOG
102109

103-
std::string formatString(const std::string& fmt, ...)
110+
std::string formatString(const std::string& fmt, MultiVarArray_def params)
104111
{
105112
std::string sOut = "";
106113

107-
bool bOpenBracketDetected = false;
114+
try
115+
{
116+
unsigned int argIdx = 0;
108117

109-
unsigned int nParamIdx = 0;
118+
bool bFound = false;
110119

111-
va_list args;
112-
va_start(args, fmt);
120+
std::string insertMarker = "{}";
113121

114-
for (auto x = fmt.begin(); x != fmt.end(); x++)
115-
{
116-
if ((*x) == '{') // check for start-param-insiertion
122+
std::string sParam;
123+
124+
unsigned int lastPos = 0;
125+
126+
unsigned int nextPos = fmt.find(insertMarker);
127+
128+
auto prm = params.begin();
129+
130+
while (nextPos != std::string::npos)
117131
{
118-
bOpenBracketDetected = true;
119-
continue;
120-
}
121-
else
122-
{
123-
if ((*x) == '}')
124-
{
125-
if (bOpenBracketDetected == true)
126-
{
127-
// process next param
132+
auto len = (nextPos - 1) - lastPos;
133+
if (len > 0)
134+
{
135+
sOut.append(fmt.substr(lastPos, len));
136+
}
128137

138+
if (prm != params.end())
139+
{
140+
if (std::holds_alternative<int>(*prm))
141+
{
142+
sParam = std::to_string(std::get<int>(*prm));
143+
}
144+
else if (std::holds_alternative<unsigned int>(*prm))
145+
{
146+
sParam = std::to_string(std::get<unsigned int>(*prm));
147+
}
148+
else if (std::holds_alternative<float>(*prm))
149+
{
150+
sParam = std::to_string(std::get<float>(*prm));
151+
}
152+
else if (std::holds_alternative<double>(*prm))
153+
{
154+
sParam = std::to_string(std::get<double>(*prm));
155+
}
156+
else if (std::holds_alternative<std::string>(*prm))
157+
{
158+
sParam = std::get<std::string>(*prm);
129159
}
160+
else
161+
{
162+
sParam.clear();
163+
}
164+
165+
prm++;
130166
}
131-
bOpenBracketDetected = false;
167+
else
168+
{
169+
sParam.clear();
170+
}
171+
172+
sOut.append(sParam);
132173
}
133174

134-
sOut.push_back((*x));
175+
if (bFound == false)
176+
{
177+
sOut = fmt;
178+
}
135179
}
180+
catch(...)
181+
{
136182

183+
}
137184

138-
va_end(args);
139-
185+
return sOut;
140186
}
141187

142-
void ErrorMsg(unsigned int logLevel, const std::string& msg, ...)
188+
void ErrorMsg(unsigned int logLevel, const std::string& fmt, MultiVarArray_def params)
143189
{
144-
145-
va_list args;
146-
va_start(args, msg);
147-
148190
std::string sOut = "";
149191

150192
switch (logLevel)
@@ -154,12 +196,35 @@ class CLogger
154196
break;;
155197

156198
case LogLevel_fatal:
157-
sOut = formatString(msg.c_str(), args);
158-
PLOG_FATAL << msg;
199+
sOut = formatString(fmt, params);
200+
PLOG_CRITICAL << sOut;
201+
break;
202+
203+
case LogLevel_error:
204+
sOut = formatString(fmt, params);
205+
PLOG_ERROR << sOut;
159206
break;
160-
}
161207

162-
va_end(args);
208+
case LogLevel_warning:
209+
sOut = formatString(fmt, params);
210+
PLOG_WARNING << sOut;
211+
break;
212+
213+
case LogLevel_info:
214+
sOut = formatString(fmt, params);
215+
PLOG_INFO << sOut;
216+
break;
217+
218+
case LogLevel_debug:
219+
sOut = formatString(fmt, params);
220+
PLOG_DEBUG << sOut;
221+
break;
222+
223+
case LogLevel_trace:
224+
sOut = formatString(fmt, params);
225+
PLOG_VERBOSE << sOut;
226+
break;
227+
}
163228
}
164229

165230
#endif
@@ -182,12 +247,12 @@ class CLogger
182247

183248
#define LogInit plog::Logger::init
184249

185-
#define LogCritical(m, ...) spdlog::critical(m, )
186-
#define LogError(m, ...) PLOG_ERROR << m
187-
#define LogWarning(m, ...) PLOG_WARNING << m
188-
#define LogInfo(m, ...) PLOG_INFO << m
189-
#define LogDebug(m, ...) PLOG_ERROR << m
190-
#define LogTrace(m, ...) PLOG_VERBOSE << m
250+
#define LogCritical(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_CRITICAL << formatString(m, params);}
251+
#define LogError(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_ERROR << formatString(m, params);}
252+
#define LogWarning(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_WARNING << formatString(m, params);}
253+
#define LogInfo(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_INFO << formatString(m, params);}
254+
#define LogDebug(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_DEBUG << formatString(m, params);}
255+
#define LogTrace(m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_VERBOSE << formatString(m, params);}
191256

192257
#endif
193258

Src/Thread/ThreadBase.h

+17-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ typedef std::unique_ptr<std::thread> ThreadHandle_def;
3838

3939
class CThreadBase
4040
{
41+
protected:
42+
4143
std::string m_sName;
4244

4345
int m_priority;
@@ -50,9 +52,11 @@ class CThreadBase
5052

5153
volatile bool m_running;
5254

55+
std::mutex m_startupMutex;
56+
5357
volatile bool m_bThreadExitFlag;
5458

55-
protected:
59+
std::mutex m_exitMutex;
5660

5761
void newThread()
5862
//void newThread(CThreadBase * pThisClass)
@@ -148,8 +152,10 @@ class CThreadBase
148152
stopThread(true);
149153
}
150154

151-
bool createThread()
155+
bool createThread() // This function = start thread
152156
{
157+
std::scoped_lock lock(m_startupMutex);
158+
153159
if (m_running)
154160
{
155161
//LogDebug("already active");
@@ -169,6 +175,8 @@ class CThreadBase
169175

170176
void stopThread(bool bSetExitFlag)
171177
{
178+
std::scoped_lock lock(m_exitMutex);
179+
172180
if (bSetExitFlag == true)
173181
{
174182
m_bThreadExitFlag = true;
@@ -180,15 +188,22 @@ class CThreadBase
180188
}
181189
}
182190

191+
bool isActive()
192+
{
193+
return m_running;
194+
}
195+
183196
void waitForSignal()
184197
{
185198
std::unique_lock<std::mutex> lock(m_signalMutex);
199+
186200
m_signalVar.wait(lock);
187201
}
188202

189203
void triggerSignal(bool bWaitAll = false)
190204
{
191205
std::unique_lock<std::mutex> lock(m_signalMutex);
206+
192207
if (bWaitAll == false)
193208
m_signalVar.notify_one();
194209
else

0 commit comments

Comments
 (0)