/*@@@@@@@@@@@@@@@@@@@@@@@@ Algorithm.h @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 Random Option Pricing
 Summer 2002
 Authors: A. Korobchevsky
          S. Ferrando
 Ryerson University ALL RIGHTS RESERVED
 
 Purpose: Abstract root class for all algorithms
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

#ifndef ALG__H_
#define ALG__H_
 
#include <cmath>
#include <cstdio> 
#include <vector>

#include "../Und/Underlying.h" 
#include "../Und/Binom.h" 
#include "../Der/EuropeanCall.h"
#include "../Der/EuropeanPut.h"
#include "../Der/EuropeanStrike.h"
#include "../Der/LookBack.h"
#include "../Der/DownOut.h"
#include "../Der/FixedStrike.h"
#include "../utilities.h" 

struct Algorithm
{

/*@@@@@@@@@@@@@@@@@@@@@@@@  calcResults  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 Function: calcResults
 Purpose: Compute the option price and it's standard error
 Param: Underlying - underlying function object
        Derivative - derivative function object
	double& - Option value (output param.)  
	double& - Standard error (output param.)
 Precondition: Underlying, Derivative and RNG parameters initialized
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  virtual void calcResults(Underlying*, Derivative*, vector<double>&, vector<double>&) = 0;

  /* Number of simulations */
  int M;
  int M0;
  int gap;
};

#endif
