19#include "pw_assert/assert.h"
21namespace pw::protobuf {
28inline constexpr static uint32_t kMaxFieldNumber = (1u << 29) - 1;
29inline constexpr static uint32_t kFirstReservedNumber = 19000;
30inline constexpr static uint32_t kLastReservedNumber = 19999;
32constexpr bool ValidFieldNumber(uint32_t field_number) {
33 return field_number != 0 && field_number <= kMaxFieldNumber &&
34 !(field_number >= kFirstReservedNumber &&
35 field_number <= kLastReservedNumber);
38constexpr bool ValidFieldNumber(uint64_t field_number) {
39 if (field_number > std::numeric_limits<uint32_t>::max()) {
42 return ValidFieldNumber(
static_cast<uint32_t
>(field_number));
58 static constexpr bool IsValidKey(uint64_t key) {
59 uint64_t field_number = key >> kFieldNumberShift;
60 uint32_t wire_type = key & kWireTypeMask;
62 return ValidFieldNumber(field_number) && (wire_type <= 2 || wire_type == 5);
68 constexpr FieldKey(uint32_t field_number, WireType wire_type)
69 : key_(field_number << kFieldNumberShift |
70 static_cast<uint32_t
>(wire_type)) {
71 PW_DASSERT(ValidFieldNumber(field_number));
77 constexpr FieldKey(uint32_t key) : key_(key) {
78 PW_DASSERT(ValidFieldNumber(field_number()));
81 constexpr operator uint32_t() {
return key_; }
83 constexpr uint32_t field_number()
const {
return key_ >> kFieldNumberShift; }
84 constexpr WireType wire_type()
const {
85 return static_cast<WireType
>(key_ & kWireTypeMask);
89 static constexpr unsigned int kFieldNumberShift = 3u;
90 static constexpr unsigned int kWireTypeMask = (1u << kFieldNumberShift) - 1u;
95[[deprecated(
"Use the FieldKey class")]]
constexpr uint32_t MakeKey(
96 uint32_t field_number, WireType wire_type) {
97 return FieldKey(field_number, wire_type);
Definition: wire_format.h:54