--- a/src/simulator/timer-impl.h Wed Oct 10 13:30:35 2007 +0200
+++ b/src/simulator/timer-impl.h Wed Oct 10 14:28:37 2007 +0200
@@ -22,6 +22,8 @@
#include "simulator.h"
#include "ns3/type-traits.h"
+#include "ns3/fatal-error.h"
+#include "ns3/int-to-type.h"
namespace ns3 {
@@ -47,6 +49,7 @@
void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
virtual EventId Schedule (const Time &delay) = 0;
+ virtual void Invoke (void) = 0;
};
@@ -90,7 +93,6 @@
typedef const StoredType &ParameterType;
};
-
template <typename FN>
TimerImpl *
MakeTimerImpl (FN fn)
@@ -110,6 +112,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn);
}
+ virtual void Invoke (void) {
+ m_fn ();
+ }
FN m_fn;
} *function = new FnTimerImplZero (fn);
return function;
@@ -133,6 +138,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1);
+ }
FN m_fn;
T1Stored m_a1;
} *function = new FnTimerImplOne (fn);
@@ -161,6 +169,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1, m_a2);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1, m_a2);
+ }
FN m_fn;
T1Stored m_a1;
T2Stored m_a2;
@@ -194,6 +205,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1, m_a2, m_a3);
+ }
FN m_fn;
T1Stored m_a1;
T2Stored m_a2;
@@ -232,6 +246,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1, m_a2, m_a3, m_a4);
+ }
FN m_fn;
T1Stored m_a1;
T2Stored m_a2;
@@ -275,6 +292,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4, m_a5);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1, m_a2, m_a3, m_a4, m_a5);
+ }
FN m_fn;
T1Stored m_a1;
T2Stored m_a2;
@@ -323,6 +343,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_fn, m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
}
+ virtual void Invoke (void) {
+ m_fn (m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
+ }
FN m_fn;
T1Stored m_a1;
T2Stored m_a2;
@@ -334,6 +357,19 @@
return function;
}
+
+template <typename T>
+struct TimerImplMemberTraits;
+
+
+template <typename T>
+struct TimerImplMemberTraits<T *>
+{
+ static T &GetReference (T *p) {
+ return *p;
+ }
+};
+
template <typename MEM_PTR, typename OBJ_PTR>
TimerImpl *
MakeTimerImpl (MEM_PTR memPtr, OBJ_PTR objPtr)
@@ -353,6 +389,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) ();
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
} *function = new MemFnTimerImplZero (memPtr, objPtr);
@@ -377,6 +416,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;
@@ -406,6 +448,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1, m_a2);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;
@@ -440,6 +485,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1, m_a2, m_a3);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;
@@ -479,6 +527,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1, m_a2, m_a3, m_a4);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;
@@ -523,6 +574,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4, m_a5);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1, m_a2, m_a3, m_a4, m_a5);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;
@@ -572,6 +626,9 @@
virtual EventId Schedule (const Time &delay) {
return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
}
+ virtual void Invoke (void) {
+ (TimerImplMemberTraits<OBJ_PTR>::GetReference (m_objPtr).*m_memPtr) (m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
+ }
MEM_PTR m_memPtr;
OBJ_PTR m_objPtr;
T1Stored m_a1;