ソースを参照

core: add pointer to object's end char

Daniele Bartolini 11 ヶ月 前
コミット
181a1b812e

+ 6 - 2
src/core/json/json.cpp

@@ -242,8 +242,10 @@ namespace json
 		if (*json == '{') {
 			json = skip_spaces(++json);
 
-			if (*json == '}')
+			if (*json == '}') {
+				obj._end = json + 1;
 				return;
+			}
 
 			while (*json) {
 				const char *key_begin = *json == '"' ? (json + 1) : json;
@@ -264,8 +266,10 @@ namespace json
 				json = skip_value(json);
 				json = skip_spaces(json);
 
-				if (*json == '}')
+				if (*json == '}') {
+					obj._end = json + 1;
 					return;
+				}
 
 				json = next(json, ',');
 				json = skip_spaces(json);

+ 1 - 0
src/core/json/json_object.inl

@@ -49,6 +49,7 @@ namespace json_object
 
 inline JsonObject::JsonObject(Allocator &a)
 	: _map(a)
+	, _end(NULL)
 {
 }
 

+ 8 - 2
src/core/json/sjson.cpp

@@ -403,6 +403,8 @@ namespace sjson
 			json = skip_value(json);
 			json = skip_spaces(json);
 		}
+
+		obj._end = json + 1;
 	}
 
 	void parse_object(JsonObject &obj, const char *json)
@@ -415,8 +417,10 @@ namespace sjson
 		if (*json == '{') {
 			json = skip_spaces(++json);
 
-			if (*json == '}')
+			if (*json == '}') {
+				obj._end = json + 1;
 				return;
+			}
 
 			while (*json) {
 				const char *key_begin = *json == '"' ? (json + 1) : json;
@@ -436,8 +440,10 @@ namespace sjson
 				json = skip_value(json);
 				json = skip_spaces(json);
 
-				if (*json == '}')
+				if (*json == '}') {
+					obj._end = json + 1;
 					return;
+				}
 
 				json = skip_spaces(json);
 			}

+ 1 - 0
src/core/json/types.h

@@ -39,6 +39,7 @@ typedef Array<const char *> JsonArray;
 struct JsonObject
 {
 	HashMap<StringView, const char *> _map;
+	const char *_end; ///< Points to the character following the the object's last character.
 
 	explicit JsonObject(Allocator &a);