X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmetadata.cpp;h=6ad65e007843a0f9af81f09b19cd5b1cd71e4fee;hb=4b553ece09908dfdee59e9841fdc9420350eda9f;hp=96453d710849e0578fa8f03bc20b8048f2b6143c;hpb=c2e7b1f57941cb34cb7e3d71dc040fad53a64e3e;p=minetest.git diff --git a/src/metadata.cpp b/src/metadata.cpp index 96453d710..6ad65e007 100644 --- a/src/metadata.cpp +++ b/src/metadata.cpp @@ -18,10 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "metadata.h" -#include "exceptions.h" -#include "gamedef.h" #include "log.h" -#include /* Metadata @@ -34,7 +31,7 @@ void Metadata::clear() bool Metadata::empty() const { - return m_stringvars.size() == 0; + return m_stringvars.empty(); } size_t Metadata::size() const @@ -52,18 +49,15 @@ bool Metadata::operator==(const Metadata &other) const if (size() != other.size()) return false; - for (StringMap::const_iterator it = m_stringvars.begin(); - it != m_stringvars.end(); ++it) { - if (!other.contains(it->first) || - other.getString(it->first) != it->second) + for (const auto &sv : m_stringvars) { + if (!other.contains(sv.first) || other.getString(sv.first) != sv.second) return false; } return true; } -const std::string &Metadata::getString(const std::string &name, - u16 recursion) const +const std::string &Metadata::getString(const std::string &name, u16 recursion) const { StringMap::const_iterator it = m_stringvars.find(name); if (it == m_stringvars.end()) { @@ -74,22 +68,34 @@ const std::string &Metadata::getString(const std::string &name, return resolveString(it->second, recursion); } -void Metadata::setString(const std::string &name, const std::string &var) +/** + * Sets var to name key in the metadata storage + * + * @param name + * @param var + * @return true if key-value pair is created or changed + */ +bool Metadata::setString(const std::string &name, const std::string &var) { if (var.empty()) { m_stringvars.erase(name); - } else { - m_stringvars[name] = var; + return true; } + + StringMap::iterator it = m_stringvars.find(name); + if (it != m_stringvars.end() && it->second == var) { + return false; + } + + m_stringvars[name] = var; + return true; } -const std::string &Metadata::resolveString(const std::string &str, - u16 recursion) const +const std::string &Metadata::resolveString(const std::string &str, u16 recursion) const { - if (recursion <= 1 && - str.substr(0, 2) == "${" && str[str.length() - 1] == '}') { + if (recursion <= 1 && str.substr(0, 2) == "${" && str[str.length() - 1] == '}') { return getString(str.substr(2, str.length() - 3), recursion + 1); - } else { - return str; } + + return str; }