CFL
Slice.hpp
Go to the documentation of this file.
1 //Copyright (c) Dmitry Kramkov, 2000-2006. All rights reserved.
2 
3 #ifndef __cflSlice_hpp__
4 #define __cflSlice_hpp__
5 
6 #include <algorithm>
7 #include "cfl/Model.hpp"
8 #include "cfl/Error.hpp"
9 
21 namespace cfl
22 {
23  class IModel;
24 
32 
34 
40  class Slice
41  {
42  public:
52  explicit Slice(const IModel * pModel = 0, unsigned iEventTime = 0, double dValue = 0);
53 
67  Slice(const IModel & rModel, unsigned iEventTime, const std::vector<unsigned> & rDependence,
68  const std::valarray<double> & rValues);
69 
75  Slice & operator=(const Slice & rSlice);
76 
83  Slice & operator=(double dValue);
84 
90  Slice & operator+=(double dValue);
91 
97  Slice & operator-=(double dValue);
98 
104  Slice & operator*=(double dValue);
105 
111  Slice & operator/=(double dValue);
112 
120  Slice & operator+=(const Slice & rSlice);
121 
129  Slice & operator-=(const Slice & rSlice);
130 
137  Slice & operator*=(const Slice & rSlice);
138 
145  Slice & operator/=(const Slice & rSlice);
146 
152  Slice apply(double (*f)(double)) const;
153 
161  void rollback(unsigned iEventTime);
162 
168  const IModel * ptrToModel() const;
169 
174  unsigned timeIndex() const;
175 
182  const std::vector<unsigned> & dependence() const;
183 
188  const std::valarray<double> & values() const;
189 
199  void assign(const IModel & rModel,
200  unsigned iEventTime,
201  const std::vector<unsigned> & rDependence,
202  const std::valarray<double> & rValues);
203 
212  void assign(unsigned iEventTime, const std::vector<unsigned> & rDependence,
213  const std::valarray<double> & rValues);
214 
221  void assign(const std::vector<unsigned> & rDependence,
222  const std::valarray<double> & rValues);
223 
228  void assign(const std::valarray<double> & rValues);
229 
234  void assign(const IModel & rModel);
235 
236  private:
237  const IModel * m_pModel;
238  unsigned m_iEventTime;
239  std::vector<unsigned> m_uDependence;
240  std::valarray<double> m_uValues;
241  Slice & apply(const Slice & rSlice,
242  void (*func)(std::valarray<double> & , const std::valarray<double> & ));
243  };
244 
250  Slice operator-(const Slice & rSlice);
251 
260  Slice operator+(const Slice & rSlice1, const Slice & rSlice2);
261 
270  Slice operator-(const Slice & rSlice1, const Slice & rSlice2);
271 
280  Slice operator*(const Slice & rSlice1, const Slice & rSlice2);
281 
290  Slice operator/(const Slice & rSlice1, const Slice & rSlice2);
291 
298  Slice operator+(const Slice & rSlice, double dValue);
299 
306  Slice operator-(const Slice & rSlice, double dValue);
307 
314  Slice operator*(const Slice & rSlice, double dValue);
315 
322  Slice operator/(const Slice & rSlice, double dValue);
323 
330  Slice operator+(double dValue, const Slice & rSlice);
331 
338  Slice operator-(double dValue, const Slice & rSlice);
339 
346  Slice operator*(double dValue, const Slice & rSlice);
347 
354  Slice operator/(double dValue, const Slice & rSlice);
355 
362  Slice max(const Slice & rSlice, double dValue);
363 
370  Slice min(const Slice & rSlice, double dValue);
371 
380  Slice max(const Slice & rSlice1, const Slice & rSlice2);
381 
390  Slice min(const Slice & rSlice1, const Slice & rSlice2);
391 
398  Slice max(double dValue, const Slice & rSlice);
399 
406  Slice min(double dValue, const Slice & rSlice);
407 
415  Slice pow(const Slice & rSlice, double dPower);
416 
422  Slice abs(const Slice & rSlice);
423 
429  Slice exp(const Slice & rSlice);
430 
436  Slice log(const Slice & rSlice);
437 
443  Slice sqrt(const Slice & rSlice);
444 
451  Slice indicator(const Slice & rSlice, double dBarrier);
452 
459  Slice indicator(double dBarrier, const Slice & rSlice);
460 
469  Slice indicator(const Slice & rSlice, const Slice & rBarrier);
470 
482  Slice rollback(const Slice & rSlice, unsigned iEventTime);
483 
487  MultiFunction interpolate(const Slice & rSlice);
488 
499  MultiFunction interpolate(const Slice & rSlice,
500  const std::vector<unsigned> & rState);
501 
513  MultiFunction interpolate(const Slice & rSlice, unsigned iStates);
514 
523  double atOrigin(const Slice & rSlice);
524 
526 }
527 
528 #include "cfl/Inline/iSlice.hpp"
529 #endif // of__cflSlice_hpp__
Function operator-(const Function &rF)
Slice & operator-=(double dValue)
Function max(const Function &rF, const Function &rG)
Function pow(const Function &rF, double dV)
void assign(const IModel &rModel, unsigned iEventTime, const std::vector< unsigned > &rDependence, const std::valarray< double > &rValues)
Slice & operator+=(double dValue)
Slice & operator*=(double dValue)
Exceptions in cfl library.
const std::valarray< double > & values() const
Slice apply(double(*f)(double)) const
double atOrigin(const Slice &rSlice)
void rollback(unsigned iEventTime)
Interface class for financial models.
Definition: Model.hpp:31
MultiFunction interpolate(const Slice &rSlice)
const std::vector< unsigned > & dependence() const
Representation of random payoffs in the library.
Definition: Slice.hpp:40
Function log(const Function &rF)
unsigned timeIndex() const
Function exp(const Function &rF)
Function abs(const Function &rF)
Function operator/(const Function &rF, const Function &rG)
Function operator*(const Function &rF, const Function &rG)
Interface class for financial models.
Function min(const Function &rF, const Function &rG)
Slice(const IModel *pModel=0, unsigned iEventTime=0, double dValue=0)
Slice & operator=(const Slice &rSlice)
Slice & operator/=(double dValue)
Main namespace for cfl library.
Definition: Approx.hpp:22
const IModel * ptrToModel() const
Standard concrete class for multi-dimensional function object.
Definition: MultiFunction.hpp:79
Slice indicator(const Slice &rSlice, double dBarrier)
Function sqrt(const Function &rF)
Function operator+(const Function &rF, const Function &rG)