*/
NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr):
- m_stringvars(),
m_inventory(new Inventory(item_def_mgr))
-{
-}
+{}
NodeMetadata::~NodeMetadata()
{
void NodeMetadata::clear()
{
- m_stringvars.clear();
+ Metadata::clear();
m_inventory->clear();
}
+bool NodeMetadata::empty() const
+{
+ return Metadata::empty() && m_inventory->getLists().size() == 0;
+}
+
/*
NodeMetadataList
*/
Version 0 is a placeholder for "nothing to see here; go away."
*/
- if(m_data.empty()){
+ u16 count = countNonEmpty();
+ if (count == 0) {
writeU8(os, 0); // version
return;
}
writeU8(os, 1); // version
-
- u16 count = m_data.size();
writeU16(os, count);
for(std::map<v3s16, NodeMetadata*>::const_iterator
{
v3s16 p = i->first;
NodeMetadata *data = i->second;
+ if (data->empty())
+ continue;
u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X;
writeU16(os, p16);
}
if (version != 1) {
- std::string err_str = std::string(__FUNCTION_NAME)
+ std::string err_str = std::string(FUNCTION_NAME)
+ ": version " + itos(version) + " not supported";
infostream << err_str << std::endl;
throw SerializationError(err_str);
m_data.clear();
}
-std::string NodeMetadata::getString(const std::string &name,
- unsigned short recursion) const
-{
- StringMap::const_iterator it = m_stringvars.find(name);
- if (it == m_stringvars.end())
- return "";
-
- return resolveString(it->second, recursion);
-}
-
-void NodeMetadata::setString(const std::string &name, const std::string &var)
-{
- if (var.empty()) {
- m_stringvars.erase(name);
- } else {
- m_stringvars[name] = var;
- }
-}
-
-std::string NodeMetadata::resolveString(const std::string &str,
- unsigned short recursion) const
+int NodeMetadataList::countNonEmpty() const
{
- if (recursion > 1) {
- return str;
- }
- if (str.substr(0, 2) == "${" && str[str.length() - 1] == '}') {
- return getString(str.substr(2, str.length() - 3), recursion + 1);
+ int n = 0;
+ std::map<v3s16, NodeMetadata*>::const_iterator it;
+ for (it = m_data.begin(); it != m_data.end(); ++it) {
+ if (!it->second->empty())
+ n++;
}
- return str;
+ return n;
}
-