1
0
mirror of https://github.com/chylex/Query.git synced 2025-05-29 10:34:03 +02:00
Query/AppConv/Units/Temperature.cs
2024-08-01 21:35:14 +02:00

91 lines
2.6 KiB
C#

using System.Globalization;
using System.Text.RegularExpressions;
using AppConv.General;
using Base.Utils;
namespace AppConv.Units {
class Temperature : DecimalUnitConverterBase<Temperature.Units> {
internal enum Units {
Invalid = 0,
Celsius,
Kelvin,
Fahrenheit,
Rankine,
Delisle,
Newton,
Reaumur,
Romer
}
private static readonly NameMap UnitNames = new NameMap(21) {
{ "C", Units.Celsius },
{ "Celsius", Units.Celsius },
{ "K", Units.Kelvin },
{ "Kelvin", Units.Kelvin },
{ "F", Units.Fahrenheit },
{ "Fahrenheit", Units.Fahrenheit },
{ "R", Units.Rankine },
{ "Ra", Units.Rankine },
{ "Rankine", Units.Rankine },
{ "De", Units.Delisle },
{ "Delisle", Units.Delisle },
{ "N", Units.Newton },
{ "Newton", Units.Newton },
{ "Re", Units.Reaumur },
{ "Ré", Units.Reaumur },
{ "Reaumur", Units.Reaumur },
{ "Réaumur", Units.Reaumur },
{ "Ro", Units.Romer },
{ "Rø", Units.Romer },
{ "Romer", Units.Romer },
{ "Rømer", Units.Romer }
};
private static readonly DecimalFuncMap FromCelsius = new DecimalFuncMap(8) {
{ Units.Celsius, val => val },
{ Units.Kelvin, val => val + 273.15M },
{ Units.Fahrenheit, val => val * 1.8M + 32M },
{ Units.Rankine, val => (val + 273.15M) * 1.8M },
{ Units.Delisle, val => (100M - val) * 1.5M },
{ Units.Newton, val => val * 0.33M },
{ Units.Reaumur, val => val * 0.8M },
{ Units.Romer, val => val * 0.525M + 7.5M }
};
private static readonly DecimalFuncMap ToCelsius = new DecimalFuncMap(8) {
{ Units.Celsius, val => val },
{ Units.Kelvin, val => val - 273.15M },
{ Units.Fahrenheit, val => (val - 32M) * 5M / 9M },
{ Units.Rankine, val => (val - 491.67M) * 5M / 9M },
{ Units.Delisle, val => 100M - val * 2M / 3M },
{ Units.Newton, val => val * 100M / 33M },
{ Units.Reaumur, val => val * 1.25M },
{ Units.Romer, val => (val - 7.5M) * 40M / 21M }
};
private static readonly Regex RegexCleanup = new Regex("deg(?:rees?)?|°", RegexUtils.Text);
protected override NameMap Names => UnitNames;
protected override DecimalFuncMap ConvertFrom => FromCelsius;
protected override DecimalFuncMap ConvertTo => ToCelsius;
protected override int Precision => 2;
protected override NumberStyles NumberStyle => NumberStyles.Float;
protected override string ProcessSrc(string src) {
return RegexCleanup.Replace(src, "");
}
protected override string ProcessDst(string dst) {
return RegexCleanup.Replace(dst, "");
}
protected override bool IsValueInvalid(Units value) {
return value == Units.Invalid;
}
}
}