This commit is contained in:
J. Nick Koston 2025-07-11 06:45:49 -10:00
parent bde3d025dc
commit be7550f5da
No known key found for this signature in database

View File

@ -451,8 +451,9 @@ void ProtoMessage::encode(ProtoWriteBuffer buffer) const {
const uint8_t *base = reinterpret_cast<const uint8_t *>(this);
// Encode regular fields
const FieldMeta *fields = get_field_metadata();
uint8_t field_count = get_field_count();
if (field_count) {
const FieldMeta *fields = get_field_metadata();
for (uint8_t i = 0; i < field_count; i++) {
const void *field_addr = base + fields[i].get_offset();
@ -466,10 +467,14 @@ void ProtoMessage::encode(ProtoWriteBuffer buffer) const {
encode_field(buffer, fields[i].get_type(), fields[i].field_num, field_addr, false);
}
}
}
// Encode repeated fields - reuse the same encode_field function!
const RepeatedFieldMeta *repeated_fields = get_repeated_field_metadata();
uint8_t repeated_count = get_repeated_field_count();
if (repeated_count == 0) {
return; // No repeated fields to process
}
const RepeatedFieldMeta *repeated_fields = get_repeated_field_metadata();
for (uint8_t i = 0; i < repeated_count; i++) {
const void *field_addr = base + repeated_fields[i].get_offset();
@ -501,9 +506,9 @@ void ProtoMessage::calculate_size(uint32_t &total_size) const {
const uint8_t *base = reinterpret_cast<const uint8_t *>(this);
// Calculate size for regular fields
const FieldMeta *fields = get_field_metadata();
uint8_t field_count = get_field_count();
if (field_count) {
const FieldMeta *fields = get_field_metadata();
for (uint8_t i = 0; i < field_count; i++) {
const void *field_addr = base + fields[i].get_offset();
@ -516,10 +521,14 @@ void ProtoMessage::calculate_size(uint32_t &total_size) const {
calculate_field_size(total_size, fields[i].get_type(), fields[i].get_precalced_size(), field_addr, false);
}
}
}
// Calculate size for repeated fields - reuse the same calculate_field_size function!
const RepeatedFieldMeta *repeated_fields = get_repeated_field_metadata();
uint8_t repeated_count = get_repeated_field_count();
if (repeated_count == 0) {
return; // No repeated fields to process
}
const RepeatedFieldMeta *repeated_fields = get_repeated_field_metadata();
for (uint8_t i = 0; i < repeated_count; i++) {
const void *field_addr = base + repeated_fields[i].get_offset();