/// <summary> /// Unit2durations the specified unit. /// </summary> /// <param name="unit">The unit.</param> /// <returns></returns> private static long Unit2duration(TimePhasedDataType.TimePhaseUnit unit) { long retVal = 0; switch (unit) { case TimePhasedDataType.TimePhaseUnit.Hours: retVal = CalendarHelper.MilisPerHour(); break; case TimePhasedDataType.TimePhaseUnit.Minute: retVal = CalendarHelper.MilisPerMinute(); break; case TimePhasedDataType.TimePhaseUnit.Day: retVal = CalendarHelper.MilisPerDay(); break; case TimePhasedDataType.TimePhaseUnit.Week: retVal = CalendarHelper.MilisPerWeek(); break; } return(retVal); }
/// <summary> /// Incrementals the group. /// </summary> /// <param name="phase">The phase.</param> /// <param name="groupUnit">The group unit.</param> /// <returns></returns> private TimePhasedDataType[] IncrementalGroup(TimePhasedDataType phase, TimePhasedDataType.TimePhaseUnit groupUnit) { List <TimePhasedDataType> retVal = new List <TimePhasedDataType>(); long intervalDuration = phase.Finish - phase.Start; long wholePartCount = intervalDuration / Unit2duration(groupUnit); long partialPart = intervalDuration - wholePartCount * Unit2duration(groupUnit); if (wholePartCount > 0) { for (int i = 0; i < wholePartCount; i++) { TimePhasedDataType newPhase = new TimePhasedDataType(); long start = phase.Start + i * Unit2duration(groupUnit); newPhase.Start = start; newPhase.Finish = start + Unit2duration(groupUnit); newPhase.Unit = groupUnit; newPhase.Value = (long)((double)Unit2duration(groupUnit) / intervalDuration * phase.Value); retVal.Add(newPhase); } } if (partialPart != 0 && groupUnit != _minGroupUnit) { TimePhasedDataType newPhase = new TimePhasedDataType(); newPhase.Start = phase.Finish - partialPart; newPhase.Finish = phase.Finish; newPhase.Value = (long)((double)partialPart / intervalDuration * phase.Value); retVal.AddRange(IncrementalGroup(newPhase, DecrementUnit(groupUnit))); } return(retVal.ToArray()); }
/// <summary> /// Duration2s the unit. /// </summary> /// <param name="duration">The duration.</param> /// <returns></returns> private static TimePhasedDataType.TimePhaseUnit Duration2Unit(long duration) { TimePhasedDataType.TimePhaseUnit retVal = TimePhasedDataType.TimePhaseUnit.Minute; if (duration / CalendarHelper.MilisPerYear() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Year; } else if (duration / CalendarHelper.MilisPerMonth() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Year; } else if (duration / CalendarHelper.MilisPerWeek() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Mounth; } else if (duration / CalendarHelper.MilisPerDay() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Week; } else if (duration / CalendarHelper.MilisPerHour() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Day; } else if (duration / CalendarHelper.MilisPerMinute() > 0) { retVal = TimePhasedDataType.TimePhaseUnit.Hours; } return(retVal); }
/// <summary> /// Initializes a new instance of the <see cref="TimePhaseDataGetter"/> class. /// </summary> public TimePhaseDataGetter(TimePhasedDataType.TimePhaseType type, TimePhasedDataType.TimePhaseUnit maxGroupUnit, TimePhasedDataType.TimePhaseUnit minGroupUnit, AssignmentBaseFunctor <double> functor) { _type = type; _functor = functor; _minGroupUnit = minGroupUnit; _maxGroupUnit = maxGroupUnit; _value = new List <TimePhasedDataType>(); }
/// <summary> /// Increments the unit. /// </summary> /// <param name="unit">The unit.</param> /// <returns></returns> private static TimePhasedDataType.TimePhaseUnit IncrementUnit(TimePhasedDataType.TimePhaseUnit unit) { return((TimePhasedDataType.TimePhaseUnit)((int)unit + 1)); }