1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2006 Klaus Spanderen 5 6 This file is part of QuantLib, a free-software/open-source library 7 for financial quantitative analysts and developers - http://quantlib.org/ 8 9 QuantLib is free software: you can redistribute it and/or modify it 10 under the terms of the QuantLib license. You should have received a 11 copy of the license along with this program; if not, please email 12 <quantlib-dev@lists.sf.net>. The license is also available online at 13 <http://quantlib.org/license.shtml>. 14 15 This program is distributed in the hope that it will be useful, but WITHOUT 16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 17 FOR A PARTICULAR PURPOSE. See the license for more details. 18 */ 19 20 /*! \file earlyexercisepathpricer.hpp 21 \brief base class for early exercise single-path pricers 22 */ 23 24 #ifndef quantlib_early_exercise_path_pricer_hpp 25 #define quantlib_early_exercise_path_pricer_hpp 26 27 #include <ql/math/array.hpp> 28 #include <ql/methods/montecarlo/path.hpp> 29 #include <ql/methods/montecarlo/multipath.hpp> 30 #include <ql/functional.hpp> 31 32 namespace QuantLib { 33 34 template <class PathType> 35 class EarlyExerciseTraits { 36 // dummy definition, will not work 37 }; 38 39 template <> 40 class EarlyExerciseTraits<Path> { 41 public: 42 typedef Real StateType; pathLength(const Path & path)43 static Size pathLength(const Path& path) { 44 return path.length(); 45 } 46 }; 47 48 template <> 49 class EarlyExerciseTraits<MultiPath> { 50 public: 51 typedef Array StateType; pathLength(const MultiPath & path)52 static Size pathLength(const MultiPath& path) { 53 return path.pathSize(); 54 } 55 }; 56 57 //! base class for early exercise path pricers 58 /*! Returns the value of an option on a given path and given time. 59 60 \ingroup mcarlo 61 */ 62 template<class PathType, 63 class TimeType=Size, class ValueType=Real> 64 class EarlyExercisePathPricer { 65 public: 66 typedef typename EarlyExerciseTraits<PathType>::StateType StateType; 67 ~EarlyExercisePathPricer()68 virtual ~EarlyExercisePathPricer() {} 69 virtual ValueType operator()(const PathType& path, 70 TimeType t) const = 0; 71 72 virtual StateType 73 state(const PathType& path, TimeType t) const = 0; 74 virtual std::vector<ext::function<ValueType(StateType)> > 75 basisSystem() const = 0; 76 }; 77 } 78 79 80 #endif 81