private IEnumerable <ClassSchedule> CalculateSetup(IEnumerable <Course> courses) { var coursesEnumerator = ImmutableListEnumerator.FromEnumerable(courses); CalculateSetup_NextCourse(coursesEnumerator); return(ClassSchedules); }
private bool CalculateSetup_NextGroup(ImmutableListEnumerator <Course> courses, CourseGroup group) { IEnumerable <ClassActivitiesInfo> groupClassActivities = ClassActivitiesForGroup(courses.Current, group); var groupClassAcitivitiesEnumerator = ImmutableListEnumerator.FromEnumerable(groupClassActivities); return(CalculateSetup_NextClassActivity(courses, group, groupClassAcitivitiesEnumerator, group.Lecture)); }
private bool CalculateSetup_BuildCoursePlacement(ImmutableListEnumerator <Course> courses, CourseGroup group) { CurrentScheduleBuilder.BuildCoursePlacement(courses.Current, group); bool success = CalculateSetup_NextCourse(courses); CurrentScheduleBuilder.RemoveLastCoursePlacement(); return(success); }
private bool CalculateSetup_NextCourse(ImmutableListEnumerator <Course> courses) { courses = courses.MoveNext(); if (courses.HasEnded) { return(OnPlacementPermutation()); } return(CalculateSetup_CourseGroups(courses)); }
private bool CalculateSetup_EmptyKindOfClassActivities ( ImmutableListEnumerator <Course> courses, CourseGroup group, ImmutableListEnumerator <ClassActivitiesInfo> classActivitiesOfKindEnumerator, ClassActivitiesInfo classActivitiesOfKind) { if (!classActivitiesOfKind.CanBeEmpty) { throw new InvalidScheduleException("The class activities cannot be empty"); } return(CalculateSetup_NextClassActivity(courses, group, classActivitiesOfKindEnumerator, null)); }
private bool CalculateSetup_NextClassActivity ( ImmutableListEnumerator <Course> courses, CourseGroup group, ImmutableListEnumerator <ClassActivitiesInfo> classActivitiesOfKindEnumerator, IClassActivity classActivity ) { bool added = CurrentScheduleBuilder.AddClassActivity(classActivity); bool success = CalculateSetup_NextKindOfClassActivities(courses, group, classActivitiesOfKindEnumerator); CurrentScheduleBuilder.RemoveLastClassActivity(); return(added && success); }
private bool CalculateSetup_CourseGroups(ImmutableListEnumerator <Course> courses) { bool atLeastOne = false; foreach (CourseGroup group in courses.Current.Groups) { bool successs = CalculateSetup_NextGroup(courses, group); if (successs) { atLeastOne = true; } } return(atLeastOne); }
private bool CalculateSetup_ClassActivitiesOfKind ( ImmutableListEnumerator <Course> courses, CourseGroup group, ImmutableListEnumerator <ClassActivitiesInfo> classActivitiesOfKindEnumerator, ClassActivitiesInfo classActivitiesOfKind ) { bool atLeastOne = false; foreach (IClassActivity classActivity in classActivitiesOfKind) { bool successs = CalculateSetup_NextClassActivity(courses, group, classActivitiesOfKindEnumerator, classActivity); if (successs) { atLeastOne = true; } } return(atLeastOne); }
private bool CalculateSetup_NextKindOfClassActivities ( ImmutableListEnumerator <Course> courses, CourseGroup group, ImmutableListEnumerator <ClassActivitiesInfo> classActivitiesOfKindEnumerator ) { classActivitiesOfKindEnumerator = classActivitiesOfKindEnumerator.MoveNext(); if (classActivitiesOfKindEnumerator.HasEnded) { return(CalculateSetup_BuildCoursePlacement(courses, group)); } ClassActivitiesInfo classActivitiesOfKind = classActivitiesOfKindEnumerator.Current; if (classActivitiesOfKind.IsEmpty()) { return(CalculateSetup_EmptyKindOfClassActivities(courses, group, classActivitiesOfKindEnumerator, classActivitiesOfKind)); } return(CalculateSetup_ClassActivitiesOfKind(courses, group, classActivitiesOfKindEnumerator, classActivitiesOfKind)); }