src/simulator/time.cc
changeset 156 3b1563e95ea7
parent 151 8395af452e55
child 157 19ffb62f521e
--- a/src/simulator/time.cc	Fri Nov 03 09:17:13 2006 +0100
+++ b/src/simulator/time.cc	Fri Nov 03 09:22:07 2006 +0100
@@ -24,177 +24,80 @@
 namespace ns3 {
 
 Time::Time ()
-  : m_ns (0)
-{}
-Time::Time (Time const &o)
-  : m_ns (o.m_ns)
-{}
-Time &
-Time::operator = (Time const &o)
-{
-  m_ns = o.m_ns;
-  return *this;
-}
-Time::Time (int64_t ns)
-  : m_ns (ns)
+  : TimeUnit<1> ()
 {}
-
-
-bool 
-Time::IsNegative (void) const
-{
-  return m_ns <= 0;
-}
-  
-bool 
-Time::IsPositive (void) const
-{
-  return m_ns >= 0;
-}
-  
-bool 
-Time::IsStrictlyNegative (void) const
-{
-  return m_ns < 0;
-}
-bool 
-Time::IsStrictlyPositive (void) const
-{
-  return m_ns > 0;
-}
-bool 
-Time::IsZero (void) const
-{
-  return m_ns == 0;
-}
-
-Time 
-Time::operator += (Time const &o)
-{
-  m_ns += o.m_ns;
-  return *this;
-}
-  
-Time 
-Time::operator -= (Time const &o)
-{
-  m_ns -= o.m_ns;
-  return *this;
-}
+Time::Time (TimeUnit<1> time)
+  : TimeUnit<1> (time)
+{}
 
 double 
 Time::ApproximateToSeconds (void) const
 {
-  double s = m_ns;
-  s /= 1000000000;
-  return s;
+  HighPrecision seconds = GetHighPrecision ();
+  seconds.Div (HighPrecision (1000000000, 0));
+  return seconds.GetDouble ();
 }
-int64_t 
+int32_t 
 Time::ApproximateToMilliSeconds (void) const
 {
-  int64_t ms = m_ns;
-  ms /= 1000000;
-  return ms;
+  HighPrecision ms = GetHighPrecision ();
+  ms.Div (HighPrecision (1000000, 0));
+  return (int32_t) ms.GetHigh ();
 }
 int64_t 
 Time::ApproximateToMicroSeconds (void) const
 {
-  int64_t us = m_ns;
-  us /= 1000;
-  return us;
+  HighPrecision us = GetHighPrecision ();
+  us.Div (HighPrecision (1000, 0));
+  return us.GetHigh ();
 }
 int64_t 
 Time::ApproximateToNanoSeconds (void) const
 {
-  return m_ns;
+  return GetHighPrecision ().GetHigh ();
 }
 
 
-/* To decrease the number of keystrokes
- */
-static uint64_t 
-GetNs (Time const &time)
-{
-  return time.ApproximateToNanoSeconds ();
-}
-
-Time Scale (Time const &time, double scale)
-{
-  return NanoSeconds ((int64_t) (GetNs (time) * scale));
-}
-Time Abs (Time const &time)
-{
-  int64_t retval = GetNs (time);
-  retval = (retval<0)?(-retval):(retval);
-  return NanoSeconds (retval);
-}
-Time Max (Time const &ta, Time const &tb)
-{
-  int64_t a = GetNs (ta);
-  int64_t b = GetNs (tb);
-  int64_t retval = (a>b)?(a):(b);
-  return NanoSeconds (retval);
-}
-Time Min (Time const &ta, Time const &tb)
-{
-  int64_t a = GetNs (ta);
-  int64_t b = GetNs (tb);
-  int64_t retval = (a<b)?(a):(b);
-  return NanoSeconds (retval);
-}
-
-
-Time operator + (Time const &lhs, Time const &rhs)
-{
-  return NanoSeconds (GetNs (lhs) + GetNs (rhs));
-}  
-Time operator - (Time const &lhs, Time const &rhs)
-{
-  return NanoSeconds (GetNs (lhs) - GetNs (rhs));
-}
-bool operator == (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) == GetNs (rhs);
-}
-
-bool operator != (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) != GetNs (rhs);
-}
-bool operator <  (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) < GetNs (rhs);
-}
-bool operator <= (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) <= GetNs (rhs);
-}
-bool operator >  (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) > GetNs (rhs);
-}
-bool operator >= (Time const &lhs, Time const &rhs)
-{
-  return GetNs (lhs) >= GetNs (rhs);
-}
+Seconds::Seconds ()
+  : TimeUnit<1> ()
+{}
+Seconds::Seconds (double seconds)
+  : TimeUnit<1> (HighPrecision (seconds * 1000000000.0))
+{}
+MilliSeconds::MilliSeconds ()
+  : TimeUnit<1> ()
+{}
+MilliSeconds::MilliSeconds (uint32_t ms)
+  : TimeUnit<1> (HighPrecision (ms * 1000000, 0))
+{}
+MicroSeconds::MicroSeconds ()
+  : TimeUnit<1> ()
+{}
+MicroSeconds::MicroSeconds (uint32_t us)
+  : TimeUnit<1> (HighPrecision (us * 1000, 0))
+{}
+NanoSeconds::NanoSeconds ()
+  : TimeUnit<1> ()
+{}
+NanoSeconds::NanoSeconds (uint32_t ns)
+  : TimeUnit<1> (HighPrecision (ns, 0))
+{}
 
 Now::Now ()
   : Time (Simulator::Now ())
 {}
-Seconds::Seconds (double s)
-  : Time ((int64_t)(s * 1000000000))
+
+Scalar::Scalar ()
+  : TimeUnit<0> ()
 {}
-MilliSeconds::MilliSeconds (int32_t ms)
-  : Time ((int64_t)(ms * 1000000))
+Scalar::Scalar (TimeUnit<0> scalar)
+  : TimeUnit<0> (scalar)
 {}
-MicroSeconds::MicroSeconds (int32_t us)
-  : Time ((int64_t)(us * 1000))
+
+Scalar::Scalar (double scalar)
+  : TimeUnit<0> (HighPrecision (scalar))
 {}
-NanoSeconds::NanoSeconds (int64_t ns)
-  : Time (ns)
-{}
-  
+
+}; // namespace ns3
 
 
-
-}; // namespace ns3