From 767ec53cfa3853a0317831eff5de5515718d44cd Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 21 Jul 2025 13:18:10 -1000 Subject: [PATCH] cleanup --- script/api_protobuf/api_protobuf.py | 40 ++++++++++++----------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/script/api_protobuf/api_protobuf.py b/script/api_protobuf/api_protobuf.py index ccc87fb5a6..1b16b1e842 100755 --- a/script/api_protobuf/api_protobuf.py +++ b/script/api_protobuf/api_protobuf.py @@ -929,32 +929,26 @@ class FixedArrayRepeatedType(TypeInfo): @property def encode_content(self) -> str: - # Special case for single-element arrays - no loop needed + # Helper to generate encode statement for a single element + def encode_element(element: str) -> str: + if isinstance(self._ti, EnumType): + return f"buffer.{self._ti.encode_func}({self.number}, static_cast({element}), true);" + else: + return f"buffer.{self._ti.encode_func}({self.number}, {element}, true);" + + # Unroll small arrays for efficiency if self.array_size == 1: - if isinstance(self._ti, EnumType): - return f"buffer.{self._ti.encode_func}({self.number}, static_cast(this->{self.field_name}[0]), true);" - else: - return f"buffer.{self._ti.encode_func}({self.number}, this->{self.field_name}[0], true);" + return encode_element(f"this->{self.field_name}[0]") + elif self.array_size == 2: + return ( + encode_element(f"this->{self.field_name}[0]") + + "\n " + + encode_element(f"this->{self.field_name}[1]") + ) - # Special case for 2-element arrays - unroll the loop - if self.array_size == 2: - if isinstance(self._ti, EnumType): - return ( - f"buffer.{self._ti.encode_func}({self.number}, static_cast(this->{self.field_name}[0]), true);\n" - f" buffer.{self._ti.encode_func}({self.number}, static_cast(this->{self.field_name}[1]), true);" - ) - else: - return ( - f"buffer.{self._ti.encode_func}({self.number}, this->{self.field_name}[0], true);\n" - f" buffer.{self._ti.encode_func}({self.number}, this->{self.field_name}[1], true);" - ) - - # 3 or more elements need a loop + # Use loops for larger arrays o = f"for (const auto &it : this->{self.field_name}) {{\n" - if isinstance(self._ti, EnumType): - o += f" buffer.{self._ti.encode_func}({self.number}, static_cast(it), true);\n" - else: - o += f" buffer.{self._ti.encode_func}({self.number}, it, true);\n" + o += f" {encode_element('it')}\n" o += "}" return o