source: nrEngine/src/PropertyManager.cpp @ 18

Revision 18, 4.0 KB checked in by art, 13 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13//----------------------------------------------------------------------------------
14// Includes
15//----------------------------------------------------------------------------------
16#include "PropertyManager.h"
17#include "Exception.h"
18
19namespace nrEngine {
20
21        //----------------------------------------------------------------------------------
22        PropertyManager::PropertyManager()
23        {
24
25        }
26
27        //----------------------------------------------------------------------------------
28        PropertyManager::~PropertyManager()
29        {
30                // clean the property map
31                mPropertyMap.clear();
32        }
33               
34        //----------------------------------------------------------------------------------
35        void PropertyManager::createGroup(const std::string& name)
36        {
37                mPropertyMap.insert(std::pair<std::string, PropertyList>(name, PropertyList()));
38        }
39
40        //----------------------------------------------------------------------------------
41        const PropertyList& PropertyManager::getPropertyList(const std::string& group)
42        {
43                return mPropertyMap[group];
44        }
45
46        //----------------------------------------------------------------------------------
47        Property& PropertyManager::getProperty(const std::string& name, const std::string& group)
48        {
49                return mPropertyMap[group][name];
50        }
51
52        //----------------------------------------------------------------------------------
53        Property& PropertyManager::getPropertyByFullName(const std::string& fullname)
54        {
55                // iterate through all groups
56                PropertyMap::iterator it = mPropertyMap.begin();
57                for (; it != mPropertyMap.end(); it++)
58                {
59                        // search for such an element
60                        PropertyList::iterator jt = it->second.begin();
61                        for (; jt != it->second.end(); jt++)
62                                if (jt->getFullName() == fullname)
63                                {
64                                        return *jt;
65                                }
66                }
67
68                // we have not found any such element, so create one
69                NR_Log(Log::LOG_ENGINE, Log::LL_WARNING, "PropertyManager: Property with fullname '%s' is not registered, so create it in default group", fullname.c_str());
70                return getProperty(fullname, "");               
71        }
72       
73        //----------------------------------------------------------------------------------
74        void PropertyManager::set(const Property& property, const std::string& name, const std::string& group)
75        {
76                Property& p = getProperty(name, group);
77                p.copyDataOnly(property);
78                p.mName = name;
79                p.mFullName = group + std::string(".") + name;         
80        }
81       
82        //----------------------------------------------------------------------------------
83        void PropertyManager::setByFullName(const Property& property, const std::string& fullname)
84        {
85                // get property by fullname
86                Property& p = getPropertyByFullName(fullname);
87                p.copyDataOnly(property);
88                p.mFullName = fullname;
89                if (p.mName.length() == 0) p.mName = fullname;
90        }
91
92
93        //----------------------------------------------------------------------------------
94        void PropertyManager::set(const boost::any& value, const std::string& name, const std::string& group)
95        {
96                // get property
97                Property& p = getProperty(name, group);
98
99                // set new value
100                p.mValue = value;
101        }
102
103        //----------------------------------------------------------------------------------
104        void PropertyManager::setByFullName(const boost::any& value, const std::string& fullname)
105        {
106                // get property
107                Property& p = getPropertyByFullName(fullname);
108
109                // set new value
110                p.mValue = value;
111        }
112
113};
114
115
116
Note: See TracBrowser for help on using the repository browser.