CVB++ 15.0
Loading...
Searching...
No Matches
macro.hpp
1#pragma once
2
3#include "log.hpp"
4#include "span.hpp"
5
6#if !defined(__PRETTY_FUNCTION__) && !defined(__GNUC__)
7# define __PRETTY_FUNCTION__ __FUNCSIG__
8#endif
9
10#define CVB_LOG_DEBUG \
11 if (auto debug = Cvb::Telemetry::Module::Get().WouldLogDebug() \
12 ? Cvb::Telemetry::Log::Create(Cvb::Telemetry::LogLevel::DEBUG) \
13 : Cvb::Telemetry::Log::Create()) \
14 debug
15
16#define CVB_LOG_INFO \
17 if (auto info = Cvb::Telemetry::Module::Get().WouldLogInfo() \
18 ? Cvb::Telemetry::Log::Create(Cvb::Telemetry::LogLevel::INFO) \
19 : Cvb::Telemetry::Log::Create()) \
20 info
21
22#define CVB_LOG_WARNING \
23 if (auto warn = Cvb::Telemetry::Module::Get().WouldLogWarning() \
24 ? Cvb::Telemetry::Log::Create(Cvb::Telemetry::LogLevel::WARN) \
25 : Cvb::Telemetry::Log::Create()) \
26 warn
27
28#define CVB_LOG_ERROR \
29 if (auto error = Cvb::Telemetry::Module::Get().WouldLogError() \
30 ? Cvb::Telemetry::Log::Create(Cvb::Telemetry::LogLevel::ERR) \
31 : Cvb::Telemetry::Log::Create()) \
32 error
33
34#define CVB_LOG_FATAL \
35 if (auto fatal = Cvb::Telemetry::Module::Get().WouldLogFatal() \
36 ? Cvb::Telemetry::Log::Create(Cvb::Telemetry::LogLevel::FATAL) \
37 : Cvb::Telemetry::Log::Create()) \
38 fatal
39
40// add additional tracing info to the Span object named "NAME"
41#define CVB_TRACE_ADD_(NAME) \
42 if (NAME) \
43 NAME
44
45// add additional tracing info to the default Span object named "span"
46#define CVB_TRACE_ADD CVB_TRACE_ADD_(span)
47
48// starts tracing for a configuration with the Span object namend "NAME"
49#define CVB_TRACE_(NAME) \
50 auto(NAME) = Cvb::Telemetry::Module::Get().WouldTrace() ? Cvb::Telemetry::Span::Create(__PRETTY_FUNCTION__) \
51 : Cvb::Telemetry::Span::Create(); \
52 CVB_TRACE_ADD_(NAME)
53
54// starts tracing for a configuration with the default Span object named "span"
55#define CVB_TRACE CVB_TRACE_(span)
56
57#define _CVB_TRACE_SUCCEED_2(NAME, RES) \
58 NAME.Succeed(RES) // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
59
60#define _CVB_TRACE_SUCCEED_1(NAME) NAME.Succeed() // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
61
62#define _CVB_TRACE_FAIL_2(NAME, MESSAGE) \
63 NAME.Fail(MESSAGE) // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
64
65#define _CVB_TRACE_FAIL_1(NAME) NAME.Fail() // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
66
67#define _CVB_TRACE_MACRO(_1, _2, NAME, ...) NAME // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
68#define CVB_TRACE_SUCCEED_(...) _CVB_TRACE_MACRO(__VA_ARGS__, _CVB_TRACE_SUCCEED_2, _CVB_TRACE_SUCCEED_1)(__VA_ARGS__)
69#define CVB_TRACE_FAIL_(...) _CVB_TRACE_MACRO(__VA_ARGS__, _CVB_TRACE_FAIL_2, _CVB_TRACE_FAIL_1)(__VA_ARGS__)
70#define CVB_TRACE_RETURN_(NAME, RESULT) NAME.Return(RESULT)
71
72// succeeds the span
73#define CVB_TRACE_SUCCEED CVB_TRACE_SUCCEED_(span)
74
75// fails the span
76#define CVB_TRACE_FAIL CVB_TRACE_SUCCEED_(span)
77
78// return through the span
79#define CVB_TRACE_RETURN(RESULT) CVB_TRACE_RETURN_(span, RESULT)
80
81#define CVB_TELEMETRY_MODULE_(NAME, VERSION) \
82 namespace Cvb \
83 { \
84 CVB_BEGIN_INLINE_NS \
85 namespace Telemetry \
86 { \
87 CVB_TELEMETRY_BEGIN_INLINE_NS \
88 \
89 Module &Module::Get() \
90 { \
91 static Module module(NAME, VERSION); \
92 return module; \
93 } \
94 \
95 CVB_TELEMETRY_END_INLINE_NS \
96 } \
97 CVB_END_INLINE_NS \
98 }
99
100#define CVB_TELEMETRY_MODULE CVB_TELEMETRY_MODULE_(CVB_TELEMETRY_MODULE_NAME, CVB_TELEMETRY_MODULE_VERSION)