author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Wed, 02 Jan 2008 09:09:24 +0100 | |
changeset 2230 | 9f13ac3291e0 |
parent 732 | df256f32b6ae |
permissions | -rw-r--r-- |
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
1 |
#include "ns3/object.h" |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
using namespace ns3; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
class AnObject : public Object |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
public: |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
static const InterfaceId iid; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
AnObject (); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
protected: |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
virtual void DoDispose (void); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
}; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
const InterfaceId AnObject::iid = MakeInterfaceId ("AnObject", Object::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
AnObject::AnObject () |
2230
9f13ac3291e0
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
732
diff
changeset
|
17 |
{} |
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
void |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
AnObject::DoDispose (void) |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
// Do your work here. |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
// chain up |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
Object::DoDispose (); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
} |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
class AnotherObject : public Object |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
public: |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
static const InterfaceId iid; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
AnotherObject (int a); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
private: |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
virtual void DoDispose (void); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
}; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
const InterfaceId AnotherObject::iid = MakeInterfaceId ("AnotherObject", Object::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
AnotherObject::AnotherObject (int a) |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
// enable our interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
SetInterfaceId (AnotherObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
} |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
void |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
AnotherObject::DoDispose (void) |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
// Do your work here. |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
// chain up |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
Object::DoDispose (); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
} |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
|
726
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
52 |
class YetAnotherObject : public Object |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
53 |
{ |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
54 |
public: |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
55 |
static const InterfaceId iid; |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
56 |
YetAnotherObject (int a); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
57 |
private: |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
58 |
virtual void DoDispose (void); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
59 |
}; |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
60 |
|
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
61 |
const InterfaceId YetAnotherObject::iid = MakeInterfaceId ("YetAnotherObject", Object::iid); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
62 |
|
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
63 |
YetAnotherObject::YetAnotherObject (int a) |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
64 |
{ |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
65 |
// enable our interface |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
66 |
SetInterfaceId (YetAnotherObject::iid); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
67 |
// aggregated directly to another object. |
2230
9f13ac3291e0
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
732
diff
changeset
|
68 |
AddInterface (CreateObject<AnObject> ()); |
726
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
69 |
} |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
70 |
void |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
71 |
YetAnotherObject::DoDispose (void) |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
72 |
{ |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
73 |
// Do your work here. |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
74 |
// chain up |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
75 |
Object::DoDispose (); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
76 |
} |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
77 |
|
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
78 |
|
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
79 |
|
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
int main (int argc, char *argv[]) |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
{ |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
Ptr<Object> p; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
Ptr<AnObject> anObject; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
Ptr<AnotherObject> anotherObject; |
726
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
85 |
Ptr<YetAnotherObject> yetAnotherObject; |
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
|
2230
9f13ac3291e0
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
732
diff
changeset
|
87 |
p = CreateObject<AnObject> (); |
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
// p gives you access to AnObject's interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
anObject = p->QueryInterface<AnObject> (AnObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
NS_ASSERT (anObject != 0); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
// p does not give you access to AnotherObject's interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
anotherObject = p->QueryInterface<AnotherObject> (AnotherObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
NS_ASSERT (anotherObject == 0); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
|
2230
9f13ac3291e0
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
732
diff
changeset
|
95 |
anotherObject = CreateObject<AnotherObject> (1); |
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
// AnotherObject does not give you access to AnObject's interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
anObject = anotherObject->QueryInterface<AnObject> (AnObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
NS_ASSERT (anObject == 0); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
// aggregate the two objects |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
p->AddInterface (anotherObject); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
102 |
// p gives you access to AnObject's interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
anObject = p->QueryInterface<AnObject> (AnObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
NS_ASSERT (anObject != 0); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
// p gives you access to AnotherObject's interface |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
anotherObject = p->QueryInterface<AnotherObject> (AnotherObject::iid); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
NS_ASSERT (anotherObject != 0); |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
|
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
|
2230
9f13ac3291e0
add CreateObject<> to instanciate subclasses of the Object base class. Replaces Create<>.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
732
diff
changeset
|
110 |
yetAnotherObject = CreateObject<YetAnotherObject> (2); |
726
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
111 |
// gives you acess to AnObject interface too. |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
112 |
anObject = yetAnotherObject->QueryInterface<AnObject> (AnObject::iid); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
113 |
NS_ASSERT (anObject != 0); |
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
114 |
|
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
115 |
|
725
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
116 |
return 0; |
632d1467a4ae
sample code for Object base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
117 |
} |
726
5bdc2c399117
add more code to sample code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
725
diff
changeset
|
118 |