diff -r e7504020e45b bindings/python/ns3_module_simulator.py --- a/bindings/python/ns3_module_simulator.py Tue Aug 05 19:46:05 2008 +0100 +++ b/bindings/python/ns3_module_simulator.py Wed Aug 06 11:09:06 2008 +0100 @@ -367,6 +367,11 @@ '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 @@ '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', @@ -762,6 +772,11 @@ is_const=True, is_virtual=True) ## default-simulator-impl.h: void ns3::DefaultSimulatorImpl::Run() [member function] cls.add_method('Run', + 'void', + [], + is_virtual=True) + ## default-simulator-impl.h: void ns3::DefaultSimulatorImpl::RunOneEvent() [member function] + cls.add_method('RunOneEvent', 'void', [], is_virtual=True) diff -r e7504020e45b src/simulator/default-simulator-impl.cc --- a/src/simulator/default-simulator-impl.cc Tue Aug 05 19:46:05 2008 +0100 +++ b/src/simulator/default-simulator-impl.cc Wed Aug 06 11:09:06 2008 +0100 @@ -154,6 +154,12 @@ // If the simulator stopped naturally by lack of events, make a // consistency test to check that we didn't lose any events along the way. NS_ASSERT(!m_events->IsEmpty () || m_unscheduledEvents == 0); +} + +void +DefaultSimulatorImpl::RunOneEvent (void) +{ + ProcessOneEvent (); } void diff -r e7504020e45b src/simulator/default-simulator-impl.h --- a/src/simulator/default-simulator-impl.h Tue Aug 05 19:46:05 2008 +0100 +++ b/src/simulator/default-simulator-impl.h Wed Aug 06 11:09:06 2008 +0100 @@ -55,6 +55,7 @@ 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 -r e7504020e45b src/simulator/simulator-impl.h --- a/src/simulator/simulator-impl.h Tue Aug 05 19:46:05 2008 +0100 +++ b/src/simulator/simulator-impl.h Wed Aug 06 11:09:06 2008 +0100 @@ -49,6 +49,7 @@ 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 -r e7504020e45b src/simulator/simulator.cc --- a/src/simulator/simulator.cc Tue Aug 05 19:46:05 2008 +0100 +++ b/src/simulator/simulator.cc Wed Aug 06 11:09:06 2008 +0100 @@ -143,6 +143,13 @@ { NS_LOG_FUNCTION_NOARGS (); GetImpl ()->Run (); +} + +void +Simulator::RunOneEvent (void) +{ + NS_LOG_FUNCTION_NOARGS (); + GetImpl ()->RunOneEvent (); } void diff -r e7504020e45b src/simulator/simulator.h --- a/src/simulator/simulator.h Tue Aug 05 19:46:05 2008 +0100 +++ b/src/simulator/simulator.h Wed Aug 06 11:09:06 2008 +0100 @@ -115,6 +115,11 @@ * is greater than or equal to the stop time. */ 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