1
0
mirror of https://github.com/chylex/Query.git synced 2025-05-22 16:34:06 +02:00
Query/AppConv/General/DecimalUnitConverterSimple.cs
2024-08-01 21:35:14 +02:00

47 lines
1.4 KiB
C#

using System;
namespace AppConv.General {
abstract class DecimalUnitConverterSimple<T> : DecimalUnitConverterBase<T> where T : struct {
// ReSharper disable once StaticMemberInGenericType
private static readonly Func<decimal, decimal> FuncNoChange = val => val;
private readonly NameMap UnitNames = new NameMap();
private readonly DecimalFuncMap MapFrom = new DecimalFuncMap();
private readonly DecimalFuncMap MapTo = new DecimalFuncMap();
private int invalidUnitObject = -1;
protected sealed override NameMap Names => UnitNames;
protected sealed override DecimalFuncMap ConvertFrom => MapFrom;
protected sealed override DecimalFuncMap ConvertTo => MapTo;
protected override int Precision => 3;
protected override bool CaseCheck => true;
protected void AddUnit(T unitObject, params string[] names) {
foreach (string name in names) {
UnitNames.Add(name, unitObject);
}
ConvertFrom.Add(unitObject, FuncNoChange);
ConvertTo.Add(unitObject, FuncNoChange);
}
protected void SetUnitFactor(T unitObject, decimal factor) {
ConvertFrom[unitObject] = val => val * factor;
ConvertTo[unitObject] = val => val / factor;
}
protected void SetInvalidUnitObject(T unitObject) {
invalidUnitObject = (int) (object) unitObject;
}
protected sealed override bool IsValueInvalid(T value) {
return (int) (object) value == invalidUnitObject;
}
}
}