forked from bblanchon/ArduinoJson
Reduce MsgPack deserializer size
This commit is contained in:
@ -71,13 +71,9 @@ class MsgPackDeserializer {
|
|||||||
return DeserializationError::InvalidInput;
|
return DeserializationError::InvalidInput;
|
||||||
|
|
||||||
case 0xc2:
|
case 0xc2:
|
||||||
if (allowValue)
|
|
||||||
variant->setBoolean(false);
|
|
||||||
return DeserializationError::Ok;
|
|
||||||
|
|
||||||
case 0xc3:
|
case 0xc3:
|
||||||
if (allowValue)
|
if (allowValue)
|
||||||
variant->setBoolean(true);
|
variant->setBoolean(code == 0xc3);
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
|
|
||||||
case 0xca:
|
case 0xca:
|
||||||
@ -151,7 +147,7 @@ class MsgPackDeserializer {
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
uint32_t size32 = 0;
|
uint32_t size32 = 0;
|
||||||
for (size_t i = 0; i < sizeBytes; i++)
|
for (uint8_t i = 0; i < sizeBytes; i++)
|
||||||
size32 = (size32 << 8) | header[i + 1];
|
size32 = (size32 << 8) | header[i + 1];
|
||||||
|
|
||||||
size = size_t(size32);
|
size = size_t(size32);
|
||||||
@ -298,18 +294,6 @@ class MsgPackDeserializer {
|
|||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
DeserializationError::Code readString() {
|
|
||||||
DeserializationError::Code err;
|
|
||||||
T size;
|
|
||||||
|
|
||||||
err = readInteger(size);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
return readString(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeserializationError::Code readString(VariantData* variant, size_t n) {
|
DeserializationError::Code readString(VariantData* variant, size_t n) {
|
||||||
DeserializationError::Code err;
|
DeserializationError::Code err;
|
||||||
|
|
||||||
@ -449,19 +433,19 @@ class MsgPackDeserializer {
|
|||||||
if ((code & 0xe0) == 0xa0)
|
if ((code & 0xe0) == 0xa0)
|
||||||
return readString(code & 0x1f);
|
return readString(code & 0x1f);
|
||||||
|
|
||||||
switch (code) {
|
if (code >= 0xd9 && code <= 0xdb) {
|
||||||
case 0xd9:
|
uint8_t sizeBytes = uint8_t(1U << (code - 0xd9));
|
||||||
return readString<uint8_t>();
|
uint32_t size = 0;
|
||||||
|
for (uint8_t i = 0; i < sizeBytes; i++) {
|
||||||
case 0xda:
|
err = readByte(code);
|
||||||
return readString<uint16_t>();
|
if (err)
|
||||||
|
return err;
|
||||||
case 0xdb:
|
size = (size << 8) | code;
|
||||||
return readString<uint32_t>();
|
|
||||||
|
|
||||||
default:
|
|
||||||
return DeserializationError::InvalidInput;
|
|
||||||
}
|
}
|
||||||
|
return readString(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return DeserializationError::InvalidInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceManager* resources_;
|
ResourceManager* resources_;
|
||||||
|
Reference in New Issue
Block a user