This commit is contained in:
J. Nick Koston 2025-07-21 13:18:10 -10:00
parent 7b9acd39e1
commit 767ec53cfa
No known key found for this signature in database

View File

@ -929,32 +929,26 @@ class FixedArrayRepeatedType(TypeInfo):
@property @property
def encode_content(self) -> str: 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<uint32_t>({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 self.array_size == 1:
if isinstance(self._ti, EnumType): return encode_element(f"this->{self.field_name}[0]")
return f"buffer.{self._ti.encode_func}({self.number}, static_cast<uint32_t>(this->{self.field_name}[0]), true);" elif self.array_size == 2:
else:
return f"buffer.{self._ti.encode_func}({self.number}, this->{self.field_name}[0], true);"
# Special case for 2-element arrays - unroll the loop
if self.array_size == 2:
if isinstance(self._ti, EnumType):
return ( return (
f"buffer.{self._ti.encode_func}({self.number}, static_cast<uint32_t>(this->{self.field_name}[0]), true);\n" encode_element(f"this->{self.field_name}[0]")
f" buffer.{self._ti.encode_func}({self.number}, static_cast<uint32_t>(this->{self.field_name}[1]), true);" + "\n "
) + encode_element(f"this->{self.field_name}[1]")
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" o = f"for (const auto &it : this->{self.field_name}) {{\n"
if isinstance(self._ti, EnumType): o += f" {encode_element('it')}\n"
o += f" buffer.{self._ti.encode_func}({self.number}, static_cast<uint32_t>(it), true);\n"
else:
o += f" buffer.{self._ti.encode_func}({self.number}, it, true);\n"
o += "}" o += "}"
return o return o