#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
#include "lwave.h"
using namespace std;
int main()
{
string name="db3";
int J=2;
double lp1_a[] = {0.9501,0.2311,0.6068,0.4860,0.8913,0.7621,0.4565,0.0185,0.8214,
0.4447,0.6154,0.7919,0.9218,0.7382,0.1763,0.4057};
/*double lp1_a[] = {1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,
* 1.000,1.000,1.000,1.000,1.000,1.000,1.000};*/
vector<double> sig;
sig.assign(lp1_a,lp1_a + sizeof(lp1_a)/sizeof(double));
liftscheme blift(name);
string c="d";
vector<double> addl;
addl.push_back(0.500);
addl.push_back(-0.125);
int mp=0;
blift.addLift(c,addl,mp);
blift.disp();
lwt<double> dlift(sig,blift,J);
vector<double> a,d;
vector<int> lengths;
dlift.getCoeff(a,d);
dlift.getDetailVec(lengths);
cout << " Approximation : " << endl;
for (int i=0; i < a.size();i++) {
cout << a[i] << " ";
}
cout << endl;
cout << " Detail : " << endl;
for (int i=0; i < d.size();i++) {
cout << d[i] << " ";
}
cout << endl;
cout << " Lengths Of Detail Vectors : " << endl;
for (int i=0; i < lengths.size();i++) {
cout << lengths[i] << " ";
}
cout << endl;
ilwt<double> idlift(dlift,blift);
vector<double> oup;
idlift.getSignal(oup);
cout << " Reconstructed : " << endl;
for (int i=0; i < oup.size();i++) {
cout << oup[i] << " ";
}
cout << endl;
return 0;
}