mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-02 08:48:27 +01:00
Epic refactoring int progress...
This commit is contained in:
@@ -20,8 +20,9 @@ class JsonArrayImpl {
|
||||
|
||||
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer) {}
|
||||
|
||||
value_type operator[](int index) const;
|
||||
int size() const;
|
||||
|
||||
value_type operator[](int index) const;
|
||||
value_type add();
|
||||
|
||||
JsonArrayImpl *createNestedArray();
|
||||
@@ -29,15 +30,15 @@ class JsonArrayImpl {
|
||||
|
||||
void writeTo(JsonWriter &writer) const;
|
||||
|
||||
iterator begin() { return iterator(_firstChild); }
|
||||
iterator begin() { return iterator(_firstNode); }
|
||||
iterator end() { return iterator(0); }
|
||||
|
||||
const_iterator begin() const { return const_iterator(_firstChild); }
|
||||
const_iterator begin() const { return const_iterator(_firstNode); }
|
||||
const_iterator end() const { return const_iterator(0); }
|
||||
|
||||
private:
|
||||
JsonBuffer *_buffer;
|
||||
Internals::JsonArrayNode *_firstChild;
|
||||
Internals::JsonArrayNode *_firstNode;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,12 @@ namespace Internals {
|
||||
|
||||
class JsonArrayIterator {
|
||||
public:
|
||||
explicit JsonArrayIterator(Internals::JsonArrayNode *node) : _node(node) {}
|
||||
explicit JsonArrayIterator(Internals::JsonArrayNode *node) : _node(node) {
|
||||
updateValue();
|
||||
}
|
||||
|
||||
JsonValueImpl &operator*() const { return _node->value; }
|
||||
JsonValueImpl *operator->() { return &_node->value; }
|
||||
JsonValue operator*() const { return _value; }
|
||||
JsonValue *operator->() { return &_value; }
|
||||
|
||||
bool operator==(const JsonArrayIterator &other) const {
|
||||
return _node == other._node;
|
||||
@@ -28,11 +30,15 @@ class JsonArrayIterator {
|
||||
|
||||
JsonArrayIterator &operator++() {
|
||||
_node = _node->next;
|
||||
updateValue();
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
void updateValue() { _value = JsonValue(_node ? &_node->value : NULL); }
|
||||
|
||||
JsonArrayNode *_node;
|
||||
JsonValue _value;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../JsonPair.hpp"
|
||||
#include "JsonObjectNode.hpp"
|
||||
|
||||
namespace ArduinoJson {
|
||||
@@ -14,26 +15,26 @@ namespace Internals {
|
||||
class JsonObjectConstIterator {
|
||||
public:
|
||||
explicit JsonObjectConstIterator(Internals::JsonObjectNode *node)
|
||||
: _node(node) {}
|
||||
: _pair(node) {}
|
||||
|
||||
JsonPair operator*() const { return _node->pair; }
|
||||
JsonPair *operator->() { return &_node->pair; }
|
||||
const JsonPair operator*() const { return _pair; }
|
||||
const JsonPair *operator->() { return &_pair; }
|
||||
|
||||
bool operator==(const JsonObjectConstIterator &other) const {
|
||||
return _node == other._node;
|
||||
return _pair._node == other._pair._node;
|
||||
}
|
||||
|
||||
bool operator!=(const JsonObjectConstIterator &other) const {
|
||||
return _node != other._node;
|
||||
return _pair._node != other._pair._node;
|
||||
}
|
||||
|
||||
JsonObjectConstIterator &operator++() {
|
||||
_node = _node->next;
|
||||
_pair._node = _pair._node->next;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
JsonObjectNode *_node;
|
||||
JsonPair _pair;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,27 +19,33 @@ class JsonObjectImpl {
|
||||
typedef JsonObjectIterator iterator;
|
||||
typedef JsonObjectConstIterator const_iterator;
|
||||
|
||||
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer) {}
|
||||
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
|
||||
|
||||
JsonValueImpl *operator[](const char *key) { return getOrCreateValueAt(key); }
|
||||
int size() const;
|
||||
|
||||
JsonValueImpl *operator[](const char *key);
|
||||
void remove(key_type key);
|
||||
|
||||
JsonArrayImpl *createNestedArray(key_type key);
|
||||
JsonObjectImpl *createNestedObject(key_type key);
|
||||
|
||||
iterator begin() { return iterator(_firstChild); }
|
||||
iterator begin() { return iterator(_firstNode); }
|
||||
iterator end() { return iterator(0); }
|
||||
|
||||
const_iterator begin() const { return const_iterator(_firstChild); }
|
||||
const_iterator begin() const { return const_iterator(_firstNode); }
|
||||
const_iterator end() const { return const_iterator(0); }
|
||||
|
||||
void writeTo(JsonWriter &writer) const;
|
||||
|
||||
private:
|
||||
JsonObjectNode *getNodeAt(key_type key);
|
||||
void addNode(JsonObjectNode *nodeToAdd);
|
||||
void removeNode(JsonObjectNode *nodeToRemove);
|
||||
JsonValueImpl *getOrCreateValueAt(key_type key);
|
||||
|
||||
JsonObjectNode *getNodeAt(key_type key);
|
||||
JsonObjectNode *getOrCreateNodeAt(key_type key);
|
||||
|
||||
JsonBuffer *_buffer;
|
||||
JsonObjectNode *_firstChild;
|
||||
JsonObjectNode *_firstNode;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,26 +11,26 @@ namespace Internals {
|
||||
|
||||
class JsonObjectIterator {
|
||||
public:
|
||||
explicit JsonObjectIterator(Internals::JsonObjectNode *node) : _node(node) {}
|
||||
explicit JsonObjectIterator(Internals::JsonObjectNode *node) : _pair(node) {}
|
||||
|
||||
JsonPair &operator*() const { return _node->pair; }
|
||||
JsonPair *operator->() { return &_node->pair; }
|
||||
JsonPair &operator*() { return _pair; }
|
||||
JsonPair *operator->() { return &_pair; }
|
||||
|
||||
bool operator==(const JsonObjectIterator &other) const {
|
||||
return _node == other._node;
|
||||
return _pair._node == other._pair._node;
|
||||
}
|
||||
|
||||
bool operator!=(const JsonObjectIterator &other) const {
|
||||
return _node != other._node;
|
||||
return _pair._node != other._pair._node;
|
||||
}
|
||||
|
||||
JsonObjectIterator &operator++() {
|
||||
_node = _node->next;
|
||||
_pair._node = _pair._node->next;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
JsonObjectNode *_node;
|
||||
JsonPair _pair;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,14 +6,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../JsonPair.hpp"
|
||||
#include "JsonValueImpl.hpp"
|
||||
|
||||
namespace ArduinoJson {
|
||||
namespace Internals {
|
||||
|
||||
struct JsonObjectNode {
|
||||
JsonObjectNode *next;
|
||||
JsonPair pair;
|
||||
JsonObjectNode(const char* k) : key(k) {}
|
||||
|
||||
const char* const key;
|
||||
JsonValueImpl value;
|
||||
JsonObjectNode* next;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ class JsonParser {
|
||||
|
||||
JsonArray parseArray();
|
||||
JsonObject parseObject();
|
||||
JsonValue parseValue();
|
||||
|
||||
private:
|
||||
bool isEnd() { return *_ptr == 0; }
|
||||
|
||||
@@ -49,28 +49,28 @@ class JsonValueImpl {
|
||||
_content.asObject = object;
|
||||
}
|
||||
|
||||
operator bool() const {
|
||||
return _type == JSON_BOOLEAN ? _content.asBoolean : false;
|
||||
}
|
||||
|
||||
operator char const *() const {
|
||||
return _type == JSON_STRING ? _content.asString : NULL;
|
||||
}
|
||||
|
||||
operator double() const {
|
||||
return _type >= JSON_DOUBLE_0_DECIMALS ? _content.asDouble : 0;
|
||||
}
|
||||
|
||||
operator long() const { return _type == JSON_LONG ? _content.asInteger : 0; }
|
||||
|
||||
operator JsonArrayImpl *() const {
|
||||
JsonArrayImpl *asArray() {
|
||||
return _type == JSON_ARRAY ? _content.asArray : NULL;
|
||||
}
|
||||
|
||||
operator JsonObjectImpl *() const {
|
||||
JsonObjectImpl *asObject() {
|
||||
return _type == JSON_OBJECT ? _content.asObject : NULL;
|
||||
}
|
||||
|
||||
bool asBool() const {
|
||||
return _type == JSON_BOOLEAN ? _content.asBoolean : false;
|
||||
}
|
||||
|
||||
const char *asString() const {
|
||||
return _type == JSON_STRING ? _content.asString : NULL;
|
||||
}
|
||||
|
||||
double asDouble() const {
|
||||
return _type >= JSON_DOUBLE_0_DECIMALS ? _content.asDouble : 0;
|
||||
}
|
||||
|
||||
long asLong() const { return _type == JSON_LONG ? _content.asInteger : 0; }
|
||||
|
||||
void writeTo(JsonWriter &writer) const;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user