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;
}
}
}