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