1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
/*
Copyright (C) 2004, 2005 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
<quantlib-dev@lists.sf.net>. The license is also available online at
<https://www.quantlib.org/license.shtml>.
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.
*/
/*! \page config User configuration
A number of macros is provided for user configuration. Defining
or undefining such macros triggers variations in some library
functionality.
When using CMake, they can be set to `ON` or `OFF` as properties.
Under a Linux/Unix system, they are (un)set by `configure`;
run
\code
./configure --help
\endcode
for a list of corresponding command-line options.
Under a Windows system, they must be (un)defined by editing the
file `<ql/userconfig.hpp>` and commenting or uncommenting the
relevant lines.
Such macros include:
\code
#define QL_ERROR_FUNCTIONS
\endcode
If defined, function information is added to the error messages
thrown by the library. Undefined by default.
\code
#define QL_ERROR_LINES
\endcode
If defined, file and line information is added to the error
messages thrown by the library. Undefined by default.
\code
#define QL_ENABLE_TRACING
\endcode
If defined, tracing messages might be emitted by the library
depending on run-time settings. Enabling this option can degrade
performance. Undefined by default.
\code
#define QL_EXTRA_SAFETY_CHECKS
\endcode
If defined, extra run-time checks are added to a few
functions. This can prevent their inlining and degrade
performance. Undefined by default.
\code
#define QL_USE_INDEXED_COUPON
\endcode
If defined, indexed coupons (see the documentation) are used in
floating legs. If undefined (the default), par coupons are used.
\code
#define QL_ENABLE_SESSIONS
\endcode
If defined, singletons will return different instances for
different threads; in particular, this means that the evaluation
date, the stored index fixings and any other settings will be
per-thread. Undefined by default.
\code
#define QL_ENABLE_THREAD_SAFE_OBSERVER_PATTERN
\endcode
If defined, a thread-safe (but less performant) version of the
observer pattern is used. You should define it if you want to use
%QuantLib via the SWIG layer within the JVM or .NET ecosystem or
any other environment with an async garbage collector. Undefined
by default.
\code
#define QL_HIGH_RESOLUTION_DATE
\endcode
If defined, date objects willsupport an intraday datetime
resolution down to microseconds. Strictly monotone daycounters
(`Actual360`, `Actual365Fixed` and `ActualActual`) will take the
additional information into account and allow for accurate
intraday pricing. If undefined (the default) the smallest
resolution of date objects is a single day. Intraday
datetime resolution is experimental.
\code
#define QL_THROW_IN_CYCLES
\endcode
If defined, lazy objects will raise an exception when they detect
a notification cycle which would result in an infinite recursion
loop. If undefined (the default), they will break the recursion
without throwing. Enabling this option is recommended but might
cause existing code to throw.
\code
#define QL_FASTER_LAZY_OBJECTS
\endcode
If defined (the default), lazy objects will forward the first
notification received, and discard the others until recalculated;
the rationale is that observers were already notified, and don't
need further notifications until they recalculate, at which point
this object would be recalculated too. After recalculation, this
object would again forward the first notification received.
Although not always correct, this behavior is a lot faster and
thus is the current default.
\code
#define QL_USE_STD_ANY
\endcode
If defined (the default), `std::any` and related classes and
functions will be used instead of `boost::any`. If undefined, the
Boost facilities will be used.
\code
#define QL_USE_STD_OPTIONAL
\endcode
If defined (the default), `std::optional` and related classes and
functions will be used instead of `boost::optional`. If undefined,
the Boost facilities will be used.
\code
#define QL_USE_STD_SHARED_PTR
\endcode
If defined, `std::shared_ptr` and related classes and functions
will used instead of `boost::shared_ptr`. If undefined (the
default) the Boost facilities will be used. Note that
`std::shared_ptr` does not check access and can cause segmentation
faults.
\code
#define QL_NULL_AS_FUNCTIONS
\endcode
If defined, `Null` will be implemented as a template function.
This allows the code to work with user-defined `Real` types but
was reported to cause internal compiler errors with Visual C++
2022 in some cases. If undefined (the default) `Null` will be
implemented as a class template, as in previous releases.
\code
#define QL_ENABLE_PARALLEL_UNIT_TEST_RUNNER
\endcode
If defined, a parallel unit test runner will be used to execute
the C++ test suite. This will reduce the runtime on multi core
CPUs. Undefined by default.
*/
|