Frequency
Represents a time value.
using AngleSharp.Extensions;
using System;
namespace AngleSharp.Css.Values
{
public struct Frequency : IEquatable<Frequency>, IComparable<Frequency>, IFormattable
{
public enum Unit
{
None,
Hz,
Khz
}
private readonly float _value;
private readonly Unit _unit;
public float Value => _value;
public Unit Type => _unit;
public string UnitString {
get {
switch (_unit) {
case Unit.Khz:
return UnitNames.Khz;
case Unit.Hz:
return UnitNames.Hz;
default:
return string.Empty;
}
}
}
public Frequency(float value, Unit unit)
{
_value = value;
_unit = unit;
}
public static explicit operator float(Frequency frequency)
{
return frequency.ToHertz();
}
public static bool TryParse(string s, out Frequency result)
{
float result2 = 0;
Unit unit = GetUnit(s.CssUnit(out result2));
if (unit != 0) {
result = new Frequency(result2, unit);
return true;
}
result = default(Frequency);
return false;
}
public static Unit GetUnit(string s)
{
switch (s) {
case "hz":
return Unit.Hz;
case "khz":
return Unit.Khz;
default:
return Unit.None;
}
}
public float ToHertz()
{
if (_unit != Unit.Khz)
return _value;
return _value * 1000;
}
public bool Equals(Frequency other)
{
if (_value == other._value)
return _unit == other._unit;
return false;
}
public int CompareTo(Frequency other)
{
return ToHertz().CompareTo(other.ToHertz());
}
public override bool Equals(object obj)
{
if (obj is Frequency)
return Equals((Frequency)obj);
return false;
}
public override int GetHashCode()
{
return _value.GetHashCode();
}
public override string ToString()
{
return _value.ToString() + UnitString;
}
public string ToString(string format, IFormatProvider formatProvider)
{
return _value.ToString(format, formatProvider) + UnitString;
}
}
}