A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
type-traits.h
Go to the documentation of this file.
1
#ifndef TYPE_TRAITS_H
2
#define TYPE_TRAITS_H
3
4
template
<
typename
T>
5
struct
TypeTraits
6
{
7
private
:
8
struct
NullType
{};
9
template
<
typename
U>
struct
UnConst
10
{
11
typedef
U
Result
;
12
};
13
template
<
typename
U>
struct
UnConst
<const U>
14
{
15
typedef
U
Result
;
16
};
17
template
<
typename
U>
struct
ReferenceTraits
18
{
19
enum
{
IsReference
= 0};
20
typedef
U
ReferencedType
;
21
};
22
template
<
typename
U>
struct
ReferenceTraits
<U&>
23
{
24
enum
{
IsReference
= 1};
25
typedef
U
ReferencedType
;
26
};
27
template
<
typename
U>
struct
PointerTraits
28
{
29
enum
{
IsPointer
= 0};
30
typedef
U
PointeeType
;
31
};
32
template
<
typename
U>
struct
PointerTraits
<U *>
33
{
34
enum
{
IsPointer
= 1};
35
typedef
U
PointeeType
;
36
};
37
template
<
typename
U>
struct
FunctionPtrTraits
38
{
39
enum
{
IsFunctionPointer
= 0};
40
};
41
template
<
typename
U>
42
struct
FunctionPtrTraits
<U (*)(
void
)>
43
{
44
enum
{
IsFunctionPointer
= 1};
45
enum
{ nArgs = 0};
46
typedef
U
ReturnType
;
47
};
48
template
<
typename
U,
typename
V1>
49
struct
FunctionPtrTraits
<U (*)(V1)>
50
{
51
enum
{
IsFunctionPointer
= 1};
52
enum
{ nArgs = 1};
53
typedef
U
ReturnType
;
54
typedef
V1
Arg1Type
;
55
};
56
template
<
typename
U,
typename
V1,
typename
V2>
57
struct
FunctionPtrTraits
<U (*)(V1,V2)>
58
{
59
enum
{
IsFunctionPointer
= 1};
60
enum
{ nArgs = 2};
61
typedef
U
ReturnType
;
62
typedef
V1
Arg1Type
;
63
typedef
V2
Arg2Type
;
64
};
65
template
<
typename
U,
typename
V1,
typename
V2,
66
typename
V3>
67
struct
FunctionPtrTraits
<U (*)(V1,V2,V3)>
68
{
69
enum
{
IsFunctionPointer
= 1};
70
enum
{ nArgs = 3};
71
typedef
U
ReturnType
;
72
typedef
V1
Arg1Type
;
73
typedef
V2
Arg2Type
;
74
typedef
V3
Arg3Type
;
75
};
76
template
<
typename
U,
typename
V1,
typename
V2,
77
typename
V3,
typename
V4>
78
struct
FunctionPtrTraits
<U (*)(V1,V2,V3,V4)>
79
{
80
enum
{
IsFunctionPointer
= 1};
81
enum
{ nArgs = 4};
82
typedef
U
ReturnType
;
83
typedef
V1
Arg1Type
;
84
typedef
V2
Arg2Type
;
85
typedef
V3
Arg3Type
;
86
typedef
V4
Arg4Type
;
87
};
88
template
<
typename
U,
typename
V1,
typename
V2,
89
typename
V3,
typename
V4,
90
typename
V5>
91
struct
FunctionPtrTraits
<U (*)(V1,V2,V3,V4,V5)>
92
{
93
enum
{
IsFunctionPointer
= 1};
94
enum
{ nArgs = 5};
95
typedef
U
ReturnType
;
96
typedef
V1
Arg1Type
;
97
typedef
V2
Arg2Type
;
98
typedef
V3
Arg3Type
;
99
typedef
V4
Arg4Type
;
100
typedef
V5
Arg5Type
;
101
};
102
template
<
typename
U,
typename
V1,
typename
V2,
103
typename
V3,
typename
V4,
104
typename
V5,
typename
V6>
105
struct
FunctionPtrTraits
<U (*)(V1,V2,V3,V4,V5,V6)>
106
{
107
enum
{
IsFunctionPointer
= 1};
108
enum
{ nArgs = 6};
109
typedef
U
ReturnType
;
110
typedef
V1
Arg1Type
;
111
typedef
V2
Arg2Type
;
112
typedef
V3
Arg3Type
;
113
typedef
V4
Arg4Type
;
114
typedef
V5
Arg5Type
;
115
typedef
V6
Arg6Type
;
116
};
117
template
<
typename
U>
struct
PtrToMemberTraits
118
{
119
enum
{
IsPointerToMember
= 0};
120
};
121
template
<
typename
U,
typename
V>
122
struct
PtrToMemberTraits
<U (
V
::*) (void)>
123
{
124
enum
{
IsPointerToMember
= 1};
125
enum
{ nArgs = 0};
126
typedef
U
ReturnType
;
127
};
128
template
<
typename
U,
typename
V>
129
struct
PtrToMemberTraits
<U (
V
::*) (void) const>
130
{
131
enum
{
IsPointerToMember
= 1};
132
enum
{ nArgs = 0};
133
typedef
U
ReturnType
;
134
};
135
template
<
typename
U,
typename
V,
typename
W1>
136
struct
PtrToMemberTraits
<U (
V
::*) (W1)>
137
{
138
enum
{
IsPointerToMember
= 1};
139
enum
{ nArgs = 1};
140
typedef
U
ReturnType
;
141
typedef
W1
Arg1Type
;
142
};
143
template
<
typename
U,
typename
V,
typename
W1>
144
struct
PtrToMemberTraits
<U (
V
::*) (W1) const>
145
{
146
enum
{
IsPointerToMember
= 1};
147
enum
{ nArgs = 1};
148
typedef
U
ReturnType
;
149
typedef
W1
Arg1Type
;
150
};
151
template
<
typename
U,
typename
V,
typename
W1,
typename
W2>
152
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2)>
153
{
154
enum
{
IsPointerToMember
= 1};
155
enum
{ nArgs = 2};
156
typedef
U
ReturnType
;
157
typedef
W1
Arg1Type
;
158
typedef
W2
Arg2Type
;
159
};
160
template
<
typename
U,
typename
V,
typename
W1,
typename
W2>
161
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2) const>
162
{
163
enum
{
IsPointerToMember
= 1};
164
enum
{ nArgs = 2};
165
typedef
U
ReturnType
;
166
typedef
W1
Arg1Type
;
167
typedef
W2
Arg2Type
;
168
};
169
template
<
typename
U,
typename
V
,
170
typename
W1,
typename
W2,
171
typename
W3>
172
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3)>
173
{
174
enum
{
IsPointerToMember
= 1};
175
enum
{ nArgs = 3};
176
typedef
U
ReturnType
;
177
typedef
W1
Arg1Type
;
178
typedef
W2
Arg2Type
;
179
typedef
W3
Arg3Type
;
180
};
181
template
<
typename
U,
typename
V
,
182
typename
W1,
typename
W2,
183
typename
W3>
184
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3) const>
185
{
186
enum
{
IsPointerToMember
= 1};
187
enum
{ nArgs = 3};
188
typedef
U
ReturnType
;
189
typedef
W1
Arg1Type
;
190
typedef
W2
Arg2Type
;
191
typedef
W3
Arg3Type
;
192
};
193
template
<
typename
U,
typename
V
,
194
typename
W1,
typename
W2,
195
typename
W3,
typename
W4>
196
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4)>
197
{
198
enum
{
IsPointerToMember
= 1};
199
enum
{ nArgs = 4};
200
typedef
U
ReturnType
;
201
typedef
W1
Arg1Type
;
202
typedef
W2
Arg2Type
;
203
typedef
W3
Arg3Type
;
204
typedef
W4
Arg4Type
;
205
};
206
template
<
typename
U,
typename
V
,
207
typename
W1,
typename
W2,
208
typename
W3,
typename
W4>
209
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4) const>
210
{
211
enum
{
IsPointerToMember
= 1};
212
enum
{ nArgs = 4};
213
typedef
U
ReturnType
;
214
typedef
W1
Arg1Type
;
215
typedef
W2
Arg2Type
;
216
typedef
W3
Arg3Type
;
217
typedef
W4
Arg4Type
;
218
};
219
template
<
typename
U,
typename
V
,
220
typename
W1,
typename
W2,
221
typename
W3,
typename
W4,
222
typename
W5>
223
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4,W5)>
224
{
225
enum
{
IsPointerToMember
= 1};
226
enum
{ nArgs = 5};
227
typedef
U
ReturnType
;
228
typedef
W1
Arg1Type
;
229
typedef
W2
Arg2Type
;
230
typedef
W3
Arg3Type
;
231
typedef
W4
Arg4Type
;
232
typedef
W5
Arg5Type
;
233
};
234
template
<
typename
U,
typename
V
,
235
typename
W1,
typename
W2,
236
typename
W3,
typename
W4,
237
typename
W5>
238
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4,W5) const>
239
{
240
enum
{
IsPointerToMember
= 1};
241
enum
{ nArgs = 5};
242
typedef
U
ReturnType
;
243
typedef
W1
Arg1Type
;
244
typedef
W2
Arg2Type
;
245
typedef
W3
Arg3Type
;
246
typedef
W4
Arg4Type
;
247
typedef
W5
Arg5Type
;
248
};
249
template
<
typename
U,
typename
V
,
250
typename
W1,
typename
W2,
251
typename
W3,
typename
W4,
252
typename
W5,
typename
W6>
253
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4,W5,W6)>
254
{
255
enum
{
IsPointerToMember
= 1};
256
enum
{ nArgs = 6};
257
typedef
U
ReturnType
;
258
typedef
W1
Arg1Type
;
259
typedef
W2
Arg2Type
;
260
typedef
W3
Arg3Type
;
261
typedef
W4
Arg4Type
;
262
typedef
W5
Arg5Type
;
263
typedef
W6
Arg6Type
;
264
};
265
template
<
typename
U,
typename
V
,
266
typename
W1,
typename
W2,
267
typename
W3,
typename
W4,
268
typename
W5,
typename
W6>
269
struct
PtrToMemberTraits
<U (
V
::*) (W1,W2,W3,W4,W5,W6) const>
270
{
271
enum
{
IsPointerToMember
= 1};
272
enum
{ nArgs = 6};
273
typedef
U
ReturnType
;
274
typedef
W1
Arg1Type
;
275
typedef
W2
Arg2Type
;
276
typedef
W3
Arg3Type
;
277
typedef
W4
Arg4Type
;
278
typedef
W5
Arg5Type
;
279
typedef
W6
Arg6Type
;
280
};
281
282
public
:
283
typedef
typename
UnConst<T>::Result
NonConstType
;
284
typedef
typename
ReferenceTraits<T>::ReferencedType
ReferencedType
;
285
typedef
typename
PointerTraits<T>::PointeeType
PointeeType
;
286
enum
{
IsPointerToMember
= PtrToMemberTraits<T>::IsPointerToMember};
287
enum
{
IsPointer
= PointerTraits<T>::IsPointer};
288
enum
{
IsReference
= ReferenceTraits<T>::IsReference};
289
enum
{
IsFunctionPointer
= FunctionPtrTraits<T>::IsFunctionPointer};
290
typedef
PtrToMemberTraits<T>
PointerToMemberTraits
;
291
typedef
FunctionPtrTraits<T>
FunctionPointerTraits
;
292
};
293
294
295
#endif
/* TYPE_TRAITS_H */
src
core
model
type-traits.h
Generated on Tue May 14 2013 11:08:18 for ns-3 by
1.8.1.2