1 /* 2 * The ManaPlus Client 3 * Copyright (C) 2004-2009 The Mana World Development Team 4 * Copyright (C) 2009-2010 The Mana Developers 5 * Copyright (C) 2011-2019 The ManaPlus Developers 6 * Copyright (C) 2019-2021 Andrei Karas 7 * 8 * This file is part of The ManaPlus Client. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program. If not, see <http://www.gnu.org/licenses/>. 22 */ 23 24 #ifndef RESOURCES_MAP_PROPERTIES_H 25 #define RESOURCES_MAP_PROPERTIES_H 26 27 #include "localconsts.h" 28 29 #include <map> 30 #include <sstream> 31 32 /** 33 * A class holding a set of properties. 34 */ 35 class Properties notfinal 36 { 37 public: Properties()38 Properties() : 39 mProperties() 40 { 41 } 42 A_DELETE_COPY(Properties)43 A_DELETE_COPY(Properties) 44 45 /** 46 * Destructor. 47 */ 48 virtual ~Properties() 49 { } 50 51 /** 52 * Get a map property. 53 * 54 * @param name The name of the property. 55 * @param def Default value, empty string by default. 56 * @return the value of the given property or the given default when it 57 * doesn't exist. 58 */ getProperty(const std::string & name,const std::string & def)59 const std::string getProperty(const std::string &name, 60 const std::string &def) 61 const A_WARN_UNUSED 62 { 63 const PropertyMap::const_iterator i = mProperties.find(name); 64 return (i != mProperties.end()) ? i->second : def; 65 } 66 67 /** 68 * Gets a map property as a float. 69 * 70 * @param name The name of the property. 71 * @param def Default value, 0.0F by default. 72 * @return the value of the given property or the given default when it 73 * doesn't exist. 74 */ getFloatProperty(const std::string & name,const float def)75 float getFloatProperty(const std::string &name, 76 const float def) const A_WARN_UNUSED 77 { 78 const PropertyMap::const_iterator i = mProperties.find(name); 79 float ret = def; 80 if (i != mProperties.end()) 81 { 82 std::stringstream ss; 83 ss.str(i->second); 84 ss >> ret; 85 } 86 return ret; 87 } 88 89 /** 90 * Gets a map property as a boolean. 91 * 92 * @param name The name of the property. 93 * @param def Default value, false by default. 94 * @return the value of the given property or the given default when it 95 * doesn't exist. 96 */ getBoolProperty(const std::string & name,const bool def)97 bool getBoolProperty(const std::string &name, 98 const bool def) const A_WARN_UNUSED 99 { 100 const PropertyMap::const_iterator i = mProperties.find(name); 101 bool ret = def; 102 if (i != mProperties.end()) 103 { 104 if (i->second == "true") 105 ret = true; 106 if (i->second == "false") 107 ret = false; 108 } 109 return ret; 110 } 111 112 /** 113 * Returns whether a certain property is available. 114 * 115 * @param name The name of the property. 116 * @return <code>true</code> when a property is defined, 117 * <code>false</code> otherwise. 118 */ hasProperty(const std::string & name)119 bool hasProperty(const std::string &name) const A_WARN_UNUSED 120 { return (mProperties.find(name) != mProperties.end()); } 121 122 /** 123 * Set a map property. 124 * 125 * @param name The name of the property. 126 * @param value The value of the property. 127 */ setProperty(const std::string & name,const std::string & value)128 void setProperty(const std::string &name, const std::string &value) 129 { mProperties[name] = value; } 130 131 132 private: 133 typedef std::map<std::string, std::string> PropertyMap; 134 PropertyMap mProperties; 135 }; 136 137 #endif // RESOURCES_MAP_PROPERTIES_H 138