Skip to content

Commit 4731f06

Browse files
committed
Use variant to remove some duplicated constructors
1 parent 848777a commit 4731f06

File tree

5 files changed

+70
-435
lines changed

5 files changed

+70
-435
lines changed

ql/termstructures/bootstraphelper.hpp

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ namespace QuantLib {
6161
template <class TS>
6262
class BootstrapHelper : public Observer, public Observable {
6363
public:
64-
explicit BootstrapHelper(Handle<Quote> quote);
65-
explicit BootstrapHelper(Real quote);
64+
explicit BootstrapHelper(const std::variant<Spread, Handle<Quote>>& quote);
6665
~BootstrapHelper() override = default;
6766
//! \name BootstrapHelper interface
6867
//@{
@@ -127,10 +126,10 @@ namespace QuantLib {
127126
template <class TS>
128127
class RelativeDateBootstrapHelper : public BootstrapHelper<TS> {
129128
public:
130-
explicit RelativeDateBootstrapHelper(const Handle<Quote>& quote,
131-
bool updateDates = true);
132-
explicit RelativeDateBootstrapHelper(Real quote,
133-
bool updateDates = true);
129+
explicit RelativeDateBootstrapHelper(
130+
const std::variant<Spread, Handle<Quote>>& quote,
131+
bool updateDates = true);
132+
134133
//! \name Observer interface
135134
//@{
136135
void update() override {
@@ -150,15 +149,11 @@ namespace QuantLib {
150149
// template definitions
151150

152151
template <class TS>
153-
BootstrapHelper<TS>::BootstrapHelper(Handle<Quote> quote)
154-
: quote_(std::move(quote)), termStructure_(nullptr) {
152+
BootstrapHelper<TS>::BootstrapHelper(const std::variant<Spread, Handle<Quote>>& quote)
153+
: quote_(valueOrHandle(quote)), termStructure_(nullptr) {
155154
registerWith(quote_);
156155
}
157156

158-
template <class TS>
159-
BootstrapHelper<TS>::BootstrapHelper(Real quote)
160-
: quote_(makeQuoteHandle(quote)), termStructure_(nullptr) {}
161-
162157
template <class TS>
163158
void BootstrapHelper<TS>::setTermStructure(TS* t) {
164159
QL_REQUIRE(t != nullptr, "null term structure given");
@@ -215,19 +210,14 @@ namespace QuantLib {
215210

216211
template <class TS>
217212
RelativeDateBootstrapHelper<TS>::RelativeDateBootstrapHelper(
218-
const Handle<Quote>& quote, bool updateDates)
213+
const std::variant<Spread, Handle<Quote>>& quote, bool updateDates)
219214
: BootstrapHelper<TS>(quote), updateDates_(updateDates) {
220215
if (updateDates) {
221216
this->registerWith(Settings::instance().evaluationDate());
222217
evaluationDate_ = Settings::instance().evaluationDate();
223218
}
224219
}
225220

226-
template <class TS>
227-
RelativeDateBootstrapHelper<TS>::RelativeDateBootstrapHelper(
228-
Real quote, bool updateDates)
229-
: RelativeDateBootstrapHelper<TS>(makeQuoteHandle(quote), updateDates) {}
230-
231221

232222
inline std::ostream& operator<<(std::ostream& out,
233223
Pillar::Choice t) {

ql/termstructures/credit/defaultprobabilityhelpers.cpp

Lines changed: 3 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,7 @@
2929

3030
namespace QuantLib {
3131

32-
CdsHelper::CdsHelper(const Handle<Quote>& quote,
33-
const Period& tenor,
34-
Integer settlementDays,
35-
Calendar calendar,
36-
Frequency frequency,
37-
BusinessDayConvention paymentConvention,
38-
DateGeneration::Rule rule,
39-
DayCounter dayCounter,
40-
Real recoveryRate,
41-
const Handle<YieldTermStructure>& discountCurve,
42-
bool settlesAccrual,
43-
bool paysAtDefaultTime,
44-
const Date& startDate,
45-
DayCounter lastPeriodDayCounter,
46-
const bool rebatesAccrual,
47-
const CreditDefaultSwap::PricingModel model)
48-
: RelativeDateDefaultProbabilityHelper(quote), tenor_(tenor), settlementDays_(settlementDays),
49-
calendar_(std::move(calendar)), frequency_(frequency), paymentConvention_(paymentConvention),
50-
rule_(rule), dayCounter_(std::move(dayCounter)), recoveryRate_(recoveryRate),
51-
discountCurve_(discountCurve), settlesAccrual_(settlesAccrual),
52-
paysAtDefaultTime_(paysAtDefaultTime), lastPeriodDC_(std::move(lastPeriodDayCounter)),
53-
rebatesAccrual_(rebatesAccrual), model_(model), startDate_(startDate) {
54-
55-
CdsHelper::initializeDates();
56-
57-
registerWith(discountCurve);
58-
}
59-
60-
CdsHelper::CdsHelper(Rate quote,
32+
CdsHelper::CdsHelper(const std::variant<Rate, Handle<Quote>>& quote,
6133
const Period& tenor,
6234
Integer settlementDays,
6335
Calendar calendar,
@@ -136,7 +108,7 @@ namespace QuantLib {
136108
}
137109

138110
SpreadCdsHelper::SpreadCdsHelper(
139-
const Handle<Quote>& runningSpread,
111+
const std::variant<Rate, Handle<Quote>>& runningSpread,
140112
const Period& tenor,
141113
Integer settlementDays,
142114
const Calendar& calendar,
@@ -157,28 +129,6 @@ namespace QuantLib {
157129
recoveryRate, discountCurve, settlesAccrual, paysAtDefaultTime,
158130
startDate, lastPeriodDayCounter, rebatesAccrual, model) {}
159131

160-
SpreadCdsHelper::SpreadCdsHelper(
161-
Rate runningSpread,
162-
const Period& tenor,
163-
Integer settlementDays,
164-
const Calendar& calendar,
165-
Frequency frequency,
166-
BusinessDayConvention paymentConvention,
167-
DateGeneration::Rule rule,
168-
const DayCounter& dayCounter,
169-
Real recoveryRate,
170-
const Handle<YieldTermStructure>& discountCurve,
171-
bool settlesAccrual,
172-
bool paysAtDefaultTime,
173-
const Date& startDate,
174-
const DayCounter& lastPeriodDayCounter,
175-
const bool rebatesAccrual,
176-
const CreditDefaultSwap::PricingModel model)
177-
: CdsHelper(runningSpread, tenor, settlementDays, calendar,
178-
frequency, paymentConvention, rule, dayCounter,
179-
recoveryRate, discountCurve, settlesAccrual, paysAtDefaultTime,
180-
startDate, lastPeriodDayCounter,rebatesAccrual, model) {}
181-
182132
Real SpreadCdsHelper::impliedQuote() const {
183133
swap_->recalculate();
184134
return swap_->fairSpread();
@@ -207,7 +157,7 @@ namespace QuantLib {
207157
}
208158

209159
UpfrontCdsHelper::UpfrontCdsHelper(
210-
const Handle<Quote>& upfront,
160+
const std::variant<Rate, Handle<Quote>>& upfront,
211161
Rate runningSpread,
212162
const Period& tenor,
213163
Integer settlementDays,
@@ -233,33 +183,6 @@ namespace QuantLib {
233183
upfrontDate_(upfrontDate()),
234184
runningSpread_(runningSpread) {}
235185

236-
UpfrontCdsHelper::UpfrontCdsHelper(
237-
Rate upfrontSpread,
238-
Rate runningSpread,
239-
const Period& tenor,
240-
Integer settlementDays,
241-
const Calendar& calendar,
242-
Frequency frequency,
243-
BusinessDayConvention paymentConvention,
244-
DateGeneration::Rule rule,
245-
const DayCounter& dayCounter,
246-
Real recoveryRate,
247-
const Handle<YieldTermStructure>& discountCurve,
248-
Natural upfrontSettlementDays,
249-
bool settlesAccrual,
250-
bool paysAtDefaultTime,
251-
const Date& startDate,
252-
const DayCounter& lastPeriodDayCounter,
253-
const bool rebatesAccrual,
254-
const CreditDefaultSwap::PricingModel model)
255-
: CdsHelper(upfrontSpread, tenor, settlementDays, calendar,
256-
frequency, paymentConvention, rule, dayCounter,
257-
recoveryRate, discountCurve, settlesAccrual, paysAtDefaultTime,
258-
startDate, lastPeriodDayCounter, rebatesAccrual, model),
259-
upfrontSettlementDays_(upfrontSettlementDays),
260-
upfrontDate_(upfrontDate()),
261-
runningSpread_(runningSpread) {}
262-
263186
Date UpfrontCdsHelper::upfrontDate() {
264187
return calendar_.advance(evaluationDate_, upfrontSettlementDays_, Days, paymentConvention_);
265188
}

ql/termstructures/credit/defaultprobabilityhelpers.hpp

Lines changed: 3 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ namespace QuantLib {
7777
CDS after the Big Bang, this is typically \c true.
7878
@param model The pricing model to use for the helper.
7979
*/
80-
CdsHelper(const Handle<Quote>& quote,
80+
CdsHelper(const std::variant<Rate, Handle<Quote>>& quote,
8181
const Period& tenor,
8282
Integer settlementDays,
8383
Calendar calendar,
@@ -94,23 +94,6 @@ namespace QuantLib {
9494
bool rebatesAccrual = true,
9595
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
9696

97-
//! \copydoc CdsHelper::CdsHelper
98-
CdsHelper(Rate quote,
99-
const Period& tenor,
100-
Integer settlementDays,
101-
Calendar calendar,
102-
Frequency frequency,
103-
BusinessDayConvention paymentConvention,
104-
DateGeneration::Rule rule,
105-
DayCounter dayCounter,
106-
Real recoveryRate,
107-
const Handle<YieldTermStructure>& discountCurve,
108-
bool settlesAccrual = true,
109-
bool paysAtDefaultTime = true,
110-
const Date& startDate = Date(),
111-
DayCounter lastPeriodDayCounter = DayCounter(),
112-
bool rebatesAccrual = true,
113-
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
11497
void setTermStructure(DefaultProbabilityTermStructure*) override;
11598
// NOLINTNEXTLINE(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
11699
ext::shared_ptr<CreditDefaultSwap> swap() const {
@@ -147,7 +130,7 @@ namespace QuantLib {
147130
//! Spread-quoted CDS hazard rate bootstrap helper.
148131
class SpreadCdsHelper : public CdsHelper {
149132
public:
150-
SpreadCdsHelper(const Handle<Quote>& runningSpread,
133+
SpreadCdsHelper(const std::variant<Rate, Handle<Quote>>& runningSpread,
151134
const Period& tenor,
152135
Integer settlementDays,
153136
const Calendar& calendar,
@@ -164,23 +147,6 @@ namespace QuantLib {
164147
bool rebatesAccrual = true,
165148
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
166149

167-
SpreadCdsHelper(
168-
Rate runningSpread,
169-
const Period& tenor,
170-
Integer settlementDays, // ISDA: 1
171-
const Calendar& calendar,
172-
Frequency frequency, // ISDA: Quarterly
173-
BusinessDayConvention paymentConvention, // ISDA:Following
174-
DateGeneration::Rule rule, // ISDA: CDS
175-
const DayCounter& dayCounter, // ISDA: Actual/360
176-
Real recoveryRate,
177-
const Handle<YieldTermStructure>& discountCurve,
178-
bool settlesAccrual = true,
179-
bool paysAtDefaultTime = true,
180-
const Date& startDate = Date(),
181-
const DayCounter& lastPeriodDayCounter = DayCounter(), // ISDA: Actual/360(inc)
182-
bool rebatesAccrual = true, // ISDA: true
183-
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
184150
Real impliedQuote() const override;
185151

186152
private:
@@ -191,7 +157,7 @@ namespace QuantLib {
191157
class UpfrontCdsHelper : public CdsHelper {
192158
public:
193159
/*! \note the upfront must be quoted in fractional units. */
194-
UpfrontCdsHelper(const Handle<Quote>& upfront,
160+
UpfrontCdsHelper(const std::variant<Rate, Handle<Quote>>& upfront,
195161
Rate runningSpread,
196162
const Period& tenor,
197163
Integer settlementDays,
@@ -210,25 +176,6 @@ namespace QuantLib {
210176
bool rebatesAccrual = true,
211177
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
212178

213-
/*! \note the upfront must be quoted in fractional units. */
214-
UpfrontCdsHelper(Rate upfront,
215-
Rate runningSpread,
216-
const Period& tenor,
217-
Integer settlementDays,
218-
const Calendar& calendar,
219-
Frequency frequency,
220-
BusinessDayConvention paymentConvention,
221-
DateGeneration::Rule rule,
222-
const DayCounter& dayCounter,
223-
Real recoveryRate,
224-
const Handle<YieldTermStructure>& discountCurve,
225-
Natural upfrontSettlementDays = 3,
226-
bool settlesAccrual = true,
227-
bool paysAtDefaultTime = true,
228-
const Date& startDate = Date(),
229-
const DayCounter& lastPeriodDayCounter = DayCounter(),
230-
bool rebatesAccrual = true,
231-
CreditDefaultSwap::PricingModel model = CreditDefaultSwap::Midpoint);
232179
Real impliedQuote() const override;
233180

234181
private:

0 commit comments

Comments
 (0)