WrapAsList debug

This commit is contained in:
melekhin
2026-06-10 16:05:42 +07:00
parent e1fffb1e94
commit dfdee6450a
7 changed files with 1641 additions and 1184 deletions

View File

@@ -205,6 +205,165 @@ public readonly partial record struct {typeNameZ} : IMensuraUnit<{typeNameZ}>, I
[JsonIgnore, IgnoreDataMember] public bool IsNegativeInfinity => double.IsNegativeInfinity(_Value);
public static {typeNameZ} Zero { get; } = new(0d);
public static {typeNameZ} Min { get; } = new(double.MinValue);
public static {typeNameZ} Max { get; } = new(double.MaxValue);
public static {typeNameZ} NegativeInfinity { get; } = new(double.NegativeInfinity);
public static {typeNameZ} PositiveInfinity { get; } = new(double.PositiveInfinity);
public static bool operator ==({typeName}? T1, {typeName}? T2) => T1.Protected() == T2.Protected();
public static bool operator !=({typeName}? T1, {typeName}? T2) => T1.Protected() != T2.Protected();
public static bool operator <({typeName}? T1, {typeName}? T2) => T1.Protected() < T2.Protected();
public static bool operator <=({typeName}? T1, {typeName}? T2) => T1.Protected() <= T2.Protected();
public static bool operator >({typeName}? T1, {typeName}? T2) => T1.Protected() > T2.Protected();
public static bool operator >=({typeName}? T1, {typeName}? T2) => T1.Protected() >= T2.Protected();
public static {typeName} operator +({typeName} T2) => new(+T2._Value);
public static {typeName} operator +({typeName} T1, {typeName} T2) => new(T1._Value + T2._Value);
public static {typeName} operator -({typeName} T2) => new(-T2._Value);
public static {typeName} operator -({typeName} T1, {typeName} T2) => new(T1._Value - T2._Value);
// double
public static {typeName} operator *({typeName} T1, double T2) => new(T1._Value * T2);
public static {typeName} operator *({typeName} T1, double? T2) => T1 * (T2 ?? 0d);
public static {typeName} operator *(double T1, {typeName} T2) => new(T1 * T2._Value);
public static {typeName} operator *(double? T1, {typeName} T2) => (T1 ?? 0d) * T2;
public static {typeName} operator /({typeName} T1, double T2) => new(T1._Value / T2);
public static {typeName} operator /({typeName} T1, double? T2) => T1 / (T2 ?? 0d);
public static double operator /({typeName} T1, {typeName} T2) => T1._Value / T2._Value;
// sbyte
public static {typeName} operator *({typeName} T1, sbyte T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, sbyte? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(sbyte T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(sbyte? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, sbyte T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, sbyte? T2) => T1 / T2.ToDouble();
// short
public static {typeName} operator *({typeName} T1, short T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, short? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(short T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(short? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, short T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, short? T2) => T1 / T2.ToDouble();
// int
public static {typeName} operator *({typeName} T1, int T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, int? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(int T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(int? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, int T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, int? T2) => T1 / T2.ToDouble();
// long
public static {typeName} operator *({typeName} T1, long T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, long? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(long T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(long? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, long T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, long? T2) => T1 / T2.ToDouble();
// byte
public static {typeName} operator *({typeName} T1, byte T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, byte? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(byte T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(byte? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, byte T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, byte? T2) => T1 / T2.ToDouble();
// ushort
public static {typeName} operator *({typeName} T1, ushort T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, ushort? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(ushort T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(ushort? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, ushort T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, ushort? T2) => T1 / T2.ToDouble();
// uint
public static {typeName} operator *({typeName} T1, uint T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, uint? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(uint T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(uint? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, uint T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, uint? T2) => T1 / T2.ToDouble();
// ulong
public static {typeName} operator *({typeName} T1, ulong T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, ulong? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(ulong T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(ulong? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, ulong T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, ulong? T2) => T1 / T2.ToDouble();
// nint
public static {typeName} operator *({typeName} T1, nint T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, nint? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(nint T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(nint? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, nint T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, nint? T2) => T1 / T2.ToDouble();
// nuint
public static {typeName} operator *({typeName} T1, nuint T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, nuint? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(nuint T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(nuint? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, nuint T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, nuint? T2) => T1 / T2.ToDouble();
// Half
public static {typeName} operator *({typeName} T1, Half T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, Half? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(Half T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(Half? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, Half T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, Half? T2) => T1 / T2.ToDouble();
// float
public static {typeName} operator *({typeName} T1, float T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, float? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(float T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(float? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, float T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, float? T2) => T1 / T2.ToDouble();
// decimal
public static {typeName} operator *({typeName} T1, decimal T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, decimal? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(decimal T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(decimal? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, decimal T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, decimal? T2) => T1 / T2.ToDouble();
#if NET7_0_OR_GREATER
// Int128
public static {typeName} operator *({typeName} T1, Int128 T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, Int128? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(Int128 T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(Int128? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, Int128 T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, Int128? T2) => T1 / T2.ToDouble();
// UInt128
public static {typeName} operator *({typeName} T1, UInt128 T2) => T1 * T2.ToDouble();
public static {typeName} operator *({typeName} T1, UInt128? T2) => T1 * T2.ToDouble();
public static {typeName} operator *(UInt128 T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator *(UInt128? T1, {typeName} T2) => T1.ToDouble() * T2;
public static {typeName} operator /({typeName} T1, UInt128 T2) => T1 / T2.ToDouble();
public static {typeName} operator /({typeName} T1, UInt128? T2) => T1 / T2.ToDouble();
#endif
public static {typeNameA} operator *({typeNameZ} left, {typeNameB} right) => new(left._Value * right._Value);
public static {typeNameA} operator *({typeNameZ}? left, {typeNameB} right) => new(left.Protected() * right._Value);
public static {typeNameA} operator *({typeNameZ} left, {typeNameB}? right) => new(left._Value * right.Protected());
@@ -339,11 +498,272 @@ public readonly partial record struct {typeNameZ} : IMensuraUnit<{typeNameZ}>, I
dividend.HasValue ? units / dividend.Value : (units is null ? null! : units.Select(u => new {typeNameB}(0d)));
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameB}?> operator /({typeNameZ}? dividend, IEnumerable<{typeNameA}?> units) =>
dividend.HasValue ? units / dividend.Value : (units is null ? null! : units.Select(u => u is null ? ({typeNameB}?)null : new {typeNameB}(0d)));
public static {typeName}[] operator +({typeName}[] T1, {typeName} T2) => T1.Plus(T2._Value);
public static {typeName}?[] operator +({typeName}?[] T1, {typeName} T2) => T1.Plus(T2._Value);
public static {typeName}[] operator +({typeName} T1, {typeName}[] T2) => T1._Value.Plus(T2);
public static {typeName}?[] operator +({typeName} T1, {typeName}?[] T2) => T1._Value.Plus(T2);
public static {typeName}[] operator +({typeName}[] T1, {typeName}? T2) => T1.Plus(T2.Protected());
public static {typeName}?[] operator +({typeName}?[] T1, {typeName}? T2) => T1.Plus(T2.Protected());
public static {typeName}[] operator +({typeName}? T1, {typeName}[] T2) => T1.Protected().Plus(T2);
public static {typeName}?[] operator +({typeName}? T1, {typeName}?[] T2) => T1.Protected().Plus(T2);
public static {typeName}[] operator -({typeName}[] T1, {typeName} T2) => T1.Minus(T2._Value);
public static {typeName}?[] operator -({typeName}?[] T1, {typeName} T2) => T1.Minus(T2._Value);
public static {typeName}[] operator -({typeName} T1, {typeName}[] T2) => T1._Value.Minus(T2);
public static {typeName}?[] operator -({typeName} T1, {typeName}?[] T2) => T1._Value.Minus(T2);
public static {typeName}[] operator -({typeName}[] T1, {typeName}? T2) => T1.Minus(T2.Protected());
public static {typeName}?[] operator -({typeName}?[] T1, {typeName}? T2) => T1.Minus(T2.Protected());
public static {typeName}[] operator -({typeName}? T1, {typeName}[] T2) => T1.Protected().Minus(T2);
public static {typeName}?[] operator -({typeName}? T1, {typeName}?[] T2) => T1.Protected().Minus(T2);
public static double[] operator /({typeName} T1, {typeName}[] T2) => T1.Div(T2);
public static double?[] operator /({typeName} T1, {typeName}?[] T2) => T1.Div(T2);
public static double[] operator /({typeName}[] T1, {typeName} T2) => T1.Div(T2);
public static double?[] operator /({typeName}?[] T1, {typeName} T2) => T1.Div(T2);
public static double[] operator /({typeName}? T1, {typeName}[] T2) => T1.ProtectedU().Div(T2);
public static double?[] operator /({typeName}? T1, {typeName}?[] T2) => T1.ProtectedU().Div(T2);
public static double[] operator /({typeName}[] T1, {typeName}? T2) => T1.Div(T2.ProtectedU());
public static double?[] operator /({typeName}?[] T1, {typeName}? T2) => T1.Div(T2.ProtectedU());
// double
public static {typeName}[] operator *({typeName} T1, double[] T2) => T1.Mul(T2);
public static {typeName}?[] operator *({typeName} T1, double?[] T2) => T1.Mul(T2);
public static {typeName}[] operator *({typeName}? T1, double[] T2) => T1.ProtectedU().Mul(T2);
public static {typeName}?[] operator *({typeName}? T1, double?[] T2) => T1.ProtectedU().Mul(T2);
public static {typeName}[] operator *(double[] T1, {typeName} T2) => T1.Mul(T2);
public static {typeName}?[] operator *(double?[] T1, {typeName} T2) => T1.Mul(T2);
public static {typeName}[] operator *(double[] T1, {typeName}? T2) => T1.Mul(T2.ProtectedU());
public static {typeName}?[] operator *(double?[] T1, {typeName}? T2) => T1.Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, double[] T2) => T1.Div(T2);
public static {typeName}?[] operator /({typeName} T1, double?[] T2) => T1.Div(T2);
public static {typeName}[] operator /({typeName}? T1, double[] T2) => T1.ProtectedU().Div(T2);
public static {typeName}?[] operator /({typeName}? T1, double?[] T2) => T1.ProtectedU().Div(T2);
// sbyte
public static {typeName}[] operator *({typeName} T1, sbyte[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, sbyte?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, sbyte[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, sbyte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(sbyte[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(sbyte?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(sbyte[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(sbyte?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, sbyte[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, sbyte?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, sbyte[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, sbyte?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// short
public static {typeName}[] operator *({typeName} T1, short[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, short?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, short[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, short?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(short[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(short?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(short[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(short?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, short[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, short?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, short[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, short?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// int
public static {typeName}[] operator *({typeName} T1, int[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, int?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, int[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, int?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(int[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(int?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(int[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(int?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, int[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, int?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, int[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, int?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// long
public static {typeName}[] operator *({typeName} T1, long[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, long?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, long[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, long?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(long[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(long?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(long[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(long?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, long[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, long?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, long[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, long?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// byte
public static {typeName}[] operator *({typeName} T1, byte[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, byte?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, byte[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, byte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(byte[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(byte?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(byte[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(byte?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, byte[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, byte?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, byte[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, byte?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// ushort
public static {typeName}[] operator *({typeName} T1, ushort[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, ushort?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, ushort[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, ushort?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(ushort[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(ushort?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(ushort[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(ushort?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, ushort[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, ushort?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, ushort[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, ushort?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// uint
public static {typeName}[] operator *({typeName} T1, uint[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, uint?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, uint[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, uint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(uint[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(uint?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(uint[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(uint?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, uint[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, uint?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, uint[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, uint?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// ulong
public static {typeName}[] operator *({typeName} T1, ulong[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, ulong?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, ulong[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, ulong?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(ulong[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(ulong?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(ulong[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(ulong?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, ulong[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, ulong?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, ulong[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, ulong?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// nint
public static {typeName}[] operator *({typeName} T1, nint[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, nint?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, nint[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, nint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(nint[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(nint?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(nint[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(nint?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, nint[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, nint?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, nint[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, nint?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// nuint
public static {typeName}[] operator *({typeName} T1, nuint[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, nuint?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, nuint[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, nuint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(nuint[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(nuint?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(nuint[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(nuint?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, nuint[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, nuint?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, nuint[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, nuint?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// Half
public static {typeName}[] operator *({typeName} T1, Half[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, Half?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, Half[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, Half?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(Half[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(Half?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(Half[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(Half?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, Half[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, Half?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, Half[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, Half?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// float
public static {typeName}[] operator *({typeName} T1, float[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, float?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, float[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, float?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(float[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(float?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(float[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(float?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, float[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, float?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, float[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, float?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// decimal
public static {typeName}[] operator *({typeName} T1, decimal[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, decimal?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, decimal[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, decimal?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(decimal[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(decimal?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(decimal[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(decimal?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, decimal[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, decimal?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, decimal[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, decimal?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
#if NET7_0_OR_GREATER
// Int128
public static {typeName}[] operator *({typeName} T1, Int128[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, Int128?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, Int128[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, Int128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(Int128[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(Int128?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(Int128[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(Int128?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, Int128[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, Int128?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, Int128[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, Int128?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
// UInt128
public static {typeName}[] operator *({typeName} T1, UInt128[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName} T1, UInt128?[] T2) => T1.Mul(T2.ToDouble());
public static {typeName}[] operator *({typeName}? T1, UInt128[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}?[] operator *({typeName}? T1, UInt128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble());
public static {typeName}[] operator *(UInt128[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}?[] operator *(UInt128?[] T1, {typeName} T2) => T1.ToDouble().Mul(T2);
public static {typeName}[] operator *(UInt128[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}?[] operator *(UInt128?[] T1, {typeName}? T2) => T1.ToDouble().Mul(T2.ProtectedU());
public static {typeName}[] operator /({typeName} T1, UInt128[] T2) => T1.Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName} T1, UInt128?[] T2) => T1.Div(T2.ToDouble());
public static {typeName}[] operator /({typeName}? T1, UInt128[] T2) => T1.ProtectedU().Div(T2.ToDouble());
public static {typeName}?[] operator /({typeName}? T1, UInt128?[] T2) => T1.ProtectedU().Div(T2.ToDouble());
#endif
}
public static class {typeNameZ}Extensions
{
internal static double Protected(this {typeNameZ}? unit) => unit is null ? 0d : unit.Value._Value;
internal static {typeNameZ} ProtectedU(this {typeNameZ}? unit) => unit is null ? {typeNameZ}.Zero : unit.Value;
internal static double ToDouble(this {typeNameB}? unit) => unit?._Value ?? 0d;
@@ -416,71 +836,6 @@ public static class {typeNameZ}Extensions
// === ReadOnlySpan
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this ReadOnlySpan<{typeNameZ}> units,
double subtrahend, Span<{typeNameZ}> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this ReadOnlySpan<{typeNameZ}?> units,
double subtrahend, Span<{typeNameZ}?> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
ReadOnlySpan<{typeNameZ}> units, Span<{typeNameZ}> destination) => minuend.Minus<{typeNameZ}>(units, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
ReadOnlySpan<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => minuend.Minus<{typeNameZ}>(units, destination);
// === Array ===
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static {typeNameZ}[] Minus(
this {typeNameZ}[] units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}?[] Minus(
this {typeNameZ}?[] units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}[] Minus(
this double minuend, {typeNameZ}[] units) => minuend.Minus<{typeNameZ}>(units);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}?[] Minus(
this double minuend, {typeNameZ}?[] units) => minuend.Minus<{typeNameZ}>(units);
// === List<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}> Minus(
this List<{typeNameZ}> units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}?> Minus(
this List<{typeNameZ}?> units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}> Minus(
this double minuend, List<{typeNameZ}> units) => minuend.Minus<{typeNameZ}>(units);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}?> Minus(
this double minuend, List<{typeNameZ}?> units) => minuend.Minus<{typeNameZ}>(units);
// === ICollection<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this ICollection<{typeNameZ}> units,
double subtrahend, Span<{typeNameZ}> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this ICollection<{typeNameZ}?> units,
double subtrahend, Span<{typeNameZ}?> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
ICollection<{typeNameZ}> units, Span<{typeNameZ}> destination) => minuend.Minus<{typeNameZ}>(units, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
ICollection<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => minuend.Minus<{typeNameZ}>(units, destination);
// === IReadOnlyCollection<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Minus(this IReadOnlyCollection<{typeNameZ}> units,
double subtrahend, Span<{typeNameZ}> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Minus(this IReadOnlyCollection<{typeNameZ}?> units,
double subtrahend, Span<{typeNameZ}?> destination) => units.Minus<{typeNameZ}>(subtrahend, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
IReadOnlyCollection<{typeNameZ}> units, Span<{typeNameZ}> destination) => minuend.Minus<{typeNameZ}>(units, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Minus(this double minuend,
IReadOnlyCollection<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => minuend.Minus<{typeNameZ}>(units, destination);
// === IEnumerable<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}> Minus(
this IEnumerable<{typeNameZ}> units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}?> Minus(
this IEnumerable<{typeNameZ}?> units, double subtrahend) => units.Minus<{typeNameZ}>(subtrahend);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}> Minus(
this double minuend, IEnumerable<{typeNameZ}> units) => minuend.Minus<{typeNameZ}>(units);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}?> Minus(
this double minuend, IEnumerable<{typeNameZ}?> units) => minuend.Minus<{typeNameZ}>(units);
// === ReadOnlySpan
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this ReadOnlySpan<{typeNameZ}> units,
double multiplicator, Span<{typeNameZ}> destination) => units.Mul<{typeNameZ}>(multiplicator, destination);
@@ -546,137 +901,72 @@ public static class {typeNameZ}Extensions
// === ReadOnlySpan
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this ReadOnlySpan<{typeNameZ}> units,
double summand, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this ReadOnlySpan<{typeNameZ}?> units,
double summand, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
ReadOnlySpan<{typeNameZ}> units, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
ReadOnlySpan<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
// === Array ===
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static {typeNameZ}[] Plus(
this {typeNameZ}[] units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}?[] Plus(
this {typeNameZ}?[] units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}[] Plus(
this double summand, {typeNameZ}[] units) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static {typeNameZ}?[] Plus(
this double summand, {typeNameZ}?[] units) => units.Plus<{typeNameZ}>(summand);
// === List<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}> Plus(
this List<{typeNameZ}> units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}?> Plus(
this List<{typeNameZ}?> units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}> Plus(
this double summand, List<{typeNameZ}> units) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static List<{typeNameZ}?> Plus(
this double summand, List<{typeNameZ}?> units) => units.Plus<{typeNameZ}>(summand);
// === ICollection<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this ICollection<{typeNameZ}> units,
double summand, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this ICollection<{typeNameZ}?> units,
double summand, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
ICollection<{typeNameZ}> units, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
ICollection<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
// === IReadOnlyCollection<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Plus(this IReadOnlyCollection<{typeNameZ}> units,
double summand, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Plus(this IReadOnlyCollection<{typeNameZ}?> units,
double summand, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
IReadOnlyCollection<{typeNameZ}> units, Span<{typeNameZ}> destination) => units.Plus<{typeNameZ}>(summand, destination);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Plus(this double summand,
IReadOnlyCollection<{typeNameZ}?> units, Span<{typeNameZ}?> destination) => units.Plus<{typeNameZ}>(summand, destination);
// === IEnumerable<T> ===
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}> Plus(
this IEnumerable<{typeNameZ}> units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}?> Plus(
this IEnumerable<{typeNameZ}?> units, double summand) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}> Plus(
this double summand, IEnumerable<{typeNameZ}> units) => units.Plus<{typeNameZ}>(summand);
[MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable<{typeNameZ}?> Plus(
this double summand, IEnumerable<{typeNameZ}?> units) => units.Plus<{typeNameZ}>(summand);
// Sum Average Max Min (не nullable) ==========================================
// Sum Avg Max Min (не nullable) ==========================================
// === ReadOnlySpan === SIMD
public static {typeNameZ} Sum(this ReadOnlySpan<{typeNameZ}> units) => AggregateUnitExtensions.Sum(units);
public static {typeNameZ} Average(this ReadOnlySpan<{typeNameZ}> units) => AggregateUnitExtensions.Average(units);
public static {typeNameZ} Avg(this ReadOnlySpan<{typeNameZ}> units) => AggregateUnitExtensions.Avg(units);
public static {typeNameZ} Max(this ReadOnlySpan<{typeNameZ}> units) => AggregateUnitExtensions.Max(units);
public static {typeNameZ} Min(this ReadOnlySpan<{typeNameZ}> units) => AggregateUnitExtensions.Min(units);
// === List<T> ===
public static {typeNameZ} Sum(this List<{typeNameZ}> list) => AggregateUnitExtensions.Sum(list);
public static {typeNameZ} Average(this List<{typeNameZ}> list) => AggregateUnitExtensions.Average(list);
public static {typeNameZ} Avg(this List<{typeNameZ}> list) => AggregateUnitExtensions.Avg(list);
public static {typeNameZ} Max(this List<{typeNameZ}> list) => AggregateUnitExtensions.Max(list);
public static {typeNameZ} Min(this List<{typeNameZ}> list) => AggregateUnitExtensions.Min(list);
// === ICollection<T> ===
public static {typeNameZ} Sum(this ICollection<{typeNameZ}> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this ICollection<{typeNameZ}> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this ICollection<{typeNameZ}> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this ICollection<{typeNameZ}> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this ICollection<{typeNameZ}> collection) => AggregateUnitExtensions.Min(collection);
// === IReadOnlyCollection<T> ===
public static {typeNameZ} Sum(this IReadOnlyCollection<{typeNameZ}> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this IReadOnlyCollection<{typeNameZ}> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this IReadOnlyCollection<{typeNameZ}> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this IReadOnlyCollection<{typeNameZ}> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this IReadOnlyCollection<{typeNameZ}> collection) => AggregateUnitExtensions.Min(collection);
// === IEnumerable<T> ===
public static {typeNameZ} Sum(this IEnumerable<{typeNameZ}> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this IEnumerable<{typeNameZ}> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this IEnumerable<{typeNameZ}> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this IEnumerable<{typeNameZ}> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this IEnumerable<{typeNameZ}> collection) => AggregateUnitExtensions.Min(collection);
// Sum Average Max Min (nullable) ==========================================
// Sum Avg Max Min (nullable) ==========================================
// === ReadOnlySpan ===
public static {typeNameZ} Sum(this ReadOnlySpan<{typeNameZ}?> units) => AggregateUnitExtensions.Sum(units);
public static {typeNameZ} Average(this ReadOnlySpan<{typeNameZ}?> units) => AggregateUnitExtensions.Average(units);
public static {typeNameZ} Avg(this ReadOnlySpan<{typeNameZ}?> units) => AggregateUnitExtensions.Avg(units);
public static {typeNameZ} Max(this ReadOnlySpan<{typeNameZ}?> units) => AggregateUnitExtensions.Max(units);
public static {typeNameZ} Min(this ReadOnlySpan<{typeNameZ}?> units) => AggregateUnitExtensions.Min(units);
// === List<T> ===
public static {typeNameZ} Sum(this List<{typeNameZ}?> list) => AggregateUnitExtensions.Sum(list);
public static {typeNameZ} Average(this List<{typeNameZ}?> list) => AggregateUnitExtensions.Average(list);
public static {typeNameZ} Avg(this List<{typeNameZ}?> list) => AggregateUnitExtensions.Avg(list);
public static {typeNameZ} Max(this List<{typeNameZ}?> list) => AggregateUnitExtensions.Max(list);
public static {typeNameZ} Min(this List<{typeNameZ}?> list) => AggregateUnitExtensions.Min(list);
// === ICollection<T> ===
public static {typeNameZ} Sum(this ICollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this ICollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this ICollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this ICollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this ICollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Min(collection);
// === IReadOnlyCollection<T> ===
public static {typeNameZ} Sum(this IReadOnlyCollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this IReadOnlyCollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this IReadOnlyCollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this IReadOnlyCollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this IReadOnlyCollection<{typeNameZ}?> collection) => AggregateUnitExtensions.Min(collection);
// === IEnumerable<T> ===
public static {typeNameZ} Sum(this IEnumerable<{typeNameZ}?> collection) => AggregateUnitExtensions.Sum(collection);
public static {typeNameZ} Average(this IEnumerable<{typeNameZ}?> collection) => AggregateUnitExtensions.Average(collection);
public static {typeNameZ} Avg(this IEnumerable<{typeNameZ}?> collection) => AggregateUnitExtensions.Avg(collection);
public static {typeNameZ} Max(this IEnumerable<{typeNameZ}?> collection) => AggregateUnitExtensions.Max(collection);
public static {typeNameZ} Min(this IEnumerable<{typeNameZ}?> collection) => AggregateUnitExtensions.Min(collection);
}