#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
#include "lwave.h"


using namespace std;

int main()
{

string name="bior4.4";

liftscheme blift(name);

// Adding a Dual Lifting Stage

string c="d"; //d corrsponds to dual while p corresponds to primal
vector<double> addl;
addl.push_back(0.500);
addl.push_back(-0.125);

int mp=0;
blift.addLift(c,addl,mp);

//Getting Information

cout << " Number Of Lifting Stages : " << blift.nlifts() << endl;
cout << " K Constant : " << blift.K() << endl;
cout << " Name : " << blift.getName() << endl;

vector<double> coeff;
vector<int> lenvec;
string lattice;
double Kc;

// Getting Full Scheme

blift.getScheme(coeff,lenvec,lattice,Kc);

cout << "Lifting Structure : " << lattice << endl;
cout << " K Constant (Same As Above) : " << Kc << endl;

cout << "A Single Vector Containing All Lifting Coefficients " << endl;

for (int i=0; i <  (int)coeff.size(); i++) {
        cout << coeff[i] << " " ;
}
cout << endl;

cout << "Length Vector that corresponds to lengths of Lifting Coefficients and Maximum Power at each Stage" << endl;

for (int i=0; i <(int) lenvec.size(); i++) {
        cout << lenvec[i] << " " ;
}
cout << endl;
// disp() Function Displays Coefficients and Laurent Polynomials At Each Stage 
blift.disp();


return 0;
}