/// <summary>
        /// Matches the day of week mask.
        /// </summary>
        /// <param name="start">The start.</param>
        /// <param name="daysOfWeekMask">The days of week mask.</param>
        /// <returns></returns>
        protected static bool MatchDayOfWeekMask(DateTime start, RecurrenceDays daysOfWeekMask)
        {
            if (daysOfWeekMask == RecurrenceDays.None)
            {
                return(true);
            }

            return(daysOfWeekMask.HasDay(start.DayOfWeek.GetRecurrenceDay()));
        }
        /// <summary>
        /// Gets the days of week.
        /// </summary>
        /// <param name="recurrenceDays">The recurrence days.</param>
        /// <returns></returns>
        public static IEnumerable <DayOfWeek> GetDaysOfWeek(this RecurrenceDays recurrenceDays)
        {
            var dayOfWeeks = new List <DayOfWeek>();

            foreach (DayOfWeek dayOfWeek in Enum.GetValues(typeof(DayOfWeek)))
            {
                if (recurrenceDays.HasDay(dayOfWeek))
                {
                    dayOfWeeks.Add(dayOfWeek);
                }
            }
            dayOfWeeks.Sort();

            return(dayOfWeeks);
        }
        private static List <NameValueItem <RecurrenceDays> > CreateWeekDays(
            IScheduler scheduler,
            RecurrenceDays dayOfWeekMask)
        {
            var days = new List <NameValueItem <RecurrenceDays> >();
            IDictionary <DayOfWeek, string> namesOfDays = CalendarHelper.GetNamesOfDays(scheduler.GetCultureInUse());

            foreach (
                DayOfWeek dayOfWeek in
                CalendarHelper.GetDaysOfWeekStartWithFirstDayOfWeek(scheduler.GetFirstDayOfWeekInUse()))
            {
                RecurrenceDays recurrenceDay = dayOfWeek.GetRecurrenceDay();
                var            day           = new NameValueItem <RecurrenceDays>(
                    recurrenceDay,
                    namesOfDays[dayOfWeek],
                    dayOfWeekMask.HasDay(recurrenceDay));
                days.Add(day);
            }

            return(days);
        }
        /// <summary>
        /// Determines whether the specified recurrence days has day.
        /// </summary>
        /// <param name="recurrenceDays">The recurrence days.</param>
        /// <param name="dayToCompare">The day to compare.</param>
        /// <returns>
        ///     <c>true</c> if the specified recurrence days has day; otherwise, <c>false</c>.
        /// </returns>
        public static bool HasDay(this RecurrenceDays recurrenceDays, DayOfWeek dayToCompare)
        {
            RecurrenceDays recurrenceDayToCompare = dayToCompare.GetRecurrenceDay();

            return(recurrenceDays.HasDay(recurrenceDayToCompare));
        }
        /// <summary>
        /// Matches the day of week mask.
        /// </summary>
        /// <param name="start">The start.</param>
        /// <param name="daysOfWeekMask">The days of week mask.</param>
        /// <returns></returns>
        protected static bool MatchDayOfWeekMask(DateTime start, RecurrenceDays daysOfWeekMask)
        {
            if (daysOfWeekMask == RecurrenceDays.None)
            {
                return true;
            }

            return daysOfWeekMask.HasDay(start.DayOfWeek.GetRecurrenceDay());
        }