#include "oo/Function.h"
#include "oo/MidpointIntegrator.h"

namespace integrators
{
  namespace oo
  {
    // MidpointIntegrator implementation

    MidpointIntegrator::MidpointIntegrator ()
    {
      function_m = 0;
    }

    void MidpointIntegrator::setFunction (functions::Function *
                                          function_to_integrate)
    {
      function_m = function_to_integrate;
    }

    double MidpointIntegrator::integrate (double lowBound, double upBound,
                                          int count)
    {
      double sum = 0.0;
      double h = (upBound - lowBound) / static_cast < double >(count);
      for (int i = 0; i < count; i++)
        {
          double x = lowBound + h * (i + 0.5);
          sum = sum + function_m->evaluate (x);
        }
      return sum * h;
    }
  }
}