// -*- C++ -*-
// $Id: 
#include "gsl/gsl_sf_legendre.h"
#include <cmath>
#include <signal.h>
#include <assert.h>


namespace Genfun {
  
  FUNCTION_OBJECT_IMP(Legendre)
    
    inline
    Legendre::Legendre(unsigned int order):
      _order(order)
  {
  }
  inline
  Legendre::~Legendre() {
  }
  inline
  Legendre::Legendre(const Legendre & right):
    _order(right._order)
  {
  }
  
  
  inline
  double Legendre::operator() (double x) const {
    gsl_sf_result result;
    int status = gsl_sf_legendre_Pl_e(_order,x, &result);
    if (status!=0) {
      std::cerr << "Warning, GSL function gsl_sf_legendre_e" 
		<< " return code" << status << std::endl;
      raise(SIGFPE);
    }
    return result.val;
  }
  
} // end namespace Genfun
