GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/resources/map/properties.h Lines: 3 26 11.5 %
Date: 2021-03-17 Branches: 0 26 0.0 %

Line Branch Exec Source
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:
38
47
        Properties() :
39
94
            mProperties()
40
        {
41
        }
42
43
        A_DELETE_COPY(Properties)
44
45
        /**
46
         * Destructor.
47
         */
48
        virtual ~Properties()
49
94
        { }
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
         */
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
         */
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
         */
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
         */
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
         */
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