mirror of
https://github.com/esphome/esphome.git
synced 2025-08-03 08:57:47 +00:00
fix
This commit is contained in:
parent
df72954c08
commit
ab4a21e84d
@ -164,67 +164,67 @@ void encode_bytes_field(ProtoWriteBuffer &buffer, const void *field_ptr, uint8_t
|
||||
// Type-specific size calculation functions
|
||||
void size_string_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *str = static_cast<const std::string *>(field_ptr);
|
||||
ProtoSize::add_string_field(total_size, 1, *str, force);
|
||||
ProtoSize::add_string_field(total_size, field_num, *str, force);
|
||||
}
|
||||
|
||||
void size_fixed32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const uint32_t *>(field_ptr);
|
||||
ProtoSize::add_fixed_field<4>(total_size, 1, *val != 0 || force, force);
|
||||
ProtoSize::add_fixed_field<4>(total_size, field_num, *val != 0 || force, force);
|
||||
}
|
||||
|
||||
void size_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const bool *>(field_ptr);
|
||||
ProtoSize::add_bool_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_bool_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_float_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const float *>(field_ptr);
|
||||
ProtoSize::add_fixed_field<4>(total_size, 1, *val != 0.0f || force, force);
|
||||
ProtoSize::add_fixed_field<4>(total_size, field_num, *val != 0.0f || force, force);
|
||||
}
|
||||
|
||||
void size_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const int32_t *>(field_ptr);
|
||||
ProtoSize::add_int32_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_int32_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const uint32_t *>(field_ptr);
|
||||
ProtoSize::add_uint32_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_uint32_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const int64_t *>(field_ptr);
|
||||
ProtoSize::add_int64_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_int64_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const uint64_t *>(field_ptr);
|
||||
ProtoSize::add_uint64_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_uint64_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const int32_t *>(field_ptr);
|
||||
ProtoSize::add_sint32_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_sint32_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const int64_t *>(field_ptr);
|
||||
ProtoSize::add_sint64_field(total_size, 1, *val, force);
|
||||
ProtoSize::add_sint64_field(total_size, field_num, *val, force);
|
||||
}
|
||||
|
||||
void size_fixed64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const uint64_t *>(field_ptr);
|
||||
ProtoSize::add_fixed_field<8>(total_size, 1, *val != 0 || force, force);
|
||||
ProtoSize::add_fixed_field<8>(total_size, field_num, *val != 0 || force, force);
|
||||
}
|
||||
|
||||
void size_double_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const double *>(field_ptr);
|
||||
ProtoSize::add_fixed_field<8>(total_size, 1, *val != 0.0 || force, force);
|
||||
ProtoSize::add_fixed_field<8>(total_size, field_num, *val != 0.0 || force, force);
|
||||
}
|
||||
|
||||
void size_bytes_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *str = static_cast<const std::string *>(field_ptr);
|
||||
ProtoSize::add_string_field(total_size, 1, *str, force);
|
||||
ProtoSize::add_string_field(total_size, field_num, *str, force);
|
||||
}
|
||||
|
||||
// Type-specific decode functions
|
||||
@ -404,56 +404,56 @@ void encode_repeated_double_field(ProtoWriteBuffer &buffer, const void *field_pt
|
||||
void size_repeated_string_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<std::string> *>(field_ptr);
|
||||
for (const auto &item : *vec) {
|
||||
ProtoSize::add_string_field(total_size, 1, item, true);
|
||||
ProtoSize::add_string_field(total_size, field_num, item, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_bool_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<bool> *>(field_ptr);
|
||||
for (bool val : *vec) {
|
||||
ProtoSize::add_bool_field(total_size, 1, val, true);
|
||||
ProtoSize::add_bool_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_uint32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<uint32_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_uint32_field(total_size, 1, val, true);
|
||||
ProtoSize::add_uint32_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_int32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<int32_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_int32_field(total_size, 1, val, true);
|
||||
ProtoSize::add_int32_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_uint64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<uint64_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_uint64_field(total_size, 1, val, true);
|
||||
ProtoSize::add_uint64_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_int64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<int64_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_int64_field(total_size, 1, val, true);
|
||||
ProtoSize::add_int64_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_sint32_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<int32_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_sint32_field(total_size, 1, val, true);
|
||||
ProtoSize::add_sint32_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
void size_repeated_sint64_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<int64_t> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_sint64_field(total_size, 1, val, true);
|
||||
ProtoSize::add_sint64_field(total_size, field_num, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -461,7 +461,9 @@ void size_repeated_fixed32_field(uint32_t &total_size, const void *field_ptr, ui
|
||||
const auto *vec = static_cast<const std::vector<uint32_t> *>(field_ptr);
|
||||
size_t count = vec->size();
|
||||
if (count > 0) {
|
||||
total_size += count * (1 + 4); // field_id + 4 bytes per item
|
||||
// Calculate proper field tag size
|
||||
uint32_t tag_size = ProtoSize::varint(static_cast<uint32_t>((field_num << 3) | 5)); // wire type 5 for fixed32
|
||||
total_size += count * (tag_size + 4); // field tag + 4 bytes per item
|
||||
}
|
||||
}
|
||||
|
||||
@ -469,7 +471,9 @@ void size_repeated_fixed64_field(uint32_t &total_size, const void *field_ptr, ui
|
||||
const auto *vec = static_cast<const std::vector<uint64_t> *>(field_ptr);
|
||||
size_t count = vec->size();
|
||||
if (count > 0) {
|
||||
total_size += count * (1 + 8); // field_id + 8 bytes per item
|
||||
// Calculate proper field tag size
|
||||
uint32_t tag_size = ProtoSize::varint(static_cast<uint32_t>((field_num << 3) | 1)); // wire type 1 for fixed64
|
||||
total_size += count * (tag_size + 8); // field tag + 8 bytes per item
|
||||
}
|
||||
}
|
||||
|
||||
@ -477,7 +481,9 @@ void size_repeated_float_field(uint32_t &total_size, const void *field_ptr, uint
|
||||
const auto *vec = static_cast<const std::vector<float> *>(field_ptr);
|
||||
size_t count = vec->size();
|
||||
if (count > 0) {
|
||||
total_size += count * (1 + 4); // field_id + 4 bytes per item
|
||||
// Calculate proper field tag size
|
||||
uint32_t tag_size = ProtoSize::varint(static_cast<uint32_t>((field_num << 3) | 5)); // wire type 5 for float
|
||||
total_size += count * (tag_size + 4); // field tag + 4 bytes per item
|
||||
}
|
||||
}
|
||||
|
||||
@ -485,7 +491,9 @@ void size_repeated_double_field(uint32_t &total_size, const void *field_ptr, uin
|
||||
const auto *vec = static_cast<const std::vector<double> *>(field_ptr);
|
||||
size_t count = vec->size();
|
||||
if (count > 0) {
|
||||
total_size += count * (1 + 8); // field_id + 8 bytes per item
|
||||
// Calculate proper field tag size
|
||||
uint32_t tag_size = ProtoSize::varint(static_cast<uint32_t>((field_num << 3) | 1)); // wire type 1 for double
|
||||
total_size += count * (tag_size + 8); // field tag + 8 bytes per item
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ inline void encode_enum_field(ProtoWriteBuffer &buffer, const void *field_ptr, u
|
||||
template<typename EnumType>
|
||||
inline void size_enum_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num, bool force) {
|
||||
const auto *val = static_cast<const EnumType *>(field_ptr);
|
||||
ProtoSize::add_enum_field(total_size, 1, static_cast<uint32_t>(*val), force);
|
||||
ProtoSize::add_enum_field(total_size, field_num, static_cast<uint32_t>(*val), force);
|
||||
}
|
||||
|
||||
template<typename EnumType> inline bool decode_enum_field(void *field_ptr, ProtoVarInt value) {
|
||||
@ -47,14 +47,14 @@ template<typename EnumType>
|
||||
inline void size_repeated_enum_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<EnumType> *>(field_ptr);
|
||||
for (const auto &val : *vec) {
|
||||
ProtoSize::add_enum_field(total_size, 1, static_cast<uint32_t>(val), true);
|
||||
ProtoSize::add_enum_field(total_size, field_num, static_cast<uint32_t>(val), true);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename MessageType>
|
||||
inline void size_repeated_message_field(uint32_t &total_size, const void *field_ptr, uint8_t field_num) {
|
||||
const auto *vec = static_cast<const std::vector<MessageType> *>(field_ptr);
|
||||
ProtoSize::add_repeated_message<MessageType>(total_size, 1, *vec);
|
||||
ProtoSize::add_repeated_message<MessageType>(total_size, field_num, *vec);
|
||||
}
|
||||
|
||||
} // namespace api
|
||||
|
Loading…
x
Reference in New Issue
Block a user