Trunk compilation error with VC8

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Trunk compilation error with VC8

Bianchetti Marco-3
error C2440: 'initializing' : cannot convert from 'std::valarray<_Ty>' to 'std::vector<_Ty,_Ax>'
d:\Projects\QuantLib-SVN\DevEnv\trunk\QuantLibXL\qlxl\functions\utilities.cpp   111

> -----Original Message-----
> From: [hidden email]
> [mailto:[hidden email]]
> Sent: martedì 10 novembre 2009 02.21
> To: [hidden email]
> Subject: [QuantLib-svn] SF.net SVN: quantlib:[16725] trunk/QuantLib
>
>
> Revision: 16725
>
> http://quantlib.svn.sourceforge.net/quantlib/?rev=16725&view=rev
> Author:   markjoshi
> Date:     2009-11-10 01:21:02 +0000 (Tue, 10 Nov 2009)
>
> Log Message:
> -----------
> Abolished vector<bool>s from MarketModel code and replaced
> with Valarrays. Also, changed the LMM CurveState to use a
> smarter caching methodology. Substantial speed up has occurred.
>
> Modified Paths:
> --------------
>     trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp
>     trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.cpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp
>     trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp
>     trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.cpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
> erciseadapter.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.cpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.hpp
>
> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp
>     trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
>
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp
>
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp
>
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.cpp
>
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.hpp
>
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.cpp
>
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.hpp
>
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
> luster.cpp
>
> trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp
>
> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
> pecifiedmultiproduct.hpp
>
> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
> iseadapter.hpp
>     trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
>     trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
>     trunk/QuantLib/ql/models/marketmodels/utilities.cpp
>     trunk/QuantLib/ql/models/marketmodels/utilities.hpp
>     trunk/QuantLib/test-suite/marketmodel.cpp
>     trunk/QuantLib/test-suite/quantlibtestsuite.cpp
>
> Modified:
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
> red.cpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
> red.cpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -129,7 +129,7 @@
>        multiplierCutoff_(multiplierCutoff),
>        numberVectors_(originalVectors.rows()),
>        dimension_(originalVectors.columns()),
> -      validVectors_(originalVectors.rows(), true),
> +      validVectors_(true,originalVectors.rows()), //
> opposite way round from vector constructor
>        orthoNormalizedVectors_(originalVectors.rows(),
>                                originalVectors.columns())
>      {
> @@ -219,7 +219,7 @@
>
>      } // end of constructor
>
> -    const std::vector<bool>&
> OrthogonalProjections::validVectors() const
> +    const std::valarray<bool>&
> OrthogonalProjections::validVectors() const
>      {
>          return validVectors_;
>
>
> Modified:
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
> red.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
> red.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -22,6 +22,7 @@
>  #define quantlib_basis_incomplete_ordered_hpp
>
>  #include <ql/math/matrix.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -57,7 +58,7 @@
>                                Real multiplierCutOff,
>                                 Real tolerance  );
>
> -        const std::vector<bool>& validVectors() const;
> +        const std::valarray<bool>& validVectors() const;
>          const std::vector<Real>& GetVector(Size index) const;
>
>          Size numberValidVectors() const;
> @@ -73,7 +74,7 @@
>          Size dimension_;
>
>          //!outputs
> -        std::vector<bool> validVectors_;
> +        std::valarray<bool> validVectors_;
>          std::vector<std::vector<Real> > projectedVectors_;
>
>          //!workspace
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -70,8 +70,8 @@
>      }
>
>
> -    std::vector<bool>
> BermudanSwaptionExerciseValue::isExerciseTime() const {
> -        return std::vector<bool>(numberOfExercises_,true);
> +    std::valarray<bool>
> BermudanSwaptionExerciseValue::isExerciseTime() const {
> +        return std::valarray<bool>(true,numberOfExercises_);
>      }
>
>      MarketModelMultiProduct::CashFlow
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
> tionexercisevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -24,6 +24,7 @@
>  #include <ql/models/marketmodels/callability/exercisevalue.hpp>
>  #include <ql/models/marketmodels/evolutiondescription.hpp>
>  #include <boost/shared_ptr.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -40,7 +41,7 @@
>          void nextStep(const CurveState&);
>          void reset();
>          // whether or not evolution times are exercise times
> -        std::vector<bool> isExerciseTime() const;
> +        std::valarray<bool> isExerciseTime() const;
>          MarketModelMultiProduct::CashFlow value(const
> CurveState&) const;
>          std::auto_ptr<MarketModelExerciseValue> clone() const;
>        private:
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded
> ata.cpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded
> ata.cpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -94,20 +94,20 @@
>
>          std::vector<Time> evolutionTimes =
> evolution.evolutionTimes();
>
> -        std::vector<bool> isProductTime =
> +        std::valarray<bool> isProductTime =
>              isInSubset(evolutionTimes,
>                         product.evolution().evolutionTimes());
> -        std::vector<bool> isRebateTime =
> +        std::valarray<bool> isRebateTime =
>              isInSubset(evolutionTimes,
>                         rebate.evolution().evolutionTimes());
> -        std::vector<bool> isControlTime =
> +        std::valarray<bool> isControlTime =
>              isInSubset(evolutionTimes,
>                         control.evolution().evolutionTimes());
> -        std::vector<bool> isBasisTime =
> +        std::valarray<bool> isBasisTime =
>              isInSubset(evolutionTimes,
>                         dataProvider.evolution().evolutionTimes());
> -        std::vector<bool>
> isExerciseTime(evolutionTimes.size(),false);
> -        std::vector<bool> v = rebate.isExerciseTime();
> +        std::valarray<bool>
> isExerciseTime(false,evolutionTimes.size());
> +        std::valarray<bool> v = rebate.isExerciseTime();
>          Size exercises = 0;
>          for (i=0; i<evolutionTimes.size(); ++i) {
>              if (isRebateTime[i]) {
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva
> lue.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva
> lue.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -24,6 +24,7 @@
>  // to be removed using forward declaration
>  #include <ql/models/marketmodels/multiproduct.hpp>
>  #include <memory>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -41,7 +42,7 @@
>          virtual void nextStep(const CurveState&) = 0;
>          virtual void reset() = 0;
>          // whether or not evolution times are exercise times
> -        virtual std::vector<bool> isExerciseTime() const = 0;
> +        virtual std::valarray<bool> isExerciseTime() const = 0;
>          virtual MarketModelMultiProduct::CashFlow value(
>                                                 const
> CurveState&) const = 0;
>          virtual std::auto_ptr<MarketModelExerciseValue>
> clone() const = 0;
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
> egy.cpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
> egy.cpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -49,8 +49,8 @@
>
> control_->evolution().evolutionTimes());
>
>          exerciseIndex_ = std::vector<Size>(relevantTimes_.size());
> -        isExerciseTime_ =
> std::vector<bool>(relevantTimes_.size(),false);
> -        std::vector<bool> v = exercise_->isExerciseTime();
> +        isExerciseTime_ =
> std::valarray<bool>(false,relevantTimes_.size());
> +        std::valarray<bool> v = exercise_->isExerciseTime();
>          Size exercises = 0;
>          Size i;
>          for (i=0; i<relevantTimes_.size(); ++i) {
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
> egy.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
> egy.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -55,8 +55,8 @@
>          Size currentIndex_;
>          Real principalInNumerairePortfolio_, newPrincipal_;
>          std::vector<Time> exerciseTimes_, relevantTimes_;
> -        std::vector<bool> isBasisTime_, isRebateTime_,
> isControlTime_;
> -        std::vector<bool> isExerciseTime_;
> +        std::valarray<bool> isBasisTime_, isRebateTime_,
> isControlTime_;
> +        std::valarray<bool> isExerciseTime_;
>          std::vector<MarketModelDiscounter> rebateDiscounters_;
>          std::vector<MarketModelDiscounter> controlDiscounters_;
>          mutable std::vector<std::vector<Real> > basisValues_;
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov
> ider.hpp      2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov
> ider.hpp      2009-11-10 01:21:02 UTC (rev 16725)
> @@ -23,6 +23,7 @@
>
>  #include <ql/types.hpp>
>  #include <vector>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -40,7 +41,7 @@
>          virtual void nextStep(const CurveState&) = 0;
>          virtual void reset() = 0;
>          // whether or not evolution times are exercise times
> -        virtual std::vector<bool> isExerciseTime() const = 0;
> +        virtual std::valarray<bool> isExerciseTime() const = 0;
>          virtual void values(const CurveState&,
>                              std::vector<Real>& results) const = 0;
>      };
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.cpp  2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.cpp  2009-11-10 01:21:02 UTC (rev 16725)
> @@ -60,8 +60,8 @@
>      }
>
>
> -    std::vector<bool> NothingExerciseValue::isExerciseTime() const {
> -        return std::vector<bool>(numberOfExercises_, true);
> +    std::valarray<bool>
> NothingExerciseValue::isExerciseTime() const {
> +        return std::valarray<bool>(true,
> numberOfExercises_); // opposite way round from vector constructor
>      }
>
>      MarketModelMultiProduct::CashFlow
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.hpp  2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
> isevalue.hpp  2009-11-10 01:21:02 UTC (rev 16725)
> @@ -36,7 +36,7 @@
>          void nextStep(const CurveState&);
>          void reset();
>          // whether or not evolution times are exercise times
> -        std::vector<bool> isExerciseTime() const;
> +        std::valarray<bool> isExerciseTime() const;
>          MarketModelMultiProduct::CashFlow value(const
> CurveState&) const;
>          std::auto_ptr<MarketModelExerciseValue> clone() const;
>        private:
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
> erciseadapter.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
> erciseadapter.hpp     2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
> erciseadapter.hpp     2009-11-10 01:21:02 UTC (rev 16725)
> @@ -23,6 +23,7 @@
>
>  #include <ql/methods/montecarlo/exercisestrategy.hpp>
>  #include <ql/utilities/clone.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -45,7 +46,7 @@
>          std::vector<std::vector<Real> > parameters_;
>          std::vector<Time> exerciseTimes_;
>          Size currentStep_, currentExercise_;
> -        std::vector<bool> isExerciseTime_;
> +        std::valarray<bool> isExerciseTime_;
>          std::vector<Size> numberOfVariables_;
>          mutable std::vector<Real> variables_;
>      };
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
> tem.cpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
> tem.cpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -59,8 +59,8 @@
>          currentIndex_ = 0;
>      }
>
> -    std::vector<bool> SwapBasisSystem::isExerciseTime() const {
> -        return std::vector<bool>(exerciseTimes_.size(), true);
> +    std::valarray<bool> SwapBasisSystem::isExerciseTime() const {
> +        return std::valarray<bool>(true, exerciseTimes_.size());
>      }
>
>      void SwapBasisSystem::values(const CurveState& currentState,
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
> tem.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
> tem.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -35,7 +35,7 @@
>          const EvolutionDescription& evolution() const;
>          void nextStep(const CurveState&);
>          void reset();
> -        std::vector<bool> isExerciseTime() const;
> +        std::valarray<bool> isExerciseTime() const;
>          void values(const CurveState&,
>                      std::vector<Real>& results) const;
>          std::auto_ptr<MarketModelBasisSystem> clone() const;
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.cpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.cpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -54,8 +54,8 @@
>          currentStep_ = 0;
>      }
>
> -    std::vector<bool> TriggeredSwapExercise::isExerciseTime() const {
> -        return std::vector<bool>(numberOfExercises(), true);
> +    std::valarray<bool>
> TriggeredSwapExercise::isExerciseTime() const {
> +        return std::valarray<bool>(true,numberOfExercises());
>      }
>
>      void TriggeredSwapExercise::values(const CurveState& state,
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.hpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
> pexercise.hpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -36,7 +36,7 @@
>          const EvolutionDescription& evolution() const;
>          void nextStep(const CurveState&);
>          void reset();
> -        std::vector<bool> isExerciseTime() const;
> +        std::valarray<bool> isExerciseTime() const;
>          void values(const CurveState&,
>                      std::vector<Real>& results) const;
>
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden
> gine.hpp      2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden
> gine.hpp      2009-11-10 01:21:02 UTC (rev 16725)
> @@ -27,6 +27,7 @@
>  #include <ql/math/statistics/sequencestatistics.hpp>
>  #include <ql/utilities/clone.hpp>
>  #include <utility>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -70,7 +71,7 @@
>          Size underlyingOffset_, rebateOffset_, hedgeOffset_,
> hedgeRebateOffset_;
>          Size numberOfProducts_;
>          Size numberOfSteps_;
> -        std::vector<bool> isExerciseTime_;
> +        std::valarray<bool> isExerciseTime_;
>
>          // workspace
>          std::vector<Size> numberCashFlowsThisStep_;
>
> Modified: trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -22,6 +22,7 @@
>  #define quantlib_constrained_evolver_hpp
>
>  #include <ql/models/marketmodels/evolver.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -45,7 +46,7 @@
>          //! call before each path
>          virtual void setThisConstraint(
>              const std::vector<Rate>& rateConstraints,
> -            const std::vector<bool>& isConstraintActive) = 0;
> +            const std::valarray<bool>& isConstraintActive) = 0;
>      };
>
>  }
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
> ate.cpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
> ate.cpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -33,7 +33,10 @@
>        cmSwapRates_(numberOfRates_),
>        cmSwapAnnuities_(numberOfRates_,rateTaus_[numberOfRates_-1]),
>        cotSwapRates_(numberOfRates_),
> -      cotAnnuities_(numberOfRates_, rateTaus_[numberOfRates_-1]) {}
> +      cotAnnuities_(numberOfRates_,
> +       rateTaus_[numberOfRates_-1]),
> +      firstCotAnnuityComped_(numberOfRates_)
> +     {}
>
>      void LMMCurveState::setOnForwardRates(const
> std::vector<Rate>& rates,
>                                            Size firstValidIndex) {
> @@ -60,6 +63,8 @@
>          // lazy evaluation of:
>          // - coterminal swap rates/annuities
>          // - constant maturity swap rates/annuities
> +
> +             firstCotAnnuityComped_ = numberOfRates_;
>      }
>
>      void LMMCurveState::setOnDiscountRatios(const
> std::vector<DiscountFactor>& discRatios,
> @@ -86,6 +91,8 @@
>          // lazy evaluation of:
>          // - coterminal swap rates/annuities
>          // - constant maturity swap rates/annuities
> +
> +             firstCotAnnuityComped_ = numberOfRates_;
>      }
>
>      Real LMMCurveState::discountRatio(Size i, Size j) const {
> @@ -107,19 +114,37 @@
>          QL_REQUIRE(numeraire>=first_ && numeraire<=numberOfRates_,
>                     "invalid numeraire");
>          QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index");
> -        coterminalFromDiscountRatios(first_,
> -                                     discRatios_, rateTaus_,
> -                                     cotSwapRates_, cotAnnuities_);
> -        return cotAnnuities_[i]/discRatios_[numeraire];
> +     //        coterminalFromDiscountRatios(first_,
> +     //                                   discRatios_, rateTaus_,
> +    //                                 cotSwapRates_, cotAnnuities_);
> +
> +             if (firstCotAnnuityComped_ <=i)
> +                     return  cotAnnuities_[i]/discRatios_[numeraire];
> +
> +             if (firstCotAnnuityComped_ == numberOfRates_)
> +             {
> +                     cotAnnuities_[numberOfRates_-1] =
> rateTaus_[numberOfRates_-1]*discRatios_[numberOfRates_];
> +                     --firstCotAnnuityComped_;
> +             }
> +
> +             for (int j=
> static_cast<int>(firstCotAnnuityComped_)-1; j
> >=static_cast<int>(i); --j)
> +                     cotAnnuities_[j] =
> cotAnnuities_[j+1]+rateTaus_[j]*discRatios_[j+1];
> +
> +             firstCotAnnuityComped_ = i;
> +
> +             return cotAnnuities_[i]/discRatios_[numeraire];
>      }
>
>      Rate LMMCurveState::coterminalSwapRate(Size i) const {
>          QL_REQUIRE(first_<numberOfRates_, "curve state not
> initialized yet");
>          QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index");
> -        coterminalFromDiscountRatios(first_,
> -                                     discRatios_, rateTaus_,
> -                                     cotSwapRates_, cotAnnuities_);
> -        return cotSwapRates_[i];
> +    //    coterminalFromDiscountRatios(first_,
> +      //                               discRatios_, rateTaus_,
> +        //                             cotSwapRates_, cotAnnuities_);
> +  //      return cotSwapRates_[i];
> +
> +             Real res = (discRatios_[i]/
> discRatios_[numberOfRates_]
> -1.0)/coterminalSwapAnnuity(numberOfRates_,i);
> +             return res;
>      }
>
>      Rate LMMCurveState::cmSwapAnnuity(Size numeraire,
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
> ate.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
> ate.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -89,6 +89,8 @@
>          mutable std::vector<Real> cmSwapAnnuities_;
>          mutable std::vector<Rate> cotSwapRates_;
>          mutable std::vector<Real> cotAnnuities_;
> +
> +             mutable Size firstCotAnnuityComped_;
>      };
>
>  }
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.cpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.cpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -133,7 +133,7 @@
>
>      void LogNormalFwdRateEulerConstrained::setThisConstraint(
>                                  const std::vector<Rate>&
> rateConstraints,
> -                                const std::vector<bool>&
> isConstraintActive)
> +                                const std::valarray<bool>&
> isConstraintActive)
>      {
>          QL_REQUIRE(rateConstraints.size() == numeraires_.size(),
>                     "wrong number of constraints specified");
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.hpp 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
> eeulerconstrained.hpp 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -25,6 +25,7 @@
>  #include <ql/models/marketmodels/constrainedevolver.hpp>
>  #include <ql/models/marketmodels/curvestates/lmmcurvestate.hpp>
>  #include
> <ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -47,7 +48,7 @@
>              const std::vector<Size>& endIndexOfSwapRate);
>          virtual void setThisConstraint(
>              const std::vector<Rate>& rateConstraints,
> -            const std::vector<bool>& isConstraintActive);
> +            const std::valarray<bool>& isConstraintActive);
>          //@}
>          //! \name MarketModel interface
>          //@{
> @@ -71,7 +72,7 @@
>
>          //often changing inputs
>          std::vector<Rate> rateConstraints_;
> -        std::vector<bool> isConstraintActive_;
> +        std::valarray<bool> isConstraintActive_;
>
>          // fixed variables
>          std::vector<std::vector<Real> > fixedDrifts_;
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.cpp     2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.cpp     2009-11-10 01:21:02 UTC (rev 16725)
> @@ -30,7 +30,7 @@
>
> VolatilityBumpInstrumentJacobian::VolatilityBumpInstrumentJaco
> bian(const VegaBumpCollection& bumps,
>          const std::vector<Swaption>& swaptions,
>          const std::vector<Cap>& caps)
> -        : bumps_(bumps), swaptions_(swaptions), caps_(caps),
> computed_(swaptions.size()+caps.size(), false),
> +        : bumps_(bumps), swaptions_(swaptions), caps_(caps),
> computed_(false,swaptions.size()+caps.size()),
>
> derivatives_(swaptions.size()+caps.size(),std::vector<Real>(bu
> mps.numberBumps())),
>
> bumpMatrix_(swaptions.size()+caps.size(),bumps_.numberBumps())
>      {
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.hpp     2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
> umentjacobian.hpp     2009-11-10 01:21:02 UTC (rev 16725)
> @@ -25,6 +25,7 @@
>
>  #include <ql/models/marketmodels/marketmodel.hpp>
>  #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp>
> +#include <valarray>
>
>  namespace QuantLib
>  {
> @@ -68,7 +69,7 @@
>           VegaBumpCollection bumps_;
>           std::vector<Swaption> swaptions_;
>           std::vector<Cap> caps_;
> -         mutable std::vector<bool> computed_;
> +         mutable std::valarray<bool> computed_;
>           mutable bool allComputed_;
>           mutable std::vector<std::vector<Real> > derivatives_;
>
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
> luster.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
> luster.cpp    2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
> luster.cpp    2009-11-10 01:21:02 UTC (rev 16725)
> @@ -20,6 +20,7 @@
>  #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp>
>  #include <ql/errors.hpp>
>  #include <ql/models/marketmodels/evolutiondescription.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -149,14 +150,14 @@
>      {
>          if (checked_)
>              return full_;
> -        std::vector<std::vector<std::vector<bool> > > v;
> +        std::vector<std::vector<std::valarray<bool> > > v;
>
>          Size factors = associatedVolStructure_->numberOfFactors();
>
> -        std::vector<bool> model(factors);
> -        std::fill(model.begin(), model.end(), false);
> +        std::valarray<bool> model(false,factors);
> +    //    std::fill(model.begin(), model.end(), false);
>
> -        std::vector<std::vector<bool> > modelTwo;
> +        std::vector<std::valarray<bool> > modelTwo;
>          for (Size i=0; i <
> associatedVolStructure_->numberOfRates(); ++i)
>              modelTwo.push_back(model);
>
> @@ -189,15 +190,15 @@
>          if (checked_)
>              return nonOverlapped_;
>
> -        std::vector<std::vector<std::vector<bool> > > v;
> +        std::vector<std::vector<std::valarray<bool> > > v;
>
>          Size factors = associatedVolStructure_->numberOfFactors();
>
>
> -        std::vector<bool> model(factors);
> -        std::fill(model.begin(), model.end(), false);
> +        std::valarray<bool> model(false,factors);
> +        //std::fill(model.begin(), model.end(), false);
>
> -        std::vector<std::vector<bool> > modelTwo;
> +        std::vector<std::valarray<bool> > modelTwo;
>          for (Size i=0; i <
> associatedVolStructure_->numberOfRates(); ++i)
>              modelTwo.push_back(model);
>
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/products/compositeprod
> uct.hpp       2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/products/compositeprod
> uct.hpp       2009-11-10 01:21:02 UTC (rev 16725)
> @@ -23,6 +23,7 @@
>  #include <ql/models/marketmodels/multiproduct.hpp>
>  #include <ql/models/marketmodels/evolutiondescription.hpp>
>  #include <ql/utilities/clone.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -76,7 +77,7 @@
>          Size currentIndex_;
>          std::vector<Time> cashflowTimes_;
>          std::vector<std::vector<Time> > allEvolutionTimes_;
> -        std::vector<std::vector<bool> > isInSubset_;
> +        std::vector<std::valarray<bool> > isInSubset_;
>      };
>
>  }
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
> pecifiedmultiproduct.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
> pecifiedmultiproduct.hpp      2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
> pecifiedmultiproduct.hpp      2009-11-10 01:21:02 UTC (rev 16725)
> @@ -25,6 +25,7 @@
>  #include <ql/models/marketmodels/multiproduct.hpp>
>  #include <ql/methods/montecarlo/exercisestrategy.hpp>
>  #include <ql/utilities/clone.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -59,7 +60,7 @@
>          Clone<ExerciseStrategy<CurveState> > strategy_;
>          Clone<MarketModelMultiProduct> rebate_;
>          EvolutionDescription evolution_;
> -        std::vector<std::vector<bool> > isPresent_;
> +        std::vector<std::valarray<bool> > isPresent_;
>          std::vector<Time> cashFlowTimes_;
>          Size rebateOffset_;
>          bool wasCalled_;
>
> Modified:
> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
> iseadapter.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
> iseadapter.hpp        2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
> iseadapter.hpp        2009-11-10 01:21:02 UTC (rev 16725)
> @@ -50,7 +50,7 @@
>        private:
>          Clone<MarketModelExerciseValue> exercise_;
>          Size numberOfProducts_;
> -        std::vector<bool> isExerciseTime_;
> +        std::valarray<bool> isExerciseTime_;
>          Size currentIndex_;
>      };
>
>
> Modified: trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -122,11 +122,12 @@
>          product_->reset();
>          Real principalInNumerairePortfolio = 1.0;
>
> -        if (storeRates) {
> -            std::fill(constraintsActive_.begin(),
> -                      constraintsActive_.end(),
> -                      false);
> -        }
> +        if (storeRates)
> +                     constraintsActive_ =false;
> +//            std::fill(constraintsActive_.begin(),
> +  //                    constraintsActive_.end(),
> +    //                  false);
> +      //  }
>
>          bool done = false;
>          do {
>
> Modified: trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
> ===================================================================
> ---
> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++
> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -26,6 +26,7 @@
>
>  #include <ql/math/statistics/sequencestatistics.hpp>
>  #include <ql/utilities/clone.hpp>
> +#include <valarray>
>
>  namespace QuantLib {
>
> @@ -69,7 +70,7 @@
>
>          // workspace
>          std::vector<Rate> constraints_;
> -        std::vector<bool> constraintsActive_;
> +        std::valarray<bool> constraintsActive_;
>          std::vector<Real> numerairesHeld_;
>          std::vector<Size> numberCashFlowsThisStep_;
>          std::vector<std::vector<MarketModelMultiProduct::CashFlow> >
>
> Modified: trunk/QuantLib/ql/models/marketmodels/utilities.cpp
> ===================================================================
> --- trunk/QuantLib/ql/models/marketmodels/utilities.cpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++ trunk/QuantLib/ql/models/marketmodels/utilities.cpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -22,12 +22,13 @@
>  #include <ql/models/marketmodels/utilities.hpp>
>  #include <ql/errors.hpp>
>  #include <algorithm>
> +#include <valarray>
>
>  namespace QuantLib {
>
>      void mergeTimes(const std::vector<std::vector<Time> >& times,
>                      std::vector<Time>& mergedTimes,
> -                    std::vector<std::vector<bool> >& isPresent) {
> +                    std::vector<std::valarray<bool> >& isPresent) {
>
>          std::vector<Time> allTimes;
>          for (Size i=0; i<times.size(); i++) {
> @@ -55,10 +56,10 @@
>          }
>      }
>
> -    std::vector<bool> isInSubset(const std::vector<Time>& set,
> +    std::valarray<bool> isInSubset(const std::vector<Time>& set,
>                                   const std::vector<Time>& subset) {
>
> -        std::vector<bool> result(set.size(), false);
> +        std::valarray<bool> result(false,set.size());
>          Size dimsubSet = subset.size();
>          if (dimsubSet==0)
>              return result;
>
> Modified: trunk/QuantLib/ql/models/marketmodels/utilities.hpp
> ===================================================================
> --- trunk/QuantLib/ql/models/marketmodels/utilities.hpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++ trunk/QuantLib/ql/models/marketmodels/utilities.hpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -24,12 +24,13 @@
>
>  #include <ql/types.hpp>
>  #include <vector>
> +#include <valarray>
>
>  namespace QuantLib {
>
>      void mergeTimes(const std::vector<std::vector<Time> >& times,
>                      std::vector<Time>& mergedTimes,
> -                    std::vector<std::vector<bool> >& isPresent);
> +                    std::vector<std::valarray<bool> >& isPresent);
>
>      /*! Look for elements of a set in a subset.
>          Returns a vector of booleans such that:
> @@ -37,7 +38,7 @@
>
>         \pre both vectors must be strictly increasing.
>      */
> -    std::vector<bool> isInSubset(const std::vector<Time>& set,
> +    std::valarray<bool> isInSubset(const std::vector<Time>& set,
>                                   const std::vector<Time>& subset);
>
>      //! check for strictly increasing times, first time
> greater than zero
>
> Modified: trunk/QuantLib/test-suite/marketmodel.cpp
> ===================================================================
> --- trunk/QuantLib/test-suite/marketmodel.cpp 2009-11-09
> 16:35:59 UTC (rev 16724)
> +++ trunk/QuantLib/test-suite/marketmodel.cpp 2009-11-10
> 01:21:02 UTC (rev 16725)
> @@ -1408,7 +1408,7 @@
>
> std::vector<boost::shared_ptr<MarketModelEvolver> >
>                                  innerEvolvers;
>
> -                            std::vector<bool> isExerciseTime =
> +                            std::valarray<bool> isExerciseTime =
>
> isInSubset(evolution.evolutionTimes(),
>                                  naifStrategy.exerciseTimes());
>                              for (Size s=0; s <
> isExerciseTime.size(); ++s) {
> @@ -1586,7 +1586,7 @@
>
> std::vector<boost::shared_ptr<MarketModelEvolver> >
>                                  innerEvolvers;
>
> -                            std::vector<bool> isExerciseTime =
> +                            std::valarray<bool> isExerciseTime =
>
> isInSubset(evolution.evolutionTimes(),
>                                  exerciseStrategy.exerciseTimes());
>                              for (Size s=0; s <
> isExerciseTime.size(); ++s) {
> @@ -1757,7 +1757,7 @@
>                                  evolvers[i]);
>
> std::vector<boost::shared_ptr<MarketModelEvolver> >
>                                  innerEvolvers;
> -                            std::vector<bool> isExerciseTime =
> +                            std::valarray<bool> isExerciseTime =
>
> isInSubset(evolution.evolutionTimes(),
>                                  exerciseStrategy.exerciseTimes());
>                              for (Size s=0; s <
> isExerciseTime.size(); ++s) {
> @@ -4611,7 +4611,7 @@
>      std::vector<Time> set, subset;
>      for (Size i=0; i<dim; i++) set.push_back(i*1.0);
>      for (Size i=0; i<dim; i++) subset.push_back(dim+i*1.0);
> -    std::vector<bool> result = isInSubset(set, subset);
> +    std::valarray<bool> result = isInSubset(set, subset);
>      if (printReport_) {
>          for (Size i=0; i<dim; i++) {
>              BOOST_MESSAGE(io::ordinal(i+1) << ":" <<
>
> Modified: trunk/QuantLib/test-suite/quantlibtestsuite.cpp
> ===================================================================
> --- trunk/QuantLib/test-suite/quantlibtestsuite.cpp
> 2009-11-09 16:35:59 UTC (rev 16724)
> +++ trunk/QuantLib/test-suite/quantlibtestsuite.cpp
> 2009-11-10 01:21:02 UTC (rev 16725)
> @@ -314,6 +314,7 @@
>      //tests for deprecated classes
>      test->add(LiborMarketModelTest::suite());
>      test->add(LiborMarketModelProcessTest::suite());
> +
>
>      test->add(QUANTLIB_TEST_CASE(stopTimer));
>
>
>
> This was sent by the SourceForge.net collaborative
> development platform, the world's largest Open Source
> development site.
>
> --------------------------------------------------------------
> ----------------
> Let Crystal Reports handle the reporting - Free Crystal
> Reports 2008 30-Day
> trial. Simplify your report design, integration and
> deployment - and focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
> _______________________________________________
> QuantLib-cvs mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-cvs
>

This e-mail is subject to terms available at the following link:
https://www.bancaimi.com/bimi/emaildisclaimer.jsf.
Please read the hyperlink carefully as it contains the conditions governing any electronic communications between you and Banca IMI SpA. By messaging with Banca IMI SpA you agree to such terms and conditions of use. Banca IMI SpA may amend these terms and conditions at any time without notice. You should check the relevant webpage from time to time to review the current terms and conditions because they are binding on you. If you received this transmission in error, please immediately contact the sender and destroy the material in its entirety, whether in electronic or hard copy format. Please note that, if you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein (including any reliance thereon) is strictly prohibited and may be unlawful.

Prima di stampare, pensa all'ambiente ** Think about the environment before printing

------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing.
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Trunk compilation error with VC8

Alexander Lotter
Hello Marco,

we have already discussed this problem here:
http://old.nabble.com/gensrc-support-for-valarray-td26287680.html#a26287680

Plamen wanted to fix it. I think he will do it next days.

Cheers

Alexander


Bianchetti Marco wrote:

> error C2440: 'initializing' : cannot convert from 'std::valarray<_Ty>' to 'std::vector<_Ty,_Ax>'
> d:\Projects\QuantLib-SVN\DevEnv\trunk\QuantLibXL\qlxl\functions\utilities.cpp   111
>
>  
>> -----Original Message-----
>> From: [hidden email]
>> [mailto:[hidden email]]
>> Sent: martedì 10 novembre 2009 02.21
>> To: [hidden email]
>> Subject: [QuantLib-svn] SF.net SVN: quantlib:[16725] trunk/QuantLib
>>
>>
>> Revision: 16725
>>
>> http://quantlib.svn.sourceforge.net/quantlib/?rev=16725&view=rev
>> Author:   markjoshi
>> Date:     2009-11-10 01:21:02 +0000 (Tue, 10 Nov 2009)
>>
>> Log Message:
>> -----------
>> Abolished vector<bool>s from MarketModel code and replaced
>> with Valarrays. Also, changed the LMM CurveState to use a
>> smarter caching methodology. Substantial speed up has occurred.
>>
>> Modified Paths:
>> --------------
>>     trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp
>>     trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp
>>     trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp
>>     trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
>> erciseadapter.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp
>>     trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
>> luster.cpp
>>
>> trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
>> pecifiedmultiproduct.hpp
>>
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
>> iseadapter.hpp
>>     trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
>>     trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
>>     trunk/QuantLib/ql/models/marketmodels/utilities.cpp
>>     trunk/QuantLib/ql/models/marketmodels/utilities.hpp
>>     trunk/QuantLib/test-suite/marketmodel.cpp
>>     trunk/QuantLib/test-suite/quantlibtestsuite.cpp
>>
>> Modified:
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
>> red.cpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
>> red.cpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -129,7 +129,7 @@
>>        multiplierCutoff_(multiplierCutoff),
>>        numberVectors_(originalVectors.rows()),
>>        dimension_(originalVectors.columns()),
>> -      validVectors_(originalVectors.rows(), true),
>> +      validVectors_(true,originalVectors.rows()), //
>> opposite way round from vector constructor
>>        orthoNormalizedVectors_(originalVectors.rows(),
>>                                originalVectors.columns())
>>      {
>> @@ -219,7 +219,7 @@
>>
>>      } // end of constructor
>>
>> -    const std::vector<bool>&
>> OrthogonalProjections::validVectors() const
>> +    const std::valarray<bool>&
>> OrthogonalProjections::validVectors() const
>>      {
>>          return validVectors_;
>>
>>
>> Modified:
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteordered.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
>> red.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/math/matrixutilities/basisincompleteorde
>> red.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -22,6 +22,7 @@
>>  #define quantlib_basis_incomplete_ordered_hpp
>>
>>  #include <ql/math/matrix.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -57,7 +58,7 @@
>>                                Real multiplierCutOff,
>>                                 Real tolerance  );
>>
>> -        const std::vector<bool>& validVectors() const;
>> +        const std::valarray<bool>& validVectors() const;
>>          const std::vector<Real>& GetVector(Size index) const;
>>
>>          Size numberValidVectors() const;
>> @@ -73,7 +74,7 @@
>>          Size dimension_;
>>
>>          //!outputs
>> -        std::vector<bool> validVectors_;
>> +        std::valarray<bool> validVectors_;
>>          std::vector<std::vector<Real> > projectedVectors_;
>>
>>          //!workspace
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.cpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.cpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -70,8 +70,8 @@
>>      }
>>
>>
>> -    std::vector<bool>
>> BermudanSwaptionExerciseValue::isExerciseTime() const {
>> -        return std::vector<bool>(numberOfExercises_,true);
>> +    std::valarray<bool>
>> BermudanSwaptionExerciseValue::isExerciseTime() const {
>> +        return std::valarray<bool>(true,numberOfExercises_);
>>      }
>>
>>      MarketModelMultiProduct::CashFlow
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.hpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/bermudanswap
>> tionexercisevalue.hpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -24,6 +24,7 @@
>>  #include <ql/models/marketmodels/callability/exercisevalue.hpp>
>>  #include <ql/models/marketmodels/evolutiondescription.hpp>
>>  #include <boost/shared_ptr.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -40,7 +41,7 @@
>>          void nextStep(const CurveState&);
>>          void reset();
>>          // whether or not evolution times are exercise times
>> -        std::vector<bool> isExerciseTime() const;
>> +        std::valarray<bool> isExerciseTime() const;
>>          MarketModelMultiProduct::CashFlow value(const
>> CurveState&) const;
>>          std::auto_ptr<MarketModelExerciseValue> clone() const;
>>        private:
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/collectnodedata.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded
>> ata.cpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/collectnoded
>> ata.cpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -94,20 +94,20 @@
>>
>>          std::vector<Time> evolutionTimes =
>> evolution.evolutionTimes();
>>
>> -        std::vector<bool> isProductTime =
>> +        std::valarray<bool> isProductTime =
>>              isInSubset(evolutionTimes,
>>                         product.evolution().evolutionTimes());
>> -        std::vector<bool> isRebateTime =
>> +        std::valarray<bool> isRebateTime =
>>              isInSubset(evolutionTimes,
>>                         rebate.evolution().evolutionTimes());
>> -        std::vector<bool> isControlTime =
>> +        std::valarray<bool> isControlTime =
>>              isInSubset(evolutionTimes,
>>                         control.evolution().evolutionTimes());
>> -        std::vector<bool> isBasisTime =
>> +        std::valarray<bool> isBasisTime =
>>              isInSubset(evolutionTimes,
>>                         dataProvider.evolution().evolutionTimes());
>> -        std::vector<bool>
>> isExerciseTime(evolutionTimes.size(),false);
>> -        std::vector<bool> v = rebate.isExerciseTime();
>> +        std::valarray<bool>
>> isExerciseTime(false,evolutionTimes.size());
>> +        std::valarray<bool> v = rebate.isExerciseTime();
>>          Size exercises = 0;
>>          for (i=0; i<evolutionTimes.size(); ++i) {
>>              if (isRebateTime[i]) {
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/exercisevalue.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva
>> lue.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/exerciseva
>> lue.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -24,6 +24,7 @@
>>  // to be removed using forward declaration
>>  #include <ql/models/marketmodels/multiproduct.hpp>
>>  #include <memory>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -41,7 +42,7 @@
>>          virtual void nextStep(const CurveState&) = 0;
>>          virtual void reset() = 0;
>>          // whether or not evolution times are exercise times
>> -        virtual std::vector<bool> isExerciseTime() const = 0;
>> +        virtual std::valarray<bool> isExerciseTime() const = 0;
>>          virtual MarketModelMultiProduct::CashFlow value(
>>                                                 const
>> CurveState&) const = 0;
>>          virtual std::auto_ptr<MarketModelExerciseValue>
>> clone() const = 0;
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
>> egy.cpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
>> egy.cpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -49,8 +49,8 @@
>>
>> control_->evolution().evolutionTimes());
>>
>>          exerciseIndex_ = std::vector<Size>(relevantTimes_.size());
>> -        isExerciseTime_ =
>> std::vector<bool>(relevantTimes_.size(),false);
>> -        std::vector<bool> v = exercise_->isExerciseTime();
>> +        isExerciseTime_ =
>> std::valarray<bool>(false,relevantTimes_.size());
>> +        std::valarray<bool> v = exercise_->isExerciseTime();
>>          Size exercises = 0;
>>          Size i;
>>          for (i=0; i<relevantTimes_.size(); ++i) {
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrategy.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
>> egy.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/lsstrat
>> egy.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -55,8 +55,8 @@
>>          Size currentIndex_;
>>          Real principalInNumerairePortfolio_, newPrincipal_;
>>          std::vector<Time> exerciseTimes_, relevantTimes_;
>> -        std::vector<bool> isBasisTime_, isRebateTime_,
>> isControlTime_;
>> -        std::vector<bool> isExerciseTime_;
>> +        std::valarray<bool> isBasisTime_, isRebateTime_,
>> isControlTime_;
>> +        std::valarray<bool> isExerciseTime_;
>>          std::vector<MarketModelDiscounter> rebateDiscounters_;
>>          std::vector<MarketModelDiscounter> controlDiscounters_;
>>          mutable std::vector<std::vector<Real> > basisValues_;
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprovider.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov
>> ider.hpp      2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/nodedataprov
>> ider.hpp      2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -23,6 +23,7 @@
>>
>>  #include <ql/types.hpp>
>>  #include <vector>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -40,7 +41,7 @@
>>          virtual void nextStep(const CurveState&) = 0;
>>          virtual void reset() = 0;
>>          // whether or not evolution times are exercise times
>> -        virtual std::vector<bool> isExerciseTime() const = 0;
>> +        virtual std::valarray<bool> isExerciseTime() const = 0;
>>          virtual void values(const CurveState&,
>>                              std::vector<Real>& results) const = 0;
>>      };
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.cpp  2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.cpp  2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -60,8 +60,8 @@
>>      }
>>
>>
>> -    std::vector<bool> NothingExerciseValue::isExerciseTime() const {
>> -        return std::vector<bool>(numberOfExercises_, true);
>> +    std::valarray<bool>
>> NothingExerciseValue::isExerciseTime() const {
>> +        return std::valarray<bool>(true,
>> numberOfExercises_); // opposite way round from vector constructor
>>      }
>>
>>      MarketModelMultiProduct::CashFlow
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.hpp  2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/nothingexerc
>> isevalue.hpp  2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -36,7 +36,7 @@
>>          void nextStep(const CurveState&);
>>          void reset();
>>          // whether or not evolution times are exercise times
>> -        std::vector<bool> isExerciseTime() const;
>> +        std::valarray<bool> isExerciseTime() const;
>>          MarketModelMultiProduct::CashFlow value(const
>> CurveState&) const;
>>          std::auto_ptr<MarketModelExerciseValue> clone() const;
>>        private:
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
>> erciseadapter.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
>> erciseadapter.hpp     2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/parametricex
>> erciseadapter.hpp     2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -23,6 +23,7 @@
>>
>>  #include <ql/methods/montecarlo/exercisestrategy.hpp>
>>  #include <ql/utilities/clone.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -45,7 +46,7 @@
>>          std::vector<std::vector<Real> > parameters_;
>>          std::vector<Time> exerciseTimes_;
>>          Size currentStep_, currentExercise_;
>> -        std::vector<bool> isExerciseTime_;
>> +        std::valarray<bool> isExerciseTime_;
>>          std::vector<Size> numberOfVariables_;
>>          mutable std::vector<Real> variables_;
>>      };
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
>> tem.cpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
>> tem.cpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -59,8 +59,8 @@
>>          currentIndex_ = 0;
>>      }
>>
>> -    std::vector<bool> SwapBasisSystem::isExerciseTime() const {
>> -        return std::vector<bool>(exerciseTimes_.size(), true);
>> +    std::valarray<bool> SwapBasisSystem::isExerciseTime() const {
>> +        return std::valarray<bool>(true, exerciseTimes_.size());
>>      }
>>
>>      void SwapBasisSystem::values(const CurveState& currentState,
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissystem.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
>> tem.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/swapbasissys
>> tem.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -35,7 +35,7 @@
>>          const EvolutionDescription& evolution() const;
>>          void nextStep(const CurveState&);
>>          void reset();
>> -        std::vector<bool> isExerciseTime() const;
>> +        std::valarray<bool> isExerciseTime() const;
>>          void values(const CurveState&,
>>                      std::vector<Real>& results) const;
>>          std::auto_ptr<MarketModelBasisSystem> clone() const;
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.cpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.cpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -54,8 +54,8 @@
>>          currentStep_ = 0;
>>      }
>>
>> -    std::vector<bool> TriggeredSwapExercise::isExerciseTime() const {
>> -        return std::vector<bool>(numberOfExercises(), true);
>> +    std::valarray<bool>
>> TriggeredSwapExercise::isExerciseTime() const {
>> +        return std::valarray<bool>(true,numberOfExercises());
>>      }
>>
>>      void TriggeredSwapExercise::values(const CurveState& state,
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.hpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/triggeredswa
>> pexercise.hpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -36,7 +36,7 @@
>>          const EvolutionDescription& evolution() const;
>>          void nextStep(const CurveState&);
>>          void reset();
>> -        std::vector<bool> isExerciseTime() const;
>> +        std::valarray<bool> isExerciseTime() const;
>>          void values(const CurveState&,
>>                      std::vector<Real>& results) const;
>>
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/callability/upperboundengine.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden
>> gine.hpp      2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/callability/upperbounden
>> gine.hpp      2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -27,6 +27,7 @@
>>  #include <ql/math/statistics/sequencestatistics.hpp>
>>  #include <ql/utilities/clone.hpp>
>>  #include <utility>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -70,7 +71,7 @@
>>          Size underlyingOffset_, rebateOffset_, hedgeOffset_,
>> hedgeRebateOffset_;
>>          Size numberOfProducts_;
>>          Size numberOfSteps_;
>> -        std::vector<bool> isExerciseTime_;
>> +        std::valarray<bool> isExerciseTime_;
>>
>>          // workspace
>>          std::vector<Size> numberCashFlowsThisStep_;
>>
>> Modified: trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/constrainedevolver.hpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -22,6 +22,7 @@
>>  #define quantlib_constrained_evolver_hpp
>>
>>  #include <ql/models/marketmodels/evolver.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -45,7 +46,7 @@
>>          //! call before each path
>>          virtual void setThisConstraint(
>>              const std::vector<Rate>& rateConstraints,
>> -            const std::vector<bool>& isConstraintActive) = 0;
>> +            const std::valarray<bool>& isConstraintActive) = 0;
>>      };
>>
>>  }
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
>> ate.cpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
>> ate.cpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -33,7 +33,10 @@
>>        cmSwapRates_(numberOfRates_),
>>        cmSwapAnnuities_(numberOfRates_,rateTaus_[numberOfRates_-1]),
>>        cotSwapRates_(numberOfRates_),
>> -      cotAnnuities_(numberOfRates_, rateTaus_[numberOfRates_-1]) {}
>> +      cotAnnuities_(numberOfRates_,
>> +       rateTaus_[numberOfRates_-1]),
>> +      firstCotAnnuityComped_(numberOfRates_)
>> +     {}
>>
>>      void LMMCurveState::setOnForwardRates(const
>> std::vector<Rate>& rates,
>>                                            Size firstValidIndex) {
>> @@ -60,6 +63,8 @@
>>          // lazy evaluation of:
>>          // - coterminal swap rates/annuities
>>          // - constant maturity swap rates/annuities
>> +
>> +             firstCotAnnuityComped_ = numberOfRates_;
>>      }
>>
>>      void LMMCurveState::setOnDiscountRatios(const
>> std::vector<DiscountFactor>& discRatios,
>> @@ -86,6 +91,8 @@
>>          // lazy evaluation of:
>>          // - coterminal swap rates/annuities
>>          // - constant maturity swap rates/annuities
>> +
>> +             firstCotAnnuityComped_ = numberOfRates_;
>>      }
>>
>>      Real LMMCurveState::discountRatio(Size i, Size j) const {
>> @@ -107,19 +114,37 @@
>>          QL_REQUIRE(numeraire>=first_ && numeraire<=numberOfRates_,
>>                     "invalid numeraire");
>>          QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index");
>> -        coterminalFromDiscountRatios(first_,
>> -                                     discRatios_, rateTaus_,
>> -                                     cotSwapRates_, cotAnnuities_);
>> -        return cotAnnuities_[i]/discRatios_[numeraire];
>> +     //        coterminalFromDiscountRatios(first_,
>> +     //                                   discRatios_, rateTaus_,
>> +    //                                 cotSwapRates_, cotAnnuities_);
>> +
>> +             if (firstCotAnnuityComped_ <=i)
>> +                     return  cotAnnuities_[i]/discRatios_[numeraire];
>> +
>> +             if (firstCotAnnuityComped_ == numberOfRates_)
>> +             {
>> +                     cotAnnuities_[numberOfRates_-1] =
>> rateTaus_[numberOfRates_-1]*discRatios_[numberOfRates_];
>> +                     --firstCotAnnuityComped_;
>> +             }
>> +
>> +             for (int j=
>> static_cast<int>(firstCotAnnuityComped_)-1; j
>>    
>>> =static_cast<int>(i); --j)
>>>      
>> +                     cotAnnuities_[j] =
>> cotAnnuities_[j+1]+rateTaus_[j]*discRatios_[j+1];
>> +
>> +             firstCotAnnuityComped_ = i;
>> +
>> +             return cotAnnuities_[i]/discRatios_[numeraire];
>>      }
>>
>>      Rate LMMCurveState::coterminalSwapRate(Size i) const {
>>          QL_REQUIRE(first_<numberOfRates_, "curve state not
>> initialized yet");
>>          QL_REQUIRE(i>=first_ && i<=numberOfRates_, "invalid index");
>> -        coterminalFromDiscountRatios(first_,
>> -                                     discRatios_, rateTaus_,
>> -                                     cotSwapRates_, cotAnnuities_);
>> -        return cotSwapRates_[i];
>> +    //    coterminalFromDiscountRatios(first_,
>> +      //                               discRatios_, rateTaus_,
>> +        //                             cotSwapRates_, cotAnnuities_);
>> +  //      return cotSwapRates_[i];
>> +
>> +             Real res = (discRatios_[i]/
>> discRatios_[numberOfRates_]
>> -1.0)/coterminalSwapAnnuity(numberOfRates_,i);
>> +             return res;
>>      }
>>
>>      Rate LMMCurveState::cmSwapAnnuity(Size numeraire,
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvestate.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
>> ate.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/curvestates/lmmcurvest
>> ate.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -89,6 +89,8 @@
>>          mutable std::vector<Real> cmSwapAnnuities_;
>>          mutable std::vector<Rate> cotSwapRates_;
>>          mutable std::vector<Real> cotAnnuities_;
>> +
>> +             mutable Size firstCotAnnuityComped_;
>>      };
>>
>>  }
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.cpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.cpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -133,7 +133,7 @@
>>
>>      void LogNormalFwdRateEulerConstrained::setThisConstraint(
>>                                  const std::vector<Rate>&
>> rateConstraints,
>> -                                const std::vector<bool>&
>> isConstraintActive)
>> +                                const std::valarray<bool>&
>> isConstraintActive)
>>      {
>>          QL_REQUIRE(rateConstraints.size() == numeraires_.size(),
>>                     "wrong number of constraints specified");
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.hpp 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/evolvers/lognormalfwdrat
>> eeulerconstrained.hpp 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -25,6 +25,7 @@
>>  #include <ql/models/marketmodels/constrainedevolver.hpp>
>>  #include <ql/models/marketmodels/curvestates/lmmcurvestate.hpp>
>>  #include
>> <ql/models/marketmodels/driftcomputation/lmmdriftcalculator.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -47,7 +48,7 @@
>>              const std::vector<Size>& endIndexOfSwapRate);
>>          virtual void setThisConstraint(
>>              const std::vector<Rate>& rateConstraints,
>> -            const std::vector<bool>& isConstraintActive);
>> +            const std::valarray<bool>& isConstraintActive);
>>          //@}
>>          //! \name MarketModel interface
>>          //@{
>> @@ -71,7 +72,7 @@
>>
>>          //often changing inputs
>>          std::vector<Rate> rateConstraints_;
>> -        std::vector<bool> isConstraintActive_;
>> +        std::valarray<bool> isConstraintActive_;
>>
>>          // fixed variables
>>          std::vector<std::vector<Real> > fixedDrifts_;
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.cpp     2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.cpp     2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -30,7 +30,7 @@
>>
>> VolatilityBumpInstrumentJacobian::VolatilityBumpInstrumentJaco
>> bian(const VegaBumpCollection& bumps,
>>          const std::vector<Swaption>& swaptions,
>>          const std::vector<Cap>& caps)
>> -        : bumps_(bumps), swaptions_(swaptions), caps_(caps),
>> computed_(swaptions.size()+caps.size(), false),
>> +        : bumps_(bumps), swaptions_(swaptions), caps_(caps),
>> computed_(false,swaptions.size()+caps.size()),
>>
>> derivatives_(swaptions.size()+caps.size(),std::vector<Real>(bu
>> mps.numberBumps())),
>>
>> bumpMatrix_(swaptions.size()+caps.size(),bumps_.numberBumps())
>>      {
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.hpp     2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/bumpinstr
>> umentjacobian.hpp     2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -25,6 +25,7 @@
>>
>>  #include <ql/models/marketmodels/marketmodel.hpp>
>>  #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib
>>  {
>> @@ -68,7 +69,7 @@
>>           VegaBumpCollection bumps_;
>>           std::vector<Swaption> swaptions_;
>>           std::vector<Cap> caps_;
>> -         mutable std::vector<bool> computed_;
>> +         mutable std::valarray<bool> computed_;
>>           mutable bool allComputed_;
>>           mutable std::vector<std::vector<Real> > derivatives_;
>>
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
>> luster.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
>> luster.cpp    2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/pathwisegreeks/vegabumpc
>> luster.cpp    2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -20,6 +20,7 @@
>>  #include <ql/models/marketmodels/pathwisegreeks/vegabumpcluster.hpp>
>>  #include <ql/errors.hpp>
>>  #include <ql/models/marketmodels/evolutiondescription.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -149,14 +150,14 @@
>>      {
>>          if (checked_)
>>              return full_;
>> -        std::vector<std::vector<std::vector<bool> > > v;
>> +        std::vector<std::vector<std::valarray<bool> > > v;
>>
>>          Size factors = associatedVolStructure_->numberOfFactors();
>>
>> -        std::vector<bool> model(factors);
>> -        std::fill(model.begin(), model.end(), false);
>> +        std::valarray<bool> model(false,factors);
>> +    //    std::fill(model.begin(), model.end(), false);
>>
>> -        std::vector<std::vector<bool> > modelTwo;
>> +        std::vector<std::valarray<bool> > modelTwo;
>>          for (Size i=0; i <
>> associatedVolStructure_->numberOfRates(); ++i)
>>              modelTwo.push_back(model);
>>
>> @@ -189,15 +190,15 @@
>>          if (checked_)
>>              return nonOverlapped_;
>>
>> -        std::vector<std::vector<std::vector<bool> > > v;
>> +        std::vector<std::vector<std::valarray<bool> > > v;
>>
>>          Size factors = associatedVolStructure_->numberOfFactors();
>>
>>
>> -        std::vector<bool> model(factors);
>> -        std::fill(model.begin(), model.end(), false);
>> +        std::valarray<bool> model(false,factors);
>> +        //std::fill(model.begin(), model.end(), false);
>>
>> -        std::vector<std::vector<bool> > modelTwo;
>> +        std::vector<std::valarray<bool> > modelTwo;
>>          for (Size i=0; i <
>> associatedVolStructure_->numberOfRates(); ++i)
>>              modelTwo.push_back(model);
>>
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/products/compositeproduct.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/products/compositeprod
>> uct.hpp       2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/products/compositeprod
>> uct.hpp       2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -23,6 +23,7 @@
>>  #include <ql/models/marketmodels/multiproduct.hpp>
>>  #include <ql/models/marketmodels/evolutiondescription.hpp>
>>  #include <ql/utilities/clone.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -76,7 +77,7 @@
>>          Size currentIndex_;
>>          std::vector<Time> cashflowTimes_;
>>          std::vector<std::vector<Time> > allEvolutionTimes_;
>> -        std::vector<std::vector<bool> > isInSubset_;
>> +        std::vector<std::valarray<bool> > isInSubset_;
>>      };
>>
>>  }
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
>> pecifiedmultiproduct.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
>> pecifiedmultiproduct.hpp      2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/calls
>> pecifiedmultiproduct.hpp      2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -25,6 +25,7 @@
>>  #include <ql/models/marketmodels/multiproduct.hpp>
>>  #include <ql/methods/montecarlo/exercisestrategy.hpp>
>>  #include <ql/utilities/clone.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -59,7 +60,7 @@
>>          Clone<ExerciseStrategy<CurveState> > strategy_;
>>          Clone<MarketModelMultiProduct> rebate_;
>>          EvolutionDescription evolution_;
>> -        std::vector<std::vector<bool> > isPresent_;
>> +        std::vector<std::valarray<bool> > isPresent_;
>>          std::vector<Time> cashFlowTimes_;
>>          Size rebateOffset_;
>>          bool wasCalled_;
>>
>> Modified:
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
>> iseadapter.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
>> iseadapter.hpp        2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/products/multistep/exerc
>> iseadapter.hpp        2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -50,7 +50,7 @@
>>        private:
>>          Clone<MarketModelExerciseValue> exercise_;
>>          Size numberOfProducts_;
>> -        std::vector<bool> isExerciseTime_;
>> +        std::valarray<bool> isExerciseTime_;
>>          Size currentIndex_;
>>      };
>>
>>
>> Modified: trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.cpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -122,11 +122,12 @@
>>          product_->reset();
>>          Real principalInNumerairePortfolio = 1.0;
>>
>> -        if (storeRates) {
>> -            std::fill(constraintsActive_.begin(),
>> -                      constraintsActive_.end(),
>> -                      false);
>> -        }
>> +        if (storeRates)
>> +                     constraintsActive_ =false;
>> +//            std::fill(constraintsActive_.begin(),
>> +  //                    constraintsActive_.end(),
>> +    //                  false);
>> +      //  }
>>
>>          bool done = false;
>>          do {
>>
>> Modified: trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
>> ===================================================================
>> ---
>> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++
>> trunk/QuantLib/ql/models/marketmodels/proxygreekengine.hpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -26,6 +26,7 @@
>>
>>  #include <ql/math/statistics/sequencestatistics.hpp>
>>  #include <ql/utilities/clone.hpp>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>> @@ -69,7 +70,7 @@
>>
>>          // workspace
>>          std::vector<Rate> constraints_;
>> -        std::vector<bool> constraintsActive_;
>> +        std::valarray<bool> constraintsActive_;
>>          std::vector<Real> numerairesHeld_;
>>          std::vector<Size> numberCashFlowsThisStep_;
>>          std::vector<std::vector<MarketModelMultiProduct::CashFlow> >
>>
>> Modified: trunk/QuantLib/ql/models/marketmodels/utilities.cpp
>> ===================================================================
>> --- trunk/QuantLib/ql/models/marketmodels/utilities.cpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++ trunk/QuantLib/ql/models/marketmodels/utilities.cpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -22,12 +22,13 @@
>>  #include <ql/models/marketmodels/utilities.hpp>
>>  #include <ql/errors.hpp>
>>  #include <algorithm>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>>      void mergeTimes(const std::vector<std::vector<Time> >& times,
>>                      std::vector<Time>& mergedTimes,
>> -                    std::vector<std::vector<bool> >& isPresent) {
>> +                    std::vector<std::valarray<bool> >& isPresent) {
>>
>>          std::vector<Time> allTimes;
>>          for (Size i=0; i<times.size(); i++) {
>> @@ -55,10 +56,10 @@
>>          }
>>      }
>>
>> -    std::vector<bool> isInSubset(const std::vector<Time>& set,
>> +    std::valarray<bool> isInSubset(const std::vector<Time>& set,
>>                                   const std::vector<Time>& subset) {
>>
>> -        std::vector<bool> result(set.size(), false);
>> +        std::valarray<bool> result(false,set.size());
>>          Size dimsubSet = subset.size();
>>          if (dimsubSet==0)
>>              return result;
>>
>> Modified: trunk/QuantLib/ql/models/marketmodels/utilities.hpp
>> ===================================================================
>> --- trunk/QuantLib/ql/models/marketmodels/utilities.hpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++ trunk/QuantLib/ql/models/marketmodels/utilities.hpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -24,12 +24,13 @@
>>
>>  #include <ql/types.hpp>
>>  #include <vector>
>> +#include <valarray>
>>
>>  namespace QuantLib {
>>
>>      void mergeTimes(const std::vector<std::vector<Time> >& times,
>>                      std::vector<Time>& mergedTimes,
>> -                    std::vector<std::vector<bool> >& isPresent);
>> +                    std::vector<std::valarray<bool> >& isPresent);
>>
>>      /*! Look for elements of a set in a subset.
>>          Returns a vector of booleans such that:
>> @@ -37,7 +38,7 @@
>>
>>         \pre both vectors must be strictly increasing.
>>      */
>> -    std::vector<bool> isInSubset(const std::vector<Time>& set,
>> +    std::valarray<bool> isInSubset(const std::vector<Time>& set,
>>                                   const std::vector<Time>& subset);
>>
>>      //! check for strictly increasing times, first time
>> greater than zero
>>
>> Modified: trunk/QuantLib/test-suite/marketmodel.cpp
>> ===================================================================
>> --- trunk/QuantLib/test-suite/marketmodel.cpp 2009-11-09
>> 16:35:59 UTC (rev 16724)
>> +++ trunk/QuantLib/test-suite/marketmodel.cpp 2009-11-10
>> 01:21:02 UTC (rev 16725)
>> @@ -1408,7 +1408,7 @@
>>
>> std::vector<boost::shared_ptr<MarketModelEvolver> >
>>                                  innerEvolvers;
>>
>> -                            std::vector<bool> isExerciseTime =
>> +                            std::valarray<bool> isExerciseTime =
>>
>> isInSubset(evolution.evolutionTimes(),
>>                                  naifStrategy.exerciseTimes());
>>                              for (Size s=0; s <
>> isExerciseTime.size(); ++s) {
>> @@ -1586,7 +1586,7 @@
>>
>> std::vector<boost::shared_ptr<MarketModelEvolver> >
>>                                  innerEvolvers;
>>
>> -                            std::vector<bool> isExerciseTime =
>> +                            std::valarray<bool> isExerciseTime =
>>
>> isInSubset(evolution.evolutionTimes(),
>>                                  exerciseStrategy.exerciseTimes());
>>                              for (Size s=0; s <
>> isExerciseTime.size(); ++s) {
>> @@ -1757,7 +1757,7 @@
>>                                  evolvers[i]);
>>
>> std::vector<boost::shared_ptr<MarketModelEvolver> >
>>                                  innerEvolvers;
>> -                            std::vector<bool> isExerciseTime =
>> +                            std::valarray<bool> isExerciseTime =
>>
>> isInSubset(evolution.evolutionTimes(),
>>                                  exerciseStrategy.exerciseTimes());
>>                              for (Size s=0; s <
>> isExerciseTime.size(); ++s) {
>> @@ -4611,7 +4611,7 @@
>>      std::vector<Time> set, subset;
>>      for (Size i=0; i<dim; i++) set.push_back(i*1.0);
>>      for (Size i=0; i<dim; i++) subset.push_back(dim+i*1.0);
>> -    std::vector<bool> result = isInSubset(set, subset);
>> +    std::valarray<bool> result = isInSubset(set, subset);
>>      if (printReport_) {
>>          for (Size i=0; i<dim; i++) {
>>              BOOST_MESSAGE(io::ordinal(i+1) << ":" <<
>>
>> Modified: trunk/QuantLib/test-suite/quantlibtestsuite.cpp
>> ===================================================================
>> --- trunk/QuantLib/test-suite/quantlibtestsuite.cpp
>> 2009-11-09 16:35:59 UTC (rev 16724)
>> +++ trunk/QuantLib/test-suite/quantlibtestsuite.cpp
>> 2009-11-10 01:21:02 UTC (rev 16725)
>> @@ -314,6 +314,7 @@
>>      //tests for deprecated classes
>>      test->add(LiborMarketModelTest::suite());
>>      test->add(LiborMarketModelProcessTest::suite());
>> +
>>
>>      test->add(QUANTLIB_TEST_CASE(stopTimer));
>>
>>
>>
>> This was sent by the SourceForge.net collaborative
>> development platform, the world's largest Open Source
>> development site.
>>
>> --------------------------------------------------------------
>> ----------------
>> Let Crystal Reports handle the reporting - Free Crystal
>> Reports 2008 30-Day
>> trial. Simplify your report design, integration and
>> deployment - and focus on
>> what you do best, core application coding. Discover what's new with
>> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>> _______________________________________________
>> QuantLib-cvs mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-cvs
>>
>>    
>
> This e-mail is subject to terms available at the following link:
> https://www.bancaimi.com/bimi/emaildisclaimer.jsf.
> Please read the hyperlink carefully as it contains the conditions governing any electronic communications between you and Banca IMI SpA. By messaging with Banca IMI SpA you agree to such terms and conditions of use. Banca IMI SpA may amend these terms and conditions at any time without notice. You should check the relevant webpage from time to time to review the current terms and conditions because they are binding on you. If you received this transmission in error, please immediately contact the sender and destroy the material in its entirety, whether in electronic or hard copy format. Please note that, if you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein (including any reliance thereon) is strictly prohibited and may be unlawful.
>
> Prima di stampare, pensa all'ambiente ** Think about the environment before printing
>
> ------------------------------------------------------------------------------
> Join us December 9, 2009 for the Red Hat Virtual Experience,
> a free event focused on virtualization and cloud computing.
> Attend in-depth sessions from your desk. Your couch. Anywhere.
> http://p.sf.net/sfu/redhat-sfdev2dev
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>
>  


------------------------------------------------------------------------------
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing.
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev