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(LEVEL) Cvb::Telemetry::Module::Get().WouldLogAtLevel(LEVEL) && Cvb::Telemetry::Log::Create(LEVEL)
11#define CVB_LOG_DEBUG _CVB_LOG(Cvb::Telemetry::LogLevel::LevelDebug)
12#define CVB_LOG_INFO _CVB_LOG(Cvb::Telemetry::LogLevel::LevelInfo)
13#define CVB_LOG_WARNING _CVB_LOG(Cvb::Telemetry::LogLevel::LevelWarn)
14#define CVB_LOG_ERROR _CVB_LOG(Cvb::Telemetry::LogLevel::LevelError)
15#define CVB_LOG_FATAL _CVB_LOG(Cvb::Telemetry::LogLevel::LevelFatal)
16
17// add additional tracing info to the Span object named "NAME"
18#define CVB_TRACE_ADD_(NAME) bool(NAME) && NAME
19
20// add additional tracing info to the default Span object named "span"
21#define CVB_TRACE_ADD CVB_TRACE_ADD_(span)
22
23// starts tracing for a configuration with the Span object namend "NAME"
24#define CVB_TRACE_(NAME) \
25 auto(NAME) = Cvb::Telemetry::Module::Get().WouldTrace() ? Cvb::Telemetry::Span::Create(__PRETTY_FUNCTION__) \
26 : Cvb::Telemetry::Span::Create(); \
27 CVB_TRACE_ADD_(NAME)
28
29// starts tracing for a configuration with the default Span object named "span"
30#define CVB_TRACE CVB_TRACE_(span)
31
32#define _CVB_TRACE_SUCCEED_2(NAME, RES) \
33 NAME.Succeed(RES) // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
34
35#define _CVB_TRACE_SUCCEED_1(NAME) NAME.Succeed() // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
36
37#define _CVB_TRACE_FAIL_2(NAME, MESSAGE) \
38 NAME.Fail(MESSAGE) // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
39
40#define _CVB_TRACE_FAIL_1(NAME) NAME.Fail() // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
41
42#define _CVB_TRACE_MACRO(_1, _2, NAME, ...) NAME // NOLINT(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
43#define CVB_TRACE_SUCCEED_(...) _CVB_TRACE_MACRO(__VA_ARGS__, _CVB_TRACE_SUCCEED_2, _CVB_TRACE_SUCCEED_1)(__VA_ARGS__)
44#define CVB_TRACE_FAIL_(...) _CVB_TRACE_MACRO(__VA_ARGS__, _CVB_TRACE_FAIL_2, _CVB_TRACE_FAIL_1)(__VA_ARGS__)
45#define CVB_TRACE_RETURN_(NAME, RESULT) NAME.Return(RESULT)
46
47// succeeds the span
48#define CVB_TRACE_SUCCEED CVB_TRACE_SUCCEED_(span)
49
50// fails the span
51#define CVB_TRACE_FAIL CVB_TRACE_FAIL_(span)
52
53// return through the span
54#define CVB_TRACE_RETURN(RESULT) CVB_TRACE_RETURN_(span, RESULT)
55
56#define CVB_TELEMETRY_MODULE_(NAME, VERSION) \
57 namespace Cvb \
58 { \
59 CVB_BEGIN_INLINE_NS \
60 namespace Telemetry \
61 { \
62 CVB_TELEMETRY_BEGIN_INLINE_NS \
63 \
64 Module &Module::Get() \
65 { \
66 static Module module(NAME, VERSION); \
67 return module; \
68 } \
69 \
70 CVB_TELEMETRY_END_INLINE_NS \
71 } \
72 CVB_END_INLINE_NS \
73 }
74
75#define CVB_TELEMETRY_MODULE CVB_TELEMETRY_MODULE_(CVB_TELEMETRY_MODULE_NAME, CVB_TELEMETRY_MODULE_VERSION)