/* Copyright (C) 2006 Giorgio Facchinetti Copyright (C) 2006 Mario Pucci Copyright (C) 2006, 2007 StatPro Italia srl This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ #include #include #include #include namespace QuantLib { CmsCoupon::CmsCoupon(const Date& paymentDate, Real nominal, const Date& startDate, const Date& endDate, Natural fixingDays, const ext::shared_ptr& swapIndex, Real gearing, Spread spread, const Date& refPeriodStart, const Date& refPeriodEnd, const DayCounter& dayCounter, bool isInArrears, const Date& exCouponDate) : FloatingRateCoupon(paymentDate, nominal, startDate, endDate, fixingDays, swapIndex, gearing, spread, refPeriodStart, refPeriodEnd, dayCounter, isInArrears, exCouponDate), swapIndex_(swapIndex) {} void CmsCoupon::accept(AcyclicVisitor& v) { Visitor* v1 = dynamic_cast*>(&v); if (v1 != 0) v1->visit(*this); else FloatingRateCoupon::accept(v); } CmsLeg::CmsLeg(const Schedule& schedule, const ext::shared_ptr& swapIndex) : schedule_(schedule), swapIndex_(swapIndex), paymentAdjustment_(Following), inArrears_(false), zeroPayments_(false) {} CmsLeg& CmsLeg::withNotionals(Real notional) { notionals_ = std::vector(1, notional); return *this; } CmsLeg& CmsLeg::withNotionals(const std::vector& notionals) { notionals_ = notionals; return *this; } CmsLeg& CmsLeg::withPaymentDayCounter(const DayCounter& dayCounter) { paymentDayCounter_ = dayCounter; return *this; } CmsLeg& CmsLeg::withPaymentAdjustment(BusinessDayConvention convention) { paymentAdjustment_ = convention; return *this; } CmsLeg& CmsLeg::withFixingDays(Natural fixingDays) { fixingDays_ = std::vector(1, fixingDays); return *this; } CmsLeg& CmsLeg::withFixingDays(const std::vector& fixingDays) { fixingDays_ = fixingDays; return *this; } CmsLeg& CmsLeg::withGearings(Real gearing) { gearings_ = std::vector(1, gearing); return *this; } CmsLeg& CmsLeg::withGearings(const std::vector& gearings) { gearings_ = gearings; return *this; } CmsLeg& CmsLeg::withSpreads(Spread spread) { spreads_ = std::vector(1, spread); return *this; } CmsLeg& CmsLeg::withSpreads(const std::vector& spreads) { spreads_ = spreads; return *this; } CmsLeg& CmsLeg::withCaps(Rate cap) { caps_ = std::vector(1, cap); return *this; } CmsLeg& CmsLeg::withCaps(const std::vector& caps) { caps_ = caps; return *this; } CmsLeg& CmsLeg::withFloors(Rate floor) { floors_ = std::vector(1, floor); return *this; } CmsLeg& CmsLeg::withFloors(const std::vector& floors) { floors_ = floors; return *this; } CmsLeg& CmsLeg::inArrears(bool flag) { inArrears_ = flag; return *this; } CmsLeg& CmsLeg::withZeroPayments(bool flag) { zeroPayments_ = flag; return *this; } CmsLeg& CmsLeg::withExCouponPeriod( const Period& period, const Calendar& cal, BusinessDayConvention convention, bool endOfMonth) { exCouponPeriod_ = period; exCouponCalendar_ = cal; exCouponAdjustment_ = convention; exCouponEndOfMonth_ = endOfMonth; return *this; } CmsLeg::operator Leg() const { return FloatingLeg( schedule_, notionals_, swapIndex_, paymentDayCounter_, paymentAdjustment_, fixingDays_, gearings_, spreads_, caps_, floors_, inArrears_, zeroPayments_, 0, Calendar(), exCouponPeriod_, exCouponCalendar_, exCouponAdjustment_, exCouponEndOfMonth_); } }