diff options
Diffstat (limited to 'pw_protobuf/public/pw_protobuf/encoder.h')
-rw-r--r-- | pw_protobuf/public/pw_protobuf/encoder.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/pw_protobuf/public/pw_protobuf/encoder.h b/pw_protobuf/public/pw_protobuf/encoder.h index 21b12cb1f..dccc6869a 100644 --- a/pw_protobuf/public/pw_protobuf/encoder.h +++ b/pw_protobuf/public/pw_protobuf/encoder.h @@ -221,7 +221,7 @@ class StreamEncoder { // Writes a repeated uint64 using packed encoding. // // Precondition: Encoder has no active child encoder. - Status WritePackedUint64(uint64_t field_number, span<const uint64_t> values) { + Status WritePackedUint64(uint32_t field_number, span<const uint64_t> values) { return WritePackedVarints( field_number, values, internal::VarintType::kNormal); } @@ -240,7 +240,8 @@ class StreamEncoder { // // Precondition: Encoder has no active child encoder. Status WriteInt32(uint32_t field_number, int32_t value) { - return WriteUint64(field_number, value); + // Signed numbers are sent as 2's complement so this cast is correct. + return WriteUint64(field_number, static_cast<uint64_t>(value)); } // Writes a repeated int32 using packed encoding. @@ -268,7 +269,8 @@ class StreamEncoder { // // Precondition: Encoder has no active child encoder. Status WriteInt64(uint32_t field_number, int64_t value) { - return WriteUint64(field_number, value); + // Signed numbers are sent as 2's complement so this cast is correct. + return WriteUint64(field_number, static_cast<uint64_t>(value)); } // Writes a repeated int64 using packed encoding. @@ -729,16 +731,16 @@ class StreamEncoder { } WriteVarint(FieldKey(field_number, WireType::kDelimited)) - .IgnoreError(); // TODO(b/242598609): Handle Status properly + .IgnoreError(); // TODO: b/242598609 - Handle Status properly WriteVarint(payload_size) - .IgnoreError(); // TODO(b/242598609): Handle Status properly + .IgnoreError(); // TODO: b/242598609 - Handle Status properly for (T value : values) { if (encode_type == internal::VarintType::kZigZag) { WriteZigzagVarint(static_cast<std::make_signed_t<T>>(value)) - .IgnoreError(); // TODO(b/242598609): Handle Status properly + .IgnoreError(); // TODO: b/242598609 - Handle Status properly } else { WriteVarint(value) - .IgnoreError(); // TODO(b/242598609): Handle Status properly + .IgnoreError(); // TODO: b/242598609 - Handle Status properly } } |