3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 void Metadata::clear()
33 bool Metadata::empty() const
35 return m_stringvars
.empty();
38 size_t Metadata::size() const
40 return m_stringvars
.size();
43 bool Metadata::contains(const std::string
&name
) const
45 return m_stringvars
.find(name
) != m_stringvars
.end();
48 bool Metadata::operator==(const Metadata
&other
) const
50 if (size() != other
.size())
53 for (const auto &sv
: m_stringvars
) {
54 if (!other
.contains(sv
.first
) || other
.getString(sv
.first
) != sv
.second
)
61 const std::string
&Metadata::getString(const std::string
&name
, u16 recursion
) const
63 StringMap::const_iterator it
= m_stringvars
.find(name
);
64 if (it
== m_stringvars
.end()) {
65 static const std::string empty_string
= std::string("");
69 return resolveString(it
->second
, recursion
);
72 bool Metadata::getStringToRef(
73 const std::string
&name
, std::string
&str
, u16 recursion
) const
75 StringMap::const_iterator it
= m_stringvars
.find(name
);
76 if (it
== m_stringvars
.end()) {
80 str
= resolveString(it
->second
, recursion
);
85 * Sets var to name key in the metadata storage
89 * @return true if key-value pair is created or changed
91 bool Metadata::setString(const std::string
&name
, const std::string
&var
)
94 m_stringvars
.erase(name
);
98 StringMap::iterator it
= m_stringvars
.find(name
);
99 if (it
!= m_stringvars
.end() && it
->second
== var
) {
103 m_stringvars
[name
] = var
;
108 const std::string
&Metadata::resolveString(const std::string
&str
, u16 recursion
) const
110 if (recursion
<= 1 && str
.substr(0, 2) == "${" && str
[str
.length() - 1] == '}') {
111 return getString(str
.substr(2, str
.length() - 3), recursion
+ 1);