using System; using System.Collections.Generic; using System.Numerics; using System.Runtime.Intrinsics; using System.Text; namespace FxpConvert.Common { public interface ICalc { /// /// 加法 /// public IAdd Add { get; } /// /// 减法 /// public ISubtract Subtract { get; } /// /// 乘法 /// public IMultiply Multiply { get; } /// /// 除法 /// public IDivision Division { get; } /// /// FFT /// public IFFT FFT { get; } /// /// Clamp /// public IClamp Clamp { get; } /// /// 数组求和 /// public IArraySum Sum { get; } public void Fill(ref float result, float value, uint count); public void Fill(ref double result, double value, uint count); } public interface IArraySum { public float Sum(ref float value,uint count); public double Sum(ref double value,uint count); public float Rms(ref float value, uint count); public double Rms(ref double value,uint count); } public interface IClamp { public void Clamp(ref float value, float min, float max, uint count); public void Clamp(ref double value, double min, double max, uint count); public void Clamp(ref float value,ref float min,ref float max, uint count); public void Clamp(ref double value,ref double min,ref double max, uint count); public void In(ref float value, float min, float max, uint count,ref int result); public void In(ref double value, double min, double max, uint count, ref long result); public void In(ref float value, ref float min, ref float max, uint count, ref int result); public void In(ref double value, ref double min, ref double max, uint count, ref long result); } public interface IFFT { public void FFT(double[] real, double[] imaginary); public void FFT(float[] real, float[] imaginary); public void IFFT(double[] real, double[] imaginary); public void IFFT(float[] real, float[] imaginary); } public interface IAdd { public void Add(ref float left, float right, uint count, ref float result); public void Add(ref float left, ref float right, uint count, ref float result); public void Add(ref float left, float right, uint count); public void Add(ref float left, ref float right, uint count); public void Add(ref double left, double right, uint count, ref double result); public void Add(ref double left, ref double right, uint count, ref double result); public void Add(ref double left, double right, uint count); public void Add(ref double left, ref double right, uint count); } public interface ISubtract { public void Subtract(ref float left, float right, uint count, ref float result); public void Subtract(ref float left, ref float right, uint count, ref float result); public void Subtract(ref float left, float right, uint count); public void Subtract(ref float left, ref float right, uint count); public void Subtract(ref double left, double right, uint count, ref double result); public void Subtract(ref double left, ref double right, uint count, ref double result); public void Subtract(ref double left, double right, uint count); public void Subtract(ref double left, ref double right, uint count); } public interface IMultiply { public void Multiply(ref float left, float right, uint count, ref float result); public void Multiply(ref float left, ref float right, uint count, ref float result); public void Multiply(ref float left, float right, uint count); public void Multiply(ref float left, ref float right, uint count); public void Multiply(ref double left, double right, uint count, ref double result); public void Multiply(ref double left, ref double right, uint count, ref double result); public void Multiply(ref double left, double right, uint count); public void Multiply(ref double left, ref double right, uint count); } public interface IDivision { public void Division(ref float left, float right, uint count, ref float result); public void Division(ref float left, ref float right, uint count, ref float result); public void Division(ref float left, float right, uint count); public void Division(ref float left, ref float right, uint count); public void Division(ref double left, double right, uint count, ref double result); public void Division(ref double left, ref double right, uint count, ref double result); public void Division(ref double left, double right, uint count); public void Division(ref double left, ref double right, uint count); } }