using System;
using System.Collections.Generic;
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; }
        public IFFT FFT { get; }
        public IArraySum Sum { get; }
        public void Fill(ref float result, float 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 IFFT
    {
        public void FFT(double[] real, double[] imaginary);
        public void FFT(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 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 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 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);
    }
}
