QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
settings.hpp
Go to the documentation of this file.
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2007, 2011 Ferdinando Ametrano
5 Copyright (C) 2007 François du Vignaud
6 Copyright (C) 2004, 2005, 2007, 2009 StatPro Italia srl
7
8 This file is part of QuantLib, a free-software/open-source library
9 for financial quantitative analysts and developers - http://quantlib.org/
10
11 QuantLib is free software: you can redistribute it and/or modify it
12 under the terms of the QuantLib license. You should have received a
13 copy of the license along with this program; if not, please email
14 <quantlib-dev@lists.sf.net>. The license is also available online at
15 <http://quantlib.org/license.shtml>.
16
17 This program is distributed in the hope that it will be useful, but WITHOUT
18 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19 FOR A PARTICULAR PURPOSE. See the license for more details.
20*/
21
22/*! \file settings.hpp
23 \brief global repository for run-time library settings
24*/
25
26#ifndef quantlib_settings_hpp
27#define quantlib_settings_hpp
28
30#include <ql/time/date.hpp>
32#include <ql/optional.hpp>
33
34namespace QuantLib {
35
36 //! global repository for run-time library settings
37 class Settings : public Singleton<Settings> {
38 friend class Singleton<Settings>;
39 private:
41 class DateProxy : public ObservableValue<Date> {
42 public:
43 DateProxy();
44 DateProxy& operator=(const Date&);
45 operator Date() const;
46 };
47 friend std::ostream& operator<<(std::ostream&, const DateProxy&);
48 public:
49 //! the date at which pricing is to be performed.
50 /*! Client code can inspect the evaluation date, as in:
51 \code
52 Date d = Settings::instance().evaluationDate();
53 \endcode
54 where today's date is returned if the evaluation date is
55 set to the null date (its default value;) can set it to a
56 new value, as in:
57 \code
58 Settings::instance().evaluationDate() = d;
59 \endcode
60 and can register with it, as in:
61 \code
62 registerWith(Settings::instance().evaluationDate());
63 \endcode
64 to be notified when it is set to a new value.
65 \warning a notification is not sent when the evaluation
66 date changes for natural causes---i.e., a date
67 was not explicitly set (which results in today's
68 date being used for pricing) and the current date
69 changes as the clock strikes midnight.
70 */
72 const DateProxy& evaluationDate() const;
73
74 /*! Call this to prevent the evaluation date to change at
75 midnight (and, incidentally, to gain quite a bit of
76 performance.) If no evaluation date was previously set,
77 it is equivalent to setting the evaluation date to
78 Date::todaysDate(); if an evaluation date other than
79 Date() was already set, it has no effect.
80 */
82 /*! Call this to reset the evaluation date to
83 Date::todaysDate() and allow it to change at midnight. It
84 is equivalent to setting the evaluation date to Date().
85 This comes at the price of losing some performance, since
86 the evaluation date is re-evaluated each time it is read.
87 */
89
90 /*! This flag specifies whether or not Events occurring on the reference
91 date should, by default, be taken into account as not happened yet.
92 It can be overridden locally when calling the Event::hasOccurred
93 method.
94 */
96 bool includeReferenceDateEvents() const;
97
98 /*! If set, this flag specifies whether or not CashFlows
99 occurring on today's date should enter the NPV. When the
100 NPV date (i.e., the date at which the cash flows are
101 discounted) equals today's date, this flag overrides the
102 behavior chosen for includeReferenceDate. It cannot be overridden
103 locally when calling the CashFlow::hasOccurred method.
104 */
105 ext::optional<bool>& includeTodaysCashFlows();
106 ext::optional<bool> includeTodaysCashFlows() const;
107
110
111 private:
114 ext::optional<bool> includeTodaysCashFlows_;
116 };
117
118
119 // helper class to temporarily and safely change the settings
120 class SavedSettings { // NOLINT(cppcoreguidelines-special-member-functions)
121 public:
124 private:
127 ext::optional<bool> includeTodaysCashFlows_;
129 };
130
131
132 // inline
133
134 inline Settings::DateProxy::operator Date() const {
135 if (value() == Date())
136 return Date::todaysDate();
137 else
138 return value();
139 }
140
142 if (value() != d) // avoid notifications if the date doesn't actually change
144 return *this;
145 }
146
148 return evaluationDate_;
149 }
150
152 return evaluationDate_;
153 }
154
157 }
158
161 }
162
163 inline ext::optional<bool>& Settings::includeTodaysCashFlows() {
165 }
166
167 inline ext::optional<bool> Settings::includeTodaysCashFlows() const {
169 }
170
173 }
174
177 }
178
179}
180
181#endif
Concrete date class.
Definition: date.hpp:125
static Date todaysDate()
today's date.
Definition: date.cpp:788
observable and assignable proxy to concrete value
ObservableValue< T > & operator=(T &&)
const Date & value() const
explicit inspector
ext::optional< bool > includeTodaysCashFlows_
Definition: settings.hpp:127
DateProxy & operator=(const Date &)
Definition: settings.hpp:141
global repository for run-time library settings
Definition: settings.hpp:37
void resetEvaluationDate()
Definition: settings.cpp:45
bool & includeReferenceDateEvents()
Definition: settings.hpp:155
bool enforcesTodaysHistoricFixings_
Definition: settings.hpp:115
DateProxy & evaluationDate()
the date at which pricing is to be performed.
Definition: settings.hpp:147
ext::optional< bool > & includeTodaysCashFlows()
Definition: settings.hpp:163
void anchorEvaluationDate()
Definition: settings.cpp:38
ext::optional< bool > includeTodaysCashFlows_
Definition: settings.hpp:114
bool includeReferenceDateEvents_
Definition: settings.hpp:113
DateProxy evaluationDate_
Definition: settings.hpp:112
friend std::ostream & operator<<(std::ostream &, const DateProxy &)
Definition: settings.cpp:29
bool & enforcesTodaysHistoricFixings()
Definition: settings.hpp:171
Basic support for the singleton pattern.
Definition: singleton.hpp:58
date- and time-related classes, typedefs and enumerations
Date d
Definition: any.hpp:35
observable and assignable proxy to concrete value
Maps optional to either the boost or std implementation.
basic support for the singleton pattern