#ifndef MonteCarloIntegrator_CCA_H
#define MonteCarloIntegrator_CCA_H

#include "ports/Integrator_CCA.h"
#include "ports/Function_CCA.h"
#include "ports/RandomGenerator_CCA.h"

namespace integrators
{
  namespace ccaimpl
  {
    /**
     * A class that implements the Ingrator interface
     * using the Monte Carlo integration technique.
     */
    class MonteCarloIntegrator:
      public virtual integrators::ccaports::Integrator,
      public virtual gov::cca::Component
    {

    public:

      MonteCarloIntegrator ();
      ~MonteCarloIntegrator ();

      virtual double integrate (double lowBound, double upBound, int count);

      virtual void setServices (gov::cca::Services * services);

    private:

        functions::ccaports::Function * function_m;
        randomgen::ccaports::RandomGenerator * random_m;
        gov::cca::Services * frameworkServices;
    };

  }
}
#endif                          // MonteCarloIntegrator_CCA_H