#pragma once #include #include #include "isda/bastypes.h" #include "isda/cdate.h" #include "isda/tcurve.h" namespace pyisda { class Curve { public: Curve(TCurve* const curve) : ptr(curve) {}; Curve(const Curve &curve2) : ptr(JpmcdsCopyCurve(curve2.ptr)) {}; ~Curve() { JpmcdsFreeTCurve(ptr); } explicit operator TCurve*() const { return ptr; } unsigned char* serialize(unsigned char* buf); double zeroPrice(const TDate date); double zeroPrice(const TDate date1, const TDate date2); double survivalProb(const TDate start_date, const TDate maturity_date); double survivalProb(const TDate start_date, const TDate maturity_date, double eps); static void tweak(TCurve* ptr, double epsilon); static void tweak(TCurve* ptr, double epsilon, unsigned long mask); void tweak(double epsilon); void tweak(double epsilon, unsigned long mask); size_t size(); private: TCurve* ptr; }; class YieldCurve : public Curve { public: YieldCurve(TCurve* const curve, const std::vector& dates) : Curve(curve), dates(dates) {}; YieldCurve(const YieldCurve &curve2) : Curve(curve2), dates(std::move(curve2.dates)) {}; size_t size(); unsigned char* serialize(unsigned char* buf); std::vector dates; }; class SpreadCurve : public Curve { public: SpreadCurve(TCurve* const curve, const std::vector& recovery_rates, const std::string& ticker) : Curve(curve), recovery_rates(recovery_rates), ticker(ticker) {}; SpreadCurve(const SpreadCurve &curve2) : Curve(curve2), recovery_rates(std::move(curve2.recovery_rates)), ticker(std::move(curve2.ticker)) {}; std::vector recovery_rates; std::string ticker; size_t size(); unsigned char* serialize(unsigned char* buf); }; }