merge
authorGustavo J. A. M. Carneiro <gjc@inescporto.pt>
Thu, 11 Oct 2007 15:51:36 +0100
changeset 1767 22e95c5a41c4
parent 1766 1207df3ad6f2 (current diff)
parent 1709 3e0426f2c26a (diff)
child 1768 1664a9db93b9
merge
src/node/ipv4-address.cc
src/node/ipv4-address.h
--- a/src/core/command-line.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/core/command-line.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -25,6 +25,15 @@
 
 namespace ns3 {
 
+CommandLine::List::~List ()
+{
+  for (iterator iter = begin (); iter != end (); iter++)
+    {
+      delete *iter;
+    }
+}
+
+
 CommandDefaultValue CommandLine::g_help ("help",
                                          "Print Help text for all commands",
                                          MakeCallback (&CommandLine::PrintHelp));
--- a/src/core/command-line.h	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/core/command-line.h	Thu Oct 11 15:51:36 2007 +0100
@@ -85,7 +85,12 @@
     T *m_valuePtr;
   };
   static void PrintHelp (void);
-  typedef std::list<DefaultValueBase *> List;
+
+  class List : public std::list<DefaultValueBase *>
+  {
+  public:
+    ~List ();
+  };
   static List *GetUserList (void);
   static CommandDefaultValue g_help;
 };
--- a/src/internet-node/udp-socket.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/internet-node/udp-socket.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -452,6 +452,8 @@
   NS_TEST_ASSERT_EQUAL (m_receivedPacket.GetSize (), 123);
   NS_TEST_ASSERT_EQUAL (m_receivedPacket2.GetSize (), 123);
 
+  Simulator::Destroy ();
+
   return result;
 }
 
--- a/src/node/ipv4-address.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/ipv4-address.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -151,16 +151,6 @@
   m_address = AsciiToIpv4Host (address);
 }
 
-bool 
-Ipv4Address::IsEqual (Ipv4Address other) const
-{
-  if (other.m_address == m_address) {
-    return true;
-  } else {
-    return false;
-  }
-}
-
 Ipv4Address
 Ipv4Address::CombineMask (Ipv4Mask const &mask) const
 {
@@ -242,7 +232,7 @@
 {
   return address.CheckCompatible (GetType (), 4);
 }
-Ipv4Address::operator Address ()
+Ipv4Address::operator Address () const
 {
   return ConvertTo ();
 }
@@ -296,19 +286,6 @@
   return loopback;
 }
 
-bool operator == (Ipv4Address const &a, Ipv4Address const &b)
-{
-  return a.IsEqual (b);
-}
-bool operator != (Ipv4Address const &a, Ipv4Address const &b)
-{
-  return !a.IsEqual (b);
-}
-bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB)
-{
-  return (addrA.GetHostOrder () < addrB.GetHostOrder ());
-}
-
 size_t Ipv4AddressHash::operator()(Ipv4Address const &x) const 
 { 
   return x.GetHostOrder ();
--- a/src/node/ipv4-address.h	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/ipv4-address.h	Thu Oct 11 15:51:36 2007 +0100
@@ -73,7 +73,10 @@
    * \param other address to which to compare this address
    * \return True if the addresses are equal. False otherwise.
    */
-  bool IsEqual (Ipv4Address other) const;
+  bool IsEqual (const Ipv4Address &other) const
+  {
+    return m_address == other.m_address;
+  }
 
   /** 
    * \brief Get the host-order 32-bit IP address
@@ -131,7 +134,7 @@
   bool IsSubnetDirectedBroadcast (Ipv4Mask const &mask) const;
 
   static bool IsMatchingType (const Address &address);
-  operator Address ();
+  operator Address () const;
   static Ipv4Address ConvertFrom (const Address &address);
 
   static Ipv4Address GetZero (void);
@@ -142,6 +145,10 @@
   Address ConvertTo (void) const;
   static uint8_t GetType (void);
   uint32_t m_address;
+
+  friend bool operator == (Ipv4Address const &a, Ipv4Address const &b);
+  friend bool operator != (Ipv4Address const &a, Ipv4Address const &b);
+  friend bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB);
 };
 
 
@@ -177,9 +184,19 @@
 std::ostream& operator<< (std::ostream& os, Ipv4Address const& address);
 std::ostream& operator<< (std::ostream& os, Ipv4Mask const& mask);
 
-bool operator == (Ipv4Address const &a, Ipv4Address const &b);
-bool operator != (Ipv4Address const &a, Ipv4Address const &b);
-bool operator < (Ipv4Address const &addrA, Ipv4Address const &addrB);
+inline bool operator == (const Ipv4Address &a, const Ipv4Address &b)
+{
+  return (a.m_address == b.m_address);
+}
+inline bool operator != (const Ipv4Address &a, const Ipv4Address &b)
+{
+  return (a.m_address != b.m_address);
+}
+inline bool operator < (const Ipv4Address &a, const Ipv4Address &b)
+{
+  return (a.m_address < b.m_address);
+}
+
 
 class Ipv4AddressHash : public std::unary_function<Ipv4Address, size_t> {
 public:
--- a/src/node/mac48-address.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/mac48-address.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -95,7 +95,7 @@
 {
   return address.CheckCompatible (GetType (), 6);
 }
-Mac48Address::operator Address ()
+Mac48Address::operator Address () const
 {
   return ConvertTo ();
 }
@@ -133,19 +133,48 @@
   return type;
 }
 
+bool
+Mac48Address::IsBroadcast (void) const
+{
+  return *this == GetBroadcast ();
+}
+bool 
+Mac48Address::IsMulticast (void) const
+{
+  return (m_address[0] & 0x01) == 0x01;
+}
+Mac48Address
+Mac48Address::GetBroadcast (void)
+{
+  static Mac48Address broadcast = Mac48Address ("ff:ff:ff:ff:ff:ff");
+  return broadcast;
+}
 bool operator == (const Mac48Address &a, const Mac48Address &b)
 {
-  uint8_t ada[6];
-  uint8_t adb[6];
-  a.CopyTo (ada);
-  b.CopyTo (adb);
-  return memcmp (ada, adb, 6) == 0;
+  return memcmp (a.m_address, b.m_address, 6) == 0;
 }
 bool operator != (const Mac48Address &a, const Mac48Address &b)
 {
   return ! (a == b);
 }
 
+bool operator < (const Mac48Address &a, const Mac48Address &b)
+{
+  for (uint8_t i = 0; i < 6; i++) 
+    {
+      if (a.m_address[i] < b.m_address[i]) 
+        {
+          return true;
+        } 
+      else if (a.m_address[i] > b.m_address[i]) 
+        {
+          return false;
+        }
+    }
+  return false;
+}
+
+
 std::ostream& operator<< (std::ostream& os, const Mac48Address & address)
 {
   uint8_t ad[6];
--- a/src/node/mac48-address.h	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/mac48-address.h	Thu Oct 11 15:51:36 2007 +0100
@@ -61,7 +61,7 @@
    *
    * Convert an instance of this class to a polymorphic Address instance.
    */
-  operator Address ();
+  operator Address () const;
   /**
    * \param address a polymorphic address
    * \returns a new Mac48Address from the polymorphic address
@@ -79,6 +79,20 @@
    * Allocate a new Mac48Address.
    */
   static Mac48Address Allocate (void);
+
+  /**
+   * \returns true if this is a broadcast address, false otherwise.
+   */
+  bool IsBroadcast (void) const;
+  /**
+   * \returns true if this is a multicast address, false otherwise.
+   */
+  bool IsMulticast (void) const;
+
+  /**
+   * \returns the broadcast address
+   */
+  static Mac48Address GetBroadcast (void);
 private:
   /**
    * \returns a new Address instance
@@ -87,11 +101,15 @@
    */
   Address ConvertTo (void) const;
   static uint8_t GetType (void);
+  friend bool operator < (const Mac48Address &a, const Mac48Address &b);
+  friend bool operator == (const Mac48Address &a, const Mac48Address &b);
+
   uint8_t m_address[6];
 };
 
 bool operator == (const Mac48Address &a, const Mac48Address &b);
 bool operator != (const Mac48Address &a, const Mac48Address &b);
+bool operator < (const Mac48Address &a, const Mac48Address &b);
 std::ostream& operator<< (std::ostream& os, const Mac48Address & address);
 
 } // namespace ns3
--- a/src/node/mac64-address.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/mac64-address.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -95,7 +95,7 @@
 {
   return address.CheckCompatible (GetType (), 8);
 }
-Mac64Address::operator Address ()
+Mac64Address::operator Address () const
 {
   return ConvertTo ();
 }
--- a/src/node/mac64-address.h	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/node/mac64-address.h	Thu Oct 11 15:51:36 2007 +0100
@@ -60,7 +60,7 @@
    *
    * Convert an instance of this class to a polymorphic Address instance.
    */
-  operator Address ();
+  operator Address () const;
   /**
    * \param address a polymorphic address
    * \returns a new Mac64Address from the polymorphic address
--- a/src/simulator/timer.cc	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/simulator/timer.cc	Thu Oct 11 15:51:36 2007 +0100
@@ -20,7 +20,6 @@
 #include "timer.h"
 #include "simulator.h"
 #include "simulation-singleton.h"
-#include "event-garbage-collector.h"
 
 namespace ns3 {
 
@@ -31,16 +30,8 @@
     m_impl (0)
 {}
 
-Timer::Timer (enum SchedulePolicy schedulePolicy, 
-	      enum DestroyPolicy destroyPolicy)
-  : m_flags (schedulePolicy | destroyPolicy),
-    m_delay (FemtoSeconds (0)),
-    m_event (),
-    m_impl (0)
-{}
-
-Timer::Timer (enum GarbageCollectPolicy policy)
-  : m_flags (GARBAGE_COLLECT),
+Timer::Timer (enum DestroyPolicy destroyPolicy)
+  : m_flags (destroyPolicy),
     m_delay (FemtoSeconds (0)),
     m_event (),
     m_impl (0)
@@ -149,26 +140,11 @@
 Timer::Schedule (Time delay)
 {
   NS_ASSERT (m_impl != 0);
-  if (m_flags & CHECK_ON_SCHEDULE)
+  if (m_event.IsRunning ())
     {
-      if (m_event.IsRunning ())
-	{
-	  NS_FATAL_ERROR ("Event is still running while re-scheduling.");
-	}
-    }
-  else if (m_flags & CANCEL_ON_SCHEDULE)
-    {
-      m_event.Cancel ();
-    }
-  else if (m_flags & REMOVE_ON_SCHEDULE)
-    {
-      Simulator::Remove (m_event);
+      NS_FATAL_ERROR ("Event is still running while re-scheduling.");
     }
   m_event = m_impl->Schedule (delay);
-  if (m_flags & GARBAGE_COLLECT)
-    {
-      SimulationSingleton<EventGarbageCollector>::Get ()->Track (m_event);
-    }
 }
 
 void
--- a/src/simulator/timer.h	Tue Oct 09 13:25:30 2007 +0100
+++ b/src/simulator/timer.h	Thu Oct 11 15:51:36 2007 +0100
@@ -43,23 +43,6 @@
 class Timer 
 {
 public:
-  enum SchedulePolicy {
-    /**
-     * This policy cancels the event before scheduling a new event 
-     * for each call to Timer::Schedule.
-     */
-    CANCEL_ON_SCHEDULE = (1<<0),
-    /**
-     * This policy removes the event from the simulation event list 
-     * before scheduling a new event for each call to Timer::Schedule. 
-     */
-    REMOVE_ON_SCHEDULE = (1<<1),
-    /**
-     * This policy enforces a check before each call to Timer::Schedule
-     * to verify that the timer has already expired.
-     */
-    CHECK_ON_SCHEDULE = (1<<2),
-  };
   enum DestroyPolicy {
     /**
      * This policy cancels the event from the destructor of the Timer
@@ -77,15 +60,6 @@
      */
     CHECK_ON_DESTROY = (1<<5)
   };
-  enum GarbageCollectPolicy {
-    /**
-     * Every event scheduled with this policy is kept track of by an
-     * event garbage collector which makes sure that all events
-     * of timers with a GARBAGE_COLLECT policy are cancelled at the
-     * end of the simulation.
-     */
-    GARBAGE_COLLECT = (1<<6)
-  };
   enum State {
     RUNNING,
     EXPIRED,
@@ -93,21 +67,13 @@
   };
   /**
    * create a timer with a default event lifetime management policy:
-   *  - CHECK_ON_SCHEDULE
    *  - CHECK_ON_DESTROY
    */
   Timer ();
   /**
-   * \param scheduleFlags the event lifetime management policies to use for schedule events
    * \param destroyFlags the event lifetime management policies to use for destroy events
    */
-  Timer (enum SchedulePolicy schedulePolicy, 
-	 enum DestroyPolicy destroyPolicy);
-  /**
-   * \param policy the garbage collect policy. Only one
-   *        value is possible.
-   */
-  Timer (enum GarbageCollectPolicy policy);
+  Timer (enum DestroyPolicy destroyPolicy);
   ~Timer ();
 
   /**