From 7c0f89ebbbfbff824868a0747e718a867f82ab77 Mon Sep 17 00:00:00 2001 From: Fantom TM Date: Sat, 13 Jun 2026 20:25:29 +0700 Subject: [PATCH] EFcoreExtension --- .../ComplexUnitGenerator.cs | 18 + QWERTYkez.Mensura.Generator/UnitGenerator.cs | 18 + .../CollectionsPlusExtensionsTest.cs | 20 +- .../QWERTYkez.Mensura.Tests.csproj | 5 +- QWERTYkez.Mensura.Tests/TestEntity.cs | 98 + .../Extensions/EFCoreExtension.cs | 20 + QWERTYkez.Mensura/Mimics.cs | 2 +- QWERTYkez.Mensura/QWERTYkez.Mensura.csproj | 12 +- QWERTYkez.Mensura/Units/XXXXXXXX.Gen.cs | 2188 ++++++++--------- QWERTYkez.Mensura/Units/XXXXXXXX.Ref.cs | 120 +- 10 files changed, 1332 insertions(+), 1169 deletions(-) create mode 100644 QWERTYkez.Mensura.Tests/TestEntity.cs create mode 100644 QWERTYkez.Mensura/Extensions/EFCoreExtension.cs diff --git a/QWERTYkez.Mensura.Generator/ComplexUnitGenerator.cs b/QWERTYkez.Mensura.Generator/ComplexUnitGenerator.cs index 64f9dc2..2795425 100644 --- a/QWERTYkez.Mensura.Generator/ComplexUnitGenerator.cs +++ b/QWERTYkez.Mensura.Generator/ComplexUnitGenerator.cs @@ -81,6 +81,24 @@ namespace QWERTYkez.Mensura sb.AppendLine("}"); spc.AddSource(".ComplexUnits.MensuraBinder.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8)); + + + sb = new StringBuilder(); + sb.AppendLine("using Microsoft.EntityFrameworkCore;"); + sb.AppendLine("namespace QWERTYkez.Mensura.Extensions;"); + sb.AppendLine("public static partial class EFCoreExtension"); + sb.AppendLine("{"); + sb.AppendLine(" [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]"); + sb.AppendLine(" internal static void AddGeneratedComplexConverters(ModelConfigurationBuilder configurationBuilder)"); + sb.AppendLine(" {"); + foreach (var structInfo in structs) + { + sb.AppendLine($" configurationBuilder.Properties<{structInfo.TypeName}>().HaveConversion>();"); + } + sb.AppendLine(" }"); + sb.AppendLine("}"); + + spc.AddSource(".ComplexUnits.EFCoreExtension.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8)); } }); } diff --git a/QWERTYkez.Mensura.Generator/UnitGenerator.cs b/QWERTYkez.Mensura.Generator/UnitGenerator.cs index b00be52..36a3d1a 100644 --- a/QWERTYkez.Mensura.Generator/UnitGenerator.cs +++ b/QWERTYkez.Mensura.Generator/UnitGenerator.cs @@ -67,6 +67,24 @@ namespace QWERTYkez.Mensura sb.AppendLine("}"); spc.AddSource(".Units.MensuraBinder.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8)); + + + sb = new StringBuilder(); + sb.AppendLine("using Microsoft.EntityFrameworkCore;"); + sb.AppendLine("namespace QWERTYkez.Mensura.Extensions;"); + sb.AppendLine("public static partial class EFCoreExtension"); + sb.AppendLine("{"); + sb.AppendLine(" [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]"); + sb.AppendLine(" internal static void AddGeneratedConverters(ModelConfigurationBuilder configurationBuilder)"); + sb.AppendLine(" {"); + foreach (var structInfo in structs) + { + sb.AppendLine($" configurationBuilder.Properties<{structInfo.TypeName}>().HaveConversion>();"); + } + sb.AppendLine(" }"); + sb.AppendLine("}"); + + spc.AddSource(".Units.EFCoreExtension.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8)); } }); } diff --git a/QWERTYkez.Mensura.Tests/CollectionsPlusExtensionsTest.cs b/QWERTYkez.Mensura.Tests/CollectionsPlusExtensionsTest.cs index 3154c08..d8f204b 100644 --- a/QWERTYkez.Mensura.Tests/CollectionsPlusExtensionsTest.cs +++ b/QWERTYkez.Mensura.Tests/CollectionsPlusExtensionsTest.cs @@ -7,16 +7,16 @@ private static readonly double scalarDouble = 500.0; // прибавляемое значение в мм // Коллекции единиц - private static readonly Length[] unitsArray = new[] { Length.Meter, Length._MilliMeter }; - private static readonly Length?[] nullableUnitsArray = new Length?[] { Length.Meter, null, Length._MilliMeter }; - private static readonly List unitsList = new List { Length.Meter, Length._MilliMeter }; - private static readonly List nullableUnitsList = new List { Length.Meter, null, Length._MilliMeter }; + private static readonly Length[] unitsArray = [Length.Meter, Length._MilliMeter]; + private static readonly Length?[] nullableUnitsArray = [Length.Meter, null, Length._MilliMeter]; + private static readonly List unitsList = [Length.Meter, Length._MilliMeter]; + private static readonly List nullableUnitsList = [Length.Meter, null, Length._MilliMeter]; // Коллекции double - private static readonly double[] doubleArray = new double[] { 200.0, 300.0 }; - private static readonly double?[] nullableDoubleArray = new double?[] { 200.0, null, 300.0 }; - private static readonly List doubleList = new List { 200.0, 300.0 }; - private static readonly List nullableDoubleList = new List { 200.0, null, 300.0 }; + private static readonly double[] doubleArray = [200.0, 300.0]; + private static readonly double?[] nullableDoubleArray = [200.0, null, 300.0]; + private static readonly List doubleList = [200.0, 300.0]; + private static readonly List nullableDoubleList = [200.0, null, 300.0]; // ====================== 1. T[] + double ====================== [Fact] @@ -303,7 +303,7 @@ [Fact] public void Plus_NullArray_ReturnsNull() { - Length[] nullArray = null; + Length[] nullArray = null!; var result = nullArray.Plus(5.0); Assert.Null(result); } @@ -311,7 +311,7 @@ [Fact] public void Plus_NullList_ReturnsNull() { - List nullList = null; + List nullList = null!; var result = nullList.Plus(5.0); Assert.Null(result); } diff --git a/QWERTYkez.Mensura.Tests/QWERTYkez.Mensura.Tests.csproj b/QWERTYkez.Mensura.Tests/QWERTYkez.Mensura.Tests.csproj index ed87a95..830c2c6 100644 --- a/QWERTYkez.Mensura.Tests/QWERTYkez.Mensura.Tests.csproj +++ b/QWERTYkez.Mensura.Tests/QWERTYkez.Mensura.Tests.csproj @@ -20,6 +20,9 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + + + @@ -31,8 +34,6 @@ - - diff --git a/QWERTYkez.Mensura.Tests/TestEntity.cs b/QWERTYkez.Mensura.Tests/TestEntity.cs new file mode 100644 index 0000000..5e96996 --- /dev/null +++ b/QWERTYkez.Mensura.Tests/TestEntity.cs @@ -0,0 +1,98 @@ +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; + +namespace QWERTYkez.Mensura.Tests +{ + public class TestEntity1 + { + public int Id { get; set; } + public Length Length { get; set; } + } + + public class TestEntity2 + { + public int Id { get; set; } + public double Length { get; set; } + } + + public class SharedDbContext(DbContextOptions options) : DbContext(options) + { + public DbSet Entities1 { get; set; } + public DbSet Entities2 { get; set; } + + protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) + { + configurationBuilder.UseMensuraUnits(); + } + } + + public class IdentityConversionTest : IDisposable + { + private readonly SqliteConnection _connection; + + public IdentityConversionTest() + { + _connection = new SqliteConnection("Filename=:memory:"); + _connection.Open(); + } + + public void Dispose() + { + _connection?.Dispose(); + GC.SuppressFinalize(this); + } + + [Fact] + public void Length_And_Double_Are_Stored_Identically() + { + // 1. Сохраняем Length → читаем как double + double savedDoubleFromLength; + using (var context = new SharedDbContext(new DbContextOptionsBuilder().UseSqlite(_connection).Options)) + { + context.Database.EnsureCreated(); + var expectedLength = Length.Meter; // 1000 мм + context.Entities1.Add(new TestEntity1 { Length = expectedLength }); + context.SaveChanges(); + + using var cmd = context.Database.GetDbConnection().CreateCommand(); + cmd.CommandText = "SELECT Length FROM Entities1"; + savedDoubleFromLength = (double)cmd.ExecuteScalar()!; + } + + // 2. Сохраняем double → читаем как Length + double savedDoubleFromDouble = 1234.5; + using (var context = new SharedDbContext(new DbContextOptionsBuilder().UseSqlite(_connection).Options)) + { + context.Database.EnsureCreated(); + context.Entities2.Add(new TestEntity2 { Length = savedDoubleFromDouble }); + context.SaveChanges(); + + using var cmd = context.Database.GetDbConnection().CreateCommand(); + cmd.CommandText = "SELECT Length FROM Entities2"; + savedDoubleFromDouble = (double)cmd.ExecuteScalar()!; // должно быть 1234.5 + } + + // 3. Проверяем, что сырые значения сохранены корректно + Assert.Equal(1000.0, savedDoubleFromLength); + Assert.Equal(1234.5, savedDoubleFromDouble); + + // 4. Проверяем обратимость: читаем из Entities1 как TestEntity2 + using (var context = new SharedDbContext(new DbContextOptionsBuilder().UseSqlite(_connection).Options)) + { + var fromLengthTable = context.Entities2 + .FromSqlRaw("SELECT Id, Length FROM Entities1") + .First(); + Assert.Equal(1000.0, fromLengthTable.Length); + } + + // 5. Проверяем обратимость: читаем из Entities2 как TestEntity1 + using (var context = new SharedDbContext(new DbContextOptionsBuilder().UseSqlite(_connection).Options)) + { + var fromDoubleTable = context.Entities1 + .FromSqlRaw("SELECT Id, Length FROM Entities2") + .First(); + Assert.Equal(1234.5, (double)fromDoubleTable.Length); + } + } + } +} \ No newline at end of file diff --git a/QWERTYkez.Mensura/Extensions/EFCoreExtension.cs b/QWERTYkez.Mensura/Extensions/EFCoreExtension.cs new file mode 100644 index 0000000..1bf7c60 --- /dev/null +++ b/QWERTYkez.Mensura/Extensions/EFCoreExtension.cs @@ -0,0 +1,20 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace QWERTYkez.Mensura.Extensions; + +public static partial class EFCoreExtension +{ + /// + /// Регистрирует ValueConverter для всех типов, реализующих IMensuraUnit. + /// + public static void UseMensuraUnits(this ModelConfigurationBuilder configurationBuilder) + { + AddGeneratedConverters(configurationBuilder); + AddGeneratedComplexConverters(configurationBuilder); + } + + internal class MensuraUnitConverter() + : ValueConverter(unit => unit.ToDouble(), value => value.ToUnit()) + where U : struct, IMensuraUnit, IEquatable { } +} \ No newline at end of file diff --git a/QWERTYkez.Mensura/Mimics.cs b/QWERTYkez.Mensura/Mimics.cs index 24356b9..ec61415 100644 --- a/QWERTYkez.Mensura/Mimics.cs +++ b/QWERTYkez.Mensura/Mimics.cs @@ -9,7 +9,7 @@ internal class ListMimic } [StructLayout(LayoutKind.Explicit, Size = 16)] -public struct NullableDoubleMimic +internal struct NullableDoubleMimic { [FieldOffset(0)] public bool HasValue; [FieldOffset(8)] public double Value; diff --git a/QWERTYkez.Mensura/QWERTYkez.Mensura.csproj b/QWERTYkez.Mensura/QWERTYkez.Mensura.csproj index 92c6aac..2809c1f 100644 --- a/QWERTYkez.Mensura/QWERTYkez.Mensura.csproj +++ b/QWERTYkez.Mensura/QWERTYkez.Mensura.csproj @@ -10,10 +10,18 @@ 1701;1702;IDE1006 + + + + + - - + + + + + \ No newline at end of file diff --git a/QWERTYkez.Mensura/Units/XXXXXXXX.Gen.cs b/QWERTYkez.Mensura/Units/XXXXXXXX.Gen.cs index c2587d4..796a758 100644 --- a/QWERTYkez.Mensura/Units/XXXXXXXX.Gen.cs +++ b/QWERTYkez.Mensura/Units/XXXXXXXX.Gen.cs @@ -1,1095 +1,1095 @@ -namespace QWERTYkez.Mensura.Units; - -[JsonConverter(typeof(UnitJsonConverter))] -public readonly partial record struct XXXXXXXX : IMensuraUnit, IEquatable, IMensuraUnit -{ - [JsonInclude, DataMember, JsonPropertyName("v"), Obsolete] // для JSON / EF на случай сбоев, если пробелма с _Value - internal double Value { get => _Value; init => _Value = value; } - internal readonly double _Value; - internal XXXXXXXX(double value) => _Value = value; - - public override int GetHashCode() => _Value.GetHashCode(); - public int CompareTo(XXXXXXXX? other) => _Value.CompareTo(other is null ? 0d : other.Value._Value); - public int CompareTo(XXXXXXXX other) => _Value.CompareTo(other._Value); - - public bool Equals(XXXXXXXX? other) => _Value.Equals(other?._Value); - - - public static explicit operator XXXXXXXX(double val) => Unsafe.As(ref val); - public static explicit operator double(XXXXXXXX unit) => unit._Value; - - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public XXXXXXXX Abs() => new(Math.Abs(_Value)); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal R Pow2_Internal() where R : struct, IMensuraUnit, IEquatable => (_Value * _Value).ToUnit(); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal R Sqrt_Internal() where R : struct, IMensuraUnit, IEquatable => Math.Sqrt(_Value).ToUnit(); - - - - [JsonIgnore, IgnoreDataMember] public bool IsPositive => _Value >= 0; - [JsonIgnore, IgnoreDataMember] public bool IsGreaterThanZero => _Value > 0; - [JsonIgnore, IgnoreDataMember] public bool IsNegative => double.IsNegative(_Value); - [JsonIgnore, IgnoreDataMember] public bool IsZero => _Value == 0; - [JsonIgnore, IgnoreDataMember] public bool IsNaN => double.IsNaN(_Value); - [JsonIgnore, IgnoreDataMember] public bool IsFinite => double.IsFinite(_Value); - [JsonIgnore, IgnoreDataMember] public bool IsInfinity => double.IsInfinity(_Value); - [JsonIgnore, IgnoreDataMember] public bool IsPositiveInfinity => double.IsPositiveInfinity(_Value); - [JsonIgnore, IgnoreDataMember] public bool IsNegativeInfinity => double.IsNegativeInfinity(_Value); - - - public static XXXXXXXX Zero { get; } = new(0d); - public static XXXXXXXX Min { get; } = new(double.MinValue); - public static XXXXXXXX Max { get; } = new(double.MaxValue); - public static XXXXXXXX NegativeInfinity { get; } = new(double.NegativeInfinity); - public static XXXXXXXX PositiveInfinity { get; } = new(double.PositiveInfinity); - - public static bool operator ==(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() == T2.Protected(); - public static bool operator !=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() != T2.Protected(); - - public static bool operator <(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() < T2.Protected(); - public static bool operator <=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() <= T2.Protected(); - public static bool operator >(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() > T2.Protected(); - public static bool operator >=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() >= T2.Protected(); - - - public static XXXXXXXX operator +(XXXXXXXX T2) => new(+T2._Value); - public static XXXXXXXX operator +(XXXXXXXX T1, XXXXXXXX T2) => new(T1._Value + T2._Value); - public static XXXXXXXX operator -(XXXXXXXX T2) => new(-T2._Value); - public static XXXXXXXX operator -(XXXXXXXX T1, XXXXXXXX T2) => new(T1._Value - T2._Value); - - - // double - public static XXXXXXXX operator *(XXXXXXXX T1, double T2) => new(T1._Value * T2); - public static XXXXXXXX operator *(XXXXXXXX T1, double? T2) => T1 * (T2 ?? 0d); - public static XXXXXXXX operator *(double T1, XXXXXXXX T2) => new(T1 * T2._Value); - public static XXXXXXXX operator *(double? T1, XXXXXXXX T2) => (T1 ?? 0d) * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, double T2) => new(T1._Value / T2); - public static XXXXXXXX operator /(XXXXXXXX T1, double? T2) => T1 / (T2 ?? 0d); - public static double operator /(XXXXXXXX T1, XXXXXXXX T2) => T1._Value / T2._Value; - - // sbyte - public static XXXXXXXX operator *(XXXXXXXX T1, sbyte T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, sbyte? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(sbyte T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(sbyte? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, sbyte T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, sbyte? T2) => T1 / T2.ToDouble(); - - // short - public static XXXXXXXX operator *(XXXXXXXX T1, short T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, short? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(short T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(short? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, short T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, short? T2) => T1 / T2.ToDouble(); - - // int - public static XXXXXXXX operator *(XXXXXXXX T1, int T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, int? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(int T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(int? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, int T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, int? T2) => T1 / T2.ToDouble(); - - // long - public static XXXXXXXX operator *(XXXXXXXX T1, long T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, long? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(long T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(long? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, long T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, long? T2) => T1 / T2.ToDouble(); - - // byte - public static XXXXXXXX operator *(XXXXXXXX T1, byte T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, byte? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(byte T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(byte? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, byte T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, byte? T2) => T1 / T2.ToDouble(); - - // ushort - public static XXXXXXXX operator *(XXXXXXXX T1, ushort T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, ushort? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(ushort T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(ushort? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, ushort T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, ushort? T2) => T1 / T2.ToDouble(); - - // uint - public static XXXXXXXX operator *(XXXXXXXX T1, uint T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, uint? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(uint T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(uint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, uint T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, uint? T2) => T1 / T2.ToDouble(); - - // ulong - public static XXXXXXXX operator *(XXXXXXXX T1, ulong T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, ulong? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(ulong T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(ulong? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, ulong T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, ulong? T2) => T1 / T2.ToDouble(); - - // nint - public static XXXXXXXX operator *(XXXXXXXX T1, nint T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, nint? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(nint T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(nint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, nint T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, nint? T2) => T1 / T2.ToDouble(); - - // nuint - public static XXXXXXXX operator *(XXXXXXXX T1, nuint T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, nuint? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(nuint T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(nuint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, nuint T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, nuint? T2) => T1 / T2.ToDouble(); - - // float - public static XXXXXXXX operator *(XXXXXXXX T1, float T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, float? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(float T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(float? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, float T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, float? T2) => T1 / T2.ToDouble(); - - // decimal - public static XXXXXXXX operator *(XXXXXXXX T1, decimal T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, decimal? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(decimal T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(decimal? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, decimal T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, decimal? T2) => T1 / T2.ToDouble(); - -#if NET7_0_OR_GREATER - // Int128 - public static XXXXXXXX operator *(XXXXXXXX T1, Int128 T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, Int128? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(Int128 T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(Int128? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, Int128 T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, Int128? T2) => T1 / T2.ToDouble(); - - // UInt128 - public static XXXXXXXX operator *(XXXXXXXX T1, UInt128 T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(XXXXXXXX T1, UInt128? T2) => T1 * T2.ToDouble(); - public static XXXXXXXX operator *(UInt128 T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator *(UInt128? T1, XXXXXXXX T2) => T1.ToDouble() * T2; - public static XXXXXXXX operator /(XXXXXXXX T1, UInt128 T2) => T1 / T2.ToDouble(); - public static XXXXXXXX operator /(XXXXXXXX T1, UInt128? T2) => T1 / T2.ToDouble(); -#endif - - - - - - - - public static XXXXXXXX[] operator +(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static XXXXXXXX?[] operator +(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static XXXXXXXX[] operator +(XXXXXXXX T1, XXXXXXXX[] T2) => T1._Value.Plus(T2); - public static XXXXXXXX?[] operator +(XXXXXXXX T1, XXXXXXXX?[] T2) => T1._Value.Plus(T2); - public static XXXXXXXX[] operator +(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static XXXXXXXX?[] operator +(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static XXXXXXXX[] operator +(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.Protected().Plus(T2); - public static XXXXXXXX?[] operator +(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.Protected().Plus(T2); - - public static XXXXXXXX[] operator -(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static XXXXXXXX?[] operator -(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static XXXXXXXX[] operator -(XXXXXXXX T1, XXXXXXXX[] T2) => T1._Value.Minus(T2); - public static XXXXXXXX?[] operator -(XXXXXXXX T1, XXXXXXXX?[] T2) => T1._Value.Minus(T2); - public static XXXXXXXX[] operator -(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static XXXXXXXX?[] operator -(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static XXXXXXXX[] operator -(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.Protected().Minus(T2); - public static XXXXXXXX?[] operator -(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.Protected().Minus(T2); - - public static double[] operator /(XXXXXXXX T1, XXXXXXXX[] T2) => T1.Div(T2); - public static double?[] operator /(XXXXXXXX T1, XXXXXXXX?[] T2) => T1.Div(T2); - public static double[] operator /(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Div(T2); - public static double?[] operator /(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Div(T2); - public static double[] operator /(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.ProtectedU().Div(T2); - public static double?[] operator /(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.ProtectedU().Div(T2); - public static double[] operator /(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - public static double?[] operator /(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - - - // double - public static XXXXXXXX[] operator *(XXXXXXXX T1, double[] T2) => T1.Mul(T2); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, double?[] T2) => T1.Mul(T2); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, double[] T2) => T1.ProtectedU().Mul(T2); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, double?[] T2) => T1.ProtectedU().Mul(T2); - public static XXXXXXXX[] operator *(double[] T1, XXXXXXXX T2) => T1.Mul(T2); - public static XXXXXXXX?[] operator *(double?[] T1, XXXXXXXX T2) => T1.Mul(T2); - public static XXXXXXXX[] operator *(double[] T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(double?[] T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, double[] T2) => T1.Div(T2); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, double?[] T2) => T1.Div(T2); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, double[] T2) => T1.ProtectedU().Div(T2); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, double?[] T2) => T1.ProtectedU().Div(T2); - - // sbyte - public static XXXXXXXX[] operator *(XXXXXXXX T1, sbyte[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, sbyte?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, sbyte[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, sbyte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(sbyte[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(sbyte?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(sbyte[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(sbyte?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, sbyte[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, sbyte?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, sbyte[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, sbyte?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // short - public static XXXXXXXX[] operator *(XXXXXXXX T1, short[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, short?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, short[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, short?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(short[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(short?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(short[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(short?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, short[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, short?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, short[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, short?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // int - public static XXXXXXXX[] operator *(XXXXXXXX T1, int[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, int?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, int[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, int?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(int[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(int?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(int[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(int?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, int[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, int?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, int[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, int?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // long - public static XXXXXXXX[] operator *(XXXXXXXX T1, long[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, long?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, long[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, long?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(long[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(long?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(long[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(long?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, long[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, long?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, long[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, long?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // byte - public static XXXXXXXX[] operator *(XXXXXXXX T1, byte[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, byte?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, byte[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, byte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(byte[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(byte?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(byte[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(byte?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, byte[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, byte?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, byte[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, byte?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ushort - public static XXXXXXXX[] operator *(XXXXXXXX T1, ushort[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, ushort?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, ushort[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, ushort?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(ushort[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(ushort?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(ushort[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(ushort?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, ushort[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, ushort?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, ushort[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, ushort?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // uint - public static XXXXXXXX[] operator *(XXXXXXXX T1, uint[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, uint?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, uint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, uint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(uint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(uint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(uint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(uint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, uint[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, uint?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, uint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, uint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ulong - public static XXXXXXXX[] operator *(XXXXXXXX T1, ulong[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, ulong?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, ulong[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, ulong?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(ulong[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(ulong?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(ulong[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(ulong?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, ulong[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, ulong?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, ulong[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, ulong?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nint - public static XXXXXXXX[] operator *(XXXXXXXX T1, nint[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, nint?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, nint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, nint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(nint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(nint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(nint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(nint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, nint[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, nint?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, nint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, nint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nuint - public static XXXXXXXX[] operator *(XXXXXXXX T1, nuint[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, nuint?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, nuint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, nuint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(nuint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(nuint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(nuint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(nuint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, nuint[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, nuint?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, nuint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, nuint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // float - public static XXXXXXXX[] operator *(XXXXXXXX T1, float[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, float?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, float[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, float?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(float[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(float?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(float[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(float?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, float[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, float?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, float[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, float?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // decimal - public static XXXXXXXX[] operator *(XXXXXXXX T1, decimal[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, decimal?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, decimal[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, decimal?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(decimal[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(decimal?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(decimal[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(decimal?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, decimal[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, decimal?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, decimal[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, decimal?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - -#if NET7_0_OR_GREATER - // Int128 - public static XXXXXXXX[] operator *(XXXXXXXX T1, Int128[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, Int128?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, Int128[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, Int128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(Int128[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(Int128?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(Int128[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(Int128?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, Int128[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, Int128?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, Int128[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, Int128?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // UInt128 - public static XXXXXXXX[] operator *(XXXXXXXX T1, UInt128[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX T1, UInt128?[] T2) => T1.Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(XXXXXXXX? T1, UInt128[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX?[] operator *(XXXXXXXX? T1, UInt128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static XXXXXXXX[] operator *(UInt128[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX?[] operator *(UInt128?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static XXXXXXXX[] operator *(UInt128[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX?[] operator *(UInt128?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static XXXXXXXX[] operator /(XXXXXXXX T1, UInt128[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX T1, UInt128?[] T2) => T1.Div(T2.ToDouble()); - public static XXXXXXXX[] operator /(XXXXXXXX? T1, UInt128[] T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static XXXXXXXX?[] operator /(XXXXXXXX? T1, UInt128?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); -#endif - - - - - - - - public static List operator +(List T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static List operator +(List T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static List operator +(XXXXXXXX T1, List T2) => T1._Value.Plus(T2); - public static List operator +(XXXXXXXX T1, List T2) => T1._Value.Plus(T2); - public static List operator +(List T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static List operator +(List T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static List operator +(XXXXXXXX? T1, List T2) => T1.Protected().Plus(T2); - public static List operator +(XXXXXXXX? T1, List T2) => T1.Protected().Plus(T2); - - public static List operator -(List T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static List operator -(List T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static List operator -(XXXXXXXX T1, List T2) => T1._Value.Minus(T2); - public static List operator -(XXXXXXXX T1, List T2) => T1._Value.Minus(T2); - public static List operator -(List T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static List operator -(List T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static List operator -(XXXXXXXX? T1, List T2) => T1.Protected().Minus(T2); - public static List operator -(XXXXXXXX? T1, List T2) => T1.Protected().Minus(T2); - - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); - public static List operator /(List T1, XXXXXXXX T2) => T1.Div(T2); - public static List operator /(List T1, XXXXXXXX T2) => T1.Div(T2); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); - public static List operator /(List T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - public static List operator /(List T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - - - // double - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); - - // sbyte - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // short - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // int - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // long - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // byte - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ushort - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // uint - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ulong - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nint - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nuint - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // float - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // decimal - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - -#if NET7_0_OR_GREATER - // Int128 - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // UInt128 - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); -#endif - - - - - - - - public static IEnumerable operator +(IEnumerable T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static IEnumerable operator +(IEnumerable T1, XXXXXXXX T2) => T1.Plus(T2._Value); - public static IEnumerable operator +(XXXXXXXX T1, IEnumerable T2) => T1._Value.Plus(T2); - public static IEnumerable operator +(XXXXXXXX T1, IEnumerable T2) => T1._Value.Plus(T2); - public static IEnumerable operator +(IEnumerable T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static IEnumerable operator +(IEnumerable T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); - public static IEnumerable operator +(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Plus(T2); - public static IEnumerable operator +(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Plus(T2); - - public static IEnumerable operator -(IEnumerable T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static IEnumerable operator -(IEnumerable T1, XXXXXXXX T2) => T1.Minus(T2._Value); - public static IEnumerable operator -(XXXXXXXX T1, IEnumerable T2) => T1._Value.Minus(T2); - public static IEnumerable operator -(XXXXXXXX T1, IEnumerable T2) => T1._Value.Minus(T2); - public static IEnumerable operator -(IEnumerable T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static IEnumerable operator -(IEnumerable T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); - public static IEnumerable operator -(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Minus(T2); - public static IEnumerable operator -(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Minus(T2); - - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); - public static IEnumerable operator /(IEnumerable T1, XXXXXXXX T2) => T1.Div(T2); - public static IEnumerable operator /(IEnumerable T1, XXXXXXXX T2) => T1.Div(T2); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); - public static IEnumerable operator /(IEnumerable T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - public static IEnumerable operator /(IEnumerable T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); - - - // double - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); - - // sbyte - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // short - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // int - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // long - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // byte - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ushort - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // uint - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // ulong - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nint - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // nuint - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // float - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // decimal - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - -#if NET7_0_OR_GREATER - // Int128 - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - - // UInt128 - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); - public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); -#endif -} - -public static class XXXXXXXXExtensions -{ - // === ReadOnlySpan - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this ReadOnlySpan units, - double divisor, Span destination) => units.Div(divisor, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this ReadOnlySpan units, - double divisor, Span destination) => units.Div(divisor, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, - ReadOnlySpan units, Span destination) => dividend.Div(units, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, - ReadOnlySpan units, Span destination) => dividend.Div(units, destination); - - // === Array === - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static XXXXXXXX[] Div( - this XXXXXXXX[] units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Div( - this XXXXXXXX?[] units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX[] Div( - this double dividend, XXXXXXXX[] units) => dividend.Div(units); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Div( - this double dividend, XXXXXXXX?[] units) => dividend.Div(units); - - // === List === - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( - this List units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( - this List units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( - this double dividend, List units) => dividend.Div(units); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( - this double dividend, List units) => dividend.Div(units); - - // === IReadOnlyCollection === - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Div(this IReadOnlyCollection units, - double divisor, Span destination) => units.Div(divisor, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Div(this IReadOnlyCollection units, - double divisor, Span destination) => units.Div(divisor, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, - IReadOnlyCollection units, Span destination) => dividend.Div(units, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, - IReadOnlyCollection units, Span destination) => dividend.Div(units, destination); - - // === IEnumerable === - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( - this IEnumerable units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( - this IEnumerable units, double divisor) => units.Div(divisor); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( - this double dividend, IEnumerable units) => dividend.Div(units); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( - this double dividend, IEnumerable units) => dividend.Div(units); - - - - - - - // === ReadOnlySpan - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this ReadOnlySpan units, - double multiplicator, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this ReadOnlySpan units, - double multiplicator, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, - ReadOnlySpan units, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, - ReadOnlySpan units, Span destination) => units.Mul(multiplicator, destination); - - // === Array === - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static XXXXXXXX[] Mul( - this XXXXXXXX[] units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Mul( - this XXXXXXXX?[] units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX[] Mul( - this double multiplicator, XXXXXXXX[] units) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Mul( - this double multiplicator, XXXXXXXX?[] units) => units.Mul(multiplicator); - - // === List === - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( - this List units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( - this List units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( - this double multiplicator, List units) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( - this double multiplicator, List units) => units.Mul(multiplicator); - - // === IReadOnlyCollection === - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Mul(this IReadOnlyCollection units, - double multiplicator, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Mul(this IReadOnlyCollection units, - double multiplicator, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, - IReadOnlyCollection units, Span destination) => units.Mul(multiplicator, destination); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, - IReadOnlyCollection units, Span destination) => units.Mul(multiplicator, destination); - - // === IEnumerable === - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( - this IEnumerable units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( - this IEnumerable units, double multiplicator) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( - this double multiplicator, IEnumerable units) => units.Mul(multiplicator); - [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( - this double multiplicator, IEnumerable units) => units.Mul(multiplicator); - - - - - - - // Sum Avg Max Min (не nullable) ========================================== - - - // === ReadOnlySpan === SIMD - public static XXXXXXXX Sum(this ReadOnlySpan units) => AggregateUnitExtensions.Sum(units); - public static XXXXXXXX Avg(this ReadOnlySpan units) => AggregateUnitExtensions.Avg(units); - public static XXXXXXXX Max(this ReadOnlySpan units) => AggregateUnitExtensions.Max(units); - public static XXXXXXXX Min(this ReadOnlySpan units) => AggregateUnitExtensions.Min(units); - - // === List === - public static XXXXXXXX Sum(this List list) => AggregateUnitExtensions.Sum(list); - public static XXXXXXXX Avg(this List list) => AggregateUnitExtensions.Avg(list); - public static XXXXXXXX Max(this List list) => AggregateUnitExtensions.Max(list); - public static XXXXXXXX Min(this List list) => AggregateUnitExtensions.Min(list); - - // === IReadOnlyCollection === - public static XXXXXXXX Sum(this IReadOnlyCollection collection) => AggregateUnitExtensions.Sum(collection); - public static XXXXXXXX Avg(this IReadOnlyCollection collection) => AggregateUnitExtensions.Avg(collection); - public static XXXXXXXX Max(this IReadOnlyCollection collection) => AggregateUnitExtensions.Max(collection); - public static XXXXXXXX Min(this IReadOnlyCollection collection) => AggregateUnitExtensions.Min(collection); - - - // === IEnumerable === - public static XXXXXXXX Sum(this IEnumerable collection) => AggregateUnitExtensions.Sum(collection); - public static XXXXXXXX Avg(this IEnumerable collection) => AggregateUnitExtensions.Avg(collection); - public static XXXXXXXX Max(this IEnumerable collection) => AggregateUnitExtensions.Max(collection); - public static XXXXXXXX Min(this IEnumerable collection) => AggregateUnitExtensions.Min(collection); - - - - // Sum Avg Max Min (nullable) ========================================== - - - // === ReadOnlySpan === - public static XXXXXXXX Sum(this ReadOnlySpan units) => AggregateUnitExtensions.Sum(units); - public static XXXXXXXX Avg(this ReadOnlySpan units) => AggregateUnitExtensions.Avg(units); - public static XXXXXXXX Max(this ReadOnlySpan units) => AggregateUnitExtensions.Max(units); - public static XXXXXXXX Min(this ReadOnlySpan units) => AggregateUnitExtensions.Min(units); +//namespace QWERTYkez.Mensura.Units; + +//[JsonConverter(typeof(UnitJsonConverter))] +//public readonly partial record struct XXXXXXXX : IMensuraUnit, IEquatable, IMensuraUnit +//{ +// [JsonInclude, DataMember, JsonPropertyName("v"), Obsolete] // для JSON / EF на случай сбоев, если пробелма с _Value +// internal double Value { get => _Value; init => _Value = value; } +// internal readonly double _Value; +// internal XXXXXXXX(double value) => _Value = value; + +// public override int GetHashCode() => _Value.GetHashCode(); +// public int CompareTo(XXXXXXXX? other) => _Value.CompareTo(other is null ? 0d : other.Value._Value); +// public int CompareTo(XXXXXXXX other) => _Value.CompareTo(other._Value); + +// public bool Equals(XXXXXXXX? other) => _Value.Equals(other?._Value); + + +// public static explicit operator XXXXXXXX(double val) => Unsafe.As(ref val); +// public static explicit operator double(XXXXXXXX unit) => unit._Value; + + +// [MethodImpl(MethodImplOptions.AggressiveInlining)] +// public XXXXXXXX Abs() => new(Math.Abs(_Value)); + +// [MethodImpl(MethodImplOptions.AggressiveInlining)] +// internal R Pow2_Internal() where R : struct, IMensuraUnit, IEquatable => (_Value * _Value).ToUnit(); + +// [MethodImpl(MethodImplOptions.AggressiveInlining)] +// internal R Sqrt_Internal() where R : struct, IMensuraUnit, IEquatable => Math.Sqrt(_Value).ToUnit(); + + + +// [JsonIgnore, IgnoreDataMember] public bool IsPositive => _Value >= 0; +// [JsonIgnore, IgnoreDataMember] public bool IsGreaterThanZero => _Value > 0; +// [JsonIgnore, IgnoreDataMember] public bool IsNegative => double.IsNegative(_Value); +// [JsonIgnore, IgnoreDataMember] public bool IsZero => _Value == 0; +// [JsonIgnore, IgnoreDataMember] public bool IsNaN => double.IsNaN(_Value); +// [JsonIgnore, IgnoreDataMember] public bool IsFinite => double.IsFinite(_Value); +// [JsonIgnore, IgnoreDataMember] public bool IsInfinity => double.IsInfinity(_Value); +// [JsonIgnore, IgnoreDataMember] public bool IsPositiveInfinity => double.IsPositiveInfinity(_Value); +// [JsonIgnore, IgnoreDataMember] public bool IsNegativeInfinity => double.IsNegativeInfinity(_Value); + + +// public static XXXXXXXX Zero { get; } = new(0d); +// public static XXXXXXXX Min { get; } = new(double.MinValue); +// public static XXXXXXXX Max { get; } = new(double.MaxValue); +// public static XXXXXXXX NegativeInfinity { get; } = new(double.NegativeInfinity); +// public static XXXXXXXX PositiveInfinity { get; } = new(double.PositiveInfinity); + +// public static bool operator ==(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() == T2.Protected(); +// public static bool operator !=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() != T2.Protected(); + +// public static bool operator <(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() < T2.Protected(); +// public static bool operator <=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() <= T2.Protected(); +// public static bool operator >(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() > T2.Protected(); +// public static bool operator >=(XXXXXXXX? T1, XXXXXXXX? T2) => T1.Protected() >= T2.Protected(); + + +// public static XXXXXXXX operator +(XXXXXXXX T2) => new(+T2._Value); +// public static XXXXXXXX operator +(XXXXXXXX T1, XXXXXXXX T2) => new(T1._Value + T2._Value); +// public static XXXXXXXX operator -(XXXXXXXX T2) => new(-T2._Value); +// public static XXXXXXXX operator -(XXXXXXXX T1, XXXXXXXX T2) => new(T1._Value - T2._Value); + + +// // double +// public static XXXXXXXX operator *(XXXXXXXX T1, double T2) => new(T1._Value * T2); +// public static XXXXXXXX operator *(XXXXXXXX T1, double? T2) => T1 * (T2 ?? 0d); +// public static XXXXXXXX operator *(double T1, XXXXXXXX T2) => new(T1 * T2._Value); +// public static XXXXXXXX operator *(double? T1, XXXXXXXX T2) => (T1 ?? 0d) * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, double T2) => new(T1._Value / T2); +// public static XXXXXXXX operator /(XXXXXXXX T1, double? T2) => T1 / (T2 ?? 0d); +// public static double operator /(XXXXXXXX T1, XXXXXXXX T2) => T1._Value / T2._Value; + +// // sbyte +// public static XXXXXXXX operator *(XXXXXXXX T1, sbyte T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, sbyte? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(sbyte T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(sbyte? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, sbyte T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, sbyte? T2) => T1 / T2.ToDouble(); + +// // short +// public static XXXXXXXX operator *(XXXXXXXX T1, short T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, short? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(short T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(short? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, short T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, short? T2) => T1 / T2.ToDouble(); + +// // int +// public static XXXXXXXX operator *(XXXXXXXX T1, int T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, int? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(int T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(int? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, int T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, int? T2) => T1 / T2.ToDouble(); + +// // long +// public static XXXXXXXX operator *(XXXXXXXX T1, long T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, long? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(long T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(long? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, long T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, long? T2) => T1 / T2.ToDouble(); + +// // byte +// public static XXXXXXXX operator *(XXXXXXXX T1, byte T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, byte? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(byte T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(byte? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, byte T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, byte? T2) => T1 / T2.ToDouble(); + +// // ushort +// public static XXXXXXXX operator *(XXXXXXXX T1, ushort T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, ushort? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(ushort T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(ushort? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, ushort T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, ushort? T2) => T1 / T2.ToDouble(); + +// // uint +// public static XXXXXXXX operator *(XXXXXXXX T1, uint T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, uint? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(uint T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(uint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, uint T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, uint? T2) => T1 / T2.ToDouble(); + +// // ulong +// public static XXXXXXXX operator *(XXXXXXXX T1, ulong T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, ulong? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(ulong T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(ulong? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, ulong T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, ulong? T2) => T1 / T2.ToDouble(); + +// // nint +// public static XXXXXXXX operator *(XXXXXXXX T1, nint T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, nint? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(nint T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(nint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, nint T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, nint? T2) => T1 / T2.ToDouble(); + +// // nuint +// public static XXXXXXXX operator *(XXXXXXXX T1, nuint T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, nuint? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(nuint T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(nuint? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, nuint T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, nuint? T2) => T1 / T2.ToDouble(); + +// // float +// public static XXXXXXXX operator *(XXXXXXXX T1, float T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, float? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(float T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(float? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, float T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, float? T2) => T1 / T2.ToDouble(); + +// // decimal +// public static XXXXXXXX operator *(XXXXXXXX T1, decimal T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, decimal? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(decimal T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(decimal? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, decimal T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, decimal? T2) => T1 / T2.ToDouble(); + +//#if NET7_0_OR_GREATER +// // Int128 +// public static XXXXXXXX operator *(XXXXXXXX T1, Int128 T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, Int128? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(Int128 T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(Int128? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, Int128 T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, Int128? T2) => T1 / T2.ToDouble(); + +// // UInt128 +// public static XXXXXXXX operator *(XXXXXXXX T1, UInt128 T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(XXXXXXXX T1, UInt128? T2) => T1 * T2.ToDouble(); +// public static XXXXXXXX operator *(UInt128 T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator *(UInt128? T1, XXXXXXXX T2) => T1.ToDouble() * T2; +// public static XXXXXXXX operator /(XXXXXXXX T1, UInt128 T2) => T1 / T2.ToDouble(); +// public static XXXXXXXX operator /(XXXXXXXX T1, UInt128? T2) => T1 / T2.ToDouble(); +//#endif + + + + + + + +// public static XXXXXXXX[] operator +(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static XXXXXXXX?[] operator +(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static XXXXXXXX[] operator +(XXXXXXXX T1, XXXXXXXX[] T2) => T1._Value.Plus(T2); +// public static XXXXXXXX?[] operator +(XXXXXXXX T1, XXXXXXXX?[] T2) => T1._Value.Plus(T2); +// public static XXXXXXXX[] operator +(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static XXXXXXXX?[] operator +(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static XXXXXXXX[] operator +(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.Protected().Plus(T2); +// public static XXXXXXXX?[] operator +(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.Protected().Plus(T2); + +// public static XXXXXXXX[] operator -(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static XXXXXXXX?[] operator -(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static XXXXXXXX[] operator -(XXXXXXXX T1, XXXXXXXX[] T2) => T1._Value.Minus(T2); +// public static XXXXXXXX?[] operator -(XXXXXXXX T1, XXXXXXXX?[] T2) => T1._Value.Minus(T2); +// public static XXXXXXXX[] operator -(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static XXXXXXXX?[] operator -(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static XXXXXXXX[] operator -(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.Protected().Minus(T2); +// public static XXXXXXXX?[] operator -(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.Protected().Minus(T2); + +// public static double[] operator /(XXXXXXXX T1, XXXXXXXX[] T2) => T1.Div(T2); +// public static double?[] operator /(XXXXXXXX T1, XXXXXXXX?[] T2) => T1.Div(T2); +// public static double[] operator /(XXXXXXXX[] T1, XXXXXXXX T2) => T1.Div(T2); +// public static double?[] operator /(XXXXXXXX?[] T1, XXXXXXXX T2) => T1.Div(T2); +// public static double[] operator /(XXXXXXXX? T1, XXXXXXXX[] T2) => T1.ProtectedU().Div(T2); +// public static double?[] operator /(XXXXXXXX? T1, XXXXXXXX?[] T2) => T1.ProtectedU().Div(T2); +// public static double[] operator /(XXXXXXXX[] T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); +// public static double?[] operator /(XXXXXXXX?[] T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); + + +// // double +// public static XXXXXXXX[] operator *(XXXXXXXX T1, double[] T2) => T1.Mul(T2); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, double?[] T2) => T1.Mul(T2); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, double[] T2) => T1.ProtectedU().Mul(T2); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, double?[] T2) => T1.ProtectedU().Mul(T2); +// public static XXXXXXXX[] operator *(double[] T1, XXXXXXXX T2) => T1.Mul(T2); +// public static XXXXXXXX?[] operator *(double?[] T1, XXXXXXXX T2) => T1.Mul(T2); +// public static XXXXXXXX[] operator *(double[] T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(double?[] T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, double[] T2) => T1.Div(T2); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, double?[] T2) => T1.Div(T2); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, double[] T2) => T1.ProtectedU().Div(T2); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, double?[] T2) => T1.ProtectedU().Div(T2); + +// // sbyte +// public static XXXXXXXX[] operator *(XXXXXXXX T1, sbyte[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, sbyte?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, sbyte[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, sbyte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(sbyte[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(sbyte?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(sbyte[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(sbyte?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, sbyte[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, sbyte?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, sbyte[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, sbyte?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // short +// public static XXXXXXXX[] operator *(XXXXXXXX T1, short[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, short?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, short[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, short?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(short[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(short?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(short[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(short?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, short[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, short?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, short[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, short?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // int +// public static XXXXXXXX[] operator *(XXXXXXXX T1, int[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, int?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, int[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, int?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(int[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(int?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(int[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(int?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, int[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, int?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, int[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, int?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // long +// public static XXXXXXXX[] operator *(XXXXXXXX T1, long[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, long?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, long[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, long?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(long[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(long?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(long[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(long?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, long[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, long?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, long[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, long?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // byte +// public static XXXXXXXX[] operator *(XXXXXXXX T1, byte[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, byte?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, byte[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, byte?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(byte[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(byte?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(byte[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(byte?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, byte[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, byte?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, byte[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, byte?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ushort +// public static XXXXXXXX[] operator *(XXXXXXXX T1, ushort[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, ushort?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, ushort[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, ushort?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(ushort[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(ushort?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(ushort[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(ushort?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, ushort[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, ushort?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, ushort[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, ushort?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // uint +// public static XXXXXXXX[] operator *(XXXXXXXX T1, uint[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, uint?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, uint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, uint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(uint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(uint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(uint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(uint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, uint[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, uint?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, uint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, uint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ulong +// public static XXXXXXXX[] operator *(XXXXXXXX T1, ulong[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, ulong?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, ulong[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, ulong?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(ulong[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(ulong?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(ulong[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(ulong?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, ulong[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, ulong?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, ulong[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, ulong?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nint +// public static XXXXXXXX[] operator *(XXXXXXXX T1, nint[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, nint?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, nint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, nint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(nint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(nint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(nint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(nint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, nint[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, nint?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, nint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, nint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nuint +// public static XXXXXXXX[] operator *(XXXXXXXX T1, nuint[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, nuint?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, nuint[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, nuint?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(nuint[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(nuint?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(nuint[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(nuint?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, nuint[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, nuint?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, nuint[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, nuint?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // float +// public static XXXXXXXX[] operator *(XXXXXXXX T1, float[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, float?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, float[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, float?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(float[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(float?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(float[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(float?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, float[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, float?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, float[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, float?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // decimal +// public static XXXXXXXX[] operator *(XXXXXXXX T1, decimal[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, decimal?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, decimal[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, decimal?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(decimal[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(decimal?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(decimal[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(decimal?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, decimal[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, decimal?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, decimal[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, decimal?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +//#if NET7_0_OR_GREATER +// // Int128 +// public static XXXXXXXX[] operator *(XXXXXXXX T1, Int128[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, Int128?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, Int128[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, Int128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(Int128[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(Int128?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(Int128[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(Int128?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, Int128[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, Int128?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, Int128[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, Int128?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // UInt128 +// public static XXXXXXXX[] operator *(XXXXXXXX T1, UInt128[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX T1, UInt128?[] T2) => T1.Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(XXXXXXXX? T1, UInt128[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX?[] operator *(XXXXXXXX? T1, UInt128?[] T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static XXXXXXXX[] operator *(UInt128[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX?[] operator *(UInt128?[] T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static XXXXXXXX[] operator *(UInt128[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX?[] operator *(UInt128?[] T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static XXXXXXXX[] operator /(XXXXXXXX T1, UInt128[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX T1, UInt128?[] T2) => T1.Div(T2.ToDouble()); +// public static XXXXXXXX[] operator /(XXXXXXXX? T1, UInt128[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static XXXXXXXX?[] operator /(XXXXXXXX? T1, UInt128?[] T2) => T1.ProtectedU().Div(T2.ToDouble()); +//#endif + + + + + + + +// public static List operator +(List T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static List operator +(List T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static List operator +(XXXXXXXX T1, List T2) => T1._Value.Plus(T2); +// public static List operator +(XXXXXXXX T1, List T2) => T1._Value.Plus(T2); +// public static List operator +(List T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static List operator +(List T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static List operator +(XXXXXXXX? T1, List T2) => T1.Protected().Plus(T2); +// public static List operator +(XXXXXXXX? T1, List T2) => T1.Protected().Plus(T2); + +// public static List operator -(List T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static List operator -(List T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static List operator -(XXXXXXXX T1, List T2) => T1._Value.Minus(T2); +// public static List operator -(XXXXXXXX T1, List T2) => T1._Value.Minus(T2); +// public static List operator -(List T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static List operator -(List T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static List operator -(XXXXXXXX? T1, List T2) => T1.Protected().Minus(T2); +// public static List operator -(XXXXXXXX? T1, List T2) => T1.Protected().Minus(T2); + +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); +// public static List operator /(List T1, XXXXXXXX T2) => T1.Div(T2); +// public static List operator /(List T1, XXXXXXXX T2) => T1.Div(T2); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); +// public static List operator /(List T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); +// public static List operator /(List T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); + + +// // double +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2); + +// // sbyte +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // short +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // int +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // long +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // byte +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ushort +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // uint +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ulong +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nint +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nuint +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // float +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // decimal +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +//#if NET7_0_OR_GREATER +// // Int128 +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // UInt128 +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX T1, List T2) => T1.Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(XXXXXXXX? T1, List T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator *(List T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX T1, List T2) => T1.Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static List operator /(XXXXXXXX? T1, List T2) => T1.ProtectedU().Div(T2.ToDouble()); +//#endif + + + + + + + +// public static IEnumerable operator +(IEnumerable T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static IEnumerable operator +(IEnumerable T1, XXXXXXXX T2) => T1.Plus(T2._Value); +// public static IEnumerable operator +(XXXXXXXX T1, IEnumerable T2) => T1._Value.Plus(T2); +// public static IEnumerable operator +(XXXXXXXX T1, IEnumerable T2) => T1._Value.Plus(T2); +// public static IEnumerable operator +(IEnumerable T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static IEnumerable operator +(IEnumerable T1, XXXXXXXX? T2) => T1.Plus(T2.Protected()); +// public static IEnumerable operator +(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Plus(T2); +// public static IEnumerable operator +(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Plus(T2); + +// public static IEnumerable operator -(IEnumerable T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static IEnumerable operator -(IEnumerable T1, XXXXXXXX T2) => T1.Minus(T2._Value); +// public static IEnumerable operator -(XXXXXXXX T1, IEnumerable T2) => T1._Value.Minus(T2); +// public static IEnumerable operator -(XXXXXXXX T1, IEnumerable T2) => T1._Value.Minus(T2); +// public static IEnumerable operator -(IEnumerable T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static IEnumerable operator -(IEnumerable T1, XXXXXXXX? T2) => T1.Minus(T2.Protected()); +// public static IEnumerable operator -(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Minus(T2); +// public static IEnumerable operator -(XXXXXXXX? T1, IEnumerable T2) => T1.Protected().Minus(T2); + +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); +// public static IEnumerable operator /(IEnumerable T1, XXXXXXXX T2) => T1.Div(T2); +// public static IEnumerable operator /(IEnumerable T1, XXXXXXXX T2) => T1.Div(T2); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); +// public static IEnumerable operator /(IEnumerable T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); +// public static IEnumerable operator /(IEnumerable T1, XXXXXXXX? T2) => T1.Div(T2.ProtectedU()); + + +// // double +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2); + +// // sbyte +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // short +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // int +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // long +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // byte +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ushort +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // uint +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // ulong +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nint +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // nuint +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // float +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // decimal +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +//#if NET7_0_OR_GREATER +// // Int128 +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); + +// // UInt128 +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX T1, IEnumerable T2) => T1.Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Mul(T2.ToDouble()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX T2) => T1.ToDouble().Mul(T2); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator *(IEnumerable T1, XXXXXXXX? T2) => T1.ToDouble().Mul(T2.ProtectedU()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX T1, IEnumerable T2) => T1.Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +// public static IEnumerable operator /(XXXXXXXX? T1, IEnumerable T2) => T1.ProtectedU().Div(T2.ToDouble()); +//#endif +//} + +//public static class XXXXXXXXExtensions +//{ +// // === ReadOnlySpan +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this ReadOnlySpan units, +// double divisor, Span destination) => units.Div(divisor, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this ReadOnlySpan units, +// double divisor, Span destination) => units.Div(divisor, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, +// ReadOnlySpan units, Span destination) => dividend.Div(units, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, +// ReadOnlySpan units, Span destination) => dividend.Div(units, destination); + +// // === Array === +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static XXXXXXXX[] Div( +// this XXXXXXXX[] units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Div( +// this XXXXXXXX?[] units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX[] Div( +// this double dividend, XXXXXXXX[] units) => dividend.Div(units); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Div( +// this double dividend, XXXXXXXX?[] units) => dividend.Div(units); + +// // === List === +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( +// this List units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( +// this List units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( +// this double dividend, List units) => dividend.Div(units); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Div( +// this double dividend, List units) => dividend.Div(units); + +// // === IReadOnlyCollection === +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Div(this IReadOnlyCollection units, +// double divisor, Span destination) => units.Div(divisor, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Div(this IReadOnlyCollection units, +// double divisor, Span destination) => units.Div(divisor, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, +// IReadOnlyCollection units, Span destination) => dividend.Div(units, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Div(this double dividend, +// IReadOnlyCollection units, Span destination) => dividend.Div(units, destination); + +// // === IEnumerable === +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( +// this IEnumerable units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( +// this IEnumerable units, double divisor) => units.Div(divisor); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( +// this double dividend, IEnumerable units) => dividend.Div(units); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Div( +// this double dividend, IEnumerable units) => dividend.Div(units); + + + + + + +// // === ReadOnlySpan +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this ReadOnlySpan units, +// double multiplicator, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this ReadOnlySpan units, +// double multiplicator, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, +// ReadOnlySpan units, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, +// ReadOnlySpan units, Span destination) => units.Mul(multiplicator, destination); + +// // === Array === +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static XXXXXXXX[] Mul( +// this XXXXXXXX[] units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Mul( +// this XXXXXXXX?[] units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX[] Mul( +// this double multiplicator, XXXXXXXX[] units) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static XXXXXXXX?[] Mul( +// this double multiplicator, XXXXXXXX?[] units) => units.Mul(multiplicator); + +// // === List === +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( +// this List units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( +// this List units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( +// this double multiplicator, List units) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static List Mul( +// this double multiplicator, List units) => units.Mul(multiplicator); + +// // === IReadOnlyCollection === +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Mul(this IReadOnlyCollection units, +// double multiplicator, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)]public static void Mul(this IReadOnlyCollection units, +// double multiplicator, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, +// IReadOnlyCollection units, Span destination) => units.Mul(multiplicator, destination); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Mul(this double multiplicator, +// IReadOnlyCollection units, Span destination) => units.Mul(multiplicator, destination); + +// // === IEnumerable === +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( +// this IEnumerable units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( +// this IEnumerable units, double multiplicator) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( +// this double multiplicator, IEnumerable units) => units.Mul(multiplicator); +// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IEnumerable Mul( +// this double multiplicator, IEnumerable units) => units.Mul(multiplicator); + + + + + + +// // Sum Avg Max Min (не nullable) ========================================== + + +// // === ReadOnlySpan === SIMD +// public static XXXXXXXX Sum(this ReadOnlySpan units) => AggregateUnitExtensions.Sum(units); +// public static XXXXXXXX Avg(this ReadOnlySpan units) => AggregateUnitExtensions.Avg(units); +// public static XXXXXXXX Max(this ReadOnlySpan units) => AggregateUnitExtensions.Max(units); +// public static XXXXXXXX Min(this ReadOnlySpan units) => AggregateUnitExtensions.Min(units); + +// // === List === +// public static XXXXXXXX Sum(this List list) => AggregateUnitExtensions.Sum(list); +// public static XXXXXXXX Avg(this List list) => AggregateUnitExtensions.Avg(list); +// public static XXXXXXXX Max(this List list) => AggregateUnitExtensions.Max(list); +// public static XXXXXXXX Min(this List list) => AggregateUnitExtensions.Min(list); + +// // === IReadOnlyCollection === +// public static XXXXXXXX Sum(this IReadOnlyCollection collection) => AggregateUnitExtensions.Sum(collection); +// public static XXXXXXXX Avg(this IReadOnlyCollection collection) => AggregateUnitExtensions.Avg(collection); +// public static XXXXXXXX Max(this IReadOnlyCollection collection) => AggregateUnitExtensions.Max(collection); +// public static XXXXXXXX Min(this IReadOnlyCollection collection) => AggregateUnitExtensions.Min(collection); + + +// // === IEnumerable === +// public static XXXXXXXX Sum(this IEnumerable collection) => AggregateUnitExtensions.Sum(collection); +// public static XXXXXXXX Avg(this IEnumerable collection) => AggregateUnitExtensions.Avg(collection); +// public static XXXXXXXX Max(this IEnumerable collection) => AggregateUnitExtensions.Max(collection); +// public static XXXXXXXX Min(this IEnumerable collection) => AggregateUnitExtensions.Min(collection); + + + +// // Sum Avg Max Min (nullable) ========================================== + + +// // === ReadOnlySpan === +// public static XXXXXXXX Sum(this ReadOnlySpan units) => AggregateUnitExtensions.Sum(units); +// public static XXXXXXXX Avg(this ReadOnlySpan units) => AggregateUnitExtensions.Avg(units); +// public static XXXXXXXX Max(this ReadOnlySpan units) => AggregateUnitExtensions.Max(units); +// public static XXXXXXXX Min(this ReadOnlySpan units) => AggregateUnitExtensions.Min(units); - // === List === - public static XXXXXXXX Sum(this List list) => AggregateUnitExtensions.Sum(list); - public static XXXXXXXX Avg(this List list) => AggregateUnitExtensions.Avg(list); - public static XXXXXXXX Max(this List list) => AggregateUnitExtensions.Max(list); - public static XXXXXXXX Min(this List list) => AggregateUnitExtensions.Min(list); - - // === IReadOnlyCollection === - public static XXXXXXXX Sum(this IReadOnlyCollection collection) => AggregateUnitExtensions.Sum(collection); - public static XXXXXXXX Avg(this IReadOnlyCollection collection) => AggregateUnitExtensions.Avg(collection); - public static XXXXXXXX Max(this IReadOnlyCollection collection) => AggregateUnitExtensions.Max(collection); - public static XXXXXXXX Min(this IReadOnlyCollection collection) => AggregateUnitExtensions.Min(collection); - - // === IEnumerable === - public static XXXXXXXX Sum(this IEnumerable collection) => AggregateUnitExtensions.Sum(collection); - public static XXXXXXXX Avg(this IEnumerable collection) => AggregateUnitExtensions.Avg(collection); - public static XXXXXXXX Max(this IEnumerable collection) => AggregateUnitExtensions.Max(collection); - public static XXXXXXXX Min(this IEnumerable collection) => AggregateUnitExtensions.Min(collection); -} \ No newline at end of file +// // === List === +// public static XXXXXXXX Sum(this List list) => AggregateUnitExtensions.Sum(list); +// public static XXXXXXXX Avg(this List list) => AggregateUnitExtensions.Avg(list); +// public static XXXXXXXX Max(this List list) => AggregateUnitExtensions.Max(list); +// public static XXXXXXXX Min(this List list) => AggregateUnitExtensions.Min(list); + +// // === IReadOnlyCollection === +// public static XXXXXXXX Sum(this IReadOnlyCollection collection) => AggregateUnitExtensions.Sum(collection); +// public static XXXXXXXX Avg(this IReadOnlyCollection collection) => AggregateUnitExtensions.Avg(collection); +// public static XXXXXXXX Max(this IReadOnlyCollection collection) => AggregateUnitExtensions.Max(collection); +// public static XXXXXXXX Min(this IReadOnlyCollection collection) => AggregateUnitExtensions.Min(collection); + +// // === IEnumerable === +// public static XXXXXXXX Sum(this IEnumerable collection) => AggregateUnitExtensions.Sum(collection); +// public static XXXXXXXX Avg(this IEnumerable collection) => AggregateUnitExtensions.Avg(collection); +// public static XXXXXXXX Max(this IEnumerable collection) => AggregateUnitExtensions.Max(collection); +// public static XXXXXXXX Min(this IEnumerable collection) => AggregateUnitExtensions.Min(collection); +//} \ No newline at end of file diff --git a/QWERTYkez.Mensura/Units/XXXXXXXX.Ref.cs b/QWERTYkez.Mensura/Units/XXXXXXXX.Ref.cs index e7357ec..f348d84 100644 --- a/QWERTYkez.Mensura/Units/XXXXXXXX.Ref.cs +++ b/QWERTYkez.Mensura/Units/XXXXXXXX.Ref.cs @@ -1,70 +1,70 @@ -#if DEBUG -namespace QWERTYkez.Mensura.Units; +//#if DEBUG +//namespace QWERTYkez.Mensura.Units; -/// -/// Base value is MilliMeters -/// -[DebuggerDisplay("mm = {_MilliMeters.ToString(\"0.###\")}, m = {Meters.ToString(\"0.###\")}")] -public readonly partial record struct XXXXXXXX -{ - public static XXXXXXXX MilliMeter { get; } = new(1); - [NotMapped, JsonIgnore, IgnoreDataMember] public double _MilliMeters { get => _Value; init => _Value = value; } +///// +///// Base value is MilliMeters +///// +//[DebuggerDisplay("mm = {_MilliMeters.ToString(\"0.###\")}, m = {Meters.ToString(\"0.###\")}")] +//public readonly partial record struct XXXXXXXX +//{ +// public static XXXXXXXX MilliMeter { get; } = new(1); +// [NotMapped, JsonIgnore, IgnoreDataMember] public double _MilliMeters { get => _Value; init => _Value = value; } - public static XXXXXXXX CentiMeter { get; } = new(XXXXXXXXConv.CentiMeters.To(1)); - [NotMapped, JsonIgnore, IgnoreDataMember] - public double CentiMeters - { - get => XXXXXXXXConv.CentiMeters.From(_Value); - init - { - _Value = XXXXXXXXConv.CentiMeters.To(value); - } - } +// public static XXXXXXXX CentiMeter { get; } = new(XXXXXXXXConv.CentiMeters.To(1)); +// [NotMapped, JsonIgnore, IgnoreDataMember] +// public double CentiMeters +// { +// get => XXXXXXXXConv.CentiMeters.From(_Value); +// init +// { +// _Value = XXXXXXXXConv.CentiMeters.To(value); +// } +// } - public static XXXXXXXX DeciMeter { get; } = new(XXXXXXXXConv.DeciMeters.To(1)); - [NotMapped, JsonIgnore, IgnoreDataMember] - public double DeciMeters - { - get => XXXXXXXXConv.DeciMeters.From(_Value); - init => _Value = XXXXXXXXConv.DeciMeters.To(value); - } +// public static XXXXXXXX DeciMeter { get; } = new(XXXXXXXXConv.DeciMeters.To(1)); +// [NotMapped, JsonIgnore, IgnoreDataMember] +// public double DeciMeters +// { +// get => XXXXXXXXConv.DeciMeters.From(_Value); +// init => _Value = XXXXXXXXConv.DeciMeters.To(value); +// } - public static XXXXXXXX Meter { get; } = new(XXXXXXXXConv.Meters.To(1)); - [NotMapped, JsonIgnore, IgnoreDataMember] - public double Meters - { - get => XXXXXXXXConv.Meters.From(_Value); - init => _Value = XXXXXXXXConv.Meters.To(value); - } +// public static XXXXXXXX Meter { get; } = new(XXXXXXXXConv.Meters.To(1)); +// [NotMapped, JsonIgnore, IgnoreDataMember] +// public double Meters +// { +// get => XXXXXXXXConv.Meters.From(_Value); +// init => _Value = XXXXXXXXConv.Meters.To(value); +// } - public static XXXXXXXX KiloMeter { get; } = new(XXXXXXXXConv.KiloMeters.To(1)); - [NotMapped, JsonIgnore, IgnoreDataMember] - public double KiloMeters - { - get => XXXXXXXXConv.KiloMeters.From(_Value); - init => _Value = XXXXXXXXConv.KiloMeters.To(value); - } +// public static XXXXXXXX KiloMeter { get; } = new(XXXXXXXXConv.KiloMeters.To(1)); +// [NotMapped, JsonIgnore, IgnoreDataMember] +// public double KiloMeters +// { +// get => XXXXXXXXConv.KiloMeters.From(_Value); +// init => _Value = XXXXXXXXConv.KiloMeters.To(value); +// } - public XXXXXXXX AddMilliMeters(double value) => new(_Value + value); - public XXXXXXXX AddCentiMeters(double value) => new(_Value + XXXXXXXXConv.CentiMeters.To(value)); - public XXXXXXXX AddDeciMeters(double value) => new(_Value + XXXXXXXXConv.DeciMeters.To(value)); - public XXXXXXXX AddMeters(double value) => new(_Value + XXXXXXXXConv.Meters.To(value)); - public XXXXXXXX AddKiloMeters(double value) => new(_Value + XXXXXXXXConv.KiloMeters.To(value)); -} +// public XXXXXXXX AddMilliMeters(double value) => new(_Value + value); +// public XXXXXXXX AddCentiMeters(double value) => new(_Value + XXXXXXXXConv.CentiMeters.To(value)); +// public XXXXXXXX AddDeciMeters(double value) => new(_Value + XXXXXXXXConv.DeciMeters.To(value)); +// public XXXXXXXX AddMeters(double value) => new(_Value + XXXXXXXXConv.Meters.To(value)); +// public XXXXXXXX AddKiloMeters(double value) => new(_Value + XXXXXXXXConv.KiloMeters.To(value)); +//} -internal readonly struct XXXXXXXXConv -{ - private XXXXXXXXConv(double multiplicator) => this.Multiplicator = multiplicator; - public double To(double value) => value * Multiplicator; - public double From(double value) => value / Multiplicator; - public double Multiplicator { get; init; } - public static XXXXXXXXConv MilliMeters { get; } = new(1); - public static XXXXXXXXConv CentiMeters { get; } = new(10); - public static XXXXXXXXConv DeciMeters { get; } = new(100); - public static XXXXXXXXConv Meters { get; } = new(1000); - public static XXXXXXXXConv KiloMeters { get; } = new(1000000); -} -#endif \ No newline at end of file +//internal readonly struct XXXXXXXXConv +//{ +// private XXXXXXXXConv(double multiplicator) => this.Multiplicator = multiplicator; +// public double To(double value) => value * Multiplicator; +// public double From(double value) => value / Multiplicator; +// public double Multiplicator { get; init; } +// public static XXXXXXXXConv MilliMeters { get; } = new(1); +// public static XXXXXXXXConv CentiMeters { get; } = new(10); +// public static XXXXXXXXConv DeciMeters { get; } = new(100); +// public static XXXXXXXXConv Meters { get; } = new(1000); +// public static XXXXXXXXConv KiloMeters { get; } = new(1000000); +//} +//#endif \ No newline at end of file