Optimized JsonVariant::is<float>()

This commit is contained in:
Benoit Blanchon
2021-04-21 13:21:40 +02:00
parent d8a1d1a120
commit 892c37db08
3 changed files with 13 additions and 11 deletions

View File

@ -16,15 +16,18 @@ namespace ARDUINOJSON_NAMESPACE {
enum {
VALUE_MASK = 0x7F,
VALUE_IS_OWNED = 0x01,
OWNED_VALUE_BIT = 0x01,
VALUE_IS_NULL = 0,
VALUE_IS_LINKED_RAW = 0x02,
VALUE_IS_OWNED_RAW = 0x03,
VALUE_IS_LINKED_STRING = 0x04,
VALUE_IS_OWNED_STRING = 0x05,
// CAUTION: no VALUE_IS_OWNED below
// CAUTION: no OWNED_VALUE_BIT below
VALUE_IS_BOOLEAN = 0x06,
NUMBER_BIT = 0x08,
VALUE_IS_UNSIGNED_INTEGER = 0x08,
VALUE_IS_SIGNED_INTEGER = 0x0A,
VALUE_IS_FLOAT = 0x0C,
@ -33,7 +36,7 @@ enum {
VALUE_IS_OBJECT = 0x20,
VALUE_IS_ARRAY = 0x40,
KEY_IS_OWNED = 0x80
OWNED_KEY_BIT = 0x80
};
struct RawData {

View File

@ -141,8 +141,7 @@ class VariantData {
}
bool isFloat() const {
return type() == VALUE_IS_FLOAT || type() == VALUE_IS_UNSIGNED_INTEGER ||
type() == VALUE_IS_SIGNED_INTEGER;
return (_flags & NUMBER_BIT) != 0;
}
bool isString() const {
@ -308,7 +307,7 @@ class VariantData {
}
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
if (_flags & VALUE_IS_OWNED)
if (_flags & OWNED_VALUE_BIT)
_content.asString += stringDistance;
if (_flags & COLLECTION_MASK)
_content.asCollection.movePointers(stringDistance, variantDistance);
@ -320,7 +319,7 @@ class VariantData {
private:
void setType(uint8_t t) {
_flags &= KEY_IS_OWNED;
_flags &= OWNED_KEY_BIT;
_flags |= t;
}

View File

@ -79,7 +79,7 @@ class VariantSlot {
void setKey(const char* k, storage_policies::store_by_copy) {
ARDUINOJSON_ASSERT(k != NULL);
_flags |= KEY_IS_OWNED;
_flags |= OWNED_KEY_BIT;
_key = k;
}
@ -94,7 +94,7 @@ class VariantSlot {
}
bool ownsKey() const {
return (_flags & KEY_IS_OWNED) != 0;
return (_flags & OWNED_KEY_BIT) != 0;
}
void clear() {
@ -104,9 +104,9 @@ class VariantSlot {
}
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
if (_flags & KEY_IS_OWNED)
if (_flags & OWNED_KEY_BIT)
_key += stringDistance;
if (_flags & VALUE_IS_OWNED)
if (_flags & OWNED_VALUE_BIT)
_content.asString += stringDistance;
if (_flags & COLLECTION_MASK)
_content.asCollection.movePointers(stringDistance, variantDistance);