18#include "pw_log_tokenized/config.h"
21namespace log_tokenized {
25template <
typename T,
unsigned kBits,
unsigned kShift>
28 static constexpr T Get(T value) {
return (value >> kShift) & kMask; }
29 static constexpr T Shift(T value) {
30 return (value <= kMask ? value : T(0)) << kShift;
34 static constexpr T kMask = (T(1) << kBits) - 1;
37template <
typename T,
unsigned kShift>
40 static constexpr T Get(T) {
return 0; }
41 static constexpr T Shift(T) {
return 0; }
57template <
unsigned kLevelBits,
61 typename T = uintptr_t>
64 template <T log_level = 0, T module = 0, T flags = 0, T line = 0>
66 static_assert(log_level < (1 << kLevelBits),
"The level is too large!");
67 static_assert(line < (1 << kLineBits),
"The line number is too large!");
68 static_assert(
flags < (1 << kFlagBits),
"The flags are too large!");
69 static_assert(
module < (1 << kModuleBits),
"The module is too large!");
78 : value_(BitsFromMetadata(log_level,
module,
flags, line)) {}
83 constexpr T
level()
const {
return Level::Get(value_); }
90 constexpr T
flags()
const {
return Flags::Get(value_); }
93 constexpr T
module()
const {
return Module::Get(value_); }
96 constexpr T
value()
const {
return value_; }
105 static constexpr T BitsFromMetadata(T log_level, T
module, T
flags, T line) {
106 return Level::Shift(log_level) | Module::Shift(
module) |
107 Flags::Shift(
flags) | Line::Shift(line);
112 static_assert(kLevelBits + kLineBits + kFlagBits + kModuleBits <=
#define PW_LOG_TOKENIZED_LINE_BITS
Definition: config.h:86
constexpr T flags() const
The flags provided to the log call.
Definition: metadata.h:90
constexpr T level() const
The log level of this message.
Definition: metadata.h:83
constexpr T line_number() const
Definition: metadata.h:87
constexpr T value() const
The underlying packed metadata.
Definition: metadata.h:96
constexpr GenericMetadata(T log_level, T module, T flags, T line)
Definition: metadata.h:77
#define PW_LOG_TOKENIZED_MODULE_BITS
Definition: config.h:97
#define PW_LOG_TOKENIZED_LEVEL_BITS
Bits to allocate for the log level. Defaults to PW_LOG_LEVEL_BITS (3).
Definition: config.h:68
constexpr T module() const
The 16-bit tokenized version of the module name (PW_LOG_MODULE_NAME).
Definition: metadata.h:93
#define PW_LOG_TOKENIZED_FLAG_BITS
Bits to use for implementation-defined flags. Defaults to 2.
Definition: config.h:91
The Pigweed namespace.
Definition: alignment.h:27
Definition: metadata.h:26