X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fnodemetadata.h;h=c028caf88666447e9d30fd80e8ea356e4641a26f;hb=5b42b5a8c26811bd7cb152cbb5ffeee77abb8d66;hp=262b64d748ce9b68fcb03919eecffc26090c8022;hpb=506203345ba2795aa0af68a434f4b77cf50e664a;p=dragonfireclient.git diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 262b64d74..c028caf88 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,13 +17,10 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef NODEMETADATA_HEADER -#define NODEMETADATA_HEADER +#pragma once -#include "irrlichttypes_bloated.h" -#include -#include -#include +#include +#include "metadata.h" /* NodeMetadata stores arbitary amounts of data for special blocks. @@ -35,56 +32,37 @@ with this program; if not, write to the Free Software Foundation, Inc., */ class Inventory; -class IGameDef; +class IItemDefManager; -class NodeMetadata +class NodeMetadata : public Metadata { public: - NodeMetadata(IGameDef *gamedef); + NodeMetadata(IItemDefManager *item_def_mgr); ~NodeMetadata(); - - void serialize(std::ostream &os) const; - void deSerialize(std::istream &is); - + + void serialize(std::ostream &os, u8 version, bool disk=true) const; + void deSerialize(std::istream &is, u8 version); + void clear(); + bool empty() const; - // Generic key/value store - std::string getString(const std::string &name) const - { - std::map::const_iterator i; - i = m_stringvars.find(name); - if(i == m_stringvars.end()) - return ""; - return resolveString(i->second); - } - void setString(const std::string &name, const std::string &var) - { - if(var.empty()) - m_stringvars.erase(name); - else - m_stringvars[name] = var; - } - // support variable names in values - std::string resolveString(const std::string &str) const - { - if(str.substr(0,2) == "${" && str[str.length()-1] == '}') - return resolveString(getString(str.substr(2,str.length()-3))); - return str; - } - std::map getStrings() const + // The inventory + Inventory *getInventory() { - return m_stringvars; + return m_inventory; } - // The inventory - Inventory* getInventory() + inline bool isPrivate(const std::string &name) const { - return m_inventory; + return m_privatevars.count(name) != 0; } + void markPrivate(const std::string &name, bool set); private: - std::map m_stringvars; + int countNonPrivate() const; + Inventory *m_inventory; + std::unordered_set m_privatevars; }; @@ -92,26 +70,48 @@ class NodeMetadata List of metadata of all the nodes of a block */ +typedef std::map NodeMetadataMap; + class NodeMetadataList { public: + NodeMetadataList(bool is_metadata_owner = true) : + m_is_metadata_owner(is_metadata_owner) + {} + ~NodeMetadataList(); - void serialize(std::ostream &os) const; - void deSerialize(std::istream &is, IGameDef *gamedef); - + void serialize(std::ostream &os, u8 blockver, bool disk = true, + bool absolute_pos = false) const; + void deSerialize(std::istream &is, IItemDefManager *item_def_mgr, + bool absolute_pos = false); + + // Add all keys in this list to the vector keys + std::vector getAllKeys(); // Get pointer to data - NodeMetadata* get(v3s16 p); + NodeMetadata *get(v3s16 p); // Deletes data void remove(v3s16 p); // Deletes old data and sets a new one void set(v3s16 p, NodeMetadata *d); // Deletes all void clear(); - -private: - std::map m_data; -}; -#endif + size_t size() const { return m_data.size(); } + + NodeMetadataMap::const_iterator begin() + { + return m_data.begin(); + } + NodeMetadataMap::const_iterator end() + { + return m_data.end(); + } + +private: + int countNonEmpty() const; + + bool m_is_metadata_owner; + NodeMetadataMap m_data; +};