source: nrEngine/src/Property.cpp @ 18

Revision 18, 4.4 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 "Property.h"
17#include "Exception.h"
18#include "Log.h"
19
20namespace nrEngine {
21
22        //----------------------------------------------------------------------------------
23        Property::Property() :mUserData(NULL)
24        {
25
26        }
27
28        //----------------------------------------------------------------------------------
29        Property::Property(const std::string& name) : mName(name), mFullName(name), mUserData(NULL)
30        {
31
32        }
33
34        //----------------------------------------------------------------------------------
35        Property::Property (const std::string& name, const boost::any& value) : mName(name), mFullName(name), mValue(value), mUserData(NULL)
36        {
37
38        }
39
40        //----------------------------------------------------------------------------------
41        Property::Property(const Property& p):mName(p.getName()), mFullName(p.getFullName()), mValue(p.getValue()), mUserData(p.mUserData)
42        {
43
44        }
45
46        //----------------------------------------------------------------------------------
47        Property& Property::operator=(const boost::any& val)
48        {
49                mValue = val;
50                return *this;
51        }
52
53        //----------------------------------------------------------------------------------
54        bool Property::operator==(const Property& p)
55        {
56                return (p.getFullName() == mFullName && p.getValue().type() == mValue.type());
57        }
58
59       
60        //----------------------------------------------------------------------------------
61        PropertyList& PropertyList::operator, (const Property& p)
62        {
63                push_back(p);
64                return *this;
65        }
66
67        //----------------------------------------------------------------------------------
68        PropertyList& PropertyList::operator, ( Property& p)
69        {
70                p = front();
71                pop_front();
72                return *this;
73        }
74
75        //----------------------------------------------------------------------------------
76        bool PropertyList::exists(const std::string& name) const
77        {
78                // search for the key
79                const_iterator it = begin();
80                for (; it != end(); it++)
81                        if (it->getName() == name) return true;
82                return false;
83        }
84
85        //----------------------------------------------------------------------------------
86        /*const Property& PropertyList::operator[](const std::string& name)
87        {
88                // search for the key
89                for (const_iterator it = begin(); it != end(); it++) if (it->getName() == name) return *it;
90
91                // we could not find it, so create it and return reference
92                push_back(Property(name));
93                for (const_iterator it = begin(); it != end(); it++) if (it->getName() == name) return *it;
94               
95                // ok it should be there, so exception
96                NR_EXCEPT(UNKNOWN_ERROR, "This is a BUG! Contact Author!", "PropertyList::operator[]");
97        }*/
98       
99        //----------------------------------------------------------------------------------
100        Property& PropertyList::operator[](const std::string& name)
101        {
102                // search for the key
103                for (iterator it = begin(); it != end(); it++) if (it->getName() == name) return *it;
104
105                // we could not find it, so create it and return reference
106                Property p(name);
107                push_back(p);
108
109                // some debug info
110                NR_Log(Log::LOG_ENGINE, Log::LL_DEBUG, "Property: Initialize new property '%s'", name.c_str());
111
112                return back();
113        }
114
115        //----------------------------------------------------------------------------------
116        const Property& PropertyList::operator[](const std::string& name) const
117        {
118                // search for the key
119                for (const_iterator it = begin(); it != end(); it++) if (it->getName() == name) return *it;
120
121                // we could not find it, so error, because we can not add new elements to const
122                NR_EXCEPT(UNKNOWN_ERROR, "const PropertyList can not add new elements", "PropertyList::operator[]");
123        }
124
125};
126
Note: See TracBrowser for help on using the repository browser.