mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Reworked JsonNode constructors to more logical form
This commit is contained in:
		| @@ -56,18 +56,33 @@ class CModHandler; | ||||
|  | ||||
| static const JsonNode nullNode; | ||||
|  | ||||
| JsonNode::JsonNode(JsonType Type) | ||||
| { | ||||
| 	setType(Type); | ||||
| } | ||||
|  | ||||
| JsonNode::JsonNode(const std::byte *data, size_t datasize) | ||||
| 	:JsonNode(reinterpret_cast<const char*>(data), datasize) | ||||
| JsonNode::JsonNode(bool boolean) | ||||
| 	:data(boolean) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(const char *data, size_t datasize) | ||||
| JsonNode::JsonNode(int32_t number) | ||||
| 	:data(static_cast<int64_t>(number)) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(uint32_t number) | ||||
| 	:data(static_cast<int64_t>(number)) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(int64_t number) | ||||
| 	:data(number) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(double number) | ||||
| 	:data(number) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(const std::string & string) | ||||
| 	:data(string) | ||||
| {} | ||||
|  | ||||
| JsonNode::JsonNode(const std::byte *data, size_t datasize) | ||||
| { | ||||
| 	JsonParser parser(data, datasize); | ||||
| 	JsonParser parser(reinterpret_cast<const char*>(data), datasize); | ||||
| 	*this = parser.parse("<unknown>"); | ||||
| } | ||||
|  | ||||
| @@ -79,7 +94,7 @@ JsonNode::JsonNode(const JsonPath & fileURI) | ||||
| 	*this = parser.parse(fileURI.getName()); | ||||
| } | ||||
|  | ||||
| JsonNode::JsonNode(const std::string & idx, const JsonPath & fileURI) | ||||
| JsonNode::JsonNode(const JsonPath & fileURI, const std::string & idx) | ||||
| { | ||||
| 	auto file = CResourceHandler::get(idx)->load(fileURI)->readAll(); | ||||
| 	 | ||||
|   | ||||
| @@ -37,24 +37,32 @@ public: | ||||
| 	}; | ||||
|  | ||||
| private: | ||||
| 	using JsonData = std::variant<std::monostate, bool, double, std::string, JsonVector, JsonMap, si64>; | ||||
| 	using JsonData = std::variant<std::monostate, bool, double, std::string, JsonVector, JsonMap, int64_t>; | ||||
|  | ||||
| 	JsonData data; | ||||
|  | ||||
| public: | ||||
| 	/// free to use metadata fields | ||||
| 	std::string meta; | ||||
| 	// meta-flags like override | ||||
| 	/// meta-flags like override | ||||
| 	std::vector<std::string> flags; | ||||
|  | ||||
| 	//Create empty node | ||||
| 	JsonNode(JsonType Type = JsonType::DATA_NULL); | ||||
| 	//Create tree from Json-formatted input | ||||
| 	explicit JsonNode(const char * data, size_t datasize); | ||||
| 	JsonNode() = default; | ||||
|  | ||||
| 	/// Create single node with specified value | ||||
| 	explicit JsonNode(bool boolean); | ||||
| 	explicit JsonNode(int32_t number); | ||||
| 	explicit JsonNode(uint32_t number); | ||||
| 	explicit JsonNode(int64_t number); | ||||
| 	explicit JsonNode(double number); | ||||
| 	explicit JsonNode(const std::string & string); | ||||
|  | ||||
| 	/// Create tree from Json-formatted input | ||||
| 	explicit JsonNode(const std::byte * data, size_t datasize); | ||||
| 	//Create tree from JSON file | ||||
|  | ||||
| 	/// Create tree from JSON file | ||||
| 	explicit JsonNode(const JsonPath & fileURI); | ||||
| 	explicit JsonNode(const std::string & modName, const JsonPath & fileURI); | ||||
| 	explicit JsonNode(const JsonPath & fileURI, const std::string & modName); | ||||
| 	explicit JsonNode(const JsonPath & fileURI, bool & isValidSyntax); | ||||
|  | ||||
| 	bool operator == (const JsonNode &other) const; | ||||
|   | ||||
| @@ -273,7 +273,7 @@ JsonNode JsonUtils::intersect(const JsonNode & a, const JsonNode & b, bool prune | ||||
| 	if(a.getType() == JsonNode::JsonType::DATA_STRUCT && b.getType() == JsonNode::JsonType::DATA_STRUCT) | ||||
| 	{ | ||||
| 		// intersect individual properties | ||||
| 		JsonNode result(JsonNode::JsonType::DATA_STRUCT); | ||||
| 		JsonNode result; | ||||
| 		for(const auto & property : a.Struct()) | ||||
| 		{ | ||||
| 			if(vstd::contains(b.Struct(), property.first)) | ||||
| @@ -313,7 +313,7 @@ JsonNode JsonUtils::difference(const JsonNode & node, const JsonNode & base) | ||||
| 	if(node.getType() == JsonNode::JsonType::DATA_STRUCT && base.getType() == JsonNode::JsonType::DATA_STRUCT) | ||||
| 	{ | ||||
| 		// subtract individual properties | ||||
| 		JsonNode result(JsonNode::JsonType::DATA_STRUCT); | ||||
| 		JsonNode result; | ||||
| 		for(const auto & property : node.Struct()) | ||||
| 		{ | ||||
| 			if(vstd::contains(base.Struct(), property.first)) | ||||
| @@ -370,38 +370,10 @@ JsonNode JsonUtils::assembleFromFiles(const std::string & filename) | ||||
| 		std::unique_ptr<ui8[]> textData(new ui8[stream->getSize()]); | ||||
| 		stream->read(textData.get(), stream->getSize()); | ||||
|  | ||||
| 		JsonNode section(reinterpret_cast<char *>(textData.get()), stream->getSize()); | ||||
| 		JsonNode section(reinterpret_cast<std::byte *>(textData.get()), stream->getSize()); | ||||
| 		merge(result, section); | ||||
| 	} | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| DLL_LINKAGE JsonNode JsonUtils::boolNode(bool value) | ||||
| { | ||||
| 	JsonNode node; | ||||
| 	node.Bool() = value; | ||||
| 	return node; | ||||
| } | ||||
|  | ||||
| DLL_LINKAGE JsonNode JsonUtils::floatNode(double value) | ||||
| { | ||||
| 	JsonNode node; | ||||
| 	node.Float() = value; | ||||
| 	return node; | ||||
| } | ||||
|  | ||||
| DLL_LINKAGE JsonNode JsonUtils::stringNode(const std::string & value) | ||||
| { | ||||
| 	JsonNode node; | ||||
| 	node.String() = value; | ||||
| 	return node; | ||||
| } | ||||
|  | ||||
| DLL_LINKAGE JsonNode JsonUtils::intNode(si64 value) | ||||
| { | ||||
| 	JsonNode node; | ||||
| 	node.Integer() = value; | ||||
| 	return node; | ||||
| } | ||||
|  | ||||
| VCMI_LIB_NAMESPACE_END | ||||
|   | ||||
| @@ -88,12 +88,6 @@ namespace JsonUtils | ||||
| 	/// get schema by json URI: vcmi:<name of file in schemas directory>#<entry in file, optional> | ||||
| 	/// example: schema "vcmi:settings" is used to check user settings | ||||
| 	DLL_LINKAGE const JsonNode & getSchema(const std::string & URI); | ||||
|  | ||||
| 	/// for easy construction of JsonNodes; helps with inserting primitives into vector node | ||||
| 	DLL_LINKAGE JsonNode boolNode(bool value); | ||||
| 	DLL_LINKAGE JsonNode floatNode(double value); | ||||
| 	DLL_LINKAGE JsonNode stringNode(const std::string & value); | ||||
| 	DLL_LINKAGE JsonNode intNode(si64 value); | ||||
| } | ||||
|  | ||||
| VCMI_LIB_NAMESPACE_END | ||||
|   | ||||
		Reference in New Issue
	
	Block a user