DynXX-Cxx
Loading...
Searching...
No Matches
Log.hxx
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4
5#include "Macro.hxx"
6#include "Types.hxx"
7
8#if defined(USE_STD_FORMAT)
9#include <format>
10#else
11#include <tuple>
12#include <sstream>
13#endif
14
15enum class DynXXLogLevelX : uint8_t {
16 Debug = 3,
17 Info,
18 Warn,
19 Error,
20 Fatal,
21 None
22};
23
25
26void dynxxLogSetCallback(const std::function<void(int level, const char *content)> &callback);
27
28void dynxxLogPrint(DynXXLogLevelX level, std::string_view content);
29
30#if !defined(USE_STD_FORMAT)
31template <typename... Args>
32std::string dynxxLogFormatT(std::string_view format, Args&&... args)
33{
34 std::ostringstream oss;
35
36 auto formatWithArgs = [&oss, &format](auto... xArgs) {
37 std::string tmpFormat{format};
38 constexpr auto flag = "{}";
39 ((oss << tmpFormat.substr(0, tmpFormat.find(flag)) << xArgs, tmpFormat.erase(0, tmpFormat.find(flag) + 2)), ...);
40 oss << tmpFormat;
41 };
42 std::apply(formatWithArgs, std::make_tuple(args...));
43
44 return oss.str();
45}
46#endif
47
48template<typename... Args>
49void dynxxLogPrintF(DynXXLogLevelX level, std::string_view format, Args&&... args) {
50 auto fContent =
51#if !defined(USE_STD_FORMAT)
52 dynxxLogFormatT(format, std::forward<Args>(args)...)
53#else
54 std::vformat(std::string{format}, std::make_format_args(args...))
55#endif
56 ;
57 dynxxLogPrint(level, fContent);
58}
void dynxxLogPrint(DynXXLogLevelX level, std::string_view content)
void dynxxLogSetCallback(const std::function< void(int level, const char *content)> &callback)
void dynxxLogSetLevel(DynXXLogLevelX level)
void dynxxLogPrintF(DynXXLogLevelX level, std::string_view format, Args &&... args)
Definition Log.hxx:49
DynXXLogLevelX
Definition Log.hxx:15
std::string dynxxLogFormatT(std::string_view format, Args &&... args)
Definition Log.hxx:32