/// <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?"));
            }
        }
示例#2
0
 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;
     }
 }
示例#3
0
    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);
    }