mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Replaced composition by inheritance
This commit is contained in:
		| @@ -7,7 +7,6 @@ | ||||
| #include "JsonObject.h" | ||||
|  | ||||
| using namespace ArduinoJson::Parser; | ||||
| using namespace ArduinoJson::Internal; | ||||
|  | ||||
| DEPRECATED JsonObject JsonArray::getHashTable(int index) | ||||
| { | ||||
| @@ -17,14 +16,14 @@ DEPRECATED JsonObject JsonArray::getHashTable(int index) | ||||
| /* | ||||
| * Returns the token for the value at the specified index | ||||
| */ | ||||
| JsonValue JsonArray::operator[](int index) | ||||
| JsonValue JsonArray::getValue(int index) | ||||
| { | ||||
|     // sanity check | ||||
|     if (index < 0 || !token.isArray() || index >= token.size()) | ||||
|     if (index < 0 || !isArray() || index >= size()) | ||||
|         return JsonValue::null(); | ||||
|  | ||||
|     // skip first token, it's the whole object | ||||
|     JsonToken runningToken = token.firstChild(); | ||||
|     JsonToken runningToken = firstChild(); | ||||
|  | ||||
|     // skip all tokens before the specified index | ||||
|     for (int i = 0; i < index; i++) | ||||
| @@ -33,5 +32,5 @@ JsonValue JsonArray::operator[](int index) | ||||
|         runningToken = runningToken.nextSibling(); | ||||
|     } | ||||
|  | ||||
|     return JsonValue(json, runningToken); | ||||
|     return runningToken; | ||||
| } | ||||
| @@ -15,42 +15,42 @@ namespace ArduinoJson | ||||
|     { | ||||
|         class JsonObject; | ||||
|                 | ||||
|         class JsonArray | ||||
|         class JsonArray : public JsonToken | ||||
|         {           | ||||
|         public: | ||||
|  | ||||
|             JsonArray() | ||||
|                 : token(0) | ||||
|             { | ||||
|  | ||||
|             JsonArray()  | ||||
|             {             | ||||
|             } | ||||
|  | ||||
|             JsonArray(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             JsonArray(JsonToken token)  | ||||
|                 : JsonToken(token)  | ||||
|             { | ||||
|  | ||||
|             } | ||||
|              | ||||
|  | ||||
|             bool success() | ||||
|             { | ||||
|                 return token.isArray(); | ||||
|                 return isArray(); | ||||
|             } | ||||
|  | ||||
|             int size() | ||||
|             { | ||||
|                 return success() ? token.size() : 0; | ||||
|                 return isArray() ? JsonToken::size() : 0; | ||||
|             } | ||||
|  | ||||
|             JsonValue operator[](int index); | ||||
|             JsonValue operator[](int index) | ||||
|             { | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|             JsonArrayIterator begin() | ||||
|             { | ||||
|                 return JsonArrayIterator(json, token.firstChild()); | ||||
|                 return firstChild(); | ||||
|             } | ||||
|  | ||||
|             JsonArrayIterator end() | ||||
|             { | ||||
|                 return JsonArrayIterator(json, token.nextSibling()); | ||||
|                 return nextSibling(); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED int getLength() | ||||
| @@ -60,40 +60,34 @@ namespace ArduinoJson | ||||
|                        | ||||
|             DEPRECATED JsonArray getArray(int index) | ||||
|             { | ||||
|                 return (JsonArray) (*this)[index]; | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED bool getBool(int index) | ||||
|             { | ||||
|                 return (bool) (*this)[index]; | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED double getDouble(int index) | ||||
|             { | ||||
|                 return (double) (*this)[index]; | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED JsonObject getHashTable(int index); | ||||
|  | ||||
|             DEPRECATED long getLong(int index) | ||||
|             { | ||||
|                 return (long) (*this)[index]; | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED char* getString(int index) | ||||
|             { | ||||
|                 return (char*) (*this)[index]; | ||||
|             } | ||||
|  | ||||
|             static JsonArray null() | ||||
|             { | ||||
|                 return JsonArray(); | ||||
|                 return getValue(index); | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|  | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|             JsonValue getValue(int index); | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @@ -12,35 +12,25 @@ namespace ArduinoJson | ||||
| { | ||||
|     namespace Parser | ||||
|     { | ||||
|         class JsonArrayIterator | ||||
|         class JsonArrayIterator : public JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonArrayIterator(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             JsonArrayIterator(JsonToken token) | ||||
|                 : JsonToken(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             void operator++() | ||||
|             { | ||||
|                 token = token.nextSibling(); | ||||
|                 *this = JsonArrayIterator(nextSibling()); | ||||
|             } | ||||
|  | ||||
|             JsonValue operator*() const | ||||
|             { | ||||
|                 return JsonValue(json, token); | ||||
|                 return JsonValue(*this); | ||||
|             } | ||||
|  | ||||
|             bool operator !=(const JsonArrayIterator& other) | ||||
|             { | ||||
|                 return token != other.token; | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|  | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @@ -9,7 +9,6 @@ | ||||
| #include "JsonValue.h" | ||||
|  | ||||
| using namespace ArduinoJson::Parser; | ||||
| using namespace ArduinoJson::Internal; | ||||
|  | ||||
| DEPRECATED JsonArray JsonObject::getArray(const char* key) | ||||
| { | ||||
| @@ -22,17 +21,17 @@ DEPRECATED JsonArray JsonObject::getArray(const char* key) | ||||
| JsonValue JsonObject::getValue(const char* desiredKey) | ||||
| { | ||||
|     // sanity check | ||||
|     if (desiredKey == 0 || !token.isObject()) | ||||
|     if (desiredKey == 0 || !isObject()) | ||||
|         return JsonValue::null(); | ||||
|  | ||||
|     // skip first token, it's the whole object | ||||
|     JsonToken runningToken = token.firstChild(); | ||||
|     JsonToken runningToken = firstChild(); | ||||
|  | ||||
|     // scan each keys | ||||
|     for (int i = 0; i < token.size() / 2; i++) | ||||
|     for (int i = 0; i < size() / 2; i++) | ||||
|     { | ||||
|         // get 'key' token string | ||||
|         char* key = runningToken.getText(json); | ||||
|         char* key = runningToken.getText(); | ||||
|  | ||||
|         // move to the 'value' token | ||||
|         runningToken = runningToken.nextSibling(); | ||||
| @@ -41,7 +40,7 @@ JsonValue JsonObject::getValue(const char* desiredKey) | ||||
|         if (strcmp(desiredKey, key) == 0) | ||||
|         { | ||||
|             // return the value token that follows the key token | ||||
|             return JsonValue(json, runningToken); | ||||
|             return runningToken; | ||||
|         } | ||||
|  | ||||
|         // skip nested tokens | ||||
| @@ -49,5 +48,5 @@ JsonValue JsonObject::getValue(const char* desiredKey) | ||||
|     } | ||||
|  | ||||
|     // nothing found, return NULL | ||||
|     return JsonValue::null(); | ||||
|     return null(); | ||||
| } | ||||
| @@ -14,24 +14,23 @@ namespace ArduinoJson | ||||
|     { | ||||
|         class JsonArray; | ||||
|  | ||||
|         class JsonObject | ||||
|         class JsonObject : public JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonObject(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             JsonObject() | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             JsonObject() | ||||
|                 : token(Internal::JsonToken::null()) | ||||
|             JsonObject(JsonToken token) | ||||
|                 : JsonToken(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             bool success() | ||||
|             { | ||||
|                 return token.isObject(); | ||||
|                 return isObject(); | ||||
|             } | ||||
|              | ||||
|             JsonValue operator[](const char* key) | ||||
| @@ -46,12 +45,12 @@ namespace ArduinoJson | ||||
|  | ||||
|             JsonObjectIterator begin() | ||||
|             { | ||||
|                 return JsonObjectIterator(json, token.firstChild()); | ||||
|                 return firstChild(); | ||||
|             } | ||||
|  | ||||
|             JsonObjectIterator end() | ||||
|             { | ||||
|                 return JsonObjectIterator(json, token.nextSibling()); | ||||
|                 return nextSibling(); | ||||
|             } | ||||
|  | ||||
|             DEPRECATED JsonArray getArray(const char* key); | ||||
| @@ -83,14 +82,11 @@ namespace ArduinoJson | ||||
|  | ||||
|             static JsonObject null() | ||||
|             { | ||||
|                 return JsonObject(); | ||||
|                 return JsonObject(JsonToken::null()); | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|  | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|  | ||||
|             JsonValue getValue(const char* key); | ||||
|         }; | ||||
|  | ||||
|   | ||||
| @@ -13,35 +13,24 @@ namespace ArduinoJson | ||||
| { | ||||
|     namespace Parser | ||||
|     { | ||||
|         class JsonObjectIterator | ||||
|         class JsonObjectIterator : public JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonObjectIterator(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             JsonObjectIterator(JsonToken token) | ||||
|                 : JsonToken(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             void operator++() | ||||
|             { | ||||
|                 token = token.nextSibling().nextSibling(); | ||||
|                 *this = JsonObjectIterator(nextSibling().nextSibling()); | ||||
|             } | ||||
|  | ||||
|             JsonPair operator*() const | ||||
|             { | ||||
|                 return JsonPair(json, token); | ||||
|                 return JsonPair(*this); | ||||
|             } | ||||
|  | ||||
|             bool operator !=(const JsonObjectIterator& other) | ||||
|             { | ||||
|                 return token != other.token; | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|  | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| @@ -11,29 +11,24 @@ namespace ArduinoJson | ||||
| { | ||||
|     namespace Parser | ||||
|     { | ||||
|         class JsonPair | ||||
|         class JsonPair : public JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonPair(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             JsonPair(JsonToken token) | ||||
|                 : JsonToken(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             const char* key() | ||||
|             { | ||||
|                 return token.getText(json); | ||||
|                 return getText(); | ||||
|             } | ||||
|  | ||||
|             JsonValue value() | ||||
|             { | ||||
|                 return JsonValue(json, token.nextSibling()); | ||||
|                 return JsonValue(nextSibling()); | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|         }; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -7,7 +7,6 @@ | ||||
| #include "JsonToken.h" | ||||
|  | ||||
| using namespace ArduinoJson::Parser; | ||||
| using namespace ArduinoJson::Internal; | ||||
|  | ||||
| JsonValue JsonParserBase::parse(char* json) | ||||
| { | ||||
| @@ -17,5 +16,5 @@ JsonValue JsonParserBase::parse(char* json) | ||||
|     if (JSMN_SUCCESS != jsmn_parse(&parser, json, tokens, maxTokens)) | ||||
|         return JsonValue::null(); | ||||
|  | ||||
|     return JsonValue(json, JsonToken(tokens)); | ||||
|     return JsonToken(json, tokens); | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
|  | ||||
| #include "JsonToken.h" | ||||
|  | ||||
| using namespace ArduinoJson::Internal; | ||||
| using namespace ArduinoJson::Parser; | ||||
|  | ||||
| JsonToken JsonToken::nextSibling() const | ||||
| { | ||||
| @@ -14,5 +14,5 @@ JsonToken JsonToken::nextSibling() const | ||||
|         t++; | ||||
|     } | ||||
|  | ||||
|     return t; | ||||
|     return JsonToken(json, t); | ||||
| } | ||||
| @@ -9,29 +9,37 @@ | ||||
|  | ||||
| namespace ArduinoJson | ||||
| { | ||||
|     namespace Internal | ||||
|     namespace Parser | ||||
|     { | ||||
|         class JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonToken(jsmntok_t* token) | ||||
|                 :token(token) | ||||
|             JsonToken() | ||||
|                 : token(0) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             char* getText(char* json) | ||||
|             JsonToken(char* json, jsmntok_t* token) | ||||
|                 : json(json),  token(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             char* getText() | ||||
|             { | ||||
|                 json[token->end] = 0; | ||||
|                 return json + token->start; | ||||
|             } | ||||
|  | ||||
|             // TODO: should be protected | ||||
|             JsonToken firstChild() const | ||||
|             { | ||||
|                 return token + 1; | ||||
|                 return JsonToken(json, token + 1); | ||||
|             } | ||||
|  | ||||
|             // TODO: should be protected | ||||
|             JsonToken nextSibling() const; | ||||
|  | ||||
|             bool operator!= (const JsonToken& other) | ||||
| @@ -39,11 +47,13 @@ namespace ArduinoJson | ||||
|                 return token != other.token; | ||||
|             } | ||||
|  | ||||
|             int size() | ||||
|             static JsonToken null() | ||||
|             { | ||||
|                 return token->size; | ||||
|                 return JsonToken(0, 0); | ||||
|             } | ||||
|  | ||||
|         protected: | ||||
|  | ||||
|             bool isValid() | ||||
|             { | ||||
|                 return token != 0; | ||||
| @@ -69,12 +79,13 @@ namespace ArduinoJson | ||||
|                 return token != 0 && token->type == JSMN_STRING; | ||||
|             } | ||||
|  | ||||
|             static JsonToken null() | ||||
|             int size() | ||||
|             { | ||||
|                 return 0; | ||||
|                 return token->size; | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|             char* json; | ||||
|             jsmntok_t* token; | ||||
|         }; | ||||
|     } | ||||
|   | ||||
| @@ -9,23 +9,22 @@ | ||||
| #include "JsonValue.h" | ||||
|  | ||||
| using namespace ArduinoJson::Parser; | ||||
| using namespace ArduinoJson::Internal; | ||||
|  | ||||
| JsonValue JsonValue::operator[](int index) | ||||
| { | ||||
|     return JsonArray(json, token)[index]; | ||||
|     return JsonArray(*this)[index]; | ||||
| } | ||||
|  | ||||
| JsonValue JsonValue::operator[](const char* key) | ||||
| { | ||||
|     return JsonObject(json, token)[key]; | ||||
|     return JsonObject(*this)[key]; | ||||
| } | ||||
|  | ||||
| JsonValue::operator bool() | ||||
| { | ||||
|     if (!token.isPrimitive()) return 0; | ||||
|     if (!isPrimitive()) return 0; | ||||
|  | ||||
|     char *text = token.getText(json); | ||||
|     char *text = getText(); | ||||
|  | ||||
|     // "true" | ||||
|     if (text[0] == 't') return true; | ||||
| @@ -42,29 +41,25 @@ JsonValue::operator bool() | ||||
|  | ||||
| JsonValue::operator double() | ||||
| { | ||||
|     return token.isPrimitive() ? strtod(token.getText(json), 0) : 0; | ||||
|     return isPrimitive() ? strtod(getText(), 0) : 0; | ||||
| } | ||||
|  | ||||
| JsonValue::operator long() | ||||
| { | ||||
|     return token.isPrimitive() ? strtol(token.getText(json), 0, 0) : 0; | ||||
|     return isPrimitive() ? strtol(getText(), 0, 0) : 0; | ||||
| } | ||||
|  | ||||
| JsonValue::operator char*() | ||||
| { | ||||
|     return token.isString() || token.isPrimitive() ? token.getText(json) : 0; | ||||
|     return isString() || isPrimitive() ? getText() : 0; | ||||
| } | ||||
|  | ||||
| JsonValue::operator JsonArray() | ||||
| { | ||||
|     return token.isArray() | ||||
|         ? JsonArray(json, token) | ||||
|         : JsonArray::null(); | ||||
|     return *this; | ||||
| } | ||||
|  | ||||
| JsonValue::operator JsonObject() | ||||
| { | ||||
|     return token.isObject() | ||||
|         ? JsonObject(json, token) | ||||
|         : JsonObject::null(); | ||||
|     return *this; | ||||
| } | ||||
| @@ -24,19 +24,19 @@ namespace ArduinoJson | ||||
|         class JsonArray; | ||||
|         class JsonObject; | ||||
|  | ||||
|         class JsonValue | ||||
|         class JsonValue : public JsonToken | ||||
|         { | ||||
|         public: | ||||
|  | ||||
|             JsonValue(char* json, Internal::JsonToken token) | ||||
|                 : json(json), token(token) | ||||
|             { | ||||
|  | ||||
|             JsonValue(JsonToken token) | ||||
|                 : JsonToken(token) | ||||
|             { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             bool success() | ||||
|             { | ||||
|                 return token.isValid(); | ||||
|                 return isValid(); | ||||
|             } | ||||
|              | ||||
|             operator bool(); | ||||
| @@ -47,16 +47,6 @@ namespace ArduinoJson | ||||
|             operator JsonObject(); | ||||
|             JsonValue operator[](int index); | ||||
|             JsonValue operator[](const char*key); | ||||
|  | ||||
|             static JsonValue null() | ||||
|             { | ||||
|                 return JsonValue(0, Internal::JsonToken(0)); | ||||
|             } | ||||
|  | ||||
|         private: | ||||
|  | ||||
|             char* json; | ||||
|             Internal::JsonToken token; | ||||
|         }; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user