Derive NodeMetadata from Metadata
authorrubenwardy <rubenwardy@gmail.com>
Tue, 31 Jan 2017 14:45:28 +0000 (14:45 +0000)
committerrubenwardy <rubenwardy@gmail.com>
Sat, 4 Feb 2017 22:07:55 +0000 (22:07 +0000)
build/android/jni/Android.mk
src/CMakeLists.txt
src/metadata.cpp [new file with mode: 0644]
src/metadata.h [new file with mode: 0644]
src/nodemetadata.cpp
src/nodemetadata.h

index 3be856770af30ef4c0b68b5b798b9040ee1fe15b..8f333c3d41329be1747e9ba954e24a87524dbc46 100644 (file)
@@ -184,6 +184,7 @@ LOCAL_SRC_FILES := \
                jni/src/mapnode.cpp                       \
                jni/src/mapsector.cpp                     \
                jni/src/mesh.cpp                          \
+               jni/src/metadata.cpp                      \
                jni/src/mg_biome.cpp                      \
                jni/src/mg_decoration.cpp                 \
                jni/src/mg_ore.cpp                        \
@@ -384,4 +385,3 @@ ifdef GPROF
 $(call import-module,android-ndk-profiler)
 endif
 $(call import-module,android/native_app_glue)
-
index cab5a11398b45baee34adcc701e31fc0b2bc01f0..afb591a04345251b341dda01d8a72ebba7357ee4 100644 (file)
@@ -430,6 +430,7 @@ set(common_SRCS
        mapgen_valleys.cpp
        mapnode.cpp
        mapsector.cpp
+       metadata.cpp
        mg_biome.cpp
        mg_decoration.cpp
        mg_ore.cpp
@@ -893,4 +894,3 @@ endif()
 if (BUILD_CLIENT AND USE_FREETYPE)
        add_subdirectory(cguittfont)
 endif()
-
diff --git a/src/metadata.cpp b/src/metadata.cpp
new file mode 100644 (file)
index 0000000..8e04aa2
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+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
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "metadata.h"
+#include "exceptions.h"
+#include "gamedef.h"
+#include "log.h"
+#include <sstream>
+
+/*
+       Metadata
+*/
+
+void Metadata::clear()
+{
+       m_stringvars.clear();
+}
+
+bool Metadata::empty() const
+{
+       return m_stringvars.size() == 0;
+}
+
+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 "";
+
+       return resolveString(it->second, recursion);
+}
+
+void Metadata::setString(const std::string &name, const std::string &var)
+{
+       if (var.empty()) {
+               m_stringvars.erase(name);
+       } else {
+               m_stringvars[name] = var;
+       }
+}
+
+std::string Metadata::resolveString(const std::string &str,
+       u16 recursion) 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);
+       }
+       return str;
+}
diff --git a/src/metadata.h b/src/metadata.h
new file mode 100644 (file)
index 0000000..a96bfc4
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+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
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef METADATA_HEADER
+#define METADATA_HEADER
+
+#include "irr_v3d.h"
+#include <iostream>
+#include <vector>
+#include "util/string.h"
+
+/*
+       NodeMetadata stores arbitary amounts of data for special blocks.
+       Used for furnaces, chests and signs.
+
+       There are two interaction methods: inventory menu and text input.
+       Only one can be used for a single metadata, thus only inventory OR
+       text input should exist in a metadata.
+*/
+
+class Inventory;
+class IItemDefManager;
+
+class Metadata
+{
+public:
+       void clear();
+       bool empty() const;
+
+       // Generic key/value store
+       std::string getString(const std::string &name, u16 recursion = 0) const;
+       void setString(const std::string &name, const std::string &var);
+       // Support variable names in values
+       std::string resolveString(const std::string &str, u16 recursion = 0) const;
+       const StringMap &getStrings() const
+       {
+               return m_stringvars;
+       }
+private:
+       StringMap m_stringvars;
+};
+
+#endif
index 0801a028bfc76d4d05bca965bd1c5f95dbd1a08d..9b60cf33e1a39d8d92f461b06528d8f9ba5b193b 100644 (file)
@@ -31,10 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr):
-       m_stringvars(),
        m_inventory(new Inventory(item_def_mgr))
-{
-}
+{}
 
 NodeMetadata::~NodeMetadata()
 {
@@ -70,13 +68,13 @@ void NodeMetadata::deSerialize(std::istream &is)
 
 void NodeMetadata::clear()
 {
-       m_stringvars.clear();
+       Metadata::clear();
        m_inventory->clear();
 }
 
 bool NodeMetadata::empty() const
 {
-       return m_stringvars.size() == 0 && m_inventory->getLists().size() == 0;
+       return Metadata::empty() && m_inventory->getLists().size() == 0;
 }
 
 /*
@@ -216,35 +214,3 @@ int NodeMetadataList::countNonEmpty() const
        }
        return n;
 }
-
-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
-{
-       if (recursion > 1) {
-               return str;
-       }
-       if (str.substr(0, 2) == "${" && str[str.length() - 1] == '}') {
-               return getString(str.substr(2, str.length() - 3), recursion + 1);
-       }
-       return str;
-}
-
index da1bf595d87c1b0b2151b4cc5979de726f1b8fe5..f46c0fe911037ee3e0120517df40741fa1467c0b 100644 (file)
@@ -20,10 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef NODEMETADATA_HEADER
 #define NODEMETADATA_HEADER
 
-#include "irr_v3d.h"
-#include <iostream>
-#include <vector>
-#include "util/string.h"
+#include "metadata.h"
 
 /*
        NodeMetadata stores arbitary amounts of data for special blocks.
@@ -37,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 class Inventory;
 class IItemDefManager;
 
-class NodeMetadata
+class NodeMetadata : public Metadata
 {
 public:
        NodeMetadata(IItemDefManager *item_def_mgr);
@@ -49,16 +46,6 @@ public:
        void clear();
        bool empty() const;
 
-       // Generic key/value store
-       std::string getString(const std::string &name, unsigned short recursion = 0) const;
-       void setString(const std::string &name, const std::string &var);
-       // Support variable names in values
-       std::string resolveString(const std::string &str, unsigned short recursion = 0) const;
-       StringMap getStrings() const
-       {
-               return m_stringvars;
-       }
-
        // The inventory
        Inventory *getInventory()
        {
@@ -66,7 +53,6 @@ public:
        }
 
 private:
-       StringMap m_stringvars;
        Inventory *m_inventory;
 };
 
@@ -101,4 +87,3 @@ private:
 };
 
 #endif
-