37 template <
typename T1>
39 template <
typename T1,
typename T2>
41 template <
typename T1,
typename T2,
typename T3>
42 void SetArgs (T1 a1, T2 a2, T3 a3);
43 template <
typename T1,
typename T2,
typename T3,
45 void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4);
46 template <
typename T1,
typename T2,
typename T3,
47 typename T4,
typename T5>
48 void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
49 template <
typename T1,
typename T2,
typename T3,
50 typename T4,
typename T5,
typename T6>
51 void SetArgs (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
54 virtual void Invoke (
void) = 0;
58 template <
typename T1>
63 template <
typename T1,
typename T2>
68 template <
typename T1,
typename T2,
typename T3>
73 template <
typename T1,
typename T2,
typename T3,
typename T4>
76 virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4) = 0;
78 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
81 virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5) = 0;
83 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
86 virtual void SetArguments (T1 a1,T2 a2,T3 a3, T4 a4, T5 a5, T6 a6) = 0;
98 template <
typename FN>
106 template <
typename FN>
110 struct FnTimerImplZero :
public TimerImpl
112 FnTimerImplZero (FN fn)
120 virtual void Invoke (
void)
125 } *
function =
new FnTimerImplZero (fn);
129 template <
typename FN>
137 struct FnTimerImplOne :
public TimerImplOne<T1Parameter>
139 FnTimerImplOne (FN fn)
143 virtual void SetArguments (T1Parameter a1)
151 virtual void Invoke (
void)
157 } *
function =
new FnTimerImplOne (fn);
161 template <
typename FN>
172 struct FnTimerImplTwo :
public TimerImplTwo<T1Parameter,T2Parameter>
174 FnTimerImplTwo (FN fn)
178 virtual void SetArguments (T1Parameter a1, T2Parameter a2)
187 virtual void Invoke (
void)
194 } *
function =
new FnTimerImplTwo (fn);
198 template <
typename FN>
212 struct FnTimerImplThree :
public TimerImplThree<T1Parameter,T2Parameter,T3Parameter>
214 FnTimerImplThree (FN fn)
218 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3)
228 virtual void Invoke (
void)
230 m_fn (m_a1, m_a2, m_a3);
236 } *
function =
new FnTimerImplThree (fn);
240 template <
typename FN>
257 struct FnTimerImplFour :
public TimerImplFour<T1Parameter,T2Parameter,T3Parameter,T4Parameter>
259 FnTimerImplFour (FN fn)
263 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4)
274 virtual void Invoke (
void)
276 m_fn (m_a1, m_a2, m_a3, m_a4);
283 } *
function =
new FnTimerImplFour (fn);
287 template <
typename FN>
307 struct FnTimerImplFive :
public TimerImplFive<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter>
309 FnTimerImplFive (FN fn)
313 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4, T5Parameter a5)
325 virtual void Invoke (
void)
327 m_fn (m_a1, m_a2, m_a3, m_a4, m_a5);
335 } *
function =
new FnTimerImplFive (fn);
339 template <
typename FN>
362 struct FnTimerImplSix :
public TimerImplSix<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter,T6Parameter>
364 FnTimerImplSix (FN fn)
368 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4, T5Parameter a5, T6Parameter a6)
381 virtual void Invoke (
void)
383 m_fn (m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
392 } *
function =
new FnTimerImplSix (fn);
397 template <
typename T>
401 template <
typename T>
410 template <
typename MEM_PTR,
typename OBJ_PTR>
418 template <
typename MEM_PTR,
typename OBJ_PTR>
422 struct MemFnTimerImplZero :
public TimerImpl
424 MemFnTimerImplZero (MEM_PTR memPtr, OBJ_PTR objPtr)
433 virtual void Invoke (
void)
439 } *
function =
new MemFnTimerImplZero (memPtr, objPtr);
443 template <
typename MEM_PTR,
typename OBJ_PTR>
451 struct MemFnTimerImplOne :
public TimerImplOne<T1Parameter>
453 MemFnTimerImplOne (MEM_PTR memPtr, OBJ_PTR objPtr)
458 virtual void SetArguments (T1Parameter a1)
466 virtual void Invoke (
void)
473 } *
function =
new MemFnTimerImplOne (memPtr, objPtr);
477 template <
typename MEM_PTR,
typename OBJ_PTR>
488 struct MemFnTimerImplTwo :
public TimerImplTwo<T1Parameter,T2Parameter>
490 MemFnTimerImplTwo (MEM_PTR memPtr, OBJ_PTR objPtr)
495 virtual void SetArguments (T1Parameter a1, T2Parameter a2)
504 virtual void Invoke (
void)
512 } *
function =
new MemFnTimerImplTwo (memPtr, objPtr);
516 template <
typename MEM_PTR,
typename OBJ_PTR>
530 struct MemFnTimerImplThree :
public TimerImplThree<T1Parameter,T2Parameter,T3Parameter>
532 MemFnTimerImplThree (MEM_PTR memPtr, OBJ_PTR objPtr)
537 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3)
547 virtual void Invoke (
void)
556 } *
function =
new MemFnTimerImplThree (memPtr, objPtr);
560 template <
typename MEM_PTR,
typename OBJ_PTR>
577 struct MemFnTimerImplFour :
public TimerImplFour<T1Parameter,T2Parameter,T3Parameter,T4Parameter>
579 MemFnTimerImplFour (MEM_PTR memPtr, OBJ_PTR objPtr)
584 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4)
595 virtual void Invoke (
void)
605 } *
function =
new MemFnTimerImplFour (memPtr, objPtr);
609 template <
typename MEM_PTR,
typename OBJ_PTR>
629 struct MemFnTimerImplFive :
public TimerImplFive<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter>
631 MemFnTimerImplFive (MEM_PTR memPtr, OBJ_PTR objPtr)
636 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4,T5Parameter a5)
648 virtual void Invoke (
void)
659 } *
function =
new MemFnTimerImplFive (memPtr, objPtr);
663 template <
typename MEM_PTR,
typename OBJ_PTR>
686 struct MemFnTimerImplSix :
public TimerImplSix<T1Parameter,T2Parameter,T3Parameter,T4Parameter,T5Parameter,T6Parameter>
688 MemFnTimerImplSix (MEM_PTR memPtr, OBJ_PTR objPtr)
693 virtual void SetArguments (T1Parameter a1, T2Parameter a2, T3Parameter a3, T4Parameter a4,T5Parameter a5,T6Parameter a6)
704 return Simulator::Schedule (delay, m_memPtr, m_objPtr, m_a1, m_a2, m_a3, m_a4, m_a5, m_a6);
706 virtual void Invoke (
void)
718 } *
function =
new MemFnTimerImplSix (memPtr, objPtr);
723 template <
typename T1>
728 typename TimerTraits<T1>::ParameterType
730 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
733 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
736 impl->SetArguments (a1);
739 template <
typename T1,
typename T2>
744 typename TimerTraits<T1>::ParameterType,
745 typename TimerTraits<T2>::ParameterType
747 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
750 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
753 impl->SetArguments (a1, a2);
756 template <
typename T1,
typename T2,
typename T3>
761 typename TimerTraits<T1>::ParameterType,
762 typename TimerTraits<T2>::ParameterType,
763 typename TimerTraits<T3>::ParameterType
765 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
768 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
771 impl->SetArguments (a1, a2, a3);
774 template <
typename T1,
typename T2,
typename T3,
typename T4>
779 typename TimerTraits<T1>::ParameterType,
780 typename TimerTraits<T2>::ParameterType,
781 typename TimerTraits<T3>::ParameterType,
782 typename TimerTraits<T4>::ParameterType
784 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
787 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
790 impl->SetArguments (a1, a2, a3, a4);
793 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
798 typename TimerTraits<T1>::ParameterType,
799 typename TimerTraits<T2>::ParameterType,
800 typename TimerTraits<T3>::ParameterType,
801 typename TimerTraits<T4>::ParameterType,
802 typename TimerTraits<T5>::ParameterType
804 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
807 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
810 impl->SetArguments (a1, a2, a3, a4, a5);
813 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
818 typename TimerTraits<T1>::ParameterType,
819 typename TimerTraits<T2>::ParameterType,
820 typename TimerTraits<T3>::ParameterType,
821 typename TimerTraits<T4>::ParameterType,
822 typename TimerTraits<T5>::ParameterType,
823 typename TimerTraits<T6>::ParameterType
825 TimerImplBase *impl = dynamic_cast<TimerImplBase *> (this);
828 NS_FATAL_ERROR (
"You tried to set Timer arguments incompatible with its function.");
831 impl->SetArguments (a1, a2, a3, a4, a5, a6);
virtual void SetArguments(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)=0
keep track of time values and allow control of global simulation resolution
TypeTraits< typename TypeTraits< T >::ReferencedType >::NonConstType StoredType
#define NS_ASSERT(condition)
virtual void SetArguments(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)=0
virtual void SetArguments(T1 a1, T2 a2)=0
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
#define NS_FATAL_ERROR(msg)
fatal error handling
const StoredType & ParameterType
This trivial template is extremely useful, as explained in "Modern C++ Design", p29, section 2.4, "Mapping Integral Constants to Types".
virtual void SetArguments(T1 a1, T2 a2, T3 a3)=0
virtual EventId Schedule(const Time &delay)=0
virtual void SetArguments(T1 a1)=0
an identifier for simulation events.
Type trait reference values.
TimerImpl * MakeTimerImpl(FN fn)
virtual void SetArguments(T1 a1, T2 a2, T3 a3, T4 a4)=0
virtual void Invoke(void)=0
static T & GetReference(T *p)