src/simulator/timer.cc
changeset 1692 b35ba80cafef
parent 1691 d717c61ae738
child 1693 bf884d490040
--- a/src/simulator/timer.cc	Wed Oct 03 13:01:29 2007 +0200
+++ b/src/simulator/timer.cc	Thu Oct 04 09:14:16 2007 +0200
@@ -72,18 +72,35 @@
 bool 
 Timer::IsExpired (void) const
 {
-  return m_event.IsExpired ();
+  return !IsSuspended () && m_event.IsExpired ();
 }
 bool 
 Timer::IsRunning (void) const
 {
-  return m_event.IsRunning ();
+  return !IsSuspended () && m_event.IsRunning ();
 }
 bool
 Timer::IsSuspended (void) const
 {
   return (m_flags & TIMER_SUSPENDED) == TIMER_SUSPENDED;
 }
+enum Timer::State 
+Timer::GetState (void) const
+{
+  if (IsRunning ())
+    {
+      return Timer::RUNNING;
+    }
+  else if (IsExpired ())
+    {
+      return Timer::EXPIRED;
+    }
+  else 
+    {
+      NS_ASSERT (IsSuspended ());
+      return Timer::SUSPENDED;
+    }
+}
 
 void 
 Timer::Schedule (void)
@@ -200,18 +217,27 @@
   NS_TEST_ASSERT (!timer.IsRunning ());
   NS_TEST_ASSERT (timer.IsExpired ());
   NS_TEST_ASSERT (!timer.IsSuspended ());
+  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::EXPIRED);
   timer.Schedule ();
   NS_TEST_ASSERT (timer.IsRunning ());
   NS_TEST_ASSERT (!timer.IsExpired ());
   NS_TEST_ASSERT (!timer.IsSuspended ());
+  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::RUNNING);
   timer.Suspend ();
   NS_TEST_ASSERT (!timer.IsRunning ());
-  NS_TEST_ASSERT (timer.IsExpired ());
+  NS_TEST_ASSERT (!timer.IsExpired ());
   NS_TEST_ASSERT (timer.IsSuspended ());
+  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::SUSPENDED);
   timer.Resume ();
   NS_TEST_ASSERT (timer.IsRunning ());
   NS_TEST_ASSERT (!timer.IsExpired ());
   NS_TEST_ASSERT (!timer.IsSuspended ());
+  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::RUNNING);
+  timer.Cancel ();
+  NS_TEST_ASSERT (!timer.IsRunning ());
+  NS_TEST_ASSERT (timer.IsExpired ());
+  NS_TEST_ASSERT (!timer.IsSuspended ());
+  NS_TEST_ASSERT_EQUAL (timer.GetState (), Timer::EXPIRED);
 
   int a = 0;
   int &b = a;