Exemplo n.º 1
0
        private static DateTime AddInterval(DateTime val, DoubleR10 interval, DateTimeScaleUnit unit)
        {
            switch (unit)
            {
            case DateTimeScaleUnit.Years:
                return(val.AddYears((int)DoubleR10.Round(interval)));

            case DateTimeScaleUnit.Months:
                return(val.AddMonths((int)DoubleR10.Round(interval)));

            case DateTimeScaleUnit.Weeks:
                return(val.AddDays((double)((DoubleR10)7 * interval)));

            case DateTimeScaleUnit.Days:
                return(val.AddDays((double)interval));

            case DateTimeScaleUnit.Hours:
                return(val.AddHours((double)interval));

            case DateTimeScaleUnit.Minutes:
                return(val.AddMinutes((double)interval));

            case DateTimeScaleUnit.Seconds:
                return(val.AddSeconds((double)interval));

            case DateTimeScaleUnit.Milliseconds:
                return(val.AddMilliseconds((double)interval));

            default:
                throw new NotImplementedException();
            }
        }
Exemplo n.º 2
0
 internal void ShrinkByStep(NumericRangeInfo range, DoubleR10 step, bool useZeroRefPoint)
 {
     if (this.Minimum == 0 && this.Maximum == 0)
         this.Maximum = (DoubleR10)1;
     else if (this.Minimum < 0 && this.Maximum <= 0)
     {
         this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step);
         this.Minimum = this.Maximum.DecrementByStep(range.Minimum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Minimum = this.Minimum - step;
     }
     else if (this.Minimum >= 0 && this.Maximum > 0 || !useZeroRefPoint)
     {
         this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step);
         this.Maximum = this.Minimum.IncrementByStep(range.Maximum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Maximum = this.Maximum + step;
     }
     else
     {
         this.Minimum = (DoubleR10)0;
         this.Maximum = (DoubleR10)0;
         this.Minimum = this.Minimum.DecrementByStep(range.Minimum, step);
         if (this.Minimum == this.Maximum)
             this.Minimum = this.Minimum - step;
         this.Maximum = this.Maximum.IncrementByStep(range.Maximum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Maximum = this.Maximum + step;
     }
 }
Exemplo n.º 3
0
 private void FixDirection()
 {
     if (!(this.Minimum > this.Maximum))
         return;
     DoubleR10 doubleR10 = this.Minimum;
     this.Minimum = this.Maximum;
     this.Maximum = doubleR10;
 }
Exemplo n.º 4
0
 private void Load()
 {
     this.Sequence = (IList <DoubleR10>) new List <DoubleR10>();
     this.Minimum  = this._baseSequence.Minimum;
     this.Maximum  = this._baseSequence.Maximum;
     if (this.Interval < 1)
     {
         DoubleR10 doubleR10_1 = DoubleR10.NaN;
         foreach (DoubleR10 doubleR10_2 in this._baseSequence)
         {
             if (doubleR10_1 != DoubleR10.NaN)
             {
                 DoubleR10 doubleR10_3 = doubleR10_1 + this.IntervalOffset;
                 DoubleR10 doubleR10_4 = doubleR10_2;
                 DoubleR10 x2          = (doubleR10_4 - doubleR10_3) * this.Interval;
                 if (x2 != 0)
                 {
                     for (DoubleR10 doubleR10_5 = doubleR10_3; doubleR10_5 <= doubleR10_4; doubleR10_5 = doubleR10_5.Add(ref x2))
                     {
                         if (this.Sequence.Count == 0 || doubleR10_5 != doubleR10_1)
                         {
                             this.Sequence.Add(doubleR10_5);
                         }
                     }
                 }
             }
             doubleR10_1 = doubleR10_2;
         }
     }
     else
     {
         DoubleR10 interval = this.Interval;
         for (DoubleR10 doubleR10_1 = this.IntervalOffset; doubleR10_1 <= this._baseSequence.Count - 1; doubleR10_1 = doubleR10_1.Add(ref interval))
         {
             int index = (int)DoubleR10.Floor(doubleR10_1, 0);
             if (index < this._baseSequence.Count - 1)
             {
                 DoubleR10 doubleR10_2 = this._baseSequence[index];
                 DoubleR10 doubleR10_3 = this._baseSequence[index + 1];
                 DoubleR10 doubleR10_4 = doubleR10_3 - doubleR10_2;
                 if (doubleR10_4 == 0)
                 {
                     this.Sequence.Add(doubleR10_3);
                 }
                 else
                 {
                     this.Sequence.Add(doubleR10_2 + (doubleR10_1 - (DoubleR10)index) * doubleR10_4);
                 }
             }
             else
             {
                 this.Sequence.Add(this._baseSequence[this._baseSequence.Count - 1]);
             }
         }
     }
 }
Exemplo n.º 5
0
 public NumericRangeInfo(DoubleR10 minimum, DoubleR10 maximum)
 {
     this.HasDataRange = false;
     this.HasMin = true;
     this.HasMax = true;
     this.Minimum = minimum;
     this.Maximum = maximum;
     this.ForsedSingleStop = new DoubleR10?();
     this.FixDirection();
 }
Exemplo n.º 6
0
 public NumericRangeInfo(DoubleR10 minimum, DoubleR10 maximum)
 {
     this.HasDataRange = false;
     this.HasMin = true;
     this.HasMax = true;
     this.Minimum = minimum;
     this.Maximum = maximum;
     this.ForsedSingleStop = new DoubleR10?();
     this.FixDirection();
 }
Exemplo n.º 7
0
 private void IncludeZero()
 {
     if (this.HasMin && this.Minimum > 0 || this.HasMax && this.Maximum < 0)
         return;
     if (this.Minimum > 0)
         this.Minimum = (DoubleR10)0;
     if (!(this.Maximum < 0))
         return;
     this.Maximum = (DoubleR10)0;
 }
Exemplo n.º 8
0
 private void FixEmptySingleDataValue()
 {
     DoubleR10 doubleR10_1 = this.Maximum;
     doubleR10_1.Normalize();
     int num = 0;
     if (doubleR10_1.E >= 0 && doubleR10_1.Log10() < 4)
     {
         this.ForsedSingleStop = new DoubleR10?(doubleR10_1);
         num = 3;
     }
     DoubleR10 doubleR10_2 = DoubleR10.Pow10(Math.Max(doubleR10_1.E, doubleR10_1.Log10() - num)) / (DoubleR10)2;
     this.Minimum = doubleR10_1 + doubleR10_2;
     this.Maximum = doubleR10_1 - doubleR10_2;
 }
Exemplo n.º 9
0
        public static DateTimeSequence CalculateCenturies(Range <DateTime> range, int?interval, int?intervalOffset, int maxCount)
        {
            NumericRangeInfo range1 = new NumericRangeInfo((DoubleR10)range.Minimum.Year, (DoubleR10)range.Maximum.Year);
            int?   nullable1        = interval;
            double?interval1        = nullable1.HasValue ? new double?((double)nullable1.GetValueOrDefault()) : new double?();
            int?   nullable2        = intervalOffset;
            double?intervalOffset1  = nullable2.HasValue ? new double?((double)nullable2.GetValueOrDefault()) : new double?();
            int    maxCount1        = maxCount;
            int    minPower         = 2;

            DoubleR10[] steps = new DoubleR10[3]
            {
                (DoubleR10)1,
                (DoubleR10)2,
                (DoubleR10)5
            };
            int              num = 1;
            double           maxAllowedMargin = 1.0;
            NumericSequence  numericSequence  = NumericSequence.Calculate(range1, interval1, intervalOffset1, maxCount1, minPower, steps, num != 0, maxAllowedMargin);
            DateTimeSequence dateTimeSequence = new DateTimeSequence(DateTimeScaleUnit.Years);

            try
            {
                foreach (DoubleR10 doubleR10 in numericSequence)
                {
                    int year = (int)doubleR10;
                    if (year > 0)
                    {
                        dateTimeSequence.Add(new DateTime(year, 1, 1));
                    }
                }
            }
            catch (ArgumentOutOfRangeException ex)
            {
            }
            dateTimeSequence.Interval       = numericSequence.Interval;
            dateTimeSequence.IntervalOffset = numericSequence.IntervalOffset;
            return(dateTimeSequence);
        }
Exemplo n.º 10
0
 public override void ExtendToCover(DoubleR10 min, DoubleR10 max)
 {
     this._baseSequence.ExtendToCover(min, max);
     this.Load();
 }
Exemplo n.º 11
0
 private void IncludeZero()
 {
     if (this.HasMin && this.Minimum > 0 || this.HasMax && this.Maximum < 0)
         return;
     if (this.Minimum > 0)
         this.Minimum = (DoubleR10)0;
     if (!(this.Maximum < 0))
         return;
     this.Maximum = (DoubleR10)0;
 }
Exemplo n.º 12
0
 public DateTimeSequence(DateTimeScaleUnit unit)
 {
     this._unit     = unit;
     this._interval = (DoubleR10)1;
 }
Exemplo n.º 13
0
 private void FixIfEmpty(double? interval, bool includeZero)
 {
     if (this.Minimum == this.Maximum)
     {
         if (this.HasMin && this.HasMax)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Maximum < 0)
             {
                 this.Maximum = 0;
             }
             else if (this.Minimum > 0)
             {
                 this.Minimum = 0;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
         else if (this.HasMin)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Minimum > 0)
             {
                 this.Maximum = this.Minimum * 2;
             }
             else if (this.Minimum < 0)
             {
                 this.Maximum = 0;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
         else if (this.HasMax)
         {
             if (interval.HasValue)
             {
                 this.Minimum = this.Maximum - interval.Value;
             }
             else if (this.Maximum > 0)
             {
                 this.Minimum = 0;
             }
             else if (this.Maximum < 0)
             {
                 this.Minimum = this.Maximum * 2;
             }
             else
             {
                 this.Minimum = -10.0;
             }
         }
         else if (this.HasDataRange)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Maximum < 0)
             {
                 if (includeZero || this.Maximum.IsSpecial())
                 {
                     this.Maximum = 0;
                 }
                 else
                 {
                     this.FixEmptySingleDataValue();
                 }
             }
             else if (this.Minimum > 0)
             {
                 if (includeZero || this.Minimum.IsSpecial())
                 {
                     this.Minimum = 0;
                 }
                 else
                 {
                     this.FixEmptySingleDataValue();
                 }
             }
             else
             {
                 this.Minimum = 0;
                 this.Maximum = 10.0;
                 this.HasDataRange = false;
             }
         }
         else
         {
             this.Minimum = 0;
             if (interval.HasValue)
             {
                 this.Maximum = interval.Value;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
     }
 }
Exemplo n.º 14
0
 private void FixIfEmpty(double? interval, bool includeZero)
 {
     if (this.Minimum == this.Maximum)
     {
         if (this.HasMin && this.HasMax)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Maximum < 0)
             {
                 this.Maximum = 0;
             }
             else if (this.Minimum > 0)
             {
                 this.Minimum = 0;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
         else if (this.HasMin)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Minimum > 0)
             {
                 this.Maximum = this.Minimum * 2;
             }
             else if (this.Minimum < 0)
             {
                 this.Maximum = 0;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
         else if (this.HasMax)
         {
             if (interval.HasValue)
             {
                 this.Minimum = this.Maximum - interval.Value;
             }
             else if (this.Maximum > 0)
             {
                 this.Minimum = 0;
             }
             else if (this.Maximum < 0)
             {
                 this.Minimum = this.Maximum * 2;
             }
             else
             {
                 this.Minimum = -10.0;
             }
         }
         else if (this.HasDataRange)
         {
             if (interval.HasValue)
             {
                 this.Maximum = this.Minimum + interval.Value;
             }
             else if (this.Maximum < 0)
             {
                 if (includeZero || this.Maximum.IsSpecial())
                 {
                     this.Maximum = 0;
                 }
                 else
                 {
                     this.FixEmptySingleDataValue();
                 }
             }
             else if (this.Minimum > 0)
             {
                 if (includeZero || this.Minimum.IsSpecial())
                 {
                     this.Minimum = 0;
                 }
                 else
                 {
                     this.FixEmptySingleDataValue();
                 }
             }
             else
             {
                 this.Minimum = 0;
                 this.Maximum = 10.0;
                 this.HasDataRange = false;
             }
         }
         else
         {
             this.Minimum = 0;
             if (interval.HasValue)
             {
                 this.Maximum = interval.Value;
             }
             else
             {
                 this.Maximum = 10.0;
             }
         }
     }
 }
Exemplo n.º 15
0
 private void FixEmptySingleDataValue()
 {
     DoubleR10 doubleR10_1 = this.Maximum;
     doubleR10_1.Normalize();
     int num = 0;
     if (doubleR10_1.E >= 0 && doubleR10_1.Log10() < 4)
     {
         this.ForsedSingleStop = new DoubleR10?(doubleR10_1);
         num = 3;
     }
     DoubleR10 doubleR10_2 = DoubleR10.Pow10(Math.Max(doubleR10_1.E, doubleR10_1.Log10() - num)) / (DoubleR10)2;
     this.Minimum = doubleR10_1 + doubleR10_2;
     this.Maximum = doubleR10_1 - doubleR10_2;
 }
Exemplo n.º 16
0
 private void FixDirection()
 {
     if (!(this.Minimum > this.Maximum))
         return;
     DoubleR10 doubleR10 = this.Minimum;
     this.Minimum = this.Maximum;
     this.Maximum = doubleR10;
 }
Exemplo n.º 17
0
 internal void ShrinkByStepQuick(NumericRangeInfo range, DoubleR10 step)
 {
     this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step);
     this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step);
 }
Exemplo n.º 18
0
 internal void ShrinkByStep(NumericRangeInfo range, DoubleR10 step, bool useZeroRefPoint)
 {
     if (this.Minimum == 0 && this.Maximum == 0)
         this.Maximum = (DoubleR10)1;
     else if (this.Minimum < 0 && this.Maximum <= 0)
     {
         this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step);
         this.Minimum = this.Maximum.DecrementByStep(range.Minimum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Minimum = this.Minimum - step;
     }
     else if (this.Minimum >= 0 && this.Maximum > 0 || !useZeroRefPoint)
     {
         this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step);
         this.Maximum = this.Minimum.IncrementByStep(range.Maximum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Maximum = this.Maximum + step;
     }
     else
     {
         this.Minimum = (DoubleR10)0;
         this.Maximum = (DoubleR10)0;
         this.Minimum = this.Minimum.DecrementByStep(range.Minimum, step);
         if (this.Minimum == this.Maximum)
             this.Minimum = this.Minimum - step;
         this.Maximum = this.Maximum.IncrementByStep(range.Maximum, step);
         if (!(this.Minimum == this.Maximum))
             return;
         this.Maximum = this.Maximum + step;
     }
 }
Exemplo n.º 19
0
 internal void ShrinkByStepQuick(NumericRangeInfo range, DoubleR10 step)
 {
     this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step);
     this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step);
 }