private static void SetAdvanceImmediatelyRecursively(TimeSourceBase source, bool val) { source.AdvanceImmediately = val; foreach (var sink in source.Sinks.OfType <TimeSourceBase>()) { SetAdvanceImmediatelyRecursively(sink, val); } }
private static void SetSerialExecutionRecursively(TimeSourceBase source, bool val) { source.ExecuteInSerial = val; foreach (var sink in source.Sinks.OfType <TimeSourceBase>()) { SetSerialExecutionRecursively(sink, val); } }
private static void SetPerformanceRecursively(TimeSourceBase source, double p) { source.Performance = p; foreach (var sink in source.Sinks.OfType <TimeSourceBase>()) { SetPerformanceRecursively(sink, p); } }
private static void SetQuantumRecursively(TimeSourceBase source, TimeInterval quantum) { source.Quantum = quantum; foreach (var sink in source.Sinks.OfType <TimeSourceBase>()) { SetQuantumRecursively(sink, quantum); } }
// note: this method currently implements // the not-sooner-than behaviour which means // that it's guaranteed the timeout event // will not trigger earlier than current time // plus `virtualMilliseconds` (except for the // serialization, in which case the event will // be triggered immediately); // technically the event is triggered in the synchronization phase, // so it might be delayed maximally by the size of the quantum public static TimeoutEvent EnqueueTimeoutEvent(this TimeSourceBase timeSource, ulong virtualMilliseconds) { var timeoutEvent = new TimeoutEvent(); var when = timeSource.ElapsedVirtualTime + TimeInterval.FromMilliseconds(virtualMilliseconds); timeSource.ExecuteInSyncedState(_ => { timeoutEvent.Trigger(); }, new TimeStamp(when, timeSource.Domain)); return(timeoutEvent); }