51 lines
2.2 KiB
C#
51 lines
2.2 KiB
C#
|
using System.Diagnostics.CodeAnalysis;
|
||
|
using InnovEnergy.Lib.Utils;
|
||
|
|
||
|
// ReSharper disable once CheckNamespace
|
||
|
namespace InnovEnergy.Lib.Units;
|
||
|
|
||
|
[SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator")]
|
||
|
public readonly struct Operators
|
||
|
{
|
||
|
public static String Unit => throw new NotImplementedException();
|
||
|
public static String Symbol => throw new NotImplementedException();
|
||
|
|
||
|
#if !HAS_CONSTRUCTOR
|
||
|
public Operators(Double value) => Value = value;
|
||
|
#endif
|
||
|
|
||
|
public Double Value { get; }
|
||
|
public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit;
|
||
|
|
||
|
// scalar multiplication
|
||
|
|
||
|
public static Operators operator *(Double scalar, Operators t) => new Operators(scalar * t.Value);
|
||
|
public static Operators operator *(Operators t, Double scalar) => new Operators(scalar * t.Value);
|
||
|
public static Operators operator /(Operators t, Double scalar) => new Operators(t.Value / scalar);
|
||
|
|
||
|
// addition
|
||
|
|
||
|
public static Operators operator +(Operators left, Operators right) => new Operators(left.Value + right.Value);
|
||
|
public static Operators operator -(Operators left, Operators right) => new Operators(left.Value - right.Value);
|
||
|
public static Operators operator -(Operators t) => new Operators(-t.Value);
|
||
|
|
||
|
// compare
|
||
|
|
||
|
public static Boolean operator ==(Operators left, Operators right) => left.Value == right.Value;
|
||
|
public static Boolean operator !=(Operators left, Operators right) => left.Value != right.Value;
|
||
|
public static Boolean operator > (Operators left, Operators right) => left.Value > right.Value;
|
||
|
public static Boolean operator < (Operators left, Operators right) => left.Value < right.Value;
|
||
|
public static Boolean operator >=(Operators left, Operators right) => left.Value >= right.Value;
|
||
|
public static Boolean operator <=(Operators left, Operators right) => left.Value <= right.Value;
|
||
|
|
||
|
// conversion
|
||
|
|
||
|
public static implicit operator Operators(Double d) => new Operators(d);
|
||
|
|
||
|
// equality
|
||
|
|
||
|
public Boolean Equals(Operators other) => Value == other.Value;
|
||
|
public override Boolean Equals(Object? obj) => obj is Operators other && Equals(other);
|
||
|
public override Int32 GetHashCode() => Value.GetHashCode();
|
||
|
|
||
|
}
|