diff options
author | Alexander Tkachev | 2016-05-11 13:45:10 +0600 |
---|---|---|
committer | Alexander Tkachev | 2016-08-24 16:05:07 +0600 |
commit | 2ac2816d68c11b50796457f7d41896a1ed7d571e (patch) | |
tree | c271fb794edf9f2d431eb60739e588579c734934 | |
parent | a7fb8c72ab0ca60161f5acad42774340ee08abab (diff) | |
download | scummvm-rg350-2ac2816d68c11b50796457f7d41896a1ed7d571e.tar.gz scummvm-rg350-2ac2816d68c11b50796457f7d41896a1ed7d571e.tar.bz2 scummvm-rg350-2ac2816d68c11b50796457f7d41896a1ed7d571e.zip |
CLOUD: Refactor SimpleJSON
-rw-r--r-- | backends/cloud/cloudthread.cpp | 26 | ||||
-rw-r--r-- | common/json.cpp | 261 | ||||
-rw-r--r-- | common/json.h | 8 |
3 files changed, 156 insertions, 139 deletions
diff --git a/backends/cloud/cloudthread.cpp b/backends/cloud/cloudthread.cpp index e375d6fb2b..f8d93d2baa 100644 --- a/backends/cloud/cloudthread.cpp +++ b/backends/cloud/cloudthread.cpp @@ -1,6 +1,28 @@ +/* ScummVM - Graphic Adventure Engine +* +* ScummVM is the legal property of its developers, whose names +* are too numerous to list here. Please refer to the COPYRIGHT +* file distributed with this source distribution. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +*/ + #include "cloudthread.h" -#include "../../common/debug.h" -#include "../../common/json.h" +#include "common/debug.h" +#include "common/json.h" void example1(); void example2(); diff --git a/common/json.cpp b/common/json.cpp index a0bab11995..878c67e1ae 100644 --- a/common/json.cpp +++ b/common/json.cpp @@ -44,12 +44,7 @@ * THE SOFTWARE. */ -#include "JSON.h" - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <math.h> +#include "common/json.h" #ifdef __MINGW32__ #define wcsncasecmp wcsnicmp @@ -155,54 +150,54 @@ bool JSON::extractString(const char **data, String &str) { // Deal with the escaped char switch (**data) { - case '"': next_char = '"'; - break; - case '\\': next_char = '\\'; - break; - case '/': next_char = '/'; - break; - case 'b': next_char = '\b'; - break; - case 'f': next_char = '\f'; - break; - case 'n': next_char = '\n'; - break; - case 'r': next_char = '\r'; - break; - case 't': next_char = '\t'; - break; - case 'u': { - // We need 5 chars (4 hex + the 'u') or its not valid - if (!simplejson_wcsnlen(*data, 5)) - return false; + case '"': next_char = '"'; + break; + case '\\': next_char = '\\'; + break; + case '/': next_char = '/'; + break; + case 'b': next_char = '\b'; + break; + case 'f': next_char = '\f'; + break; + case 'n': next_char = '\n'; + break; + case 'r': next_char = '\r'; + break; + case 't': next_char = '\t'; + break; + case 'u': { + // We need 5 chars (4 hex + the 'u') or its not valid + if (!simplejson_wcsnlen(*data, 5)) + return false; - // Deal with the chars - next_char = 0; - for (int i = 0; i < 4; i++) { - // Do it first to move off the 'u' and leave us on the - // final hex digit as we move on by one later on - (*data)++; - - next_char <<= 4; - - // Parse the hex digit - if (**data >= '0' && **data <= '9') - next_char |= (**data - '0'); - else if (**data >= 'A' && **data <= 'F') - next_char |= (10 + (**data - 'A')); - else if (**data >= 'a' && **data <= 'f') - next_char |= (10 + (**data - 'a')); - else { - // Invalid hex digit = invalid JSON - return false; - } + // Deal with the chars + next_char = 0; + for (int i = 0; i < 4; i++) { + // Do it first to move off the 'u' and leave us on the + // final hex digit as we move on by one later on + (*data)++; + + next_char <<= 4; + + // Parse the hex digit + if (**data >= '0' && **data <= '9') + next_char |= (**data - '0'); + else if (**data >= 'A' && **data <= 'F') + next_char |= (10 + (**data - 'A')); + else if (**data >= 'a' && **data <= 'f') + next_char |= (10 + (**data - 'a')); + else { + // Invalid hex digit = invalid JSON + return false; } - break; } + break; + } - // By the spec, only the above cases are allowed - default: - return false; + // By the spec, only the above cases are allowed + default: + return false; } } @@ -594,41 +589,41 @@ JSONValue::JSONValue(const JSONValue &source) { _type = source._type; switch (_type) { - case JSONType_String: - _stringValue = new String(*source._stringValue); - break; - - case JSONType_Bool: - _boolValue = source._boolValue; - break; - - case JSONType_Number: - _numberValue = source._numberValue; - break; - - case JSONType_Array: { - JSONArray source_array = *source._arrayValue; - JSONArray::iterator iter; - _arrayValue = new JSONArray(); - for (iter = source_array.begin(); iter != source_array.end(); iter++) - _arrayValue->push_back(new JSONValue(**iter)); - break; - } + case JSONType_String: + _stringValue = new String(*source._stringValue); + break; - case JSONType_Object: { - JSONObject source_object = *source._objectValue; - _objectValue = new JSONObject(); - JSONObject::iterator iter; - for (iter = source_object.begin(); iter != source_object.end(); iter++) { - String name = (*iter)._key; - (*_objectValue)[name] = new JSONValue(*((*iter)._value)); - } - break; + case JSONType_Bool: + _boolValue = source._boolValue; + break; + + case JSONType_Number: + _numberValue = source._numberValue; + break; + + case JSONType_Array: { + JSONArray source_array = *source._arrayValue; + JSONArray::iterator iter; + _arrayValue = new JSONArray(); + for (iter = source_array.begin(); iter != source_array.end(); iter++) + _arrayValue->push_back(new JSONValue(**iter)); + break; + } + + case JSONType_Object: { + JSONObject source_object = *source._objectValue; + _objectValue = new JSONObject(); + JSONObject::iterator iter; + for (iter = source_object.begin(); iter != source_object.end(); iter++) { + String name = (*iter)._key; + (*_objectValue)[name] = new JSONValue(*((*iter)._value)); } + break; + } - case JSONType_Null: - // Nothing to do. - break; + case JSONType_Null: + // Nothing to do. + break; } } @@ -792,12 +787,12 @@ const JSONObject &JSONValue::asObject() const { */ std::size_t JSONValue::countChildren() const { switch (_type) { - case JSONType_Array: - return _arrayValue->size(); - case JSONType_Object: - return _objectValue->size(); - default: - return 0; + case JSONType_Array: + return _arrayValue->size(); + case JSONType_Object: + return _objectValue->size(); + default: + return 0; } } @@ -922,58 +917,58 @@ String JSONValue::stringifyImpl(size_t const indentDepth) const { String const indentStr1 = indent(indentDepth1); switch (_type) { - case JSONType_Null: + case JSONType_Null: + ret_string = "null"; + break; + + case JSONType_String: + ret_string = stringifyString(*_stringValue); + break; + + case JSONType_Bool: + ret_string = _boolValue ? "true" : "false"; + break; + + case JSONType_Number: { + if (isinf(_numberValue) || isnan(_numberValue)) ret_string = "null"; - break; - - case JSONType_String: - ret_string = stringifyString(*_stringValue); - break; - - case JSONType_Bool: - ret_string = _boolValue ? "true" : "false"; - break; - - case JSONType_Number: { - if (isinf(_numberValue) || isnan(_numberValue)) - ret_string = "null"; - else { - char str[80]; - sprintf(str, "%.15Lf", _numberValue); //ss.precision(15); - ret_string = str; - } - break; + else { + char str[80]; + sprintf(str, "%.15Lf", _numberValue); //ss.precision(15); + ret_string = str; } + break; + } - case JSONType_Array: { - ret_string = indentDepth ? "[\n" + indentStr1 : "["; - JSONArray::const_iterator iter = _arrayValue->begin(); - while (iter != _arrayValue->end()) { - ret_string += (*iter)->stringifyImpl(indentDepth1); + case JSONType_Array: { + ret_string = indentDepth ? "[\n" + indentStr1 : "["; + JSONArray::const_iterator iter = _arrayValue->begin(); + while (iter != _arrayValue->end()) { + ret_string += (*iter)->stringifyImpl(indentDepth1); - // Not at the end - add a separator - if (++iter != _arrayValue->end()) - ret_string += ","; - } - ret_string += indentDepth ? "\n" + indentStr + "]" : "]"; - break; + // Not at the end - add a separator + if (++iter != _arrayValue->end()) + ret_string += ","; } + ret_string += indentDepth ? "\n" + indentStr + "]" : "]"; + break; + } - case JSONType_Object: { - ret_string = indentDepth ? "{\n" + indentStr1 : "{"; - JSONObject::const_iterator iter = _objectValue->begin(); - while (iter != _objectValue->end()) { - ret_string += stringifyString((*iter)._key); - ret_string += ":"; - ret_string += (*iter)._value->stringifyImpl(indentDepth1); - - // Not at the end - add a separator - if (++iter != _objectValue->end()) - ret_string += ","; - } - ret_string += indentDepth ? "\n" + indentStr + "}" : "}"; - break; + case JSONType_Object: { + ret_string = indentDepth ? "{\n" + indentStr1 : "{"; + JSONObject::const_iterator iter = _objectValue->begin(); + while (iter != _objectValue->end()) { + ret_string += stringifyString((*iter)._key); + ret_string += ":"; + ret_string += (*iter)._value->stringifyImpl(indentDepth1); + + // Not at the end - add a separator + if (++iter != _objectValue->end()) + ret_string += ","; } + ret_string += indentDepth ? "\n" + indentStr + "}" : "}"; + break; + } } return ret_string; diff --git a/common/json.h b/common/json.h index 64a1e03c5e..5114947966 100644 --- a/common/json.h +++ b/common/json.h @@ -47,10 +47,10 @@ #ifndef COMMON_JSON_H #define COMMON_JSON_H -#include "array.h" -#include "hashmap.h" -#include "hash-str.h" -#include "str.h" +#include "common/array.h" +#include "common/hashmap.h" +#include "common/hash-str.h" +#include "common/str.h" // Win32 incompatibilities #if defined(WIN32) && !defined(__GNUC__) |