public static int ToNumberOfDaysPerWeek(WeekdaySelectionEnumeration selection) { Func<WeekdaySelectionEnumeration, bool> isDaySelected = day => day != WeekdaySelectionEnumeration.None && (selection & day) == day; var days = ((WeekdaySelectionEnumeration[])Enum.GetValues(typeof(WeekdaySelectionEnumeration))).Where( isDaySelected); return days.Count(); }
private Dictionary<DayOfWeek, bool> ResolveTrainingWeekdays(WeekdaySelectionEnumeration trainingDays) { var weekDays = WeekStartsOnMonday ? DanishWeekDays : EnglishWeekDays; var trainingWeekdays = new Dictionary<DayOfWeek, bool>(7); foreach (var day in weekDays) { var canTrainToday = (day.Value & trainingDays) == day.Value; trainingWeekdays.Add(day.Key, canTrainToday); } return trainingWeekdays; }
private static TrainingPlan CreatePlan(Athlete athlete, WeekdaySelectionEnumeration trainingDays) { var trainingPlan = new TrainingPlan { Workload = 50, Goal = CreateGoal(), Athlete = athlete, Start = new DateTime(2009, 1, 1), StartDistance = 2000, PreferredWeekdays = (int) trainingDays }; return trainingPlan; }
private IEnumerable<Run> CreateRuns(WeekdaySelectionEnumeration trainingDays, IEnumerator<double> sequencer) { var isTrainingDay = ResolveTrainingWeekdays(trainingDays); sequencer.Reset(); for (var currentDate = TrainingPlan.Start; ; currentDate = currentDate.AddDays(1)) { if (!isTrainingDay[currentDate.DayOfWeek]) { continue; } if (!sequencer.MoveNext()) { yield break; } var distance = sequencer.Current; var run = CreateRun(distance, currentDate); yield return run; } }