A Discrete-Event Network Simulator
API
attribute.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008 INRIA
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
18 */
19#include "attribute.h"
20
21#include "fatal-error.h"
22#include "log.h"
23#include "string.h"
24
25#include <sstream>
26
34namespace ns3
35{
36
37NS_LOG_COMPONENT_DEFINE("AttributeValue");
38
40{
41}
42
44{
45}
46
48{
49}
50
52{
53}
54
56{
57}
58
60{
61}
62
65{
66 NS_LOG_FUNCTION(this << &value);
67 if (Check(value))
68 {
69 return value.Copy();
70 }
71 // attempt to convert to string.
72 const StringValue* str = dynamic_cast<const StringValue*>(&value);
73 if (str == nullptr)
74 {
75 return nullptr;
76 }
77 // attempt to convert back to value.
79 bool ok = v->DeserializeFromString(str->Get(), this);
80 if (!ok)
81 {
82 return nullptr;
83 }
84 ok = Check(*v);
85 if (!ok)
86 {
87 return nullptr;
88 }
89 return v;
90}
91
93{
94 NS_LOG_FUNCTION(this);
95}
96
99{
100 NS_LOG_FUNCTION(this);
101 return Create<EmptyAttributeValue>();
102}
103
104std::string
106{
107 NS_LOG_FUNCTION(this << checker);
108 return "";
109}
110
111bool
113{
114 NS_LOG_FUNCTION(this << value << checker);
115 return true;
116}
117
120{
121}
122
124{
125}
126
127bool
129 const AttributeValue& value [[maybe_unused]]) const
130{
131 return true;
132}
133
134bool
135EmptyAttributeAccessor::Get(const ObjectBase* object [[maybe_unused]],
136 AttributeValue& attribute [[maybe_unused]]) const
137{
138 return true;
139}
140
141bool
143{
144 return false;
145}
146
147bool
149{
150 return false;
151}
152
155{
156}
157
159{
160}
161
162bool
164{
165 return true;
166}
167
168std::string
170{
171 return "EmptyAttribute";
172}
173
174bool
176{
177 return false;
178}
179
180std::string
182{
183 return "";
184}
185
188{
189 static EmptyAttributeValue t;
190 return Ptr<AttributeValue>(&t, false);
191}
192
193bool
194EmptyAttributeChecker::Copy(const AttributeValue& source [[maybe_unused]],
195 AttributeValue& destination [[maybe_unused]]) const
196{
197 return true;
198}
199
200} // namespace ns3
ns3::AttributeValue, ns3::AttributeAccessor and ns3::AttributeChecker declarations.
allow setting and getting the value of an attribute.
Definition: attribute.h:116
virtual ~AttributeAccessor()
Definition: attribute.cc:51
Represent the type of an attribute.
Definition: attribute.h:168
virtual ~AttributeChecker()
Definition: attribute.cc:59
virtual bool Check(const AttributeValue &value) const =0
Ptr< AttributeValue > CreateValidValue(const AttributeValue &value) const
Create a valid value from the argument value, or reinterpret the argument as a string.
Definition: attribute.cc:64
virtual Ptr< AttributeValue > Create() const =0
Hold a value for an Attribute.
Definition: attribute.h:70
virtual ~AttributeValue()
Definition: attribute.cc:43
bool Get(const ObjectBase *object, AttributeValue &attribute) const override
Definition: attribute.cc:135
bool Set(ObjectBase *object, const AttributeValue &value) const override
Definition: attribute.cc:128
~EmptyAttributeAccessor() override
Definition: attribute.cc:123
bool HasSetter() const override
Definition: attribute.cc:148
bool HasGetter() const override
Definition: attribute.cc:142
std::string GetValueTypeName() const override
Definition: attribute.cc:169
bool Check(const AttributeValue &value) const override
Definition: attribute.cc:163
Ptr< AttributeValue > Create() const override
Definition: attribute.cc:187
bool Copy(const AttributeValue &source, AttributeValue &destination) const override
Copy the source to the destination.
Definition: attribute.cc:194
bool HasUnderlyingTypeInformation() const override
Definition: attribute.cc:175
~EmptyAttributeChecker() override
Definition: attribute.cc:158
std::string GetUnderlyingTypeInformation() const override
Definition: attribute.cc:181
A class for an empty attribute value.
Definition: attribute.h:234
std::string SerializeToString(Ptr< const AttributeChecker > checker) const override
Definition: attribute.cc:105
Ptr< AttributeValue > Copy() const override
Definition: attribute.cc:98
EmptyAttributeValue()
Default constructor.
Definition: attribute.cc:92
bool DeserializeFromString(std::string value, Ptr< const AttributeChecker > checker) override
Definition: attribute.cc:112
Anchor the ns-3 type and attribute system.
Definition: object-base.h:170
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Hold variables of type string.
Definition: string.h:42
std::string Get() const
Definition: string.cc:31
NS_FATAL_x macro definitions.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Debug message logging.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
value
Definition: second.py:41
ns3::StringValue attribute value declarations.