A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Documentation ▼
Installation
Manual
Models
Contributing
Wiki
Development ▼
API Docs
Issue Tracker
Merge Requests
API
Loading...
Searching...
No Matches
object-vector.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 INRIA, Mathieu Lacage
3
*
4
* SPDX-License-Identifier: GPL-2.0-only
5
*
6
* Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
7
*/
8
#ifndef OBJECT_VECTOR_H
9
#define OBJECT_VECTOR_H
10
11
#include "
attribute.h
"
12
#include "
object-ptr-container.h
"
13
#include "
object.h
"
14
#include "
ptr.h
"
15
16
/**
17
* @file
18
* @ingroup attribute_ObjectVector
19
* ns3::ObjectVectorValue attribute value declarations and template implementations.
20
*/
21
22
namespace
ns3
23
{
24
25
/**
26
* @ingroup attribute_ObjectVector
27
* ObjectVectorValue is an alias for ObjectPtrContainerValue
28
*/
29
typedef
ObjectPtrContainerValue
ObjectVectorValue
;
30
31
/**
32
* @ingroup attribute_ObjectVector
33
* MakeAccessorHelper implementation for ObjectVector.
34
* @copydetails ns3::DoMakeAccessorHelperOne(U T::*)
35
*/
36
// clang-format off
37
// Clang-format guard needed for versions <= 18
38
template
<
typename
T,
typename
U>
39
Ptr<const AttributeAccessor>
MakeObjectVectorAccessor
(U T::* memberVariable);
40
// clang-format on
41
42
// Documentation generated by print-introspected-doxygen.cc
43
template
<
typename
T>
44
Ptr<const AttributeChecker>
MakeObjectVectorChecker
();
45
46
/**
47
* @ingroup attribute_ObjectVector
48
* @copydoc ns3::MakeObjectPtrContainerAccessor()
49
*/
50
template
<
typename
T,
typename
U,
typename
INDEX>
51
Ptr<const AttributeAccessor>
MakeObjectVectorAccessor
(
Ptr<U>
(T::*get)(INDEX) const,
52
INDEX (T::*getN)() const);
53
54
/**
55
* @ingroup attribute_ObjectVector
56
* @copydoc ns3::MakeObjectPtrContainerAccessor()
57
*/
58
template
<
typename
T,
typename
U,
typename
INDEX>
59
Ptr<const AttributeAccessor>
MakeObjectVectorAccessor
(INDEX (T::*getN)() const,
60
Ptr
<U> (T::*get)(INDEX) const);
61
62
/***************************************************************
63
* Implementation of the templates declared above.
64
***************************************************************/
65
66
// clang-format off
67
// Clang-format guard needed for versions <= 18
68
template
<
typename
T,
typename
U>
69
Ptr<const AttributeAccessor>
70
MakeObjectVectorAccessor
(U T::* memberVector)
71
// clang-format on
72
{
73
struct
MemberStdContainer :
public
ObjectPtrContainerAccessor
74
{
75
bool
DoGetN(
const
ObjectBase
*
object
, std::size_t* n)
const override
76
{
77
const
T* obj =
dynamic_cast<
const
T*
>
(
object
);
78
if
(obj ==
nullptr
)
79
{
80
return
false
;
81
}
82
*n = (obj->*m_memberVector).size();
83
return
true
;
84
}
85
86
Ptr<Object>
DoGet(
const
ObjectBase
*
object
,
87
std::size_t i,
88
std::size_t* index)
const override
89
{
90
const
T* obj =
static_cast<
const
T*
>
(
object
);
91
auto
begin = (obj->*m_memberVector).begin();
92
auto
end = (obj->*m_memberVector).end();
93
std::size_t k = 0;
94
for
(
auto
j = begin; j != end; j++, k++)
95
{
96
if
(k == i)
97
{
98
*index = k;
99
return
*j;
100
}
101
}
102
NS_ASSERT
(
false
);
103
// quiet compiler.
104
return
nullptr
;
105
}
106
107
// clang-format off
108
// Clang-format guard needed for versions <= 18
109
U T::* m_memberVector;
110
// clang-format on
111
}* spec =
new
MemberStdContainer();
112
113
spec->m_memberVector = memberVector;
114
return
Ptr<const AttributeAccessor>
(spec,
false
);
115
}
116
117
template
<
typename
T>
118
Ptr<const AttributeChecker>
119
MakeObjectVectorChecker
()
120
{
121
return
MakeObjectPtrContainerChecker<T>
();
122
}
123
124
template
<
typename
T,
typename
U,
typename
INDEX>
125
Ptr<const AttributeAccessor>
126
MakeObjectVectorAccessor
(
Ptr<U>
(T::*get)(INDEX) const, INDEX (T::*getN)() const)
127
{
128
return
MakeObjectPtrContainerAccessor<T, U, INDEX>
(get, getN);
129
}
130
131
template
<
typename
T,
typename
U,
typename
INDEX>
132
Ptr<const AttributeAccessor>
133
MakeObjectVectorAccessor
(INDEX (T::*getN)() const,
Ptr
<U> (T::*get)(INDEX) const)
134
{
135
return
MakeObjectPtrContainerAccessor<T, U, INDEX>
(get, getN);
136
}
137
138
}
// namespace ns3
139
140
#endif
/* OBJECT_VECTOR_H */
attribute.h
ns3::AttributeValue, ns3::AttributeAccessor and ns3::AttributeChecker declarations.
ns3::ObjectBase
Anchor the ns-3 type and attribute system.
Definition
object-base.h:162
ns3::ObjectPtrContainerAccessor
AttributeAccessor implementation for ObjectPtrContainerValue.
Definition
object-ptr-container.h:241
ns3::ObjectPtrContainerValue
Container for a set of ns3::Object pointers.
Definition
object-ptr-container.h:46
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition
mpi-test-fixtures.h:37
object
NS_ASSERT
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition
assert.h:55
ns3::MakeObjectPtrContainerAccessor
Ptr< const AttributeAccessor > MakeObjectPtrContainerAccessor(Ptr< U >(T::*get)(INDEX) const, INDEX(T::*getN)() const)
Create an AttributeAccessor using a container class indexed get method.
Definition
object-ptr-container.h:272
ns3::MakeObjectPtrContainerChecker
Ptr< const AttributeChecker > MakeObjectPtrContainerChecker()
Definition
object-ptr-container.h:314
ns3::MakeObjectVectorChecker
Ptr< const AttributeChecker > MakeObjectVectorChecker()
Definition
object-vector.h:119
ns3::ObjectVectorValue
ObjectPtrContainerValue ObjectVectorValue
ObjectVectorValue is an alias for ObjectPtrContainerValue.
Definition
object-vector.h:29
ns3::MakeObjectVectorAccessor
Ptr< const AttributeAccessor > MakeObjectVectorAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
Definition
object-vector.h:70
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
object-ptr-container.h
ns3::ObjectPtrContainerValue attribute value declarations and template implementations.
object.h
ns3::Object class declaration, which is the root of the Object hierarchy and Aggregation.
ptr.h
ns3::Ptr smart pointer declaration and implementation.
src
core
model
object-vector.h
Generated on Tue Apr 29 2025 18:20:41 for ns-3 by
1.11.0