1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-10-31 00:07:39 +02:00

Replaced vector of strings with simple bool for flag

This commit is contained in:
Ivan Savenko
2024-02-13 15:20:08 +02:00
parent 922966dcf8
commit d1c274f93f
6 changed files with 45 additions and 23 deletions

View File

@@ -129,6 +129,16 @@ const std::string & JsonNode::getModScope() const
return modScope;
}
void JsonNode::setOverrideFlag(bool value)
{
overrideFlag = value;
}
bool JsonNode::getOverrideFlag() const
{
return overrideFlag;
}
void JsonNode::setModScope(const std::string & metadata, bool recursive)
{
modScope = metadata;

View File

@@ -43,10 +43,9 @@ private:
/// Mod-origin of this particular field
std::string modScope;
public:
/// meta-flags like override
std::vector<std::string> flags;
bool overrideFlag = false;
public:
JsonNode() = default;
/// Create single node with specified value
@@ -71,6 +70,9 @@ public:
const std::string & getModScope() const;
void setModScope(const std::string & metadata, bool recursive = true);
void setOverrideFlag(bool value);
bool getOverrideFlag() const;
/// Convert node to another type. Converting to nullptr will clear all data
void setType(JsonType Type);
JsonType getType() const;
@@ -132,7 +134,16 @@ public:
template <typename Handler> void serialize(Handler &h)
{
h & modScope;
h & flags;
if (h.version >= Handler::Version::JSON_FLAGS)
{
h & overrideFlag;
}
else
{
std::vector<std::string> oldFlags;
h & oldFlags;
}
h & data;
}
};

View File

@@ -255,20 +255,26 @@ bool JsonParser::extractStruct(JsonNode &node)
if (!extractWhitespace())
return false;
bool overrideFlag = false;
std::string key;
if (!extractString(key))
return false;
// split key string into actual key and meta-flags
std::vector<std::string> keyAndFlags;
boost::split(keyAndFlags, key, boost::is_any_of("#"));
key = keyAndFlags[0];
// check for unknown flags - helps with debugging
std::vector<std::string> knownFlags = { "override" };
for(int i = 1; i < keyAndFlags.size(); i++)
if (key.find('#') != std::string::npos)
{
if(!vstd::contains(knownFlags, keyAndFlags[i]))
error("Encountered unknown flag #" + keyAndFlags[i], true);
// split key string into actual key and meta-flags
std::vector<std::string> keyAndFlags;
boost::split(keyAndFlags, key, boost::is_any_of("#"));
key = keyAndFlags[0];
for(int i = 1; i < keyAndFlags.size(); i++)
{
if (keyAndFlags[i] == "override")
overrideFlag = true;
else
error("Encountered unknown flag #" + keyAndFlags[i], true);
}
}
if (node.Struct().find(key) != node.Struct().end())
@@ -280,9 +286,7 @@ bool JsonParser::extractStruct(JsonNode &node)
if (!extractElement(node.Struct()[key], '}'))
return false;
// flags from key string belong to referenced element
for(int i = 1; i < keyAndFlags.size(); i++)
node.Struct()[key].flags.push_back(keyAndFlags[i]);
node.Struct()[key].setOverrideFlag(overrideFlag);
if (input[pos] == '}')
{

View File

@@ -223,7 +223,7 @@ void JsonUtils::merge(JsonNode & dest, JsonNode & source, bool ignoreOverride, b
}
case JsonNode::JsonType::DATA_STRUCT:
{
if(!ignoreOverride && vstd::contains(source.flags, "override"))
if(!ignoreOverride && source.getOverrideFlag())
{
std::swap(dest, source);
}

View File

@@ -39,8 +39,6 @@ void JsonWriter::writeEntry(JsonMap::const_iterator entry)
{
if (!entry->second.getModScope().empty())
out << prefix << " // " << entry->second.getModScope() << "\n";
if(!entry->second.flags.empty())
out << prefix << " // flags: " << boost::algorithm::join(entry->second.flags, ", ") << "\n";
out << prefix;
}
writeString(entry->first);
@@ -54,8 +52,6 @@ void JsonWriter::writeEntry(JsonVector::const_iterator entry)
{
if (!entry->getModScope().empty())
out << prefix << " // " << entry->getModScope() << "\n";
if(!entry->flags.empty())
out << prefix << " // flags: " << boost::algorithm::join(entry->flags, ", ") << "\n";
out << prefix;
}
writeNode(*entry);

View File

@@ -35,7 +35,8 @@ enum class ESerializationVersion : int32_t
RELEASE_143, // 832 +text container in campaigns, +starting hero in RMG options
HAS_EXTRA_OPTIONS, // 833 +extra options struct as part of startinfo
DESTROYED_OBJECTS, // 834 +list of objects destroyed by player
CAMPAIGN_MAP_TRANSLATIONS,
CAMPAIGN_MAP_TRANSLATIONS, // 835 +campaigns include translations for its maps
JSON_FLAGS, // 836 json uses new format for flags
CURRENT = CAMPAIGN_MAP_TRANSLATIONS
CURRENT = JSON_FLAGS
};