#include"TermStructure.h"
#include<cmath>

TermStructure::TermStructure(){

	Date d("1/1/1900");
	double yld=0.0;
	yieldCurve.insert(make_pair(d,yld));
};

TermStructure::TermStructure(vector<Date> dts,vector<double> ylds,double cnt){

	dayCount=365.0;


	vector<Date>::const_iterator d=dts.begin();
	vector<double>::const_iterator y=ylds.begin();

		int now=d->daysSinceStart();
	


	while(d!=dts.end() && y!=ylds.end()){

		d->printVerbose();
		cout<<*y<<endl;
		yieldCurve.insert(make_pair(*d,*y));
		yieldFunction.insert(make_pair((d->daysSinceStart()-now)/dayCount,*y));
	
		d++;
		y++;
	}

	map<double,double>::const_iterator dd=yieldFunction.begin();

	while(dd!=yieldFunction.end()){

		cout<<dd->first<<dd->second<<endl;
		dd++;
	}



	
}

double TermStructure::discountToYield(double t, double d) {

	double r=exp(-t*d);
	return r;
};

double TermStructure::yieldToDiscount(double t, double r){

	double d=-(1/t)*log(r);
	return d;
};
 
map<Date,double> TermStructure::getCurve()const{

	return yieldCurve;
};

map<double,double> TermStructure::getFunction() const{

	return yieldFunction;
};

double TermStructure::getDayCount() const {

	return dayCount;

};

Date TermStructure::getStart(){

	return start;

};