*/
#include "metadata.h"
-#include "exceptions.h"
-#include "gamedef.h"
#include "log.h"
-#include <sstream>
/*
Metadata
void Metadata::clear()
{
m_stringvars.clear();
+ m_modified = true;
}
bool Metadata::empty() const
{
- return m_stringvars.size() == 0;
+ return m_stringvars.empty();
}
size_t Metadata::size() 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()) {
return resolveString(it->second, recursion);
}
-void Metadata::setString(const std::string &name, const std::string &var)
+bool Metadata::getStringToRef(
+ const std::string &name, std::string &str, u16 recursion) const
+{
+ StringMap::const_iterator it = m_stringvars.find(name);
+ if (it == m_stringvars.end()) {
+ return false;
+ }
+
+ str = resolveString(it->second, recursion);
+ return true;
+}
+
+/**
+ * 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;
+ m_modified = true;
+ 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;
}