PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/Main/src/DynamicDataDisplay/Charts/Axes/TimeSpan/TimeSpanToDoubleConversion.cs

#
C# | 44 lines | 36 code | 8 blank | 0 comment | 0 complexity | 79aecbb8b679a31274ecc9e13dc7c249 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Microsoft.Research.DynamicDataDisplay.Charts
  6. {
  7. internal sealed class TimeSpanToDoubleConversion
  8. {
  9. public TimeSpanToDoubleConversion(TimeSpan minSpan, TimeSpan maxSpan)
  10. : this(0, minSpan, 1, maxSpan)
  11. { }
  12. public TimeSpanToDoubleConversion(double min, TimeSpan minSpan, double max, TimeSpan maxSpan)
  13. {
  14. this.min = min;
  15. this.length = max - min;
  16. this.ticksMin = minSpan.Ticks;
  17. this.ticksLength = maxSpan.Ticks - ticksMin;
  18. }
  19. private double min;
  20. private double length;
  21. private long ticksMin;
  22. private long ticksLength;
  23. internal TimeSpan FromDouble(double d)
  24. {
  25. double ratio = (d - min) / length;
  26. long ticks = (long)(ticksMin + ticksLength * ratio);
  27. ticks = MathHelper.Clamp(ticks, TimeSpan.MinValue.Ticks, TimeSpan.MaxValue.Ticks);
  28. return new TimeSpan(ticks);
  29. }
  30. internal double ToDouble(TimeSpan span)
  31. {
  32. double ratio = (span.Ticks - ticksMin) / (double)ticksLength;
  33. return min + ratio * length;
  34. }
  35. }
  36. }