mirror of
https://github.com/esphome/esphome.git
synced 2025-11-17 07:15:48 +00:00
tweak
This commit is contained in:
@@ -232,20 +232,24 @@ class ProtoWriteBuffer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value < (1ULL << 21)) {
|
uint8_t *p;
|
||||||
// 2-3 bytes - common for field IDs and lengths
|
if (value < (1ULL << 14)) {
|
||||||
uint32_t size = (value < (1ULL << 14)) ? 2 : 3;
|
// 2 bytes - common for medium field IDs and lengths
|
||||||
buffer->resize(start + size);
|
buffer->resize(start + 2);
|
||||||
uint8_t *p = buffer->data() + start;
|
p = buffer->data() + start;
|
||||||
p[0] = (value & 0x7F) | 0x80;
|
p[0] = (value & 0x7F) | 0x80;
|
||||||
p[1] = (value >> 7) & 0x7F | (size == 3 ? 0x80 : 0);
|
p[1] = (value >> 7) & 0x7F;
|
||||||
if (size == 3) {
|
return;
|
||||||
p[2] = (value >> 14) & 0x7F;
|
}
|
||||||
}
|
if (value < (1ULL << 21)) {
|
||||||
|
// 3 bytes - rare
|
||||||
|
buffer->resize(start + 3);
|
||||||
|
p = buffer->data() + start;
|
||||||
|
p[0] = (value & 0x7F) | 0x80;
|
||||||
|
p[1] = ((value >> 7) & 0x7F) | 0x80;
|
||||||
|
p[2] = (value >> 14) & 0x7F;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *p;
|
|
||||||
|
|
||||||
// Rare case: 4-10 byte values - calculate size from bit position
|
// Rare case: 4-10 byte values - calculate size from bit position
|
||||||
// Value is guaranteed >= (1ULL << 21), so CLZ is safe (non-zero)
|
// Value is guaranteed >= (1ULL << 21), so CLZ is safe (non-zero)
|
||||||
|
|||||||
Reference in New Issue
Block a user