From b2d7640a1df2881cfbbf03d7f10db451de750377 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 19 Jul 2007 10:28:48 +0200 Subject: [PATCH] add MobilityModel::GetSpeed method and implement it in all mobility models --- src/node/hierarchical-mobility-model.cc | 10 ++++++ src/node/hierarchical-mobility-model.h | 1 + src/node/mobility-model.cc | 5 +++ src/node/mobility-model.h | 4 ++- src/node/random-direction-mobility-model.cc | 5 +++ src/node/random-direction-mobility-model.h | 1 + src/node/random-walk-2d-mobility-model.cc | 6 ++++ src/node/random-walk-2d-mobility-model.h | 1 + src/node/random-waypoint-mobility-model.cc | 5 +++ src/node/random-waypoint-mobility-model.h | 2 ++ src/node/static-mobility-model.cc | 39 +++++++-------------- src/node/static-mobility-model.h | 20 +++-------- src/node/static-speed-mobility-model.cc | 5 +++ src/node/static-speed-mobility-model.h | 1 + 14 files changed, 62 insertions(+), 43 deletions(-) diff --git a/src/node/hierarchical-mobility-model.cc b/src/node/hierarchical-mobility-model.cc index 2c2e84f21..7e4aa3fe3 100644 --- a/src/node/hierarchical-mobility-model.cc +++ b/src/node/hierarchical-mobility-model.cc @@ -77,6 +77,16 @@ HierarchicalMobilityModel::DoSet (const Position &position) 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 model) diff --git a/src/node/hierarchical-mobility-model.h b/src/node/hierarchical-mobility-model.h index a1bb61713..e17555387 100644 --- a/src/node/hierarchical-mobility-model.h +++ b/src/node/hierarchical-mobility-model.h @@ -38,6 +38,7 @@ public: private: virtual Position DoGet (void) const; virtual void DoSet (const Position &position); + virtual Speed DoGetSpeed (void) const; void ParentChanged (Ptr model); void ChildChanged (Ptr model); diff --git a/src/node/mobility-model.cc b/src/node/mobility-model.cc index 4e1de6e41..033f9d50b 100644 --- a/src/node/mobility-model.cc +++ b/src/node/mobility-model.cc @@ -39,6 +39,11 @@ MobilityModel::Get (void) const { return DoGet (); } +Speed +MobilityModel::GetSpeed (void) const +{ + return DoGetSpeed (); +} void MobilityModel::Set (double x, double y, double z) diff --git a/src/node/mobility-model.h b/src/node/mobility-model.h index 7ba6b8d68..ef4a8b0bb 100644 --- a/src/node/mobility-model.h +++ b/src/node/mobility-model.h @@ -23,6 +23,7 @@ #include "ns3/object.h" #include "position.h" +#include "speed.h" namespace ns3 { @@ -45,9 +46,9 @@ public: * 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 @@ private: */ virtual Position DoGet (void) const = 0; virtual void DoSet (const Position &position) = 0; + virtual Speed DoGetSpeed (void) const = 0; }; }; // namespace ns3 diff --git a/src/node/random-direction-mobility-model.cc b/src/node/random-direction-mobility-model.cc index a847628fe..e2b5a614a 100644 --- a/src/node/random-direction-mobility-model.cc +++ b/src/node/random-direction-mobility-model.cc @@ -186,6 +186,11 @@ RandomDirectionMobilityModel::DoSet (const Position &position) Simulator::Remove (m_event); m_event = Simulator::ScheduleNow (&RandomDirectionMobilityModel::Start, this); } +Speed +RandomDirectionMobilityModel::DoGetSpeed (void) const +{ + return m_helper.GetSpeed (); +} diff --git a/src/node/random-direction-mobility-model.h b/src/node/random-direction-mobility-model.h index 73c54eb0c..9e14da559 100644 --- a/src/node/random-direction-mobility-model.h +++ b/src/node/random-direction-mobility-model.h @@ -72,6 +72,7 @@ class RandomDirectionMobilityModel : public MobilityModel 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 m_parameters; diff --git a/src/node/random-walk-2d-mobility-model.cc b/src/node/random-walk-2d-mobility-model.cc index ee0b82fc9..b8530ce4f 100644 --- a/src/node/random-walk-2d-mobility-model.cc +++ b/src/node/random-walk-2d-mobility-model.cc @@ -192,6 +192,12 @@ RandomWalk2dMobilityModel::DoSet (const Position &position) Simulator::Remove (m_event); m_event = Simulator::ScheduleNow (&RandomWalk2dMobilityModel::Start, this); } +Speed +RandomWalk2dMobilityModel::DoGetSpeed (void) const +{ + return m_helper.GetSpeed (); +} + } // namespace ns3 diff --git a/src/node/random-walk-2d-mobility-model.h b/src/node/random-walk-2d-mobility-model.h index d30ebfb87..d1cbd9aef 100644 --- a/src/node/random-walk-2d-mobility-model.h +++ b/src/node/random-walk-2d-mobility-model.h @@ -111,6 +111,7 @@ class RandomWalk2dMobilityModel : public MobilityModel 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; diff --git a/src/node/random-waypoint-mobility-model.cc b/src/node/random-waypoint-mobility-model.cc index 8e0460414..255af7aa6 100644 --- a/src/node/random-waypoint-mobility-model.cc +++ b/src/node/random-waypoint-mobility-model.cc @@ -122,6 +122,11 @@ RandomWaypointMobilityModel::DoSet (const Position &position) Simulator::Remove (m_event); Simulator::ScheduleNow (&RandomWaypointMobilityModel::Start, this); } +Speed +RandomWaypointMobilityModel::DoGetSpeed (void) const +{ + return m_helper.GetSpeed (); +} } // namespace ns3 diff --git a/src/node/random-waypoint-mobility-model.h b/src/node/random-waypoint-mobility-model.h index 7409b97e6..ae27037bc 100644 --- a/src/node/random-waypoint-mobility-model.h +++ b/src/node/random-waypoint-mobility-model.h @@ -60,6 +60,8 @@ private: void Start (void); virtual Position DoGet (void) const; virtual void DoSet (const Position &position); + virtual Speed DoGetSpeed (void) const; + StaticSpeedHelper m_helper; Ptr m_parameters; EventId m_event; diff --git a/src/node/static-mobility-model.cc b/src/node/static-mobility-model.cc index 980692660..e6d68f5c3 100644 --- a/src/node/static-mobility-model.cc +++ b/src/node/static-mobility-model.cc @@ -22,22 +22,15 @@ namespace ns3 { -const InterfaceId StaticMobilityModel::iid = MakeInterfaceId ("StaticMobilityModel", MobilityModel::iid); -const ClassId StaticMobilityModel::cid = MakeClassId ("StaticMobilityModel", - StaticMobilityModel::iid); - +const ClassId StaticMobilityModel::cid = MakeClassId ("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 @@ StaticMobilityModel::~StaticMobilityModel () 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 diff --git a/src/node/static-mobility-model.h b/src/node/static-mobility-model.h index d7600c1bd..9884c699a 100644 --- a/src/node/static-mobility-model.h +++ b/src/node/static-mobility-model.h @@ -34,37 +34,25 @@ namespace ns3 { 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 diff --git a/src/node/static-speed-mobility-model.cc b/src/node/static-speed-mobility-model.cc index eb622e241..d4cfc9873 100644 --- a/src/node/static-speed-mobility-model.cc +++ b/src/node/static-speed-mobility-model.cc @@ -68,5 +68,10 @@ StaticSpeedMobilityModel::DoSet (const Position &position) m_helper.InitializePosition (position); NotifyCourseChange (); } +Speed +StaticSpeedMobilityModel::DoGetSpeed (void) const +{ + return m_helper.GetSpeed (); +} }; // namespace ns3 diff --git a/src/node/static-speed-mobility-model.h b/src/node/static-speed-mobility-model.h index 3eab6eba8..1ceecbff5 100644 --- a/src/node/static-speed-mobility-model.h +++ b/src/node/static-speed-mobility-model.h @@ -64,6 +64,7 @@ public: private: virtual Position DoGet (void) const; virtual void DoSet (const Position &position); + virtual Speed DoGetSpeed (void) const; void Update (void) const; StaticSpeedHelper m_helper; };