From 808e3b4ec75ff174576fcac52abad9b7db481504 Mon Sep 17 00:00:00 2001 From: Tommaso Pecorella Date: Thu, 9 Nov 2023 02:35:28 +0100 Subject: [PATCH] core: add a Simulator::GetStopEvent --- src/core/model/default-simulator-impl.cc | 4 ++-- src/core/model/default-simulator-impl.h | 2 +- src/core/model/realtime-simulator-impl.cc | 4 ++-- src/core/model/realtime-simulator-impl.h | 2 +- src/core/model/simulator-impl.h | 2 +- src/core/model/simulator.cc | 10 +++++++++- src/core/model/simulator.h | 11 +++++++++++ src/mpi/model/distributed-simulator-impl.cc | 4 ++-- src/mpi/model/distributed-simulator-impl.h | 2 +- src/mpi/model/null-message-simulator-impl.cc | 4 ++-- src/mpi/model/null-message-simulator-impl.h | 2 +- src/visualizer/model/visual-simulator-impl.cc | 4 ++-- src/visualizer/model/visual-simulator-impl.h | 2 +- 13 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/core/model/default-simulator-impl.cc b/src/core/model/default-simulator-impl.cc index 80742025c..f22bc6dca 100644 --- a/src/core/model/default-simulator-impl.cc +++ b/src/core/model/default-simulator-impl.cc @@ -209,11 +209,11 @@ DefaultSimulatorImpl::Stop() m_stop = true; } -void +EventId DefaultSimulatorImpl::Stop(const Time& delay) { NS_LOG_FUNCTION(this << delay.GetTimeStep()); - Simulator::Schedule(delay, &Simulator::Stop); + return Simulator::Schedule(delay, &Simulator::Stop); } // diff --git a/src/core/model/default-simulator-impl.h b/src/core/model/default-simulator-impl.h index e7edcc542..4a87e7dab 100644 --- a/src/core/model/default-simulator-impl.h +++ b/src/core/model/default-simulator-impl.h @@ -61,7 +61,7 @@ class DefaultSimulatorImpl : public SimulatorImpl void Destroy() override; bool IsFinished() const override; void Stop() override; - void Stop(const Time& delay) override; + EventId Stop(const Time& delay) override; EventId Schedule(const Time& delay, EventImpl* event) override; void ScheduleWithContext(uint32_t context, const Time& delay, EventImpl* event) override; EventId ScheduleNow(EventImpl* event) override; diff --git a/src/core/model/realtime-simulator-impl.cc b/src/core/model/realtime-simulator-impl.cc index 757eb9ff5..f34a7ebe5 100644 --- a/src/core/model/realtime-simulator-impl.cc +++ b/src/core/model/realtime-simulator-impl.cc @@ -497,11 +497,11 @@ RealtimeSimulatorImpl::Stop() m_stop = true; } -void +EventId RealtimeSimulatorImpl::Stop(const Time& delay) { NS_LOG_FUNCTION(this << delay); - Simulator::Schedule(delay, &Simulator::Stop); + return Simulator::Schedule(delay, &Simulator::Stop); } // diff --git a/src/core/model/realtime-simulator-impl.h b/src/core/model/realtime-simulator-impl.h index 4d2b6e56e..307693306 100644 --- a/src/core/model/realtime-simulator-impl.h +++ b/src/core/model/realtime-simulator-impl.h @@ -91,7 +91,7 @@ class RealtimeSimulatorImpl : public SimulatorImpl void Destroy() override; bool IsFinished() const override; void Stop() override; - void Stop(const Time& delay) override; + EventId Stop(const Time& delay) override; EventId Schedule(const Time& delay, EventImpl* event) override; void ScheduleWithContext(uint32_t context, const Time& delay, EventImpl* event) override; EventId ScheduleNow(EventImpl* event) override; diff --git a/src/core/model/simulator-impl.h b/src/core/model/simulator-impl.h index e95395c31..9775e324d 100644 --- a/src/core/model/simulator-impl.h +++ b/src/core/model/simulator-impl.h @@ -61,7 +61,7 @@ class SimulatorImpl : public Object /** \copydoc Simulator::Stop() */ virtual void Stop() = 0; /** \copydoc Simulator::Stop(const Time&) */ - virtual void Stop(const Time& delay) = 0; + virtual EventId Stop(const Time& delay) = 0; /** \copydoc Simulator::Schedule(const Time&,const Ptr&) */ virtual EventId Schedule(const Time& delay, EventImpl* event) = 0; /** \copydoc Simulator::ScheduleWithContext(uint32_t,const Time&,EventImpl*) */ diff --git a/src/core/model/simulator.cc b/src/core/model/simulator.cc index 4d6233554..c89575777 100644 --- a/src/core/model/simulator.cc +++ b/src/core/model/simulator.cc @@ -54,6 +54,8 @@ namespace ns3 // of causing recursions leading to stack overflow NS_LOG_COMPONENT_DEFINE("Simulator"); +EventId Simulator::m_stopEvent; + /** * \ingroup simulator * \anchor GlobalValueSimulatorImplementationType @@ -192,7 +194,13 @@ void Simulator::Stop(const Time& delay) { NS_LOG_FUNCTION(delay); - GetImpl()->Stop(delay); + m_stopEvent = GetImpl()->Stop(delay); +} + +EventId +Simulator::GetStopEvent() +{ + return m_stopEvent; } Time diff --git a/src/core/model/simulator.h b/src/core/model/simulator.h index 0a795a3c4..738f52459 100644 --- a/src/core/model/simulator.h +++ b/src/core/model/simulator.h @@ -169,6 +169,12 @@ class Simulator */ static void Stop(const Time& delay); + /** + * Returns the Stop Event, or an invalid event if the simulation + * does not have a scheduled stop time. + */ + static EventId GetStopEvent(); + /** * Get the current simulation context. * @@ -520,6 +526,11 @@ class Simulator */ static EventId DoScheduleDestroy(EventImpl* event); + /** + * Stop event (if present) + */ + static EventId m_stopEvent; + }; // class Simulator /** diff --git a/src/mpi/model/distributed-simulator-impl.cc b/src/mpi/model/distributed-simulator-impl.cc index 425d1437e..e8840d22a 100644 --- a/src/mpi/model/distributed-simulator-impl.cc +++ b/src/mpi/model/distributed-simulator-impl.cc @@ -464,12 +464,12 @@ DistributedSimulatorImpl::Stop() m_stop = true; } -void +EventId DistributedSimulatorImpl::Stop(const Time& delay) { NS_LOG_FUNCTION(this << delay.GetTimeStep()); - Simulator::Schedule(delay, &Simulator::Stop); + return Simulator::Schedule(delay, &Simulator::Stop); } // diff --git a/src/mpi/model/distributed-simulator-impl.h b/src/mpi/model/distributed-simulator-impl.h index 01937d172..4b11290ad 100644 --- a/src/mpi/model/distributed-simulator-impl.h +++ b/src/mpi/model/distributed-simulator-impl.h @@ -122,7 +122,7 @@ class DistributedSimulatorImpl : public SimulatorImpl void Destroy() override; bool IsFinished() const override; void Stop() override; - void Stop(const Time& delay) override; + EventId Stop(const Time& delay) override; EventId Schedule(const Time& delay, EventImpl* event) override; void ScheduleWithContext(uint32_t context, const Time& delay, EventImpl* event) override; EventId ScheduleNow(EventImpl* event) override; diff --git a/src/mpi/model/null-message-simulator-impl.cc b/src/mpi/model/null-message-simulator-impl.cc index 59446ab72..33f811953 100644 --- a/src/mpi/model/null-message-simulator-impl.cc +++ b/src/mpi/model/null-message-simulator-impl.cc @@ -382,12 +382,12 @@ NullMessageSimulatorImpl::Stop() m_stop = true; } -void +EventId NullMessageSimulatorImpl::Stop(const Time& delay) { NS_LOG_FUNCTION(this << delay.GetTimeStep()); - Simulator::Schedule(delay, &Simulator::Stop); + return Simulator::Schedule(delay, &Simulator::Stop); } // diff --git a/src/mpi/model/null-message-simulator-impl.h b/src/mpi/model/null-message-simulator-impl.h index 851caacf7..d64f0ed1f 100644 --- a/src/mpi/model/null-message-simulator-impl.h +++ b/src/mpi/model/null-message-simulator-impl.h @@ -66,7 +66,7 @@ class NullMessageSimulatorImpl : public SimulatorImpl void Destroy() override; bool IsFinished() const override; void Stop() override; - void Stop(const Time& delay) override; + EventId Stop(const Time& delay) override; EventId Schedule(const Time& delay, EventImpl* event) override; void ScheduleWithContext(uint32_t context, const Time& delay, EventImpl* event) override; EventId ScheduleNow(EventImpl* event) override; diff --git a/src/visualizer/model/visual-simulator-impl.cc b/src/visualizer/model/visual-simulator-impl.cc index 883f864ad..ae715d364 100644 --- a/src/visualizer/model/visual-simulator-impl.cc +++ b/src/visualizer/model/visual-simulator-impl.cc @@ -140,10 +140,10 @@ VisualSimulatorImpl::Stop() m_simulator->Stop(); } -void +EventId VisualSimulatorImpl::Stop(const Time& delay) { - m_simulator->Stop(delay); + return m_simulator->Stop(delay); } // diff --git a/src/visualizer/model/visual-simulator-impl.h b/src/visualizer/model/visual-simulator-impl.h index 0e8710966..e397fa250 100644 --- a/src/visualizer/model/visual-simulator-impl.h +++ b/src/visualizer/model/visual-simulator-impl.h @@ -56,7 +56,7 @@ class VisualSimulatorImpl : public SimulatorImpl void Destroy() override; bool IsFinished() const override; void Stop() override; - void Stop(const Time& delay) override; + EventId Stop(const Time& delay) override; EventId Schedule(const Time& delay, EventImpl* event) override; void ScheduleWithContext(uint32_t context, const Time& delay, EventImpl* event) override; EventId ScheduleNow(EventImpl* event) override;