add MobilityModel::GetSpeed method and implement it in all mobility models
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 19 Jul 2007 10:28:48 +0200
changeset 1624 6e7d48a8c120
parent 1623 fef525c0a5b6
child 1625 0579a50b2c62
add MobilityModel::GetSpeed method and implement it in all mobility models
src/node/hierarchical-mobility-model.cc
src/node/hierarchical-mobility-model.h
src/node/mobility-model.cc
src/node/mobility-model.h
src/node/random-direction-mobility-model.cc
src/node/random-direction-mobility-model.h
src/node/random-walk-2d-mobility-model.cc
src/node/random-walk-2d-mobility-model.h
src/node/random-waypoint-mobility-model.cc
src/node/random-waypoint-mobility-model.h
src/node/static-mobility-model.cc
src/node/static-mobility-model.h
src/node/static-speed-mobility-model.cc
src/node/static-speed-mobility-model.h
--- a/src/node/hierarchical-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/hierarchical-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -77,6 +77,16 @@
 			  position.z - parentPosition.z);
   m_child->Set (childPosition);
 }
+Speed 
+HierarchicalMobilityModel::DoGetSpeed (void) const
+{
+  Speed parentSpeed = m_parent->GetSpeed ();
+  Speed childSpeed = m_child->GetSpeed ();
+  Speed speed (parentSpeed.dx + childSpeed.dx,
+               parentSpeed.dy + childSpeed.dy,
+               parentSpeed.dz + childSpeed.dz);
+  return speed;
+}
 
 void 
 HierarchicalMobilityModel::ParentChanged (Ptr<const MobilityModel> model)
--- a/src/node/hierarchical-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/hierarchical-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -38,6 +38,7 @@
 private:
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
+  virtual Speed DoGetSpeed (void) const;
 
   void ParentChanged (Ptr<const MobilityModel> model);
   void ChildChanged (Ptr<const MobilityModel> model);
--- a/src/node/mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -39,6 +39,11 @@
 {
   return DoGet ();
 }
+Speed 
+MobilityModel::GetSpeed (void) const
+{
+  return DoGetSpeed ();
+}
 
 void 
 MobilityModel::Set (double x, double y, double z)
--- a/src/node/mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -23,6 +23,7 @@
 
 #include "ns3/object.h"
 #include "position.h"
+#include "speed.h"
 
 namespace ns3 {
 
@@ -45,9 +46,9 @@
    * Unit is meters
    */
   Position Get (void) const;
-
   void Set (double x, double y, double z);
   void Set (const Position &position);
+  Speed GetSpeed (void) const;
   /**
    * \param position a reference to another position object instance
    * \returns the distance between the two objects.
@@ -74,6 +75,7 @@
    */
   virtual Position DoGet (void) const = 0;
   virtual void DoSet (const Position &position) = 0;
+  virtual Speed DoGetSpeed (void) const = 0;
 };
 
 }; // namespace ns3
--- a/src/node/random-direction-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-direction-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -186,6 +186,11 @@
   Simulator::Remove (m_event);
   m_event = Simulator::ScheduleNow (&RandomDirectionMobilityModel::Start, this);
 }
+Speed 
+RandomDirectionMobilityModel::DoGetSpeed (void) const
+{
+  return m_helper.GetSpeed ();
+}
 
 
 
--- a/src/node/random-direction-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-direction-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -72,6 +72,7 @@
   virtual void DoDispose (void);
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
+  virtual Speed DoGetSpeed (void) const;
 
   static const double PI;
   Ptr<RandomDirectionParameters> m_parameters;
--- a/src/node/random-walk-2d-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-walk-2d-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -192,6 +192,12 @@
   Simulator::Remove (m_event);
   m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this);
 }
+Speed 
+RandomWalk2dMobilityModel::DoGetSpeed (void) const
+{
+  return m_helper.GetSpeed ();
+}
+
 
 
 } // namespace ns3
--- a/src/node/random-walk-2d-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-walk-2d-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -111,6 +111,7 @@
   virtual void DoDispose (void);
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
+  virtual Speed DoGetSpeed (void) const;
 
   StaticSpeedHelper m_helper;
   EventId m_event;
--- a/src/node/random-waypoint-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-waypoint-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -122,6 +122,11 @@
   Simulator::Remove (m_event);
   Simulator::ScheduleNow (&RandomWaypointMobilityModel::Start, this);
 }
+Speed 
+RandomWaypointMobilityModel::DoGetSpeed (void) const
+{
+  return m_helper.GetSpeed ();
+}
 
 
 } // namespace ns3
--- a/src/node/random-waypoint-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/random-waypoint-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -60,6 +60,8 @@
   void Start (void);
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
+  virtual Speed DoGetSpeed (void) const;
+
   StaticSpeedHelper m_helper;
   Ptr<RandomWaypointMobilityModelParameters> m_parameters;
   EventId m_event;
--- a/src/node/static-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/static-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -22,22 +22,15 @@
 
 namespace ns3 {
 
-const InterfaceId StaticMobilityModel::iid = MakeInterfaceId ("StaticMobilityModel", MobilityModel::iid);
-const ClassId StaticMobilityModel::cid = MakeClassId<StaticMobilityModel,double, double> ("StaticMobilityModel", 
-                                                                                StaticMobilityModel::iid);
-
+const ClassId StaticMobilityModel::cid = MakeClassId<StaticMobilityModel> ("StaticMobilityModel", 
+                                                                           MobilityModel::iid);
+  
 StaticMobilityModel::StaticMobilityModel ()
-  : m_x (0.0), m_y (0.0), m_z (0.0)
 {
   SetInterfaceId (StaticMobilityModel::iid);
 }
-StaticMobilityModel::StaticMobilityModel (double x, double y)
-  : m_x (x), m_y (y), m_z (0.0)
-{
-  SetInterfaceId (StaticMobilityModel::iid);
-}
-StaticMobilityModel::StaticMobilityModel (double x, double y, double z)
-  : m_x (x), m_y (y), m_z (z)
+StaticMobilityModel::StaticMobilityModel (const Position &position)
+  : m_position (position)
 {
   SetInterfaceId (StaticMobilityModel::iid);
 }
@@ -47,24 +40,18 @@
 Position
 StaticMobilityModel::DoGet (void) const
 {
-  return Position (m_x, m_y, m_z);
+  return m_position;
 }
 void 
 StaticMobilityModel::DoSet (const Position &position)
 {
-  bool changed = false;
-  if (m_x != position.x || m_y != position.y || m_z != position.z)
-    {
-      changed = true;
-    }
-  m_x = position.x;
-  m_y = position.y;
-  m_z = position.z;
-  if (changed)
-    {
-      NotifyCourseChange ();
-    }
+  m_position = position;
+  NotifyCourseChange ();
+}
+Speed 
+StaticMobilityModel::DoGetSpeed (void) const
+{
+  return Speed ();
 }
 
-
 }; // namespace ns3
--- a/src/node/static-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/static-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -34,37 +34,25 @@
 class StaticMobilityModel : public MobilityModel 
 {
 public:
-  static const InterfaceId iid;
   static const ClassId cid;
   /**
    * Create a position located at coordinates (0,0,0)
    */
   StaticMobilityModel ();
   /**
-   * \param x x coordinate
-   * \param y y coordinate
-   *
-   * Create a position located at coordinates (x,y,0).
-   * Unit is meters
-   */
-  StaticMobilityModel (double x, double y);
-  /**
-   * \param x x coordinate
-   * \param y y coordinate
-   * \param z z coordinate
    *
    * Create a position located at coordinates (x,y,z).
    * Unit is meters
    */
-  StaticMobilityModel (double x, double y, double z);
+  StaticMobilityModel (const Position &position);
   virtual ~StaticMobilityModel ();
 
 private:
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
-  double m_x;
-  double m_y;
-  double m_z;
+  virtual Speed DoGetSpeed (void) const;
+
+  Position m_position;
 };
 
 }; // namespace ns3
--- a/src/node/static-speed-mobility-model.cc	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/static-speed-mobility-model.cc	Thu Jul 19 10:28:48 2007 +0200
@@ -68,5 +68,10 @@
   m_helper.InitializePosition (position);
   NotifyCourseChange ();
 }
+Speed 
+StaticSpeedMobilityModel::DoGetSpeed (void) const
+{
+  return m_helper.GetSpeed ();
+}
 
 }; // namespace ns3
--- a/src/node/static-speed-mobility-model.h	Thu Jul 19 10:21:27 2007 +0200
+++ b/src/node/static-speed-mobility-model.h	Thu Jul 19 10:28:48 2007 +0200
@@ -64,6 +64,7 @@
 private:
   virtual Position DoGet (void) const;
   virtual void DoSet (const Position &position);
+  virtual Speed DoGetSpeed (void) const;
   void Update (void) const;
   StaticSpeedHelper m_helper;
 };