1 /* 2 Minetest 3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com> 4 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. 9 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. 14 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. 18 */ 19 20 #pragma once 21 22 #include "irr_v3d.h" 23 #include <iostream> 24 #include <vector> 25 #include "util/string.h" 26 27 class Metadata 28 { 29 bool m_modified = false; 30 public: 31 virtual ~Metadata() = default; 32 33 virtual void clear(); 34 virtual bool empty() const; 35 36 bool operator==(const Metadata &other) const; 37 inline bool operator!=(const Metadata &other) const 38 { 39 return !(*this == other); 40 } 41 42 // 43 // Key-value related 44 // 45 46 size_t size() const; 47 bool contains(const std::string &name) const; 48 const std::string &getString(const std::string &name, u16 recursion = 0) const; 49 bool getStringToRef(const std::string &name, std::string &str, u16 recursion = 0) const; 50 virtual bool setString(const std::string &name, const std::string &var); removeString(const std::string & name)51 inline bool removeString(const std::string &name) { return setString(name, ""); } getStrings()52 const StringMap &getStrings() const 53 { 54 return m_stringvars; 55 } 56 // Add support for variable names in values 57 const std::string &resolveString(const std::string &str, u16 recursion = 0) const; 58 isModified()59 inline bool isModified() const { return m_modified; } setModified(bool v)60 inline void setModified(bool v) { m_modified = v; } 61 protected: 62 StringMap m_stringvars; 63 }; 64