forked from bblanchon/ArduinoJson
Optimized JsonVariant::is<float>()
This commit is contained in:
@ -16,15 +16,18 @@ namespace ARDUINOJSON_NAMESPACE {
|
|||||||
enum {
|
enum {
|
||||||
VALUE_MASK = 0x7F,
|
VALUE_MASK = 0x7F,
|
||||||
|
|
||||||
VALUE_IS_OWNED = 0x01,
|
OWNED_VALUE_BIT = 0x01,
|
||||||
VALUE_IS_NULL = 0,
|
VALUE_IS_NULL = 0,
|
||||||
VALUE_IS_LINKED_RAW = 0x02,
|
VALUE_IS_LINKED_RAW = 0x02,
|
||||||
VALUE_IS_OWNED_RAW = 0x03,
|
VALUE_IS_OWNED_RAW = 0x03,
|
||||||
VALUE_IS_LINKED_STRING = 0x04,
|
VALUE_IS_LINKED_STRING = 0x04,
|
||||||
VALUE_IS_OWNED_STRING = 0x05,
|
VALUE_IS_OWNED_STRING = 0x05,
|
||||||
|
|
||||||
// CAUTION: no VALUE_IS_OWNED below
|
// CAUTION: no OWNED_VALUE_BIT below
|
||||||
|
|
||||||
VALUE_IS_BOOLEAN = 0x06,
|
VALUE_IS_BOOLEAN = 0x06,
|
||||||
|
|
||||||
|
NUMBER_BIT = 0x08,
|
||||||
VALUE_IS_UNSIGNED_INTEGER = 0x08,
|
VALUE_IS_UNSIGNED_INTEGER = 0x08,
|
||||||
VALUE_IS_SIGNED_INTEGER = 0x0A,
|
VALUE_IS_SIGNED_INTEGER = 0x0A,
|
||||||
VALUE_IS_FLOAT = 0x0C,
|
VALUE_IS_FLOAT = 0x0C,
|
||||||
@ -33,7 +36,7 @@ enum {
|
|||||||
VALUE_IS_OBJECT = 0x20,
|
VALUE_IS_OBJECT = 0x20,
|
||||||
VALUE_IS_ARRAY = 0x40,
|
VALUE_IS_ARRAY = 0x40,
|
||||||
|
|
||||||
KEY_IS_OWNED = 0x80
|
OWNED_KEY_BIT = 0x80
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RawData {
|
struct RawData {
|
||||||
|
@ -141,8 +141,7 @@ class VariantData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isFloat() const {
|
bool isFloat() const {
|
||||||
return type() == VALUE_IS_FLOAT || type() == VALUE_IS_UNSIGNED_INTEGER ||
|
return (_flags & NUMBER_BIT) != 0;
|
||||||
type() == VALUE_IS_SIGNED_INTEGER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isString() const {
|
bool isString() const {
|
||||||
@ -308,7 +307,7 @@ class VariantData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
|
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
|
||||||
if (_flags & VALUE_IS_OWNED)
|
if (_flags & OWNED_VALUE_BIT)
|
||||||
_content.asString += stringDistance;
|
_content.asString += stringDistance;
|
||||||
if (_flags & COLLECTION_MASK)
|
if (_flags & COLLECTION_MASK)
|
||||||
_content.asCollection.movePointers(stringDistance, variantDistance);
|
_content.asCollection.movePointers(stringDistance, variantDistance);
|
||||||
@ -320,7 +319,7 @@ class VariantData {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void setType(uint8_t t) {
|
void setType(uint8_t t) {
|
||||||
_flags &= KEY_IS_OWNED;
|
_flags &= OWNED_KEY_BIT;
|
||||||
_flags |= t;
|
_flags |= t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ class VariantSlot {
|
|||||||
|
|
||||||
void setKey(const char* k, storage_policies::store_by_copy) {
|
void setKey(const char* k, storage_policies::store_by_copy) {
|
||||||
ARDUINOJSON_ASSERT(k != NULL);
|
ARDUINOJSON_ASSERT(k != NULL);
|
||||||
_flags |= KEY_IS_OWNED;
|
_flags |= OWNED_KEY_BIT;
|
||||||
_key = k;
|
_key = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ class VariantSlot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ownsKey() const {
|
bool ownsKey() const {
|
||||||
return (_flags & KEY_IS_OWNED) != 0;
|
return (_flags & OWNED_KEY_BIT) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
@ -104,9 +104,9 @@ class VariantSlot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
|
void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
|
||||||
if (_flags & KEY_IS_OWNED)
|
if (_flags & OWNED_KEY_BIT)
|
||||||
_key += stringDistance;
|
_key += stringDistance;
|
||||||
if (_flags & VALUE_IS_OWNED)
|
if (_flags & OWNED_VALUE_BIT)
|
||||||
_content.asString += stringDistance;
|
_content.asString += stringDistance;
|
||||||
if (_flags & COLLECTION_MASK)
|
if (_flags & COLLECTION_MASK)
|
||||||
_content.asCollection.movePointers(stringDistance, variantDistance);
|
_content.asCollection.movePointers(stringDistance, variantDistance);
|
||||||
|
Reference in New Issue
Block a user