|
|
@@ -13,51 +13,51 @@
|
|
|
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
|
|
|
|
|
|
class VariantData {
|
|
|
- VariantContent _content; // must be first to allow cast from array to variant
|
|
|
- uint8_t _flags;
|
|
|
+ VariantContent content_; // must be first to allow cast from array to variant
|
|
|
+ uint8_t flags_;
|
|
|
|
|
|
public:
|
|
|
- VariantData() : _flags(VALUE_IS_NULL) {}
|
|
|
+ VariantData() : flags_(VALUE_IS_NULL) {}
|
|
|
|
|
|
void reset() {
|
|
|
- _flags = VALUE_IS_NULL;
|
|
|
+ flags_ = VALUE_IS_NULL;
|
|
|
}
|
|
|
|
|
|
void operator=(const VariantData& src) {
|
|
|
- _content = src._content;
|
|
|
- _flags = uint8_t((_flags & OWNED_KEY_BIT) | (src._flags & ~OWNED_KEY_BIT));
|
|
|
+ content_ = src.content_;
|
|
|
+ flags_ = uint8_t((flags_ & OWNED_KEY_BIT) | (src.flags_ & ~OWNED_KEY_BIT));
|
|
|
}
|
|
|
|
|
|
template <typename TVisitor>
|
|
|
typename TVisitor::result_type accept(TVisitor& visitor) const {
|
|
|
switch (type()) {
|
|
|
case VALUE_IS_FLOAT:
|
|
|
- return visitor.visitFloat(_content.asFloat);
|
|
|
+ return visitor.visitFloat(content_.asFloat);
|
|
|
|
|
|
case VALUE_IS_ARRAY:
|
|
|
- return visitor.visitArray(_content.asCollection);
|
|
|
+ return visitor.visitArray(content_.asCollection);
|
|
|
|
|
|
case VALUE_IS_OBJECT:
|
|
|
- return visitor.visitObject(_content.asCollection);
|
|
|
+ return visitor.visitObject(content_.asCollection);
|
|
|
|
|
|
case VALUE_IS_LINKED_STRING:
|
|
|
case VALUE_IS_OWNED_STRING:
|
|
|
- return visitor.visitString(_content.asString.data,
|
|
|
- _content.asString.size);
|
|
|
+ return visitor.visitString(content_.asString.data,
|
|
|
+ content_.asString.size);
|
|
|
|
|
|
case VALUE_IS_OWNED_RAW:
|
|
|
case VALUE_IS_LINKED_RAW:
|
|
|
- return visitor.visitRawJson(_content.asString.data,
|
|
|
- _content.asString.size);
|
|
|
+ return visitor.visitRawJson(content_.asString.data,
|
|
|
+ content_.asString.size);
|
|
|
|
|
|
case VALUE_IS_SIGNED_INTEGER:
|
|
|
- return visitor.visitSignedInteger(_content.asSignedInteger);
|
|
|
+ return visitor.visitSignedInteger(content_.asSignedInteger);
|
|
|
|
|
|
case VALUE_IS_UNSIGNED_INTEGER:
|
|
|
- return visitor.visitUnsignedInteger(_content.asUnsignedInteger);
|
|
|
+ return visitor.visitUnsignedInteger(content_.asUnsignedInteger);
|
|
|
|
|
|
case VALUE_IS_BOOLEAN:
|
|
|
- return visitor.visitBoolean(_content.asBoolean != 0);
|
|
|
+ return visitor.visitBoolean(content_.asBoolean != 0);
|
|
|
|
|
|
default:
|
|
|
return visitor.visitNull();
|
|
|
@@ -76,14 +76,14 @@ class VariantData {
|
|
|
bool asBoolean() const;
|
|
|
|
|
|
const char* getOwnedString() const {
|
|
|
- if (_flags & OWNED_VALUE_BIT)
|
|
|
- return _content.asString.data;
|
|
|
+ if (flags_ & OWNED_VALUE_BIT)
|
|
|
+ return content_.asString.data;
|
|
|
else
|
|
|
return nullptr;
|
|
|
}
|
|
|
|
|
|
CollectionData* asArray() {
|
|
|
- return isArray() ? &_content.asCollection : 0;
|
|
|
+ return isArray() ? &content_.asCollection : 0;
|
|
|
}
|
|
|
|
|
|
const CollectionData* asArray() const {
|
|
|
@@ -91,11 +91,11 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
const CollectionData* asCollection() const {
|
|
|
- return isCollection() ? &_content.asCollection : 0;
|
|
|
+ return isCollection() ? &content_.asCollection : 0;
|
|
|
}
|
|
|
|
|
|
CollectionData* asObject() {
|
|
|
- return isObject() ? &_content.asCollection : 0;
|
|
|
+ return isObject() ? &content_.asCollection : 0;
|
|
|
}
|
|
|
|
|
|
const CollectionData* asObject() const {
|
|
|
@@ -103,7 +103,7 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
bool isArray() const {
|
|
|
- return (_flags & VALUE_IS_ARRAY) != 0;
|
|
|
+ return (flags_ & VALUE_IS_ARRAY) != 0;
|
|
|
}
|
|
|
|
|
|
bool isBoolean() const {
|
|
|
@@ -111,17 +111,17 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
bool isCollection() const {
|
|
|
- return (_flags & COLLECTION_MASK) != 0;
|
|
|
+ return (flags_ & COLLECTION_MASK) != 0;
|
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
|
bool isInteger() const {
|
|
|
switch (type()) {
|
|
|
case VALUE_IS_UNSIGNED_INTEGER:
|
|
|
- return canConvertNumber<T>(_content.asUnsignedInteger);
|
|
|
+ return canConvertNumber<T>(content_.asUnsignedInteger);
|
|
|
|
|
|
case VALUE_IS_SIGNED_INTEGER:
|
|
|
- return canConvertNumber<T>(_content.asSignedInteger);
|
|
|
+ return canConvertNumber<T>(content_.asSignedInteger);
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
@@ -129,7 +129,7 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
bool isFloat() const {
|
|
|
- return (_flags & NUMBER_BIT) != 0;
|
|
|
+ return (flags_ & NUMBER_BIT) != 0;
|
|
|
}
|
|
|
|
|
|
bool isString() const {
|
|
|
@@ -137,7 +137,7 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
bool isObject() const {
|
|
|
- return (_flags & VALUE_IS_OBJECT) != 0;
|
|
|
+ return (flags_ & VALUE_IS_OBJECT) != 0;
|
|
|
}
|
|
|
|
|
|
bool isNull() const {
|
|
|
@@ -150,36 +150,36 @@ class VariantData {
|
|
|
|
|
|
void setBoolean(bool value) {
|
|
|
setType(VALUE_IS_BOOLEAN);
|
|
|
- _content.asBoolean = value;
|
|
|
+ content_.asBoolean = value;
|
|
|
}
|
|
|
|
|
|
void setFloat(JsonFloat value) {
|
|
|
setType(VALUE_IS_FLOAT);
|
|
|
- _content.asFloat = value;
|
|
|
+ content_.asFloat = value;
|
|
|
}
|
|
|
|
|
|
void setLinkedRaw(const char* data, size_t n) {
|
|
|
setType(VALUE_IS_LINKED_RAW);
|
|
|
- _content.asString.data = data;
|
|
|
- _content.asString.size = n;
|
|
|
+ content_.asString.data = data;
|
|
|
+ content_.asString.size = n;
|
|
|
}
|
|
|
|
|
|
void setOwnedRaw(const char* data, size_t n) {
|
|
|
setType(VALUE_IS_OWNED_RAW);
|
|
|
- _content.asString.data = data;
|
|
|
- _content.asString.size = n;
|
|
|
+ content_.asString.data = data;
|
|
|
+ content_.asString.size = n;
|
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
|
typename enable_if<is_unsigned<T>::value>::type setInteger(T value) {
|
|
|
setType(VALUE_IS_UNSIGNED_INTEGER);
|
|
|
- _content.asUnsignedInteger = static_cast<JsonUInt>(value);
|
|
|
+ content_.asUnsignedInteger = static_cast<JsonUInt>(value);
|
|
|
}
|
|
|
|
|
|
template <typename T>
|
|
|
typename enable_if<is_signed<T>::value>::type setInteger(T value) {
|
|
|
setType(VALUE_IS_SIGNED_INTEGER);
|
|
|
- _content.asSignedInteger = value;
|
|
|
+ content_.asSignedInteger = value;
|
|
|
}
|
|
|
|
|
|
void setNull() {
|
|
|
@@ -192,37 +192,37 @@ class VariantData {
|
|
|
setType(VALUE_IS_LINKED_STRING);
|
|
|
else
|
|
|
setType(VALUE_IS_OWNED_STRING);
|
|
|
- _content.asString.data = s.c_str();
|
|
|
- _content.asString.size = s.size();
|
|
|
+ content_.asString.data = s.c_str();
|
|
|
+ content_.asString.size = s.size();
|
|
|
}
|
|
|
|
|
|
CollectionData& toArray() {
|
|
|
setType(VALUE_IS_ARRAY);
|
|
|
- _content.asCollection.clear();
|
|
|
- return _content.asCollection;
|
|
|
+ content_.asCollection.clear();
|
|
|
+ return content_.asCollection;
|
|
|
}
|
|
|
|
|
|
CollectionData& toObject() {
|
|
|
setType(VALUE_IS_OBJECT);
|
|
|
- _content.asCollection.clear();
|
|
|
- return _content.asCollection;
|
|
|
+ content_.asCollection.clear();
|
|
|
+ return content_.asCollection;
|
|
|
}
|
|
|
|
|
|
size_t memoryUsage() const {
|
|
|
switch (type()) {
|
|
|
case VALUE_IS_OWNED_STRING:
|
|
|
case VALUE_IS_OWNED_RAW:
|
|
|
- return sizeofString(_content.asString.size);
|
|
|
+ return sizeofString(content_.asString.size);
|
|
|
case VALUE_IS_OBJECT:
|
|
|
case VALUE_IS_ARRAY:
|
|
|
- return _content.asCollection.memoryUsage();
|
|
|
+ return content_.asCollection.memoryUsage();
|
|
|
default:
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
size_t size() const {
|
|
|
- return isCollection() ? _content.asCollection.size() : 0;
|
|
|
+ return isCollection() ? content_.asCollection.size() : 0;
|
|
|
}
|
|
|
|
|
|
VariantData* getElement(size_t index) const {
|
|
|
@@ -241,18 +241,18 @@ class VariantData {
|
|
|
}
|
|
|
|
|
|
void movePointers(ptrdiff_t variantDistance) {
|
|
|
- if (_flags & COLLECTION_MASK)
|
|
|
- _content.asCollection.movePointers(variantDistance);
|
|
|
+ if (flags_ & COLLECTION_MASK)
|
|
|
+ content_.asCollection.movePointers(variantDistance);
|
|
|
}
|
|
|
|
|
|
uint8_t type() const {
|
|
|
- return _flags & VALUE_MASK;
|
|
|
+ return flags_ & VALUE_MASK;
|
|
|
}
|
|
|
|
|
|
private:
|
|
|
void setType(uint8_t t) {
|
|
|
- _flags &= OWNED_KEY_BIT;
|
|
|
- _flags |= t;
|
|
|
+ flags_ &= OWNED_KEY_BIT;
|
|
|
+ flags_ |= t;
|
|
|
}
|
|
|
};
|
|
|
|