/// <summary> /// Gets the event. /// </summary> /// <param name="direction">The direction.</param> /// <param name="epoch">The epoch.</param> /// <returns>RecurringEventInstance.</returns> /// <exception cref="System.ArgumentOutOfRangeException"></exception> /// <exception cref="System.InvalidOperationException">No event found, is collection empty?</exception> private RecurringEventInstance GetEvent(Direction direction, DateTimeOffset epoch) { using (var enumerator = new EventEnumerator(_eventsByMonth, epoch.Month, direction)) { RecurringEventInstance?result = null; var halt = false; // ReSharper disable once AccessToModifiedClosure enumerator.MonthChanged += (o, e) => halt = result.HasValue; while (enumerator.MoveNext()) { if (halt) { break; } var dto = enumerator.GetOccurrence(Factory, epoch); if (dto.HasValue && (!result.HasValue || dto.Value < result.Value.EventTime)) { result = new RecurringEventInstance(enumerator.Current, dto.Value); } } return(result ?? throw new InvalidOperationException("No event found, is collection empty?")); } }
private void HandleEventsDefine(IReadOnlyList <PlanningParser.EventDefineContext> contexts) { _eventDict = new Dictionary <string, Event>(); foreach (var eventDefineContext in contexts) { IReadOnlyList <IList <string> > collection = eventDefineContext.listVariable().GetCollection(); IReadOnlyList <string> variableNameList = eventDefineContext.listVariable().GetVariableNameList(); EventEnumerator enumerator = new EventEnumerator(eventDefineContext, collection, variableNameList, _predicateDict, _eventDict, _currentCuddIndex); Algorithms.IterativeScanMixedRadix(enumerator); _currentCuddIndex = enumerator.CurrentCuddIndex; } }
public static IEnumerable <DirectoryInfo> GetDirectories(DirectoryInfo directoryInfo, bool recurse = true) { var directoryEnumerator = new DirectoryEnumerator(); var eventEnumeratingEnumerable = new EventEnumerator <DirectoryInfo>(); eventEnumeratingEnumerable.Action(() => { directoryEnumerator.Enumerate(directoryInfo, recurse); }); directoryEnumerator.OnNewDirectory += (sender, eventHandler) => { eventEnumeratingEnumerable.Callback(((DirectoryEventArgs)eventHandler).DirectoryInfo); }; return(eventEnumeratingEnumerable); }