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_); }
94 constexpr T
module()
const {
return Module::Get(value_); }
97 constexpr T
value()
const {
return value_; }
106 static constexpr T BitsFromMetadata(T log_level, T
module, T
flags, T line) {
107 return Level::Shift(log_level) | Module::Shift(
module) |
108 Flags::Shift(
flags) | Line::Shift(line);
113 static_assert(kLevelBits + kLineBits + kFlagBits + kModuleBits <=
#define PW_LOG_TOKENIZED_LINE_BITS
Definition: config.h:87
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:97
constexpr GenericMetadata(T log_level, T module, T flags, T line)
Definition: metadata.h:77
#define PW_LOG_TOKENIZED_MODULE_BITS
Definition: config.h:99
#define PW_LOG_TOKENIZED_LEVEL_BITS
Definition: config.h:69
constexpr T module() const
Definition: metadata.h:94
#define PW_LOG_TOKENIZED_FLAG_BITS
Bits to use for implementation-defined flags. Defaults to 2.
Definition: config.h:92
The Pigweed namespace.
Definition: alignment.h:27
Definition: metadata.h:26