add: auto register custom field
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<Version>0.0.6</Version>
|
<Version>0.0.7</Version>
|
||||||
<Description> </Description>
|
<Description> </Description>
|
||||||
<Copyright>hzhang</Copyright>
|
<Copyright>hzhang</Copyright>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Skeleton.Algebra.DimensionProviders;
|
using Skeleton.Algebra.DimensionProviders;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
using Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
namespace Skeleton.Algebra;
|
namespace Skeleton.Algebra;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Utils.Helpers;
|
using Skeleton.Utils.Helpers;
|
||||||
|
|
||||||
namespace Skeleton.Algebra.Extensions;
|
namespace Skeleton.Algebra.Extensions;
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace Skeleton.Algebra.ScalarFieldStructure;
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
[CustomFieldStructure]
|
||||||
public class ComplexFieldStructure : FieldStructure<Complex>
|
public class ComplexFieldStructure : FieldStructure<Complex>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
44
src/Algebra/FieldStructures/CustomFieldAutoRegister.cs
Normal file
44
src/Algebra/FieldStructures/CustomFieldAutoRegister.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
|
public static class CustomFieldAutoRegister
|
||||||
|
{
|
||||||
|
[SuppressMessage(
|
||||||
|
"Style",
|
||||||
|
"CA2255: The ModuleInitializer attribute should not be used in libraries",
|
||||||
|
Justification = "Intended for automatic field structure registration")]
|
||||||
|
[ModuleInitializer]
|
||||||
|
internal static void Initialize()
|
||||||
|
{
|
||||||
|
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
||||||
|
foreach (Assembly assembly in assemblies)
|
||||||
|
{
|
||||||
|
foreach (Type type in assembly.GetTypes())
|
||||||
|
{
|
||||||
|
if (type.GetCustomAttribute(typeof(CustomFieldStructure)) != null)
|
||||||
|
{
|
||||||
|
Type baseType = type.BaseType;
|
||||||
|
if (baseType != null
|
||||||
|
&& baseType.IsGenericType
|
||||||
|
&& baseType.GetGenericTypeDefinition() == typeof(FieldStructure<>)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Type tField = baseType.GetGenericArguments()[0];
|
||||||
|
var instance = Activator.CreateInstance(type);
|
||||||
|
var registerMethod = typeof(FieldStructureRegistry)
|
||||||
|
.GetMethods(BindingFlags.Static | BindingFlags.Public)
|
||||||
|
.FirstOrDefault(m => m.Name == "Register" && m.IsGenericMethod);
|
||||||
|
if (registerMethod != null)
|
||||||
|
{
|
||||||
|
var genericRegister = registerMethod.MakeGenericMethod(tField);
|
||||||
|
genericRegister.Invoke(null, [instance]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/Algebra/FieldStructures/CustomFieldStructure.cs
Normal file
6
src/Algebra/FieldStructures/CustomFieldStructure.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
|
public class CustomFieldStructure : Attribute
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ using System.Numerics;
|
|||||||
using Skeleton.Algebra.Extensions;
|
using Skeleton.Algebra.Extensions;
|
||||||
using Skeleton.DataStructure.Packs;
|
using Skeleton.DataStructure.Packs;
|
||||||
|
|
||||||
namespace Skeleton.Algebra.ScalarFieldStructure;
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// operations / structure of the field
|
/// operations / structure of the field
|
||||||
@@ -22,10 +22,6 @@ public abstract class FieldStructure<TScalar> : FieldStructure
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static FieldStructure<TScalar> Dispatch()
|
public static FieldStructure<TScalar> Dispatch()
|
||||||
{
|
{
|
||||||
if (typeof(TScalar) == typeof(double))
|
|
||||||
return (RealFieldStructure.Structure as FieldStructure<TScalar>)!;
|
|
||||||
if (typeof(TScalar) == typeof(Complex))
|
|
||||||
return (ComplexFieldStructure.Structure as FieldStructure<TScalar>)!;
|
|
||||||
return FieldStructureRegistry.GetOperation<TScalar>();
|
return FieldStructureRegistry.GetOperation<TScalar>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace Skeleton.Algebra.ScalarFieldStructure;
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace Skeleton.Algebra.ScalarFieldStructure;
|
namespace Skeleton.Algebra.FieldStructures;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
[CustomFieldStructure]
|
||||||
public class RealFieldStructure : FieldStructure<double>
|
public class RealFieldStructure : FieldStructure<double>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -4,9 +4,9 @@ using Skeleton.Algebra.AdditionalProperties.Extensions;
|
|||||||
using Skeleton.Algebra.AffineSpaces;
|
using Skeleton.Algebra.AffineSpaces;
|
||||||
using Skeleton.Algebra.DimensionProviders;
|
using Skeleton.Algebra.DimensionProviders;
|
||||||
using Skeleton.Algebra.Extensions;
|
using Skeleton.Algebra.Extensions;
|
||||||
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.Matrices.MatrixProperty;
|
using Skeleton.Algebra.Matrices.MatrixProperty;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
using Skeleton.Algebra.Vectors;
|
using Skeleton.Algebra.Vectors;
|
||||||
using Skeleton.Algebra.VectorSpaces;
|
using Skeleton.Algebra.VectorSpaces;
|
||||||
using Skeleton.DataStructure.Packs;
|
using Skeleton.DataStructure.Packs;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.Vectors;
|
using Skeleton.Algebra.Vectors;
|
||||||
|
|
||||||
namespace Skeleton.Algebra.Matrices.MatrixProperty;
|
namespace Skeleton.Algebra.Matrices.MatrixProperty;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
|
|
||||||
namespace Skeleton.Algebra;
|
namespace Skeleton.Algebra;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
using Skeleton.DataStructure.Packs.MatrixDecompositions;
|
using Skeleton.DataStructure.Packs.MatrixDecompositions;
|
||||||
|
|
||||||
namespace Skeleton.Algebra;
|
namespace Skeleton.Algebra;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.VectorSpaces;
|
using Skeleton.Algebra.VectorSpaces;
|
||||||
|
|
||||||
namespace Skeleton.Algebra;
|
namespace Skeleton.Algebra;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.Matrices;
|
using Skeleton.Algebra.Matrices;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
using Skeleton.Algebra.Vectors;
|
using Skeleton.Algebra.Vectors;
|
||||||
using Skeleton.DataStructure.Packs;
|
using Skeleton.DataStructure.Packs;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
using Skeleton.Algebra.Vectors;
|
using Skeleton.Algebra.Vectors;
|
||||||
|
|
||||||
namespace Skeleton.Algebra;
|
namespace Skeleton.Algebra;
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ using System.Collections;
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using Skeleton.Algebra.Extensions;
|
using Skeleton.Algebra.Extensions;
|
||||||
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Algebra.FixableObjects;
|
using Skeleton.Algebra.FixableObjects;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
|
||||||
|
|
||||||
namespace Skeleton.Algebra.Vectors;
|
namespace Skeleton.Algebra.Vectors;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Skeleton.Algebra.Extensions;
|
using Skeleton.Algebra.Extensions;
|
||||||
using Skeleton.Algebra.ScalarFieldStructure;
|
using Skeleton.Algebra.FieldStructures;
|
||||||
using Skeleton.Analysis.AnalyticFunctions.Implements;
|
using Skeleton.Analysis.AnalyticFunctions.Implements;
|
||||||
using Skeleton.Analysis.BivariantFunctions.Real.Implements;
|
using Skeleton.Analysis.BivariantFunctions.Real.Implements;
|
||||||
using Skeleton.DataStructure.Packs;
|
using Skeleton.DataStructure.Packs;
|
||||||
|
|||||||
Reference in New Issue
Block a user