This file is indexed.

/usr/include/ns3.26/ns3/attribute.h is in libns3-dev 3.26+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
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
/* -*- 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 ATTRIBUTE_H
#define ATTRIBUTE_H

#include <string>
#include <stdint.h>
#include "ptr.h"
#include "simple-ref-count.h"

/**
 * \file
 * \ingroup attribute
 * ns3::AttributeValue, ns3::AttributeAccessor and
 * ns3::AttributeChecker declarations.
 */

namespace ns3 {

class AttributeAccessor;
class AttributeChecker;
class Attribute;
class ObjectBase;

/**
 *
 * \ingroup core
 * \defgroup attribute Attributes
 *
 * The \c ns-3 attribute system is the mechanism used in \c ns-3 to
 * organize, document, and modify the *values* used by the various
 * component models.
 *
 * Attributes also enable the tracing and statistics gathering
 * in the simulator.
 *
 * See \ref attributehelper for macros to ease the declaration
 * and definition of Attributes.
 */

/**
 *
 * \ingroup attribute
 *
 * \brief Hold a value for an Attribute.
 *
 * Instances of this class should always be wrapped into an Attribute object.
 * Most subclasses of this base class are implemented by the 
 * ATTRIBUTE_HELPER_* macros.
 */
class AttributeValue : public SimpleRefCount<AttributeValue>
{
public:
  AttributeValue ();
  virtual ~AttributeValue ();

  /**
   * \returns a deep copy of this class, wrapped into an Attribute object.
   */
  virtual Ptr<AttributeValue> Copy (void) const = 0;
  /**
   * \param [in] checker The checker associated to the attribute
   * \returns A string representation of this value.
   *
   * In most cases, this method will not make any use of the checker argument.
   * However, in a very limited set of cases, the checker argument is needed to
   * perform proper serialization. A nice example of code which needs it is
   * the EnumValue::SerializeToString code.
   */
  virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const = 0;
  /**
   * \param [in] value A string representation of the value
   * \param [in] checker A pointer to the checker associated to the attribute.
   * \returns true if the input string was correctly-formatted and could be
   *          successfully deserialized, false otherwise.
   *
   * Upon return of this function, this AttributeValue instance contains
   * the deserialized value.
   * In most cases, this method will not make any use of the checker argument.
   * However, in a very limited set of cases, the checker argument is needed to
   * perform proper serialization. A nice example of code which needs it is
   * the EnumValue::SerializeToString code.
   */
  virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker) = 0;
};

/**
 * \brief allow setting and getting the value of an attribute.
 *
 * \ingroup attribute
 *
 * The goal of this class is to hide from the user how an attribute
 * is actually set or get to or from a class instance. Implementations
 * of this base class are usually provided through the MakeAccessorHelper
 * template functions, hidden behind an ATTRIBUTE_HELPER_* macro.
 */
class AttributeAccessor : public SimpleRefCount<AttributeAccessor>
{
public:
  AttributeAccessor ();
  virtual ~AttributeAccessor ();

  /**
   * \param [in,out] object The object instance to set the value in
   * \param [in] value The value to set
   * \returns true if the value could be set successfully, false otherwise.
   *
   * This method expects that the caller has checked that the input value is
   * valid with AttributeChecker::Check.
   */
  virtual bool Set (ObjectBase * object, const AttributeValue &value) const = 0;
  /**
   * \param [in,out] object The object instance to get the value from
   * \param [out] attribute A pointer to where the value should be set.
   * \returns true if the value could be read successfully, and
   *          stored in the input value, false otherwise.
   *
   * This method expects that the caller has checked that the input value is
   * valid with AttributeChecker::Check.
   */
  virtual bool Get (const ObjectBase * object, AttributeValue &attribute) const = 0;

  /**
   * \return true if this accessor supports the Get operation, false
   *         otherwise.
   */
  virtual bool HasGetter (void) const = 0;
  /**
   * \return true if this accessor supports the Set operation, false
   *         otherwise.
   */
  virtual bool HasSetter (void) const = 0;
};

/**
 * \brief Represent the type of an attribute
 *
 * \ingroup attribute
 *
 * Each type of attribute has an associated unique AttributeChecker
 * subclass. The type of the subclass can be safely used by users
 * to infer the type of the associated attribute. i.e., we expect
 * binding authors to use the checker associated to an attribute
 * to detect the type of the associated attribute.
 *
 * Most subclasses of this base class are implemented by the 
 * ATTRIBUTE_HELPER_HEADER and ATTRIBUTE_HELPER_CPP macros.
 */
class AttributeChecker : public SimpleRefCount<AttributeChecker>
{
public:
  AttributeChecker ();
  virtual ~AttributeChecker ();

  /**
   * Create a valid value from the argument value,
   * or reinterpret the argument as a string.
   *
   * \param [in] value The AttributeValue to check
   * \return Ptr to a valid value
   */
  Ptr<AttributeValue> CreateValidValue (const AttributeValue &value) const;
  /**
   * \param [in] value A pointer to the value to check
   * \returns true if the input value is both of the right type
   *          and if its value is within the requested range. Returns
   *          false otherwise.
   */
  virtual bool Check (const AttributeValue &value) const = 0;
  /**
   * \returns the c++ fully-qualified typename of the subclass
   *          of the ns3::AttributeValue base class which is associated
   *          to this checker.
   *
   * A typical return value here is FooValue where Foo is the name of the
   * type being wrapped.
   */
  virtual std::string GetValueTypeName (void) const = 0;
  /**
   * \returns true if this checker has information about the underlying
   *          C++ type, false otherwise.
   *
   * If this method returns false, the return value of the GetUnderlyingTypeInformation
   * method cannot be relied upon.
   */
  virtual bool HasUnderlyingTypeInformation (void) const = 0;
  /**
   * \returns a human-readable representation of information about
   *          the underlying C++ type.
   */
  virtual std::string GetUnderlyingTypeInformation (void) const = 0;
  /**
   * \returns a new instance of an AttributeValue (wrapper in an Attribute 
   *          instance) which matches the type of the underlying attribute.
   *
   * This method is typically used to create a temporary variable prior
   * to calling Attribute::DeserializeFromString.
   */
  virtual Ptr<AttributeValue> Create (void) const = 0;
  /**
   * Copy the source to the destination

   * \param [in] source Source AttributeValue
   * \param [out] destination Destination AttributeValue
   * \return true if copy was successful
   */
  virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const = 0;
};

/**
 * \brief A class for an empty attribute value.
 *
 * \ingroup attribute
 */
class EmptyAttributeValue : public AttributeValue
{
public:
  /** Default constructor. */
  EmptyAttributeValue ();
private:
  /**
   * \returns a deep copy of this class, wrapped into an Attribute object.
   */
  virtual Ptr<AttributeValue> Copy (void) const;
  /**
   * \param [in] checker The checker associated to the attribute
   * \returns a string representation of this value.
   *
   * In the EmptyAttributeValue case, the string returned will be simply ""
   */
  virtual std::string SerializeToString (Ptr<const AttributeChecker> checker) const;
  /**
   * \param [in] value A string representation of the value
   * \param [in] checker A pointer to the checker associated to the attribute.
   * \returns true if the input string was correctly-formatted and could be
   *          successfully deserialized, false otherwise.
   *
   * In the trivial case of EmptyAttributeValue, this should always return true
   */
  virtual bool DeserializeFromString (std::string value, Ptr<const AttributeChecker> checker);
};

/**
 * \brief An accessor for EmptyAttributeValue
 *
 * Does nothing, since every EmptyAttributeValue is the same.
 */
class EmptyAttributeAccessor : public AttributeAccessor
{
public:
  EmptyAttributeAccessor ();
  ~EmptyAttributeAccessor ();
  virtual bool Set (ObjectBase * object, const AttributeValue &value) const;
  virtual bool Get (const ObjectBase * object, AttributeValue &attribute) const;
  virtual bool HasGetter (void) const;
  virtual bool HasSetter (void) const;
};

static inline Ptr<const AttributeAccessor>
MakeEmptyAttributeAccessor ()
{
  return Ptr<const AttributeAccessor> (new EmptyAttributeAccessor (), false);
}

/**
 * \brief A checker for EmptyAttributeValue
 *
 * Does nothing, since every EmptyAttributeValue does not contain anything and
 * is, of course, valid.
 */
class EmptyAttributeChecker : public AttributeChecker
{
public:
  EmptyAttributeChecker ();
  ~EmptyAttributeChecker ();
  virtual bool Check (const AttributeValue &value) const;
  virtual std::string GetValueTypeName (void) const;
  virtual bool HasUnderlyingTypeInformation (void) const;
  virtual std::string GetUnderlyingTypeInformation (void) const;
  virtual Ptr<AttributeValue> Create (void) const;
  virtual bool Copy (const AttributeValue &source, AttributeValue &destination) const;
};

static inline Ptr<AttributeChecker>
MakeEmptyAttributeChecker ()
{
  return Ptr<AttributeChecker> (new EmptyAttributeChecker (), false);
}

} // namespace ns3

#endif /* ATTRIBUTE_H */