7
7
#include < thread>
8
8
#include < vector>
9
9
#include < algorithm>
10
+ #include < cinttypes>
10
11
11
12
// --------------------------------
12
13
//
89
90
// }
90
91
//
91
92
#ifndef LOG_TARGET
92
- /* */ #define LOG_TARGET log_handler ()
93
+ #define LOG_TARGET log_handler ()
93
94
#endif
94
95
95
96
#ifndef LOG_TEE_TARGET
96
- /* */ #define LOG_TEE_TARGET stderr
97
+ #define LOG_TEE_TARGET stderr
97
98
#endif
98
99
99
100
// Utility to obtain "pid" like unique process id and use it when creating log files.
100
101
inline std::string log_get_pid ()
101
102
{
102
103
static std::string pid;
103
104
if (pid.empty ())
104
- #ifndef _WIN32
105
- [[unlikely]]
106
- #endif
107
105
{
108
106
// std::this_thread::get_id() is the most portable way of obtaining a "process id"
109
107
// it's not the same as "pid" but is unique enough to solve multiple instances
@@ -123,7 +121,7 @@ inline std::string log_get_pid()
123
121
#define LOG_FILENAME_GENERATOR (log_file_basename, log_file_extension ) _log_filename_generator(log_file_basename, log_file_extension)
124
122
125
123
// INTERNAL, DO NOT USE
126
- inline std::string _log_filename_generator (std::string log_file_basename, std::string log_file_extension)
124
+ inline std::string _log_filename_generator (const std::string & log_file_basename, const std::string & log_file_extension)
127
125
{
128
126
return std::string ().append (log_file_basename).append (" ." ).append (log_get_pid ()).append (" ." ).append (log_file_extension);
129
127
}
@@ -149,10 +147,10 @@ inline std::string _log_filename_generator(std::string log_file_basename, std::s
149
147
//
150
148
#ifndef LOG_NO_TIMESTAMPS
151
149
/* */ #ifndef _WIN32
152
- /* */ #define LOG_TIMESTAMP_FMT " [%lu ]"
150
+ /* */ #define LOG_TIMESTAMP_FMT " [%" PRIu64 " ]"
153
151
/* */ #define LOG_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t >>(std::chrono::system_clock::now().time_since_epoch())).count()
154
152
/* */ #else
155
- /* */ #define LOG_TIMESTAMP_FMT " [%llu ]"
153
+ /* */ #define LOG_TIMESTAMP_FMT " [%" PRIu64 " ]"
156
154
/* */ #define LOG_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t >>(std::chrono::system_clock::now().time_since_epoch())).count()
157
155
/* */ #endif
158
156
#else
@@ -162,10 +160,10 @@ inline std::string _log_filename_generator(std::string log_file_basename, std::s
162
160
163
161
#ifdef LOG_TEE_TIMESTAMPS
164
162
/* */ #ifndef _WIN32
165
- /* */ #define LOG_TEE_TIMESTAMP_FMT " [%lu ]"
163
+ /* */ #define LOG_TEE_TIMESTAMP_FMT " [%" PRIu64 " ]"
166
164
/* */ #define LOG_TEE_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t >>(std::chrono::system_clock::now().time_since_epoch())).count()
167
165
/* */ #else
168
- /* */ #define LOG_TEE_TIMESTAMP_FMT " [%llu ]"
166
+ /* */ #define LOG_TEE_TIMESTAMP_FMT " [%" PRIu64 " ]"
169
167
/* */ #define LOG_TEE_TIMESTAMP_VAL , (std::chrono::duration_cast<std::chrono::duration<std::uint64_t >>(std::chrono::system_clock::now().time_since_epoch())).count()
170
168
/* */ #endif
171
169
#else
@@ -219,55 +217,55 @@ enum LogTriState
219
217
// USE LOG() INSTEAD
220
218
//
221
219
#ifndef _WIN32
222
- /* */ #define _LOG (str, ...) \
223
- { \
224
- if (LOG_TARGET != nullptr ) \
225
- { \
226
- fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, ## __VA_ARGS__); \
227
- fflush (LOG_TARGET); \
228
- } \
220
+ /* */ #define _LOG (str, ...) \
221
+ { \
222
+ if (LOG_TARGET != nullptr ) \
223
+ { \
224
+ fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, __VA_ARGS__); \
225
+ fflush (LOG_TARGET); \
226
+ } \
229
227
}
230
228
#else
231
- /* */ #define _LOG (str, ...) \
232
- { \
233
- if (LOG_TARGET != nullptr ) \
234
- { \
235
- fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL " " , ## __VA_ARGS__); \
236
- fflush (LOG_TARGET); \
237
- } \
229
+ /* */ #define _LOG (str, ...) \
230
+ { \
231
+ if (LOG_TARGET != nullptr ) \
232
+ { \
233
+ fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL " " , __VA_ARGS__); \
234
+ fflush (LOG_TARGET); \
235
+ } \
238
236
}
239
237
#endif
240
238
241
239
// INTERNAL, DO NOT USE
242
240
// USE LOG_TEE() INSTEAD
243
241
//
244
242
#ifndef _WIN32
245
- /* */ #define _LOG_TEE (str, ...) \
246
- { \
247
- if (LOG_TARGET != nullptr ) \
248
- { \
249
- fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, ## __VA_ARGS__); \
250
- fflush (LOG_TARGET); \
251
- } \
252
- if (LOG_TARGET != nullptr && LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr ) \
253
- { \
254
- fprintf (LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str " %s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL, ## __VA_ARGS__); \
255
- fflush (LOG_TEE_TARGET); \
256
- } \
243
+ /* */ #define _LOG_TEE (str, ...) \
244
+ { \
245
+ if (LOG_TARGET != nullptr ) \
246
+ { \
247
+ fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL, __VA_ARGS__); \
248
+ fflush (LOG_TARGET); \
249
+ } \
250
+ if (LOG_TARGET != nullptr && LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr ) \
251
+ { \
252
+ fprintf (LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str " %s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL, __VA_ARGS__); \
253
+ fflush (LOG_TEE_TARGET); \
254
+ } \
257
255
}
258
256
#else
259
- /* */ #define _LOG_TEE (str, ...) \
260
- { \
261
- if (LOG_TARGET != nullptr ) \
262
- { \
263
- fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL " " , ## __VA_ARGS__); \
264
- fflush (LOG_TARGET); \
265
- } \
266
- if (LOG_TARGET != nullptr && LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr ) \
267
- { \
268
- fprintf (LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str " %s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL " " , ## __VA_ARGS__); \
269
- fflush (LOG_TEE_TARGET); \
270
- } \
257
+ /* */ #define _LOG_TEE (str, ...) \
258
+ { \
259
+ if (LOG_TARGET != nullptr ) \
260
+ { \
261
+ fprintf (LOG_TARGET, LOG_TIMESTAMP_FMT LOG_FLF_FMT str " %s" LOG_TIMESTAMP_VAL LOG_FLF_VAL " " , __VA_ARGS__); \
262
+ fflush (LOG_TARGET); \
263
+ } \
264
+ if (LOG_TARGET != nullptr && LOG_TARGET != stdout && LOG_TARGET != stderr && LOG_TEE_TARGET != nullptr ) \
265
+ { \
266
+ fprintf (LOG_TEE_TARGET, LOG_TEE_TIMESTAMP_FMT LOG_TEE_FLF_FMT str " %s" LOG_TEE_TIMESTAMP_VAL LOG_TEE_FLF_VAL " " , __VA_ARGS__); \
267
+ fflush (LOG_TEE_TARGET); \
268
+ } \
271
269
}
272
270
#endif
273
271
@@ -308,7 +306,7 @@ enum LogTriState
308
306
#endif
309
307
310
308
// INTERNAL, DO NOT USE
311
- inline FILE *_log_handler1 (bool change = false , LogTriState disable = LogTriStateSame, std::string filename = LOG_DEFAULT_FILE_NAME, FILE *target = nullptr )
309
+ inline FILE *_log_handler1 (bool change = false , LogTriState disable = LogTriStateSame, const std::string & filename = LOG_DEFAULT_FILE_NAME, FILE *target = nullptr )
312
310
{
313
311
static bool _initialized{false };
314
312
static bool _disabled{(filename.empty () && target == nullptr )};
@@ -317,9 +315,6 @@ inline FILE *_log_handler1(bool change = false, LogTriState disable = LogTriStat
317
315
static FILE *logfile = nullptr ;
318
316
319
317
if (change)
320
- #ifndef _WIN32
321
- [[unlikely]]
322
- #endif
323
318
{
324
319
if (disable == LogTriStateTrue)
325
320
{
@@ -334,7 +329,7 @@ inline FILE *_log_handler1(bool change = false, LogTriState disable = LogTriStat
334
329
// Otherwise, process the arguments
335
330
else
336
331
{
337
- if (log_current_filename. compare (filename) != 0 )
332
+ if (log_current_filename != filename )
338
333
{
339
334
_initialized = false ;
340
335
}
@@ -347,16 +342,13 @@ inline FILE *_log_handler1(bool change = false, LogTriState disable = LogTriStat
347
342
}
348
343
349
344
if (_initialized)
350
- #ifndef _WIN32
351
- [[likely]]
352
- #endif
353
345
{
354
346
if (_disabled)
355
347
{
356
348
// Log is disabled
357
349
return nullptr ;
358
350
}
359
- else
351
+ else // NOLINT
360
352
{
361
353
// with fallback in case something went wrong
362
354
return logfile ? logfile : stderr;
@@ -378,10 +370,7 @@ inline FILE *_log_handler1(bool change = false, LogTriState disable = LogTriStat
378
370
}
379
371
else
380
372
{
381
- if (log_current_filename.compare (filename) != 0 )
382
- #ifndef _WIN32
383
- [[likely]]
384
- #endif
373
+ if (log_current_filename != filename)
385
374
{
386
375
if (logfile != nullptr && logfile != stdout && logfile != stderr)
387
376
{
@@ -415,7 +404,7 @@ inline FILE *_log_handler1(bool change = false, LogTriState disable = LogTriStat
415
404
}
416
405
417
406
// INTERNAL, DO NOT USE
418
- inline FILE *_log_handler2 (bool change = false , LogTriState disable = LogTriStateSame, FILE *target = nullptr , std::string filename = LOG_DEFAULT_FILE_NAME)
407
+ inline FILE *_log_handler2 (bool change = false , LogTriState disable = LogTriStateSame, FILE *target = nullptr , const std::string & filename = LOG_DEFAULT_FILE_NAME)
419
408
{
420
409
return _log_handler1 (change, disable, filename, target);
421
410
}
@@ -444,7 +433,7 @@ inline FILE *_log_enable()
444
433
#define LOG_SET_TARGET (target ) _log_set_target(target)
445
434
446
435
// INTERNAL, DO NOT USE
447
- inline FILE *_log_set_target (std::string filename) { return _log_handler1 (true , LogTriStateSame, filename); }
436
+ inline FILE *_log_set_target (const std::string & filename) { return _log_handler1 (true , LogTriStateSame, filename); }
448
437
inline FILE *_log_set_target (FILE *target) { return _log_handler2 (true , LogTriStateSame, target); }
449
438
450
439
// INTERNAL, DO NOT USE
@@ -491,19 +480,19 @@ inline void log_test()
491
480
#endif
492
481
}
493
482
494
- inline bool log_param_single_parse (std::string param)
483
+ inline bool log_param_single_parse (const std::string & param)
495
484
{
496
- if (std::string (" --log-test" ). compare (param) == 0 )
485
+ if (std::string (" --log-test" ) == param )
497
486
{
498
487
log_test ();
499
488
return true ;
500
489
}
501
- else if (std::string (" --log-disable" ). compare (param) == 0 )
490
+ else if (std::string (" --log-disable" ) == param) // NOLINT
502
491
{
503
492
LOG_DISABLE ();
504
493
return true ;
505
494
}
506
- else if (std::string (" --log-enable" ). compare (param) == 0 )
495
+ else if (std::string (" --log-enable" ) == param )
507
496
{
508
497
LOG_ENABLE ();
509
498
return true ;
@@ -512,9 +501,9 @@ inline bool log_param_single_parse(std::string param)
512
501
return false ;
513
502
}
514
503
515
- inline bool log_param_pair_parse (bool check_but_dont_parse, std::string param, std::string next = std::string())
504
+ inline bool log_param_pair_parse (bool check_but_dont_parse, const std::string & param, const std::string & next = std::string())
516
505
{
517
- if (std::string (" --log-file" ). compare (param) == 0 )
506
+ if (std::string (" --log-file" ) == param )
518
507
{
519
508
if (check_but_dont_parse)
520
509
{
@@ -573,7 +562,7 @@ inline std::string _log_var_to_string(std::string var)
573
562
return var;
574
563
}
575
564
576
- inline std::string _log_var_to_string (std::vector<int > var)
565
+ inline std::string _log_var_to_string (const std::vector<int > & var)
577
566
{
578
567
std::string buf;
579
568
buf.append (" [ " );
0 commit comments