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


namespace Genfun {
  
  FUNCTION_OBJECT_IMP(Airy)
    inline
    Airy::Airy(Type type):
      _type(type)
  {
  }

  inline
  Airy::~Airy() {
  }

  inline
  Airy::Airy(const Airy & right):
    _type(right._type)
  {
  }
  
  
  
  inline
  double Airy::operator() (double x) const {
    gsl_sf_result result;
    if (_type==Ai) {
      int status = gsl_sf_airy_Ai_e(x, GSL_PREC_DOUBLE, &result);
      if (status!=0) {
	std::cerr << "Warning, GSL function gsl_sf_airy_ai" 
		  << " return code" << status << std::endl;
	raise(SIGFPE);
      }
      return result.val;
    }
    else if (_type==Bi) {
      int status = gsl_sf_airy_Bi_e( x, GSL_PREC_DOUBLE,  &result);
      if (status!=0) {
	std::cerr << "Warning, GSL function gsl_sf_airy_bi" 
		  << " return code" << status << std::endl;
	raise(SIGFPE);
      }
      return result.val;
    }
    return result.val;
  }
  
} // end namespace Genfun
