#ifndef DAUBECHIES_H
#define DAUBECHIES_H

class Daubechies {

  public:

    static char TheP;
    static char diese;
    static int type;
    static int dimX;
    static int maxIntensity;
    static std::string line_of_comments;

    static double  *v;
    static double  *workAAA;
    static double  *workBBB;
    static double  *workCCC;
    static double  *h;
    static double  *g;
    static int max_iter;

    void Do_Discrete_Matrix_Transformation(char File_in[], char File_out[], int Total_Iterations, int Dorder);
    void Do_Inverse_Matrix_Transformation(char File_in[], char File_out[], int Total_Iterations, int Dorder);

//  DWT
    void DWT1Diter(int Dorder);
    void DWT1D1(double *A, double *B, int N, int Dorder);

//  IDWT
    void IDWT1Diter(int Dorder);
    void IDWT1D1(double *v, double *y, int N, int L);
    void IDWTht(double *signal, double *InverseTransform, double *filter, int n, int Dorder);

//  UTIL
    void ReadSignal(char File_in[]);
    void WriteSignal(char File_out[]);
    void AssignCoefficients(int Dorder);
    void VerifyMaxIterations(int Total_Iterations);
    void AllocateWork(int dim_matrix);
    void DeallocateWork(int dim_matrix);
    void GetCorner(double *workAAA, int dim_matrix);
    void PutCorner(double *workBBB, int dim_matrix);
    void AlterTransform(int type);

};
#endif

