This commit is contained in:
J. Nick Koston 2025-07-26 14:19:35 -10:00
parent 33ec5e195f
commit 09a30689e9
No known key found for this signature in database
3 changed files with 505 additions and 507 deletions

File diff suppressed because it is too large Load Diff

View File

@ -503,7 +503,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of an int32 field to the total message size
*/
inline void add_int32_field(uint32_t field_id_size, int32_t value) {
inline void add_int32(uint32_t field_id_size, int32_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -522,7 +522,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of an int32 field to the total message size (repeated field version)
*/
inline void add_int32_field_repeated(uint32_t field_id_size, int32_t value) {
inline void add_int32_repeated(uint32_t field_id_size, int32_t value) {
// Always calculate size for repeated fields
if (value < 0) {
// Negative values are encoded as 10-byte varints in protobuf
@ -536,7 +536,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a uint32 field to the total message size
*/
inline void add_uint32_field(uint32_t field_id_size, uint32_t value) {
inline void add_uint32(uint32_t field_id_size, uint32_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -549,7 +549,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a uint32 field to the total message size (repeated field version)
*/
inline void add_uint32_field_repeated(uint32_t field_id_size, uint32_t value) {
inline void add_uint32_repeated(uint32_t field_id_size, uint32_t value) {
// Always calculate size for repeated fields
total_size_ += field_id_size + varint(value);
}
@ -557,7 +557,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a boolean field to the total message size
*/
inline void add_bool_field(uint32_t field_id_size, bool value) {
inline void add_bool(uint32_t field_id_size, bool value) {
// Skip calculation if value is false
if (!value) {
return; // No need to update total_size_
@ -570,7 +570,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a boolean field to the total message size (repeated field version)
*/
inline void add_bool_field_repeated(uint32_t field_id_size, bool value) {
inline void add_bool_repeated(uint32_t field_id_size, bool value) {
// Always calculate size for repeated fields
// Boolean fields always use 1 byte
total_size_ += field_id_size + 1;
@ -579,7 +579,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a float field to the total message size
*/
inline void add_float_field(uint32_t field_id_size, float value) {
inline void add_float(uint32_t field_id_size, float value) {
if (value != 0.0f) {
total_size_ += field_id_size + 4;
}
@ -591,7 +591,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a fixed32 field to the total message size
*/
inline void add_fixed32_field(uint32_t field_id_size, uint32_t value) {
inline void add_fixed32(uint32_t field_id_size, uint32_t value) {
if (value != 0) {
total_size_ += field_id_size + 4;
}
@ -603,7 +603,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a sfixed32 field to the total message size
*/
inline void add_sfixed32_field(uint32_t field_id_size, int32_t value) {
inline void add_sfixed32(uint32_t field_id_size, int32_t value) {
if (value != 0) {
total_size_ += field_id_size + 4;
}
@ -617,7 +617,7 @@ class ProtoSize {
*
* Enum fields are encoded as uint32 varints.
*/
inline void add_enum_field(uint32_t field_id_size, uint32_t value) {
inline void add_enum(uint32_t field_id_size, uint32_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -632,7 +632,7 @@ class ProtoSize {
*
* Enum fields are encoded as uint32 varints.
*/
inline void add_enum_field_repeated(uint32_t field_id_size, uint32_t value) {
inline void add_enum_repeated(uint32_t field_id_size, uint32_t value) {
// Always calculate size for repeated fields
// Enums are encoded as uint32
total_size_ += field_id_size + varint(value);
@ -643,7 +643,7 @@ class ProtoSize {
*
* Sint32 fields use ZigZag encoding, which is more efficient for negative values.
*/
inline void add_sint32_field(uint32_t field_id_size, int32_t value) {
inline void add_sint32(uint32_t field_id_size, int32_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -659,7 +659,7 @@ class ProtoSize {
*
* Sint32 fields use ZigZag encoding, which is more efficient for negative values.
*/
inline void add_sint32_field_repeated(uint32_t field_id_size, int32_t value) {
inline void add_sint32_repeated(uint32_t field_id_size, int32_t value) {
// Always calculate size for repeated fields
// ZigZag encoding for sint32: (n << 1) ^ (n >> 31)
uint32_t zigzag = (static_cast<uint32_t>(value) << 1) ^ (static_cast<uint32_t>(value >> 31));
@ -669,7 +669,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of an int64 field to the total message size
*/
inline void add_int64_field(uint32_t field_id_size, int64_t value) {
inline void add_int64(uint32_t field_id_size, int64_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -682,7 +682,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of an int64 field to the total message size (repeated field version)
*/
inline void add_int64_field_repeated(uint32_t field_id_size, int64_t value) {
inline void add_int64_repeated(uint32_t field_id_size, int64_t value) {
// Always calculate size for repeated fields
total_size_ += field_id_size + varint(value);
}
@ -690,7 +690,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a uint64 field to the total message size
*/
inline void add_uint64_field(uint32_t field_id_size, uint64_t value) {
inline void add_uint64(uint32_t field_id_size, uint64_t value) {
// Skip calculation if value is zero
if (value == 0) {
return; // No need to update total_size_
@ -703,7 +703,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a uint64 field to the total message size (repeated field version)
*/
inline void add_uint64_field_repeated(uint32_t field_id_size, uint64_t value) {
inline void add_uint64_repeated(uint32_t field_id_size, uint64_t value) {
// Always calculate size for repeated fields
total_size_ += field_id_size + varint(value);
}
@ -714,7 +714,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a string field using length
*/
inline void add_string_field(uint32_t field_id_size, size_t len) {
inline void add_string(uint32_t field_id_size, size_t len) {
// Skip calculation if string is empty
if (len == 0) {
return; // No need to update total_size_
@ -727,7 +727,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a string/bytes field to the total message size (repeated field version)
*/
inline void add_string_field_repeated(uint32_t field_id_size, const std::string &str) {
inline void add_string_repeated(uint32_t field_id_size, const std::string &str) {
// Always calculate size for repeated fields
const uint32_t str_size = static_cast<uint32_t>(str.size());
total_size_ += field_id_size + varint(str_size) + str_size;
@ -736,7 +736,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a bytes field to the total message size
*/
inline void add_bytes_field(uint32_t field_id_size, size_t len) {
inline void add_bytes(uint32_t field_id_size, size_t len) {
// Skip calculation if bytes is empty
if (len == 0) {
return; // No need to update total_size_
@ -749,7 +749,7 @@ class ProtoSize {
/**
* @brief Calculates and adds the size of a bytes field to the total message size (repeated field version)
*/
inline void add_bytes_field_repeated(uint32_t field_id_size, size_t len) {
inline void add_bytes_repeated(uint32_t field_id_size, size_t len) {
// Always calculate size for repeated fields
// Field ID + length varint + data bytes
total_size_ += field_id_size + varint(static_cast<uint32_t>(len)) + static_cast<uint32_t>(len);

View File

@ -275,7 +275,7 @@ class TypeInfo(ABC):
Args:
name: Field name
force: Whether this is for a repeated field
base_method: Base method name (e.g., "add_int32_field")
base_method: Base method name (e.g., "add_int32")
value_expr: Optional value expression (defaults to name)
"""
field_id_size = self.calculate_field_id_size()
@ -389,7 +389,7 @@ class DoubleType(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_double_field({field_id_size}, {name});"
return f"size.add_double({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 8
@ -413,7 +413,7 @@ class FloatType(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_float_field({field_id_size}, {name});"
return f"size.add_float({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 4
@ -436,7 +436,7 @@ class Int64Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_int64_field")
return self._get_simple_size_calculation(name, force, "add_int64")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint
@ -456,7 +456,7 @@ class UInt64Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_uint64_field")
return self._get_simple_size_calculation(name, force, "add_uint64")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint
@ -476,7 +476,7 @@ class Int32Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_int32_field")
return self._get_simple_size_calculation(name, force, "add_int32")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint
@ -497,7 +497,7 @@ class Fixed64Type(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_fixed64_field({field_id_size}, {name});"
return f"size.add_fixed64({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 8
@ -521,7 +521,7 @@ class Fixed32Type(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_fixed32_field({field_id_size}, {name});"
return f"size.add_fixed32({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 4
@ -543,7 +543,7 @@ class BoolType(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_bool_field")
return self._get_simple_size_calculation(name, force, "add_bool")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 1 # field ID + 1 byte
@ -624,18 +624,18 @@ class StringType(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
# For SOURCE_CLIENT only messages, use the string field directly
if not self._needs_encode:
return self._get_simple_size_calculation(name, force, "add_string_field")
return self._get_simple_size_calculation(name, force, "add_string")
# Check if this is being called from a repeated field context
# In that case, 'name' will be 'it' and we need to use the repeated version
if name == "it":
# For repeated fields, we need to use add_string_field_repeated which includes field ID
# For repeated fields, we need to use add_string_repeated which includes field ID
field_id_size = self.calculate_field_id_size()
return f"size.add_string_field_repeated({field_id_size}, it);"
return f"size.add_string_repeated({field_id_size}, it);"
# For messages that need encoding, use the StringRef size
field_id_size = self.calculate_field_id_size()
return f"size.add_string_field({field_id_size}, this->{self.field_name}_ref_.size());"
return f"size.add_string({field_id_size}, this->{self.field_name}_ref_.size());"
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 8 # field ID + 8 bytes typical string
@ -770,7 +770,7 @@ class BytesType(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return f"size.add_bytes_field({self.calculate_field_id_size()}, this->{self.field_name}_len_);"
return f"size.add_bytes({self.calculate_field_id_size()}, this->{self.field_name}_len_);"
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 8 # field ID + 8 bytes typical bytes
@ -846,10 +846,10 @@ class FixedArrayBytesType(TypeInfo):
if force:
# For repeated fields, always calculate size (no zero check)
return f"size.add_bytes_field_repeated({field_id_size}, {length_field});"
return f"size.add_bytes_repeated({field_id_size}, {length_field});"
else:
# For non-repeated fields, add_bytes_field already checks for zero
return f"size.add_bytes_field({field_id_size}, {length_field});"
# For non-repeated fields, add_bytes already checks for zero
return f"size.add_bytes({field_id_size}, {length_field});"
def get_estimated_size(self) -> int:
# Estimate based on typical BLE advertisement size
@ -876,7 +876,7 @@ class UInt32Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_uint32_field")
return self._get_simple_size_calculation(name, force, "add_uint32")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint
@ -913,7 +913,7 @@ class EnumType(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(
name, force, "add_enum_field", f"static_cast<uint32_t>({name})"
name, force, "add_enum", f"static_cast<uint32_t>({name})"
)
def get_estimated_size(self) -> int:
@ -935,7 +935,7 @@ class SFixed32Type(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_sfixed32_field({field_id_size}, {name});"
return f"size.add_sfixed32({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 4
@ -959,7 +959,7 @@ class SFixed64Type(TypeInfo):
def get_size_calculation(self, name: str, force: bool = False) -> str:
field_id_size = self.calculate_field_id_size()
return f"size.add_sfixed64_field({field_id_size}, {name});"
return f"size.add_sfixed64({field_id_size}, {name});"
def get_fixed_size_bytes(self) -> int:
return 8
@ -982,7 +982,7 @@ class SInt32Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_sint32_field")
return self._get_simple_size_calculation(name, force, "add_sint32")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint
@ -1002,7 +1002,7 @@ class SInt64Type(TypeInfo):
return o
def get_size_calculation(self, name: str, force: bool = False) -> str:
return self._get_simple_size_calculation(name, force, "add_sint64_field")
return self._get_simple_size_calculation(name, force, "add_sint64")
def get_estimated_size(self) -> int:
return self.calculate_field_id_size() + 3 # field ID + 3 bytes typical varint