--- 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