Posted by
Dirk Eddelbuettel on
URL: http://quantlib.414.s1.nabble.com/Re-Bug-266454-quantlib-FTBFS-with-gcc-3-4-this-missing-tp10633.html
Andreas,
Thanks for the detailed bug report and patch. I think I won't make
a new release quite yet given how gcc / g++ 3.3 are still the default -- and
QuantLib may have a 0.3.8 release before we switch to 3.4.
QuantLib crew,
Haven't checked with CVS whether this is already in the sources; if
it isn't this may make a nice addition.
Cheers, Dirk
On Wed, Aug 18, 2004 at 12:28:16AM +0200, Andreas Jochens wrote:
> Package: quantlib
> Severity: normal
> Tags: patch
>
> With the attached patch 'quantlib' can be compiled using gcc-3.4.
>
> Regards
> Andreas Jochens
>
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/CashFlows/shortindexedcoupon.hpp ./ql/CashFlows/shortindexedcoupon.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/CashFlows/shortindexedcoupon.hpp 2004-05-12 11:46:10.000000000 +0200
> +++ ./ql/CashFlows/shortindexedcoupon.hpp 2004-08-18 00:06:02.164098553 +0200
> @@ -53,9 +53,9 @@
> Real amount() const {
> QL_FAIL("short/long indexed coupons not supported yet"
> " (start = " +
> - DateFormatter::toString(accrualStartDate_) +
> + DateFormatter::toString(this->accrualStartDate_) +
> ", end = " +
> - DateFormatter::toString(accrualEndDate_) + ")");
> + DateFormatter::toString(this->accrualEndDate_) + ")");
> }
> };
>
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/bicubicsplineinterpolation.hpp ./ql/Math/bicubicsplineinterpolation.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/bicubicsplineinterpolation.hpp 2004-05-12 18:16:52.000000000 +0200
> +++ ./ql/Math/bicubicsplineinterpolation.hpp 2004-08-17 23:43:16.623692249 +0200
> @@ -42,16 +42,16 @@
> : Interpolation2D::templateImpl<I1,I2,M>(xBegin,xEnd,
> yBegin,yEnd,
> zData) {
> - for (Size i=0; i<zData_.rows(); i++)
> + for (Size i=0; i<this->zData_.rows(); i++)
> splines_.push_back(NaturalCubicSpline(
> - xBegin, xEnd, zData_.row_begin(i)));
> + xBegin, xEnd, this->zData_.row_begin(i)));
> }
> Real value(Real x, Real y) const {
> std::vector<Real> section(splines_.size());
> for (Size i=0; i<splines_.size(); i++)
> section[i]=splines_[i](x,true);
>
> - NaturalCubicSpline spline(yBegin_, yEnd_, section.begin());
> + NaturalCubicSpline spline(this->yBegin_, this->yEnd_, section.begin());
> return spline(y,true);
> }
> private:
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/bilinearinterpolation.hpp ./ql/Math/bilinearinterpolation.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/bilinearinterpolation.hpp 2004-05-12 18:16:52.000000000 +0200
> +++ ./ql/Math/bilinearinterpolation.hpp 2004-08-17 23:54:17.673197449 +0200
> @@ -40,15 +40,15 @@
> yBegin,yEnd,
> zData) {}
> Real value(Real x, Real y) const {
> - Size i = locateX(x), j = locateY(y);
> + Size i = this->locateX(x), j = this->locateY(y);
>
> - Real z1=zData_[j][i];
> - Real z2=zData_[j][i+1];
> - Real z3=zData_[j+1][i];
> - Real z4=zData_[j+1][i+1];
> + Real z1=this->zData_[j][i];
> + Real z2=this->zData_[j][i+1];
> + Real z3=this->zData_[j+1][i];
> + Real z4=this->zData_[j+1][i+1];
>
> - Real t=(x-xBegin_[i])/(xBegin_[i+1]-xBegin_[i]);
> - Real u=(y-yBegin_[j])/(yBegin_[j+1]-yBegin_[j]);
> + Real t=(x-this->xBegin_[i])/(this->xBegin_[i+1]-this->xBegin_[i]);
> + Real u=(y-this->yBegin_[j])/(this->yBegin_[j+1]-this->yBegin_[j]);
>
> return (1.0-t)*(1.0-u)*z1 + t*(1.0-u)*z2
> + (1.0-t)*u*z3 + t*u*z4;
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/cubicspline.hpp ./ql/Math/cubicspline.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/cubicspline.hpp 2004-05-17 18:39:49.000000000 +0200
> +++ ./ql/Math/cubicspline.hpp 2004-08-17 21:56:04.049592153 +0200
> @@ -96,11 +96,11 @@
> std::vector<Real> dx(n_-1), S(n_-1);
>
> Size i=0;
> - dx[i]= xBegin_[i+1] - xBegin_[i];
> - S[i] =(yBegin_[i+1] - yBegin_[i])/dx[i];
> + dx[i]= this->xBegin_[i+1] - this->xBegin_[i];
> + S[i] =(this->yBegin_[i+1] - this->yBegin_[i])/dx[i];
> for (i=1; i<n_-1; i++) {
> - dx[i]= xBegin_[i+1] - xBegin_[i];
> - S[i] =(yBegin_[i+1] - yBegin_[i])/dx[i];
> + dx[i]= this->xBegin_[i+1] - this->xBegin_[i];
> + S[i] =(this->yBegin_[i+1] - this->yBegin_[i])/dx[i];
>
> L.setMidRow(i, dx[i], 2.0*(dx[i]+dx[i-1]), dx[i-1]);
> tmp[i] = 3.0*(dx[i]*S[i-1] + dx[i-1]*S[i]);
> @@ -234,30 +234,30 @@
> for (i=1; i<n_-1; i++) {
> primitiveConst_[i] = primitiveConst_[i-1]
> + dx[i-1] *
> - (yBegin_[i-1] + dx[i-1] *
> + (this->yBegin_[i-1] + dx[i-1] *
> (a_[i-1]/2.0 + dx[i-1] *
> (b_[i-1]/3.0 + dx[i-1] * c_[i-1]/4.0)));
> }
> }
> Real value(Real x) const {
> - Size j = locate(x);
> - Real dx = x-xBegin_[j];
> - return yBegin_[j] + dx*(a_[j] + dx*(b_[j] + dx*c_[j]));
> + Size j = this->locate(x);
> + Real dx = x-this->xBegin_[j];
> + return this->yBegin_[j] + dx*(a_[j] + dx*(b_[j] + dx*c_[j]));
> }
> Real primitive(Real x) const {
> - Size j = locate(x);
> - Real dx = x-xBegin_[j];
> - return primitiveConst_[j] + dx*(yBegin_[j] + dx*(a_[j]/2.0
> + Size j = this->locate(x);
> + Real dx = x-this->xBegin_[j];
> + return primitiveConst_[j] + dx*(this->yBegin_[j] + dx*(a_[j]/2.0
> + dx*(b_[j]/3.0 + dx*c_[j]/4.0)));
> }
> Real derivative(Real x) const {
> - Size j = locate(x);
> - Real dx = x-xBegin_[j];
> + Size j = this->locate(x);
> + Real dx = x-this->xBegin_[j];
> return a_[j] + (2.0*b_[j] + 3.0*c_[j]*dx)*dx;
> }
> Real secondDerivative(Real x) const {
> - Size j = locate(x);
> - Real dx = x-xBegin_[j];
> + Size j = this->locate(x);
> + Real dx = x-this->xBegin_[j];
> return 2.0*b_[j] + 6.0*c_[j]*dx;
> }
> private:
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/gaussianstatistics.hpp ./ql/Math/gaussianstatistics.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/gaussianstatistics.hpp 2004-05-18 15:05:24.000000000 +0200
> +++ ./ql/Math/gaussianstatistics.hpp 2004-08-17 23:58:18.389602993 +0200
> @@ -120,8 +120,8 @@
> template<class Stat>
> inline
> Real GaussianStatistics<Stat>::gaussianRegret(Real target) const {
> - Real m = mean();
> - Real std = standardDeviation();
> + Real m = this->mean();
> + Real std = this->standardDeviation();
> Real variance = std*std;
> CumulativeNormalDistribution gIntegral(m, std);
> NormalDistribution g(m, std);
> @@ -197,8 +197,8 @@
> DecimalFormatter::toString(percentile) +
> ") out of range [0.9, 1.0)");
>
> - Real m = mean();
> - Real std = standardDeviation();
> + Real m = this->mean();
> + Real std = this->standardDeviation();
> InverseCumulativeNormal gInverse(m, std);
> Real var = gInverse(1.0-percentile);
> NormalDistribution g(m, std);
> @@ -213,8 +213,8 @@
> template<class Stat>
> inline Real GaussianStatistics<Stat>::gaussianShortfall(
> Real target) const {
> - CumulativeNormalDistribution gIntegral(mean(),
> - standardDeviation());
> + CumulativeNormalDistribution gIntegral(this->mean(),
> + this->standardDeviation());
> return gIntegral(target);
> }
>
> @@ -222,8 +222,8 @@
> template<class Stat>
> inline Real GaussianStatistics<Stat>::gaussianAverageShortfall(
> Real target) const {
> - Real m = mean();
> - Real std = standardDeviation();
> + Real m = this->mean();
> + Real std = this->standardDeviation();
> CumulativeNormalDistribution gIntegral(m, std);
> NormalDistribution g(m, std);
> return ( (target-m) + std*std*g(target)/gIntegral(target) );
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/linearinterpolation.hpp ./ql/Math/linearinterpolation.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/linearinterpolation.hpp 2004-05-18 12:43:26.000000000 +0200
> +++ ./ql/Math/linearinterpolation.hpp 2004-08-17 23:42:27.772118817 +0200
> @@ -37,24 +37,24 @@
> primitiveConst_(xEnd-xBegin), s_(xEnd-xBegin) {
> primitiveConst_[0] = 0.0;
> for (Size i=1; i<Size(xEnd-xBegin); i++) {
> - Real dx = xBegin_[i]-xBegin_[i-1];
> - s_[i-1] = (yBegin_[i]-yBegin_[i-1])/dx;
> + Real dx = this->xBegin_[i]-this->xBegin_[i-1];
> + s_[i-1] = (this->yBegin_[i]-this->yBegin_[i-1])/dx;
> primitiveConst_[i] = primitiveConst_[i-1]
> - + dx*(yBegin_[i-1] +0.5*dx*s_[i-1]);
> + + dx*(this->yBegin_[i-1] +0.5*dx*s_[i-1]);
> }
> }
> Real value(Real x) const {
> - Size i = locate(x);
> - return yBegin_[i] + (x-xBegin_[i])*s_[i];
> + Size i = this->locate(x);
> + return this->yBegin_[i] + (x-this->xBegin_[i])*s_[i];
> }
> Real primitive(Real x) const {
> - Size i = locate(x);
> - Real dx = x-xBegin_[i];
> + Size i = this->locate(x);
> + Real dx = x-this->xBegin_[i];
> return primitiveConst_[i] +
> - dx*(yBegin_[i] + 0.5*dx*s_[i]);
> + dx*(this->yBegin_[i] + 0.5*dx*s_[i]);
> }
> Real derivative(Real x) const {
> - Size i = locate(x);
> + Size i = this->locate(x);
> return s_[i];
> }
> Real secondDerivative(Real) const {
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/Math/riskstatistics.hpp ./ql/Math/riskstatistics.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/Math/riskstatistics.hpp 2004-05-18 15:05:24.000000000 +0200
> +++ ./ql/Math/riskstatistics.hpp 2004-08-18 00:03:28.948390881 +0200
> @@ -124,7 +124,7 @@
>
> template <class S>
> inline Real GenericRiskStatistics<S>::semiVariance() const {
> - return regret(mean());
> + return regret(this->mean());
> }
>
> template <class S>
> @@ -148,7 +148,7 @@
> Real GenericRiskStatistics<S>::regret(Real target) const {
> // average over the range below the target
> std::pair<Real,Size> result =
> - expectationValue(compose(square<Real>(),
> + this->expectationValue(compose(square<Real>(),
> std::bind2nd(std::minus<Real>(),
> target)),
> std::bind2nd(std::less<Real>(),
> @@ -170,7 +170,7 @@
> ") out of range [0.9, 1.0)");
>
> // must be a gain, i.e., floored at 0.0
> - return QL_MAX<Real>(topPercentile(1.0-centile), 0.0);
> + return QL_MAX<Real>(this->topPercentile(1.0-centile), 0.0);
> }
>
> /*! \pre percentile must be in range [90%-100%) */
> @@ -183,7 +183,7 @@
> ") out of range [0.9, 1.0)");
>
> // must be a loss, i.e., capped at 0.0 and negated
> - return -QL_MIN<Real>(percentile(1.0-centile), 0.0);
> + return -QL_MIN<Real>(this->percentile(1.0-centile), 0.0);
> }
>
> /*! \pre percentile must be in range [90%-100%) */
> @@ -194,10 +194,10 @@
> DecimalFormatter::toString(centile) +
> ") out of range [0.9, 1.0)");
>
> - QL_ENSURE(samples() != 0, "empty sample set");
> + QL_ENSURE(this->samples() != 0, "empty sample set");
> Real target = -valueAtRisk(centile);
> std::pair<Real,Size> result =
> - expectationValue(identity<Real>(),
> + this->expectationValue(identity<Real>(),
> std::bind2nd(std::less<Real>(),
> target));
> Real x = result.first;
> @@ -209,8 +209,8 @@
>
> template <class S>
> Real GenericRiskStatistics<S>::shortfall(Real target) const {
> - QL_ENSURE(samples() != 0, "empty sample set");
> - return expectationValue(clip(constant<Real,Real>(1.0),
> + QL_ENSURE(this->samples() != 0, "empty sample set");
> + return this->expectationValue(clip(constant<Real,Real>(1.0),
> std::bind2nd(std::less<Real>(),
> target)),
> everywhere()).first;
> @@ -220,7 +220,7 @@
> Real GenericRiskStatistics<S>::averageShortfall(Real target)
> const {
> std::pair<Real,Size> result =
> - expectationValue(std::bind1st(std::minus<Real>(),
> + this->expectationValue(std::bind1st(std::minus<Real>(),
> target),
> std::bind2nd(std::less<Real>(),
> target));
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Barrier/mcbarrierengine.hpp ./ql/PricingEngines/Barrier/mcbarrierengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Barrier/mcbarrierengine.hpp 2004-05-17 18:40:06.000000000 +0200
> +++ ./ql/PricingEngines/Barrier/mcbarrierengine.hpp 2004-08-17 21:56:04.049592153 +0200
> @@ -174,7 +174,7 @@
>
> // do this with template parameters?
> if (isBiased_) {
> - return boost::shared_ptr<MCBarrierEngine<RNG,S>::path_pricer_type>(
> + return boost::shared_ptr<typename MCBarrierEngine<RNG,S>::path_pricer_type>(
> new BiasedBarrierPathPricer(
> arguments_.barrierType,
> arguments_.barrier,
> @@ -192,7 +192,7 @@
> RelinkableHandle<TermStructure> dividend(process->dividendYield());
> RelinkableHandle<BlackVolTermStructure> volatility(
> process->blackVolatility());
> - return boost::shared_ptr<MCBarrierEngine<RNG,S>::path_pricer_type>(
> + return boost::shared_ptr<typename MCBarrierEngine<RNG,S>::path_pricer_type>(
> new BarrierPathPricer(
> arguments_.barrierType,
> arguments_.barrier,
> @@ -231,16 +231,16 @@
> "not an European Option");
>
> //! Initialize the one-factor Monte Carlo
> - if (controlVariate_) {
> + if (this->controlVariate_) {
>
> boost::shared_ptr<path_pricer_type> controlPP =
> - controlPathPricer();
> + this->controlPathPricer();
> QL_REQUIRE(controlPP,
> "engine does not provide "
> "control variation path pricer");
>
> boost::shared_ptr<PricingEngine> controlPE =
> - controlPricingEngine();
> + this->controlPricingEngine();
>
> QL_REQUIRE(controlPE,
> "engine does not provide "
> @@ -257,34 +257,34 @@
> controlPE->results());
> Real controlVariateValue = controlResults->value;
>
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<SingleAsset<RNG>, S> >(
> new MonteCarloModel<SingleAsset<RNG>, S>(
> pathGenerator(), pathPricer(), stats_type(),
> - antitheticVariate_, controlPP,
> + this->antitheticVariate_, controlPP,
> controlVariateValue));
> */
> } else {
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<SingleAsset<RNG>, S> >(
> new MonteCarloModel<SingleAsset<RNG>, S>(
> pathGenerator(), pathPricer(), S(),
> - antitheticVariate_));
> + this->antitheticVariate_));
> }
>
> if (requiredTolerance_ != Null<Real>()) {
> if (maxSamples_ != Null<Size>())
> - value(requiredTolerance_, maxSamples_);
> + this->value(requiredTolerance_, maxSamples_);
> else
> - value(requiredTolerance_);
> + this->value(requiredTolerance_);
> } else {
> - valueWithSamples(requiredSamples_);
> + this->valueWithSamples(requiredSamples_);
> }
>
> - results_.value = mcModel_->sampleAccumulator().mean();
> + results_.value = this->mcModel_->sampleAccumulator().mean();
> if (RNG::allowsErrorEstimate)
> results_.errorEstimate =
> - mcModel_->sampleAccumulator().errorEstimate();
> + this->mcModel_->sampleAccumulator().errorEstimate();
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Basket/mcbasketengine.hpp ./ql/PricingEngines/Basket/mcbasketengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Basket/mcbasketengine.hpp 2004-05-13 18:30:08.000000000 +0200
> +++ ./ql/PricingEngines/Basket/mcbasketengine.hpp 2004-08-17 23:27:30.835473913 +0200
> @@ -144,7 +144,7 @@
> ->stateVariable()->value();
> }
>
> - return boost::shared_ptr<MCBasketEngine<RNG,S>::path_pricer_type>(new
> + return boost::shared_ptr<typename MCBasketEngine<RNG,S>::path_pricer_type>(new
> EuropeanMultiPathPricer(
> arguments_.basketType,
> payoff->optionType(),
> @@ -179,16 +179,16 @@
> "not an European Option");
> */
> //! Initialize the multi-factor Monte Carlo
> - if (controlVariate_) {
> + if (this->controlVariate_) {
>
> boost::shared_ptr<path_pricer_type> controlPP =
> - controlPathPricer();
> + this->controlPathPricer();
> QL_REQUIRE(controlPP,
> "engine does not provide "
> "control variation path pricer");
>
> boost::shared_ptr<PricingEngine> controlPE =
> - controlPricingEngine();
> + this->controlPricingEngine();
>
> QL_REQUIRE(controlPE,
> "engine does not provide "
> @@ -205,34 +205,34 @@
> controlPE->results());
> Real controlVariateValue = controlResults->value;
>
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<MultiAsset<RNG>, S> >(
> new MonteCarloModel<MultiAsset<RNG>, S>(
> pathGenerator(), pathPricer(), stats_type(),
> - antitheticVariate_, controlPP,
> + this->antitheticVariate_, controlPP,
> controlVariateValue));
>
> } else {
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<MultiAsset<RNG>, S> >(
> new MonteCarloModel<MultiAsset<RNG>, S>(
> pathGenerator(), pathPricer(), S(),
> - antitheticVariate_));
> + this->antitheticVariate_));
> }
>
> if (requiredTolerance_ != Null<Real>()) {
> if (maxSamples_ != Null<Size>())
> - value(requiredTolerance_, maxSamples_);
> + this->value(requiredTolerance_, maxSamples_);
> else
> - value(requiredTolerance_);
> + this->value(requiredTolerance_);
> } else {
> - valueWithSamples(requiredSamples_);
> + this->valueWithSamples(requiredSamples_);
> }
>
> - results_.value = mcModel_->sampleAccumulator().mean();
> + results_.value = this->mcModel_->sampleAccumulator().mean();
> if (RNG::allowsErrorEstimate)
> results_.errorEstimate =
> - mcModel_->sampleAccumulator().errorEstimate();
> + this->mcModel_->sampleAccumulator().errorEstimate();
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Forward/forwardengine.hpp ./ql/PricingEngines/Forward/forwardengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Forward/forwardengine.hpp 2004-05-13 16:53:49.000000000 +0200
> +++ ./ql/PricingEngines/Forward/forwardengine.hpp 2004-08-17 21:57:49.015634889 +0200
> @@ -69,10 +69,10 @@
> QL_REQUIRE(moneyness > 0.0, "negative or zero moneyness given");
>
> QL_REQUIRE(resetDate != Null<Date>(), "null reset date given");
> - QL_REQUIRE(resetDate >= blackScholesProcess->riskFreeRate()
> + QL_REQUIRE(resetDate >= this->blackScholesProcess->riskFreeRate()
> ->referenceDate(),
> "reset date later than settlement");
> - QL_REQUIRE(exercise->lastDate() > resetDate,
> + QL_REQUIRE(this->exercise->lastDate() > resetDate,
> "reset date later or equal to maturity");
> }
>
> @@ -95,15 +95,15 @@
> const {
>
> boost::shared_ptr<StrikedTypePayoff> argumentsPayoff =
> - boost::dynamic_pointer_cast<StrikedTypePayoff>(arguments_.payoff);
> + boost::dynamic_pointer_cast<StrikedTypePayoff>(this->arguments_.payoff);
> QL_REQUIRE(argumentsPayoff, "wrong payoff given");
>
> const boost::shared_ptr<BlackScholesProcess>& process =
> - arguments_.blackScholesProcess;
> + this->arguments_.blackScholesProcess;
>
> boost::shared_ptr<StrikedTypePayoff> payoff(
> new PlainVanillaPayoff(argumentsPayoff->optionType(),
> - arguments_.moneyness *
> + this->arguments_.moneyness *
> process->stateVariable()->value()));
> originalArguments_->payoff = payoff;
>
> @@ -115,14 +115,14 @@
> boost::shared_ptr<TermStructure>(
> new ImpliedTermStructure(
> RelinkableHandle<TermStructure>(process->dividendYield()),
> - arguments_.resetDate,
> - arguments_.resetDate)));
> + this->arguments_.resetDate,
> + this->arguments_.resetDate)));
> RelinkableHandle<TermStructure> riskFreeRate(
> boost::shared_ptr<TermStructure>(
> new ImpliedTermStructure(
> RelinkableHandle<TermStructure>(process->riskFreeRate()),
> - arguments_.resetDate,
> - arguments_.resetDate)));
> + this->arguments_.resetDate,
> + this->arguments_.resetDate)));
> // The following approach is ok if the vol is at most
> // time dependant. It is plain wrong if it is asset dependant.
> // In the latter case the right solution would be stochastic
> @@ -133,14 +133,14 @@
> new ImpliedVolTermStructure(
> RelinkableHandle<BlackVolTermStructure>(
> process->blackVolatility()),
> - arguments_.resetDate)));
> + this->arguments_.resetDate)));
>
> originalArguments_->blackScholesProcess =
> boost::shared_ptr<BlackScholesProcess>(
> new BlackScholesProcess(spot, dividendYield,
> riskFreeRate, blackVolatility));
>
> - originalArguments_->exercise = arguments_.exercise;
> + originalArguments_->exercise = this->arguments_.exercise;
>
> originalArguments_->validate();
> }
> @@ -158,25 +158,25 @@
> const {
>
> const boost::shared_ptr<BlackScholesProcess>& process =
> - arguments_.blackScholesProcess;
> + this->arguments_.blackScholesProcess;
>
> Time resetTime = process->riskFreeRate()->dayCounter().yearFraction(
> process->riskFreeRate()->referenceDate(),
> - arguments_.resetDate);
> + this->arguments_.resetDate);
> DiscountFactor discQ = process->dividendYield()->discount(
> - arguments_.resetDate);
> + this->arguments_.resetDate);
>
> - results_.value = discQ * originalResults_->value;
> + this->results_.value = discQ * originalResults_->value;
> // I need the strike derivative here ...
> - results_.delta = discQ * (originalResults_->delta +
> - arguments_.moneyness * originalResults_->strikeSensitivity);
> - results_.gamma = 0.0;
> - results_.theta = process->dividendYield()->zeroYield(
> - arguments_.resetDate)
> - * results_.value;
> - results_.vega = discQ * originalResults_->vega;
> - results_.rho = discQ * originalResults_->rho;
> - results_.dividendRho = - resetTime * results_.value
> + this->results_.delta = discQ * (originalResults_->delta +
> + this->arguments_.moneyness * originalResults_->strikeSensitivity);
> + this->results_.gamma = 0.0;
> + this->results_.theta = process->dividendYield()->zeroYield(
> + this->arguments_.resetDate)
> + * this->results_.value;
> + this->results_.vega = discQ * originalResults_->vega;
> + this->results_.rho = discQ * originalResults_->rho;
> + this->results_.dividendRho = - resetTime * this->results_.value
> + discQ * originalResults_->dividendRho;
> }
>
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Forward/forwardperformanceengine.hpp ./ql/PricingEngines/Forward/forwardperformanceengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Forward/forwardperformanceengine.hpp 2004-05-13 16:53:49.000000000 +0200
> +++ ./ql/PricingEngines/Forward/forwardperformanceengine.hpp 2004-08-18 00:06:48.855000457 +0200
> @@ -52,8 +52,8 @@
> void ForwardPerformanceEngine<ArgumentsType, ResultsType>::calculate()
> const {
>
> - setOriginalArguments();
> - originalEngine_->calculate();
> + this->setOriginalArguments();
> + this->originalEngine_->calculate();
> getOriginalResults();
> }
>
> @@ -62,27 +62,27 @@
> getOriginalResults() const {
>
> const boost::shared_ptr<BlackScholesProcess>& process =
> - arguments_.blackScholesProcess;
> + this->arguments_.blackScholesProcess;
>
> Time resetTime = process->riskFreeRate()->dayCounter().yearFraction(
> process->riskFreeRate()->referenceDate(),
> - arguments_.resetDate);
> + this->arguments_.resetDate);
> DiscountFactor discR =
> - process->riskFreeRate()->discount(arguments_.resetDate);
> + process->riskFreeRate()->discount(this->arguments_.resetDate);
> // it's a performance option
> discR /= process->stateVariable()->value();
>
> - Real temp = originalResults_->value;
> - results_.value = discR * temp;
> - results_.delta = 0.0;
> - results_.gamma = 0.0;
> - results_.theta = process->riskFreeRate()->zeroYield(
> - arguments_.resetDate)
> - * results_.value;
> - results_.vega = discR * originalResults_->vega;
> - results_.rho = - resetTime * results_.value +
> - discR * originalResults_->rho;
> - results_.dividendRho = discR * originalResults_->dividendRho;
> + Real temp = this->originalResults_->value;
> + this->results_.value = discR * temp;
> + this->results_.delta = 0.0;
> + this->results_.gamma = 0.0;
> + this->results_.theta = process->riskFreeRate()->zeroYield(
> + this->arguments_.resetDate)
> + * this->results_.value;
> + this->results_.vega = discR * this->originalResults_->vega;
> + this->results_.rho = - resetTime * this->results_.value +
> + discR * this->originalResults_->rho;
> + this->results_.dividendRho = discR * this->originalResults_->dividendRho;
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Quanto/quantoengine.hpp ./ql/PricingEngines/Quanto/quantoengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Quanto/quantoengine.hpp 2004-05-13 16:53:50.000000000 +0200
> +++ ./ql/PricingEngines/Quanto/quantoengine.hpp 2004-08-17 21:56:04.052591697 +0200
> @@ -117,14 +117,14 @@
>
> // determine strike from payoff
> boost::shared_ptr<StrikedTypePayoff> payoff =
> - boost::dynamic_pointer_cast<StrikedTypePayoff>(arguments_.payoff);
> + boost::dynamic_pointer_cast<StrikedTypePayoff>(this->arguments_.payoff);
> QL_REQUIRE(payoff, "non-striked payoff given");
> Real strike = payoff->strike();
>
> - originalArguments_->payoff = arguments_.payoff;
> + originalArguments_->payoff = this->arguments_.payoff;
>
> const boost::shared_ptr<BlackScholesProcess>& process =
> - arguments_.blackScholesProcess;
> + this->arguments_.blackScholesProcess;
>
> RelinkableHandle<Quote> spot(process->stateVariable());
> RelinkableHandle<TermStructure> riskFreeRate(process->riskFreeRate());
> @@ -134,11 +134,11 @@
> new QuantoTermStructure(
> RelinkableHandle<TermStructure>(process->dividendYield()),
> RelinkableHandle<TermStructure>(process->riskFreeRate()),
> - arguments_.foreignRiskFreeTS,
> + this->arguments_.foreignRiskFreeTS,
> RelinkableHandle<BlackVolTermStructure>(
> process->blackVolatility()),
> - strike, arguments_.exchRateVolTS, exchangeRateATMlevel,
> - arguments_.correlation)));
> + strike, this->arguments_.exchRateVolTS, exchangeRateATMlevel,
> + this->arguments_.correlation)));
> RelinkableHandle<BlackVolTermStructure> blackVol(
> process->blackVolatility());
> originalArguments_->blackScholesProcess =
> @@ -146,36 +146,36 @@
> new BlackScholesProcess(spot, dividendYield,
> riskFreeRate, blackVol));
>
> - originalArguments_->exercise = arguments_.exercise;
> + originalArguments_->exercise = this->arguments_.exercise;
>
> originalArguments_->validate();
> originalEngine_->calculate();
>
> - results_.value = originalResults_->value;
> - results_.delta = originalResults_->delta;
> - results_.gamma = originalResults_->gamma;
> - results_.theta = originalResults_->theta;
> - results_.rho = originalResults_->rho +
> + this->results_.value = originalResults_->value;
> + this->results_.delta = originalResults_->delta;
> + this->results_.gamma = originalResults_->gamma;
> + this->results_.theta = originalResults_->theta;
> + this->results_.rho = originalResults_->rho +
> originalResults_->dividendRho;
> - results_.dividendRho = originalResults_->dividendRho;
> - Volatility exchangeRateFlatVol = arguments_.exchRateVolTS->blackVol(
> - arguments_.exercise->lastDate(),
> + this->results_.dividendRho = originalResults_->dividendRho;
> + Volatility exchangeRateFlatVol = this->arguments_.exchRateVolTS->blackVol(
> + this->arguments_.exercise->lastDate(),
> exchangeRateATMlevel);
> - results_.vega = originalResults_->vega +
> - arguments_.correlation * exchangeRateFlatVol *
> + this->results_.vega = originalResults_->vega +
> + this->arguments_.correlation * exchangeRateFlatVol *
> originalResults_->dividendRho;
>
>
> Volatility volatility = process->blackVolatility()->blackVol(
> - arguments_.exercise->lastDate(),
> + this->arguments_.exercise->lastDate(),
> process->stateVariable()->value());
> - results_.qvega = + arguments_.correlation
> + this->results_.qvega = + this->arguments_.correlation
> * process->blackVolatility()->blackVol(
> - arguments_.exercise->lastDate(),
> + this->arguments_.exercise->lastDate(),
> process->stateVariable()->value()) *
> originalResults_->dividendRho;
> - results_.qrho = - originalResults_->dividendRho;
> - results_.qlambda = exchangeRateFlatVol *
> + this->results_.qrho = - originalResults_->dividendRho;
> + this->results_.qlambda = exchangeRateFlatVol *
> volatility * originalResults_->dividendRho;
> }
>
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mcdigitalengine.hpp ./ql/PricingEngines/Vanilla/mcdigitalengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mcdigitalengine.hpp 2004-05-17 18:40:10.000000000 +0200
> +++ ./ql/PricingEngines/Vanilla/mcdigitalengine.hpp 2004-08-17 23:40:24.356880785 +0200
> @@ -154,25 +154,25 @@
> MCDigitalEngine<RNG,S>::pathPricer() const {
>
> boost::shared_ptr<CashOrNothingPayoff> payoff =
> - boost::dynamic_pointer_cast<CashOrNothingPayoff>(arguments_.payoff);
> + boost::dynamic_pointer_cast<CashOrNothingPayoff>(this->arguments_.payoff);
> QL_REQUIRE(payoff, "wrong payoff given");
>
> boost::shared_ptr<AmericanExercise> exercise =
> - boost::dynamic_pointer_cast<AmericanExercise>(arguments_.exercise);
> + boost::dynamic_pointer_cast<AmericanExercise>(this->arguments_.exercise);
> QL_REQUIRE(exercise, "wrong exercise given");
>
> TimeGrid grid = timeGrid();
> PseudoRandom::ursg_type sequenceGen(grid.size()-1,
> PseudoRandom::urng_type(76));
>
> - return boost::shared_ptr<MCDigitalEngine<RNG,S>::path_pricer_type>(new
> + return boost::shared_ptr<typename MCDigitalEngine<RNG,S>::path_pricer_type>(new
> DigitalPathPricer(
> payoff,
> exercise,
> - arguments_.blackScholesProcess->stateVariable()->value(),
> + this->arguments_.blackScholesProcess->stateVariable()->value(),
> RelinkableHandle<TermStructure>(
> - arguments_.blackScholesProcess->riskFreeRate()),
> - arguments_.blackScholesProcess,
> + this->arguments_.blackScholesProcess->riskFreeRate()),
> + this->arguments_.blackScholesProcess,
> sequenceGen));
> }
>
> @@ -180,55 +180,55 @@
> template <class RNG, class S>
> inline
> TimeGrid MCDigitalEngine<RNG,S>::timeGrid() const {
> - Time t = arguments_.blackScholesProcess->riskFreeRate()
> + Time t = this->arguments_.blackScholesProcess->riskFreeRate()
> ->dayCounter().yearFraction(
> - arguments_.blackScholesProcess->riskFreeRate()->referenceDate(),
> - arguments_.exercise->lastDate());
> - return TimeGrid(t, Size(QL_MAX<Real>(t * maxTimeStepsPerYear_, 1.0)));
> + this->arguments_.blackScholesProcess->riskFreeRate()->referenceDate(),
> + this->arguments_.exercise->lastDate());
> + return TimeGrid(t, Size(QL_MAX<Real>(t * this->maxTimeStepsPerYear_, 1.0)));
> }
>
> template<class RNG, class S>
> void MCDigitalEngine<RNG,S>::calculate() const {
>
> - QL_REQUIRE(requiredTolerance_ != Null<Real>() ||
> - requiredSamples_ != Null<Size>(),
> + QL_REQUIRE(this->requiredTolerance_ != Null<Real>() ||
> + this->requiredSamples_ != Null<Size>(),
> "neither tolerance nor number of samples set");
>
> //! Initialize the one-factor Monte Carlo
> - if (controlVariate_) {
> + if (this->controlVariate_) {
>
> boost::shared_ptr<path_pricer_type> controlPP =
> - controlPathPricer();
> + this->controlPathPricer();
> QL_REQUIRE(controlPP,
> "engine does not provide "
> "control variation path pricer");
>
> boost::shared_ptr<PricingEngine> controlPE =
> - controlPricingEngine();
> + this->controlPricingEngine();
> QL_REQUIRE(controlPE,
> "engine does not provide "
> "control variation pricing engine");
> } else {
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<SingleAsset<RNG>, S> >(
> new MonteCarloModel<SingleAsset<RNG>, S>(
> - pathGenerator(), pathPricer(), S(),
> - antitheticVariate_));
> + this->pathGenerator(), this->pathPricer(), S(),
> + this->antitheticVariate_));
> }
>
> - if (requiredTolerance_ != Null<Real>()) {
> - if (maxSamples_ != Null<Size>())
> - value(requiredTolerance_, maxSamples_);
> + if (this->requiredTolerance_ != Null<Real>()) {
> + if (this->maxSamples_ != Null<Size>())
> + this->value(this->requiredTolerance_, this->maxSamples_);
> else
> - value(requiredTolerance_);
> + this->value(this->requiredTolerance_);
> } else {
> - valueWithSamples(requiredSamples_);
> + this->valueWithSamples(this->requiredSamples_);
> }
>
> - results_.value = mcModel_->sampleAccumulator().mean();
> + this->results_.value = this->mcModel_->sampleAccumulator().mean();
> if (RNG::allowsErrorEstimate)
> - results_.errorEstimate =
> - mcModel_->sampleAccumulator().errorEstimate();
> + this->results_.errorEstimate =
> + this->mcModel_->sampleAccumulator().errorEstimate();
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mceuropeanengine.hpp ./ql/PricingEngines/Vanilla/mceuropeanengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mceuropeanengine.hpp 2004-06-08 15:50:41.000000000 +0200
> +++ ./ql/PricingEngines/Vanilla/mceuropeanengine.hpp 2004-08-18 00:05:09.944037209 +0200
> @@ -113,16 +113,16 @@
> MCEuropeanEngine<RNG,S>::pathPricer() const {
>
> boost::shared_ptr<PlainVanillaPayoff> payoff =
> - boost::dynamic_pointer_cast<PlainVanillaPayoff>(arguments_.payoff);
> + boost::dynamic_pointer_cast<PlainVanillaPayoff>(this->arguments_.payoff);
> QL_REQUIRE(payoff, "non-plain payoff given");
>
> - return boost::shared_ptr<MCEuropeanEngine<RNG,S>::path_pricer_type>(
> + return boost::shared_ptr<typename MCEuropeanEngine<RNG,S>::path_pricer_type>(
> new EuropeanPathPricer(
> payoff->optionType(),
> - arguments_.blackScholesProcess->stateVariable()->value(),
> + this->arguments_.blackScholesProcess->stateVariable()->value(),
> payoff->strike(),
> RelinkableHandle<TermStructure>(
> - arguments_.blackScholesProcess->riskFreeRate())));
> + this->arguments_.blackScholesProcess->riskFreeRate())));
> }
>
>
> @@ -159,13 +159,13 @@
> template <class RNG, class S>
> inline TimeGrid MCEuropeanEngine<RNG,S>::timeGrid() const {
>
> - Time t = arguments_.blackScholesProcess->riskFreeRate()
> + Time t = this->arguments_.blackScholesProcess->riskFreeRate()
> ->dayCounter().yearFraction(
> - arguments_.blackScholesProcess->riskFreeRate()->referenceDate(),
> - arguments_.exercise->lastDate());
> + this->arguments_.blackScholesProcess->riskFreeRate()->referenceDate(),
> + this->arguments_.exercise->lastDate());
>
> - TimeGridCalculator calc(t, maxTimeStepsPerYear_);
> - arguments_.blackScholesProcess->blackVolatility()->accept(calc);
> + TimeGridCalculator calc(t, this->maxTimeStepsPerYear_);
> + this->arguments_.blackScholesProcess->blackVolatility()->accept(calc);
> return TimeGrid(t, calc.size());
> }
>
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mcvanillaengine.hpp ./ql/PricingEngines/Vanilla/mcvanillaengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/Vanilla/mcvanillaengine.hpp 2004-05-13 18:30:09.000000000 +0200
> +++ ./ql/PricingEngines/Vanilla/mcvanillaengine.hpp 2004-08-17 23:35:40.933967617 +0200
> @@ -82,7 +82,7 @@
> boost::shared_ptr<QL_TYPENAME MCVanillaEngine<RNG,S>::path_generator_type>
> MCVanillaEngine<RNG,S>::pathGenerator() const {
>
> - TimeGrid grid = timeGrid();
> + TimeGrid grid = this->timeGrid();
> typename RNG::rsg_type gen =
> RNG::make_sequence_generator(grid.size()-1,seed_);
> // BB here
> @@ -103,16 +103,16 @@
> "not an European Option");
>
> //! Initialize the one-factor Monte Carlo
> - if (controlVariate_) {
> + if (this->controlVariate_) {
>
> boost::shared_ptr<path_pricer_type> controlPP =
> - controlPathPricer();
> + this->controlPathPricer();
> QL_REQUIRE(controlPP,
> "engine does not provide "
> "control variation path pricer");
>
> boost::shared_ptr<PricingEngine> controlPE =
> - controlPricingEngine();
> + this->controlPricingEngine();
> QL_REQUIRE(controlPE,
> "engine does not provide "
> "control variation pricing engine");
> @@ -128,34 +128,34 @@
> controlPE->results());
> Real controlVariateValue = controlResults->value;
>
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<SingleAsset<RNG>, S> >(
> new MonteCarloModel<SingleAsset<RNG>, S>(
> - pathGenerator(), pathPricer(), stats_type(),
> - antitheticVariate_, controlPP,
> + pathGenerator(), this->pathPricer(), stats_type(),
> + this->antitheticVariate_, controlPP,
> controlVariateValue));
>
> } else {
> - mcModel_ =
> + this->mcModel_ =
> boost::shared_ptr<MonteCarloModel<SingleAsset<RNG>, S> >(
> new MonteCarloModel<SingleAsset<RNG>, S>(
> - pathGenerator(), pathPricer(), S(),
> - antitheticVariate_));
> + pathGenerator(), this->pathPricer(), S(),
> + this->antitheticVariate_));
> }
>
> if (requiredTolerance_ != Null<Real>()) {
> if (maxSamples_ != Null<Size>())
> - value(requiredTolerance_, maxSamples_);
> + this->value(requiredTolerance_, maxSamples_);
> else
> - value(requiredTolerance_);
> + this->value(requiredTolerance_);
> } else {
> - valueWithSamples(requiredSamples_);
> + this->valueWithSamples(requiredSamples_);
> }
>
> - results_.value = mcModel_->sampleAccumulator().mean();
> + results_.value = this->mcModel_->sampleAccumulator().mean();
> if (RNG::allowsErrorEstimate)
> results_.errorEstimate =
> - mcModel_->sampleAccumulator().errorEstimate();
> + this->mcModel_->sampleAccumulator().errorEstimate();
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/genericmodelengine.hpp ./ql/PricingEngines/genericmodelengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/genericmodelengine.hpp 2004-05-19 10:53:11.000000000 +0200
> +++ ./ql/PricingEngines/genericmodelengine.hpp 2004-08-17 21:53:38.708687329 +0200
> @@ -48,7 +48,7 @@
> update();
> }
> virtual void update() {
> - notifyObservers();
> + this->notifyObservers();
> }
> protected:
> boost::shared_ptr<ModelType> model_;
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/latticeshortratemodelengine.hpp ./ql/PricingEngines/latticeshortratemodelengine.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/PricingEngines/latticeshortratemodelengine.hpp 2004-03-25 17:52:28.000000000 +0100
> +++ ./ql/PricingEngines/latticeshortratemodelengine.hpp 2004-08-17 23:28:31.045320625 +0200
> @@ -62,15 +62,15 @@
> const TimeGrid& timeGrid)
> : GenericModelEngine<ShortRateModel, Arguments, Results>(model),
> timeGrid_(timeGrid), timeSteps_(0) {
> - lattice_ = model_->tree(timeGrid);
> + lattice_ = this->model_->tree(timeGrid);
> }
>
> template <class Arguments, class Results>
> void LatticeShortRateModelEngine<Arguments, Results>::update()
> {
> if (timeGrid_.size() > 0)
> - lattice_ = model_->tree(timeGrid_);
> - notifyObservers();
> + lattice_ = this->model_->tree(timeGrid_);
> + this->notifyObservers();
> }
>
> }
> diff -urN ../tmp-orig/quantlib-0.3.7/ql/solver1d.hpp ./ql/solver1d.hpp
> --- ../tmp-orig/quantlib-0.3.7/ql/solver1d.hpp 2004-05-28 15:10:39.000000000 +0200
> +++ ./ql/solver1d.hpp 2004-08-17 21:54:32.632489665 +0200
> @@ -105,7 +105,7 @@
> if (fxMax_ == 0.0) return xMax_;
> root_ = (xMax_+xMin_)/2.0;
> // check whether we really want to pass epsilon
> - return impl().solveImpl(f, QL_MAX(QL_FABS(accuracy),
> + return this->impl().solveImpl(f, QL_MAX(QL_FABS(accuracy),
> QL_EPSILON));
> }
> if (QL_FABS(fxMin_) < QL_FABS(fxMax_)) {
> @@ -197,7 +197,7 @@
>
> root_ = guess;
>
> - return impl().solveImpl(f, QL_MAX(QL_FABS(accuracy), QL_EPSILON));
> + return this->impl().solveImpl(f, QL_MAX(QL_FABS(accuracy), QL_EPSILON));
> }
>
> /*! This method sets the maximum number of function
>
>
--
Those are my principles, and if you don't like them... well, I have others.
-- Groucho Marx