#include "timer.h"
Public Types | |
enum | DestroyPolicy { CANCEL_ON_DESTROY = (1 << 3), REMOVE_ON_DESTROY = (1 << 4), CHECK_ON_DESTROY = (1 << 5) } |
The policy to use to manager the internal timer when an instance of the Timer class is destroyed. More... | |
enum | State { RUNNING, EXPIRED, SUSPENDED } |
The possible states of the Timer. More... | |
Public Member Functions | |
Timer () | |
Create a timer with a default event lifetime management policy: More... | |
Timer (enum DestroyPolicy destroyPolicy) | |
~Timer () | |
void | Cancel (void) |
Cancel the currently-running event if there is one. More... | |
Time | GetDelay (void) const |
Time | GetDelayLeft (void) const |
enum Timer::State | GetState (void) const |
bool | IsExpired (void) const |
bool | IsRunning (void) const |
bool | IsSuspended (void) const |
void | Remove (void) |
Remove from the simulation event-list the currently-running event if there is one. More... | |
void | Resume (void) |
Restart the timer to expire within the amount of time left saved during Suspend. More... | |
void | Schedule (void) |
Schedule a new event using the currently-configured delay, function, and arguments. More... | |
void | Schedule (Time delay) |
template<typename T1 > | |
void | SetArguments (T1 a1) |
template<typename T1 , typename T2 > | |
void | SetArguments (T1 a1, T2 a2) |
template<typename T1 , typename T2 , typename T3 > | |
void | SetArguments (T1 a1, T2 a2, T3 a3) |
template<typename T1 , typename T2 , typename T3 , typename T4 > | |
void | SetArguments (T1 a1, T2 a2, T3 a3, T4 a4) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > | |
void | SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > | |
void | SetArguments (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) |
void | SetDelay (const Time &delay) |
template<typename FN > | |
void | SetFunction (FN fn) |
template<typename MEM_PTR , typename OBJ_PTR > | |
void | SetFunction (MEM_PTR memPtr, OBJ_PTR objPtr) |
void | Suspend (void) |
Cancel the timer and save the amount of time left until it was set to expire. More... | |
Private Types | |
enum | InternalSuspended { TIMER_SUSPENDED = (1 << 7) } |
Internal bit marking the suspended state. More... | |
Private Attributes | |
Time | m_delay |
The delay configured for this Timer. More... | |
Time | m_delayLeft |
The amount of time left on the Timer while it is suspended. More... | |
EventId | m_event |
The future event scheduled to expire the timer. More... | |
int | m_flags |
Bitfield for Timer State, DestroyPolicy and InternalSuspended. More... | |
TimerImpl * | m_impl |
The timer implementation, which contains the bound callback function and arguments. More... | |
A simple Timer class.
A timer is used to hold together a delay, a function to invoke when the delay expires, and a set of arguments to pass to the function when the delay expires.
A Timer can be suspended, resumed, cancelled and queried for the time left, but it can't be extended (except by suspending and resuming.)
A timer can also be used to enforce a set of predefined event lifetime management policies. These policies are specified at construction time and cannot be changed after.
The policy to use to manager the internal timer when an instance of the Timer class is destroyed.
Enumerator | |
---|---|
CANCEL_ON_DESTROY |
This policy cancels the event from the destructor of the Timer to verify that the event has already expired. |
REMOVE_ON_DESTROY |
This policy removes the event from the simulation event list when the destructor of the Timer is invoked. |
CHECK_ON_DESTROY |
This policy enforces a check from the destructor of the Timer to verify that the timer has already expired. |
|
private |
enum ns3::Timer::State |
ns3::Timer::Timer | ( | ) |
Create a timer with a default event lifetime management policy:
Definition at line 35 of file timer.cc.
References NS_LOG_FUNCTION.
ns3::Timer::Timer | ( | enum DestroyPolicy | destroyPolicy | ) |
[in] | destroyPolicy | the event lifetime management policies to use for destroy events |
Definition at line 44 of file timer.cc.
References NS_LOG_FUNCTION.
ns3::Timer::~Timer | ( | ) |
Definition at line 53 of file timer.cc.
References ns3::EventId::Cancel(), CANCEL_ON_DESTROY, CHECK_ON_DESTROY, ns3::EventId::IsRunning(), m_event, m_flags, m_impl, NS_FATAL_ERROR, NS_LOG_FUNCTION, ns3::Simulator::Remove(), and REMOVE_ON_DESTROY.
void ns3::Timer::Cancel | ( | void | ) |
Cancel the currently-running event if there is one.
Do nothing otherwise.
Definition at line 109 of file timer.cc.
References ns3::Simulator::Cancel(), m_event, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), ns3::aodv::RoutingProtocol::HelloTimerExpire(), ns3::aodv::RoutingProtocol::NotifyInterfaceDown(), ns3::aodv::RoutingProtocol::NotifyRemoveAddress(), ns3::aodv::Neighbors::Purge(), ns3::dsr::DsrRouteCache::PurgeMac(), ns3::aodv::RoutingProtocol::RecvReplyAck(), ns3::aodv::Neighbors::ScheduleTimer(), ns3::dsr::DsrRouteCache::ScheduleTimer(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::Ipv6AutoconfiguredPrefix::StopPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StopValidTimer().
Time ns3::Timer::GetDelay | ( | void | ) | const |
Definition at line 81 of file timer.cc.
References m_delay, and NS_LOG_FUNCTION.
Time ns3::Timer::GetDelayLeft | ( | void | ) | const |
This method returns zero if the timer is in EXPIRED state.
Definition at line 87 of file timer.cc.
References EXPIRED, ns3::Simulator::GetDelayLeft(), GetState(), m_delayLeft, m_event, NS_ASSERT, NS_LOG_FUNCTION, RUNNING, SUSPENDED, and ns3::TimeStep().
Referenced by ns3::dsdv::RoutingProtocol::RecvDsdv(), ns3::aodv::RoutingProtocol::SendRequest(), ns3::aodv::RoutingProtocol::SendRerrMessage(), and ns3::aodv::RoutingProtocol::SendRerrWhenNoRouteToForward().
enum Timer::State ns3::Timer::GetState | ( | void | ) | const |
Definition at line 139 of file timer.cc.
References EXPIRED, IsExpired(), IsRunning(), IsSuspended(), NS_ASSERT, NS_LOG_FUNCTION, RUNNING, and SUSPENDED.
Referenced by TimerStateTestCase::DoRun(), and GetDelayLeft().
bool ns3::Timer::IsExpired | ( | void | ) | const |
true
if there is no currently-running event, false
otherwise. Definition at line 121 of file timer.cc.
References ns3::EventId::IsExpired(), IsSuspended(), m_event, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), and GetState().
bool ns3::Timer::IsRunning | ( | void | ) | const |
true
if there is a currently-running event, false
otherwise. Definition at line 127 of file timer.cc.
References ns3::EventId::IsRunning(), IsSuspended(), m_event, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), GetState(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::aodv::RoutingProtocol::SendRerrMessage(), ns3::aodv::RoutingProtocol::SendRerrWhenNoRouteToForward(), ns3::Ipv6AutoconfiguredPrefix::StopPreferredTimer(), ns3::Ipv6AutoconfiguredPrefix::StopValidTimer(), and Suspend().
bool ns3::Timer::IsSuspended | ( | void | ) | const |
true
if this timer was suspended and not yet resumed, false
otherwise. Definition at line 133 of file timer.cc.
References m_flags, NS_LOG_FUNCTION, and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), TimerStateTestCase::DoRun(), GetState(), IsExpired(), and IsRunning().
void ns3::Timer::Remove | ( | void | ) |
Remove from the simulation event-list the currently-running event if there is one.
Do nothing otherwise.
Definition at line 115 of file timer.cc.
References m_event, NS_LOG_FUNCTION, and ns3::Simulator::Remove().
void ns3::Timer::Resume | ( | void | ) |
Restart the timer to expire within the amount of time left saved during Suspend.
Calling Resume without a prior call to Suspend is an error.
Definition at line 187 of file timer.cc.
References m_delayLeft, m_event, m_flags, m_impl, NS_ASSERT, NS_LOG_FUNCTION, ns3::TimerImpl::Schedule(), and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), and TimerStateTestCase::DoRun().
void ns3::Timer::Schedule | ( | void | ) |
Schedule a new event using the currently-configured delay, function, and arguments.
Definition at line 158 of file timer.cc.
References m_delay, and NS_LOG_FUNCTION.
Referenced by ns3::aodv::RoutingProtocol::DoInitialize(), TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::dsr::DsrRouting::DsrRouting(), ns3::aodv::RoutingProtocol::HelloTimerExpire(), ns3::olsr::RoutingProtocol::HelloTimerExpire(), ns3::olsr::RoutingProtocol::HnaTimerExpire(), ns3::olsr::RoutingProtocol::MidTimerExpire(), ns3::aodv::Neighbors::Purge(), ns3::dsr::DsrRouteCache::PurgeMac(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::aodv::RoutingProtocol::RerrRateLimitTimerExpire(), ns3::aodv::RoutingProtocol::RreqRateLimitTimerExpire(), ns3::aodv::Neighbors::ScheduleTimer(), ns3::dsr::DsrRouteCache::ScheduleTimer(), ns3::dsr::DsrRouting::SendBuffTimerExpire(), ns3::dsdv::RoutingProtocol::SendPeriodicUpdate(), ns3::NscTcpL4Protocol::SetNode(), ns3::NscTcpL4Protocol::SoftInterrupt(), ns3::dsdv::RoutingProtocol::Start(), ns3::aodv::RoutingProtocol::Start(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), ns3::Ipv6AutoconfiguredPrefix::StartValidTimer(), and ns3::olsr::RoutingProtocol::TcTimerExpire().
void ns3::Timer::Schedule | ( | Time | delay | ) |
[in] | delay | the delay to use |
Schedule a new event using the specified delay (ignore the delay set by Timer::SetDelay), function, and arguments.
Definition at line 165 of file timer.cc.
References ns3::EventId::IsRunning(), m_event, m_impl, NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, and ns3::TimerImpl::Schedule().
void ns3::Timer::SetArguments | ( | T1 | a1 | ) |
[in] | a1 | the first argument |
Store this argument in this Timer for later use by Timer::Schedule.
Definition at line 324 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
Referenced by TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), and ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode().
void ns3::Timer::SetArguments | ( | T1 | a1, |
T2 | a2 | ||
) |
[in] | a1 | the first argument |
[in] | a2 | the second argument |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 335 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
void ns3::Timer::SetArguments | ( | T1 | a1, |
T2 | a2, | ||
T3 | a3 | ||
) |
[in] | a1 | the first argument |
[in] | a2 | the second argument |
[in] | a3 | the third argument |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 347 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
void ns3::Timer::SetArguments | ( | T1 | a1, |
T2 | a2, | ||
T3 | a3, | ||
T4 | a4 | ||
) |
[in] | a1 | the first argument |
[in] | a2 | the second argument |
[in] | a3 | the third argument |
[in] | a4 | the fourth argument |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 359 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
void ns3::Timer::SetArguments | ( | T1 | a1, |
T2 | a2, | ||
T3 | a3, | ||
T4 | a4, | ||
T5 | a5 | ||
) |
[in] | a1 | the first argument |
[in] | a2 | the second argument |
[in] | a3 | the third argument |
[in] | a4 | the fourth argument |
[in] | a5 | the fifth argument |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 371 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
void ns3::Timer::SetArguments | ( | T1 | a1, |
T2 | a2, | ||
T3 | a3, | ||
T4 | a4, | ||
T5 | a5, | ||
T6 | a6 | ||
) |
[in] | a1 | the first argument |
[in] | a2 | the second argument |
[in] | a3 | the third argument |
[in] | a4 | the fourth argument |
[in] | a5 | the fifth argument |
[in] | a6 | the sixth argument |
Store these arguments in this Timer for later use by Timer::Schedule.
Definition at line 383 of file timer.h.
References m_impl, NS_FATAL_ERROR, and ns3::TimerImpl::SetArgs().
void ns3::Timer::SetDelay | ( | const Time & | delay | ) |
[in] | delay | The delay |
The next call to Schedule will schedule the timer with this delay.
Definition at line 75 of file timer.cc.
References m_delay, and NS_LOG_FUNCTION.
Referenced by TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::dsr::DsrRouteCache::DsrRouteCache(), ns3::aodv::Neighbors::Neighbors(), ns3::olsr::RoutingProtocol::QueueMessage(), ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode(), ns3::NscTcpL4Protocol::SetNode(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StartValidTimer().
void ns3::Timer::SetFunction | ( | FN | fn | ) |
[in] | fn | the function |
Store this function in this Timer for later use by Timer::Schedule.
Definition at line 309 of file timer.h.
References m_impl, and ns3::MakeTimerImpl().
Referenced by ns3::aodv::RoutingProtocol::DoInitialize(), TimerStateTestCase::DoRun(), TimerTemplateTestCase::DoRun(), ns3::dsr::DsrRouteCache::DsrRouteCache(), ns3::dsr::DsrRouting::DsrRouting(), ns3::aodv::Neighbors::Neighbors(), ns3::aodv::RoutingProtocol::SendReplyByIntermediateNode(), ns3::olsr::RoutingProtocol::SetIpv4(), ns3::NscTcpL4Protocol::SetNode(), ns3::dsdv::RoutingProtocol::Start(), ns3::aodv::RoutingProtocol::Start(), ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer(), and ns3::Ipv6AutoconfiguredPrefix::StartValidTimer().
void ns3::Timer::SetFunction | ( | MEM_PTR | memPtr, |
OBJ_PTR | objPtr | ||
) |
[in] | memPtr | the member function pointer |
[in] | objPtr | the pointer to object |
Store this function and object in this Timer for later use by Timer::Schedule.
Definition at line 316 of file timer.h.
References m_impl, and ns3::MakeTimerImpl().
void ns3::Timer::Suspend | ( | void | ) |
Cancel the timer and save the amount of time left until it was set to expire.
Calling Suspend on a non-running timer is an error.
Definition at line 177 of file timer.cc.
References ns3::Simulator::GetDelayLeft(), IsRunning(), m_delayLeft, m_event, m_flags, NS_ASSERT, NS_LOG_FUNCTION, ns3::Simulator::Remove(), and TIMER_SUSPENDED.
Referenced by ns3::dsr::DsrRouting::CheckSendBuffer(), and TimerStateTestCase::DoRun().
|
private |
The delay configured for this Timer.
Definition at line 283 of file timer.h.
Referenced by GetDelay(), Schedule(), and SetDelay().
|
private |
|
private |
The future event scheduled to expire the timer.
Definition at line 285 of file timer.h.
Referenced by Cancel(), GetDelayLeft(), IsExpired(), IsRunning(), Remove(), Resume(), Schedule(), Suspend(), and ~Timer().
|
private |
Bitfield for Timer State, DestroyPolicy and InternalSuspended.
Definition at line 281 of file timer.h.
Referenced by IsSuspended(), Resume(), Suspend(), and ~Timer().
|
private |
The timer implementation, which contains the bound callback function and arguments.
Definition at line 290 of file timer.h.
Referenced by Resume(), Schedule(), SetArguments(), SetFunction(), and ~Timer().