public int CompareTo(object obj) { if (obj == null) { return(1); } CronFieldListItem cronFieldListItem = obj as CronFieldListItem; if (cronFieldListItem != null) { if (Type == CronFieldType.Wildcard || cronFieldListItem.Type == CronFieldType.Wildcard) { return(0); } if (Value < cronFieldListItem.Value) { return(-1); } if (Value > cronFieldListItem.Value) { return(1); } return(0); } throw new ArgumentException("Trying to compare an object that is not a CronField"); }
public DateTime GetNextDate(DateTime startDate, int failedFieldPosition) { if (failedFieldPosition >= 7) { return(startDate); } DateTime dateTime = startDate; int[] array = new int[7]; using (Enumerator enumerator = GetEnumerator()) { while (enumerator.MoveNext()) { KeyValuePair <int, CronFieldList> current = enumerator.Current; CronFieldList value = current.Value; CronFieldListItem cronFieldListItem = value.Next(); if (cronFieldListItem == null) { return(dateTime); } if (current.Key == 5) { continue; } int dateValueForField = getDateValueForField(current.Key, dateTime); if (current.Key < failedFieldPosition) { array[current.Key] = cronFieldListItem.Value - dateValueForField; if (array[current.Key] < 0) { dateTime = incrementValueForField(getNextPositionToIterate(current.Key), dateTime); } } else if (current.Key == failedFieldPosition) { while (cronFieldListItem != null && cronFieldListItem.Value > -1 && cronFieldListItem.Value < dateValueForField) { cronFieldListItem.Next(); value.Sort(); cronFieldListItem = value.Next(); } if (cronFieldListItem != null && cronFieldListItem.Value > -1) { array[current.Key] = cronFieldListItem.Value - dateValueForField; } else if (value.ListSource == CronFieldList.ValuesSource.CronExpression) { value.Reset(); value.Sort(); return(GetNextDate(startDate, getNextPositionToIterate(current.Key))); } } else { while (cronFieldListItem != null && cronFieldListItem.Value > -1 && cronFieldListItem.Value < dateValueForField) { cronFieldListItem.Next(); value.Sort(); cronFieldListItem = value.Next(); } if (cronFieldListItem != null && cronFieldListItem.Value > -1) { array[current.Key] = cronFieldListItem.Value - dateValueForField; } } dateTime = incrementValueForField(cronFieldListItem.FieldPos, dateTime, array[current.Key]); value.Reset(); value.Sort(); } } int num = 5; if (failedFieldPosition == num) { CronFieldList cronFieldList = base[num]; CronFieldListItem cronFieldListItem2 = cronFieldList.Next(); while (cronFieldListItem2 != null && cronFieldListItem2.Value > -1 && cronFieldListItem2.Value != (int)dateTime.DayOfWeek) { while (cronFieldListItem2 != null && cronFieldListItem2.Value > -1 && cronFieldListItem2.Value != (int)dateTime.DayOfWeek) { if (cronFieldListItem2.Value == (int)dateTime.DayOfWeek) { return(dateTime); } cronFieldListItem2.Next(); cronFieldList.Sort(); cronFieldListItem2 = cronFieldList.Next(); } cronFieldList.Reset(); cronFieldList.Sort(); cronFieldListItem2 = cronFieldList.Next(); dateTime = dateTime.AddDays(1.0); } } return(dateTime); }