diff --git a/bindings/python/ns3_module_simulator.py b/bindings/python/ns3_module_simulator.py index aee2ed2f6..cd2fa96ae 100644 --- a/bindings/python/ns3_module_simulator.py +++ b/bindings/python/ns3_module_simulator.py @@ -367,6 +367,11 @@ def register_Ns3Simulator_methods(root_module, cls): 'void', [], is_static=True, unblock_threads=True) + ## simulator.h: static void ns3::Simulator::RunOneEvent() [member function] + cls.add_method('RunOneEvent', + 'void', + [], + is_static=True) ## simulator.h: static void ns3::Simulator::Stop() [member function] cls.add_method('Stop', 'void', @@ -669,6 +674,11 @@ def register_Ns3SimulatorImpl_methods(root_module, cls): 'void', [], is_pure_virtual=True, is_virtual=True) + ## simulator-impl.h: void ns3::SimulatorImpl::RunOneEvent() [member function] + cls.add_method('RunOneEvent', + 'void', + [], + is_pure_virtual=True, is_virtual=True) ## simulator-impl.h: ns3::Time ns3::SimulatorImpl::Now() const [member function] cls.add_method('Now', 'ns3::Time', @@ -765,6 +775,11 @@ def register_Ns3DefaultSimulatorImpl_methods(root_module, cls): 'void', [], is_virtual=True) + ## default-simulator-impl.h: void ns3::DefaultSimulatorImpl::RunOneEvent() [member function] + cls.add_method('RunOneEvent', + 'void', + [], + is_virtual=True) ## default-simulator-impl.h: ns3::Time ns3::DefaultSimulatorImpl::Now() const [member function] cls.add_method('Now', 'ns3::Time', diff --git a/src/simulator/default-simulator-impl.cc b/src/simulator/default-simulator-impl.cc index 3fc8c6aca..6da5db2f7 100644 --- a/src/simulator/default-simulator-impl.cc +++ b/src/simulator/default-simulator-impl.cc @@ -156,6 +156,12 @@ DefaultSimulatorImpl::Run (void) NS_ASSERT(!m_events->IsEmpty () || m_unscheduledEvents == 0); } +void +DefaultSimulatorImpl::RunOneEvent (void) +{ + ProcessOneEvent (); +} + void DefaultSimulatorImpl::Stop (void) { diff --git a/src/simulator/default-simulator-impl.h b/src/simulator/default-simulator-impl.h index b923d614d..3dc92e4b5 100644 --- a/src/simulator/default-simulator-impl.h +++ b/src/simulator/default-simulator-impl.h @@ -55,6 +55,7 @@ public: virtual void Cancel (const EventId &ev); virtual bool IsExpired (const EventId &ev) const; virtual void Run (void); + virtual void RunOneEvent (void); virtual Time Now (void) const; virtual Time GetDelayLeft (const EventId &id) const; virtual Time GetMaximumSimulationTime (void) const; diff --git a/src/simulator/simulator-impl.h b/src/simulator/simulator-impl.h index 7887e5b45..8123ad96f 100644 --- a/src/simulator/simulator-impl.h +++ b/src/simulator/simulator-impl.h @@ -49,6 +49,7 @@ public: virtual void Cancel (const EventId &ev) = 0; virtual bool IsExpired (const EventId &ev) const = 0; virtual void Run (void) = 0; + virtual void RunOneEvent (void) = 0; virtual Time Now (void) const = 0; virtual Time GetDelayLeft (const EventId &id) const = 0; virtual Time GetMaximumSimulationTime (void) const = 0; diff --git a/src/simulator/simulator.cc b/src/simulator/simulator.cc index 183e0c5a8..b1788234b 100644 --- a/src/simulator/simulator.cc +++ b/src/simulator/simulator.cc @@ -145,6 +145,13 @@ Simulator::Run (void) GetImpl ()->Run (); } +void +Simulator::RunOneEvent (void) +{ + NS_LOG_FUNCTION_NOARGS (); + GetImpl ()->RunOneEvent (); +} + void Simulator::Stop (void) { diff --git a/src/simulator/simulator.h b/src/simulator/simulator.h index 6972c5f6c..4b47b3b91 100644 --- a/src/simulator/simulator.h +++ b/src/simulator/simulator.h @@ -116,6 +116,11 @@ public: */ static void Run (void); + /** + * Process only the next simulation event, then return immediately. + */ + static void RunOneEvent (void); + /** * If an event invokes this method, it will be the last * event scheduled by the Simulator::run method before