From 303e03227a94c779e696f79d7e52aab43f53b76b Mon Sep 17 00:00:00 2001 From: Gabriel Ferreira Date: Tue, 15 Jul 2025 12:25:42 +0200 Subject: [PATCH] mobility, buildings: Allow mobility models to be copied --- .../model/random-walk-2d-outdoor-mobility-model.h | 6 ++++++ .../model/constant-acceleration-mobility-model.h | 7 +++++++ src/mobility/model/constant-position-mobility-model.h | 6 ++++++ src/mobility/model/constant-velocity-mobility-model.h | 6 ++++++ src/mobility/model/gauss-markov-mobility-model.h | 6 ++++++ .../model/geocentric-constant-position-mobility-model.h | 6 ++++++ src/mobility/model/hierarchical-mobility-model.h | 6 ++++++ src/mobility/model/mobility-model.h | 9 +++++++++ src/mobility/model/random-direction-2d-mobility-model.h | 6 ++++++ src/mobility/model/random-walk-2d-mobility-model.h | 6 ++++++ src/mobility/model/random-waypoint-mobility-model.h | 6 ++++++ .../model/steady-state-random-waypoint-mobility-model.h | 6 ++++++ src/mobility/model/waypoint-mobility-model.h | 6 ++++++ 13 files changed, 82 insertions(+) diff --git a/src/buildings/model/random-walk-2d-outdoor-mobility-model.h b/src/buildings/model/random-walk-2d-outdoor-mobility-model.h index 3a674dbe2..0091bc339 100644 --- a/src/buildings/model/random-walk-2d-outdoor-mobility-model.h +++ b/src/buildings/model/random-walk-2d-outdoor-mobility-model.h @@ -61,6 +61,12 @@ class RandomWalk2dOutdoorMobilityModel : public MobilityModel MODE_TIME }; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + private: /** * @brief Performs the rebound of the node if it reaches a boundary diff --git a/src/mobility/model/constant-acceleration-mobility-model.h b/src/mobility/model/constant-acceleration-mobility-model.h index 42703d768..9146b2fd4 100644 --- a/src/mobility/model/constant-acceleration-mobility-model.h +++ b/src/mobility/model/constant-acceleration-mobility-model.h @@ -33,6 +33,13 @@ class ConstantAccelerationMobilityModel : public MobilityModel */ ConstantAccelerationMobilityModel(); ~ConstantAccelerationMobilityModel() override; + + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** * Set the model's velocity and acceleration * @param velocity the velocity (m/s) diff --git a/src/mobility/model/constant-position-mobility-model.h b/src/mobility/model/constant-position-mobility-model.h index c7eea93f7..f2d25223c 100644 --- a/src/mobility/model/constant-position-mobility-model.h +++ b/src/mobility/model/constant-position-mobility-model.h @@ -33,6 +33,12 @@ class ConstantPositionMobilityModel : public MobilityModel ConstantPositionMobilityModel(); ~ConstantPositionMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + private: Vector DoGetPosition() const override; void DoSetPosition(const Vector& position) override; diff --git a/src/mobility/model/constant-velocity-mobility-model.h b/src/mobility/model/constant-velocity-mobility-model.h index 97ed416fd..7d2512a5b 100644 --- a/src/mobility/model/constant-velocity-mobility-model.h +++ b/src/mobility/model/constant-velocity-mobility-model.h @@ -39,6 +39,12 @@ class ConstantVelocityMobilityModel : public MobilityModel ConstantVelocityMobilityModel(); ~ConstantVelocityMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** * @param speed the new speed to set. * diff --git a/src/mobility/model/gauss-markov-mobility-model.h b/src/mobility/model/gauss-markov-mobility-model.h index cefb87ffa..d9d30c6c1 100644 --- a/src/mobility/model/gauss-markov-mobility-model.h +++ b/src/mobility/model/gauss-markov-mobility-model.h @@ -78,6 +78,12 @@ class GaussMarkovMobilityModel : public MobilityModel GaussMarkovMobilityModel(); ~GaussMarkovMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + private: /** * Initialize the model and calculate new velocity, direction, and pitch diff --git a/src/mobility/model/geocentric-constant-position-mobility-model.h b/src/mobility/model/geocentric-constant-position-mobility-model.h index b543c43ff..d100b803d 100644 --- a/src/mobility/model/geocentric-constant-position-mobility-model.h +++ b/src/mobility/model/geocentric-constant-position-mobility-model.h @@ -37,6 +37,12 @@ class GeocentricConstantPositionMobilityModel : public MobilityModel GeocentricConstantPositionMobilityModel() = default; ~GeocentricConstantPositionMobilityModel() override = default; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** * @brief Computes elevation angle between a ground terminal and a HAPS/Satellite. * After calculating the plane perpendicular to a cartesian position vector, diff --git a/src/mobility/model/hierarchical-mobility-model.h b/src/mobility/model/hierarchical-mobility-model.h index 59fff4685..7ecd91ee7 100644 --- a/src/mobility/model/hierarchical-mobility-model.h +++ b/src/mobility/model/hierarchical-mobility-model.h @@ -54,6 +54,12 @@ class HierarchicalMobilityModel : public MobilityModel HierarchicalMobilityModel(); + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** * @return the child mobility model. * diff --git a/src/mobility/model/mobility-model.h b/src/mobility/model/mobility-model.h index 041069355..ff7b029b1 100644 --- a/src/mobility/model/mobility-model.h +++ b/src/mobility/model/mobility-model.h @@ -37,6 +37,15 @@ class MOBILITY_EXPORT MobilityModel : public Object MobilityModel(); ~MobilityModel() override = 0; + /** + * Copy function allows one to copy the underlying MobilityModel + * from a MobilityModel pointer, by calling each children Copy implementation. + * This is primarily used by wraparound models for the spectrum channel. + * + * @return a copy of the current mobility model + */ + virtual Ptr Copy() const = 0; + /** * @return the current position */ diff --git a/src/mobility/model/random-direction-2d-mobility-model.h b/src/mobility/model/random-direction-2d-mobility-model.h index 64b2bf009..26f81cd53 100644 --- a/src/mobility/model/random-direction-2d-mobility-model.h +++ b/src/mobility/model/random-direction-2d-mobility-model.h @@ -42,6 +42,12 @@ class RandomDirection2dMobilityModel : public MobilityModel RandomDirection2dMobilityModel(); ~RandomDirection2dMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + private: /** * Set a new direction and speed diff --git a/src/mobility/model/random-walk-2d-mobility-model.h b/src/mobility/model/random-walk-2d-mobility-model.h index 253596171..28cebf31f 100644 --- a/src/mobility/model/random-walk-2d-mobility-model.h +++ b/src/mobility/model/random-walk-2d-mobility-model.h @@ -48,6 +48,12 @@ class RandomWalk2dMobilityModel : public MobilityModel ~RandomWalk2dMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** An enum representing the different working modes of this module. */ enum Mode { diff --git a/src/mobility/model/random-waypoint-mobility-model.h b/src/mobility/model/random-waypoint-mobility-model.h index f484f50ae..db44d26a0 100644 --- a/src/mobility/model/random-waypoint-mobility-model.h +++ b/src/mobility/model/random-waypoint-mobility-model.h @@ -50,6 +50,12 @@ class RandomWaypointMobilityModel : public MobilityModel ~RandomWaypointMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + protected: void DoInitialize() override; diff --git a/src/mobility/model/steady-state-random-waypoint-mobility-model.h b/src/mobility/model/steady-state-random-waypoint-mobility-model.h index b685b32aa..6586c6716 100644 --- a/src/mobility/model/steady-state-random-waypoint-mobility-model.h +++ b/src/mobility/model/steady-state-random-waypoint-mobility-model.h @@ -53,6 +53,12 @@ class SteadyStateRandomWaypointMobilityModel : public MobilityModel SteadyStateRandomWaypointMobilityModel(); ~SteadyStateRandomWaypointMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + protected: void DoInitialize() override; diff --git a/src/mobility/model/waypoint-mobility-model.h b/src/mobility/model/waypoint-mobility-model.h index 14df43334..d4c93be66 100644 --- a/src/mobility/model/waypoint-mobility-model.h +++ b/src/mobility/model/waypoint-mobility-model.h @@ -89,6 +89,12 @@ class WaypointMobilityModel : public MobilityModel WaypointMobilityModel(); ~WaypointMobilityModel() override; + // Inherited from MobilityModel + Ptr Copy() const override + { + return CreateObject(*this); + } + /** * @param waypoint waypoint to append to the object path. *