using System; using Cobilas.Collections; namespace Cobilas.Numeric { /// Base class used to store calculation and calculation overwriting functions. public abstract class CalculationsCollection { /// The list of calculation functions. public abstract MathOperator[] Calculations { get; protected set; } /// The list of calculation functions that will replace other calculation functions. public abstract MathOperator[] OverwriteCalculations { get; protected set; } /// Function to initialize the calculation functions. public abstract void Initialization(); /// /// Function responsible for calling a calculation function specified the sign of the mathematical operation. /// /// /// mathematical operator. /// public abstract double Clac(double V1, string S, double V2); internal static void OverrideFunction(CalculationsCollection[] collections) { MathOperator[] overwriteCalculations = Array.Empty(); foreach (var item in collections) ArrayManipulation.Add(item.OverwriteCalculations, ref overwriteCalculations); bool _break = false; foreach (var item1 in overwriteCalculations) foreach (var item2 in collections) { for (int I = 0; I < ArrayManipulation.ArrayLength(item2.Calculations); I++) { if (item2.Calculations[I].Signal == item1.Signal) { item2.Calculations[I] = item1; _break = true; } if (_break) break; } if (_break) break; } } /// Merge two collections of calculations. public static CalculationsCollection Merge(CalculationsCollection A, CalculationsCollection B) { A.Calculations = ArrayManipulation.Add(B.Calculations, A.Calculations); return A; } } }