/usr/include/ns3.27/ns3/object-base.h is in libns3-dev 3.27+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2008 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#ifndef OBJECT_BASE_H
#define OBJECT_BASE_H
#include "type-id.h"
#include "callback.h"
#include <string>
#include <list>
/**
* \file
* \ingroup object
* ns3::ObjectBase declaration and
* NS_OBJECT_ENSURE_REGISTERED() madro definition.
*/
/**
* \ingroup object
* \brief Register an Object subclass with the TypeId system.
*
* This macro should be invoked once for every class which
* defines a new GetTypeId method.
*
* If the class is in a namespace, then the macro call should also be
* in the namespace.
*/
#define NS_OBJECT_ENSURE_REGISTERED(type) \
static struct Object ## type ## RegistrationClass \
{ \
Object ## type ## RegistrationClass () { \
ns3::TypeId tid = type::GetTypeId (); \
tid.SetSize (sizeof (type)); \
tid.GetParent (); \
} \
} Object ## type ## RegistrationVariable
/**
* \ingroup object
* \brief Explicitly instantiate a template class and register the resulting
* instance with the TypeId system.
*
* This macro should be invoked once for every required instance of a template
* class which derives from the Object class and defines a new GetTypeId method.
*
* If the template class is in a namespace, then the macro call should also be
* in the namespace.
*/
#define NS_OBJECT_TEMPLATE_CLASS_DEFINE(type,param) \
template class type<param>; \
template <> std::string DoGetTypeParamName<type<param> > () \
{ \
return #param; \
} \
static struct Object ## type ## param ## RegistrationClass \
{ \
Object ## type ## param ## RegistrationClass () { \
ns3::TypeId tid = type<param>::GetTypeId (); \
tid.SetSize (sizeof (type<param>)); \
tid.GetParent (); \
} \
} Object ## type ## param ## RegistrationVariable
namespace ns3 {
/**
* \brief Helper function to get the name (as a string) of the type parameter
* of a template class
* \return the name of the type parameter as a string
*
* A specialization of this function is defined by the
* NS_OBJECT_TEMPLATE_CLASS_DEFINE macro.
*/
template <typename T>
std::string DoGetTypeParamName (void);
/**
* \brief Helper function to get the name (as a string) of the type parameter
* of a template class
* \return the name of the type parameter as a string
*/
template <typename T>
std::string GetTypeParamName (void)
{
return DoGetTypeParamName<T> ();
}
class AttributeConstructionList;
/**
* \ingroup object
*
* \brief Anchor the ns-3 type and attribute system.
*
* Every class which wants to integrate in the ns-3 type and attribute
* system should derive from this base class. This base class provides:
* - A way to associate an ns3::TypeId to each object instance.
* - A way to set and get the attributes registered in the ns3::TypeId.
*/
class ObjectBase
{
public:
/**
* Get the type ID.
* \return The object TypeId.
*/
static TypeId GetTypeId (void);
/**
* Virtual destructor.
*/
virtual ~ObjectBase ();
/**
* Get the most derived TypeId for this Object.
*
* This method is typically implemented by ns3::Object::GetInstanceTypeId
* but some classes which derive from ns3::ObjectBase directly
* have to implement it themselves.
*
* \return The TypeId associated to the most-derived type
* of this instance.
*/
virtual TypeId GetInstanceTypeId (void) const = 0;
/**
*
* Set a single attribute, raising fatal errors if unsuccessful.
*
* This will either succeed at setting the attribute
* or it will raise NS_FATAL_ERROR() on these conditions:
*
* - The attribute doesn't exist in this Object.
* - The attribute can't be set (no Setter).
* - The attribute couldn't be deserialized from the AttributeValue.
*
* \param [in] name The name of the attribute to set.
* \param [in] value The name of the attribute to set.
*/
void SetAttribute (std::string name, const AttributeValue &value);
/**
* Set a single attribute without raising errors.
*
* If the attribute could not be set this will return \c false,
* but not raise any errors.
*
* \param [in] name The name of the attribute to set.
* \param [in] value The value to set it to.
* \return \c true if the requested attribute exists and could be set,
* \c false otherwise.
*/
bool SetAttributeFailSafe (std::string name, const AttributeValue &value);
/**
* Get the value of an attribute, raising fatal errors if unsuccessful.
*
* This will either succeed at setting the attribute
* or it will raise NS_FATAL_ERROR() on these conditions:
*
* - The attribute doesn't exist in this Object.
* - The attribute can't be read (no Getter).
* - The attribute doesn't support string formatting.
* - The attribute couldn't be serialized into the AttributeValue.
*
* \param [in] name The name of the attribute to read.
* \param [out] value Where the result should be stored.
*/
void GetAttribute (std::string name, AttributeValue &value) const;
/**
* Get the value of an attribute without raising erros.
*
* If the atttribute could not be read this will return \c false,
* but not raise any errors.
*
* \param [in] name The name of the attribute to read.
* \param [out] value Where the result value should be stored.
* \return \c true if the requested attribute was found, \c false otherwise.
*/
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const;
/**
* Connect a TraceSource to a Callback with a context.
*
* The target trace source should be registered with TypeId::AddTraceSource.
*
* \param [in] name The name of the target trace source.
* \param [in] context The trace context associated to the callback.
* \param [in] cb The callback to connect to the trace source.
* \returns \c true.
*/
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb);
/**
* Connect a TraceSource to a Callback without a context.
*
* The target trace source should be registered with TypeId::AddTraceSource.
*
* \param [in] name The name of the target trace source.
* \param [in] cb The callback to connect to the trace source.
* \returns \c true.
*/
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb);
/**
* Disconnect from a TraceSource a Callback previously connected
* with a context.
*
* The target trace source should be registered with TypeId::AddTraceSource.
*
* \param [in] name The name of the target trace source.
* \param [in] context The trace context associated to the callback.
* \param [in] cb The callback to disconnect from the trace source.
* \returns \c true.
*/
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb);
/**
* Disconnect from a TraceSource a Callback previously connected
* without a context.
*
* The target trace source should be registered with TypeId::AddTraceSource.
*
* \param [in] name The name of the target trace source.
* \param [in] cb The callback to disconnect from the trace source.
* \returns \c true.
*/
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb);
protected:
/**
* Notifier called once the ObjectBase is fully constructed.
*
* This method is invoked once all member attributes have been
* initialized. Subclasses can override this method to be notified
* of this event but if they do this, they must chain up to their
* parent's NotifyConstructionCompleted method.
*/
virtual void NotifyConstructionCompleted (void);
/**
* Complete construction of ObjectBase; invoked by derived classes.
*
* Invoked from subclasses to initialize all of their
* attribute members. This method will typically be invoked
* automatically from ns3::CreateObject if your class derives
* from ns3::Object. If you derive from ns3::ObjectBase directly,
* you should make sure that you invoke this method from
* your most-derived constructor.
*
* \param [in] attributes The attribute values used to initialize
* the member variables of this object's instance.
*/
void ConstructSelf (const AttributeConstructionList &attributes);
private:
/**
* Attempt to set the value referenced by the accessor \p spec
* to a valid value according to the \c checker, based on \p value.
*
* \param [in] spec The accessor for the storage location.
* \param [in] checker The checker to use in validating the value.
* \param [in] value The value to attempt to store.
* \returns \c true if the \c value could be validated by the \p checker
* and written to the storage location.
*/
bool DoSet (Ptr<const AttributeAccessor> spec,
Ptr<const AttributeChecker> checker,
const AttributeValue &value);
};
} // namespace ns3
#endif /* OBJECT_BASE_H */
|