mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-24 08:32:34 +02:00
replaced JsonNode::isEmpty() with JsonNode::containsBaseData()
This commit is contained in:
parent
6414cd18e8
commit
ee46862784
@ -840,7 +840,7 @@ void CHeroHandler::afterLoadFinalization()
|
||||
if(specVec.size() > 1)
|
||||
{
|
||||
JsonNode base = JsonUtils::intersect(specVec);
|
||||
if(!base.isEmpty())
|
||||
if(base.containsBaseData())
|
||||
{
|
||||
specNode["base"] = base;
|
||||
for(JsonNode & node : specVec)
|
||||
|
@ -214,21 +214,22 @@ bool JsonNode::isNumber() const
|
||||
return type == JsonType::DATA_INTEGER || type == JsonType::DATA_FLOAT;
|
||||
}
|
||||
|
||||
bool JsonNode::isEmpty() const
|
||||
bool JsonNode::containsBaseData() const
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case JsonType::DATA_NULL:
|
||||
return true;
|
||||
return false;
|
||||
case JsonType::DATA_STRUCT:
|
||||
for(auto elem : *data.Struct)
|
||||
{
|
||||
if(!elem.second.isEmpty())
|
||||
return false;
|
||||
if(elem.second.containsBaseData())
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
default:
|
||||
//other types (including vector) cannot be extended via merge
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -908,7 +909,7 @@ JsonNode JsonUtils::intersect(const JsonNode & a, const JsonNode & b, bool prune
|
||||
if(vstd::contains(b.Struct(), property.first))
|
||||
{
|
||||
JsonNode propertyIntersect = JsonUtils::intersect(property.second, b.Struct().find(property.first)->second);
|
||||
if(pruneEmpty && propertyIntersect.isEmpty())
|
||||
if(pruneEmpty && !propertyIntersect.containsBaseData())
|
||||
continue;
|
||||
result[property.first] = propertyIntersect;
|
||||
}
|
||||
@ -934,16 +935,17 @@ JsonNode JsonUtils::difference(const JsonNode & node, const JsonNode & base)
|
||||
{
|
||||
if(vstd::contains(base.Struct(), property.first))
|
||||
{
|
||||
JsonNode propertyDifference = JsonUtils::difference(property.second, base.Struct().find(property.first)->second);
|
||||
if(propertyDifference.isEmpty())
|
||||
continue;
|
||||
result[property.first] = propertyDifference;
|
||||
const JsonNode propertyDifference = JsonUtils::difference(property.second, base.Struct().find(property.first)->second);
|
||||
if(!propertyDifference.isNull())
|
||||
result[property.first] = propertyDifference;
|
||||
}
|
||||
else
|
||||
{
|
||||
result[property.first] = property.second;
|
||||
}
|
||||
}
|
||||
if(result.Struct().empty())
|
||||
return nullNode;
|
||||
return result;
|
||||
}
|
||||
else
|
||||
|
@ -75,7 +75,9 @@ public:
|
||||
|
||||
bool isNull() const;
|
||||
bool isNumber() const;
|
||||
bool isEmpty() const;
|
||||
/// true if node contains not-null data that cannot be extended via merging
|
||||
/// used for generating common base node from multiple nodes (e.g. bonuses)
|
||||
bool containsBaseData() const;
|
||||
bool isCompact() const;
|
||||
/// removes all data from node and sets type to null
|
||||
void clear();
|
||||
|
Loading…
Reference in New Issue
Block a user